In Android, le proprietà di sistema sono memorizzate nella classe ConfigStore. ConfigStore utilizza i flag di build per memorizzare i valori di configurazione nella partizione del fornitore e un servizio nella partizione di sistema accede a questi valori utilizzando HIDL.
Le proprietà di sistema utilizzanoPRODUCT_DEFAULT_PROPERTY_OVERRIDES per
memorizzare le proprietà di sistema in default.prop nella partizione del fornitore,
e il servizio utilizza sysprop per leggere queste proprietà.
L'HAL ConfigStore rimane in AOSP per supportare le partizioni del fornitore legacy. Sui
dispositivi con Android 10,
surfaceflinger legge prima le proprietà di sistema; se non è definita alcuna proprietà di sistema
per un elemento di configurazione in
SurfaceFlingerProperties.sysprop, surfaceflinger
esegue il fallback all'HAL ConfigStore.
Flag di build e proprietà di sistema
Ogni flag di build in ConfigStore ha una proprietà di sistema corrispondente, come mostrato nella tabella seguente.
| Flag di build | Proprietà di sistema |
|---|---|
TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS
|
ro.surface_flinger.force_hwc_copy_for_virtual_displays
|
TARGET_HAS_HDR_DISPLAY
|
ro.surface_flinger.has_HDR_display
|
TARGET_HAS_WIDE_COLOR_DISPLAY
|
ro.surface_flinger.has_wide_color_display
|
NUM_FRAMEBUFFER_SURFACE_BUFFERS
|
ro.surface_flinger.max_frame_buffer_acquired_buffers
|
MAX_VIRTUAL_DISPLAY_DIMENSION
|
ro.surface_flinger.max_virtual_display_dimension
|
PRIMARY_DISPLAY_ORIENTATION
|
ro.surface_flinger.primary_display_orientation
|
PRESENT_TIME_OFFSET_FROM_VSYNC_NS
|
ro.surface_flinger.present_time_offset_from_vsync_ns
|
TARGET_RUNNING_WITHOUT_SYNC_FRAMEWORK
|
ro.surface_flinger.running_without_sync_framework
|
SF_START_GRAPHICS_ALLOCATOR_SERVICE
|
ro.surface_flinger.start_graphics_allocator_service
|
TARGET_USE_CONTEXT_PRIORITY
|
ro.surface_flinger.use_context_priority
|
USE_VR_FLINGER
|
ro.surface_flinger.use_vr_flinger
|
VSYNC_EVENT_PHASE_OFFSET_NS
|
ro.surface_flinger.vsync_event_phase_offset_ns
|
SF_VSYNC_EVENT_PHASE_OFFSET_NS
|
ro.surface_flinger.vsync_sf_event_phase_offset_ns
|
Nuove proprietà di sistema
Android 10 include le seguenti nuove proprietà di sistema:
ro.surface_flinger.default_composition_dataspacero.surface_flinger.default_composition_pixel_formatro.surface_flinger.use_color_managementro.surface_flinger.wcg_composition_dataspacero.surface_flinger.wcg_composition_pixel_formatro.surface_flinger.display_primary_redro.surface_flinger.display_primary_greenro.surface_flinger.display_primary_bluero.surface_flinger.display_primary_whitero.surface_flinger.protected_contentsro.surface_flinger.set_idle_timer_msro.surface_flinger.set_touch_timer_msro.surface_flinger.use_smart_90_for_videoro.surface_flinger.protected_contentsro.surface_flinger.support_kernel_idle_timer
Per maggiori dettagli su queste proprietà, consulta
frameworks/native/services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop.
Utilizzare SurfaceFlingerProperties
Negli esempi seguenti per la libreria SurfaceFlingerProperties, il
nome della funzione è api_name in
SurfaceFlingerProperties.sysprop.
cc_binary { name: "cc_client", srcs: ["baz.cpp"], shared_libs: ["SurfaceFlingerProperties"], } java_library { name: "JavaClient", srcs: ["foo/bar.java"], libs: ["SurfaceFlingerProperties"], }
import android.sysprop.SurfaceFlingerProperties; ... static void foo() { ... boolean temp = SurfaceFlingerProperties.vsync_event_phase_offset_ns().orElse(true); ... } ...
#include <SurfaceFlingerProperties.sysprop.h> using namespace android::sysprop; ... void bar() { ... bool temp = SurfaceFlingerProperties::vsync_event_phase_offset_ns(true); ... } ...