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

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: Created 7 years, 6 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
« cc/trees/layer_tree_host_common.cc ('K') | « ui/compositor/layer.h ('k') | no next file » | 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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 GetAnimator()->SetVisibility(visible); 359 GetAnimator()->SetVisibility(visible);
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 {
373 return is_drawn_;
374 }
375
376 void Layer::UpdateIsDrawn() {
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 }
389
390 bool Layer::ShouldDraw() const { 369 bool Layer::ShouldDraw() const {
391 return type_ != LAYER_NOT_DRAWN && GetCombinedOpacity() > 0.0f; 370 return type_ != LAYER_NOT_DRAWN && GetCombinedOpacity() > 0.0f;
392 } 371 }
393 372
394 // static 373 // static
395 void Layer::ConvertPointToLayer(const Layer* source, 374 void Layer::ConvertPointToLayer(const Layer* source,
396 const Layer* target, 375 const Layer* target,
397 gfx::Point* point) { 376 gfx::Point* point) {
398 if (source == target) 377 if (source == target)
399 return; 378 return;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 delegated_renderer_layer_ = NULL; 450 delegated_renderer_layer_ = NULL;
472 451
473 cc_layer_->AddLayerAnimationEventObserver(this); 452 cc_layer_->AddLayerAnimationEventObserver(this);
474 for (size_t i = 0; i < children_.size(); ++i) { 453 for (size_t i = 0; i < children_.size(); ++i) {
475 DCHECK(children_[i]->cc_layer_); 454 DCHECK(children_[i]->cc_layer_);
476 cc_layer_->AddChild(children_[i]->cc_layer_); 455 cc_layer_->AddChild(children_[i]->cc_layer_);
477 } 456 }
478 cc_layer_->SetAnchorPoint(gfx::PointF()); 457 cc_layer_->SetAnchorPoint(gfx::PointF());
479 cc_layer_->SetContentsOpaque(fills_bounds_opaquely_); 458 cc_layer_->SetContentsOpaque(fills_bounds_opaquely_);
480 cc_layer_->SetForceRenderSurface(force_render_surface_); 459 cc_layer_->SetForceRenderSurface(force_render_surface_);
481 cc_layer_->SetIsDrawable(IsDrawn()); 460 cc_layer_->SetHideLayerAndSubtree(!visible_);
482 } 461 }
483 462
484 void Layer::SwitchCCLayerForTest() { 463 void Layer::SwitchCCLayerForTest() {
485 scoped_refptr<cc::ContentLayer> new_layer = cc::ContentLayer::Create(this); 464 scoped_refptr<cc::ContentLayer> new_layer = cc::ContentLayer::Create(this);
486 SwitchToLayer(new_layer); 465 SwitchToLayer(new_layer);
487 content_layer_ = new_layer; 466 content_layer_ = new_layer;
488 } 467 }
489 468
490 void Layer::SetExternalTexture(Texture* texture) { 469 void Layer::SetExternalTexture(Texture* texture) {
491 // Hold a ref to the old |Texture| until we have updated all 470 // Hold a ref to the old |Texture| until we have updated all
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 723
745 RecomputeDrawsContentAndUVRect(); 724 RecomputeDrawsContentAndUVRect();
746 RecomputePosition(); 725 RecomputePosition();
747 726
748 if (!closure.is_null()) 727 if (!closure.is_null())
749 closure.Run(); 728 closure.Run();
750 729
751 if (was_move) { 730 if (was_move) {
752 // Don't schedule a draw if we're invisible. We'll schedule one 731 // Don't schedule a draw if we're invisible. We'll schedule one
753 // automatically when we get visible. 732 // automatically when we get visible.
754 if (IsDrawn()) 733 if (visible_)
755 ScheduleDraw(); 734 ScheduleDraw();
756 } else { 735 } else {
757 // Always schedule a paint, even if we're invisible. 736 // Always schedule a paint, even if we're invisible.
758 SchedulePaint(gfx::Rect(bounds.size())); 737 SchedulePaint(gfx::Rect(bounds.size()));
759 } 738 }
760 } 739 }
761 740
762 void Layer::SetTransformImmediately(const gfx::Transform& transform) { 741 void Layer::SetTransformImmediately(const gfx::Transform& transform) {
763 RecomputeCCTransformFromTransform(transform); 742 RecomputeCCTransformFromTransform(transform);
764 } 743 }
765 744
766 void Layer::SetOpacityImmediately(float opacity) { 745 void Layer::SetOpacityImmediately(float opacity) {
767 cc_layer_->SetOpacity(opacity); 746 cc_layer_->SetOpacity(opacity);
768 ScheduleDraw(); 747 ScheduleDraw();
769 } 748 }
770 749
771 void Layer::SetVisibilityImmediately(bool visible) { 750 void Layer::SetVisibilityImmediately(bool visible) {
772 if (visible_ == visible) 751 if (visible_ == visible)
773 return; 752 return;
774 753
775 visible_ = visible; 754 visible_ = visible;
776 UpdateIsDrawn(); 755 cc_layer_->SetHideLayerAndSubtree(!visible_);
777 } 756 }
778 757
779 void Layer::SetBrightnessImmediately(float brightness) { 758 void Layer::SetBrightnessImmediately(float brightness) {
780 layer_brightness_ = brightness; 759 layer_brightness_ = brightness;
781 SetLayerFilters(); 760 SetLayerFilters();
782 } 761 }
783 762
784 void Layer::SetGrayscaleImmediately(float grayscale) { 763 void Layer::SetGrayscaleImmediately(float grayscale) {
785 layer_grayscale_ = grayscale; 764 layer_grayscale_ = grayscale;
786 SetLayerFilters(); 765 SetLayerFilters();
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
973 cc_layer_->SetBounds(ConvertSizeToPixel(this, size)); 952 cc_layer_->SetBounds(ConvertSizeToPixel(this, size));
974 } 953 }
975 954
976 void Layer::RecomputePosition() { 955 void Layer::RecomputePosition() {
977 cc_layer_->SetPosition(gfx::ScalePoint( 956 cc_layer_->SetPosition(gfx::ScalePoint(
978 gfx::PointF(bounds_.x(), bounds_.y()), 957 gfx::PointF(bounds_.x(), bounds_.y()),
979 device_scale_factor_)); 958 device_scale_factor_));
980 } 959 }
981 960
982 } // namespace ui 961 } // namespace ui
OLDNEW
« cc/trees/layer_tree_host_common.cc ('K') | « ui/compositor/layer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698