OLD | NEW |
---|---|
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #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/stringprintf.h" | 8 #include "base/stringprintf.h" |
9 #include "cc/animation/animation_registrar.h" | 9 #include "cc/animation/animation_registrar.h" |
10 #include "cc/animation/scrollbar_animation_controller.h" | 10 #include "cc/animation/scrollbar_animation_controller.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
47 masks_to_bounds_(false), | 47 masks_to_bounds_(false), |
48 contents_opaque_(false), | 48 contents_opaque_(false), |
49 opacity_(1.0), | 49 opacity_(1.0), |
50 preserves_3d_(false), | 50 preserves_3d_(false), |
51 use_parent_backface_visibility_(false), | 51 use_parent_backface_visibility_(false), |
52 draw_checkerboard_for_missing_tiles_(false), | 52 draw_checkerboard_for_missing_tiles_(false), |
53 draws_content_(false), | 53 draws_content_(false), |
54 force_render_surface_(false), | 54 force_render_surface_(false), |
55 is_container_for_fixed_position_layers_(false), | 55 is_container_for_fixed_position_layers_(false), |
56 draw_depth_(0.f), | 56 draw_depth_(0.f), |
57 compositing_reasons_(kCompositingReasonUnknown), | |
57 #ifndef NDEBUG | 58 #ifndef NDEBUG |
58 between_will_draw_and_did_draw_(false), | 59 between_will_draw_and_did_draw_(false), |
59 #endif | 60 #endif |
60 horizontal_scrollbar_layer_(NULL), | 61 horizontal_scrollbar_layer_(NULL), |
61 vertical_scrollbar_layer_(NULL) { | 62 vertical_scrollbar_layer_(NULL) { |
62 DCHECK_GT(layer_id_, 0); | 63 DCHECK_GT(layer_id_, 0); |
63 DCHECK(layer_tree_impl_); | 64 DCHECK(layer_tree_impl_); |
64 layer_tree_impl_->RegisterLayer(this); | 65 layer_tree_impl_->RegisterLayer(this); |
65 AnimationRegistrar* registrar = layer_tree_impl_->animationRegistrar(); | 66 AnimationRegistrar* registrar = layer_tree_impl_->animationRegistrar(); |
66 layer_animation_controller_ = | 67 layer_animation_controller_ = |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
345 } | 346 } |
346 | 347 |
347 void LayerImpl::PushPropertiesTo(LayerImpl* layer) { | 348 void LayerImpl::PushPropertiesTo(LayerImpl* layer) { |
348 layer->SetAnchorPoint(anchor_point_); | 349 layer->SetAnchorPoint(anchor_point_); |
349 layer->SetAnchorPointZ(anchor_point_z_); | 350 layer->SetAnchorPointZ(anchor_point_z_); |
350 layer->SetBackgroundColor(background_color_); | 351 layer->SetBackgroundColor(background_color_); |
351 layer->SetBounds(bounds_); | 352 layer->SetBounds(bounds_); |
352 layer->SetContentBounds(content_bounds()); | 353 layer->SetContentBounds(content_bounds()); |
353 layer->SetContentsScale(contents_scale_x(), contents_scale_y()); | 354 layer->SetContentsScale(contents_scale_x(), contents_scale_y()); |
354 layer->SetDebugName(debug_name_); | 355 layer->SetDebugName(debug_name_); |
356 layer->SetCompositingReasons(compositing_reasons_); | |
355 layer->SetDoubleSided(double_sided_); | 357 layer->SetDoubleSided(double_sided_); |
356 layer->SetDrawCheckerboardForMissingTiles( | 358 layer->SetDrawCheckerboardForMissingTiles( |
357 draw_checkerboard_for_missing_tiles_); | 359 draw_checkerboard_for_missing_tiles_); |
358 layer->SetForceRenderSurface(force_render_surface_); | 360 layer->SetForceRenderSurface(force_render_surface_); |
359 layer->SetDrawsContent(DrawsContent()); | 361 layer->SetDrawsContent(DrawsContent()); |
360 layer->SetFilters(filters()); | 362 layer->SetFilters(filters()); |
361 layer->SetFilter(filter()); | 363 layer->SetFilter(filter()); |
362 layer->SetBackgroundFilters(background_filters()); | 364 layer->SetBackgroundFilters(background_filters()); |
363 layer->SetMasksToBounds(masks_to_bounds_); | 365 layer->SetMasksToBounds(masks_to_bounds_); |
364 layer->SetShouldScrollOnMainThread(should_scroll_on_main_thread_); | 366 layer->SetShouldScrollOnMainThread(should_scroll_on_main_thread_); |
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
994 if (horizontal_scrollbar_layer_) | 996 if (horizontal_scrollbar_layer_) |
995 horizontal_scrollbar_layer_->set_scroll_layer_id(id()); | 997 horizontal_scrollbar_layer_->set_scroll_layer_id(id()); |
996 } | 998 } |
997 | 999 |
998 void LayerImpl::SetVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbar_layer) { | 1000 void LayerImpl::SetVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbar_layer) { |
999 vertical_scrollbar_layer_ = scrollbar_layer; | 1001 vertical_scrollbar_layer_ = scrollbar_layer; |
1000 if (vertical_scrollbar_layer_) | 1002 if (vertical_scrollbar_layer_) |
1001 vertical_scrollbar_layer_->set_scroll_layer_id(id()); | 1003 vertical_scrollbar_layer_->set_scroll_layer_id(id()); |
1002 } | 1004 } |
1003 | 1005 |
1006 scoped_ptr<base::Value> | |
1007 CompositingReasonsAsValue(CompositingReasons reasons) { | |
danakj
2013/05/25 13:34:00
Is this method supposed to be static? Maybe it sho
shawnsingh
2013/05/28 07:20:49
For the sake of landing, I'm making it static but
| |
1008 scoped_ptr<base::ListValue> reason_list(new base::ListValue()); | |
1009 | |
1010 if (reasons == kCompositingReasonUnknown) { | |
1011 reason_list->AppendString("No reasons given"); | |
1012 return reason_list.PassAs<base::Value>(); | |
1013 } | |
1014 | |
1015 if (reasons & kCompositingReason3DTransform) | |
1016 reason_list->AppendString("Has a 3d Transform"); | |
1017 | |
1018 if (reasons & kCompositingReasonVideo) | |
1019 reason_list->AppendString("Is accelerated video"); | |
1020 | |
1021 if (reasons & kCompositingReasonCanvas) | |
1022 reason_list->AppendString("Is accelerated canvas"); | |
1023 | |
1024 if (reasons & kCompositingReasonPlugin) | |
1025 reason_list->AppendString("Is accelerated plugin"); | |
1026 | |
1027 if (reasons & kCompositingReasonIFrame) | |
1028 reason_list->AppendString("Is accelerated iframe"); | |
1029 | |
1030 if (reasons & kCompositingReasonBackfaceVisibilityHidden) | |
1031 reason_list->AppendString("Has backface-visibility: hidden"); | |
1032 | |
1033 if (reasons & kCompositingReasonAnimation) | |
1034 reason_list->AppendString("Has accelerated animation or transition"); | |
1035 | |
1036 if (reasons & kCompositingReasonFilters) | |
1037 reason_list->AppendString("Has accelerated filters"); | |
1038 | |
1039 if (reasons & kCompositingReasonPositionFixed) | |
1040 reason_list->AppendString("Is fixed position"); | |
1041 | |
1042 if (reasons & kCompositingReasonPositionSticky) | |
1043 reason_list->AppendString("Is sticky position"); | |
1044 | |
1045 if (reasons & kCompositingReasonOverflowScrollingTouch) | |
1046 reason_list->AppendString("Is a scrollable overflow element"); | |
1047 | |
1048 if (reasons & kCompositingReasonBlending) | |
1049 reason_list->AppendString("Has a blend mode"); | |
1050 | |
1051 if (reasons & kCompositingReasonAssumedOverlap) | |
1052 reason_list->AppendString("Might overlap a composited animation"); | |
1053 | |
1054 if (reasons & kCompositingReasonOverlap) | |
1055 reason_list->AppendString("Overlaps other composited content"); | |
1056 | |
1057 if (reasons & kCompositingReasonNegativeZIndexChildren) { | |
1058 reason_list->AppendString("Might overlap negative z-index " | |
1059 "composited content"); | |
1060 } | |
1061 | |
1062 if (reasons & kCompositingReasonTransformWithCompositedDescendants) { | |
1063 reason_list->AppendString("Has transform needed by a " | |
1064 "composited descendant"); | |
1065 } | |
1066 | |
1067 if (reasons & kCompositingReasonOpacityWithCompositedDescendants) | |
1068 reason_list->AppendString("Has opacity needed by a composited descendant"); | |
1069 | |
1070 if (reasons & kCompositingReasonMaskWithCompositedDescendants) | |
1071 reason_list->AppendString("Has a mask needed by a composited descendant"); | |
1072 | |
1073 if (reasons & kCompositingReasonReflectionWithCompositedDescendants) | |
1074 reason_list->AppendString("Has a reflection with a composited descendant"); | |
1075 | |
1076 if (reasons & kCompositingReasonFilterWithCompositedDescendants) | |
1077 reason_list->AppendString("Has filter effect with a composited descendant"); | |
1078 | |
1079 if (reasons & kCompositingReasonBlendingWithCompositedDescendants) | |
1080 reason_list->AppendString("Has a blend mode with a composited descendant"); | |
1081 | |
1082 if (reasons & kCompositingReasonClipsCompositingDescendants) | |
1083 reason_list->AppendString("Clips a composited descendant"); | |
1084 | |
1085 if (reasons & kCompositingReasonPerspective) { | |
1086 reason_list->AppendString("Has a perspective transform needed by a " | |
1087 "composited 3d descendant"); | |
1088 } | |
1089 | |
1090 if (reasons & kCompositingReasonPreserve3D) { | |
1091 reason_list->AppendString("Has preserves-3d style with composited " | |
1092 "3d descendant"); | |
1093 } | |
1094 | |
1095 if (reasons & kCompositingReasonReflectionOfCompositedParent) | |
1096 reason_list->AppendString("Is the reflection of a composited layer"); | |
1097 | |
1098 if (reasons & kCompositingReasonRoot) | |
1099 reason_list->AppendString("Is the root"); | |
1100 | |
1101 if (reasons & kCompositingReasonLayerForClip) | |
1102 reason_list->AppendString("Convenience layer, to clip subtree"); | |
1103 | |
1104 if (reasons & kCompositingReasonLayerForScrollbar) | |
1105 reason_list->AppendString("Convenience layer for rendering scrollbar"); | |
1106 | |
1107 if (reasons & kCompositingReasonLayerForScrollingContainer) | |
1108 reason_list->AppendString("Convenience layer, the scrolling container"); | |
1109 | |
1110 if (reasons & kCompositingReasonLayerForForeground) { | |
1111 reason_list->AppendString("Convenience layer, foreground when main layer " | |
1112 "has negative z-index composited content"); | |
1113 } | |
1114 | |
1115 if (reasons & kCompositingReasonLayerForBackground) { | |
1116 reason_list->AppendString("Convenience layer, background when main layer " | |
1117 "has a composited background"); | |
1118 } | |
1119 | |
1120 if (reasons & kCompositingReasonLayerForMask) | |
1121 reason_list->AppendString("Is a mask layer"); | |
1122 | |
1123 return reason_list.PassAs<base::Value>(); | |
1124 } | |
1125 | |
1004 void LayerImpl::AsValueInto(base::DictionaryValue* state) const { | 1126 void LayerImpl::AsValueInto(base::DictionaryValue* state) const { |
1005 TracedValue::MakeDictIntoImplicitSnapshot(state, LayerTypeAsString(), this); | 1127 TracedValue::MakeDictIntoImplicitSnapshot(state, LayerTypeAsString(), this); |
1006 state->SetInteger("layer_id", id()); | 1128 state->SetInteger("layer_id", id()); |
1007 state->Set("bounds", MathUtil::AsValue(bounds()).release()); | 1129 state->Set("bounds", MathUtil::AsValue(bounds()).release()); |
1008 state->SetInteger("draws_content", DrawsContent()); | 1130 state->SetInteger("draws_content", DrawsContent()); |
1009 state->SetInteger("gpu_memory_usage", GPUMemoryUsageInBytes()); | 1131 state->SetInteger("gpu_memory_usage", GPUMemoryUsageInBytes()); |
1132 state->Set("compositing_reasons", | |
1133 CompositingReasonsAsValue(compositing_reasons_).release()); | |
1010 | 1134 |
1011 bool clipped; | 1135 bool clipped; |
1012 gfx::QuadF layer_quad = MathUtil::MapQuad( | 1136 gfx::QuadF layer_quad = MathUtil::MapQuad( |
1013 screen_space_transform(), | 1137 screen_space_transform(), |
1014 gfx::QuadF(gfx::Rect(content_bounds())), | 1138 gfx::QuadF(gfx::Rect(content_bounds())), |
1015 &clipped); | 1139 &clipped); |
1016 state->Set("layer_quad", MathUtil::AsValue(layer_quad).release()); | 1140 state->Set("layer_quad", MathUtil::AsValue(layer_quad).release()); |
1017 | 1141 |
1018 | 1142 |
1019 scoped_ptr<base::ListValue> children_list(new base::ListValue()); | 1143 scoped_ptr<base::ListValue> children_list(new base::ListValue()); |
1020 for (size_t i = 0; i < children_.size(); ++i) | 1144 for (size_t i = 0; i < children_.size(); ++i) |
1021 children_list->Append(children_[i]->AsValue().release()); | 1145 children_list->Append(children_[i]->AsValue().release()); |
1022 state->Set("children", children_list.release()); | 1146 state->Set("children", children_list.release()); |
1023 if (mask_layer_) | 1147 if (mask_layer_) |
1024 state->Set("mask_layer", mask_layer_->AsValue().release()); | 1148 state->Set("mask_layer", mask_layer_->AsValue().release()); |
1025 if (replica_layer_) | 1149 if (replica_layer_) |
1026 state->Set("replica_layer", replica_layer_->AsValue().release()); | 1150 state->Set("replica_layer", replica_layer_->AsValue().release()); |
1027 } | 1151 } |
1028 | 1152 |
1029 size_t LayerImpl::GPUMemoryUsageInBytes() const { return 0; } | 1153 size_t LayerImpl::GPUMemoryUsageInBytes() const { return 0; } |
1030 | 1154 |
1031 scoped_ptr<base::Value> LayerImpl::AsValue() const { | 1155 scoped_ptr<base::Value> LayerImpl::AsValue() const { |
1032 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); | 1156 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
1033 AsValueInto(state.get()); | 1157 AsValueInto(state.get()); |
1034 return state.PassAs<base::Value>(); | 1158 return state.PassAs<base::Value>(); |
1035 } | 1159 } |
1036 | 1160 |
1037 } // namespace cc | 1161 } // namespace cc |
OLD | NEW |