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

Side by Side Diff: cc/layer_tree_host_common.cc

Issue 11465007: Move LayerSorter to exist locally only in layer_tree_host_common (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years 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 | Annotate | Revision Log
« no previous file with comments | « cc/layer_tree_host_common.h ('k') | cc/layer_tree_host_common_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/layer_tree_host_common.h" 5 #include "cc/layer_tree_host_common.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/debug/trace_event.h"
9 #include "cc/layer.h" 10 #include "cc/layer.h"
10 #include "cc/layer_impl.h" 11 #include "cc/layer_impl.h"
11 #include "cc/layer_iterator.h" 12 #include "cc/layer_iterator.h"
12 #include "cc/layer_sorter.h" 13 #include "cc/layer_sorter.h"
13 #include "cc/math_util.h" 14 #include "cc/math_util.h"
14 #include "cc/render_surface.h" 15 #include "cc/render_surface.h"
15 #include "cc/render_surface_impl.h" 16 #include "cc/render_surface_impl.h"
16 #include "ui/gfx/point_conversions.h" 17 #include "ui/gfx/point_conversions.h"
17 #include "ui/gfx/rect_conversions.h" 18 #include "ui/gfx/rect_conversions.h"
18 #include "ui/gfx/transform.h" 19 #include "ui/gfx/transform.h"
19 20
20 namespace cc { 21 namespace cc {
21 22
22 ScrollAndScaleSet::ScrollAndScaleSet() 23 ScrollAndScaleSet::ScrollAndScaleSet()
23 { 24 {
24 } 25 }
25 26
26 ScrollAndScaleSet::~ScrollAndScaleSet() 27 ScrollAndScaleSet::~ScrollAndScaleSet()
27 { 28 {
28 } 29 }
29 30
31 static void sortLayers(std::vector<Layer*>::iterator first, std::vector<Layer*>: :iterator end, LayerSorter* layerSorter)
32 {
33 NOTREACHED();
34 }
35
36 static void sortLayers(std::vector<LayerImpl*>::iterator first, std::vector<Laye rImpl*>::iterator end, LayerSorter* layerSorter)
37 {
38 DCHECK(layerSorter);
39 TRACE_EVENT0("cc", "layer_tree_host_common::sortLayers");
40 layerSorter->sort(first, end);
41 }
42
30 gfx::Rect LayerTreeHostCommon::calculateVisibleRect(const gfx::Rect& targetSurfa ceRect, const gfx::Rect& layerBoundRect, const gfx::Transform& transform) 43 gfx::Rect LayerTreeHostCommon::calculateVisibleRect(const gfx::Rect& targetSurfa ceRect, const gfx::Rect& layerBoundRect, const gfx::Transform& transform)
31 { 44 {
32 // Is this layer fully contained within the target surface? 45 // Is this layer fully contained within the target surface?
33 gfx::Rect layerInSurfaceSpace = MathUtil::mapClippedRect(transform, layerBou ndRect); 46 gfx::Rect layerInSurfaceSpace = MathUtil::mapClippedRect(transform, layerBou ndRect);
34 if (targetSurfaceRect.Contains(layerInSurfaceSpace)) 47 if (targetSurfaceRect.Contains(layerInSurfaceSpace))
35 return layerBoundRect; 48 return layerBoundRect;
36 49
37 // If the layer doesn't fill up the entire surface, then find the part of 50 // If the layer doesn't fill up the entire surface, then find the part of
38 // the surface rect where the layer could be visible. This avoids trying to 51 // the surface rect where the layer could be visible. This avoids trying to
39 // project surface rect points that are behind the projection point. 52 // project surface rect points that are behind the projection point.
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 if (maskLayer) 396 if (maskLayer)
384 maskLayer->setContentsScale(contentsScale); 397 maskLayer->setContentsScale(contentsScale);
385 398
386 Layer* replicaMaskLayer = layer->replicaLayer() ? layer->replicaLayer()->mas kLayer() : 0; 399 Layer* replicaMaskLayer = layer->replicaLayer() ? layer->replicaLayer()->mas kLayer() : 0;
387 if (replicaMaskLayer) 400 if (replicaMaskLayer)
388 replicaMaskLayer->setContentsScale(contentsScale); 401 replicaMaskLayer->setContentsScale(contentsScale);
389 } 402 }
390 403
391 // Recursively walks the layer tree starting at the given node and computes all the 404 // Recursively walks the layer tree starting at the given node and computes all the
392 // necessary transformations, clipRects, render surfaces, etc. 405 // necessary transformations, clipRects, render surfaces, etc.
393 template<typename LayerType, typename LayerList, typename RenderSurfaceType, typ ename LayerSorter> 406 template<typename LayerType, typename LayerList, typename RenderSurfaceType>
394 static void calculateDrawPropertiesInternal(LayerType* layer, const gfx::Transfo rm& parentMatrix, 407 static void calculateDrawPropertiesInternal(LayerType* layer, const gfx::Transfo rm& parentMatrix,
395 const gfx::Transform& fullHierarchyMatrix, const gfx::Transform& currentScro llCompensationMatrix, 408 const gfx::Transform& fullHierarchyMatrix, const gfx::Transform& currentScro llCompensationMatrix,
396 const gfx::Rect& clipRectFromAncestor, bool ancestorClipsSubtree, 409 const gfx::Rect& clipRectFromAncestor, bool ancestorClipsSubtree,
397 RenderSurfaceType* nearestAncestorThatMovesPixels, LayerList& renderSurfaceL ayerList, LayerList& layerList, 410 RenderSurfaceType* nearestAncestorThatMovesPixels, LayerList& renderSurfaceL ayerList, LayerList& layerList,
398 LayerSorter* layerSorter, int maxTextureSize, float deviceScaleFactor, float pageScaleFactor, gfx::Rect& drawableContentRectOfSubtree) 411 LayerSorter* layerSorter, int maxTextureSize, float deviceScaleFactor, float pageScaleFactor, gfx::Rect& drawableContentRectOfSubtree)
399 { 412 {
400 // This function computes the new matrix transformations recursively for thi s 413 // This function computes the new matrix transformations recursively for thi s
401 // layer and all its descendants. It also computes the appropriate render su rfaces. 414 // layer and all its descendants. It also computes the appropriate render su rfaces.
402 // Some important points to remember: 415 // Some important points to remember:
403 // 416 //
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 702
690 if (!layerShouldBeSkipped(layer)) 703 if (!layerShouldBeSkipped(layer))
691 descendants.push_back(layer); 704 descendants.push_back(layer);
692 705
693 gfx::Transform nextScrollCompensationMatrix = computeScrollCompensationMatri xForChildren(layer, parentMatrix, currentScrollCompensationMatrix);; 706 gfx::Transform nextScrollCompensationMatrix = computeScrollCompensationMatri xForChildren(layer, parentMatrix, currentScrollCompensationMatrix);;
694 707
695 gfx::Rect accumulatedDrawableContentRectOfChildren; 708 gfx::Rect accumulatedDrawableContentRectOfChildren;
696 for (size_t i = 0; i < layer->children().size(); ++i) { 709 for (size_t i = 0; i < layer->children().size(); ++i) {
697 LayerType* child = LayerTreeHostCommon::getChildAsRawPtr(layer->children (), i); 710 LayerType* child = LayerTreeHostCommon::getChildAsRawPtr(layer->children (), i);
698 gfx::Rect drawableContentRectOfChildSubtree; 711 gfx::Rect drawableContentRectOfChildSubtree;
699 calculateDrawPropertiesInternal<LayerType, LayerList, RenderSurfaceType, LayerSorter>(child, sublayerMatrix, nextHierarchyMatrix, nextScrollCompensation Matrix, 712 calculateDrawPropertiesInternal<LayerType, LayerList, RenderSurfaceType> (child, sublayerMatrix, nextHierarchyMatrix, nextScrollCompensationMatrix,
700 clipRectForSubtree, subtreeShouldBeClipped, nearestAncestorThatMov esPixels, 713 clipRectForSubtree, subtreeShouldBeClipped, nearestAncestorThatMovesPixels,
701 renderSurfaceLayerList, descendants, layerSorter, maxTextureSize, deviceScaleFactor, pageScaleFactor, drawableContentRectOfChildSubtree); 714 renderSurfaceLayerList, descendants, layerSorter, maxTextureSize, deviceScaleFa ctor, pageScaleFactor, drawableContentRectOfChildSubtree);
702 if (!drawableContentRectOfChildSubtree.IsEmpty()) { 715 if (!drawableContentRectOfChildSubtree.IsEmpty()) {
703 accumulatedDrawableContentRectOfChildren.Union(drawableContentRectOf ChildSubtree); 716 accumulatedDrawableContentRectOfChildren.Union(drawableContentRectOf ChildSubtree);
704 if (child->renderSurface()) 717 if (child->renderSurface())
705 descendants.push_back(child); 718 descendants.push_back(child);
706 } 719 }
707 } 720 }
708 721
709 // Compute the total drawableContentRect for this subtree (the rect is in ta rgetSurface space) 722 // Compute the total drawableContentRect for this subtree (the rect is in ta rgetSurface space)
710 gfx::Rect localDrawableContentRectOfSubtree = accumulatedDrawableContentRect OfChildren; 723 gfx::Rect localDrawableContentRectOfSubtree = accumulatedDrawableContentRect OfChildren;
711 if (layer->drawsContent()) 724 if (layer->drawsContent())
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 822
810 markLayerAsUpdated(layer); 823 markLayerAsUpdated(layer);
811 824
812 // If neither this layer nor any of its children were added, early out. 825 // If neither this layer nor any of its children were added, early out.
813 if (sortingStartIndex == descendants.size()) 826 if (sortingStartIndex == descendants.size())
814 return; 827 return;
815 828
816 // If preserves-3d then sort all the descendants in 3D so that they can be 829 // If preserves-3d then sort all the descendants in 3D so that they can be
817 // drawn from back to front. If the preserves-3d property is also set on the parent then 830 // drawn from back to front. If the preserves-3d property is also set on the parent then
818 // skip the sorting as the parent will sort all the descendants anyway. 831 // skip the sorting as the parent will sort all the descendants anyway.
819 if (descendants.size() && layer->preserves3D() && (!layer->parent() || !laye r->parent()->preserves3D())) 832 if (layerSorter && descendants.size() && layer->preserves3D() && (!layer->pa rent() || !layer->parent()->preserves3D()))
820 sortLayers(descendants.begin() + sortingStartIndex, descendants.end(), l ayerSorter); 833 sortLayers(descendants.begin() + sortingStartIndex, descendants.end(), l ayerSorter);
821 834
822 if (layer->renderSurface()) 835 if (layer->renderSurface())
823 drawableContentRectOfSubtree = gfx::ToEnclosingRect(layer->renderSurface ()->drawableContentRect()); 836 drawableContentRectOfSubtree = gfx::ToEnclosingRect(layer->renderSurface ()->drawableContentRect());
824 else 837 else
825 drawableContentRectOfSubtree = localDrawableContentRectOfSubtree; 838 drawableContentRectOfSubtree = localDrawableContentRectOfSubtree;
826 839
827 if (layer->hasContributingDelegatedRenderPasses()) 840 if (layer->hasContributingDelegatedRenderPasses())
828 layer->renderTarget()->renderSurface()->addContributingDelegatedRenderPa ssLayer(layer); 841 layer->renderTarget()->renderSurface()->addContributingDelegatedRenderPa ssLayer(layer);
829 } 842 }
830 843
831 void LayerTreeHostCommon::calculateDrawProperties(Layer* rootLayer, const gfx::S ize& deviceViewportSize, float deviceScaleFactor, float pageScaleFactor, int max TextureSize, std::vector<scoped_refptr<Layer> >& renderSurfaceLayerList) 844 void LayerTreeHostCommon::calculateDrawProperties(Layer* rootLayer, const gfx::S ize& deviceViewportSize, float deviceScaleFactor, float pageScaleFactor, int max TextureSize, std::vector<scoped_refptr<Layer> >& renderSurfaceLayerList)
832 { 845 {
833 gfx::Rect totalDrawableContentRect; 846 gfx::Rect totalDrawableContentRect;
834 gfx::Transform identityMatrix; 847 gfx::Transform identityMatrix;
835 gfx::Transform deviceScaleTransform; 848 gfx::Transform deviceScaleTransform;
836 deviceScaleTransform.Scale(deviceScaleFactor, deviceScaleFactor); 849 deviceScaleTransform.Scale(deviceScaleFactor, deviceScaleFactor);
837 std::vector<scoped_refptr<Layer> > dummyLayerList; 850 std::vector<scoped_refptr<Layer> > dummyLayerList;
838 851
839 // The root layer's renderSurface should receive the deviceViewport as the i nitial clipRect. 852 // The root layer's renderSurface should receive the deviceViewport as the i nitial clipRect.
840 bool subtreeShouldBeClipped = true; 853 bool subtreeShouldBeClipped = true;
841 gfx::Rect deviceViewportRect(gfx::Point(), deviceViewportSize); 854 gfx::Rect deviceViewportRect(gfx::Point(), deviceViewportSize);
842 855
843 // This function should have received a root layer. 856 // This function should have received a root layer.
844 DCHECK(isRootLayer(rootLayer)); 857 DCHECK(isRootLayer(rootLayer));
845 858
846 cc::calculateDrawPropertiesInternal<Layer, std::vector<scoped_refptr<Layer> >, RenderSurface, void>( 859 cc::calculateDrawPropertiesInternal<Layer, std::vector<scoped_refptr<Layer> >, RenderSurface>(
847 rootLayer, deviceScaleTransform, identityMatrix, identityMatrix, 860 rootLayer, deviceScaleTransform, identityMatrix, identityMatrix,
848 deviceViewportRect, subtreeShouldBeClipped, 0, renderSurfaceLayerList, 861 deviceViewportRect, subtreeShouldBeClipped, 0, renderSurfaceLayerList,
849 dummyLayerList, 0, maxTextureSize, 862 dummyLayerList, 0, maxTextureSize,
850 deviceScaleFactor, pageScaleFactor, totalDrawableContentRect); 863 deviceScaleFactor, pageScaleFactor, totalDrawableContentRect);
851 864
852 // The dummy layer list should not have been used. 865 // The dummy layer list should not have been used.
853 DCHECK(dummyLayerList.size() == 0); 866 DCHECK(dummyLayerList.size() == 0);
854 // A root layer renderSurface should always exist after calculateDrawPropert ies. 867 // A root layer renderSurface should always exist after calculateDrawPropert ies.
855 DCHECK(rootLayer->renderSurface()); 868 DCHECK(rootLayer->renderSurface());
856 } 869 }
857 870
858 void LayerTreeHostCommon::calculateDrawProperties(LayerImpl* rootLayer, const gf x::Size& deviceViewportSize, float deviceScaleFactor, float pageScaleFactor, Lay erSorter* layerSorter, int maxTextureSize, std::vector<LayerImpl*>& renderSurfac eLayerList) 871 void LayerTreeHostCommon::calculateDrawProperties(LayerImpl* rootLayer, const gf x::Size& deviceViewportSize, float deviceScaleFactor, float pageScaleFactor, int maxTextureSize, std::vector<LayerImpl*>& renderSurfaceLayerList)
859 { 872 {
860 gfx::Rect totalDrawableContentRect; 873 gfx::Rect totalDrawableContentRect;
861 gfx::Transform identityMatrix; 874 gfx::Transform identityMatrix;
862 gfx::Transform deviceScaleTransform; 875 gfx::Transform deviceScaleTransform;
863 deviceScaleTransform.Scale(deviceScaleFactor, deviceScaleFactor); 876 deviceScaleTransform.Scale(deviceScaleFactor, deviceScaleFactor);
864 std::vector<LayerImpl*> dummyLayerList; 877 std::vector<LayerImpl*> dummyLayerList;
865 878 LayerSorter layerSorter;
879
866 // The root layer's renderSurface should receive the deviceViewport as the i nitial clipRect. 880 // The root layer's renderSurface should receive the deviceViewport as the i nitial clipRect.
867 bool subtreeShouldBeClipped = true; 881 bool subtreeShouldBeClipped = true;
868 gfx::Rect deviceViewportRect(gfx::Point(), deviceViewportSize); 882 gfx::Rect deviceViewportRect(gfx::Point(), deviceViewportSize);
869 883
870 // This function should have received a root layer. 884 // This function should have received a root layer.
871 DCHECK(isRootLayer(rootLayer)); 885 DCHECK(isRootLayer(rootLayer));
872 886
873 cc::calculateDrawPropertiesInternal<LayerImpl, std::vector<LayerImpl*>, Rend erSurfaceImpl, LayerSorter>( 887 cc::calculateDrawPropertiesInternal<LayerImpl, std::vector<LayerImpl*>, Rend erSurfaceImpl>(
874 rootLayer, deviceScaleTransform, identityMatrix, identityMatrix, 888 rootLayer, deviceScaleTransform, identityMatrix, identityMatrix,
875 deviceViewportRect, subtreeShouldBeClipped, 0, renderSurfaceLayerList, 889 deviceViewportRect, subtreeShouldBeClipped, 0, renderSurfaceLayerList,
876 dummyLayerList, layerSorter, maxTextureSize, 890 dummyLayerList, &layerSorter, maxTextureSize,
877 deviceScaleFactor, pageScaleFactor, totalDrawableContentRect); 891 deviceScaleFactor, pageScaleFactor, totalDrawableContentRect);
878 892
879 // The dummy layer list should not have been used. 893 // The dummy layer list should not have been used.
880 DCHECK(dummyLayerList.size() == 0); 894 DCHECK(dummyLayerList.size() == 0);
881 // A root layer renderSurface should always exist after calculateDrawPropert ies. 895 // A root layer renderSurface should always exist after calculateDrawPropert ies.
882 DCHECK(rootLayer->renderSurface()); 896 DCHECK(rootLayer->renderSurface());
883 } 897 }
884 898
885 static bool pointHitsRect(const gfx::PointF& screenSpacePoint, const gfx::Transf orm& localSpaceToScreenSpaceTransform, gfx::RectF localSpaceRect) 899 static bool pointHitsRect(const gfx::PointF& screenSpacePoint, const gfx::Transf orm& localSpaceToScreenSpaceTransform, gfx::RectF localSpaceRect)
886 { 900 {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 1013
1000 foundLayer = currentLayer; 1014 foundLayer = currentLayer;
1001 break; 1015 break;
1002 } 1016 }
1003 1017
1004 // This can potentially return 0, which means the screenSpacePoint did not s uccessfully hit test any layers, not even the root layer. 1018 // This can potentially return 0, which means the screenSpacePoint did not s uccessfully hit test any layers, not even the root layer.
1005 return foundLayer; 1019 return foundLayer;
1006 } 1020 }
1007 1021
1008 } // namespace cc 1022 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layer_tree_host_common.h ('k') | cc/layer_tree_host_common_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698