Benchmark

Meça com precisão o desempenho do seu código no Android Studio.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
17 de novembro de 2021 1.0.0 - - 1.1.0-alpha12

Declarar dependências

Para adicionar uma dependência à biblioteca Benchmark, é preciso adicionar o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

Adicione as dependências dos artefatos necessários no arquivo build.gradle para seu app ou módulo:

Groovy

dependencies {
    androidTestImplementation "androidx.benchmark:benchmark-junit4:1.0.0"
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Kotlin

dependencies {
    androidTestImplementation("androidx.benchmark:benchmark-junit4:1.0.0")
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

A biblioteca Benchmark também fornece um plug-in para Gradle para ser usado com seu módulo de comparações. Este plug-in define os padrões de configuração do build para o módulo, configura a cópia de saída de comparativo para o host e fornece a tarefa ./gradlew lockClocks.

Para usar o plug-in, inclua o seguinte classpath no arquivo build.gradle de nível superior:

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath "androidx.benchmark:benchmark-gradle-plugin:1.0.0"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath("androidx.benchmark:benchmark-gradle-plugin:1.0.0")
    }
}

Em seguida, aplique o plug-in ao arquivo build.gradle do seu módulo de comparações.

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Macrobenchmark

Para usar o Macrobenchmark no seu projeto, adicione as seguintes dependências ao arquivo build.gradle do seu app ou módulo:

Groovy

dependencies {
  androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.1.0-alpha11"
}

Kotlin

dependencies {
  androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.1.0-alpha11")
}

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema existente clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.1.0

Versão 1.1.0-alpha12

17 de novembro de 2021

Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha12. A versão 1.1.0-alpha12 contém estas confirmações.

Novos recursos

  • Adição de TraceSectionMetric experimental para medições de tempo personalizadas baseadas em trace (I99db1, b/204572664).

Correções de bugs

  • Ativação do dispositivo a cada iteração para garantir que a IU possa ser testada. A tela de bloqueio precisa estar desativada (Ibfa28, b/180963442).
  • Correção de várias falhas no modo de criação de perfil do StackSampling em emuladores e dispositivos sem acesso root (Icdbda, b/202719335).
  • Remoção da suspensão de 0,5 segundo no final de cada iteração. Se você perceber métricas ausentes com essa mudança, informe um bug (Iff6aa).
  • Redução das chances de perda de dados e menor sobrecarga de memória com o rastreamento (Id2544, b/199324831, b/204448861).
  • Redução do tamanho do trace em cerca de 40% ao mudar para o formato compacto de armazenamento programado (Id5fb6, b/199324831).
  • Atualização das implementações de métricas de inicialização para que sempre terminem no fim da renderthread. Isso será mais consistente entre as versões da plataforma e mais próximo do mapeamento das medições no app (Ic6b55).

Versão 1.1.0-alpha11

3 de novembro de 2021

Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha11. A versão 1.1.0-alpha11 contém estas confirmações.

Mudanças na API

  • A Macrobenchmark agora tem uma minSdkVersion de 23 (If2655).
  • Adiciona uma nova BaselineProfileRule experimental, que é capaz de gerar perfis de valor de referência para a jornada ideal do usuário do app. A documentação detalhada vai ser publicada em breve (Ibbefa, b/203692160).
  • A variante da interface measureRepeated, que foi adicionada para autores de chamadas Java, foi removida porque causava ambiguidade na conclusão/solução do método. Os autores das chamadas Java precisarão retornar a Unit.Instance de measureRepeated. Se isso for inconveniente, registre um bug. Poderemos revisar isso em uma versão futura (Ifb23e, b/204331495).

Versão 1.1.0-alpha10

27 de outubro de 2021

Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha10. A versão 1.1.0-alpha10 contém estas confirmações.

Mudanças na API

  • Backport do StartupTimingMetric para funcionar na API 23. Essa nova implementação também processa melhor o método reportFullyDrawn() para aguardar até que o conteúdo correspondente seja renderizado (If3ac9, b/183129298).
  • JvmOverloads foram adicionados a vários métodos do MacrobenchmarkScope para autores de chamada do Java (I644fe, b/184546459).
  • Outra função MacrobenchmarkRule.measureRepeated foi fornecida para aplicar um Consumer<MacrobenchmarkScope> no uso idiomático da linguagem Java (If74ab, b/184546459).

