Controllare la memoria utilizzata con Unreal Engine

La metrica 'anonymous RSS + swap' rappresenta la pressione della memoria di un processo ed è fondamentale per mantenere la stabilità del gioco. Funge sia da soglia del limite di memoria per Memory Limiter (Android 17 e versioni successive) sia da benchmark standard per Memory Vitals nella Google Play Console.

È difficile misurare la memoria utilizzata che corrisponda esattamente a "anonymous RSS + swap" sia in fase di runtime sia staticamente in Unreal Engine.

Per monitorare l'utilizzo della memoria, Unreal Engine fornisce la VmRSS + VmSwap metrica. Anche se è più ampia di "anonymous RSS + swap" perché VmRSS include rssFile e rssShmem, funge comunque da stima affidabile.

Segui queste indicazioni per analizzare il footprint della memoria del tuo gioco:

Esegui query sulla memoria utilizzando le API C++

Utilizza le seguenti API C++ per eseguire query sulle metriche di memoria:

Query di memoria leggera

Utilizza GetMemoryUsedFast per una query di memoria leggera. Su Android, questo metodo restituisce l'impronta stimata analizzando solo i campi di memoria necessari da /proc/self/status, anziché leggere l'intero file.

Statistiche di memoria dettagliate

Utilizza GetStats per eseguire query sulle statistiche di memoria della piattaforma dettagliate. Questo metodo fornisce statistiche di memoria della piattaforma complete, restituendo sia FPlatformMemoryStats.UsedPhysical sia FPlatformMemoryStats.RssFile. Poiché UsedPhysical è la somma di VmRSS e VmSwap, puoi avvicinarti al valore di benchmark sottraendo RssFile da esso.

#include "HAL/PlatformMemory.h"

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

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

Monitora la memoria utilizzando i comandi della console

Utilizza questo approccio per monitorare le tendenze della memoria mentre il gioco è in esecuzione sul dispositivo. Per aprire la console, tocca lo schermo con quattro dita, quindi inserisci i seguenti comandi.

Comando Descrizione
stat unit Visualizza l'utilizzo corrente della memoria fisica aggregata nella riga Mem, aggiornata ogni frame.
stat unitmax Visualizza l'utilizzo medio e il picco di sessione della memoria fisica e virtuale aggregata nella riga Mem.

Overlay dell'unità di statistiche di Unreal Engine che mostra la riga Mem.
Figura 1. La sovrapposizione stat unit che mostra la riga Mem
.

Visualizza la memoria con Unreal Insights

Unreal Insights ti consente di monitorare e visualizzare le metriche di memoria, come le statistiche di memoria della piattaforma e i contatori personalizzati, nel tempo utilizzando grafici della sequenza temporale accurati per frame.

  1. Collega il dispositivo ai canali di traccia della memoria con flag che includono default,counters per visualizzare il grafico PlatformMemory/UsedPhysical (VmRSS + VmSwap) insieme alla sequenza temporale dei frame.
  2. (Facoltativo) Per monitorare le metriche di memoria personalizzate in modo più dettagliato, dichiara e aggiorna un contatore di traccia personalizzato utilizzando 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 che mostra Memory/EstimatedPhysicalMemory.
Figura 2. La sequenza temporale di Unreal Insights che mostra il contatore Memory/EstimatedPhysicalMemory personalizzato.

Verifica l'utilizzo preciso della memoria utilizzando Perfetto

Per verificare i valori esatti di 'anonymous RSS + swap' del sistema operativo Android anziché una stima, utilizza Perfetto. Perfetto acquisisce le metriche di memoria a livello di sistema per valutare l'impronta esatta del tuo gioco.

Perfetto UI che mostra la query RSS anonima, swap e la relativa somma.
Figura 3. L'interfaccia utente di Perfetto che mostra la query relativa a RSS anonimo, swap e alla loro somma.