Home | History | Annotate | Download | only in testing
      1 page.title=Teste de desempenho de exibio
      2 page.image=images/cards/card-test-performance_2x.png
      3 page.keywords=performance, fps, tools
      4 
      5 @jd:body
      6 
      7 
      8 <div id="qv-wrapper">
      9   <div id="qv">
     10     <h2>Neste documento</h2>
     11       <ol>
     12         <li><a href="#measure">Medir desempenho da IU</a>
     13           <ul>
     14             <li><a href="#aggregate">Agregar estatsticas de quadro</a></li>
     15             <li><a href="#timing-info">Informaes de preciso de quadro</a></li>
     16             <li><a href="#timing-dump">Despejo de preciso de quadro simples</a></li>
     17             <li><a href="#collection-window">Controlar janela de coleta de estatsticas</a></li>
     18             <li><a href="#diagnose">Diagnosticar regresses de desempenho</a></li>
     19             <li><a href="#resources">Recursos adicionais</a></li>
     20           </ul>
     21         </li>
     22         <li><a href="#automate">Automatizar teste de desempenho da IU</a>
     23           <ul>
     24             <li><a href="#ui-tests">Configurar testes da IU</a></li>
     25             <li><a href="#automated-tests">Configurar testes automatizados da IU</a></li>
     26             <li><a href="#triage">Triagem e resoluo de problemas observados</a></li>
     27           </ul>
     28         </li>
     29       </ol>
     30   </div>
     31 </div>
     32 
     33 
     34 <p>
     35   O teste de desempenho da interface do usurio (IU) garante que o aplicativo
     36  no s esteja de acordo com os requisitos funcionais, como tambm que as interaes de usurios
     37  sejam muito mais suaves, executando a 60 quadros por segundo de forma consistente (<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&index=25&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">por que
     38  60 qps?</a>), sem nenhum quadro atrasado ou descartado ou, como gostamos de chamar, <em>"jank"</em>. Este documento explica as ferramentas disponveis
     39  para medir o desempenho da IU e dispe uma abordagem para integrar
     40  as medidas de desempenho de IU nas prticas de teste.
     41 </p>
     42 
     43 
     44 <h2 id="measure">Medir desempenho da IU</h2>
     45 
     46 <p>
     47   Para aprimorar o desempenho, deve-se primeiro ter a habilidade de medir o desempenho
     48  do sistema e, em seguida, diagnosticar e identificar problemas que podem ocorrer
     49  em vrias partes do processo.
     50 </p>
     51 
     52 <p>
     53   <em><a href="https://source.android.com/devices/tech/debug/dumpsys.html">dumpsys</a></em>  uma ferramenta
     54  do Android que  executada no dispositivo e despeja informaes interessantes sobre o estado
     55  dos servios do sistema. Passar o comando <em>gfxinfo</em> para dumpsys fornece uma sada no logcat
     56  com informaes de desempenho relacionada aos quadros de animao que ocorrem
     57  durante a fase de registro.
     58 </p>
     59 
     60 <pre>
     61 &gt; adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt;
     62 </pre>
     63 
     64 <p>
     65   Este comando pode produzir diversas variveis de dados de preciso de quadro.
     66 </p>
     67 
     68 <h3 id="aggregate">Agregar estatsticas de quadro</h3>
     69 
     70 <p>
     71   Com o M Preview, o comando emite uma anlise agregada dos dados de quadro para logcat,
     72  coletados em todo o ciclo de vida do processo. Por exemplo:
     73 </p>
     74 
     75 <pre class="noprettyprint">
     76 Stats since: 752958278148ns
     77 Total frames rendered: 82189
     78 Janky frames: 35335 (42.99%)
     79 90th percentile: 34ms
     80 95th percentile: 42ms
     81 99th percentile: 69ms
     82 Number Missed Vsync: 4706
     83 Number High input latency: 142
     84 Number Slow UI thread: 17270
     85 Number Slow bitmap uploads: 1542
     86 Number Slow draw: 23342
     87 </pre>
     88 
     89 <p>
     90   Estas estatsticas de alto nvel carregam um alto nvel de desempenho de renderizao do aplicativo,
     91  bem como a estabilidade em vrios quadros.
     92 </p>
     93 
     94 
     95 <h3 id="timing-info">Informaes de preciso de quadro</h3>
     96 
     97 <p>
     98   Com o M Preview, h um novo comando para gfxinfo, o <em>framestats</em>, que fornece
     99  informaes de preciso de quadros extremamente detalhadas dos quadros recentes para que voc possa rastrear
    100  e depurar os problemas de forma mais precisa.
    101 </p>
    102 
    103 <pre>
    104 &gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; framestats
    105 </pre>
    106 
    107 <p>
    108   Este comando emite informaes de preciso de quadros, com marcaes de data e hora, dos ltimos 120
    109  quadros produzidos pelo aplicativo. Abaixo, h um exemplo de sada bruta das estatsticas
    110  de quadro de adb dumpsys gfxinfo &lt;PACKAGE_NAME&gt;:
    111 </p>
    112 
    113 <pre class="noprettyprint">
    114 0,49762224585003,49762241251670,9223372036854775807,0,49762257627204,49762257646058,49762257969704,49762258002100,49762265541631,49762273951162,49762300914808,49762303675954,
    115 0,49762445152142,49762445152142,9223372036854775807,0,49762446678818,49762446705589,49762447268818,49762447388037,49762453551527,49762457134131,49762474889027,49762476150120,
    116 0,49762462118845,49762462118845,9223372036854775807,0,49762462595381,49762462619287,49762462919964,49762462968454,49762476194547,49762476483454,49762480214964,49762480911527,
    117 0,49762479085548,49762479085548,9223372036854775807,0,49762480066370,49762480099339,49762481013089,49762481085850,49762482232152,49762482478350,49762485657620,49762486116683,
    118 </pre>
    119 
    120 <p>
    121   Cada linha desta sada representa um quadro produzido pelo aplicativo. Cada linha tem um nmero fixo
    122  de colunas que descrevem o tempo gasto em cada estgio do pipeline que produz quadros. A prxima seo descreve
    123  este formato com detalhes, incluindo o que cada coluna representa.
    124 </p>
    125 
    126 
    127 <h4 id="fs-data-format">Formato de dados de estatsticas de quadro</h4>
    128 
    129 <p>
    130   Como o bloco de dados  a sada no formato CSV, basta col-lo na ferramenta
    131  de planilha de sua escolha ou colet-lo e analis-lo com o script. A tabela a seguir explica o formato
    132  das colunas de dados de sada. Todas as marcaes de data e hora esto em nanossegundos.
    133 </p>
    134 
    135 <ul>
    136   <li>SINALIZADORES
    137     <ul>
    138       <li>Linhas com 0 para a coluna FLAGS podem ter o tempo total de quadros calculado
    139  subtraindo a coluna INTENDED_VSYNC da coluna FRAME_COMPLETED.
    140       </li>
    141 
    142       <li>Se for um nmero diferente de zero, a linha dever ser ignorada, pois o quadro ser determinado
    143  como exceo em comparao ao desempenho normal, onde espera-se que o layout e o desenho
    144  demorem mais do que 16 ms. Eis alguns motivos para que isto ocorra:
    145         <ul>
    146           <li>Layout da janela alterado (como o primeiro quadro do aplicativo
    147  ou aps uma rotao)
    148           </li>
    149 
    150           <li>Tambm  possvel que o quadro seja ignorado, quando alguns valores
    151  ainda tero marcaes de data e hora de lixo. Um quadro pode ser ignorado se, por exemplo,
    152  estiver executando a 60 quadros por segundo ou se nada na tela estiver incorreto, o que no necessariamente
    153   um sinal de problema no aplicativo.
    154           </li>
    155         </ul>
    156       </li>
    157     </ul>
    158   </li>
    159 
    160   <li>INTENDED_VSYNC
    161     <ul>
    162       <li>O ponto inicial planejado para o quadro. Se este valor for diferente de VSYNC,
    163  significa que h um trabalho ocorrendo no encadeamento da IU que no permitiu que ele respondesse
    164  ao sinal de vsync de forma precisa.
    165       </li>
    166     </ul>
    167   </li>
    168 
    169   <li>VSYNC
    170     <ul>
    171       <li>O valor de tempo foi usado em todos os escutadores vsync e no desenho para o quadro
    172  (retorno de chamada do quadro Choreographer, animaes, View.getDrawingTime(), etc.)
    173       </li>
    174 
    175       <li>Para entender mais sobre VSYNC e como ele influencia o aplicativo, assista ao vdeo
    176  <a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&index=23">
    177 Entendimento do VSYNC</a>.
    178       </li>
    179     </ul>
    180   </li>
    181 
    182   <li>OLDEST_INPUT_EVENT
    183     <ul>
    184       <li>A marcao de data e hora do evento de entrada mais antigo na fila de entrada, ou Long.MAX_VALUE
    185  se no houver eventos de entrada para o quadro.
    186       </li>
    187 
    188       <li>Este valor  principalmente planejado para o trabalho da plataforma e tem utilidade limitada
    189  para desenvolvedores de aplicativos.
    190       </li>
    191     </ul>
    192   </li>
    193 
    194   <li>NEWEST_INPUT_EVENT
    195     <ul>
    196       <li>A marcao de data e hora do evento de entrada mais recente na fila de entrada
    197  ou 0 se no houver eventos de entrada para o quadro.
    198       </li>
    199 
    200       <li>Este valor  principalmente planejado para o trabalho da plataforma e tem utilidade limitada
    201  para desenvolvedores de aplicativos.
    202       </li>
    203 
    204       <li>No entanto,  possvel ter uma breve ideia da quantidade de latncia que o aplicativo
    205  est adicionado verificando (FRAME_COMPLETED - NEWEST_INPUT_EVENT).
    206       </li>
    207     </ul>
    208   </li>
    209 
    210   <li>HANDLE_INPUT_START
    211     <ul>
    212       <li>A marcao de data e hora em que os eventos de entrada foram despachados para o aplicativo.
    213       </li>
    214 
    215       <li>Ao olhar o horrio entre isto e ANIMATION_START,  possvel medir o tempo que o aplicativo
    216  gastou para lidar com os eventos de entrada.
    217       </li>
    218 
    219       <li>Se este nmero for alto (&gt; 2 ms), indica que o aplicativo est gastando
    220  tempo demais processando os eventos de entrada, como View.onTouchEvent(), o que pode indicar
    221  que este trabalho precisa ser otimizado ou descarregado para um encadeamento diferente. Observe que h algumas situaes,
    222  como eventos de clique que iniciam novas atividades,
    223  em que  esperado e aceitvel que este nmero seja grande.
    224       </li>
    225     </ul>
    226   </li>
    227 
    228   <li>ANIMATION_START
    229     <ul>
    230       <li>A marcao de data e hora em que as animaes registradas com Choreographer foram executadas.
    231       </li>
    232 
    233       <li>Ao olhar para o tempo entre isto e PERFORM_TRANVERSALS_START,
    234   possvel determinar o tempo levado para avaliar todos os animadores
    235  (ObjectAnimator, ViewPropertyAnimator e Transitions sendo as mais comuns) que esto sendo executados.
    236       </li>
    237 
    238       <li>Se este nmero for alto (&gt; 2 ms), verifique se o aplicativo gravou qualquer animador
    239  personalizado ou quais campos de ObjectAnimators esto animando
    240  e certifique-se de que eles sejam adequados para uma animao.
    241       </li>
    242 
    243       <li>Para saber mais sobre Choreographer, assista ao vdeo
    244  <a href="https://developers.google.com/events/io/sessions/325418001">Para melhor ou pior</a>.
    245       </li>
    246     </ul>
    247   </li>
    248 
    249   <li>PERFORM_TRAVERSALS_START
    250     <ul>
    251       <li>Se voc subtrair o DRAW_START deste valor, ser possvel extrair o tempo que as fases de medida e layout
    252  levaram para serem concludas (observao: durante uma rolagem ou animao,
    253  espera-se que este valor seja prximo a zero).
    254       </li>
    255 
    256       <li>Para saber mais sobre as fases de medida e layout do pipeline de renderizao,
    257  assista ao vdeo <a href="https://www.youtube.com/watch?v=we6poP0kw6E&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&index=27">
    258 Invalidaes, layouts e desempenho</a>
    259       </li>
    260     </ul>
    261   </li>
    262 
    263   <li>DRAW_START
    264     <ul>
    265       <li>O horrio em que a fase de desenho de performTraversals foi iniciada. Este  o ponto inicial
    266  do registro de listas de exibio de vistas que foram invalidadas.
    267       </li>
    268 
    269       <li>O tempo entre isto e SYNC_START  o tempo levado para chamar View.draw()
    270  em todas as vistas invalidadas na rvore.
    271       </li>
    272 
    273       <li>Para obter mais informaes sobre o modelo de desenho, assista aos vdeos <a href="{@docRoot}guide/topics/graphics/hardware-accel.html#hardware-model">Acelerao de hardware</a>
    274  ou <a href="https://www.youtube.com/watch?v=we6poP0kw6E&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&index=27">
    275  Invalidaes, layouts e desempenho</a>
    276       </li>
    277     </ul>
    278   </li>
    279 
    280   <li>SYNC_START
    281     <ul>
    282       <li>O horrio em que a fase de sincronizao do desenho foi iniciada.
    283       </li>
    284 
    285       <li>Se o tempo entre isto e ISSUE_DRAW_COMMANDS_START for substancial (aproximadamente &gt; 0,4ms),
    286  geralmente indicar que vrios Bitmaps novos que foram desenhados devero
    287  ser enviados para o GPU.
    288       </li>
    289 
    290       <li>Para entender mais sobre a fase de sincronizao, assista ao vdeo <a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&index=24&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">
    291 Renderizao de GPU de perfil</a>
    292       </li>
    293     </ul>
    294   </li>
    295 
    296   <li>ISSUE_DRAW_COMMANDS_START
    297     <ul>
    298       <li>O horrio em que o renderizador de hardware comeou a emitir comandos de desenho para a GPU.
    299       </li>
    300 
    301       <li>O tempo entre isto e FRAME_COMPLETED fornece uma breve ideia da quantidade de trabalho de GPU
    302  que o aplicativo est produzindo. Problemas com excesso ou efeitos de renderizao
    303  ineficientes so exibidos aqui.
    304       </li>
    305     </ul>
    306   </li>
    307 
    308   <li>SWAP_BUFFERS
    309     <ul>
    310       <li>O horrio em que o eglSwapBuffers foi chamado, relativamente desinteressante
    311  fora do trabalho da plataforma.
    312       </li>
    313     </ul>
    314   </li>
    315 
    316   <li>FRAME_COMPLETED
    317     <ul>
    318       <li>Tudo feito! O tempo total gasto trabalhando neste quadro pode ser calculando
    319  realizando FRAME_COMPLETED - INTENDED_VSYNC.
    320       </li>
    321     </ul>
    322   </li>
    323 
    324 </ul>
    325 
    326 <p>
    327    possvel usar estes dados de vrias formas. Uma visualizao simples mas til  o histograma
    328  exibindo a distribuio dos tempos dos quadros (FRAME_COMPLETED - INTENDED_VSYNC)
    329  em diferentes espaos de latncia. Consulte a figura abaixo. Este grfico mostra brevemente que a maioria
    330  dos quadros estavam bons  bem abaixo do limite de 16 ms (representado em vermelho) ,
    331  mas que alguns quadros estavam bem acima do limite. Podemos verificar as alteraes neste histograma
    332  com o tempo para encontrar as mudanas indiscriminadas ou novas excees sendo criadas. Tambm  possvel colocar em grfico a latncia de entrada,
    333  o tempo gasto no layout ou outras medidas interessantes com base
    334  nas vrias marcaes de data e hora nos dados.
    335 </p>
    336 
    337 <img src="{@docRoot}preview/images/perf-test-framestats.png">
    338 
    339 
    340 <h3 id="timing-dump">Despejo de preciso de quadro simples</h3>
    341 
    342 <p>
    343   Se a <strong>renderizao de GPU de perfil</strong> for definida para <strong>em adb shell dumpsys gfxinfo</strong>
    344  nas opes de desenvolvedor, o comando <code>adb shell dumpsys gfxinfo</code> emitir informaes
    345  de preciso para os 120 quadros mais recentes, divididas em algumas categorias
    346  com valores separados por guias. Estes dados podem ser teis para indicar quais partes do pipeline
    347  de desenho podem estar lentas em um nvel alto.
    348 </p>
    349 
    350 <p>
    351   Semelhante s <a href="#fs-data-format">estatsticas de quadro</a> acima,
    352  basta col-los na ferramenta de planilha de sua escolha ou colet-los e analis-los
    353  com um script. O grfico a seguir exibe um detalhamento de onde os vrios quadros produzidos
    354  pelo aplicativo gastaram o tempo.
    355 </p>
    356 
    357 <img src="{@docRoot}preview/images/perf-test-frame-latency.png">
    358 
    359 <p>
    360   O resultado de executar gfxinfo, copiar a sada, col-lo no aplicativo de planilha
    361  e gerar um grfico dos dados como barras empilhadas.
    362 </p>
    363 
    364 <p>
    365   Cada barra vertical representa um quadro da animao; sua altura representa a quantidade
    366  de milissegundos para calcular este quadro de animao. Cada segmento colorido da barra
    367  representa um estgio diferente do pipeline de renderizao para que voc possa ver que partes do aplicativo
    368  podem estar criando um afunilamento. Para obter mais informaes sobre o entendimento do pipeline
    369  de renderizao e como otimiz-lo, assista ao vdeo <a href="https://www.youtube.com/watch?v=we6poP0kw6E&index=27&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">
    370 Invalidaes, layouts e desempenho</a>.
    371 </p>
    372 
    373 
    374 <h3 id="collection-window">Controlar janela de coleta de estatsticas</h3>
    375 
    376 <p>
    377   As precises de quadro simples e estatsticas de quadro coletam dados
    378  em um perodo muito curto  cerca de dois segundos de renderizao. Para controlar este perodo de forma precisa  por exemplo,
    379  restringir os dados para uma animao em particular ,  possvel redefinir
    380  todos os contadores e agregar as estatsticas coletadas.
    381 </p>
    382 
    383 <pre>
    384 &gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; reset
    385 </pre>
    386 
    387 <p>
    388   Isto tambm pode ser usado em conjunto com os prprios comandos de despejo para coletar
    389  e redefinir em uma cadncia regular, capturando perodos de menos de dois segundos de quadros
    390  continuamente.
    391 </p>
    392 
    393 
    394 <h3 id="diagnose">Diagnosticar regresses de desempenho</h3>
    395 
    396 <p>
    397   A identificao de regresses  uma boa primeira etapa para rastrear os problemas
    398  e manter o bem-estar do aplicativo. No entanto, o dumpsys identifica apenas a existncia
    399  e a gravidade relativa dos problemas. Ainda  necessrio diagnosticar a causa particular dos problemas
    400  de desempenho e encontrar maneiras adequadas de resolv-los. Para isso,  altamente recomendado
    401  o uso da ferramenta <a href="{@docRoot}tools/help/systrace.html">systrace</a>.
    402 </p>
    403 
    404 
    405 <h3 id="resources">Recursos adicionais</h3>
    406 
    407 <p>
    408   Para obter mais informaes sobre como o pipeline de renderizao do Android funciona,
    409  problemas comuns que podem ser encontrados e como resolv-los,
    410  alguns dos seguintes recursos podem ser teis:
    411 </p>
    412 
    413 <ul>
    414   <li>Desempenho de renderizao 101
    415   </li>
    416   <li>Por que 60 qps?
    417   </li>
    418   <li>GPU e IU do Android
    419   </li>
    420   <li>Invalidaes, layouts e desempenho
    421   </li>
    422   <li>Anlise do desempenho de IU com Systrace
    423   </li>
    424 </ul>
    425 
    426 
    427 <h2 id="automate">Automatizar teste de desempenho da IU</h2>
    428 
    429 <p>
    430   Uma abordagem para o teste de desempenho da IU  fazer com que um testador humano
    431  realize uma srie de operaes de usurio no aplicativo-alvo e procure visualmente problemas
    432  ou gaste uma grande quantidade de tempo usando uma abordagem de ferramenta para encontr-los. No entanto, esta abordagem manual
    433   repleta de riscos: a habilidade humana de notar alteraes na taxa de quadros varia tremendamente,
    434  alm de consumir tempo, ser tedioso e propenso a erros.
    435 </p>
    436 
    437 <p>
    438   Uma abordagem mais eficiente  registrar e analisar as mtricas de desempenho essenciais
    439  dos testes de IU automatizados. O Android M Developer Preview inclui novas capacidades de registro que facilitam
    440  a determinao da quantidade e da gravidade de erros nas animaes do aplicativo
    441  e que podem ser usadas para compilar um processo rigoroso para determinar o desempenho atual
    442  e rastrear os futuros objetivos de desempenho.
    443 </p>
    444 
    445 <p>
    446   Este artigo mostra uma abordagem recomendada para usar estes dados para automatizar
    447  o teste de desempenho.
    448 </p>
    449 
    450 <p>
    451   Ele  geralmente dividido em duas aes principais. Primeiro: identificar o que est testando
    452  e como ser testado. Segundo: configurao e manuteno
    453  de um ambiente de teste automatizado.
    454 </p>
    455 
    456 
    457 <h3 id="ui-tests">Configurar de testes da IU</h3>
    458 
    459 <p>
    460   Antes de iniciar o teste automatizado,  importante determinar algumas decises de alto nvel
    461  para entender corretamente o espao de teste e as possveis necessidades.
    462 </p>
    463 
    464 <h4>
    465   Identificar principais animaes/fluxos a testar
    466 </h4>
    467 
    468 <p>
    469   Lembre-se que um desempenho ruim  mais visvel aos usurios quando
    470  interrompe uma animao suave. Portanto, ao identificar que tipos de aes de IU sero testadas,  til se concentrar
    471  nas animaes principais que os usurios veem
    472  ou nas mais importantes para a experincia. Por exemplo, eis alguns cenrios comuns que pode ser til identificar:
    473 </p>
    474 
    475 <ul>
    476   <li>Rolagem de um ListView ou RecyclerView principal
    477   </li>
    478 
    479   <li>Animaes durante ciclos de espera assncrona
    480   </li>
    481 
    482   <li>Qualquer animao que possa ter manipulao ou carregamento de bitmap
    483   </li>
    484 
    485   <li>Animaes com mistura alpha
    486   </li>
    487 
    488   <li>Desenho de vista personalizada com Canvas
    489   </li>
    490 </ul>
    491 
    492 <p>
    493   Trabalhe com engenheiros, designers, e gerentes de produto em sua equipe para priorizar
    494  as animaes de produto essenciais para a cobertura de teste.
    495 </p>
    496 
    497 <h4>
    498   Defina os futuros objetivos e faa um rastreamento
    499 </h4>
    500 
    501 <p>
    502   De um alto nvel, talvez seja essencial identificar os objetivos especficos de desempenho
    503  e concentrar-se em escrever testes e coletar dados. Por exemplo:
    504 </p>
    505 
    506 <ul>
    507   <li>Quer apenas iniciar o rastreamento de desempenho de IU pela primeira vez para aprender mais?
    508   </li>
    509 
    510   <li>Quer evitar regresses que possam ser introduzidas no futuro?
    511   </li>
    512 
    513   <li>Est com 90% de quadros suaves hoje e deseja chegar a 98% neste trimestre?
    514   </li>
    515 
    516   <li>Est com 98% de quadros suaves e no quer regredir?
    517   </li>
    518 
    519   <li>O seu objetivo  aprimorar o desempenho em dispositivos de baixo nvel?
    520   </li>
    521 </ul>
    522 
    523 <p>
    524   Em todos esses casos, voc optar pelo rastreamento histrico, que exibe o desempenho
    525  entre vrias verses do aplicativo.
    526 </p>
    527 
    528 <h4>
    529   Identificar dispositivos para realizar testes
    530 </h4>
    531 
    532 <p>
    533   O desempenho do aplicativo varia dependendo do dispositivo em que est sendo executado. Alguns dispositivos podem
    534  conter menos memria, GPUs menos eficientes ou chips de CPU mais lentos. Isto significa que as animaes que podem
    535  ter um bom desempenho em um conjunto de hardwares podem no ter o mesmo desempenho em outras,
    536  podendo ser o resultado de um afunilamento em uma parte diferente do pipeline. Portanto, para contabilizar
    537  esta variao em o que o usurio pode ver, escolha uma variao de dispositivos
    538  para executar os testes: dispositivos e tablets de alto e baixo nvel etc. Procure variaes no desempenho de CPU,
    539  RAM, densidade da tela, tamanho etc. Testes que passam em dispositivos de alto nvel
    540  podem falhar em dispositivos de baixo nvel.
    541 </p>
    542 
    543 <h4>
    544   Estruturas bsicas para teste de IU
    545 </h4>
    546 
    547 <p>
    548   Conjuntos de ferramenta, como <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> e
    549  <a href="{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a>,
    550  so integrados para ajudar na automatizao da ao de um usurio movendo-se pelo aplicativo. So estruturas simples
    551  que imitam a interao de usurio no dispositivo. Para usar estas estruturas,
    552  voc cria efetivamente scripts nicos que executam um conjunto
    553  de aes de usurio e reproduzem-nas no prprio dispositivo.
    554 </p>
    555 
    556 <p>
    557   Ao combinar estes testes automatizados, juntamente com <code>dumpsys gfxinfo</code>,  possvel criar
    558  rapidamente um sistema reproduzvel que permite a execuo de um teste e a medio das informaes
    559  de desempenho desta condio em particular.
    560 </p>
    561 
    562 
    563 <h3 id="automated-tests">Configurar testes automatizados da IU</h3>
    564 
    565 <p>
    566   Com a habilidade de executar um teste de IU e um pipeline para coletar
    567  os dados de um nico teste, a prxima etapa importante  adotar uma estrutura que pode executar
    568  esse teste vrias vezes, em vrios dispositivos, e agregar os dados de desempenho resultados
    569  para futuras anlises da equipe de desenvolvimento.
    570 </p>
    571 
    572 <h4>
    573   Uma estrutura para automatizao de testes
    574 </h4>
    575 
    576 <p>
    577   Vale observar que as estruturas de teste de IU (como o <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a>)
    578  so executadas diretamente no emulador/dispositivo alvo. Enquanto as informaes de coleta de desempenho feita
    579  pelo <em>dumpsys gfxinfo</em> forem direcionadas por uma mquina hospedeira, envie comandos pelo ADB. Para ajudar a transmitir
    580  a automatizao dessas entidades separadas, a estrutura <a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner</a>
    581  foi desenvolvida: um sistema de script que  executado na mquina host que pode
    582  emitir comandos para um conjunto de dispositivos conectados, bem como receber dados deles.
    583 </p>
    584 
    585 <p>
    586   A compilao de um conjunto de scripts para uma automatizao adequada de teste de desempenho de IU,
    587  no mnimo, deve ser capaz de utilizar o MonkeyRunner para realizar as seguintes tarefas:
    588 </p>
    589 
    590 <ul>
    591   <li>Carregar e iniciar um APK desejado para um emulador ou dispositivo alvo.
    592   </li>
    593 
    594   <li>Iniciar um teste de IU do UI Automator e permitir que ele seja executado.
    595   </li>
    596 
    597   <li>Coletar informaes de desempenho por meio de <em>dumpsys gfxinfo</em><em>.</em>
    598   </li>
    599 
    600   <li>Agregar informaes e exibi-las de forma til para o desenvolvedor.
    601   </li>
    602 </ul>
    603 
    604 
    605 <h3 id="triage">Triagem e resoluo de problemas observados</h3>
    606 
    607 <p>
    608   Quando os padres ou regresses dos problemas forem identificados, a prxima etapa
    609   identificar e aplicar a resoluo. Se a estrutura de teste automatizado preservar o detalhamento preciso para os quadros,
    610  ela poder ajudar na inspeo de alteraes de layout/cdigo suspeitos recentes (em caso
    611  de regresso) ou reduzir a parte do sistema que voc est analisando ao alternar
    612  para a investigao manual. Para a investigao manual, <a href="{@docRoot}tools/help/systrace.html">systrace</a>  um timo lugar para comear,
    613  exibindo as informaes de preciso sobre cada estgio do pipeline de renderizao,
    614  cada encadeamento e ncleo no sistema, bem como quaisquer marcadores de evento personalizados definidos.
    615 </p>
    616 
    617 <h4>
    618   Gerao de perfis adequada de precises temporais
    619 </h4>
    620 
    621 <p>
    622    importante observar as dificuldades em obter e medir as precises
    623  do desempenho de renderizao. Esses nmeros so, por natureza, no determinsticos e frequentemente
    624  oscilam dependendo do estado do sistema, da quantidade de memria disponvel,
    625  da diminuio termal e da ltima vez em que a luz do sol atingiu a sua rea da Terra. Ou seja,  possvel executar
    626  o mesmo teste duas vezes e receber nmeros levemente diferentes
    627  que podem ser muito prximos, mas no idnticos.
    628 </p>
    629 
    630 <p>
    631   A coleta e a gerao de perfil de dados nesta maneira significa executar o mesmo teste,
    632  vrias vezes, e acumular os resultados como uma mdia ou valor mediano (para a simplicidade,
    633  chamemos de "lote"). Isto fornece uma aproximao do desempenho do teste,
    634  j que precises exatas no so necessrias.
    635 </p>
    636 
    637 <p>
    638   Os lotes podem ser usados entre alteraes de cdigos para verificar o impacto relativo
    639  dessas alteraes no desempenho. Se a taxa de quadros mdia para o lote antes da alterao
    640  for maior do que o lote aps a alterao, ento o resultado de desempenho wrt geral ser um sucesso
    641  para esta alterao em particular.
    642 </p>
    643 
    644 <p>
    645   Isto significa que qualquer teste de IU automatizado feito deve levar este conceito
    646  em considerao, bem como quaisquer anomalias que possam ocorrer durante um teste. Por exemplo,
    647  se o desempenho do aplicativo repentinamente cair devido a algum problema do dispositivo
    648  (que no tenha sido causado pelo aplicativo), ento talvez seja necessrio executar
    649  o lote novamente para obter precises menos caticas.
    650 </p>
    651 
    652 <p>
    653   Logo, quantas vezes deve-se realizar um teste antes de as medidas terem algum sentido? 10 vezes deve ser o mnimo,
    654  com nmeros altos como 50 ou 10 oferecendo resultados mais precisos
    655  ( claro que se deve levar em considerao o tempo para ter mais preciso).
    656 </p>
    657