در Android، داراییهای سیستم در کلاس ConfigStore ذخیره میشود. ConfigStore از پرچمهای ساخت برای ذخیره مقادیر پیکربندی در بخش فروشنده استفاده میکند و سرویسی در بخش سیستم بااستفاده از HIDL به آن مقادیر دسترسی پیدا میکند.
ویژگیهای سیستم ازPRODUCT_DEFAULT_PROPERTY_OVERRIDES برای ذخیره کردن ویژگیهای سیستم در default.prop در بخش فروشنده استفاده میکند و سرویس از sysprop برای خواندن آن ویژگیها استفاده میکند.
ConfigStore HAL در AOSP باقی میماند تا از پارتیشنهای فروشنده قدیمی پشتیبانی کند. در
دستگاههای دارای Android نسخه ۱۰،
surfaceflinger ابتدا ویژگیهای سیستم را میخواند؛ اگر هیچ ویژگی
سیستمی برای مورد پیکربندی در
SurfaceFlingerProperties.sysprop تعریف نشده باشد، surfaceflinger
به ConfigStore HAL برمیگردد.
ساختن پرچمها و ویژگیهای سیستم
هر پرچم ساخت در 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
|
ویژگیهای سیستم جدید
Android 10 شامل ویژگیهای جدید سیستم زیر است:
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
برای جزئیات مربوط به این ویژگیها، به
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); ... } ...