summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authoregraether@chromium.org <egraether@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-20 04:01:26 +0000
committeregraether@chromium.org <egraether@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-20 04:01:26 +0000
commit788fbf72d7fe63eab10e01f2bca86b02b33c263e (patch)
tree3aa48a72e06e8deeb98c7ad9f370a0bdb223d13a /cc
parent8af989c23f030663c8b5a297e988970b4910b461 (diff)
downloadchromium_src-788fbf72d7fe63eab10e01f2bca86b02b33c263e.zip
chromium_src-788fbf72d7fe63eab10e01f2bca86b02b33c263e.tar.gz
chromium_src-788fbf72d7fe63eab10e01f2bca86b02b33c263e.tar.bz2
This change adds continuous painting mode to the compositor, which makes it easier to detect how certain DOMNodes and CSSStyles affect painting performance. If active it calls setNeedsDisplay() on every Layer in every frame.
BUG= Review URL: https://chromiumcodereview.appspot.com/11450022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@174105 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r--cc/layer_tree_debug_state.cc2
-rw-r--r--cc/layer_tree_debug_state.h1
-rw-r--r--cc/layer_tree_host.cc22
-rw-r--r--cc/layer_tree_host.h4
4 files changed, 28 insertions, 1 deletions
diff --git a/cc/layer_tree_debug_state.cc b/cc/layer_tree_debug_state.cc
index f2e2d66..9343f69 100644
--- a/cc/layer_tree_debug_state.cc
+++ b/cc/layer_tree_debug_state.cc
@@ -12,6 +12,7 @@ LayerTreeDebugState::LayerTreeDebugState()
: showFPSCounter(false)
, showPlatformLayerTree(false)
, showDebugBorders(false)
+ , continuousPainting(false)
, showPaintRects(false)
, showPropertyChangedRects(false)
, showSurfaceDamageRects(false)
@@ -45,6 +46,7 @@ LayerTreeDebugState LayerTreeDebugState::unite(const LayerTreeDebugState& a, con
r.showFPSCounter |= b.showFPSCounter;
r.showPlatformLayerTree |= b.showPlatformLayerTree;
r.showDebugBorders |= b.showDebugBorders;
+ r.continuousPainting |= b.continuousPainting;
r.showPaintRects |= b.showPaintRects;
r.showPropertyChangedRects |= b.showPropertyChangedRects;
diff --git a/cc/layer_tree_debug_state.h b/cc/layer_tree_debug_state.h
index d920f23..5a9a325 100644
--- a/cc/layer_tree_debug_state.h
+++ b/cc/layer_tree_debug_state.h
@@ -17,6 +17,7 @@ class CC_EXPORT LayerTreeDebugState {
bool showFPSCounter;
bool showPlatformLayerTree;
bool showDebugBorders;
+ bool continuousPainting;
bool showPaintRects;
bool showPropertyChangedRects;
diff --git a/cc/layer_tree_host.cc b/cc/layer_tree_host.cc
index 4a228f4..91276de 100644
--- a/cc/layer_tree_host.cc
+++ b/cc/layer_tree_host.cc
@@ -221,6 +221,28 @@ void LayerTreeHost::acquireLayerTextures()
m_proxy->acquireLayerTextures();
}
+void LayerTreeHost::didBeginFrame()
+{
+ m_client->didBeginFrame();
+
+ if (m_debugState.continuousPainting)
+ setNeedsDisplayOnAllLayersRecursive(m_rootLayer.get());
+}
+
+void LayerTreeHost::setNeedsDisplayOnAllLayersRecursive(Layer* layer)
+{
+ if (!layer)
+ return;
+
+ layer->setNeedsDisplay();
+
+ setNeedsDisplayOnAllLayersRecursive(layer->maskLayer());
+ setNeedsDisplayOnAllLayersRecursive(layer->replicaLayer());
+
+ for (size_t childIndex = 0; childIndex < layer->children().size(); ++childIndex)
+ setNeedsDisplayOnAllLayersRecursive(layer->children()[childIndex].get());
+}
+
void LayerTreeHost::updateAnimations(base::TimeTicks frameBeginTime)
{
m_animating = true;
diff --git a/cc/layer_tree_host.h b/cc/layer_tree_host.h
index 51ae3d7..95766e3 100644
--- a/cc/layer_tree_host.h
+++ b/cc/layer_tree_host.h
@@ -85,7 +85,7 @@ public:
// LayerTreeHost interface to Proxy.
void willBeginFrame() { m_client->willBeginFrame(); }
- void didBeginFrame() { m_client->didBeginFrame(); }
+ void didBeginFrame();
void updateAnimations(base::TimeTicks monotonicFrameBeginTime);
void didStopFlinging();
void layout();
@@ -228,6 +228,8 @@ private:
bool animateLayersRecursive(Layer* current, base::TimeTicks time);
void setAnimationEventsRecursive(const AnimationEventsVector&, Layer*, base::Time wallClockTime);
+ void setNeedsDisplayOnAllLayersRecursive(Layer* layer);
+
bool m_animating;
bool m_needsFullTreeSync;