151769a68a5cb34e9564740c6a854fcb93018789dRomain Guy/*
251769a68a5cb34e9564740c6a854fcb93018789dRomain Guy * Copyright (C) 2010 The Android Open Source Project
351769a68a5cb34e9564740c6a854fcb93018789dRomain Guy *
451769a68a5cb34e9564740c6a854fcb93018789dRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
551769a68a5cb34e9564740c6a854fcb93018789dRomain Guy * you may not use this file except in compliance with the License.
651769a68a5cb34e9564740c6a854fcb93018789dRomain Guy * You may obtain a copy of the License at
751769a68a5cb34e9564740c6a854fcb93018789dRomain Guy *
851769a68a5cb34e9564740c6a854fcb93018789dRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
951769a68a5cb34e9564740c6a854fcb93018789dRomain Guy *
1051769a68a5cb34e9564740c6a854fcb93018789dRomain Guy * Unless required by applicable law or agreed to in writing, software
1151769a68a5cb34e9564740c6a854fcb93018789dRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
1251769a68a5cb34e9564740c6a854fcb93018789dRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1351769a68a5cb34e9564740c6a854fcb93018789dRomain Guy * See the License for the specific language governing permissions and
1451769a68a5cb34e9564740c6a854fcb93018789dRomain Guy * limitations under the License.
1551769a68a5cb34e9564740c6a854fcb93018789dRomain Guy */
1651769a68a5cb34e9564740c6a854fcb93018789dRomain Guy
175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_PROPERTIES_H
185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_PROPERTIES_H
1951769a68a5cb34e9564740c6a854fcb93018789dRomain Guy
20938e884a1fcc385dba5a41475aad76d8b7189609John Reck#include <cutils/compiler.h>
21fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include <cutils/properties.h>
22fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy
2351769a68a5cb34e9564740c6a854fcb93018789dRomain Guy/**
245e00c7ce063116c11315639f0035aca8ad73e8ccChris Craik * This file contains the list of system properties used to configure libhwui.
2551769a68a5cb34e9564740c6a854fcb93018789dRomain Guy */
2651769a68a5cb34e9564740c6a854fcb93018789dRomain Guy
272507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craiknamespace android {
282507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craiknamespace uirenderer {
292507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
30cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy///////////////////////////////////////////////////////////////////////////////
31cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy// Compile-time properties
32cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy///////////////////////////////////////////////////////////////////////////////
33cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy
3428d8ff6dbcc1b137131c70b72b4dbd211db7fbd9Romain Guy// Textures used by layers must have dimensions multiples of this number
3528d8ff6dbcc1b137131c70b72b4dbd211db7fbd9Romain Guy#define LAYER_SIZE 64
3628d8ff6dbcc1b137131c70b72b4dbd211db7fbd9Romain Guy
378d4aeb7111afac0c3c7e56d4ad5d92f9cfce2ffdRomain Guy// Defines the size in bits of the stencil buffer for the framebuffer
38ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy// Note: Only 1 bit is required for clipping but more bits are required
398d4aeb7111afac0c3c7e56d4ad5d92f9cfce2ffdRomain Guy// to properly implement overdraw debugging
407c450aaa3caac2a05fcb20a177483d0e92378426Romain Guy#define STENCIL_BUFFER_SIZE 8
41530041d3191ce817832a0108514617768e43cda6Romain Guy
42cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy///////////////////////////////////////////////////////////////////////////////
43cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy// Debug properties
44cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy///////////////////////////////////////////////////////////////////////////////
45cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy
46e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy/**
474ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1Romain Guy * Debug level for app developers. The value is a numeric value defined
484ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1Romain Guy * by the DebugLevel enum below.
49e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy */
504ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1Romain Guy#define PROPERTY_DEBUG "debug.hwui.level"
51e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy
52e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy/**
53e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy * Debug levels. Debug levels are used as flags.
54e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy */
55e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guyenum DebugLevel {
56e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy    kDebugDisabled = 0,
57e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy    kDebugMemory = 1,
5825dc3a7dbac2f90f5144035e9c8ed99c09cc3132Romain Guy    kDebugCaches = 2,
59042f7d64b5ccd7b5b73e7e9814a84576f04fb7d4Kenny Root    kDebugMoreCaches = kDebugMemory | kDebugCaches
60e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy};
61e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy
624ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1Romain Guy/**
637c450aaa3caac2a05fcb20a177483d0e92378426Romain Guy * Used to enable/disable layers update debugging. The accepted values are
644ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1Romain Guy * "true" and "false". The default value is "false".
654ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1Romain Guy */
664ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1Romain Guy#define PROPERTY_DEBUG_LAYERS_UPDATES "debug.hwui.show_layers_updates"
674ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1Romain Guy
687c450aaa3caac2a05fcb20a177483d0e92378426Romain Guy/**
69627c6fd91377ead85f74a365438e25610ef1e2eeRomain Guy * Used to enable/disable overdraw debugging.
70627c6fd91377ead85f74a365438e25610ef1e2eeRomain Guy *
71627c6fd91377ead85f74a365438e25610ef1e2eeRomain Guy * The accepted values are
72627c6fd91377ead85f74a365438e25610ef1e2eeRomain Guy * "show", to show overdraw
73627c6fd91377ead85f74a365438e25610ef1e2eeRomain Guy * "show_deuteranomaly", to show overdraw if you suffer from Deuteranomaly
74627c6fd91377ead85f74a365438e25610ef1e2eeRomain Guy * "count", to show an overdraw counter
75627c6fd91377ead85f74a365438e25610ef1e2eeRomain Guy * "false", to disable overdraw debugging
76627c6fd91377ead85f74a365438e25610ef1e2eeRomain Guy *
77627c6fd91377ead85f74a365438e25610ef1e2eeRomain Guy * The default value is "false".
787c450aaa3caac2a05fcb20a177483d0e92378426Romain Guy */
7978dd96d5af20f489f0e8b288617d57774ec284f7Romain Guy#define PROPERTY_DEBUG_OVERDRAW "debug.hwui.overdraw"
807c450aaa3caac2a05fcb20a177483d0e92378426Romain Guy
8187e2f757be9b24d369bab354e37c276e851b1fc7Romain Guy/**
82fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck *  System property used to enable or disable hardware rendering profiling.
83fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck * The default value of this property is assumed to be false.
84fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck *
85fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck * When profiling is enabled, the adb shell dumpsys gfxinfo command will
86fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck * output extra information about the time taken to execute by the last
87fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck * frames.
88fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck *
89fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck * Possible values:
90fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck * "true", to enable profiling
91fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck * "visual_bars", to enable profiling and visualize the results on screen
92fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck * "false", to disable profiling
93fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck */
94fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck#define PROPERTY_PROFILE "debug.hwui.profile"
95fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck#define PROPERTY_PROFILE_VISUALIZE_BARS "visual_bars"
96fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck
97fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck/**
983ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy * Used to enable/disable non-rectangular clipping debugging.
993ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy *
1003ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy * The accepted values are:
1013ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy * "highlight", drawing commands clipped by the stencil will
1023ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy *              be colored differently
1033ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy * "region", renders the clipping region on screen whenever
1043ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy *           the stencil is set
1053ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy * "hide", don't show the clip
1063ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy *
1073ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy * The default value is "hide".
1083ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy */
10908bca88b272f0006e1581e9c28bc6312490f634eRomain Guy#define PROPERTY_DEBUG_STENCIL_CLIP "debug.hwui.show_non_rect_clip"
1103ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy
1113ff0bfdd144bba3b023eda8c49b25fb0d0de8653Romain Guy/**
11223d307c8d88f4a3849163b9e5b7cd11d0d4f372cJohn Reck * Turn on to draw dirty regions every other frame.
11323d307c8d88f4a3849163b9e5b7cd11d0d4f372cJohn Reck *
11423d307c8d88f4a3849163b9e5b7cd11d0d4f372cJohn Reck * Possible values:
11523d307c8d88f4a3849163b9e5b7cd11d0d4f372cJohn Reck * "true", to enable dirty regions debugging
11623d307c8d88f4a3849163b9e5b7cd11d0d4f372cJohn Reck * "false", to disable dirty regions debugging
11723d307c8d88f4a3849163b9e5b7cd11d0d4f372cJohn Reck */
11823d307c8d88f4a3849163b9e5b7cd11d0d4f372cJohn Reck#define PROPERTY_DEBUG_SHOW_DIRTY_REGIONS "debug.hwui.show_dirty_regions"
11923d307c8d88f4a3849163b9e5b7cd11d0d4f372cJohn Reck
12023d307c8d88f4a3849163b9e5b7cd11d0d4f372cJohn Reck/**
121cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy * Disables draw operation deferral if set to "true", forcing draw
122cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy * commands to be issued to OpenGL in order, and processed in sequence
123cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy * with state-manipulation canvas commands.
124cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy */
125cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy#define PROPERTY_DISABLE_DRAW_DEFER "debug.hwui.disable_draw_defer"
126cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy
127cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy/**
128cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy * Used to disable draw operation reordering when deferring draw operations
129cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy * Has no effect if PROPERTY_DISABLE_DRAW_DEFER is set to "true"
130cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy */
131cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy#define PROPERTY_DISABLE_DRAW_REORDER "debug.hwui.disable_draw_reorder"
132cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy
133d04794a9a3f9edc8b7ca336175d66eb81a8f55faJohn Reck/**
134d04794a9a3f9edc8b7ca336175d66eb81a8f55faJohn Reck * Setting this property will enable or disable the dropping of frames with
135d04794a9a3f9edc8b7ca336175d66eb81a8f55faJohn Reck * empty damage. Default is "true".
136d04794a9a3f9edc8b7ca336175d66eb81a8f55faJohn Reck */
137d04794a9a3f9edc8b7ca336175d66eb81a8f55faJohn Reck#define PROPERTY_SKIP_EMPTY_DAMAGE "debug.hwui.skip_empty_damage"
138d04794a9a3f9edc8b7ca336175d66eb81a8f55faJohn Reck
139d04794a9a3f9edc8b7ca336175d66eb81a8f55faJohn Reck/**
140149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck * Controls whether or not HWUI will use the EGL_EXT_buffer_age extension
141149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck * to do partial invalidates. Setting this to "false" will fall back to
142149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck * using BUFFER_PRESERVED instead
143149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck * Default is "true"
144149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck */
145149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck#define PROPERTY_USE_BUFFER_AGE "debug.hwui.use_buffer_age"
146149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck
147149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck/**
148149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck * Setting this to "false" will force HWUI to always do full-redraws of the surface.
149149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck * This will disable the use of EGL_EXT_buffer_age and BUFFER_PRESERVED.
150149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck * Default is "true"
151149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck */
152647bc13709d704edc20118d937dfbe74596c2278ryang#define PROPERTY_ENABLE_PARTIAL_UPDATES "debug.hwui.use_partial_updates"
153149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck
154c7cd9cf25d9775446ffcb6b5f20b0a4c1e3c99c5John Reck#define PROPERTY_FILTER_TEST_OVERHEAD "debug.hwui.filter_test_overhead"
155c7cd9cf25d9775446ffcb6b5f20b0a4c1e3c99c5John Reck
15603de074d05108fa9fb07c6b847c7163ada5776daStan Iliev/**
157cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy * Indicates whether PBOs can be used to back pixel buffers.
158f9f0016b1ff816eb2c7561eed482c056189005f8Romain Guy * Accepted values are "true" and "false". Default is true.
159c3566d06421c8acc0aafb18f7e307e5725ce87e1Chris Craik */
1608dc02f99d09130ace2ee738c2e689db1b3f33181John Reck#define PROPERTY_ENABLE_GPU_PIXEL_BUFFERS "debug.hwui.use_gpu_pixel_buffers"
161eca0ca2424afc1e98912405906edfc32f7733e16Romain Guy
1628dc02f99d09130ace2ee738c2e689db1b3f33181John Reck/**
1638dc02f99d09130ace2ee738c2e689db1b3f33181John Reck * Allows to set rendering pipeline mode to OpenGL (default), Skia OpenGL
1648dc02f99d09130ace2ee738c2e689db1b3f33181John Reck * or Vulkan.
1658dc02f99d09130ace2ee738c2e689db1b3f33181John Reck */
1668dc02f99d09130ace2ee738c2e689db1b3f33181John Reck#define PROPERTY_RENDERER "debug.hwui.renderer"
1674b505376cb1d77de39d12f4f8bc88e111fbbdc5fcaiqinl
168e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev/**
169e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev * Allows to collect a recording of Skia drawing commands.
170e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev */
171e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev#define PROPERTY_CAPTURE_SKP_ENABLED "debug.hwui.capture_skp_enabled"
172e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev
173e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev/**
174e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev * Defines how many frames in a sequence to capture.
175e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev */
1761bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck#define PROPERTY_CAPTURE_SKP_FRAMES "debug.hwui.capture_skp_frames"
177e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev
178e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev/**
179e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev * File name and location, where a SKP recording will be saved.
180e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev */
181e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev#define PROPERTY_CAPTURE_SKP_FILENAME "debug.hwui.skp_filename"
182e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev
1833a9f223dd1fe6a74e6bcf9a1080280034043409cLingfeng Yang/**
1843a9f223dd1fe6a74e6bcf9a1080280034043409cLingfeng Yang * Property for whether this is running in the emulator.
1853a9f223dd1fe6a74e6bcf9a1080280034043409cLingfeng Yang */
1863a9f223dd1fe6a74e6bcf9a1080280034043409cLingfeng Yang#define PROPERTY_QEMU_KERNEL "ro.kernel.qemu"
1873a9f223dd1fe6a74e6bcf9a1080280034043409cLingfeng Yang
188cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy///////////////////////////////////////////////////////////////////////////////
189cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy// Misc
190cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy///////////////////////////////////////////////////////////////////////////////
191cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy
192cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy// Converts a number of mega-bytes into bytes
1931bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck#define MB(s) ((s)*1024 * 1024)
1943b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy// Converts a number of kilo-bytes into bytes
1951bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck#define KB(s) ((s)*1024)
196cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy
1971bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reckenum class ProfileType { None, Console, Bars };
1982507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
1991bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reckenum class OverdrawColorSet { Default = 0, Deuteranomaly };
2002507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
2011bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reckenum class StencilClipDebug { Hide, ShowHighlight, ShowRegion };
2022507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
2031bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reckenum class RenderPipelineType { OpenGL = 0, SkiaGL, SkiaVulkan, NotInitialized = 128 };
20403de074d05108fa9fb07c6b847c7163ada5776daStan Iliev
2052507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik/**
2062507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik * Renderthread-only singleton which manages several static rendering properties. Most of these
2072507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik * are driven by system properties which are queried once at initialization, and again if init()
2082507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik * is called.
2092507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik */
2102507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craikclass Properties {
2112507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craikpublic:
2122507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static bool load();
2132507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
2142507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static bool drawDeferDisabled;
2152507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static bool drawReorderDisabled;
2162507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static bool debugLayersUpdates;
2172507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static bool debugOverdraw;
2182507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static bool showDirtyRegions;
219d04794a9a3f9edc8b7ca336175d66eb81a8f55faJohn Reck    // TODO: Remove after stabilization period
220d04794a9a3f9edc8b7ca336175d66eb81a8f55faJohn Reck    static bool skipEmptyFrames;
221149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck    static bool useBufferAge;
222149173d28c0843aba86b0810ce75b34be6a0d08fJohn Reck    static bool enablePartialUpdates;
2232507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
2248dc02f99d09130ace2ee738c2e689db1b3f33181John Reck    // TODO: Move somewhere else?
2258dc02f99d09130ace2ee738c2e689db1b3f33181John Reck    static constexpr float textGamma = 1.45f;
2269fded232a9548a304e0145011df8849fba0dcda7Chris Craik
2272507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static DebugLevel debugLevel;
2282507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static OverdrawColorSet overdrawColorSet;
2292507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static StencilClipDebug debugStencilClip;
2302507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
2312507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    // Override the value for a subset of properties in this class
2322507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static void overrideProperty(const char* name, const char* value);
2332507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
2342507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static float overrideLightRadius;
2352507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static float overrideLightPosY;
2362507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static float overrideLightPosZ;
2372507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static float overrideAmbientRatio;
2382507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static int overrideAmbientShadowStrength;
2392507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static int overrideSpotShadowStrength;
2402507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
2412507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static ProfileType getProfileType();
242f7340ee1cbfe80b33f5609a076c06da8c0c4b869Bo Liu    ANDROID_API static RenderPipelineType getRenderPipelineType();
2430df6209a02d0ea99d2dff3a46ed9febd5925df4bDerek Sollenberger    static bool isSkiaEnabled();
2442507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
245938e884a1fcc385dba5a41475aad76d8b7189609John Reck    ANDROID_API static bool enableHighContrastText;
246938e884a1fcc385dba5a41475aad76d8b7189609John Reck
247682573c84b7c21dc8ce4a2375da3961147442c4aJohn Reck    // Should be used only by test apps
248682573c84b7c21dc8ce4a2375da3961147442c4aJohn Reck    static bool waitForGpuCompletion;
249f1480761c1a83aecd09cdd473ec797a41d1a2f3fJohn Reck    static bool forceDrawFrame;
250682573c84b7c21dc8ce4a2375da3961147442c4aJohn Reck
251c7cd9cf25d9775446ffcb6b5f20b0a4c1e3c99c5John Reck    // Should only be set by automated tests to try and filter out
252c7cd9cf25d9775446ffcb6b5f20b0a4c1e3c99c5John Reck    // any overhead they add
253c7cd9cf25d9775446ffcb6b5f20b0a4c1e3c99c5John Reck    static bool filterOutTestOverhead;
254c7cd9cf25d9775446ffcb6b5f20b0a4c1e3c99c5John Reck
255a896306c38c4d11c43b967a21db6d74c251b2520John Reck    // Workaround a device lockup in edge cases by switching to async mode
256a896306c38c4d11c43b967a21db6d74c251b2520John Reck    // instead of the default vsync (b/38372997). Only system_server should hit this.
257a896306c38c4d11c43b967a21db6d74c251b2520John Reck    // Any existing RenderProxy & Surface combination will be unaffected, only things
258a896306c38c4d11c43b967a21db6d74c251b2520John Reck    // created after changing this.
259a896306c38c4d11c43b967a21db6d74c251b2520John Reck    static bool disableVsync;
260a896306c38c4d11c43b967a21db6d74c251b2520John Reck
261e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev    static bool skpCaptureEnabled;
262e9d0012bbf8077c1b7e09e44ae30e7873eb7ac31Stan Iliev
2639f51644abf203968b2b108441d63425de8a35c08John Reck    // For experimentation b/68769804
2649f51644abf203968b2b108441d63425de8a35c08John Reck    ANDROID_API static bool enableRTAnimations;
2659f51644abf203968b2b108441d63425de8a35c08John Reck
266113ddd9ef5a05e340d476e05edc971b5c2f80c26John Reck    // Used for testing only to change the render pipeline.
26798c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    static void overrideRenderPipelineType(RenderPipelineType);
26898c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel
2693a9f223dd1fe6a74e6bcf9a1080280034043409cLingfeng Yang    static bool runningInEmulator;
2703a9f223dd1fe6a74e6bcf9a1080280034043409cLingfeng Yang
2716afa009c0ca43884e2e973937db56673da3907caJohn Reck    ANDROID_API static bool debuggingEnabled;
272564284759f014c141cb8b8403b036833f50f49efJohn Reck    ANDROID_API static bool isolatedProcess;
2736afa009c0ca43884e2e973937db56673da3907caJohn Reck
274767e25ed613201d93d293a4c8ead5a21c0fb2b22Jorim Jaggi    ANDROID_API static int contextPriority;
275767e25ed613201d93d293a4c8ead5a21c0fb2b22Jorim Jaggi
2762507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craikprivate:
2772507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static ProfileType sProfileType;
2782507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik    static bool sDisableProfileBars;
27903de074d05108fa9fb07c6b847c7163ada5776daStan Iliev    static RenderPipelineType sRenderPipelineType;
2801bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck};  // class Caches
2812507c34d91bb0d722b6012e85cb47387b2aa6873Chris Craik
2821bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck};  // namespace uirenderer
2831bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck};  // namespace android
284e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy
2851bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck#endif  // ANDROID_HWUI_PROPERTIES_H
286