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 "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "CCLayerIterator.h" | 7 #include "CCLayerIterator.h" |
8 | 8 |
9 #include "CCLayerImpl.h" | 9 #include "CCLayerImpl.h" |
10 #include "CCRenderSurface.h" | 10 #include "CCRenderSurface.h" |
11 #include "cc/layer.h" | 11 #include "cc/layer.h" |
12 #include "cc/render_surface.h" | 12 #include "cc/render_surface.h" |
13 | 13 |
14 namespace cc { | 14 namespace cc { |
15 | 15 |
16 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> | 16 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> |
17 void CCLayerIteratorActions::BackToFront::begin(CCLayerIterator<LayerType, Layer
List, RenderSurfaceType, ActionType>& it) | 17 void LayerIteratorActions::BackToFront::begin(LayerIterator<LayerType, LayerList
, RenderSurfaceType, ActionType>& it) |
18 { | 18 { |
19 it.m_targetRenderSurfaceLayerIndex = 0; | 19 it.m_targetRenderSurfaceLayerIndex = 0; |
20 it.m_currentLayerIndex = CCLayerIteratorValue::LayerIndexRepresentingTargetR
enderSurface; | 20 it.m_currentLayerIndex = LayerIteratorValue::LayerIndexRepresentingTargetRen
derSurface; |
21 | 21 |
22 m_highestTargetRenderSurfaceLayer = 0; | 22 m_highestTargetRenderSurfaceLayer = 0; |
23 } | 23 } |
24 | 24 |
25 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> | 25 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> |
26 void CCLayerIteratorActions::BackToFront::end(CCLayerIterator<LayerType, LayerLi
st, RenderSurfaceType, ActionType>& it) | 26 void LayerIteratorActions::BackToFront::end(LayerIterator<LayerType, LayerList,
RenderSurfaceType, ActionType>& it) |
27 { | 27 { |
28 it.m_targetRenderSurfaceLayerIndex = CCLayerIteratorValue::InvalidTargetRend
erSurfaceLayerIndex; | 28 it.m_targetRenderSurfaceLayerIndex = LayerIteratorValue::InvalidTargetRender
SurfaceLayerIndex; |
29 it.m_currentLayerIndex = 0; | 29 it.m_currentLayerIndex = 0; |
30 } | 30 } |
31 | 31 |
32 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> | 32 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> |
33 void CCLayerIteratorActions::BackToFront::next(CCLayerIterator<LayerType, LayerL
ist, RenderSurfaceType, ActionType>& it) | 33 void LayerIteratorActions::BackToFront::next(LayerIterator<LayerType, LayerList,
RenderSurfaceType, ActionType>& it) |
34 { | 34 { |
35 // If the current layer has a RS, move to its layer list. Otherwise, visit t
he next layer in the current RS layer list. | 35 // If the current layer has a RS, move to its layer list. Otherwise, visit t
he next layer in the current RS layer list. |
36 if (it.currentLayerRepresentsContributingRenderSurface()) { | 36 if (it.currentLayerRepresentsContributingRenderSurface()) { |
37 // Save our position in the childLayer list for the RenderSurface, then
jump to the next RenderSurface. Save where we | 37 // Save our position in the childLayer list for the RenderSurfaceImpl, t
hen jump to the next RenderSurfaceImpl. Save where we |
38 // came from in the next RenderSurface so we can get back to it. | 38 // came from in the next RenderSurfaceImpl so we can get back to it. |
39 it.targetRenderSurface()->m_currentLayerIndexHistory = it.m_currentLayer
Index; | 39 it.targetRenderSurface()->m_currentLayerIndexHistory = it.m_currentLayer
Index; |
40 int previousTargetRenderSurfaceLayer = it.m_targetRenderSurfaceLayerInde
x; | 40 int previousTargetRenderSurfaceLayer = it.m_targetRenderSurfaceLayerInde
x; |
41 | 41 |
42 it.m_targetRenderSurfaceLayerIndex = ++m_highestTargetRenderSurfaceLayer
; | 42 it.m_targetRenderSurfaceLayerIndex = ++m_highestTargetRenderSurfaceLayer
; |
43 it.m_currentLayerIndex = CCLayerIteratorValue::LayerIndexRepresentingTar
getRenderSurface; | 43 it.m_currentLayerIndex = LayerIteratorValue::LayerIndexRepresentingTarge
tRenderSurface; |
44 | 44 |
45 it.targetRenderSurface()->m_targetRenderSurfaceLayerIndexHistory = previ
ousTargetRenderSurfaceLayer; | 45 it.targetRenderSurface()->m_targetRenderSurfaceLayerIndexHistory = previ
ousTargetRenderSurfaceLayer; |
46 } else { | 46 } else { |
47 ++it.m_currentLayerIndex; | 47 ++it.m_currentLayerIndex; |
48 | 48 |
49 int targetRenderSurfaceNumChildren = it.targetRenderSurfaceChildren().si
ze(); | 49 int targetRenderSurfaceNumChildren = it.targetRenderSurfaceChildren().si
ze(); |
50 while (it.m_currentLayerIndex == targetRenderSurfaceNumChildren) { | 50 while (it.m_currentLayerIndex == targetRenderSurfaceNumChildren) { |
51 // Jump back to the previous RenderSurface, and get back the positio
n where we were in that list, and move to the next position there. | 51 // Jump back to the previous RenderSurfaceImpl, and get back the pos
ition where we were in that list, and move to the next position there. |
52 if (!it.m_targetRenderSurfaceLayerIndex) { | 52 if (!it.m_targetRenderSurfaceLayerIndex) { |
53 // End of the list | 53 // End of the list |
54 it.m_targetRenderSurfaceLayerIndex = CCLayerIteratorValue::Inval
idTargetRenderSurfaceLayerIndex; | 54 it.m_targetRenderSurfaceLayerIndex = LayerIteratorValue::Invalid
TargetRenderSurfaceLayerIndex; |
55 it.m_currentLayerIndex = 0; | 55 it.m_currentLayerIndex = 0; |
56 return; | 56 return; |
57 } | 57 } |
58 it.m_targetRenderSurfaceLayerIndex = it.targetRenderSurface()->m_tar
getRenderSurfaceLayerIndexHistory; | 58 it.m_targetRenderSurfaceLayerIndex = it.targetRenderSurface()->m_tar
getRenderSurfaceLayerIndexHistory; |
59 it.m_currentLayerIndex = it.targetRenderSurface()->m_currentLayerInd
exHistory + 1; | 59 it.m_currentLayerIndex = it.targetRenderSurface()->m_currentLayerInd
exHistory + 1; |
60 | 60 |
61 targetRenderSurfaceNumChildren = it.targetRenderSurfaceChildren().si
ze(); | 61 targetRenderSurfaceNumChildren = it.targetRenderSurfaceChildren().si
ze(); |
62 } | 62 } |
63 } | 63 } |
64 } | 64 } |
65 | 65 |
66 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> | 66 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> |
67 void CCLayerIteratorActions::FrontToBack::begin(CCLayerIterator<LayerType, Layer
List, RenderSurfaceType, ActionType>& it) | 67 void LayerIteratorActions::FrontToBack::begin(LayerIterator<LayerType, LayerList
, RenderSurfaceType, ActionType>& it) |
68 { | 68 { |
69 it.m_targetRenderSurfaceLayerIndex = 0; | 69 it.m_targetRenderSurfaceLayerIndex = 0; |
70 it.m_currentLayerIndex = it.targetRenderSurfaceChildren().size() - 1; | 70 it.m_currentLayerIndex = it.targetRenderSurfaceChildren().size() - 1; |
71 goToHighestInSubtree(it); | 71 goToHighestInSubtree(it); |
72 } | 72 } |
73 | 73 |
74 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> | 74 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> |
75 void CCLayerIteratorActions::FrontToBack::end(CCLayerIterator<LayerType, LayerLi
st, RenderSurfaceType, ActionType>& it) | 75 void LayerIteratorActions::FrontToBack::end(LayerIterator<LayerType, LayerList,
RenderSurfaceType, ActionType>& it) |
76 { | 76 { |
77 it.m_targetRenderSurfaceLayerIndex = CCLayerIteratorValue::InvalidTargetRend
erSurfaceLayerIndex; | 77 it.m_targetRenderSurfaceLayerIndex = LayerIteratorValue::InvalidTargetRender
SurfaceLayerIndex; |
78 it.m_currentLayerIndex = 0; | 78 it.m_currentLayerIndex = 0; |
79 } | 79 } |
80 | 80 |
81 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> | 81 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> |
82 void CCLayerIteratorActions::FrontToBack::next(CCLayerIterator<LayerType, LayerL
ist, RenderSurfaceType, ActionType>& it) | 82 void LayerIteratorActions::FrontToBack::next(LayerIterator<LayerType, LayerList,
RenderSurfaceType, ActionType>& it) |
83 { | 83 { |
84 // Moves to the previous layer in the current RS layer list. Then we check i
f the | 84 // Moves to the previous layer in the current RS layer list. Then we check i
f the |
85 // new current layer has its own RS, in which case there are things in that
RS layer list that are higher, so | 85 // new current layer has its own RS, in which case there are things in that
RS layer list that are higher, so |
86 // we find the highest layer in that subtree. | 86 // we find the highest layer in that subtree. |
87 // If we move back past the front of the list, we jump up to the previous RS
layer list, picking up again where we | 87 // If we move back past the front of the list, we jump up to the previous RS
layer list, picking up again where we |
88 // had previously recursed into the current RS layer list. | 88 // had previously recursed into the current RS layer list. |
89 | 89 |
90 if (!it.currentLayerRepresentsTargetRenderSurface()) { | 90 if (!it.currentLayerRepresentsTargetRenderSurface()) { |
91 // Subtracting one here will eventually cause the current layer to becom
e that layer | 91 // Subtracting one here will eventually cause the current layer to becom
e that layer |
92 // representing the target render surface. | 92 // representing the target render surface. |
93 --it.m_currentLayerIndex; | 93 --it.m_currentLayerIndex; |
94 goToHighestInSubtree(it); | 94 goToHighestInSubtree(it); |
95 } else { | 95 } else { |
96 while (it.currentLayerRepresentsTargetRenderSurface()) { | 96 while (it.currentLayerRepresentsTargetRenderSurface()) { |
97 if (!it.m_targetRenderSurfaceLayerIndex) { | 97 if (!it.m_targetRenderSurfaceLayerIndex) { |
98 // End of the list | 98 // End of the list |
99 it.m_targetRenderSurfaceLayerIndex = CCLayerIteratorValue::Inval
idTargetRenderSurfaceLayerIndex; | 99 it.m_targetRenderSurfaceLayerIndex = LayerIteratorValue::Invalid
TargetRenderSurfaceLayerIndex; |
100 it.m_currentLayerIndex = 0; | 100 it.m_currentLayerIndex = 0; |
101 return; | 101 return; |
102 } | 102 } |
103 it.m_targetRenderSurfaceLayerIndex = it.targetRenderSurface()->m_tar
getRenderSurfaceLayerIndexHistory; | 103 it.m_targetRenderSurfaceLayerIndex = it.targetRenderSurface()->m_tar
getRenderSurfaceLayerIndexHistory; |
104 it.m_currentLayerIndex = it.targetRenderSurface()->m_currentLayerInd
exHistory; | 104 it.m_currentLayerIndex = it.targetRenderSurface()->m_currentLayerInd
exHistory; |
105 } | 105 } |
106 } | 106 } |
107 } | 107 } |
108 | 108 |
109 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> | 109 template <typename LayerType, typename LayerList, typename RenderSurfaceType, ty
pename ActionType> |
110 void CCLayerIteratorActions::FrontToBack::goToHighestInSubtree(CCLayerIterator<L
ayerType, LayerList, RenderSurfaceType, ActionType>& it) | 110 void LayerIteratorActions::FrontToBack::goToHighestInSubtree(LayerIterator<Layer
Type, LayerList, RenderSurfaceType, ActionType>& it) |
111 { | 111 { |
112 if (it.currentLayerRepresentsTargetRenderSurface()) | 112 if (it.currentLayerRepresentsTargetRenderSurface()) |
113 return; | 113 return; |
114 while (it.currentLayerRepresentsContributingRenderSurface()) { | 114 while (it.currentLayerRepresentsContributingRenderSurface()) { |
115 // Save where we were in the current target surface, move to the next on
e, and save the target surface that we | 115 // Save where we were in the current target surface, move to the next on
e, and save the target surface that we |
116 // came from there so we can go back to it. | 116 // came from there so we can go back to it. |
117 it.targetRenderSurface()->m_currentLayerIndexHistory = it.m_currentLayer
Index; | 117 it.targetRenderSurface()->m_currentLayerIndexHistory = it.m_currentLayer
Index; |
118 int previousTargetRenderSurfaceLayer = it.m_targetRenderSurfaceLayerInde
x; | 118 int previousTargetRenderSurfaceLayer = it.m_targetRenderSurfaceLayerInde
x; |
119 | 119 |
120 for (LayerType* layer = it.currentLayer(); it.targetRenderSurfaceLayer()
!= layer; ++it.m_targetRenderSurfaceLayerIndex) { } | 120 for (LayerType* layer = it.currentLayer(); it.targetRenderSurfaceLayer()
!= layer; ++it.m_targetRenderSurfaceLayerIndex) { } |
121 it.m_currentLayerIndex = it.targetRenderSurfaceChildren().size() - 1; | 121 it.m_currentLayerIndex = it.targetRenderSurfaceChildren().size() - 1; |
122 | 122 |
123 it.targetRenderSurface()->m_targetRenderSurfaceLayerIndexHistory = previ
ousTargetRenderSurfaceLayer; | 123 it.targetRenderSurface()->m_targetRenderSurfaceLayerIndexHistory = previ
ousTargetRenderSurfaceLayer; |
124 } | 124 } |
125 } | 125 } |
126 | 126 |
127 typedef std::vector<scoped_refptr<LayerChromium> > LayerChromiumList; | 127 typedef std::vector<scoped_refptr<Layer> > LayerList; |
128 typedef std::vector<CCLayerImpl*> CCLayerImplList; | 128 typedef std::vector<LayerImpl*> LayerImplList; |
129 | 129 |
130 // Declare each of the above functions for LayerChromium and CCLayerImpl classes
so that they are linked. | 130 // Declare each of the above functions for Layer and LayerImpl classes so that t
hey are linked. |
131 template void CCLayerIteratorActions::BackToFront::begin(CCLayerIterator<LayerCh
romium, LayerChromiumList, RenderSurfaceChromium, BackToFront> &); | 131 template void LayerIteratorActions::BackToFront::begin(LayerIterator<Layer, Laye
rList, RenderSurface, BackToFront> &); |
132 template void CCLayerIteratorActions::BackToFront::end(CCLayerIterator<LayerChro
mium, LayerChromiumList, RenderSurfaceChromium, BackToFront>&); | 132 template void LayerIteratorActions::BackToFront::end(LayerIterator<Layer, LayerL
ist, RenderSurface, BackToFront>&); |
133 template void CCLayerIteratorActions::BackToFront::next(CCLayerIterator<LayerChr
omium, LayerChromiumList, RenderSurfaceChromium, BackToFront>&); | 133 template void LayerIteratorActions::BackToFront::next(LayerIterator<Layer, Layer
List, RenderSurface, BackToFront>&); |
134 | 134 |
135 template void CCLayerIteratorActions::BackToFront::begin(CCLayerIterator<CCLayer
Impl, CCLayerImplList, CCRenderSurface, BackToFront>&); | 135 template void LayerIteratorActions::BackToFront::begin(LayerIterator<LayerImpl,
LayerImplList, RenderSurfaceImpl, BackToFront>&); |
136 template void CCLayerIteratorActions::BackToFront::end(CCLayerIterator<CCLayerIm
pl, CCLayerImplList, CCRenderSurface, BackToFront>&); | 136 template void LayerIteratorActions::BackToFront::end(LayerIterator<LayerImpl, La
yerImplList, RenderSurfaceImpl, BackToFront>&); |
137 template void CCLayerIteratorActions::BackToFront::next(CCLayerIterator<CCLayerI
mpl, CCLayerImplList, CCRenderSurface, BackToFront>&); | 137 template void LayerIteratorActions::BackToFront::next(LayerIterator<LayerImpl, L
ayerImplList, RenderSurfaceImpl, BackToFront>&); |
138 | 138 |
139 template void CCLayerIteratorActions::FrontToBack::next(CCLayerIterator<LayerChr
omium, LayerChromiumList, RenderSurfaceChromium, FrontToBack>&); | 139 template void LayerIteratorActions::FrontToBack::next(LayerIterator<Layer, Layer
List, RenderSurface, FrontToBack>&); |
140 template void CCLayerIteratorActions::FrontToBack::end(CCLayerIterator<LayerChro
mium, LayerChromiumList, RenderSurfaceChromium, FrontToBack>&); | 140 template void LayerIteratorActions::FrontToBack::end(LayerIterator<Layer, LayerL
ist, RenderSurface, FrontToBack>&); |
141 template void CCLayerIteratorActions::FrontToBack::begin(CCLayerIterator<LayerCh
romium, LayerChromiumList, RenderSurfaceChromium, FrontToBack>&); | 141 template void LayerIteratorActions::FrontToBack::begin(LayerIterator<Layer, Laye
rList, RenderSurface, FrontToBack>&); |
142 template void CCLayerIteratorActions::FrontToBack::goToHighestInSubtree(CCLayerI
terator<LayerChromium, LayerChromiumList, RenderSurfaceChromium, FrontToBack>&); | 142 template void LayerIteratorActions::FrontToBack::goToHighestInSubtree(LayerItera
tor<Layer, LayerList, RenderSurface, FrontToBack>&); |
143 | 143 |
144 template void CCLayerIteratorActions::FrontToBack::next(CCLayerIterator<CCLayerI
mpl, CCLayerImplList, CCRenderSurface, FrontToBack>&); | 144 template void LayerIteratorActions::FrontToBack::next(LayerIterator<LayerImpl, L
ayerImplList, RenderSurfaceImpl, FrontToBack>&); |
145 template void CCLayerIteratorActions::FrontToBack::end(CCLayerIterator<CCLayerIm
pl, CCLayerImplList, CCRenderSurface, FrontToBack>&); | 145 template void LayerIteratorActions::FrontToBack::end(LayerIterator<LayerImpl, La
yerImplList, RenderSurfaceImpl, FrontToBack>&); |
146 template void CCLayerIteratorActions::FrontToBack::begin(CCLayerIterator<CCLayer
Impl, CCLayerImplList, CCRenderSurface, FrontToBack>&); | 146 template void LayerIteratorActions::FrontToBack::begin(LayerIterator<LayerImpl,
LayerImplList, RenderSurfaceImpl, FrontToBack>&); |
147 template void CCLayerIteratorActions::FrontToBack::goToHighestInSubtree(CCLayerI
terator<CCLayerImpl, CCLayerImplList, CCRenderSurface, FrontToBack>&); | 147 template void LayerIteratorActions::FrontToBack::goToHighestInSubtree(LayerItera
tor<LayerImpl, LayerImplList, RenderSurfaceImpl, FrontToBack>&); |
148 | 148 |
149 } // namespace cc | 149 } // namespace cc |
OLD | NEW |