Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: Source/core/rendering/compositing/CompositingReasonFinder.cpp

Issue 233063004: Suppress layer creation for descendants of GPU-rasterized layers (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/rendering/compositing/CompositingReasonFinder.h" 6 #include "core/rendering/compositing/CompositingReasonFinder.h"
7 7
8 #include "CSSPropertyNames.h" 8 #include "CSSPropertyNames.h"
9 #include "HTMLNames.h" 9 #include "HTMLNames.h"
10 #include "core/frame/FrameView.h" 10 #include "core/frame/FrameView.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 { 82 {
83 return m_compositingTriggers & LegacyOverflowScrollTrigger; 83 return m_compositingTriggers & LegacyOverflowScrollTrigger;
84 } 84 }
85 85
86 bool CompositingReasonFinder::isMainFrame() const 86 bool CompositingReasonFinder::isMainFrame() const
87 { 87 {
88 // FIXME: LocalFrame::isMainFrame() is probably better. 88 // FIXME: LocalFrame::isMainFrame() is probably better.
89 return !m_renderView.document().ownerElement(); 89 return !m_renderView.document().ownerElement();
90 } 90 }
91 91
92 CompositingReasons CompositingReasonFinder::suppressStyleDeterminedReasonsIfPoss ible(const RenderLayer* layer, CompositingReasons styleReasons) const
abarth-chromium 2014/04/14 20:25:53 Can we give this function a more semantic name? S
ajuma 2014/04/15 19:11:34 Done.
93 {
94 CompositingReasons adjustedReasons = styleReasons;
95 adjustedReasons &= ~(CompositingReasonWillChangeCompositingHint | Compositin gReasonWillChangeGpuRasterizationHint);
96
97 // We can suppress layer creation for animations before animations start, bu t not
98 // once they're already running on the compositor.
99 if (!layer->renderer()->style()->isRunningAnimationOnCompositor())
100 adjustedReasons &= ~CompositingReasonActiveAnimation;
101
102 return adjustedReasons;
103 }
104
105
abarth-chromium 2014/04/14 20:25:53 Please remove this extra blank line.
ajuma 2014/04/15 19:11:34 Done.
92 CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay er, bool* needToRecomputeCompositingRequirements) const 106 CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay er, bool* needToRecomputeCompositingRequirements) const
93 { 107 {
94 CompositingReasons styleReasons = layer->styleDeterminedCompositingReasons() ; 108 CompositingReasons styleReasons = layer->styleDeterminedCompositingReasons() ;
95 ASSERT(styleDeterminedReasons(layer->renderer()) == styleReasons); 109 ASSERT(styleDeterminedReasons(layer) == styleReasons);
96 return styleReasons | nonStyleDeterminedDirectReasons(layer, needToRecompute CompositingRequirements); 110 return styleReasons | nonStyleDeterminedDirectReasons(layer, needToRecompute CompositingRequirements);
97 } 111 }
98 112
99 // This information doesn't appear to be incorporated into CompositingReasons. 113 // This information doesn't appear to be incorporated into CompositingReasons.
100 bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const 114 bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const
101 { 115 {
102 // Need this done first to determine overflow. 116 // Need this done first to determine overflow.
103 ASSERT(!m_renderView.needsLayout()); 117 ASSERT(!m_renderView.needsLayout());
104 if (isMainFrame()) 118 if (isMainFrame())
105 return false; 119 return false;
106 120
107 if (!(m_compositingTriggers & ScrollableInnerFrameTrigger)) 121 if (!(m_compositingTriggers & ScrollableInnerFrameTrigger))
108 return false; 122 return false;
109 123
110 FrameView* frameView = m_renderView.frameView(); 124 FrameView* frameView = m_renderView.frameView();
111 return frameView->isScrollable(); 125 return frameView->isScrollable();
112 } 126 }
113 127
114 CompositingReasons CompositingReasonFinder::styleDeterminedReasons(RenderObject* renderer) const 128 CompositingReasons CompositingReasonFinder::styleDeterminedReasons(const RenderL ayer* layer) const
115 { 129 {
116 CompositingReasons directReasons = CompositingReasonNone; 130 CompositingReasons directReasons = CompositingReasonNone;
131 RenderObject* renderer = layer->renderer();
117 132
118 if (requiresCompositingForTransform(renderer)) 133 if (requiresCompositingForTransform(renderer))
119 directReasons |= CompositingReason3DTransform; 134 directReasons |= CompositingReason3DTransform;
120 135
121 if (requiresCompositingForBackfaceVisibilityHidden(renderer)) 136 if (requiresCompositingForBackfaceVisibilityHidden(renderer))
122 directReasons |= CompositingReasonBackfaceVisibilityHidden; 137 directReasons |= CompositingReasonBackfaceVisibilityHidden;
123 138
124 if (requiresCompositingForAnimation(renderer)) 139 if (requiresCompositingForAnimation(renderer))
125 directReasons |= CompositingReasonActiveAnimation; 140 directReasons |= CompositingReasonActiveAnimation;
126 141
127 if (requiresCompositingForFilters(renderer)) 142 if (requiresCompositingForFilters(renderer))
128 directReasons |= CompositingReasonFilters; 143 directReasons |= CompositingReasonFilters;
129 144
130 if (requiresCompositingForWillChange(renderer)) 145 if (requiresCompositingForWillChangeCompositingHint(renderer))
131 directReasons |= CompositingReasonWillChange; 146 directReasons |= CompositingReasonWillChangeCompositingHint;
147
148 if (requiresCompositingForWillChangeGpuRasterizationHint(renderer))
149 directReasons |= CompositingReasonWillChangeGpuRasterizationHint;
150
151 if (layer->suppressingCompositedLayerCreation())
152 directReasons = suppressStyleDeterminedReasonsIfPossible(layer, directRe asons);
abarth-chromium 2014/04/14 20:29:53 Maybe it would be clearer to just inline this func
132 153
133 ASSERT(!(directReasons & ~CompositingReasonComboAllStyleDeterminedReasons)); 154 ASSERT(!(directReasons & ~CompositingReasonComboAllStyleDeterminedReasons));
134 return directReasons; 155 return directReasons;
135 } 156 }
136 157
137 bool CompositingReasonFinder::requiresCompositingForTransform(RenderObject* rend erer) const 158 bool CompositingReasonFinder::requiresCompositingForTransform(RenderObject* rend erer) const
138 { 159 {
139 if (!(m_compositingTriggers & ThreeDTransformTrigger)) 160 if (!(m_compositingTriggers & ThreeDTransformTrigger))
140 return false; 161 return false;
141 162
(...skipping 11 matching lines...) Expand all
153 } 174 }
154 175
155 bool CompositingReasonFinder::requiresCompositingForFilters(RenderObject* render er) const 176 bool CompositingReasonFinder::requiresCompositingForFilters(RenderObject* render er) const
156 { 177 {
157 if (!(m_compositingTriggers & FilterTrigger)) 178 if (!(m_compositingTriggers & FilterTrigger))
158 return false; 179 return false;
159 180
160 return renderer->hasFilter(); 181 return renderer->hasFilter();
161 } 182 }
162 183
163 bool CompositingReasonFinder::requiresCompositingForWillChange(const RenderObjec t* renderer) const 184 bool CompositingReasonFinder::requiresCompositingForWillChangeCompositingHint(co nst RenderObject* renderer) const
164 { 185 {
165 if (renderer->style()->hasWillChangeCompositingHint()) 186 return renderer->style()->hasWillChangeCompositingHint();
166 return true; 187 }
167 188
189 bool CompositingReasonFinder::requiresCompositingForWillChangeGpuRasterizationHi nt(const RenderObject* renderer) const
190 {
168 if (!(m_compositingTriggers & GPURasterizationTrigger)) 191 if (!(m_compositingTriggers & GPURasterizationTrigger))
169 return false; 192 return false;
170 193
171 return renderer->style()->hasWillChangeGpuRasterizationHint(); 194 return renderer->style()->hasWillChangeGpuRasterizationHint();
172 } 195 }
173 196
174 CompositingReasons CompositingReasonFinder::nonStyleDeterminedDirectReasons(cons t RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const 197 CompositingReasons CompositingReasonFinder::nonStyleDeterminedDirectReasons(cons t RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const
175 { 198 {
176 CompositingReasons directReasons = CompositingReasonNone; 199 CompositingReasons directReasons = CompositingReasonNone;
177 RenderObject* renderer = layer->renderer(); 200 RenderObject* renderer = layer->renderer();
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 *needToRecomputeCompositingRequirements = true; 359 *needToRecomputeCompositingRequirements = true;
337 } 360 }
338 return false; 361 return false;
339 } 362 }
340 } 363 }
341 364
342 return true; 365 return true;
343 } 366 }
344 367
345 } 368 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698