Trong Android, thuộc tính hệ thống được lưu trữ trong lớp ConfigStore. ConfigStore sử dụng cờ xây dựng để lưu trữ các giá trị cấu hình trong phân vùng của nhà cung cấp và một dịch vụ trong phân vùng hệ thống sẽ truy cập các giá trị đó bằng HIDL.
Thuộc tính hệ thống sử dụngPRODUCT_DEFAULT_PROPERTY_OVERRIDES
để lưu trữ thuộc tính hệ thống trong default.prop
trong phân vùng của nhà cung cấp và dịch vụ sử dụng sysprop
để đọc các thuộc tính đó. ConfigStore HAL vẫn còn 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
đọ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ục cấu hình trong SurfaceFlingerProperties.sysprop
thì surfaceflinger
sẽ quay trở lại ConfigStore HAL.
Xây dựng cờ và thuộc tính hệ thống
Mỗi cờ xây dựng trong ConfigStore có một thuộc tính hệ thống phù hợp, như minh họa trong bảng sau.
Xây dựng cờ | 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 bao gồm các thuộc tính hệ thống mới sau:
-
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 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 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); ... } ...