Index: cc/layer_tree_host.cc |
diff --git a/cc/layer_tree_host.cc b/cc/layer_tree_host.cc |
index 25d3d2730df1cb0cbbc4cb3441053dc75405acdf..30bae774b5d612f7430fb860d6cecb3621fc698f 100644 |
--- a/cc/layer_tree_host.cc |
+++ b/cc/layer_tree_host.cc |
@@ -36,11 +36,10 @@ namespace cc { |
bool LayerTreeHost::s_needsFilterContext = false; |
-LayerTreeSettings::LayerTreeSettings() |
- : acceleratePainting(false) |
- , implSidePainting(false) |
- , showDebugBorders(false) |
+LayerTreeDebugState::LayerTreeDebugState() |
+ : showFPSCounter(false) |
, showPlatformLayerTree(false) |
+ , showDebugBorders(false) |
, showPaintRects(false) |
, showPropertyChangedRects(false) |
, showSurfaceDamageRects(false) |
@@ -48,6 +47,50 @@ LayerTreeSettings::LayerTreeSettings() |
, showReplicaScreenSpaceRects(false) |
, showOccludingRects(false) |
, showNonOccludingRects(false) |
+{ |
+} |
+ |
+LayerTreeDebugState::~LayerTreeDebugState() |
+{ |
+} |
+ |
+bool LayerTreeDebugState::showHudInfo() const |
+{ |
+ return showFPSCounter || showPlatformLayerTree || showHudRects(); |
+} |
+ |
+bool LayerTreeDebugState::showHudRects() const |
+{ |
+ return showPaintRects || showPropertyChangedRects || showSurfaceDamageRects || showScreenSpaceRects || showReplicaScreenSpaceRects || showOccludingRects || showNonOccludingRects; |
+} |
+ |
+bool LayerTreeDebugState::equal(const LayerTreeDebugState& a, const LayerTreeDebugState& b) |
+{ |
+ return memcmp(&a, &b, sizeof(LayerTreeDebugState)) == 0; |
+} |
+ |
+LayerTreeDebugState LayerTreeDebugState::unite(const LayerTreeDebugState& a, const LayerTreeDebugState& b) |
+{ |
+ LayerTreeDebugState r(a); |
+ |
+ r.showFPSCounter |= b.showFPSCounter; |
+ r.showPlatformLayerTree |= b.showPlatformLayerTree; |
+ r.showDebugBorders |= b.showDebugBorders; |
+ |
+ r.showPaintRects |= b.showPaintRects; |
+ r.showPropertyChangedRects |= b.showPropertyChangedRects; |
+ r.showSurfaceDamageRects |= b.showSurfaceDamageRects; |
+ r.showScreenSpaceRects |= b.showScreenSpaceRects; |
+ r.showReplicaScreenSpaceRects |= b.showReplicaScreenSpaceRects; |
+ r.showOccludingRects |= b.showOccludingRects; |
+ r.showNonOccludingRects |= b.showNonOccludingRects; |
+ |
+ return r; |
+} |
+ |
+LayerTreeSettings::LayerTreeSettings() |
+ : acceleratePainting(false) |
+ , implSidePainting(false) |
, renderVSyncEnabled(true) |
, perTilePaintingEnabled(false) |
, partialSwapEnabled(false) |
@@ -62,15 +105,16 @@ LayerTreeSettings::LayerTreeSettings() |
, minimumOcclusionTrackingSize(gfx::Size(160, 160)) |
{ |
// TODO(danakj): Move this to chromium when we don't go through the WebKit API anymore. |
- showPropertyChangedRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowPropertyChangedRects); |
- showSurfaceDamageRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowSurfaceDamageRects); |
- showScreenSpaceRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowScreenSpaceRects); |
- showReplicaScreenSpaceRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowReplicaScreenSpaceRects); |
- showOccludingRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowOccludingRects); |
- showNonOccludingRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowNonOccludingRects); |
partialSwapEnabled = CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnablePartialSwap); |
backgroundColorInsteadOfCheckerboard = CommandLine::ForCurrentProcess()->HasSwitch(switches::kBackgroundColorInsteadOfCheckerboard); |
showOverdrawInTracing = CommandLine::ForCurrentProcess()->HasSwitch(switches::kTraceOverdraw); |
+ |
+ initialDebugState.showPropertyChangedRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowPropertyChangedRects); |
+ initialDebugState.showSurfaceDamageRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowSurfaceDamageRects); |
+ initialDebugState.showScreenSpaceRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowScreenSpaceRects); |
+ initialDebugState.showReplicaScreenSpaceRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowReplicaScreenSpaceRects); |
+ initialDebugState.showOccludingRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowOccludingRects); |
+ initialDebugState.showNonOccludingRects = CommandLine::ForCurrentProcess()->HasSwitch(cc::switches::kShowNonOccludingRects); |
} |
LayerTreeSettings::~LayerTreeSettings() |
@@ -119,6 +163,7 @@ LayerTreeHost::LayerTreeHost(LayerTreeHostClient* client, const LayerTreeSetting |
, m_numTimesRecreateShouldFail(0) |
, m_numFailedRecreateAttempts(0) |
, m_settings(settings) |
+ , m_debugState(settings.initialDebugState) |
, m_deviceScaleFactor(1) |
, m_visible(true) |
, m_pageScaleFactor(1) |
@@ -289,6 +334,7 @@ void LayerTreeHost::finishCommitOnImplThread(LayerTreeHostImpl* hostImpl) |
hostImpl->setPageScaleFactorAndLimits(m_pageScaleFactor, m_minPageScaleFactor, m_maxPageScaleFactor); |
hostImpl->setBackgroundColor(m_backgroundColor); |
hostImpl->setHasTransparentBackground(m_hasTransparentBackground); |
+ hostImpl->setDebugState(m_debugState); |
m_commitNumber++; |
} |
@@ -299,12 +345,6 @@ void LayerTreeHost::createHUDLayerIfNeeded() |
m_hudLayer = HeadsUpDisplayLayer::create(); |
} |
-void LayerTreeHost::setShowFPSCounter(bool show) |
-{ |
- createHUDLayerIfNeeded(); |
- m_hudLayer->setShowFPSCounter(show); |
-} |
- |
void LayerTreeHost::setFontAtlas(scoped_ptr<FontAtlas> fontAtlas) |
{ |
createHUDLayerIfNeeded(); |
@@ -315,7 +355,7 @@ void LayerTreeHost::willCommit() |
{ |
m_client->willCommit(); |
- if (m_settings.showDebugInfo()) |
+ if (m_debugState.showHudInfo()) |
createHUDLayerIfNeeded(); |
if (m_rootLayer && m_hudLayer && !m_hudLayer->parent()) |
@@ -442,6 +482,17 @@ void LayerTreeHost::setRootLayer(scoped_refptr<Layer> rootLayer) |
setNeedsCommit(); |
} |
+void LayerTreeHost::setDebugState(const LayerTreeDebugState& debugState) |
+{ |
+ LayerTreeDebugState newDebugState = LayerTreeDebugState::unite(m_settings.initialDebugState, debugState); |
+ |
+ if (LayerTreeDebugState::equal(m_debugState, newDebugState)) |
+ return; |
+ |
+ m_debugState = newDebugState; |
+ setNeedsCommit(); |
+} |
+ |
void LayerTreeHost::setViewportSize(const gfx::Size& layoutViewportSize, const gfx::Size& deviceViewportSize) |
{ |
if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_deviceViewportSize) |