| 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 |