Correções de bugs

  • Rastreamentos que não começam cedo o suficiente e ignoram dados de métricas foram corrigidos. Com isso, as exceções "Não foi possível ler métricas durante o benchmark" causadas pela biblioteca foram corrigidas (I6dfcb, b/193827052, b/200302931).
  • Mudança do nome do FrameNegativeSlack para FrameOverrun para esclarecer o significado: o frame durou mais tempo do que deveria (I6c2aa, b/203008701).

Versão 1.1.0-alpha09

13 de outubro de 2021

androidx.benchmark:benchmark-*:1.1.0-alpha09 é lançado. A versão 1.1.0-alpha09 contém estas confirmações.

Correções de bugs

Versão 1.1.0-alpha08

29 de setembro de 2021

androidx.benchmark:benchmark-*:1.1.0-alpha08 é lançado. A versão 1.1.0-alpha08 contém estas confirmações.

Mudanças na API

  • Permissão para que MacroBenchmarks de rolagem sejam executados na API 23 (If39c2, b/183129298).
  • Adição de novo tipo de métrica de amostra à saída de IU e JSON, com foco em percentis de várias amostras por iteração (I56247, b/199940612).
  • Alterne para usar métricas de ponto flutuante em todas as bibliotecas de comparativo de mercado (truncadas na IU do Studio) (I69249, b/197008210).

Versão 1.1.0-alpha07

1.º de setembro de 2021

Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha07. A versão 1.1.0-alpha07 contém estas confirmações

Mudanças na API

  • A API mínima foi aumentada para 21 para refletir o nível da API mais baixo pretendido para compatibilidade no futuro. A API mínima compatível continua sendo transmitida por requiredApi() e atualmente é 29 (I440d6, b/183129298)

Correções de bugs

  • O ProfileInstaller foi corrigido para facilitar a execução de MacroBenchmarks usando apps com perfis de valor de referência no CompilationMode.BaselineProfile (I42657, b/196074999). OBSERVAÇÃO: requer a atualização para androidx.profileinstaller:profileinstaller:1.1.0-alpha04 ou mais.
  • As comparações StartupMode.COLD + CompilationMode.None agora estão mais estáveis (I770cd, b/196074999).

Versão 1.1.0-alpha06

18 de agosto de 2021

Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha06. A versão 1.1.0-alpha06 contém estas confirmações.

Mudanças na API

  • Adição do argumento de instrumentação androidx.benchmark.iterations para permitir a substituição manual da contagem de iterações ao fazer testes/criar perfis localmente (6188be, b/194137879).

Correções de bugs

  • Mudança para o Simpleperf como criador de perfil de amostragem padrão na API 29 ou mais recente (Ic4b34, b/158303822).

Problemas conhecidos

  • O CompilationMode.BaselineProfile está em desenvolvimento. Evite usá-lo para determinar a qualidade de um perfil por enquanto.

Versão 1.1.0-alpha05

4 de agosto de 2021

Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha05. A versão 1.1.0-alpha05 contém estas confirmações.

O 1.1.0-alpha04 foi cancelado antes do lançamento devido a uma falha esporádica (b/193827052).

Mudanças na API

  • O startActivityAndWait foi alternado para invocar a inicialização usando am start, o que reduz o tempo de cada iteração de medição em aproximadamente cinco segundos, mas ao custo de não haver mais compatibilidade com parcelables de intent (I5a6f5, b/192009149).

Correções de bugs

  • Redução da intensidade da detecção de limitação térmica e reprocessamento dos valores de referência se limitações forem detectadas com frequência (I7327b).
  • Correção de FrameTimingMetric para funcionar no Android S Beta (Ib60cc, b/193260119).
  • Uso de uma EmptyActivity para fazer o app de destino sair de um estado forçado para melhor compatibilidade com CompilationMode.BaselineProfile (Id7cac, b/192084204).
  • A extensão de arquivo de rastreamento foi mudada para .perfetto-trace a fim de corresponder ao padrão da plataforma (I4c236, b/174663039).
  • StartupTimingMetric agora gera a métrica "totalDrawnMs" para medir o tempo até que a renderização do aplicativo seja concluída. Para definir essa métrica em seu app, chame Activity.reportFullyDrawn quando o conteúdo inicial estiver pronto, por exemplo, quando os itens da lista inicial forem carregados do banco de dados ou da rede. (método reportFullyDrawn disponível sem verificações de versão de build na ComponentActivity). O teste precisa ser executado por tempo suficiente para capturar a métrica (startActivityAndWait não aguarda "reportFullyDrawn") (If1141, b/179176560).
  • Redução do custo de anexação de metadados da IU a rastros em mais de 50 ms (Ic8390, b/193923003).
  • Aumento considerável da frequência de pesquisa ao interromper o rastreamento, o que pode reduzir o tempo de execução de comparação de inicialização em mais de 30% (Idfbc1, b/193723768).

