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 "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
8 #include "base/numerics/safe_conversions.h" | 8 #include "base/numerics/safe_conversions.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
11 #include "base/trace_event/trace_event_argument.h" | 11 #include "base/trace_event/trace_event_argument.h" |
12 #include "cc/animation/animation_registrar.h" | 12 #include "cc/animation/animation_registrar.h" |
13 #include "cc/base/math_util.h" | 13 #include "cc/base/math_util.h" |
14 #include "cc/base/simple_enclosed_region.h" | 14 #include "cc/base/simple_enclosed_region.h" |
15 #include "cc/debug/debug_colors.h" | 15 #include "cc/debug/debug_colors.h" |
16 #include "cc/debug/layer_tree_debug_state.h" | 16 #include "cc/debug/layer_tree_debug_state.h" |
17 #include "cc/debug/micro_benchmark_impl.h" | 17 #include "cc/debug/micro_benchmark_impl.h" |
18 #include "cc/debug/traced_value.h" | 18 #include "cc/debug/traced_value.h" |
19 #include "cc/input/scroll_state.h" | 19 #include "cc/input/scroll_state.h" |
20 #include "cc/layers/layer.h" | 20 #include "cc/layers/layer.h" |
21 #include "cc/layers/layer_utils.h" | 21 #include "cc/layers/layer_utils.h" |
22 #include "cc/output/copy_output_request.h" | 22 #include "cc/output/copy_output_request.h" |
23 #include "cc/quads/debug_border_draw_quad.h" | 23 #include "cc/quads/debug_border_draw_quad.h" |
24 #include "cc/quads/render_pass.h" | 24 #include "cc/quads/render_pass.h" |
| 25 #include "cc/trees/draw_property_utils.h" |
25 #include "cc/trees/layer_tree_host_common.h" | 26 #include "cc/trees/layer_tree_host_common.h" |
26 #include "cc/trees/layer_tree_impl.h" | 27 #include "cc/trees/layer_tree_impl.h" |
27 #include "cc/trees/layer_tree_settings.h" | 28 #include "cc/trees/layer_tree_settings.h" |
28 #include "cc/trees/proxy.h" | 29 #include "cc/trees/proxy.h" |
29 #include "ui/gfx/geometry/box_f.h" | 30 #include "ui/gfx/geometry/box_f.h" |
30 #include "ui/gfx/geometry/point_conversions.h" | 31 #include "ui/gfx/geometry/point_conversions.h" |
31 #include "ui/gfx/geometry/quad_f.h" | 32 #include "ui/gfx/geometry/quad_f.h" |
32 #include "ui/gfx/geometry/rect_conversions.h" | 33 #include "ui/gfx/geometry/rect_conversions.h" |
33 #include "ui/gfx/geometry/size_conversions.h" | 34 #include "ui/gfx/geometry/size_conversions.h" |
34 #include "ui/gfx/geometry/vector2d_conversions.h" | 35 #include "ui/gfx/geometry/vector2d_conversions.h" |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 copy_requests_.clear(); | 300 copy_requests_.clear(); |
300 | 301 |
301 for (size_t i = first_inserted_request; i < requests->size(); ++i) { | 302 for (size_t i = first_inserted_request; i < requests->size(); ++i) { |
302 CopyOutputRequest* request = (*requests)[i].get(); | 303 CopyOutputRequest* request = (*requests)[i].get(); |
303 if (!request->has_area()) | 304 if (!request->has_area()) |
304 continue; | 305 continue; |
305 | 306 |
306 gfx::Rect request_in_layer_space = request->area(); | 307 gfx::Rect request_in_layer_space = request->area(); |
307 request_in_layer_space.Intersect(gfx::Rect(bounds())); | 308 request_in_layer_space.Intersect(gfx::Rect(bounds())); |
308 request->set_area(MathUtil::MapEnclosingClippedRect( | 309 request->set_area(MathUtil::MapEnclosingClippedRect( |
309 draw_properties_.target_space_transform, request_in_layer_space)); | 310 DrawTransform(), request_in_layer_space)); |
310 } | 311 } |
311 | 312 |
312 layer_tree_impl()->RemoveLayerWithCopyOutputRequest(this); | 313 layer_tree_impl()->RemoveLayerWithCopyOutputRequest(this); |
313 layer_tree_impl()->set_needs_update_draw_properties(); | 314 layer_tree_impl()->set_needs_update_draw_properties(); |
314 } | 315 } |
315 | 316 |
316 void LayerImpl::ClearRenderSurfaceLayerList() { | 317 void LayerImpl::ClearRenderSurfaceLayerList() { |
317 if (render_surface_) | 318 if (render_surface_) |
318 render_surface_->ClearLayerLists(); | 319 render_surface_->ClearLayerLists(); |
319 } | 320 } |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 base::ListValue* list = new base::ListValue; | 695 base::ListValue* list = new base::ListValue; |
695 list->AppendInteger(bounds().width()); | 696 list->AppendInteger(bounds().width()); |
696 list->AppendInteger(bounds().height()); | 697 list->AppendInteger(bounds().height()); |
697 result->Set("Bounds", list); | 698 result->Set("Bounds", list); |
698 | 699 |
699 list = new base::ListValue; | 700 list = new base::ListValue; |
700 list->AppendDouble(position_.x()); | 701 list->AppendDouble(position_.x()); |
701 list->AppendDouble(position_.y()); | 702 list->AppendDouble(position_.y()); |
702 result->Set("Position", list); | 703 result->Set("Position", list); |
703 | 704 |
704 const gfx::Transform& gfx_transform = draw_properties_.target_space_transform; | 705 const gfx::Transform& gfx_transform = DrawTransform(); |
705 double transform[16]; | 706 double transform[16]; |
706 gfx_transform.matrix().asColMajord(transform); | 707 gfx_transform.matrix().asColMajord(transform); |
707 list = new base::ListValue; | 708 list = new base::ListValue; |
708 for (int i = 0; i < 16; ++i) | 709 for (int i = 0; i < 16; ++i) |
709 list->AppendDouble(transform[i]); | 710 list->AppendDouble(transform[i]); |
710 result->Set("DrawTransform", list); | 711 result->Set("DrawTransform", list); |
711 | 712 |
712 result->SetBoolean("DrawsContent", draws_content_); | 713 result->SetBoolean("DrawsContent", draws_content_); |
713 result->SetBoolean("Is3dSorted", Is3dSorted()); | 714 result->SetBoolean("Is3dSorted", Is3dSorted()); |
714 result->SetDouble("OPACITY", opacity()); | 715 result->SetDouble("OPACITY", opacity()); |
(...skipping 1051 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1766 | 1767 |
1767 SetNeedsPushProperties(); | 1768 SetNeedsPushProperties(); |
1768 layer_tree_impl()->set_needs_update_draw_properties(); | 1769 layer_tree_impl()->set_needs_update_draw_properties(); |
1769 if (should_have_render_surface) { | 1770 if (should_have_render_surface) { |
1770 render_surface_ = make_scoped_ptr(new RenderSurfaceImpl(this)); | 1771 render_surface_ = make_scoped_ptr(new RenderSurfaceImpl(this)); |
1771 return; | 1772 return; |
1772 } | 1773 } |
1773 render_surface_.reset(); | 1774 render_surface_.reset(); |
1774 } | 1775 } |
1775 | 1776 |
| 1777 gfx::Transform LayerImpl::DrawTransform() const { |
| 1778 // Only drawn layers have up-to-date draw properties when property trees are |
| 1779 // enabled. |
| 1780 if (layer_tree_impl()->settings().use_property_trees && |
| 1781 !IsDrawnRenderSurfaceLayerListMember()) { |
| 1782 if (layer_tree_impl()->property_trees()->non_root_surfaces_enabled) { |
| 1783 return DrawTransformFromPropertyTrees( |
| 1784 this, layer_tree_impl()->property_trees()->transform_tree); |
| 1785 } else { |
| 1786 return ScreenSpaceTransformFromPropertyTrees( |
| 1787 this, layer_tree_impl()->property_trees()->transform_tree); |
| 1788 } |
| 1789 } |
| 1790 |
| 1791 return draw_properties().target_space_transform; |
| 1792 } |
| 1793 |
1776 Region LayerImpl::GetInvalidationRegion() { | 1794 Region LayerImpl::GetInvalidationRegion() { |
1777 return Region(update_rect_); | 1795 return Region(update_rect_); |
1778 } | 1796 } |
1779 | 1797 |
1780 gfx::Rect LayerImpl::GetEnclosingRectInTargetSpace() const { | 1798 gfx::Rect LayerImpl::GetEnclosingRectInTargetSpace() const { |
1781 return MathUtil::MapEnclosingClippedRect( | 1799 return MathUtil::MapEnclosingClippedRect(DrawTransform(), |
1782 draw_properties_.target_space_transform, gfx::Rect(bounds())); | 1800 gfx::Rect(bounds())); |
1783 } | 1801 } |
1784 | 1802 |
1785 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { | 1803 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { |
1786 gfx::Transform scaled_draw_transform = | 1804 gfx::Transform scaled_draw_transform = DrawTransform(); |
1787 draw_properties_.target_space_transform; | |
1788 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); | 1805 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); |
1789 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale); | 1806 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale); |
1790 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, | 1807 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, |
1791 gfx::Rect(scaled_bounds)); | 1808 gfx::Rect(scaled_bounds)); |
1792 } | 1809 } |
1793 | 1810 |
1794 float LayerImpl::GetIdealContentsScale() const { | 1811 float LayerImpl::GetIdealContentsScale() const { |
1795 float page_scale = IsAffectedByPageScale() | 1812 float page_scale = IsAffectedByPageScale() |
1796 ? layer_tree_impl()->current_page_scale_factor() | 1813 ? layer_tree_impl()->current_page_scale_factor() |
1797 : 1.f; | 1814 : 1.f; |
1798 float device_scale = layer_tree_impl()->device_scale_factor(); | 1815 float device_scale = layer_tree_impl()->device_scale_factor(); |
1799 | 1816 |
1800 float default_scale = page_scale * device_scale; | 1817 float default_scale = page_scale * device_scale; |
1801 if (!layer_tree_impl() | 1818 if (!layer_tree_impl() |
1802 ->settings() | 1819 ->settings() |
1803 .layer_transforms_should_scale_layer_contents) { | 1820 .layer_transforms_should_scale_layer_contents) { |
1804 return default_scale; | 1821 return default_scale; |
1805 } | 1822 } |
1806 | 1823 |
1807 // TODO(enne): the transform needs to come from property trees instead of | |
1808 // draw properties. | |
1809 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( | 1824 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( |
1810 draw_properties().target_space_transform, default_scale); | 1825 DrawTransform(), default_scale); |
1811 return std::max(transform_scales.x(), transform_scales.y()); | 1826 return std::max(transform_scales.x(), transform_scales.y()); |
1812 } | 1827 } |
1813 | 1828 |
1814 } // namespace cc | 1829 } // namespace cc |
OLD | NEW |