Lazy load Properties::isDrawingEnabled.

Properties::isDrawingEnabled can unexpectedly return true
even if the system property debug.hwui.drawing_enabled is false,
if its called before RenderThread is created.

This commit changes the underlying logic to lazy load the
debug.hwui.drawing_enabled prop value.

Bug: 193920054
Test: call HardwareRendererCompat.isDrawingEnabled()) from a new test
Change-Id: Ib69577745c26595ed3964a4341086138dd5d34b0
(cherry picked from commit 8e1ab42f51c501949211746c46a02a7564ebf292)
This commit is contained in:
Brett Chabot
2021-07-16 14:38:11 -07:00
parent c9d121cd94
commit 074ba590e6
2 changed files with 12 additions and 15 deletions

View File

@@ -88,8 +88,7 @@ bool Properties::enableWebViewOverlays = false;
StretchEffectBehavior Properties::stretchEffectBehavior = StretchEffectBehavior::ShaderHWUI;
bool Properties::drawingEnabled = true;
OverrideDrawingEnabled Properties::overrideDrawingEnabled = OverrideDrawingEnabled::Default;
DrawingEnabled Properties::drawingEnabled = DrawingEnabled::NotInitialized;
bool Properties::load() {
bool prevDebugLayersUpdates = debugLayersUpdates;
@@ -144,10 +143,8 @@ bool Properties::load() {
enableWebViewOverlays = base::GetBoolProperty(PROPERTY_WEBVIEW_OVERLAYS_ENABLED, false);
drawingEnabled = base::GetBoolProperty(PROPERTY_DRAWING_ENABLED, true);
if (!drawingEnabled) {
enableRTAnimations = false;
}
// call isDrawingEnabled to force loading of the property
isDrawingEnabled();
return (prevDebugLayersUpdates != debugLayersUpdates) || (prevDebugOverdraw != debugOverdraw);
}
@@ -219,16 +216,17 @@ void Properties::overrideRenderPipelineType(RenderPipelineType type, bool inUnit
}
void Properties::setDrawingEnabled(bool newDrawingEnabled) {
overrideDrawingEnabled =
newDrawingEnabled ? OverrideDrawingEnabled::On : OverrideDrawingEnabled::Off;
drawingEnabled = newDrawingEnabled ? DrawingEnabled::On : DrawingEnabled::Off;
enableRTAnimations = newDrawingEnabled;
}
bool Properties::isDrawingEnabled() {
if (overrideDrawingEnabled == OverrideDrawingEnabled::Default) {
return drawingEnabled;
if (drawingEnabled == DrawingEnabled::NotInitialized) {
bool drawingEnabledProp = base::GetBoolProperty(PROPERTY_DRAWING_ENABLED, true);
drawingEnabled = drawingEnabledProp ? DrawingEnabled::On : DrawingEnabled::Off;
enableRTAnimations = drawingEnabledProp;
}
return overrideDrawingEnabled == OverrideDrawingEnabled::On;
return drawingEnabled == DrawingEnabled::On;
}
} // namespace uirenderer

View File

@@ -214,7 +214,7 @@ enum class StretchEffectBehavior {
UniformScale // Uniform scale stretch everywhere
};
enum class OverrideDrawingEnabled { Default, On, Off };
enum class DrawingEnabled { NotInitialized, On, Off };
/**
* Renderthread-only singleton which manages several static rendering properties. Most of these
@@ -309,9 +309,8 @@ public:
stretchEffectBehavior = behavior;
}
// Represents if GL drawing is enabled. Should only be false in headless testing environments
static bool drawingEnabled;
static OverrideDrawingEnabled overrideDrawingEnabled;
// Represents if drawing is enabled. Should only be Off in headless testing environments
static DrawingEnabled drawingEnabled;
static bool isDrawingEnabled();
static void setDrawingEnabled(bool enable);