Desempenho e memória do Canvas
O que o Canvas faz para um quadro grande continuar utilizável — e o que você pode observar quando um cartão sai da tela.
Um quadro com muitos cartões custa caro: cada terminal é um processo e um buffer, cada editor é uma árvore de elementos na tela. Esta página explica o que o app faz para o quadro continuar utilizável — e o que isso significa para você.
Nada aqui é uma configuração. Não existe um ajuste de desempenho do Canvas para ligar, desligar ou calibrar. É política interna do app.
A ideia: energia por cartão
Cada cartão tem um nível de energia, calculado a partir de onde ele está em relação à área visível, do estado de janela (normal ou minimizado) e de limites internos:
| Nível | O que significa |
|---|---|
| Ativo | Na área visível e desenhando por completo. |
| Quente | Montado e pronto, com a pintura suspensa enquanto está fora de vista. |
| Suspenso | O cartão foi minimizado: o corpo sai da tela, mas o conteúdo continua vivo. |
| Estacionado | O cartão continua fora da área visível depois do tempo de histerese: mesmo efeito do suspenso, por outro motivo. |
| Despejado | O conteúdo foi destruído na tela; a sessão continua viva no processo principal. |
O ponto central: a sessão nunca morre por causa de energia. Um terminal fora da tela continua recebendo o que o processo escreve; uma conversa continua a mesma. O que muda é quanto trabalho de tela o cartão dá.
Quais cartões podem ser suspensos
Só cartões de terminal. Notas, arquivos, conversas e navegadores nunca são suspensos nem despejados: o corpo deles fica sempre montado. O texto de uma nota não desaparece por causa de desempenho.
Os limites internos
- Há um teto de 50 corpos suspensos ou estacionados ao mesmo tempo. Passando disso, os mais antigos passam a ser despejados.
- Há um teto de 20 contextos gráficos de terminal ao mesmo tempo.
- A histerese — o tempo que um cartão precisa ficar fora de vista antes de ser suspenso — é da ordem de um minuto.
- A volta de um cartão suspenso é limitada por quadro, e sob pressão crítica de memória ela é adiada: os cartões ficam onde estão em vez de voltar todos de uma vez.
Estes números são política interna e podem mudar entre versões. Eles não são um contrato, e não existe hoje uma forma de configurá-los pela interface.
O que você observa
- Cartão fora da tela volta com o conteúdo dele. O buffer do terminal é preservado enquanto o cartão está suspenso ou estacionado; ao voltar, a tela é redesenhada a partir dele.
- Não há aviso na tela sobre suspender ou despejar. Não existe indicador de “este cartão foi suspenso” nem notificação sobre isso. Como isso só acontece com cartões fora de vista, você normalmente não percebe.
- Minimizar não é fechar. Um cartão minimizado tem o conteúdo mantido, oculto, e continua rodando.
Cuidado com um defeito conhecido. Um terminal pode voltar preto depois de sair da área visível ou de ser minimizado. Se você encontrar um terminal preto ao voltar para um cartão, use Recarregar no menu do cartão: ele religa uma tela nova ao mesmo processo, e o trabalho continua de onde estava. Não feche o cartão nesse estado — fechar encerra a sessão.
O que já foi medido
Estas medições são do projeto e servem para dar ordem de grandeza — não são promessa de desempenho na sua máquina:
- Antes: um quadro com muitos cartões chegou a ter quadros de até 495 ms em produção durante o arrasto do quadro.
- Depois do escalonamento (os cartões voltam em ondas, não todos no mesmo quadro): o pior quadro caiu para 139 ms, e o custo fixo de cerca de 100 ms por atualização de posição continua em aberto.
- Abrir um menu com 25 cartões caiu de 183 ms para 58 ms.
- Criar uma nota e conseguir digitar nela levou 262 ms.
A régua do projeto é contar quadros lentos, não a média. A meta é 60 quadros por segundo (33 ms por quadro), e o que se mede é quantos quadros passam de 33 ms e de 100 ms. A média esconde exatamente o que a pessoa sente.
Sobre a instrumentação
O Canvas tem uma instrumentação de desempenho interna, acessível apenas pela janela de desenvolvimento do aplicativo — não há interface de produto para ela. Ela mede renderizações, o tempo até o editor de nota aceitar a primeira tecla e latências de estacionamento, e pode ser ligada sem recompilar.
Se você não é quem está mexendo no código do app, isso não muda nada na sua experiência: é ferramenta de diagnóstico.
Limites que valem saber
- Um quadro grande continua sendo um quadro grande. Os limites reduzem o custo, não eliminam o fato de que cada terminal é um processo.
- O estado do quadro cresce com o uso. Cada workspace guarda o seu arranjo, e isso não é apagado sozinho.
- Sem LOD por zoom. Não existe hoje um comportamento de “simplificar o cartão quando o zoom está afastado”; os cartões são desenhados como são.