Cửa hàng cấu hình

Trong Android, các thuộc tính hệ thống được lưu trữ trong lớp ConfigStore. ConfigStore sử dụng cờ bản dựng để lưu trữ các giá trị cấu hình trong phân vùng nhà cung cấp và một dịch vụ trong phân vùng hệ thống truy cập vào các giá trị đó bằng HIDL.

Các thuộc tính hệ thống sử dụng PRODUCT_DEFAULT_PROPERTY_OVERRIDES để lưu trữ các thuộc tính hệ thống trong default.prop trong phân vùng nhà cung cấp. Đồng thời, dịch vụ sử dụng sysprop để đọc các thuộc tính đó.

HAL ConfigStore vẫn nằm trong AOSP để hỗ trợ các phân vùng nhà cung cấp cũ. Trên các thiết bị chạy Android 10, surfaceflinger sẽ đọc các thuộc tính hệ thống trước tiên; nếu không có thuộc tính hệ thống nào được xác định cho một mục cấu hình trong SurfaceFlingerProperties.sysprop, thì surfaceflinger sẽ quay lại HAL ConfigStore.

Cờ bản dựng và thuộc tính hệ thống

Mỗi cờ bản dựng trong ConfigStore đều có một thuộc tính hệ thống phù hợp, như minh hoạ trong bảng sau.

Cờ dựng Thuộc tính hệ thống
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

Các thuộc tính mới của hệ thống

Android 10 bao gồm các thuộc tính hệ thống mới sau đây:

  • 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

Để biết thông tin chi tiết về các thuộc tính này, vui lòng tham khảo frameworks/native/services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop.

Sử dụng SurfaceFlingerProperties

Trong các ví dụ sau đây về thư viện SurfaceFlingerProperties, tên hàm là api_name trong 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);
    ...
}
...