Thuộc tính hệ thống trong SurfaceFlinger

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; 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. Để 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 .

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

Sử dụng SurfaceFlingerProperties

Các ví dụ sau đây cho thấy cách sử dụng thư viện SurfaceFlingerProperties và thuộc tính Surface Flinger ro.surface_flinger.vsync_event_phase_offset_ns .

Để truy vấn giá trị của thuộc tính trong tham chiếu, hãy sử dụng api_name của thuộc tính làm tên hàm.

Bao gồm SurfaceFlingerProperties trong tệp xây dựng của bạn, như sau:

cc_binary {
    name: "cc_client",
    srcs: ["baz.cpp"],
    shared_libs: ["SurfaceFlingerProperties"],
}
java_library {
    name: "JavaClient",
    srcs: ["foo/bar.java"],
    libs: ["SurfaceFlingerProperties"],
}

Đoạn mã Java sau đây sử dụng thuộc tính hệ thống ro.surface_flinger.vsync_event_phase_offset_ns :

import android.sysprop.SurfaceFlingerProperties;
...

static void foo() {
    ...
    boolean temp = SurfaceFlingerProperties.vsync_event_phase_offset_ns().orElse(true);
    ...
}
...

Đoạn mã C++ sau đây sử dụng thuộc tính hệ thống ro.surface_flinger.vsync_event_phase_offset_ns :

#include <SurfaceFlingerProperties.sysprop.h>
using namespace android::sysprop;

...

void bar() {
    ...
    bool temp = SurfaceFlingerProperties::vsync_event_phase_offset_ns(true);
    ...
}
...