ConfigStore

در اندروید، ویژگی‌های سیستم در کلاس ConfigStore ذخیره می‌شوند. ConfigStore از پرچم‌های ساخت برای ذخیره مقادیر پیکربندی در پارتیشن vendor استفاده می‌کند و یک سرویس در پارتیشن system با استفاده از HIDL به آن مقادیر دسترسی پیدا می‌کند.

ویژگی‌های سیستم از PRODUCT_DEFAULT_PROPERTY_OVERRIDES برای ذخیره ویژگی‌های سیستم در default.prop در پارتیشن vendor استفاده می‌کنند و سرویس sysprop برای خواندن آن ویژگی‌ها استفاده می‌کند.

HAL مربوط به ConfigStore همچنان در AOSP باقی می‌ماند تا از پارتیشن‌های قدیمی فروشندگان پشتیبانی کند. در دستگاه‌هایی که اندروید ۱۰ را اجرا می‌کنند، 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

ویژگی‌های سیستم جدید

اندروید ۱۰ شامل ویژگی‌های سیستمی جدید زیر است:

  • 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);
    ...
}
...