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

Side by Side Diff: ui/gfx/compositor/layer.h

Issue 8368013: Improve Aura overdraw by changing hole calculation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changes as requested Created 9 years, 1 month 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
« no previous file with comments | « no previous file | ui/gfx/compositor/layer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #ifndef UI_GFX_COMPOSITOR_LAYER_H_ 5 #ifndef UI_GFX_COMPOSITOR_LAYER_H_
6 #define UI_GFX_COMPOSITOR_LAYER_H_ 6 #define UI_GFX_COMPOSITOR_LAYER_H_
7 #pragma once 7 #pragma once
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 186
187 #if !defined(NDEBUG) 187 #if !defined(NDEBUG)
188 // Returns layer info in a string format compatible with View::PrintViewGraph 188 // Returns layer info in a string format compatible with View::PrintViewGraph
189 // and Window::PrintWindowGraph. 189 // and Window::PrintWindowGraph.
190 // Layers which print their bounds opaquely are filled. 190 // Layers which print their bounds opaquely are filled.
191 // Layers with textures are green, layers without textures are red. 191 // Layers with textures are green, layers without textures are red.
192 std::string GetLayerInfo(); 192 std::string GetLayerInfo();
193 #endif 193 #endif
194 194
195 private: 195 private:
196 struct LayerProperties {
197 public:
sky 2011/10/26 00:08:28 Indentation is off here. Should be like a class.
198 ui::Layer* layer;
199 ui::Transform transform_relative_to_root;
200 };
201
196 // TODO(vollick): Eventually, if a non-leaf node has an opacity of less than 202 // TODO(vollick): Eventually, if a non-leaf node has an opacity of less than
197 // 1.0, we'll render to a separate texture, and then apply the alpha. 203 // 1.0, we'll render to a separate texture, and then apply the alpha.
198 // Currently, we multiply our opacity by all our ancestor's opacities and 204 // Currently, we multiply our opacity by all our ancestor's opacities and
199 // use the combined result, but this is only temporary. 205 // use the combined result, but this is only temporary.
200 float GetCombinedOpacity() const; 206 float GetCombinedOpacity() const;
201 207
202 // Called during the Draw() pass to freshen the Layer's contents from the 208 // Called during the Draw() pass to freshen the Layer's contents from the
203 // delegate. 209 // delegate.
204 void UpdateLayerCanvas(); 210 void UpdateLayerCanvas();
205 211
212 // Called to indicate that a layer's properties have changed and that the
213 // holes for the layers must be recomputed.
214 void SetNeedsToRecomputeHole();
215
216 // Resets |hole_rect_| to the empty rect for all layers below and
217 // including this one.
218 void ClearHoleRects();
219
220 // Does a preorder traversal of layers starting with this layer. Omits layers
221 // which cannot punch a hole in another layer such as non visible layers
222 // and layers which don't fill their bounds opaquely.
223 void GetLayerProperties(std::vector<LayerProperties>* traversal,
sky 2011/10/26 00:08:28 our params last.
224 const ui::Transform& current_transform);
225
206 // A hole in a layer is an area in the layer that does not get drawn 226 // A hole in a layer is an area in the layer that does not get drawn
207 // because this area is covered up with another layer which is known to be 227 // because this area is covered up with another layer which is known to be
208 // opaque. 228 // opaque.
209 // This method computes the dimension of the hole (if there is one) 229 // This method computes the dimension of the hole (if there is one)
210 // based on whether one of its child nodes is always opaque. 230 // based on whether one of its child nodes is always opaque.
211 // Note: For simplicity's sake, currently a hole is only created if the child 231 // Note: This method should only be called from the root.
212 // view has no transform with respect to its parent.
213 void RecomputeHole(); 232 void RecomputeHole();
214 233
215 // Returns true if the layer paints every pixel (fills_bounds_opaquely) 234 void set_hole_rect(const gfx::Rect& hole_rect) {
216 // and the alpha of the layer is 1.0f. 235 hole_rect_ = hole_rect;
217 bool IsCompletelyOpaque() const; 236 }
218 237
219 // Determines the regions that don't intersect |rect| and places the 238 // Determines the regions that don't intersect |rect| and places the
220 // result in |sides|. 239 // result in |sides|.
221 // 240 //
222 // rect_____________________________ 241 // rect_____________________________
223 // |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| 242 // |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
224 // |xxxxxxxxxxxxx top xxxxxxxxxxxxxx| 243 // |xxxxxxxxxxxxx top xxxxxxxxxxxxxx|
225 // |________________________________| 244 // |________________________________|
226 // |xxxxx| |xxxxx| 245 // |xxxxx| |xxxxx|
227 // |xxxxx|region_to_punch_out |xxxxx| 246 // |xxxxx|region_to_punch_out |xxxxx|
228 // |left | |right| 247 // |left | |right|
229 // |_____|____________________|_____| 248 // |_____|____________________|_____|
230 // |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| 249 // |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
231 // |xxxxxxxxxx bottom xxxxxxxxxxxxxx| 250 // |xxxxxxxxxx bottom xxxxxxxxxxxxxx|
232 // |________________________________| 251 // |________________________________|
233 static void PunchHole(const gfx::Rect& rect, 252 static void PunchHole(const gfx::Rect& rect,
234 const gfx::Rect& region_to_punch_out, 253 const gfx::Rect& region_to_punch_out,
235 std::vector<gfx::Rect>* sides); 254 std::vector<gfx::Rect>* sides);
236 255
256 // Drops texture just for this layer.
257 void DropTexture();
258
237 // Drop all textures for layers below and including this one. Called when 259 // Drop all textures for layers below and including this one. Called when
238 // the layer is removed from a hierarchy. Textures will be re-generated if 260 // the layer is removed from a hierarchy. Textures will be re-generated if
239 // the layer is subsequently re-attached and needs to be drawn. 261 // the layer is subsequently re-attached and needs to be drawn.
240 void DropTextures(); 262 void DropTextures();
241 263
242 bool ConvertPointForAncestor(const Layer* ancestor, gfx::Point* point) const; 264 bool ConvertPointForAncestor(const Layer* ancestor, gfx::Point* point) const;
243 bool ConvertPointFromAncestor(const Layer* ancestor, gfx::Point* point) const; 265 bool ConvertPointFromAncestor(const Layer* ancestor, gfx::Point* point) const;
244 266
245 bool GetTransformRelativeTo(const Layer* ancestor, 267 bool GetTransformRelativeTo(const Layer* ancestor,
246 Transform* transform) const; 268 Transform* transform) const;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 309
288 gfx::Rect bounds_; 310 gfx::Rect bounds_;
289 311
290 // Visibility of this layer. See SetVisible/IsDrawn for more details. 312 // Visibility of this layer. See SetVisible/IsDrawn for more details.
291 bool visible_; 313 bool visible_;
292 314
293 bool fills_bounds_opaquely_; 315 bool fills_bounds_opaquely_;
294 316
295 gfx::Rect hole_rect_; 317 gfx::Rect hole_rect_;
296 318
319 bool recompute_hole_;
320
297 gfx::Rect invalid_rect_; 321 gfx::Rect invalid_rect_;
298 322
299 // If true the layer is always up to date. 323 // If true the layer is always up to date.
300 bool layer_updated_externally_; 324 bool layer_updated_externally_;
301 325
302 float opacity_; 326 float opacity_;
303 327
304 LayerDelegate* delegate_; 328 LayerDelegate* delegate_;
305 329
306 scoped_ptr<LayerAnimationManager> animator_; 330 scoped_ptr<LayerAnimationManager> animator_;
307 331
308 #if defined(USE_WEBKIT_COMPOSITOR) 332 #if defined(USE_WEBKIT_COMPOSITOR)
309 WebKit::WebContentLayer web_layer_; 333 WebKit::WebContentLayer web_layer_;
310 #endif 334 #endif
311 335
312 DISALLOW_COPY_AND_ASSIGN(Layer); 336 DISALLOW_COPY_AND_ASSIGN(Layer);
313 }; 337 };
314 338
315 } // namespace ui 339 } // namespace ui
316 340
317 #endif // UI_GFX_COMPOSITOR_LAYER_H_ 341 #endif // UI_GFX_COMPOSITOR_LAYER_H_
OLDNEW
« no previous file with comments | « no previous file | ui/gfx/compositor/layer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698