ConfigStore

In Android werden Systemeigenschaften in der ConfigStore-Klasse gespeichert. ConfigStore verwendet Build-Flags, um Konfigurationswerte in der Anbieterpartition zu speichern, und ein Dienst in der Systempartition greift über HIDL auf diese Werte zu.

In Systemeigenschaften wird PRODUCT_DEFAULT_PROPERTY_OVERRIDES verwendet, um Systemeigenschaften in default.prop in der Anbieterpartition zu speichern. Der Dienst verwendet sysprop, um diese Attribute zu lesen.

Der ConfigStore HAL bleibt in AOSP, um Legacy-Anbieterpartitionen zu unterstützen. Auf Geräten mit Android 10 liest surfaceflinger zuerst die Systemeigenschaften. Wenn in SurfaceFlingerProperties.sysprop keine Systemeigenschaft für ein Konfigurationselement definiert ist, greift surfaceflinger auf den ConfigStore HAL zurück.

Build-Flags und Systemattribute

Jedes Build-Flag in ConfigStore hat eine übereinstimmende Systemeigenschaft, wie in der folgenden Tabelle gezeigt.

Build-Flags Systemeigenschaften
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

Neue Systemeigenschaften

Android 10 umfasst die folgenden neuen Systemeigenschaften:

  • ro.surface_flinger.default_composition_dataspace
  • ro.surface_flinger.default_composition_pixel_format
  • ro.surface_flinger.use_color_management
  • ro.surface_flinger.wcg_composition_dataspace
  • ro.surface_flinger.wcg_composition_pixel_format
  • ro.surface_flinger.display_primary_red
  • ro.surface_flinger.display_primary_green
  • ro.surface_flinger.display_primary_blue
  • ro.surface_flinger.display_primary_white
  • ro.surface_flinger.protected_contents
  • ro.surface_flinger.set_idle_timer_ms
  • ro.surface_flinger.set_touch_timer_ms
  • ro.surface_flinger.use_smart_90_for_video
  • ro.surface_flinger.protected_contents
  • ro.surface_flinger.support_kernel_idle_timer

Weitere Informationen zu diesen Eigenschaften findest du unter frameworks/native/services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop.

SurfaceFlingerProperties verwenden

In den folgenden Beispielen für die SurfaceFlingerProperties-Bibliothek lautet der Funktionsname 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);
    ...
}
...