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

Side by Side Diff: cc/layers/layer_impl.cc

Issue 217313003: Stop displaying layers with non-invertible transforms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "cc/layers/layer_impl.h" 5 #include "cc/layers/layer_impl.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/json/json_reader.h" 8 #include "base/json/json_reader.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "cc/animation/animation_registrar.h" 10 #include "cc/animation/animation_registrar.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 should_flatten_transform_(true), 55 should_flatten_transform_(true),
56 layer_property_changed_(false), 56 layer_property_changed_(false),
57 masks_to_bounds_(false), 57 masks_to_bounds_(false),
58 contents_opaque_(false), 58 contents_opaque_(false),
59 is_root_for_isolated_group_(false), 59 is_root_for_isolated_group_(false),
60 use_parent_backface_visibility_(false), 60 use_parent_backface_visibility_(false),
61 draw_checkerboard_for_missing_tiles_(false), 61 draw_checkerboard_for_missing_tiles_(false),
62 draws_content_(false), 62 draws_content_(false),
63 hide_layer_and_subtree_(false), 63 hide_layer_and_subtree_(false),
64 force_render_surface_(false), 64 force_render_surface_(false),
65 transform_is_invertible_(true),
65 is_container_for_fixed_position_layers_(false), 66 is_container_for_fixed_position_layers_(false),
66 is_3d_sorted_(false), 67 is_3d_sorted_(false),
67 background_color_(0), 68 background_color_(0),
68 opacity_(1.0), 69 opacity_(1.0),
69 blend_mode_(SkXfermode::kSrcOver_Mode), 70 blend_mode_(SkXfermode::kSrcOver_Mode),
70 draw_depth_(0.f), 71 draw_depth_(0.f),
71 needs_push_properties_(false), 72 needs_push_properties_(false),
72 num_dependents_need_push_properties_(0), 73 num_dependents_need_push_properties_(0),
73 current_draw_mode_(DRAW_MODE_NONE) { 74 current_draw_mode_(DRAW_MODE_NONE) {
74 DCHECK_GT(layer_id_, 0); 75 DCHECK_GT(layer_id_, 0);
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 layer->SetOpacity(opacity_); 511 layer->SetOpacity(opacity_);
511 layer->SetBlendMode(blend_mode_); 512 layer->SetBlendMode(blend_mode_);
512 layer->SetIsRootForIsolatedGroup(is_root_for_isolated_group_); 513 layer->SetIsRootForIsolatedGroup(is_root_for_isolated_group_);
513 layer->SetPosition(position_); 514 layer->SetPosition(position_);
514 layer->SetIsContainerForFixedPositionLayers( 515 layer->SetIsContainerForFixedPositionLayers(
515 is_container_for_fixed_position_layers_); 516 is_container_for_fixed_position_layers_);
516 layer->SetPositionConstraint(position_constraint_); 517 layer->SetPositionConstraint(position_constraint_);
517 layer->SetShouldFlattenTransform(should_flatten_transform_); 518 layer->SetShouldFlattenTransform(should_flatten_transform_);
518 layer->SetIs3dSorted(is_3d_sorted_); 519 layer->SetIs3dSorted(is_3d_sorted_);
519 layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_); 520 layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_);
520 layer->SetTransform(transform_); 521 layer->SetTransformAndInvertibility(transform_, transform_is_invertible_);
521 522
522 layer->SetScrollClipLayer(scroll_clip_layer_ ? scroll_clip_layer_->id() 523 layer->SetScrollClipLayer(scroll_clip_layer_ ? scroll_clip_layer_->id()
523 : Layer::INVALID_ID); 524 : Layer::INVALID_ID);
524 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_); 525 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_);
525 layer->set_user_scrollable_vertical(user_scrollable_vertical_); 526 layer->set_user_scrollable_vertical(user_scrollable_vertical_);
526 layer->SetScrollOffsetAndDelta( 527 layer->SetScrollOffsetAndDelta(
527 scroll_offset_, layer->ScrollDelta() - layer->sent_scroll_delta()); 528 scroll_offset_, layer->ScrollDelta() - layer->sent_scroll_delta());
528 layer->SetSentScrollDelta(gfx::Vector2d()); 529 layer->SetSentScrollDelta(gfx::Vector2d());
529 530
530 LayerImpl* scroll_parent = NULL; 531 LayerImpl* scroll_parent = NULL;
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 989
989 is_3d_sorted_ = sorted; 990 is_3d_sorted_ = sorted;
990 NoteLayerPropertyChangedForSubtree(); 991 NoteLayerPropertyChangedForSubtree();
991 } 992 }
992 993
993 void LayerImpl::SetTransform(const gfx::Transform& transform) { 994 void LayerImpl::SetTransform(const gfx::Transform& transform) {
994 if (transform_ == transform) 995 if (transform_ == transform)
995 return; 996 return;
996 997
997 transform_ = transform; 998 transform_ = transform;
999 transform_is_invertible_ = transform_.IsInvertible();
998 NoteLayerPropertyChangedForSubtree(); 1000 NoteLayerPropertyChangedForSubtree();
999 } 1001 }
1000 1002
1003 void LayerImpl::SetTransformAndInvertibility(const gfx::Transform& transform,
1004 bool transform_is_invertible) {
1005 if (transform_ == transform) {
1006 if (transform_is_invertible_ != transform_is_invertible) {
1007 DLOG(ERROR) << "Can't change invertibility if transform is unchanged";
ajuma 2014/03/28 18:49:07 How about a DCHECK instead of a DLOG?
avallee 2014/04/15 18:53:25 Done.
1008 }
1009 return;
1010 }
1011 transform_ = transform;
1012 transform_is_invertible_ = transform_is_invertible;
1013 NoteLayerPropertyChangedForSubtree();
1014 }
1015
1001 bool LayerImpl::TransformIsAnimating() const { 1016 bool LayerImpl::TransformIsAnimating() const {
1002 return layer_animation_controller_->IsAnimatingProperty(Animation::Transform); 1017 return layer_animation_controller_->IsAnimatingProperty(Animation::Transform);
1003 } 1018 }
1004 1019
1005 bool LayerImpl::TransformIsAnimatingOnImplOnly() const { 1020 bool LayerImpl::TransformIsAnimatingOnImplOnly() const {
1006 Animation* transform_animation = 1021 Animation* transform_animation =
1007 layer_animation_controller_->GetAnimation(Animation::Transform); 1022 layer_animation_controller_->GetAnimation(Animation::Transform);
1008 return transform_animation && transform_animation->is_impl_only(); 1023 return transform_animation && transform_animation->is_impl_only();
1009 } 1024 }
1010 1025
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
1490 scoped_ptr<base::Value> LayerImpl::AsValue() const { 1505 scoped_ptr<base::Value> LayerImpl::AsValue() const {
1491 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); 1506 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
1492 AsValueInto(state.get()); 1507 AsValueInto(state.get());
1493 return state.PassAs<base::Value>(); 1508 return state.PassAs<base::Value>();
1494 } 1509 }
1495 1510
1496 void LayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) { 1511 void LayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) {
1497 benchmark->RunOnLayer(this); 1512 benchmark->RunOnLayer(this);
1498 } 1513 }
1499 } // namespace cc 1514 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698