در اندروید، ویژگیهای سیستم در کلاس 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); ... } ...