Detecció de maquinari i configuració del sistema
Un servei per capes que captura un snapshot de maquinari i SO en l'arrencada i l'exposa a qualitat adaptativa, analítiques i informes d'errors.
Per a què serveix aquest sistema
Tot joc que es publica necessita saber en què s'està executant. El model de GPU, el pressupost de VRAM, la RAM del sistema, les pantalles connectades amb les seves freqüències de refresc, l'idioma, la zona horària i el suport de ray tracing són dades que condicionen els presets de qualitat, els esdeveniments d'analítiques i els informes de fallades. Recopilar-los de manera fiable i coherent és codi repetitiu que cada projecte reinventa.
El mòdul de System Configuration de Serenity ho resol una sola vegada. Captura un snapshot estructurat durant la pipeline d'inicialització, el manté en memòria durant tota la sessió i l'exposa a través d'interfícies tipades que la resta del framework ja sap com consumir.
El problema a Unity
Unity exposa la informació de maquinari a través d'APIs estàtiques disperses — SystemInfo, Screen, Display i QualitySettings — distribuïdes en diversos namespaces sense una estructura acordada. Cada projecte acaba amb una classe d'utilitat diferent, un conjunt diferent de camps i un moment distint per fer la recopilació. Quan arriba un informe de fallada, el context de maquinari és incomplet o directament absent. Quan la qualitat adaptativa necessita saber quanta VRAM hi ha disponible, accedeix a SystemInfo directament i s'acobla a l'API de Unity.
Sense un mòdul dedicat, la detecció de maquinari es duplica, és incoherent i no es pot testejar. Els camps es recopilen en el moment equivocat, l'idioma es llegeix de manera diferent en parts diferents del codi i els canvis de resolució durant una sessió passen desapercebuts fins al pròxim reinici.
Com ho aborda Serenity
Serenity exposa la configuració del sistema a través d'ISystemConfigurationService, que combina ISystemConfigurationProvider per llegir el snapshot i ISystemConfigurationSnapshotStore per persistir-lo. El snapshot en si està descrit per ISystemConfigurationSnapshot, una interfície estructurada que cobreix GpuName, GpuMemoryMB, SystemMemoryMB, SupportsRayTracing, SupportsComputeShaders, PrimaryDisplayWidth, PrimaryDisplayHeight, PrimaryDisplayRefreshRate, un array Displays d'entrades DisplayInfo, Language, CultureName, RegionDisplayName, TimeZoneId, OperatingSystem, DeviceModel i la marca de temps UTC CollectedAtUtc.
Els canvis de resolució en temps d'execució els gestiona IResolutionChangeDetector, que emmagatzema un estat de referència i informa de canvis significatius mitjançant HasMeaningfulChange. Els ajustos es controlen a través d'ISystemConfigurationSettings, cobrint quan recopilar (arrencada, canvi de focus, canvi de resolució, polling), quins camps incloure, el mode de detecció de ray tracing, la font de la freqüència de refresc, l'índex de pantalla principal i la sincronització opcional amb Game Settings mitjançant SnapshotKeyMap.
Com encaixa a Serenity
System Configuration viu al namespace Serenity.SystemConfiguration i segueix l'estructura per capes de la foundation. La capa de Domini defineix DisplayInfo, enums com RayTracingDetectionMode, RefreshRateSourceMode, CultureListSourceMode i PlatformMask, a més de value objects com SnapshotKeyMap. La capa d'Aplicació posseeix les interfícies de servei i snapshot, el snapshot store, el detector de canvis de resolució, el contracte d'ajustos i la CollectSystemConfigurationTask que s'executa durant la pipeline d'inicialització. La capa d'Infraestructura proporciona les implementacions de Unity — UnitySystemConfigurationService, UnitySystemConfigurationSnapshot i UnityResolutionChangeDetector — darrere de les interfícies d'aplicació perquè es puguin substituir sense tocar els consumidors.
System Configuration coopera amb la Initialization Pipeline, que dispara la tasca de recopilació en l'arrencada abans que cap altre sistema necessiti dades de maquinari. Coopera amb Game Graphics, que llegeix el snapshot per seleccionar el preset de qualitat inicial. Coopera amb Game Settings a través del SyncMap, de manera que els valors del snapshot es poden escriure directament en claus d'ajustos. Coopera amb l'Event Dispatcher i els serveis de logging per al context de telemetria i informes de fallades.
Flux de treball pràctic
- Configura ISystemConfigurationSettings per seleccionar quins camps incloure — maquinari, informació de pantalla, cultura — i quan recopilar.
- Estableix CollectOnStartup a true perquè la pipeline d'inicialització executi CollectSystemConfigurationTask abans que arranqui cap altre sistema.
- Activa opcionalment CollectOnFocusChange i CollectOnResolutionChange per refrescar el snapshot quan canviï l'entorn.
- Injecta ISystemConfigurationService allà on la qualitat adaptativa, les analítiques o els informes de fallades necessitin context de maquinari.
- Fes servir IResolutionChangeDetector si algun sistema necessita reaccionar a canvis de pantalla entre snapshots.
- Configura SyncMap a ISystemConfigurationSettings per bolcar valors del snapshot — VRAM, resolució, freqüència de refresc — en claus de Game Settings de manera automàtica.
Què inclou
- Interfície de servei ISystemConfigurationService que combina provider i snapshot store
- Snapshot estructurat ISystemConfigurationSnapshot amb nom de GPU, VRAM, RAM, suport de ray tracing i compute shaders
- Llista de pantalles mitjançant DisplayInfo cobrint amplada, alçada, freqüència de refresc i flag de primària per a cada monitor connectat
- Camps d'idioma i zona horària Language, CultureName, RegionDisplayName i TimeZoneId a cada snapshot
- Detecció de canvis de resolució mitjançant IResolutionChangeDetector amb CacheCurrent i HasMeaningfulChange
- Disparadors de recopilació configurables: arrencada, canvi de focus, canvi de resolució i interval de polling
- Sincronització amb Game Settings mitjançant SnapshotKeyMap perquè les dades de maquinari flueixin a claus d'ajustos sense ponts manuals
- Infraestructura de Unity reemplaçable darrere d'interfícies de domini per a testabilitat i flexibilitat de plataforma
Quan fer-lo servir
- Projectes que necessiten context de maquinari fiable per a presets de qualitat adaptativa des del primer frame.
- Jocs que envien analítiques o informes de fallades i necessiten un payload de maquinari coherent i estructurat.
- Projectes amb múltiples sortides de pantalla on la freqüència de refresc i la resolució s'han de seguir per monitor.
- Bases de codi que volen idioma i zona horària capturats en l'arrencada sense duplicar trucades a SystemInfo per tot el projecte.
Sistemes relacionats
Utilitza Serenity quan vulguis una detecció de maquinari i SO que es recopili una sola vegada en l'arrencada, s'emmagatzemi en un snapshot tipat i ja estigui connectada a qualitat adaptativa i analítiques — sense codi repetitiu ni trucades disperses a SystemInfo per tot el codi.
English
Español
Català