ConfigStore

No Android, as propriedades do sistema são armazenadas na classe ConfigStore. O ConfigStore usa flags de build para armazenar valores de configuração na partição do fornecedor, e um serviço na partição do sistema acessa esses valores usando HIDL.

As propriedades do sistema usam PRODUCT_DEFAULT_PROPERTY_OVERRIDES para armazenar propriedades do sistema em default.prop na partição do fornecedor, e o serviço usa sysprop para ler essas propriedades.

A HAL ConfigStore permanece no AOSP para oferecer suporte a partições legadas do fornecedor. Em dispositivos com Android 10, surfaceflinger lê primeiro as propriedades do sistema. Se nenhuma propriedade for definida para um item de configuração em SurfaceFlingerProperties.sysprop, surfaceflinger vai usar a HAL ConfigStore.

Flags de build e propriedades do sistema

Cada flag de build no ConfigStore tem uma propriedade de sistema correspondente, conforme mostrado na tabela a seguir.

Flags de build Propriedades do sistema
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

Novas propriedades do sistema

O Android 10 inclui as seguintes novas propriedades do sistema:

  • 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

Para mais detalhes sobre essas propriedades, consulte frameworks/native/services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop.

Usar SurfaceFlingerProperties

Nos exemplos a seguir da biblioteca SurfaceFlingerProperties, o nome da função é api_name em 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);
    ...
}
...