blob: bcbe21a483c3a56b1192f11b4227230f9791eb45 [file] [log] [blame]
Sundong Ahnd5e08f62018-12-12 20:27:28 +09001# Copyright (C) 2019 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the License);
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an AS IS BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15module: "android.sysprop.SurfaceFlingerProperties"
16owner: Platform
17
Steven Thomas2bbaabe2019-08-28 16:08:35 -070018# The following two properties define (respectively):
Sundong Ahnd5e08f62018-12-12 20:27:28 +090019#
20# - The phase offset between hardware vsync and when apps are woken up by the
21# Choreographer callback
22# - The phase offset between hardware vsync and when SurfaceFlinger wakes up
23# to consume input
24# Their values may be tuned to trade off between display pipeline latency (both
25# overall latency and the lengths of the app --> SF and SF --> display phases)
26# and frame delivery jitter (which typically manifests as "jank" or "jerkiness"
27# while interacting with the device). The default values must produce a
28# relatively low amount of jitter at the expense of roughly two frames of
29# app --> display latency, and unless significant testing is performed to avoid
30# increased display jitter (both manual investigation using systrace [1] and
31# automated testing using dumpsys gfxinfo [2] are recommended), they should not
32# be modified.
33#
34# [1] https://developer.android.com/studio/profile/systrace.html
35# [2] https://developer.android.com/training/testing/performance.html
36prop {
37 api_name: "vsync_event_phase_offset_ns"
38 type: Long
Inseob Kim44f34c52019-06-08 20:47:59 +090039 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +090040 access: Readonly
41 prop_name: "ro.surface_flinger.vsync_event_phase_offset_ns"
42}
43
44prop {
45 api_name: "vsync_sf_event_phase_offset_ns"
46 type: Long
Inseob Kim44f34c52019-06-08 20:47:59 +090047 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +090048 access: Readonly
49 prop_name: "ro.surface_flinger.vsync_sf_event_phase_offset_ns"
50}
51
52# Instruct the Render Engine to use EGL_IMG_context_priority hint if available.
53prop {
54 api_name: "use_context_priority"
55 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +090056 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +090057 access: Readonly
58 prop_name: "ro.surface_flinger.use_context_priority"
59}
60
61# Controls the number of buffers SurfaceFlinger will allocate for use in FramebufferSurface.
62prop {
63 api_name: "max_frame_buffer_acquired_buffers"
64 type: Long
Inseob Kim44f34c52019-06-08 20:47:59 +090065 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +090066 access: Readonly
67 prop_name: "ro.surface_flinger.max_frame_buffer_acquired_buffers"
68}
69
Brian Lindahla13f2d52020-03-05 11:54:17 +010070# Controls the maximum width in pixels that the graphics pipeline can support for GPU fallback
71# composition. For example, 8k displays with 4k GPUs, or 4k displays with 2k GPUs.
72prop {
73 api_name: "max_graphics_width"
74 type: Integer
Luca Stefani33522c42020-09-09 08:59:41 +020075 scope: Public
Brian Lindahla13f2d52020-03-05 11:54:17 +010076 access: Readonly
77 prop_name: "ro.surface_flinger.max_graphics_width"
78}
79
80# Controls the maximum height in pixels that the graphics pipeline can support for GPU fallback
81# composition. For example, 8k displays with 4k GPUs, or 4k displays with 2k GPUs.
82prop {
83 api_name: "max_graphics_height"
84 type: Integer
Luca Stefani33522c42020-09-09 08:59:41 +020085 scope: Public
Brian Lindahla13f2d52020-03-05 11:54:17 +010086 access: Readonly
87 prop_name: "ro.surface_flinger.max_graphics_height"
88}
89
Sundong Ahnd5e08f62018-12-12 20:27:28 +090090# hasWideColorDisplay indicates that the device has
91# or can support a wide-color display, e.g. color space
92# greater than sRGB. Typical display may have same
93# color primaries as DCI-P3.
94# Indicate support for this feature by setting
95# TARGET_HAS_WIDE_COLOR_DISPLAY to true in BoardConfig.mk
96# This also means that the device is color managed.
97# A color managed device will use the appropriate
98# display mode depending on the content on the screen.
99# Default is sRGB.
100prop {
101 api_name: "has_wide_color_display"
102 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +0900103 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900104 access: Readonly
105 prop_name: "ro.surface_flinger.has_wide_color_display"
106}
107
108# Indicates if Sync framework is available. Sync framework provides fence
109# mechanism which significantly reduces buffer processing latency.
110prop {
111 api_name: "running_without_sync_framework"
112 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +0900113 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900114 access: Readonly
115 prop_name: "ro.surface_flinger.running_without_sync_framework"
116}
117
118# hwHDRDisplay indicates that the device has an High Dynamic Range display.
119# A display is considered High Dynamic Range if it
120#
121# 1. is a wide color gamut display, typically DCI-P3 or lager
122# 2. has high luminance capability, typically 540 nits or higher at 10% OPR
123#
124# Indicate support for this feature by setting
125# ro.surface_flinger.has_HDR_display to true in device.mk
126# ro.surface_flinger.has_wide_color_display must be set to true when
127# ro.surface_flinger.has_HDR_display is true.
128prop {
129 api_name: "has_HDR_display"
130 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +0900131 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900132 access: Readonly
133 prop_name: "ro.surface_flinger.has_HDR_display"
134}
135
136# Specify the offset in nanoseconds to add to vsync time when timestamping present fences.
137prop {
138 api_name: "present_time_offset_from_vsync_ns"
139 type: Long
Inseob Kim44f34c52019-06-08 20:47:59 +0900140 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900141 access: Readonly
142 prop_name: "ro.surface_flinger.present_time_offset_from_vsync_ns"
143}
144
145# Some hardware can do RGB->YUV conversion more efficiently in hardware
146# controlled by HWC than in hardware controlled by the video encoder.
147# This instruct VirtualDisplaySurface to use HWC for such conversion on
148# GL composition.
149prop {
150 api_name: "force_hwc_copy_for_virtual_displays"
151 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +0900152 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900153 access: Readonly
154 prop_name: "ro.surface_flinger.force_hwc_copy_for_virtual_displays"
155}
156
157# Maximum dimension supported by HWC for virtual display.
158# Must be equals to min(max_width, max_height).
159prop {
160 api_name: "max_virtual_display_dimension"
161 type: Long
Inseob Kim44f34c52019-06-08 20:47:59 +0900162 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900163 access: Readonly
164 prop_name: "ro.surface_flinger.max_virtual_display_dimension"
165}
166
167# Return true if surface flinger should use vr flinger for compatible vr
168# apps, false otherwise. Devices that will never be running vr apps should
169# return false to avoid extra resource usage. Daydream ready devices must
170# return true for full vr support.
171prop {
172 api_name: "use_vr_flinger"
173 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +0900174 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900175 access: Readonly
176 prop_name: "ro.surface_flinger.use_vr_flinger"
177}
178
179# Returns true if surface flinger should start
180# hardware.graphics.allocator@2.0::IAllocator service.
181prop {
182 api_name: "start_graphics_allocator_service"
183 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +0900184 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900185 access: Readonly
186 prop_name: "ro.surface_flinger.start_graphics_allocator_service"
187}
188
189# Returns the orientation of the primary display device.
190prop {
191 api_name: "primary_display_orientation"
192 type: Enum
193 enum_values: "ORIENTATION_0|ORIENTATION_90|ORIENTATION_180|ORIENTATION_270"
Inseob Kim44f34c52019-06-08 20:47:59 +0900194 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900195 access: Readonly
196 prop_name: "ro.surface_flinger.primary_display_orientation"
197}
198
199# useColorManagement indicates whether SurfaceFlinger should manage color
200# by switching to appropriate color mode automatically depending on the
201# Dataspace of the surfaces on screen.
202prop {
203 api_name: "use_color_management"
204 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +0900205 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900206 access: Readonly
207 prop_name: "ro.surface_flinger.use_color_management"
208}
209
210# The following four propertiess define:
211# Returns the default data space and pixel format that SurfaceFlinger
212# expects to receive and output as well as the wide color gamut data space
213# and pixel format for wide color gamut surfaces.
214# To determine the data space and pixel format, there are a few things
215# we recommend to consider:
216#
217# 1. Hardware composer's capability to composite contents with the chosen
218# data space and pixel format efficiently;
219# 2. Hardware composer's ability to composite contents when sRGB contents
220# and the chosen wide color gamut data space contents coexist;
221# 3. For better blending, consider using pixel format where the alpha
222# channel has as many bits as the RGB color channel.
223# 4. Memory consumption and efficient buffer compression when considering
224# more bits in pixel format.
225
226# dataspace is the default data space that SurfaceFlinger expects.
227# The data space must not be Dataspace::UNKNOWN, if unspecified,
228# the default data space is Dataspace::V0_SRGB;
229prop {
230 api_name: "default_composition_dataspace"
231 type: Long
Inseob Kim44f34c52019-06-08 20:47:59 +0900232 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900233 access: Readonly
234 prop_name: "ro.surface_flinger.default_composition_dataspace"
235}
236
237# pixelFormat is the default pixel format that SurfaceFlinger
238# expects. If unspecified, the default pixel format is
239# PixelFormat::RGBA_8888.
240prop {
241 api_name: "default_composition_pixel_format"
242 type: Integer
Inseob Kim44f34c52019-06-08 20:47:59 +0900243 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900244 access: Readonly
245 prop_name: "ro.surface_flinger.default_composition_pixel_format"
246}
247
248# wcgDataspace is the data space that SurfaceFlinger expects for
249# wide color gamut surfaces.
250# When hasWideColorDisplay returns true, this API must return a
251# valid wide color gamut data space.
252# The data space must not be UNKNOWN, if unspecified, the data space
253# is V0_SRGB by default, which essentially indicates there's no wide
254# color gamut, meaning hasWideColorDisplay returns false.
255prop {
256 api_name: "wcg_composition_dataspace"
257 type: Long
Inseob Kim44f34c52019-06-08 20:47:59 +0900258 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900259 access: Readonly
260 prop_name: "ro.surface_flinger.wcg_composition_dataspace"
261}
262
263# wcgPixelFormat is the pixel format that SurfaceFlinger expects for
264# wide color gamut surfaces. If unspecified, the pixel format is
265# PixelFormat::RGBA_8888 by default.
266prop {
267 api_name: "wcg_composition_pixel_format"
268 type: Integer
Inseob Kim44f34c52019-06-08 20:47:59 +0900269 scope: Public
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900270 access: Readonly
271 prop_name: "ro.surface_flinger.wcg_composition_pixel_format"
272}
Sundong Ahn85131bd2019-02-18 15:51:53 +0900273
Yichi Chenda901bf2019-06-28 14:58:27 +0800274# colorSpaceAgnosticDataspace specifies the data space that
275# SurfaceFlinger expects for surfaces which are color space agnostic.
276# The variable works only when useColorManagement is specified. If
277# unspecified, the data space follows what SurfaceFlinger expects for
278# surfaces when useColorManagement is specified.
279
280prop {
281 api_name: "color_space_agnostic_dataspace"
282 type: Long
Luca Stefani45e52932019-11-16 14:58:17 +0100283 scope: Public
Yichi Chenda901bf2019-06-28 14:58:27 +0800284 access: Readonly
285 prop_name: "ro.surface_flinger.color_space_agnostic_dataspace"
286}
287
Sundong Ahn85131bd2019-02-18 15:51:53 +0900288# Return the native panel primary data. The data includes red, green,
289# blue and white. The primary format is CIE 1931 XYZ color space.
290# If unspecified, the primaries is sRGB gamut by default.
291
292prop {
293 api_name: "display_primary_red"
294 type: DoubleList
Inseob Kim44f34c52019-06-08 20:47:59 +0900295 scope: Public
Sundong Ahn85131bd2019-02-18 15:51:53 +0900296 access: Readonly
297 prop_name: "ro.surface_flinger.display_primary_red"
298}
299
300prop {
301 api_name: "display_primary_green"
302 type: DoubleList
Inseob Kim44f34c52019-06-08 20:47:59 +0900303 scope: Public
Sundong Ahn85131bd2019-02-18 15:51:53 +0900304 access: Readonly
305 prop_name: "ro.surface_flinger.display_primary_green"
306}
307
308prop {
309 api_name: "display_primary_blue"
310 type: DoubleList
Inseob Kim44f34c52019-06-08 20:47:59 +0900311 scope: Public
Sundong Ahn85131bd2019-02-18 15:51:53 +0900312 access: Readonly
313 prop_name: "ro.surface_flinger.display_primary_blue"
314}
315
316prop {
317 api_name: "display_primary_white"
318 type: DoubleList
Inseob Kim44f34c52019-06-08 20:47:59 +0900319 scope: Public
Sundong Ahn85131bd2019-02-18 15:51:53 +0900320 access: Readonly
321 prop_name: "ro.surface_flinger.display_primary_white"
322}
Ady Abrahambe59c0d2019-03-05 13:01:13 -0800323
Ana Krulec10e02052020-02-04 17:16:10 +0000324# refreshRateSwitching indicates whether SurfaceFlinger should use refresh rate
325# switching on the device, e.g. to switch between 60 and 90 Hz. The settings
326# below that are related to refresh rate switching will only have an effect if
327# refresh_rate_switching is enabled.
328prop {
329 api_name: "refresh_rate_switching"
330 type: Boolean
Luca Stefanifbede972020-06-26 18:58:43 +0200331 scope: Public
Ana Krulec10e02052020-02-04 17:16:10 +0000332 access: Readonly
333 prop_name: "ro.surface_flinger.refresh_rate_switching"
Ana Krulec3f6a2062020-01-23 15:48:01 -0800334 deprecated: true
Ana Krulec10e02052020-02-04 17:16:10 +0000335}
336
Ady Abrahambe59c0d2019-03-05 13:01:13 -0800337prop {
338 api_name: "set_idle_timer_ms"
339 type: Integer
Inseob Kim44f34c52019-06-08 20:47:59 +0900340 scope: Public
Ady Abrahambe59c0d2019-03-05 13:01:13 -0800341 access: Readonly
342 prop_name: "ro.surface_flinger.set_idle_timer_ms"
343}
Ana Krulece5a06e02019-03-06 17:09:03 -0800344
Ady Abraham8532d012019-05-08 14:50:56 -0700345# setTouchTimerMs indicates what is considered a timeout in milliseconds for Scheduler.
346# This value is used by the Scheduler to trigger touch inactivity callbacks that will switch the
347# display to a lower refresh rate. Setting this property to 0 means there is no timer.
348prop {
349 api_name: "set_touch_timer_ms"
350 type: Integer
Inseob Kim44f34c52019-06-08 20:47:59 +0900351 scope: Public
Ady Abraham8532d012019-05-08 14:50:56 -0700352 access: Readonly
353 prop_name: "ro.surface_flinger.set_touch_timer_ms"
354}
355
Ady Abraham6fe2c172019-07-12 12:37:57 -0700356# setDisplayPowerTimerMs indicates what is considered a timeout in milliseconds for Scheduler.
357# This value is used by the Scheduler to trigger display power inactivity callbacks that will
358# keep the display in peak refresh rate as long as display power is not in normal mode.
359# Setting this property to 0 means there is no timer.
360prop {
361 api_name: "set_display_power_timer_ms"
362 type: Integer
Luca Stefani45e52932019-11-16 14:58:17 +0100363 scope: Public
Ady Abraham6fe2c172019-07-12 12:37:57 -0700364 access: Readonly
365 prop_name: "ro.surface_flinger.set_display_power_timer_ms"
366}
367
Ady Abraham48da0702020-02-04 15:59:25 -0800368# useContentDetectionForRefreshRate indicates whether Scheduler should detect content FPS, and try
369# to adjust the screen refresh rate based on that.
370prop {
371 api_name: "use_content_detection_for_refresh_rate"
372 type: Boolean
373 scope: Public
374 access: Readonly
375 prop_name: "ro.surface_flinger.use_content_detection_for_refresh_rate"
376}
377
Ana Krulece5a06e02019-03-06 17:09:03 -0800378# useSmart90ForVideo indicates whether Scheduler should detect content FPS, and try to adjust the
379# screen refresh rate based on that.
Ady Abraham48da0702020-02-04 15:59:25 -0800380# Replaced by useContentDetectionForRefreshRate
Ana Krulece5a06e02019-03-06 17:09:03 -0800381prop {
382 api_name: "use_smart_90_for_video"
383 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +0900384 scope: Public
Ana Krulece5a06e02019-03-06 17:09:03 -0800385 access: Readonly
386 prop_name: "ro.surface_flinger.use_smart_90_for_video"
Ady Abraham48da0702020-02-04 15:59:25 -0800387 deprecated: true
Ana Krulece5a06e02019-03-06 17:09:03 -0800388}
Peiyong Lin6a043d52019-04-01 17:18:21 -0700389
390prop {
391 api_name: "enable_protected_contents"
392 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +0900393 scope: Public
Peiyong Lin6a043d52019-04-01 17:18:21 -0700394 access: Readonly
395 prop_name: "ro.surface_flinger.protected_contents"
396}
Alec Mouridc28b372019-04-18 21:17:13 -0700397
398# Indicates whether Scheduler's idle timer should support a display driver timeout in the kernel.
399# The value of set_idle_timer_ms should be shorter in time than the timeout duration in the kernel.
400prop {
401 api_name: "support_kernel_idle_timer"
402 type: Boolean
Inseob Kim44f34c52019-06-08 20:47:59 +0900403 scope: Public
Alec Mouridc28b372019-04-18 21:17:13 -0700404 access: Readonly
405 prop_name: "ro.surface_flinger.support_kernel_idle_timer"
406}
Lucas Dupin19c8f0e2019-11-25 17:55:44 -0800407
408# Indicates whether background blurs are supported.
409prop {
410 api_name: "supports_background_blur"
411 type: Boolean
412 scope: Public
413 access: Readonly
414 prop_name: "ro.surface_flinger.supports_background_blur"
415}
Ana Krulec3803b8d2020-02-03 16:35:46 -0800416
Dan Stoza030fbc12020-02-19 15:32:01 -0800417# Sets the timeout used to rate limit DISPLAY_UPDATE_IMMINENT Power HAL notifications.
418# SurfaceFlinger wakeups will trigger this boost whenever they are separated by more than this
419# duration (specified in milliseconds). A value of 0 disables the rate limit, and will result in
420# Power HAL notifications every time SF wakes up.
421prop {
422 api_name: "display_update_imminent_timeout_ms"
423 type: Integer
424 scope: Public
425 access: Readonly
426 prop_name: "ro.surface_flinger.display_update_imminent_timeout_ms"
427}
Marin Shalamanovf8c63722020-10-06 13:11:21 +0200428
429
430# Updates the DeviceProductInfo when a hoplug reconnect event is processed
431prop {
432 api_name: "update_device_product_info_on_hotplug_reconnect"
433 type: Boolean
434 scope: Public
435 access: Readonly
436 prop_name: "ro.surface_flinger.update_device_product_info_on_hotplug_reconnect"
437}
Ady Abraham4899ff82021-01-06 13:53:29 -0800438
439# Enables the frame rate override feature
440prop {
441 api_name: "enable_frame_rate_override"
442 type: Boolean
443 scope: Public
444 access: Readonly
445 prop_name: "ro.surface_flinger.enable_frame_rate_override"
446}
Ady Abraham9c87def2021-02-18 11:25:28 -0800447
448# Enables Layer Caching
449prop {
450 api_name: "enable_layer_caching"
451 type: Boolean
452 scope: Public
453 access: Readonly
454 prop_name: "ro.surface_flinger.enable_layer_caching"
455}
John Reckac09e452021-04-07 16:35:37 -0400456
457# Enables SDR layer dimming
458prop {
459 api_name: "enable_sdr_dimming"
460 type: Boolean
461 scope: Public
462 access: Readonly
463 prop_name: "ro.surface_flinger.enable_sdr_dimming"
John Reck49d9ad32022-02-23 19:03:31 -0500464}
465
466# Ignores Camera layers when calculating HDR coverage information
467prop {
468 api_name: "ignore_hdr_camera_layers"
469 type: Boolean
470 scope: Public
471 access: Readonly
472 prop_name: "ro.surface_flinger.ignore_hdr_camera_layers"
John Reckac09e452021-04-07 16:35:37 -0400473}