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 > adb shell dumpsys gfxinfo <PACKAGE_NAME> 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 >adb shell dumpsys gfxinfo <PACKAGE_NAME> 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 <PACKAGE_NAME>: 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 (> 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 (> 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 > 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 >adb shell dumpsys gfxinfo <PACKAGE_NAME> 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