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 sẽ truy cập vào các giá trị đó bằng HIDL.
Các thuộc tính hệ thống sử dụngPRODUCT_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 và dịch vụ sử dụng sysprop để đọc các thuộc tính đó.
ConfigStore HAL vẫn nằm trong AOSP để hỗ trợ các phân vùng cũ của nhà cung cấp. 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; 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, surfaceflinger sẽ quay lại ConfigStore HAL.
Cờ 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 tương ứng, 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
|
Thuộc tính hệ thống mới
Android 10 có các thuộc tính hệ thống mới sau đây:
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
Để biết thông tin chi tiết về các thuộc tính này, hãy tham khảo frameworks/native/services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop.
Sử dụng SurfaceFlingerProperties
Trong các ví dụ sau cho 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); ... } ...