Versão 1.1.0-alpha03

16 de junho de 2021

Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha03. A versão 1.1.0-alpha03 contém estas confirmações.

Novos recursos

Correções de bugs

  • O exemplo de código do Gradle para suprimir erros de comparação foi atualizado para usar uma API não descontinuada, com sintaxe compatível com usuários do .gradle.kts.

    Por exemplo:

    testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
    

Versão 1.1.0-alpha02

18 de maio de 2021

A versão 1.1.0-alpha02 da Benchmark fornece um ótimo componente para comparações, o Macrobenchmark. Além de fazer comparações para avaliar as repetições de CPU, o macrobenchmark permite medir interações de apps inteiros, como inicialização e rolagem, e capturar traces. Para saber mais, consulte a documentação da biblioteca.

Lançamento de androidx.benchmark:benchmark-*:1.1.0-alpha02. A versão 1.1.0-alpha02 contém estas confirmações.

Novos recursos

Artefatos Macrobenchmark foram adicionados (androidx.benchmark:benchmark-macro-junit4 e androidx.benchmark:benchmark-macro)

  • Capture métricas de desempenho de inicialização, rolagem/animação do app localmente ou em CI
  • Capturar e inspecionar traces no Android Studio

Correções de bugs

  • Solução alternativa de problemas de permissões do shell com diretório de saída no Android 12. Observação: pode ser necessário atualizar o Plug-in do Android para Gradle para a versão 7.0.0 canary e o Android Studio para o Arctic Fox (2020.3.1) para continuar a captura de arquivos de saída nos dispositivos afetados (Icb039).
  • Compatibilidade de armazenamento em cache de configuração no BenchmarkPlugin (6be1c1, b/159804788).
  • Saída de arquivo simplificada, ativada por padrão, em um diretório que não requer requestLegacyExternalStorage=true (8b5a4d, b/172376362).
  • Corrige os avisos de exibição do logcat da biblioteca sobre não encontrar linhas de execução JIT em versões da plataforma em que ele não está presente (I9cc63, b/161847393).
  • Correção para leitura da frequência máxima do dispositivo (I55c7a).

Versão 1.1.0-alpha01

10 de junho de 2020

Lançamento de androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 e androidx.benchmark:benchmark-junit4:1.1.0-alpha01. A versão 1.1.0-alpha01 contém estas confirmações.

Novos recursos da versão 1.1

  • Métrica de alocação: os comparativos agora executam uma fase adicional após o aquecimento e o tempo, captando as contagens de alocação. As alocações podem causar problemas de desempenho em versões mais antigas da plataforma (140 ns em O se tornaram 8 ns em M, medidos no Nexus5X, com relógios bloqueados). Essa métrica é exibida na saída do console do Android Studio, bem como na
  • Compatibilidade com criação de perfil: agora é possível capturar dados de criação de perfil para uma execução de um comparativo para inspecionar o motivo da lentidão no código. O Benchmark é compatível com a captura de rastreamento de método ou com a amostragem de método do ART. Esses arquivos podem ser inspecionados com o criador de perfil do Android Studio usando File > Open.
  • O plug-in Benchmark para Gradle agora fornece padrões para uma configuração mais simples:
    • testBuildType está definido para ser lançado por padrão, para evitar o uso de dependências com cobertura de código integrada. A versão buildType também foi configurada como padrão, o que permite que o Android Studio selecione automaticamente a variante de compilação correta ao abrir um projeto pela primeira vez (b/138808399).
    • signingConfig.debug é usado como a configuração de assinatura padrão (b/153583269).

** Correções de bugs **

  • A sobrecarga da transição de aquecimento foi reduzida significativamente, em que a primeira medição de cada comparativo era artificialmente maior do que as outras. Esse problema era mais pronunciado em comparativos muito pequenos (1 microssegundos ou menos) (b/142058671).
  • Correção do erro InstrumentationResultParser impresso para cada comparativo ao ser executado na linha de comando (I64988, b/154248456).

Problemas conhecidos

  • Invocações do Benchmark para Gradle na linha de comando não imprimem resultados diretamente. Você pode contornar isso executando o Studio ou analisando o arquivo de saída JSON para ver os resultados.
  • Os relatórios do Benchmark não extraem o relatório de dispositivos que têm um app instalado com um applicationId que termina com "android" ou "download" (não diferencia maiúsculas e minúsculas). Os usuários com esse problema devem fazer upgrade do Plug-in do Android para Gradle para 4.2-alpha01 ou mais recente.

