OLD | NEW |
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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 requests->clear(); | 269 requests->clear(); |
270 | 270 |
271 if (was_empty && layer_tree_impl()->IsActiveTree()) | 271 if (was_empty && layer_tree_impl()->IsActiveTree()) |
272 layer_tree_impl()->AddLayerWithCopyOutputRequest(this); | 272 layer_tree_impl()->AddLayerWithCopyOutputRequest(this); |
273 } | 273 } |
274 | 274 |
275 void LayerImpl::TakeCopyRequestsAndTransformToTarget( | 275 void LayerImpl::TakeCopyRequestsAndTransformToTarget( |
276 std::vector<scoped_ptr<CopyOutputRequest>>* requests) { | 276 std::vector<scoped_ptr<CopyOutputRequest>>* requests) { |
277 DCHECK(!copy_requests_.empty()); | 277 DCHECK(!copy_requests_.empty()); |
278 DCHECK(layer_tree_impl()->IsActiveTree()); | 278 DCHECK(layer_tree_impl()->IsActiveTree()); |
279 DCHECK_EQ(render_target(), this); | 279 DCHECK(has_render_surface()); |
| 280 DCHECK_EQ(render_target(), render_surface()); |
280 | 281 |
281 size_t first_inserted_request = requests->size(); | 282 size_t first_inserted_request = requests->size(); |
282 for (auto& request : copy_requests_) | 283 for (auto& request : copy_requests_) |
283 requests->push_back(std::move(request)); | 284 requests->push_back(std::move(request)); |
284 copy_requests_.clear(); | 285 copy_requests_.clear(); |
285 | 286 |
286 for (size_t i = first_inserted_request; i < requests->size(); ++i) { | 287 for (size_t i = first_inserted_request; i < requests->size(); ++i) { |
287 CopyOutputRequest* request = (*requests)[i].get(); | 288 CopyOutputRequest* request = (*requests)[i].get(); |
288 if (!request->has_area()) | 289 if (!request->has_area()) |
289 continue; | 290 continue; |
(...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1567 } | 1568 } |
1568 | 1569 |
1569 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { | 1570 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { |
1570 gfx::Transform scaled_draw_transform = DrawTransform(); | 1571 gfx::Transform scaled_draw_transform = DrawTransform(); |
1571 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); | 1572 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); |
1572 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale); | 1573 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale); |
1573 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, | 1574 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, |
1574 gfx::Rect(scaled_bounds)); | 1575 gfx::Rect(scaled_bounds)); |
1575 } | 1576 } |
1576 | 1577 |
| 1578 RenderSurfaceImpl* LayerImpl::render_target() { |
| 1579 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; |
| 1580 EffectNode* node = effect_tree.Node(effect_tree_index_); |
| 1581 |
| 1582 if (node->data.render_surface) |
| 1583 return node->data.render_surface; |
| 1584 else |
| 1585 return effect_tree.Node(node->data.target_id)->data.render_surface; |
| 1586 } |
| 1587 |
| 1588 const RenderSurfaceImpl* LayerImpl::render_target() const { |
| 1589 const EffectTree& effect_tree = |
| 1590 layer_tree_impl_->property_trees()->effect_tree; |
| 1591 const EffectNode* node = effect_tree.Node(effect_tree_index_); |
| 1592 |
| 1593 if (node->data.render_surface) |
| 1594 return node->data.render_surface; |
| 1595 else |
| 1596 return effect_tree.Node(node->data.target_id)->data.render_surface; |
| 1597 } |
| 1598 |
1577 bool LayerImpl::IsHidden() const { | 1599 bool LayerImpl::IsHidden() const { |
1578 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; | 1600 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; |
1579 EffectNode* node = effect_tree.Node(effect_tree_index_); | 1601 EffectNode* node = effect_tree.Node(effect_tree_index_); |
1580 return node->data.screen_space_opacity == 0.f; | 1602 return node->data.screen_space_opacity == 0.f; |
1581 } | 1603 } |
1582 | 1604 |
1583 bool LayerImpl::InsideReplica() const { | 1605 bool LayerImpl::InsideReplica() const { |
1584 // There are very few render targets so this should be cheap to do for each | 1606 // There are very few render targets so this should be cheap to do for each |
1585 // layer instead of something more complicated. | 1607 // layer instead of something more complicated. |
1586 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; | 1608 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; |
1587 EffectNode* node = effect_tree.Node(effect_tree_index_); | 1609 EffectNode* node = effect_tree.Node(effect_tree_index_); |
1588 | 1610 |
1589 while (node) { | 1611 while (node->id > 0) { |
1590 EffectNode* target_node = effect_tree.Node(node->data.target_id); | 1612 LayerImpl* target_layer = layer_tree_impl()->LayerById(node->owner_id); |
1591 LayerImpl* target_layer = | |
1592 layer_tree_impl()->LayerById(target_node->owner_id); | |
1593 DCHECK(target_layer); | 1613 DCHECK(target_layer); |
1594 if (target_layer->has_replica()) | 1614 if (target_layer->has_replica()) |
1595 return true; | 1615 return true; |
1596 node = effect_tree.parent(target_node); | 1616 node = effect_tree.Node(node->data.target_id); |
1597 } | 1617 } |
1598 | 1618 |
1599 return false; | 1619 return false; |
1600 } | 1620 } |
1601 | 1621 |
1602 float LayerImpl::GetIdealContentsScale() const { | 1622 float LayerImpl::GetIdealContentsScale() const { |
1603 float page_scale = IsAffectedByPageScale() | 1623 float page_scale = IsAffectedByPageScale() |
1604 ? layer_tree_impl()->current_page_scale_factor() | 1624 ? layer_tree_impl()->current_page_scale_factor() |
1605 : 1.f; | 1625 : 1.f; |
1606 float device_scale = layer_tree_impl()->device_scale_factor(); | 1626 float device_scale = layer_tree_impl()->device_scale_factor(); |
1607 | 1627 |
1608 float default_scale = page_scale * device_scale; | 1628 float default_scale = page_scale * device_scale; |
1609 if (!layer_tree_impl() | 1629 if (!layer_tree_impl() |
1610 ->settings() | 1630 ->settings() |
1611 .layer_transforms_should_scale_layer_contents) { | 1631 .layer_transforms_should_scale_layer_contents) { |
1612 return default_scale; | 1632 return default_scale; |
1613 } | 1633 } |
1614 | 1634 |
1615 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( | 1635 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( |
1616 DrawTransform(), default_scale); | 1636 DrawTransform(), default_scale); |
1617 return std::max(transform_scales.x(), transform_scales.y()); | 1637 return std::max(transform_scales.x(), transform_scales.y()); |
1618 } | 1638 } |
1619 | 1639 |
1620 } // namespace cc | 1640 } // namespace cc |
OLD | NEW |