
-
Monitore e otimize o consumo de energia do seu app
Saiba como otimizar seu app para economizar carga da bateria. Descubra como identificar a causa principal dos problemas de consumo de energia no seu app, seja ao reproduzi-los com o Xcode conectado ou em testes no dispositivo, em uso real. Aprenda como medir o consumo de energia para guiar decisões sobre novos recursos e criar apps mais eficientes desde o início.
Capítulos
- 0:00 - Introdução
- 1:52 - Depurar problemas que podem ser reproduzidos
- 9:37 - Descobrir problemas ocultos
- 16:19 - Comparar o uso de energia
- 18:25 - Otimizar de forma proativa
Recursos
Vídeos relacionados
WWDC25
-
Buscar neste vídeo...
Olá, pessoal! Sou Wiam, software engineer na Apple. Estou feliz em falar com vocês sobre otimização de energia.
Oferecer experiências de alta qualidade em apps é o que você faz de melhor. As pessoas adoram apps nos quais podem confiar, e uma parte crucial dessa confiabilidade é uma boa duração da bateria. Apps com consumo eficiente de energia aumentam o engajamento e a satisfação. Mas um app que consome muita energia pode arruinar essa experiência. E se eu mostrasse uma arma secreta: uma ferramenta para criar apps avançados e que consomem menos energia? Neste vídeo, você vai aprender maneiras de resolver problemas de energia usando esta ferramenta. Antes de entrar nos detalhes, vou apresentar o que veremos hoje. Vou começar abordando os problemas que você pode reproduzir na sua mesa. Vou mostrar um exemplo prático para ensinar como identificar e reduzir o consumo excessivo de energia.
Em seguida, mostrarei como enfrentar cenários reais mais desafiadores, que são mais difíceis de identificar. Veremos como coletar dados em qualquer ambiente.
Em seguida, vou demonstrar como comparar o consumo de energia de diferentes implementações. Isso oferece uma forma clara de avaliar e melhorar a eficiência do app.
Por fim, vou mostrar como detectar problemas de energia no início do desenvolvimento e entregar uma versão altamente otimizada do seu app.
Você pode ter notado consumo de energia alto no Xcode, indicando um problema, mas é difícil encontrar a causa principal. Nessas situações, você precisa executar seu app, reproduzir o problema e gravar métricas de energia.
O Power Profiler no Instruments é perfeito para isso. Ele permite criar um perfil do seu app e gravar um monitoramento de energia para visualização no Instruments. Este é o problema que estou tentando resolver no meu app. Estou trabalhando em um app de streaming de vídeo, Destination Video, para assistir a conteúdo no iPhone e iPad. Quero aprimorar o app, então adicionei um painel Library para navegar por toda a coleção de vídeos. Quando verifiquei o relatório de energia do Organizer do Xcode, notei um aumento significativo no uso da CPU em relação à antes. Isso significa desempenho mais lento e menor duração da bateria. Vou usar o Power Profiler no Instruments para investigar essa regressão. Primeiro, vou abrir o projeto no Xcode e conectar meu iPhone sem fio. Depois, acesso o produto e clico em Profile. Isso vai compilar e instalar o app no meu dispositivo e abrir o Instruments. Seleciono o modelo em branco e seleciono Power Profiler e CPU Profiler para coletar informações sobre o uso da CPU. Você pode escolher outros instrumentos se precisar. Vou usar os ajustes padrão e começar a gravar.
Agora vou mudar para o dispositivo e abrir o painel Library.
Também notei uma lentidão ao abrir este painel, provavelmente relacionada ao problema investigado. Vou parar a gravação e analisar o monitoramento. Vou focar a gravação pressionando Command + Control + Z. Para expandir a trilha do Power Profiler, clique no triângulo à esquerda da trilha. Com o Power Profiler, tenho acesso a métricas de energia do sistema e de impacto de potência por app. A primeira faixa mostra o uso de energia do sistema, indicando o consumo total de energia. Quanto maior o valor, mais energia seu app está consumindo. Você pode selecionar uma região e inspecionar o valor médio no painel de resumo. Após selecionar um intervalo no monitoramento, o painel de resumo indica 10,5%/hora. O próximo passo é analisar as métricas de impacto de energia do app. Posso analisar várias métricas relacionadas a diferentes subsistemas: o impacto de energia da CPU, GPU, tela e rede. A faixa de impacto de energia da CPU é crucial, pois alta atividade aumenta o consumo de energia. Uso contínuo ou intenso da CPU aumenta o consumo de energia. Houve um pico no impacto de energia da CPU logo após eu tentar abrir o painel Library. Vou destacar a região anterior para determinar o valor médio do impacto de energia da CPU. O valor médio é 1. Agora vou destacar o pico. O impacto médio de energia da CPU é 21, muito maior que o valor anterior. Esse valor é uma pontuação que ajuda a identificar picos inesperados de energia e priorizar a depuração do subsistema com maior impacto.
O Time Profiler localiza a origem da sobrecarga da CPU, mostrando as funções que mais consomem tempo da CPU. Vou clicar em CPU Profiler, focar a análise no código específico do app, analisar a Call Tree e selecionar Hide System Libraries. No painel Heaviest Stack Trace, o Instruments indica que um tempo significativo está sendo gasto em VideoCardView. Como o corpo dessa visualização é relativamente simples, o problema deve vir da frequência com que é chamada. Isso significa que vou verificar LibraryThumbnailView em seguida. É ele que gera todas as miniaturas de vídeo no painel Library, então é bem provável que o problema esteja ali. Vou voltar para o Xcode para analisar o código dentro dessa visualização.
O código itera por toda a variedade de vídeos. Para cada vídeo, ele gera uma VideoCardView, que cria sua miniatura e uma visualização para exibi-la. Todas as visualizações são colocadas em um VStack. Agora, imagine que há centenas ou até milhares de vídeos. Essa abordagem faz com que o app carregue todas as miniaturas e crie todas as visualizações de uma vez assim que o painel Library aparece, independentemente de estarem visíveis na tela ou não. Isso é ineficiente e explica o alto uso da CPU que descobri no Instruments. O app está fazendo muito trabalho carregando conteúdo que ainda nem é necessário. Felizmente, a SwiftUI oferece uma ótima API para isso: LazyVStack. Ela cria e renderiza apenas as visualizações dos itens que estão visíveis ou prestes a aparecer na tela. Então, a otimização é simples. Vou substituir o VStack pelo LazyVStack. Vou fornecer a mesma variedade de vídeos, mas a visualização gerencia a criação e a destruição das visualizações dos itens conforme a rolagem. Vou testar esta otimização agora. Vou clicar em Profile novamente e começar a gravar. No meu dispositivo, vou abrir o painel Library.
Meu app agora está responsivo. Não está mais travando. Vou parar a gravação e rolar até a faixa de impacto de energia da CPU.
Vou destacar a mesma região para poder determinar o valor médio. Agora indica uma média menor: 4,3 em vez dos 21 anteriores. Isso resolve a regressão da CPU. Carregar todas as miniaturas de vídeo no painel Library foi identificado como a causa do consumo de energia desnecessário. O Instruments ajudou a identificar o código ineficiente, e a mudança para carregamento sob demanda tornou o recurso mais eficiente. Para entender melhor as técnicas de criação de perfil e otimização da CPU, confira o vídeo "Otimizar o desempenho da CPU com Instruments", da WWDC. O Power Profiler fornece informações úteis sobre o consumo de energia do seu app. Lembre-se de utilizá-lo sempre que suspeitar de um problema e não souber em qual subsistema focar ou o que otimizar.
Até agora, tenho criado perfis com meu iPhone conectado ao Xcode. Isso é ótimo para testes controlados, mas nem sempre mostra o quadro completo. E aqueles problemas frustrantes que só aparecem em situações reais? Aquelas que são impossíveis de reproduzir de modo consistente na sua mesa? Talvez você esteja enfrentando cenários como: Como seu app se comporta durante a navegação com o CarPlay? Ou quanta energia seu recurso de realidade aumentada consome ao ar livre? Como depurar o consumo de bateria em segundo plano que demora horas para aparecer? Como sua equipe de qualidade pode fornecer diagnósticos de energia úteis com base nos testes em campo? Para resolver isso, preciso de uma forma de coletar dados do uso real sem precisar de conexão direta com o Xcode. O Power Profiler também está no dispositivo e ajuda a encontrar problemas que não aparecem no desenvolvimento. Aqui está um exemplo concreto. Meu colega relatou sérios problemas de duração de bateria. Meu app Destination Video é sempre o que mais consome bateria no dispositivo dele.
Tentei de tudo, mas não consegui reproduzir o problema no meu ambiente. Cada pessoa usa o app de um jeito. Ele pode ter encontrado um caso extremo que ainda não vi. Com a criação de perfil de energia no dispositivo, não precisei do dispositivo dele. Pedi que ele fizesse uma gravação usando esse novo modo e me enviasse o arquivo. Vou mostrar como é fácil coletar esses dados. Primeiro, você precisa ativar o modo de desenvolvedor no app Ajustes, que fica disponível após conectar seu dispositivo ao Xcode.
Acesse Monitoramento de Desempenho nos ajustes de desenvolvedor. Com o Monitoramento de Desempenho ativado, é possível ativar o Power Profiler. Confira se essa opção está ativada. Em seguida, especifique de qual app deseja criar um perfil. Apenas apps instalados pelo Xcode, TestFlight ou programa empresarial podem ser monitorados. Selecione seu app na lista. Legal! Agora, inicie a coleta de dados. Deslize do canto superior direito para abrir a Central de Controle. O ícone do Monitoramento de Desempenho é usado para coletar dados. Toque no ícone após adicioná-lo para começar a gravação. Você pode deixar em execução por algumas horas ou até conseguir reproduzir o problema. Agora, pare a coleta. Toque no ícone do Monitoramento de Desempenho na Central de Controle. Isso gera um arquivo de monitoramento com todas as métricas de energia coletadas, que você pode compartilhar com seu Mac e abrir no Instruments. É isso! Foi exatamente isso que meu colega fez. Agora vou mostrar como analisar o arquivo que ele enviou para identificar a causa principal. Vou abrir o arquivo no Instruments. No monitoramento de energia, você acessa as métricas de energia do sistema, as métricas de impacto de energia por app e o Time Profiler. O Time Profiler nesse modo tem uma taxa de amostragem menor para reduzir o efeito do observador. A linha de impacto de energia da CPU mostra um padrão claro, com áreas distintas de alto impacto seguidas por períodos de baixo impacto, repetindo-se periodicamente. Definitivamente, não é o que eu esperaria do app Destination Video. Ao ampliar uma área de alto impacto, posso identificar a causa do uso de energia. Vou conferir o Time Profiler para ter uma ideia das funções sendo executadas nesse período. videoSuggestionsForLocation está no topo, consumindo muito tempo da CPU. Essa função faz parte do meu recurso de recomendar vídeos com base na localização, sugerindo vídeos sobre pontos turísticos ou eventos nas redondezas, e é chamada sempre que é alterada a localização. E isso explica por que eu não consegui reproduzir aqui! Sentado à mesa, minha localização é a mesma. A função pode ser executada uma vez ao iniciar o app, mas depois fica parada. Mas meu colega usa o app enquanto se desloca, e ele está em movimento o tempo todo! As atualizações frequentes de localização ativavam esse processo pesado de filtragem várias vezes. Vou abrir rapidamente o app Destination Video.
Esse recurso aparece no painel Nearby Suggestions. É ali que aparecem as recomendações baseadas em localização, todas geradas pela mesma função. Agora sei qual função está causando o problema. Vou analisar o código e descobrir o que posso fazer para otimizá-lo. videoSuggestionsForLocation é chamado sempre que minha localização é alterada. Ele é responsável por gerar uma lista de vídeos relevantes para exibição. Atualmente, toda vez que é chamada, a função lê o arquivo RecommendationRules para um objeto Data e usa JSONDecoder para convertê-lo no mapa RecommendationRule. E esse arquivo JSON não é pequeno, ele tem centenas de regras complexas. A análise de E/S de arquivos e JSON em arquivos grandes usam muitos recursos. O app faz todo esse trabalho pesado repetidamente, sempre que a localização é alterada. Com certeza essa é a origem do problema. As regras em si não mudam enquanto o app está em execução. Portanto, a otimização é carregar e analisar as regras apenas uma vez e armazená-las em cache. Essa mudança simples vai reduzir o trabalho feito a cada atualização de localização. Vou pedir ao meu colega para testar o app novamente após as otimizações. Sempre que você fizer uma correção no seu app, pode pedir para alguém testar nas mesmas condições e coletar outro monitoramento de energia. É a forma perfeita de confirmar que você resolveu o problema original e, igualmente importante, verificar que não criou outro problema de consumo de energia ao fazer a alteração. Isso ajuda muito a fechar o ciclo e ter confiança nas suas otimizações.
Certo, já expliquei como identificar problemas existentes. Mas como escolher com confiança entre diferentes estratégias de otimização antes do lançamento? Talvez uma otimização envolva uma compensação: menos uso da CPU, mas um pouco mais de atividade na rede. Como saber o efeito real na duração da bateria? Aqui está um cenário comum: você está desenvolvendo um novo recurso. Você já tem sua implementação. Vou chamar de Abordagem 1. É simples e parece eficiente quando testado com pequenas quantidades de dados. Mas seu colega propõe a Abordagem 2. Ela tem uma arquitetura diferente, um pouco mais complexa e lenta com pequenos conjuntos de dados, mas foi projetada para lidar melhor com grandes volumes de dados. Agora você está diante de um dilema: Qual delas é melhor para a duração da bateria? Tentar decidir isso apenas com testes locais ou analisando o código é realmente difícil. Testes locais podem não refletir o tamanho real dos dados ou as condições da rede ou o impacto das atividades em segundo plano. É aqui que você pode usar o Power Profiler, especialmente para comparar o impacto. Você pode criar o perfil do seu app com uma abordagem, depois com a outra, e comparar os valores. Condições como temperatura, estado do dispositivo e pressão do sistema podem afetar o consumo final de energia. Isso inclui o estado do app, a quantidade de dados gerenciados, as preferências ativadas e os recursos habilitados. Para levar em conta essas variáveis, você pode coletar várias execuções de cada abordagem em diferentes condições e fazer a média dos resultados, depois usar esses dados para orientar suas decisões sobre recursos e implementações, otimizando seu app para a melhor experiência possível. O Power Profiler é uma das muitas ferramentas disponíveis. Enquanto codifica, receba feedback com os medidores de energia do Xcode e aprofunde-se com o Instruments. Detecte problemas com XCTests automatizados. Após o lançamento, monitore o impacto em campo com o Xcode Organizer, MetricKit e a API App Store Connect. Essas ferramentas são suas aliadas na busca por eficiência energética, oferecendo contexto e insights valiosos. Ao usá-las de maneira eficaz, você pode incorporar uma estratégia sólida de eficiência energética ao processo de desenvolvimento. Você tem as ferramentas e o conhecimento para criar apps com consumo eficiente de energia. Use o Power Profiler desde o início, siga os dados para guiar suas decisões e itere com base no que aprender. Aqui está um desafio: colete o monitoramento do seu app e analise os dados. É uma maneira divertida de praticar suas novas habilidades. Essas são as dicas de energia que tenho. Agradeço sua participação.
-
-
- 0:00 - Introdução
Saiba mais sobre otimização de energia para apps.
- 1:52 - Depurar problemas que podem ser reproduzidos
O Power Profiler no Instruments é uma ferramenta valiosa para identificar problemas de consumo de energia nos apps. Wiam usa um exemplo de uso dessa ferramenta para investigar uma regressão de desempenho em um app de streaming de vídeo após adicionar um novo painel da biblioteca. No exemplo, o Power Profiler revela um aumento significativo no uso da CPU e no consumo de energia ao abrir o painel da biblioteca. Ao analisar o rastreamento em Instruments, Wiam identificou o problema como um código ineficiente que carregava todas as miniaturas de vídeo com antecedência. Para otimizar o desempenho, ela substituiu 'VStack' por 'LazyVStack', que só carrega visualizações conforme necessário. Após a implementação dessa alteração, o app se torna mais responsivo e o impacto de energia da CPU diminui bastante, demonstrando a eficácia do instrumento Power Profiler na identificação e resolução de gargalos de desempenho.
- 9:37 - Descobrir problemas ocultos
Com a ferramenta Power Profiler, é possível coletar dados do uso do app no mundo real, o que é fundamental para identificar problemas que não podem ser reproduzidos durante o desenvolvimento. Por exemplo, problemas de duração da bateria de um app só vão se manifestar fora de ambientes fechados ou em situações específicas de navegação. A ferramenta permite que você colete remotamente métricas de energia de dispositivos de teste. Quando você ativa o Modo de Desenvolvedor e o Rastreamento de Desempenho, os testadores podem registrar dados enquanto usam o app, que podem então ser compartilhados para a sua análise. Nesse processo, Wiam diagnostica um problema de duração da bateria no app causado por um recurso de recomendação baseado em localização, que estava realizando repetidamente operações de E/S de arquivos e análise de JSON com uso intensivo de recursos. Ao otimizar essa função para carregar e analisar dados de forma preguiçosa, a eficiência energética do app é melhorada e o problema é resolvido.
- 16:19 - Comparar o uso de energia
Ao desenvolver um novo recurso e se deparar com duas abordagens de implementação, use o Power Profiler para comparar o impacto na duração da bateria. Execute vários testes sob diversas condições para levar em conta variáveis como tamanho dos dados, rede e estado dispositivo, e então faça uma média dos resultados para tomar uma decisão.
- 18:25 - Otimizar de forma proativa
Xcode, Instruments e os SDKs da plataforma oferecem um pacote de ferramentas que inclui Medidores de energia, Instruments, XCTest, Organizer, MetricKit e a API App Store Connect, para você monitorar e otimizar a eficiência energética no desenvolvimento e após o lançamento de um app.