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++
- Monitora la memoria utilizzando i comandi della console
- Visualizza la memoria con Unreal Insights
- Verifica l'utilizzo preciso della memoria utilizzando Perfetto
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. |
stat unit
che mostra la riga MemVisualizza 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.
- Collega il dispositivo ai canali di traccia della memoria con flag che includono
default,countersper visualizzare il graficoPlatformMemory/UsedPhysical(VmRSS + VmSwap) insieme alla sequenza temporale dei frame. - (Facoltativo) Per monitorare le metriche di memoria personalizzate in modo più dettagliato, dichiara e aggiorna un contatore di traccia personalizzato utilizzando
TRACE_DECLARE_MEMORY_COUNTEReTRACE_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());
}
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.