Versão 1.0.0

Benchmark versão 1.0.0

20 de novembro de 2019

Lançamento de androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0 e androidx.benchmark:benchmark-junit4:1.0.0, sem alterações desde a versão 1.0.0-rc01. A versão 1.0.0 contém estas confirmações.

Principais recursos da versão 1.0.0

A biblioteca Benchmark permite criar comparativos de desempenho do código do app e conseguir resultados rapidamente.

Isso evita problemas de configuração de build e de tempo de execução e estabiliza o desempenho do dispositivo para garantir que as medidas sejam precisas e consistentes. Execute os comparativos diretamente no Android Studio ou em integração contínua para observar o desempenho do código ao longo do tempo e evitar regressões.

Os principais recursos incluem:

  • Estabilização do relógio
  • Priorização automática de linhas de execução
  • Compatibilidade com testes de desempenho de IU, por exemplo, no RecyclerView de exemplo (link em inglês)
  • Aquecimento e looping compatíveis com JIT
  • Resultado de comparativo JSON para pós-processamento

Versão 1.0.0-rc01

23 de outubro de 2019

Lançamento de androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 e androidx.benchmark:benchmark-junit4:1.0.0-rc01. A versão 1.0.0-rc01 contém estas confirmações.

Novos recursos

  • Inclusão do rastreamento do systrace nos comparativos

Correções de bugs

  • Corrigido o problema de instabilidade de métrica, em que o JIT não terminava antes do aquecimento devido a não priorização (b/140773023).
  • O diretório de saída JSON foi unificado no Plug-in do Android para Gradle 3.5 e 3.6

Versão 1.0.0-beta01

9 de outubro de 2019

Lançamento de androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 e androidx.benchmark:benchmark-junit4:1.0.0-beta01. A versão 1.0.0-beta01 contém estas confirmações.

Novos recursos

  • Executa a coleta de lixo antes de cada aquecimento para reduzir a pressão de memória de um comparativo ao vazar para o próximo (b/140895105).

Correções de bugs

  • Incluída a dependência androidx.annotation:android-experimental-lint, para que o código Java produza corretamente erros de lint quando a API experimental não for usada, de forma semelhante ao que é oferecido pela anotação experimental Kotlin para os autores de chamada do Kotlin.
  • Agora o uso do argumento de instrumentação additionalTestOutputDir para saída no Plugin do Gradle para Android 3.6 é detectado corretamente, para saber quando o AGP realizará a cópia de dados.
  • Corrigida a frequência do relógio não detectada em JSON para imprimir -1 corretamente (b/141945670).

Versão 1.0.0-alpha06

18 de setembro de 2019

Lançamento de androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 e androidx.benchmark:benchmark-junit4:1.0.0-alpha06. A versão 1.0.0-alpha06 contém estas confirmações.

Novos recursos

  • Incluída uma verificação de uso incorreto do pacote antigo para execução de testes, que agora apresenta uma mensagem de erro mais útil.

Mudanças na API

  • A anotação experimental ExperimentalAnnotationReport agora está pública da forma correta. Agora, o uso da API experimental BenchmarkState#report exige essa anotação.

Versão 1.0.0-alpha05

5 de setembro de 2019

Lançamento de androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 e androidx.benchmark:benchmark-junit4:1.0.0-alpha05. As confirmações incluídas nessa versão podem ser encontradas aqui.

Mudanças na API

  • A API BenchmarkState.reportData agora está marcada como experimental.

Correções de bugs

  • Corrigido o script de bloqueio do relógio, que falhava em dispositivos que não tinham os recursos de shell cut ou expr.
  • Corrigido problema com a tarefa ./gradlew lockClocks, que era mantida em dispositivos com acesso root à versão mais antiga do utilitário su, que não era compatível com a sinalização -c.

Versão 1.0.0-alpha04

7 de agosto de 2019

Lançamento de androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 e androidx.benchmark:benchmark-junit4:1.0.0-alpha04. As confirmações incluídas nessa versão podem ser encontradas aqui.

Também foi adicionada uma nova documentação sobre como usar a biblioteca Benchmark sem o Gradle, tanto para uso em diferentes sistemas de compilação (como Bazel ou Buck), quanto para execução em CI. Para ver mais informações, consulte Comparativos de compilação sem o Gradle e Executar comparativos na integração contínua.

