ConfigStore

ใน Android ระบบจะจัดเก็บพร็อพเพอร์ตี้ของระบบไว้ในคลาส ConfigStore ConfigStore ใช้แฟล็กบิลด์ เพื่อจัดเก็บค่าการกำหนดค่าในพาร์ติชันของผู้จำหน่าย และบริการในพาร์ติชันของระบบจะเข้าถึง ค่าเหล่านั้นโดยใช้ HIDL

พร็อพเพอร์ตี้ของระบบใช้ PRODUCT_DEFAULT_PROPERTY_OVERRIDES เพื่อ จัดเก็บพร็อพเพอร์ตี้ของระบบใน default.prop ในพาร์ติชันของผู้ให้บริการ และบริการใช้ sysprop เพื่ออ่านพร็อพเพอร์ตี้เหล่านั้น

HAL ของ ConfigStore ยังคงอยู่ใน AOSP เพื่อรองรับพาร์ติชันของผู้ให้บริการเดิม ในอุปกรณ์ที่ใช้ Android 10 surfaceflinger จะอ่านพร็อพเพอร์ตี้ของระบบก่อน หากไม่มีพร็อพเพอร์ตี้ของระบบ ที่กำหนดไว้สำหรับรายการการกำหนดค่าใน SurfaceFlingerProperties.sysprop surfaceflinger จะกลับไปใช้ HAL ของ ConfigStore

บิลด์แฟล็กและพร็อพเพอร์ตี้ของระบบ

แฟล็กบิลด์แต่ละรายการใน ConfigStore จะมีพร็อพเพอร์ตี้ของระบบที่ตรงกัน ดังที่แสดงในตารางต่อไปนี้

แฟล็กบิลด์ พร็อพเพอร์ตี้ของระบบ
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

พร็อพเพอร์ตี้ของระบบใหม่

Android 10 มีพร็อพเพอร์ตี้ใหม่ของระบบต่อไปนี้

  • 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

ดูรายละเอียดเกี่ยวกับพร็อพเพอร์ตี้เหล่านี้ได้ที่ frameworks/native/services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop

ใช้ SurfaceFlingerProperties

ในตัวอย่างต่อไปนี้สำหรับไลบรารี SurfaceFlingerProperties ชื่อฟังก์ชัน คือ api_name ใน 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);
    ...
}
...