blob: f18f33c7275986b0918d826a88e1d242c86a8e2f [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
18# The following two propertiess define (respectively):
19#
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
Sundong Ahnc9a71472019-04-10 16:54:12 +090039 scope: System
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
Sundong Ahnc9a71472019-04-10 16:54:12 +090047 scope: System
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
Sundong Ahnc9a71472019-04-10 16:54:12 +090056 scope: System
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
Sundong Ahnc9a71472019-04-10 16:54:12 +090065 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +090066 access: Readonly
67 prop_name: "ro.surface_flinger.max_frame_buffer_acquired_buffers"
68}
69
70# hasWideColorDisplay indicates that the device has
71# or can support a wide-color display, e.g. color space
72# greater than sRGB. Typical display may have same
73# color primaries as DCI-P3.
74# Indicate support for this feature by setting
75# TARGET_HAS_WIDE_COLOR_DISPLAY to true in BoardConfig.mk
76# This also means that the device is color managed.
77# A color managed device will use the appropriate
78# display mode depending on the content on the screen.
79# Default is sRGB.
80prop {
81 api_name: "has_wide_color_display"
82 type: Boolean
Sundong Ahnc9a71472019-04-10 16:54:12 +090083 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +090084 access: Readonly
85 prop_name: "ro.surface_flinger.has_wide_color_display"
86}
87
88# Indicates if Sync framework is available. Sync framework provides fence
89# mechanism which significantly reduces buffer processing latency.
90prop {
91 api_name: "running_without_sync_framework"
92 type: Boolean
Sundong Ahnc9a71472019-04-10 16:54:12 +090093 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +090094 access: Readonly
95 prop_name: "ro.surface_flinger.running_without_sync_framework"
96}
97
98# hwHDRDisplay indicates that the device has an High Dynamic Range display.
99# A display is considered High Dynamic Range if it
100#
101# 1. is a wide color gamut display, typically DCI-P3 or lager
102# 2. has high luminance capability, typically 540 nits or higher at 10% OPR
103#
104# Indicate support for this feature by setting
105# ro.surface_flinger.has_HDR_display to true in device.mk
106# ro.surface_flinger.has_wide_color_display must be set to true when
107# ro.surface_flinger.has_HDR_display is true.
108prop {
109 api_name: "has_HDR_display"
110 type: Boolean
Sundong Ahnc9a71472019-04-10 16:54:12 +0900111 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900112 access: Readonly
113 prop_name: "ro.surface_flinger.has_HDR_display"
114}
115
116# Specify the offset in nanoseconds to add to vsync time when timestamping present fences.
117prop {
118 api_name: "present_time_offset_from_vsync_ns"
119 type: Long
Sundong Ahnc9a71472019-04-10 16:54:12 +0900120 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900121 access: Readonly
122 prop_name: "ro.surface_flinger.present_time_offset_from_vsync_ns"
123}
124
125# Some hardware can do RGB->YUV conversion more efficiently in hardware
126# controlled by HWC than in hardware controlled by the video encoder.
127# This instruct VirtualDisplaySurface to use HWC for such conversion on
128# GL composition.
129prop {
130 api_name: "force_hwc_copy_for_virtual_displays"
131 type: Boolean
Sundong Ahnc9a71472019-04-10 16:54:12 +0900132 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900133 access: Readonly
134 prop_name: "ro.surface_flinger.force_hwc_copy_for_virtual_displays"
135}
136
137# Maximum dimension supported by HWC for virtual display.
138# Must be equals to min(max_width, max_height).
139prop {
140 api_name: "max_virtual_display_dimension"
141 type: Long
Sundong Ahnc9a71472019-04-10 16:54:12 +0900142 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900143 access: Readonly
144 prop_name: "ro.surface_flinger.max_virtual_display_dimension"
145}
146
147# Return true if surface flinger should use vr flinger for compatible vr
148# apps, false otherwise. Devices that will never be running vr apps should
149# return false to avoid extra resource usage. Daydream ready devices must
150# return true for full vr support.
151prop {
152 api_name: "use_vr_flinger"
153 type: Boolean
Sundong Ahnc9a71472019-04-10 16:54:12 +0900154 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900155 access: Readonly
156 prop_name: "ro.surface_flinger.use_vr_flinger"
157}
158
159# Returns true if surface flinger should start
160# hardware.graphics.allocator@2.0::IAllocator service.
161prop {
162 api_name: "start_graphics_allocator_service"
163 type: Boolean
Sundong Ahnc9a71472019-04-10 16:54:12 +0900164 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900165 access: Readonly
166 prop_name: "ro.surface_flinger.start_graphics_allocator_service"
167}
168
169# Returns the orientation of the primary display device.
170prop {
171 api_name: "primary_display_orientation"
172 type: Enum
173 enum_values: "ORIENTATION_0|ORIENTATION_90|ORIENTATION_180|ORIENTATION_270"
Sundong Ahnc9a71472019-04-10 16:54:12 +0900174 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900175 access: Readonly
176 prop_name: "ro.surface_flinger.primary_display_orientation"
177}
178
179# useColorManagement indicates whether SurfaceFlinger should manage color
180# by switching to appropriate color mode automatically depending on the
181# Dataspace of the surfaces on screen.
182prop {
183 api_name: "use_color_management"
184 type: Boolean
Sundong Ahnc9a71472019-04-10 16:54:12 +0900185 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900186 access: Readonly
187 prop_name: "ro.surface_flinger.use_color_management"
188}
189
190# The following four propertiess define:
191# Returns the default data space and pixel format that SurfaceFlinger
192# expects to receive and output as well as the wide color gamut data space
193# and pixel format for wide color gamut surfaces.
194# To determine the data space and pixel format, there are a few things
195# we recommend to consider:
196#
197# 1. Hardware composer's capability to composite contents with the chosen
198# data space and pixel format efficiently;
199# 2. Hardware composer's ability to composite contents when sRGB contents
200# and the chosen wide color gamut data space contents coexist;
201# 3. For better blending, consider using pixel format where the alpha
202# channel has as many bits as the RGB color channel.
203# 4. Memory consumption and efficient buffer compression when considering
204# more bits in pixel format.
205
206# dataspace is the default data space that SurfaceFlinger expects.
207# The data space must not be Dataspace::UNKNOWN, if unspecified,
208# the default data space is Dataspace::V0_SRGB;
209prop {
210 api_name: "default_composition_dataspace"
211 type: Long
Sundong Ahnc9a71472019-04-10 16:54:12 +0900212 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900213 access: Readonly
214 prop_name: "ro.surface_flinger.default_composition_dataspace"
215}
216
217# pixelFormat is the default pixel format that SurfaceFlinger
218# expects. If unspecified, the default pixel format is
219# PixelFormat::RGBA_8888.
220prop {
221 api_name: "default_composition_pixel_format"
222 type: Integer
Sundong Ahnc9a71472019-04-10 16:54:12 +0900223 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900224 access: Readonly
225 prop_name: "ro.surface_flinger.default_composition_pixel_format"
226}
227
228# wcgDataspace is the data space that SurfaceFlinger expects for
229# wide color gamut surfaces.
230# When hasWideColorDisplay returns true, this API must return a
231# valid wide color gamut data space.
232# The data space must not be UNKNOWN, if unspecified, the data space
233# is V0_SRGB by default, which essentially indicates there's no wide
234# color gamut, meaning hasWideColorDisplay returns false.
235prop {
236 api_name: "wcg_composition_dataspace"
237 type: Long
Sundong Ahnc9a71472019-04-10 16:54:12 +0900238 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900239 access: Readonly
240 prop_name: "ro.surface_flinger.wcg_composition_dataspace"
241}
242
243# wcgPixelFormat is the pixel format that SurfaceFlinger expects for
244# wide color gamut surfaces. If unspecified, the pixel format is
245# PixelFormat::RGBA_8888 by default.
246prop {
247 api_name: "wcg_composition_pixel_format"
248 type: Integer
Sundong Ahnc9a71472019-04-10 16:54:12 +0900249 scope: System
Sundong Ahnd5e08f62018-12-12 20:27:28 +0900250 access: Readonly
251 prop_name: "ro.surface_flinger.wcg_composition_pixel_format"
252}
Sundong Ahn85131bd2019-02-18 15:51:53 +0900253
Yichi Chenda901bf2019-06-28 14:58:27 +0800254# colorSpaceAgnosticDataspace specifies the data space that
255# SurfaceFlinger expects for surfaces which are color space agnostic.
256# The variable works only when useColorManagement is specified. If
257# unspecified, the data space follows what SurfaceFlinger expects for
258# surfaces when useColorManagement is specified.
259
260prop {
261 api_name: "color_space_agnostic_dataspace"
262 type: Long
263 scope: System
264 access: Readonly
265 prop_name: "ro.surface_flinger.color_space_agnostic_dataspace"
266}
267
Sundong Ahn85131bd2019-02-18 15:51:53 +0900268# Return the native panel primary data. The data includes red, green,
269# blue and white. The primary format is CIE 1931 XYZ color space.
270# If unspecified, the primaries is sRGB gamut by default.
271
272prop {
273 api_name: "display_primary_red"
274 type: DoubleList
Sundong Ahnc9a71472019-04-10 16:54:12 +0900275 scope: System
Sundong Ahn85131bd2019-02-18 15:51:53 +0900276 access: Readonly
277 prop_name: "ro.surface_flinger.display_primary_red"
278}
279
280prop {
281 api_name: "display_primary_green"
282 type: DoubleList
Sundong Ahnc9a71472019-04-10 16:54:12 +0900283 scope: System
Sundong Ahn85131bd2019-02-18 15:51:53 +0900284 access: Readonly
285 prop_name: "ro.surface_flinger.display_primary_green"
286}
287
288prop {
289 api_name: "display_primary_blue"
290 type: DoubleList
Sundong Ahnc9a71472019-04-10 16:54:12 +0900291 scope: System
Sundong Ahn85131bd2019-02-18 15:51:53 +0900292 access: Readonly
293 prop_name: "ro.surface_flinger.display_primary_blue"
294}
295
296prop {
297 api_name: "display_primary_white"
298 type: DoubleList
Sundong Ahnc9a71472019-04-10 16:54:12 +0900299 scope: System
Sundong Ahn85131bd2019-02-18 15:51:53 +0900300 access: Readonly
301 prop_name: "ro.surface_flinger.display_primary_white"
302}
Ady Abrahambe59c0d2019-03-05 13:01:13 -0800303
304# setIdleTimerMs indicates what is considered a timeout in milliseconds for Scheduler. This value is
305# used by the Scheduler to trigger inactivity callbacks that will switch the display to a lower
306# refresh rate. Setting this property to 0 means there is no timer.
307prop {
308 api_name: "set_idle_timer_ms"
309 type: Integer
Sundong Ahnc9a71472019-04-10 16:54:12 +0900310 scope: System
Ady Abrahambe59c0d2019-03-05 13:01:13 -0800311 access: Readonly
312 prop_name: "ro.surface_flinger.set_idle_timer_ms"
313}
Ana Krulece5a06e02019-03-06 17:09:03 -0800314
Ady Abraham8532d012019-05-08 14:50:56 -0700315# setTouchTimerMs indicates what is considered a timeout in milliseconds for Scheduler.
316# This value is used by the Scheduler to trigger touch inactivity callbacks that will switch the
317# display to a lower refresh rate. Setting this property to 0 means there is no timer.
318prop {
319 api_name: "set_touch_timer_ms"
320 type: Integer
321 scope: System
322 access: Readonly
323 prop_name: "ro.surface_flinger.set_touch_timer_ms"
324}
325
Ana Krulece5a06e02019-03-06 17:09:03 -0800326# useSmart90ForVideo indicates whether Scheduler should detect content FPS, and try to adjust the
327# screen refresh rate based on that.
328prop {
329 api_name: "use_smart_90_for_video"
330 type: Boolean
Sundong Ahnc9a71472019-04-10 16:54:12 +0900331 scope: System
Ana Krulece5a06e02019-03-06 17:09:03 -0800332 access: Readonly
333 prop_name: "ro.surface_flinger.use_smart_90_for_video"
334}
Peiyong Lin6a043d52019-04-01 17:18:21 -0700335
336prop {
337 api_name: "enable_protected_contents"
338 type: Boolean
Sundong Ahnc9a71472019-04-10 16:54:12 +0900339 scope: System
Peiyong Lin6a043d52019-04-01 17:18:21 -0700340 access: Readonly
341 prop_name: "ro.surface_flinger.protected_contents"
342}
Alec Mouridc28b372019-04-18 21:17:13 -0700343
344# Indicates whether Scheduler's idle timer should support a display driver timeout in the kernel.
345# The value of set_idle_timer_ms should be shorter in time than the timeout duration in the kernel.
346prop {
347 api_name: "support_kernel_idle_timer"
348 type: Boolean
349 scope: System
350 access: Readonly
351 prop_name: "ro.surface_flinger.support_kernel_idle_timer"
352}