Verificar o uso da memória com o Unreal Engine

Representando a pressão de memória de um processo, 'RSS anônimo + troca' é uma métrica essencial para manter a estabilidade do jogo. Ele serve como limite de memória para o limitador de memória (Android 17 e mais recentes) e como referência padrão para as principais métricas de memória no Google Play Console.

É difícil medir o uso da memória que corresponda exatamente ao "RSS anônimo + troca" no tempo de execução ou estaticamente na Unreal Engine.

Para rastrear o uso da memória, a Unreal Engine fornece a VmRSS + VmSwap métrica. Embora seja mais ampla do que "RSS anônimo + troca" porque VmRSS inclui rssFile e rssShmem, ela ainda serve como uma estimativa confiável.

Siga estas orientações para analisar o consumo de memória do jogo:

Consultar a memória usando APIs C++

Use as APIs C++ a seguir para consultar métricas de memória:

Consulta de memória leve

Use GetMemoryUsedFast para uma consulta de memória leve. No Android, esse método retorna o consumo estimado analisando apenas os campos de memória necessários de /proc/self/status, em vez de ler o arquivo inteiro.

Estatísticas de memória detalhadas

Use GetStats para consultar estatísticas detalhadas de memória da plataforma. Esse método fornece estatísticas abrangentes de memória da plataforma, retornando FPlatformMemoryStats.UsedPhysical e FPlatformMemoryStats.RssFile. Como UsedPhysical é a soma de VmRSS e VmSwap, você pode se aproximar do valor de referência subtraindo RssFile dele.

#include "HAL/PlatformMemory.h"

uint64 GetEstimatedPhysicalMemory()
{
  FPlatformMemoryStats Stats = FPlatformMemory::GetStats();

#if PLATFORM_ANDROID
    return Stats.UsedPhysical - Stats.RssFile;
#else
    return Stats.UsedPhysical;
#endif
}

Monitorar a memória usando comandos do console

Use essa abordagem para monitorar as tendências de memória enquanto o jogo está em execução no dispositivo. Para abrir o console, toque na tela com quatro dedos e insira os comandos a seguir.

Comando Descrição
stat unit Mostra o uso agregado atual da memória física na linha Mem, atualizado a cada frame.
stat unitmax Mostra o uso médio e de pico da memória física e virtual agregada da sessão na linha Mem.

Sobreposição da unidade de estatísticas do Unreal Engine mostrando a linha "Mem".
Figura 1. A sobreposição stat unit exibindo a linha Mem.

Visualizar a memória com o Unreal Insights

O Unreal Insights permite monitorar e visualizar métricas de memória, como estatísticas de memória da plataforma e contadores personalizados, ao longo do tempo usando gráficos de linha do tempo precisos.

  1. Conecte o dispositivo aos canais de rastreamento de memória com flags que incluem default,counters para conferir o gráfico PlatformMemory/UsedPhysical (VmRSS + VmSwap) ao lado da linha do tempo do frame.
  2. Opcional: para rastrear métricas de memória personalizadas com mais detalhes, declare e atualize um contador de rastreamento personalizado usando TRACE_DECLARE_MEMORY_COUNTER e TRACE_COUNTER_SET.
#include "ProfilingDebugging/CountersTrace.h"

TRACE_DECLARE_MEMORY_COUNTER(Trace_EstimatedPhysicalMemory, TEXT("Memory/EstimatedPhysicalMemory"));

void UpdateMemoryTraceCounter()
{
    // Note: Ensure GetEstimatedPhysicalMemory() is defined as shown
    // in the Query memory at runtime using C++ APIs section.
    TRACE_COUNTER_SET(Trace_EstimatedPhysicalMemory, GetEstimatedPhysicalMemory());
}

Unreal Insights mostrando Memory/EstimatedPhysicalMemory.
Figura 2. A linha do tempo do Unreal Insights mostrando o contador personalizado Memory/EstimatedPhysicalMemory.

Verificar o uso preciso da memória usando o Perfetto

Para verificar os valores exatos do 'RSS anônimo + troca' do SO Android em vez de uma estimativa, use Perfetto. O Perfetto captura métricas de memória no nível do sistema para avaliar o consumo exato do jogo.

Interface do Perfetto mostrando RSS anônimo, troca e a consulta de soma deles.
Figura 3. A interface do Perfetto mostrando o RSS anônimo, a troca e a consulta da soma deles.