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

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

Issue 1097583002: cc: Commit property trees to the compositor thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 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.h" 5 #include "cc/layers/layer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/atomic_sequence_num.h" 9 #include "base/atomic_sequence_num.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 918 matching lines...) Expand 10 before | Expand all | Expand 10 after
929 if (!layer->OpacityIsAnimatingOnImplOnly() && !OpacityIsAnimating()) 929 if (!layer->OpacityIsAnimatingOnImplOnly() && !OpacityIsAnimating())
930 layer->SetOpacity(opacity_); 930 layer->SetOpacity(opacity_);
931 DCHECK(!(OpacityIsAnimating() && layer->OpacityIsAnimatingOnImplOnly())); 931 DCHECK(!(OpacityIsAnimating() && layer->OpacityIsAnimatingOnImplOnly()));
932 layer->SetBlendMode(blend_mode_); 932 layer->SetBlendMode(blend_mode_);
933 layer->SetIsRootForIsolatedGroup(is_root_for_isolated_group_); 933 layer->SetIsRootForIsolatedGroup(is_root_for_isolated_group_);
934 layer->SetPosition(position_); 934 layer->SetPosition(position_);
935 layer->SetIsContainerForFixedPositionLayers( 935 layer->SetIsContainerForFixedPositionLayers(
936 IsContainerForFixedPositionLayers()); 936 IsContainerForFixedPositionLayers());
937 layer->SetPositionConstraint(position_constraint_); 937 layer->SetPositionConstraint(position_constraint_);
938 layer->SetShouldFlattenTransform(should_flatten_transform_); 938 layer->SetShouldFlattenTransform(should_flatten_transform_);
939 layer->set_should_flatten_transform_from_property_tree(
940 should_flatten_transform_from_property_tree_);
939 layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_); 941 layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_);
940 if (!layer->TransformIsAnimatingOnImplOnly() && !TransformIsAnimating()) 942 if (!layer->TransformIsAnimatingOnImplOnly() && !TransformIsAnimating())
941 layer->SetTransformAndInvertibility(transform_, transform_is_invertible_); 943 layer->SetTransformAndInvertibility(transform_, transform_is_invertible_);
942 DCHECK(!(TransformIsAnimating() && layer->TransformIsAnimatingOnImplOnly())); 944 DCHECK(!(TransformIsAnimating() && layer->TransformIsAnimatingOnImplOnly()));
943 layer->Set3dSortingContextId(sorting_context_id_); 945 layer->Set3dSortingContextId(sorting_context_id_);
944 layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_); 946 layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_);
947 layer->set_transform_tree_index(transform_tree_index_);
948 layer->set_opacity_tree_index(opacity_tree_index_);
949 layer->set_clip_tree_index(clip_tree_index_);
950 layer->set_offset_to_transform_parent(offset_to_transform_parent_);
945 951
946 layer->SetScrollClipLayer(scroll_clip_layer_id_); 952 layer->SetScrollClipLayer(scroll_clip_layer_id_);
947 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_); 953 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_);
948 layer->set_user_scrollable_vertical(user_scrollable_vertical_); 954 layer->set_user_scrollable_vertical(user_scrollable_vertical_);
949 955
950 LayerImpl* scroll_parent = nullptr; 956 LayerImpl* scroll_parent = nullptr;
951 if (scroll_parent_) { 957 if (scroll_parent_) {
952 scroll_parent = layer->layer_tree_impl()->LayerById(scroll_parent_->id()); 958 scroll_parent = layer->layer_tree_impl()->LayerById(scroll_parent_->id());
953 DCHECK(scroll_parent); 959 DCHECK(scroll_parent);
954 } 960 }
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
1284 } 1290 }
1285 1291
1286 void Layer::RunMicroBenchmark(MicroBenchmark* benchmark) { 1292 void Layer::RunMicroBenchmark(MicroBenchmark* benchmark) {
1287 benchmark->RunOnLayer(this); 1293 benchmark->RunOnLayer(this);
1288 } 1294 }
1289 1295
1290 bool Layer::HasDelegatedContent() const { 1296 bool Layer::HasDelegatedContent() const {
1291 return false; 1297 return false;
1292 } 1298 }
1293 1299
1294 gfx::Transform Layer::screen_space_transform_from_property_trees(
1295 const TransformTree& tree) const {
1296 gfx::Transform xform(1, 0, 0, 1, offset_to_transform_parent().x(),
1297 offset_to_transform_parent().y());
1298 if (transform_tree_index() >= 0) {
1299 gfx::Transform ssxform = tree.Node(transform_tree_index())->data.to_screen;
1300 xform.ConcatTransform(ssxform);
1301 if (should_flatten_transform_from_property_tree_)
1302 xform.FlattenTo2d();
1303 }
1304 xform.Scale(1.0 / contents_scale_x(), 1.0 / contents_scale_y());
1305 return xform;
1306 }
1307
1308 gfx::Transform Layer::draw_transform_from_property_trees(
1309 const TransformTree& tree) const {
1310 const TransformNode* node = tree.Node(transform_tree_index());
1311 // TODO(vollick): ultimately we'll need to find this information (whether or
1312 // not we establish a render surface) somewhere other than the layer.
1313 const TransformNode* target_node =
1314 has_render_surface_ ? node : tree.Node(node->data.content_target_id);
1315
1316 gfx::Transform xform;
1317 const bool owns_non_root_surface = parent() && render_surface();
1318 if (!owns_non_root_surface) {
1319 // If you're not the root, or you don't own a surface, you need to apply
1320 // your local offset.
1321 xform = node->data.to_target;
1322 if (should_flatten_transform_from_property_tree_)
1323 xform.FlattenTo2d();
1324 xform.Translate(offset_to_transform_parent().x(),
1325 offset_to_transform_parent().y());
1326 // A fixed-position layer does not necessarily have the same render target
1327 // as its transform node. In particular, its transform node may be an
1328 // ancestor of its render target's transform node. For example, given layer
1329 // tree R->S->F, suppose F is fixed and S owns a render surface (e.g., say S
1330 // has opacity 0.9 and both S and F draw content). Then F's transform node
1331 // is the root node, so the target space transform from that node is defined
1332 // with respect to the root render surface. But F will render to S's
1333 // surface, so must apply a change of basis transform to the target space
1334 // transform from its transform node.
1335 if (position_constraint_.is_fixed_position()) {
1336 gfx::Transform tree_target_to_render_target;
1337 tree.ComputeTransform(node->data.content_target_id,
1338 render_target()->transform_tree_index(),
1339 &tree_target_to_render_target);
1340 xform.ConcatTransform(tree_target_to_render_target);
1341 }
1342 } else {
1343 // Surfaces need to apply their sublayer scale.
1344 xform.Scale(target_node->data.sublayer_scale.x(),
1345 target_node->data.sublayer_scale.y());
1346 }
1347 xform.Scale(1.0 / contents_scale_x(), 1.0 / contents_scale_y());
1348 return xform;
1349 }
1350
1351 float Layer::DrawOpacityFromPropertyTrees(const OpacityTree& tree) const {
1352 if (!render_target())
1353 return 0.f;
1354
1355 const OpacityNode* target_node =
1356 tree.Node(render_target()->opacity_tree_index());
1357 const OpacityNode* node = tree.Node(opacity_tree_index());
1358 if (node == target_node)
1359 return 1.f;
1360
1361 float draw_opacity = 1.f;
1362 while (node != target_node) {
1363 draw_opacity *= node->data;
1364 node = tree.parent(node);
1365 }
1366 return draw_opacity;
1367 }
1368
1369 void Layer::SetFrameTimingRequests( 1300 void Layer::SetFrameTimingRequests(
1370 const std::vector<FrameTimingRequest>& requests) { 1301 const std::vector<FrameTimingRequest>& requests) {
1371 frame_timing_requests_ = requests; 1302 frame_timing_requests_ = requests;
1372 frame_timing_requests_dirty_ = true; 1303 frame_timing_requests_dirty_ = true;
1373 SetNeedsCommit(); 1304 SetNeedsCommit();
1374 } 1305 }
1375 1306
1376 void Layer::DidBeginTracing() { 1307 void Layer::DidBeginTracing() {
1377 // We'll be dumping layer trees as part of trace, so make sure 1308 // We'll be dumping layer trees as part of trace, so make sure
1378 // PushPropertiesTo() propagates layer debug info to the impl 1309 // PushPropertiesTo() propagates layer debug info to the impl
1379 // side -- otherwise this won't happen for the the layers that 1310 // side -- otherwise this won't happen for the the layers that
1380 // remain unchanged since tracing started. 1311 // remain unchanged since tracing started.
1381 SetNeedsPushProperties(); 1312 SetNeedsPushProperties();
1382 } 1313 }
1383 1314
1384 } // namespace cc 1315 } // namespace cc
OLDNEW
« cc/layers/layer.h ('K') | « cc/layers/layer.h ('k') | cc/layers/layer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698