Novos recursos

  • Plug-in do Gradle
    • Agora, ele desativa automaticamente a cobertura de teste e define o AndroidBenchmarkRunner por padrão (b/138374050).
    • Incluída a compatibilidade com nova cópia de dados baseada no AGP, ao executar benchmarks e ao usar AGP 3.6+.
  • Adições ao formato JSON
    • Tempo total de execução do teste de comparativos de saída (b/133147694).
    • Benchmarks @Parameterized que usam uma string de nome (por exemplo, @Parameters(name = "size={0},depth={1}")) agora emitem nomes e valores de parâmetro por benchmark na saída JSON (b/132578772).
  • Modo de simulação b/138785848.
    • Adicionado um modo de "simulação" para executar cada loop de benchmark apenas uma vez, para verificar se há erros/falhas sem capturar medições. Isso pode ser útil, por exemplo, para executar benchmarks rapidamente no pré-envio, verificando se eles não estão corrompidos.

Mudanças na API

  • A estrutura do módulo mudou, dividindo a biblioteca (b/138451391).
    • benchmark:benchmark-junit4 contém classes com dependência JUnit: AndroidBenchmarkRunner e BenchmarkRule, que foram movidas para o pacote androidx.benchmark.junit4
    • benchmark:benchmark-common contém o restante da lógica, incluindo a API BenchmarkState.
    • Essa divisão permitirá que a biblioteca seja compatível com o benchmark sem as APIs do JUnit4 no futuro.
  • Os avisos de configuração agora são tratados como erros e fazem com que o teste falhe b/137653596.
    • Isso é feito para incentivar ainda mais medições precisas, especialmente na integração contínua (CI, na sigla em inglês).
    • Esses erros podem ser reduzidos a avisos com um argumento de instrumentação. Por exemplo: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Correções de bugs

  • Erros ao gravar no armazenamento externo em dispositivos Q exibem mensagens mais descritivas, com sugestões de como resolver o problema.
  • As telas são ativadas automaticamente durante as execuções de benchmarks, em vez de falhar quando a tela está desativada.

Contribuições externas

  • Agradecemos a Sergey Zakharov pela contribuição para as melhorias da saída JSON e para a correção dos problemas relacionados à tela desativada.

Versão 1.0.0-alpha03

2 de julho de 2019

Lançamento de androidx.benchmark:benchmark:1.0.0-alpha03 e androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03. As confirmações incluídas nessa versão podem ser encontradas aqui.

Novos recursos

  • Exposição da duração do modo de espera devido à limitação térmica por benchmark no relatório JSON completo.

Correções de bugs

  • O plug-in do Gradle não precisa mais ser aplicado depois dos plug-ins do Android e do bloco do Android.
  • Adiciona compatibilidade com relatórios de comparação em dispositivos Android 10 usando armazenamento com escopo

Versão 1.0.0-alpha02

6 de junho de 2019

Lançamento de androidx.benchmark:1.0.0-alpha02 e androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02. As confirmações incluídas nessa versão podem ser encontradas neste link (link em inglês).

Observe que estamos tratando o esquema JSON como uma API. Pretendemos seguir as mesmas restrições de estabilidade de outras APIs: estável (com raras exceções), uma vez na versão Beta e corrigida na versão final, com apenas algumas adições em versões secundárias e alterações/remoções nas versões principais.

Mudanças na API

  • Esquema JSON revisado. É provável que outras mudanças no esquema JSON sejam limitadas a adições:

    • Reorganizada a estrutura do objeto de resultado para oferecer compatibilidade com outros grupos de métricas no futuro (b/132713021).
    • Adicionadas informações de contexto de execução de teste, como informações do dispositivo e da compilação e se os clocks estão bloqueados, ao objeto de nível superior (b/132711920).
    • Os nomes das métricas de tempo agora têm "ns" (b/132714527).
    • Adicionadas outras estatísticas por métrica relatada (máxima, mediana, mínima) e remoção de estatísticas resumidas "nanos" simplificadas (b/132713851).
  • Remoção de saída XML (b/132714414).

  • A detecção da limitação térmica foi removida da API BenchmarkState.reportData (b/132887006).

Correções de bugs

  • Correção de ./gradlew lockClocks que não fixavam em alguns dispositivos com SO recente (b/133424037).
  • Desativada a detecção de limitação para emulador (b/132880807).

Versão 1.0.0-alpha01

7 de maio de 2019

Lançamento de androidx.benchmark:benchmark:1.0.0-alpha01. As confirmações incluídas nessa versão podem ser encontradas neste link.