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

Side by Side Diff: ui/compositor/layer.cc

Issue 16896017: Add a hide_layer_and_subtree() flag to cc::Layer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: hide-subtree-flag: SetIsDrawable on the new cc_layer Created 7 years, 5 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
« no previous file with comments | « ui/compositor/layer.h ('k') | ui/compositor/layer_unittest.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/compositor/layer.h" 5 #include "ui/compositor/layer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 29 matching lines...) Expand all
40 40
41 } // namespace 41 } // namespace
42 42
43 namespace ui { 43 namespace ui {
44 44
45 Layer::Layer() 45 Layer::Layer()
46 : type_(LAYER_TEXTURED), 46 : type_(LAYER_TEXTURED),
47 compositor_(NULL), 47 compositor_(NULL),
48 parent_(NULL), 48 parent_(NULL),
49 visible_(true), 49 visible_(true),
50 is_drawn_(true),
51 force_render_surface_(false), 50 force_render_surface_(false),
52 fills_bounds_opaquely_(true), 51 fills_bounds_opaquely_(true),
53 layer_updated_externally_(false), 52 layer_updated_externally_(false),
54 background_blur_radius_(0), 53 background_blur_radius_(0),
55 layer_saturation_(0.0f), 54 layer_saturation_(0.0f),
56 layer_brightness_(0.0f), 55 layer_brightness_(0.0f),
57 layer_grayscale_(0.0f), 56 layer_grayscale_(0.0f),
58 layer_inverted_(false), 57 layer_inverted_(false),
59 layer_mask_(NULL), 58 layer_mask_(NULL),
60 layer_mask_back_link_(NULL), 59 layer_mask_back_link_(NULL),
61 zoom_(1), 60 zoom_(1),
62 zoom_inset_(0), 61 zoom_inset_(0),
63 delegate_(NULL), 62 delegate_(NULL),
64 cc_layer_(NULL), 63 cc_layer_(NULL),
65 scale_content_(true), 64 scale_content_(true),
66 device_scale_factor_(1.0f) { 65 device_scale_factor_(1.0f) {
67 CreateWebLayer(); 66 CreateWebLayer();
68 } 67 }
69 68
70 Layer::Layer(LayerType type) 69 Layer::Layer(LayerType type)
71 : type_(type), 70 : type_(type),
72 compositor_(NULL), 71 compositor_(NULL),
73 parent_(NULL), 72 parent_(NULL),
74 visible_(true), 73 visible_(true),
75 is_drawn_(true),
76 force_render_surface_(false), 74 force_render_surface_(false),
77 fills_bounds_opaquely_(true), 75 fills_bounds_opaquely_(true),
78 layer_updated_externally_(false), 76 layer_updated_externally_(false),
79 background_blur_radius_(0), 77 background_blur_radius_(0),
80 layer_saturation_(0.0f), 78 layer_saturation_(0.0f),
81 layer_brightness_(0.0f), 79 layer_brightness_(0.0f),
82 layer_grayscale_(0.0f), 80 layer_grayscale_(0.0f),
83 layer_inverted_(false), 81 layer_inverted_(false),
84 layer_mask_(NULL), 82 layer_mask_(NULL),
85 layer_mask_back_link_(NULL), 83 layer_mask_back_link_(NULL),
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 } 133 }
136 134
137 void Layer::Add(Layer* child) { 135 void Layer::Add(Layer* child) {
138 DCHECK(!child->compositor_); 136 DCHECK(!child->compositor_);
139 if (child->parent_) 137 if (child->parent_)
140 child->parent_->Remove(child); 138 child->parent_->Remove(child);
141 child->parent_ = this; 139 child->parent_ = this;
142 children_.push_back(child); 140 children_.push_back(child);
143 cc_layer_->AddChild(child->cc_layer_); 141 cc_layer_->AddChild(child->cc_layer_);
144 child->OnDeviceScaleFactorChanged(device_scale_factor_); 142 child->OnDeviceScaleFactorChanged(device_scale_factor_);
145 child->UpdateIsDrawn();
146 if (GetCompositor()) 143 if (GetCompositor())
147 child->SendPendingThreadedAnimations(); 144 child->SendPendingThreadedAnimations();
148 } 145 }
149 146
150 void Layer::Remove(Layer* child) { 147 void Layer::Remove(Layer* child) {
151 std::vector<Layer*>::iterator i = 148 std::vector<Layer*>::iterator i =
152 std::find(children_.begin(), children_.end(), child); 149 std::find(children_.begin(), children_.end(), child);
153 DCHECK(i != children_.end()); 150 DCHECK(i != children_.end());
154 children_.erase(i); 151 children_.erase(i);
155 child->parent_ = NULL; 152 child->parent_ = NULL;
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 } 360 }
364 361
365 bool Layer::GetTargetVisibility() const { 362 bool Layer::GetTargetVisibility() const {
366 if (animator_.get() && animator_->IsAnimatingProperty( 363 if (animator_.get() && animator_->IsAnimatingProperty(
367 LayerAnimationElement::VISIBILITY)) 364 LayerAnimationElement::VISIBILITY))
368 return animator_->GetTargetVisibility(); 365 return animator_->GetTargetVisibility();
369 return visible_; 366 return visible_;
370 } 367 }
371 368
372 bool Layer::IsDrawn() const { 369 bool Layer::IsDrawn() const {
373 return is_drawn_; 370 const Layer* layer = this;
374 } 371 while (layer && layer->visible_)
375 372 layer = layer->parent_;
376 void Layer::UpdateIsDrawn() { 373 return layer == NULL;
377 bool updated_is_drawn = visible_ && (!parent_ || parent_->IsDrawn());
378
379 if (updated_is_drawn == is_drawn_)
380 return;
381
382 is_drawn_ = updated_is_drawn;
383 cc_layer_->SetIsDrawable(is_drawn_ && type_ != LAYER_NOT_DRAWN);
384
385 for (size_t i = 0; i < children_.size(); ++i) {
386 children_[i]->UpdateIsDrawn();
387 }
388 } 374 }
389 375
390 bool Layer::ShouldDraw() const { 376 bool Layer::ShouldDraw() const {
391 return type_ != LAYER_NOT_DRAWN && GetCombinedOpacity() > 0.0f; 377 return type_ != LAYER_NOT_DRAWN && GetCombinedOpacity() > 0.0f;
392 } 378 }
393 379
394 // static 380 // static
395 void Layer::ConvertPointToLayer(const Layer* source, 381 void Layer::ConvertPointToLayer(const Layer* source,
396 const Layer* target, 382 const Layer* target,
397 gfx::Point* point) { 383 gfx::Point* point) {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 delegated_renderer_layer_ = NULL; 457 delegated_renderer_layer_ = NULL;
472 458
473 cc_layer_->AddLayerAnimationEventObserver(this); 459 cc_layer_->AddLayerAnimationEventObserver(this);
474 for (size_t i = 0; i < children_.size(); ++i) { 460 for (size_t i = 0; i < children_.size(); ++i) {
475 DCHECK(children_[i]->cc_layer_); 461 DCHECK(children_[i]->cc_layer_);
476 cc_layer_->AddChild(children_[i]->cc_layer_); 462 cc_layer_->AddChild(children_[i]->cc_layer_);
477 } 463 }
478 cc_layer_->SetAnchorPoint(gfx::PointF()); 464 cc_layer_->SetAnchorPoint(gfx::PointF());
479 cc_layer_->SetContentsOpaque(fills_bounds_opaquely_); 465 cc_layer_->SetContentsOpaque(fills_bounds_opaquely_);
480 cc_layer_->SetForceRenderSurface(force_render_surface_); 466 cc_layer_->SetForceRenderSurface(force_render_surface_);
481 cc_layer_->SetIsDrawable(IsDrawn()); 467 cc_layer_->SetIsDrawable(type_ != LAYER_NOT_DRAWN);
468 cc_layer_->SetHideLayerAndSubtree(!visible_);
482 } 469 }
483 470
484 void Layer::SwitchCCLayerForTest() { 471 void Layer::SwitchCCLayerForTest() {
485 scoped_refptr<cc::ContentLayer> new_layer = cc::ContentLayer::Create(this); 472 scoped_refptr<cc::ContentLayer> new_layer = cc::ContentLayer::Create(this);
486 SwitchToLayer(new_layer); 473 SwitchToLayer(new_layer);
487 content_layer_ = new_layer; 474 content_layer_ = new_layer;
488 } 475 }
489 476
490 void Layer::SetExternalTexture(Texture* texture) { 477 void Layer::SetExternalTexture(Texture* texture) {
491 // Hold a ref to the old |Texture| until we have updated all 478 // Hold a ref to the old |Texture| until we have updated all
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 void Layer::SetOpacityImmediately(float opacity) { 753 void Layer::SetOpacityImmediately(float opacity) {
767 cc_layer_->SetOpacity(opacity); 754 cc_layer_->SetOpacity(opacity);
768 ScheduleDraw(); 755 ScheduleDraw();
769 } 756 }
770 757
771 void Layer::SetVisibilityImmediately(bool visible) { 758 void Layer::SetVisibilityImmediately(bool visible) {
772 if (visible_ == visible) 759 if (visible_ == visible)
773 return; 760 return;
774 761
775 visible_ = visible; 762 visible_ = visible;
776 UpdateIsDrawn(); 763 cc_layer_->SetHideLayerAndSubtree(!visible_);
777 } 764 }
778 765
779 void Layer::SetBrightnessImmediately(float brightness) { 766 void Layer::SetBrightnessImmediately(float brightness) {
780 layer_brightness_ = brightness; 767 layer_brightness_ = brightness;
781 SetLayerFilters(); 768 SetLayerFilters();
782 } 769 }
783 770
784 void Layer::SetGrayscaleImmediately(float grayscale) { 771 void Layer::SetGrayscaleImmediately(float grayscale) {
785 layer_grayscale_ = grayscale; 772 layer_grayscale_ = grayscale;
786 SetLayerFilters(); 773 SetLayerFilters();
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
973 cc_layer_->SetBounds(ConvertSizeToPixel(this, size)); 960 cc_layer_->SetBounds(ConvertSizeToPixel(this, size));
974 } 961 }
975 962
976 void Layer::RecomputePosition() { 963 void Layer::RecomputePosition() {
977 cc_layer_->SetPosition(gfx::ScalePoint( 964 cc_layer_->SetPosition(gfx::ScalePoint(
978 gfx::PointF(bounds_.x(), bounds_.y()), 965 gfx::PointF(bounds_.x(), bounds_.y()),
979 device_scale_factor_)); 966 device_scale_factor_));
980 } 967 }
981 968
982 } // namespace ui 969 } // namespace ui
OLDNEW
« no previous file with comments | « ui/compositor/layer.h ('k') | ui/compositor/layer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698