Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Otimizações de performance em Android: renderiz...

Paula Rosa
October 22, 2018
47

Otimizações de performance em Android: renderização

Esta apresentação mostra como utilizar as ferramentas de análise de performance de renderização, a fim que o desenvolvedor encontre problemas de performance e possa facilmente corrigí-los.

Paula Rosa

October 22, 2018
Tweet

Transcript

  1. TEMPO É VITAL | RENDERIZAÇÃO NO ANDROID 10 a 12

    frames por segundo convincente sensação de movimento 60 frames por segundo Transições suaves (smooth transitions)
  2. TEMPO É VITAL | RENDERIZAÇÃO NO ANDROID Em 16ms: •

    Computação • Desenhar componentes na tela • Atualização de views na tela • Animações • Tempo para o GC recolher objetos 16ms 16ms 16ms Calculando: 1000ms 60 frames = 16.666ms/frame Draw Draw Draw
  3. DROPPED FRAME | RENDERIZAÇÃO NO ANDROID • Execução > 16ms

    • Animações/transições sofrem pausa • Sensação que o app travou (Lagging) • Se um frame for removido, só será desenhado em 32ms. Se for novamente removido, só será desenhado em 48ms 22ms 20ms 8ms Frame removido Frame removido Task 1 Task 2 Task 3 Task 4 Task 5 Task 4 Task 5 Task 6 Task 7 Task 5 Task 6 Task 7 Task 8 Task 9 Draw
  4. OVERDRAW | RENDERIZAÇÃO NO ANDROID Overdraw • Número vezes que

    um pixel é redesenhado 
 (em cada frame) • Algumas vezes colocamos backgrounds desnecessários Nome Loren ipsun loren loren ipsun loren favoritar compartilhar Nome Loren ipsun loren loren ipsun loren favoritar compartilhar Nome Loren ipsun loren loren ipsun loren favoritar compartilhar Como você vê seu app Como Android vê seu app
  5. CUSTOMIZAÇÃO DO TEMA | OVERDRAW fundo amarelo fundo roxo fundo

    rosa <style> <item name=“android:windowBackground”>…</item> </style> styles.xml <activity android:name=".MainActivity" android:theme="@style/AppYellowTheme"> </activity> AndroidManifest.xml
  6. REMOÇÃO DE BACKGROUND DESNECESSÁRIOS | OVERDRAW <LinearLayout … > <android.support.v7.widget.CardView

    … > <RelativeLayout android:background=“@color/white … > … </LinearLayout>
  7. ETAPAS RENDERIZAÇÃO X SOLUÇÕES (6.0+) | GPU PROFILING TOOL https://developer.android.com/topic/performance/rendering/profile-gpu?hl=pt-br

    Solução Extrair para outra thread Vsync delay/
 misc time Tempo entre frames Muito trabalho na mainThread Solução Extrair para outra thread/ diminuir trabalho no método Input Handling Tempo execução de código de Callback de Evento de input Measure/Layout Solução Reduzir hierarquia de views Tempo de retorno no onLayout() e onMeasure() Solução: Verificar animators Animations Tempo gasto para avaliar animators onClick( ) onLongClick( ) onFocusChange( ) onKeyListener( )
  8. ETAPAS RENDERIZAÇÃO X SOLUÇÕES (6.0+) | GPU PROFILING TOOL Draw

    Solução Diminuir trabalho no onDraw(). Considerar mover trabalho para outra thread Tempo para Executar o onDraw() Solução Tratar tamanho/ número de imagens Picasso / Glide Sync/Upload Tempo para upload de bitmap na GPU Command Issue Solução diminuir complexidade de lógica de desenho ex: canvas.drawPoints Tempo emissão de comandos de desenho para GPU (displayList) Swap/Buffers Solução Idem ao command issue Tempo que a CPU aguarda a GPU finalizar tarefas (comando final)
  9. ETAPAS RENDERIZAÇÃO X SOLUÇÕES (5.0) | GPU PROFILING TOOL Update

    Solução Diminuir trabalho em draw() Tempo para criar e atualizar displayLists Solução Tratar tamanho/ número de imagens Picasso / Glide XFer Tempo para upload de bitmap na GPU Execute Solução diminuir complexidade de lógica de desenho ex: canvas.drawPoints Tempo emissão de comandos para GPU Process Solução Idem ao command issue Tempo que a CPU aguarda para GPU finalizar tarefas <4.0
  10. DICAS - LAYOUT - REDUÇÃO DA HIERARQUIA DE VIEWS Layout

    Inspector TextView e Buttons: Drawable Left/Start/ Right/End Top/Bottom Constraint Layout - 40% mais rápido https://bit.ly/2vQKxeM
  11. DICAS | OTIMIZAÇÕES DE PERFORMANCE CustomViews • Reduzir lógica em

    métodos como onDraw(), onLayout(), onMeasure() • Considerar o uso de threads para separar lógica da thread principal • Desenhar somente o que está visível (quando há muitos itens sobrepostos) • Evite chamar o metodo invalidate() com frequência (se não for necessário) Imagem • Considerar uso das bibliotecas: Picasso, Glide, etc. Resources • Bitmaps e drawables (que são fornecidos através do tema) são agrupados em uma textura única e carregados na GPU. Ao usar estes recursos não oneramos performance
  12. LINKS ÚTEIS | OTIMIZAÇÕES DE PERFORMANCE • Reduzir layouts com

    transparência (The hidden cost of transparency) 
 https://www.youtube.com/watch?v=wIy8g8yNhNk • Sobreposição de views
 https://br.udacity.com/course/android-performance--ud825 • Loving lean layouts (Huyen Tue Dao)
 https://youtu.be/gwqQT5NrhUg • Android performance (documentação oficial)
 https://developer.android.com/topic/performance/index.html • Android performance patterns (série performance oficial)
 https://goo.gl/Yk81he
  13. CONTATO | PAULA CAROLINE DA ROSA Paula Rosa • @_paulacr

    • https://medium.com/@Paula.Rosa • [email protected] • https://www.linkedin.com/in/paularosa/ • [email protected] (vagas)