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

Side by Side Diff: Source/core/paint/ViewDisplayListTest.cpp

Issue 719353004: [Slimming Paint] Track clip renderers (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Address reviewer comments Created 6 years, 1 month 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 | « Source/core/paint/ViewDisplayList.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #include "core/paint/ViewDisplayList.h" 6 #include "core/paint/ViewDisplayList.h"
7 7
8 #include "core/paint/ClipRecorder.h" 8 #include "core/paint/ClipRecorder.h"
9 #include "core/paint/DrawingRecorder.h" 9 #include "core/paint/DrawingRecorder.h"
10 #include "core/rendering/RenderView.h" 10 #include "core/rendering/RenderView.h"
(...skipping 19 matching lines...) Expand all
30 30
31 RenderingTest::SetUp(); 31 RenderingTest::SetUp();
32 32
33 m_renderView = document().view()->renderView(); 33 m_renderView = document().view()->renderView();
34 ASSERT_TRUE(m_renderView); 34 ASSERT_TRUE(m_renderView);
35 } 35 }
36 36
37 RenderView* m_renderView; 37 RenderView* m_renderView;
38 }; 38 };
39 39
40 class TestDisplayItem : public DisplayItem {
41 public:
42 TestDisplayItem(const RenderObject* renderer, Type type) : DisplayItem(rende rer, type) { }
43
44 virtual void replay(GraphicsContext*) override final { ASSERT_NOT_REACHED(); }
45 };
46
47 #define EXPECT_DISPLAY_LIST(actual, expectedSize, ...) { \
48 EXPECT_EQ((size_t)expectedSize, actual.size()); \
49 const TestDisplayItem expected[] = { __VA_ARGS__ }; \
50 for (size_t index = 0; index < expectedSize; index++) { \
51 EXPECT_EQ(expected[index].renderer(), actual[index]->renderer()); \
52 EXPECT_EQ(expected[index].type(), actual[index]->type()); \
53 } \
54 }
55
40 void drawRect(GraphicsContext* context, RenderObject* renderer, PaintPhase phase , const FloatRect& bound) 56 void drawRect(GraphicsContext* context, RenderObject* renderer, PaintPhase phase , const FloatRect& bound)
41 { 57 {
42 DrawingRecorder drawingRecorder(context, renderer, phase, bound); 58 DrawingRecorder drawingRecorder(context, renderer, phase, bound);
43 IntRect rect(0, 0, 10, 10); 59 IntRect rect(0, 0, 10, 10);
44 context->drawRect(rect); 60 context->drawRect(rect);
45 } 61 }
46 62
47 void drawClippedRect(GraphicsContext* context, RenderView* renderView, PaintPhas e phase, const FloatRect& bound) 63 void drawClippedRect(GraphicsContext* context, RenderLayerModelObject* renderer, PaintPhase phase, const FloatRect& bound)
48 { 64 {
49 IntRect rect(1, 1, 9, 9); 65 IntRect rect(1, 1, 9, 9);
50 ClipRect clipRect(rect); 66 ClipRect clipRect(rect);
51 ClipRecorder clipRecorder(renderView->compositor()->rootRenderLayer(), conte xt, DisplayItem::ClipLayerForeground, clipRect); 67 ClipRecorder clipRecorder(renderer, context, DisplayItem::ClipLayerForegroun d, clipRect);
52 drawRect(context, renderView, phase, bound); 68 drawRect(context, renderer, phase, bound);
53 } 69 }
54 70
55 TEST_F(ViewDisplayListTest, ViewDisplayListTest_NestedRecorders) 71 TEST_F(ViewDisplayListTest, ViewDisplayListTest_NestedRecorders)
56 { 72 {
57 GraphicsContext* context = new GraphicsContext(nullptr); 73 GraphicsContext* context = new GraphicsContext(nullptr);
58 FloatRect bound = renderView()->viewRect(); 74 FloatRect bound = renderView()->viewRect();
59 75
60 drawClippedRect(context, renderView(), PaintPhaseForeground, bound); 76 drawClippedRect(context, renderView(), PaintPhaseForeground, bound);
61 EXPECT_EQ((size_t)3, renderView()->viewDisplayList().paintList().size());
62 77
63 // TODO(schenney): Check that the IDs are what we expect. 78 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 3,
chrishtr 2014/11/14 01:11:26 Just a regular FIXME..
79 TestDisplayItem(renderView(), DisplayItem::ClipLayerForeground),
80 TestDisplayItem(renderView(), DisplayItem::DrawingPaintPhaseForeground),
81 TestDisplayItem(renderView(), DisplayItem::EndClip));
64 } 82 }
65 83
66 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateBasic) 84 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateBasic)
67 { 85 {
68 setBodyInnerHTML("<div id='first'><div id='second'></div></div>"); 86 setBodyInnerHTML("<div id='first'><div id='second'></div></div>");
69 RenderObject* first = document().body()->firstChild()->renderer(); 87 RenderObject* first = document().body()->firstChild()->renderer();
70 RenderObject* second = document().body()->firstChild()->firstChild()->render er(); 88 RenderObject* second = document().body()->firstChild()->firstChild()->render er();
71 GraphicsContext* context = new GraphicsContext(nullptr); 89 GraphicsContext* context = new GraphicsContext(nullptr);
72 90
73 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 300, 300)); 91 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 300, 300));
74 drawRect(context, second, PaintPhaseChildBlockBackground, FloatRect(100, 100 , 200, 200)); 92 drawRect(context, second, PaintPhaseChildBlockBackground, FloatRect(100, 100 , 200, 200));
75 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 300, 300)); 93 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 300, 300));
76 94
77 EXPECT_EQ((size_t)3, renderView()->viewDisplayList().paintList().size()); 95 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 3,
96 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
97 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseChildBlockBackgrou nd),
98 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
78 99
79 renderView()->viewDisplayList().invalidate(second); 100 renderView()->viewDisplayList().invalidate(second);
80 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 300, 300)); 101 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 300, 300));
81 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 300, 300)); 102 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 300, 300));
82 EXPECT_EQ((size_t)2, renderView()->viewDisplayList().paintList().size()); 103
104 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
105 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
106 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
83 } 107 }
84 108
85 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateSwapOrder) 109 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateSwapOrder)
86 { 110 {
87 setBodyInnerHTML("<div id='first'><div id='second'></div></div><div id='unaf fected'></div>"); 111 setBodyInnerHTML("<div id='first'><div id='second'></div></div><div id='unaf fected'></div>");
88 RenderObject* first = document().body()->firstChild()->renderer(); 112 RenderObject* first = document().body()->firstChild()->renderer();
89 RenderObject* second = document().body()->firstChild()->firstChild()->render er(); 113 RenderObject* second = document().body()->firstChild()->firstChild()->render er();
90 RenderObject* unaffected = document().body()->firstChild()->nextSibling()->r enderer(); 114 RenderObject* unaffected = document().body()->firstChild()->nextSibling()->r enderer();
91 GraphicsContext* context = new GraphicsContext(nullptr); 115 GraphicsContext* context = new GraphicsContext(nullptr);
92 116
93 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100)); 117 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100));
94 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200)); 118 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200));
95 drawRect(context, unaffected, PaintPhaseBlockBackground, FloatRect(300, 300, 10, 10)); 119 drawRect(context, unaffected, PaintPhaseBlockBackground, FloatRect(300, 300, 10, 10));
96 120
97 const PaintList& firstList = renderView()->viewDisplayList().paintList(); 121 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 3,
98 EXPECT_EQ((size_t)3, firstList.size()); 122 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
99 EXPECT_EQ(first, firstList[0]->renderer()); 123 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
100 EXPECT_EQ(second, firstList[1]->renderer()); 124 TestDisplayItem(unaffected, DisplayItem::DrawingPaintPhaseBlockBackgroun d));
101 EXPECT_EQ(unaffected, firstList[2]->renderer());
102 125
103 renderView()->viewDisplayList().invalidate(second); 126 renderView()->viewDisplayList().invalidate(second);
104 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200)); 127 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200));
105 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100)); 128 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100));
106 129
107 const PaintList& secondList = renderView()->viewDisplayList().paintList(); 130 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 3,
108 EXPECT_EQ((size_t)3, secondList.size()); 131 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
109 EXPECT_EQ(second, secondList[0]->renderer()); 132 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
110 EXPECT_EQ(first, secondList[1]->renderer()); 133 TestDisplayItem(unaffected, DisplayItem::DrawingPaintPhaseBlockBackgroun d));
111 EXPECT_EQ(unaffected, secondList[2]->renderer());
112 } 134 }
113 135
114 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateNewItemInMiddle) 136 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateNewItemInMiddle)
115 { 137 {
116 setBodyInnerHTML("<div id='first'><div id='second'><div id='third'></div></d iv></div>"); 138 setBodyInnerHTML("<div id='first'><div id='second'><div id='third'></div></d iv></div>");
117 RenderObject* first = document().body()->firstChild()->renderer(); 139 RenderObject* first = document().body()->firstChild()->renderer();
118 RenderObject* second = document().body()->firstChild()->firstChild()->render er(); 140 RenderObject* second = document().body()->firstChild()->firstChild()->render er();
119 RenderObject* third = document().body()->firstChild()->firstChild()->firstCh ild()->renderer(); 141 RenderObject* third = document().body()->firstChild()->firstChild()->firstCh ild()->renderer();
120 GraphicsContext* context = new GraphicsContext(nullptr); 142 GraphicsContext* context = new GraphicsContext(nullptr);
121 143
122 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100)); 144 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100));
123 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200)); 145 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200));
124 146
125 const PaintList& firstList = renderView()->viewDisplayList().paintList(); 147 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
126 EXPECT_EQ((size_t)2, firstList.size()); 148 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
127 EXPECT_EQ(first, firstList[0]->renderer()); 149 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground));
128 EXPECT_EQ(second, firstList[1]->renderer());
129 150
130 renderView()->viewDisplayList().invalidate(third); 151 renderView()->viewDisplayList().invalidate(third);
131 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100)); 152 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100));
132 drawRect(context, third, PaintPhaseBlockBackground, FloatRect(125, 100, 200, 50)); 153 drawRect(context, third, PaintPhaseBlockBackground, FloatRect(125, 100, 200, 50));
133 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200)); 154 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200));
134 155
135 const PaintList& secondList = renderView()->viewDisplayList().paintList(); 156 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 3,
136 EXPECT_EQ((size_t)3, secondList.size()); 157 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
137 EXPECT_EQ(first, secondList[0]->renderer()); 158 TestDisplayItem(third, DisplayItem::DrawingPaintPhaseBlockBackground),
138 EXPECT_EQ(third, secondList[1]->renderer()); 159 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground));
139 EXPECT_EQ(second, secondList[2]->renderer());
140 } 160 }
141 161
142 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateInvalidationWithPhases) 162 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateInvalidationWithPhases)
143 { 163 {
144 setBodyInnerHTML("<div id='first'><div id='second'></div></div><div id='thir d'></div>"); 164 setBodyInnerHTML("<div id='first'><div id='second'></div></div><div id='thir d'></div>");
145 RenderObject* first = document().body()->firstChild()->renderer(); 165 RenderObject* first = document().body()->firstChild()->renderer();
146 RenderObject* second = document().body()->firstChild()->firstChild()->render er(); 166 RenderObject* second = document().body()->firstChild()->firstChild()->render er();
147 RenderObject* third = document().body()->firstChild()->nextSibling()->render er(); 167 RenderObject* third = document().body()->firstChild()->nextSibling()->render er();
148 GraphicsContext* context = new GraphicsContext(nullptr); 168 GraphicsContext* context = new GraphicsContext(nullptr);
149 169
150 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100)); 170 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100));
151 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200)); 171 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200));
152 drawRect(context, third, PaintPhaseBlockBackground, FloatRect(300, 100, 50, 50)); 172 drawRect(context, third, PaintPhaseBlockBackground, FloatRect(300, 100, 50, 50));
153 drawRect(context, first, PaintPhaseForeground, FloatRect(100, 100, 100, 100) ); 173 drawRect(context, first, PaintPhaseForeground, FloatRect(100, 100, 100, 100) );
154 drawRect(context, second, PaintPhaseForeground, FloatRect(100, 100, 50, 200) ); 174 drawRect(context, second, PaintPhaseForeground, FloatRect(100, 100, 50, 200) );
155 drawRect(context, third, PaintPhaseForeground, FloatRect(300, 100, 50, 50)); 175 drawRect(context, third, PaintPhaseForeground, FloatRect(300, 100, 50, 50));
156 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 100, 100)); 176 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 100, 100));
157 drawRect(context, second, PaintPhaseOutline, FloatRect(100, 100, 50, 200)); 177 drawRect(context, second, PaintPhaseOutline, FloatRect(100, 100, 50, 200));
158 drawRect(context, third, PaintPhaseOutline, FloatRect(300, 100, 50, 50)); 178 drawRect(context, third, PaintPhaseOutline, FloatRect(300, 100, 50, 50));
159 179
160 const PaintList& firstList = renderView()->viewDisplayList().paintList(); 180 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 9,
161 EXPECT_EQ((size_t)9, firstList.size()); 181 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
162 for (int item = 0; item < 9; item += 3) { 182 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
163 EXPECT_EQ(first, firstList[item % 3 + 0]->renderer()); 183 TestDisplayItem(third, DisplayItem::DrawingPaintPhaseBlockBackground),
164 EXPECT_EQ(second, firstList[item % 3 + 1]->renderer()); 184 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseForeground),
165 EXPECT_EQ(third, firstList[item % 3 + 2]->renderer()); 185 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseForeground),
166 } 186 TestDisplayItem(third, DisplayItem::DrawingPaintPhaseForeground),
187 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline),
188 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline),
189 TestDisplayItem(third, DisplayItem::DrawingPaintPhaseOutline));
167 190
168 renderView()->viewDisplayList().invalidate(second); 191 renderView()->viewDisplayList().invalidate(second);
169 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100)); 192 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100));
170 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200)); 193 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200));
171 drawRect(context, first, PaintPhaseForeground, FloatRect(100, 100, 100, 100) ); 194 drawRect(context, first, PaintPhaseForeground, FloatRect(100, 100, 100, 100) );
172 drawRect(context, second, PaintPhaseForeground, FloatRect(100, 100, 50, 200) ); 195 drawRect(context, second, PaintPhaseForeground, FloatRect(100, 100, 50, 200) );
173 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 100, 100)); 196 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 100, 100));
174 drawRect(context, second, PaintPhaseOutline, FloatRect(100, 100, 50, 200)); 197 drawRect(context, second, PaintPhaseOutline, FloatRect(100, 100, 50, 200));
175 198
176 const PaintList& secondList = renderView()->viewDisplayList().paintList(); 199 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 9,
177 EXPECT_EQ((size_t)9, secondList.size()); 200 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
178 for (int item = 0; item < 9; item += 3) { 201 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
179 EXPECT_EQ(first, secondList[item % 3 + 0]->renderer()); 202 TestDisplayItem(third, DisplayItem::DrawingPaintPhaseBlockBackground),
180 EXPECT_EQ(second, secondList[item % 3 + 1]->renderer()); 203 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseForeground),
181 EXPECT_EQ(third, secondList[item % 3 + 2]->renderer()); 204 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseForeground),
182 } 205 TestDisplayItem(third, DisplayItem::DrawingPaintPhaseForeground),
206 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline),
207 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline),
208 TestDisplayItem(third, DisplayItem::DrawingPaintPhaseOutline));
183 209
184 renderView()->viewDisplayList().invalidate(second); 210 renderView()->viewDisplayList().invalidate(second);
185 const PaintList& thirdList = renderView()->viewDisplayList().paintList(); 211
186 EXPECT_EQ((size_t)6, thirdList.size()); 212 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 6,
187 for (int item = 0; item < 6; item += 2) { 213 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
188 EXPECT_EQ(first, thirdList[item % 2 + 0]->renderer()); 214 TestDisplayItem(third, DisplayItem::DrawingPaintPhaseBlockBackground),
189 EXPECT_EQ(third, thirdList[item % 2 + 1]->renderer()); 215 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseForeground),
190 } 216 TestDisplayItem(third, DisplayItem::DrawingPaintPhaseForeground),
217 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline),
218 TestDisplayItem(third, DisplayItem::DrawingPaintPhaseOutline));
191 } 219 }
192 220
193 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateAddFirstNoOverlap) 221 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateAddFirstNoOverlap)
194 { 222 {
195 setBodyInnerHTML("<div id='first'></div><div id='second'></div>"); 223 setBodyInnerHTML("<div id='first'></div><div id='second'></div>");
196 RenderObject* first = document().body()->firstChild()->renderer(); 224 RenderObject* first = document().body()->firstChild()->renderer();
197 RenderObject* second = document().body()->firstChild()->nextSibling()->rende rer(); 225 RenderObject* second = document().body()->firstChild()->nextSibling()->rende rer();
198 GraphicsContext* context = new GraphicsContext(nullptr); 226 GraphicsContext* context = new GraphicsContext(nullptr);
199 227
200 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50)); 228 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
201 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50)); 229 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
202 230
203 const PaintList& firstList = renderView()->viewDisplayList().paintList(); 231 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
204 EXPECT_EQ((size_t)2, firstList.size()); 232 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
205 EXPECT_EQ(second, firstList[0]->renderer()); 233 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
206 EXPECT_EQ(second, firstList[1]->renderer());
207 234
208 renderView()->viewDisplayList().invalidate(first); 235 renderView()->viewDisplayList().invalidate(first);
209 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 50)); 236 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 50));
210 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 50, 50)); 237 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 50, 50));
211 238
212 const PaintList& secondList = renderView()->viewDisplayList().paintList(); 239 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 4,
213 EXPECT_EQ((size_t)4, secondList.size()); 240 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
214 EXPECT_EQ(first, secondList[0]->renderer()); 241 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline),
215 EXPECT_EQ(first, secondList[1]->renderer()); 242 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
216 EXPECT_EQ(second, secondList[2]->renderer()); 243 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
217 EXPECT_EQ(second, secondList[3]->renderer());
218 244
219 renderView()->viewDisplayList().invalidate(first); 245 renderView()->viewDisplayList().invalidate(first);
220 const PaintList& thirdList = renderView()->viewDisplayList().paintList(); 246
221 EXPECT_EQ((size_t)2, thirdList.size()); 247 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
222 EXPECT_EQ(second, thirdList[0]->renderer()); 248 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
223 EXPECT_EQ(second, thirdList[1]->renderer()); 249 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
224 } 250 }
225 251
226 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateAddFirstOverlap) 252 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateAddFirstOverlap)
227 { 253 {
228 setBodyInnerHTML("<div id='first'></div><div id='second'></div>"); 254 setBodyInnerHTML("<div id='first'></div><div id='second'></div>");
229 RenderObject* first = document().body()->firstChild()->renderer(); 255 RenderObject* first = document().body()->firstChild()->renderer();
230 RenderObject* second = document().body()->firstChild()->nextSibling()->rende rer(); 256 RenderObject* second = document().body()->firstChild()->nextSibling()->rende rer();
231 GraphicsContext* context = new GraphicsContext(nullptr); 257 GraphicsContext* context = new GraphicsContext(nullptr);
232 258
233 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50)); 259 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
234 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50)); 260 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
235 261
236 const PaintList& firstList = renderView()->viewDisplayList().paintList(); 262 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
237 EXPECT_EQ((size_t)2, firstList.size()); 263 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
238 EXPECT_EQ(second, firstList[0]->renderer()); 264 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
239 EXPECT_EQ(second, firstList[1]->renderer());
240 265
241 renderView()->viewDisplayList().invalidate(first); 266 renderView()->viewDisplayList().invalidate(first);
242 renderView()->viewDisplayList().invalidate(second); 267 renderView()->viewDisplayList().invalidate(second);
243 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150)); 268 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150));
244 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150)); 269 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150));
245 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50)); 270 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
246 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50)); 271 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
247 272
248 const PaintList& secondList = renderView()->viewDisplayList().paintList(); 273 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 4,
249 EXPECT_EQ((size_t)4, secondList.size()); 274 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
250 EXPECT_EQ(first, secondList[0]->renderer()); 275 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline),
251 EXPECT_EQ(first, secondList[1]->renderer()); 276 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
252 EXPECT_EQ(second, secondList[2]->renderer()); 277 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
253 EXPECT_EQ(second, secondList[3]->renderer());
254 278
255 renderView()->viewDisplayList().invalidate(first); 279 renderView()->viewDisplayList().invalidate(first);
256 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50)); 280 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
257 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50)); 281 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
258 282
259 const PaintList& thirdList = renderView()->viewDisplayList().paintList(); 283 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
260 EXPECT_EQ((size_t)2, thirdList.size()); 284 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
261 EXPECT_EQ(second, thirdList[0]->renderer()); 285 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
262 EXPECT_EQ(second, thirdList[1]->renderer());
263 } 286 }
264 287
265 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateAddLastNoOverlap) 288 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateAddLastNoOverlap)
266 { 289 {
267 setBodyInnerHTML("<div id='first'></div><div id='second'></div>"); 290 setBodyInnerHTML("<div id='first'></div><div id='second'></div>");
268 RenderObject* first = document().body()->firstChild()->renderer(); 291 RenderObject* first = document().body()->firstChild()->renderer();
269 RenderObject* second = document().body()->firstChild()->nextSibling()->rende rer(); 292 RenderObject* second = document().body()->firstChild()->nextSibling()->rende rer();
270 GraphicsContext* context = new GraphicsContext(nullptr); 293 GraphicsContext* context = new GraphicsContext(nullptr);
271 294
272 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 50)); 295 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 50));
273 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 50, 50)); 296 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 50, 50));
274 297
275 const PaintList& firstList = renderView()->viewDisplayList().paintList(); 298 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
276 EXPECT_EQ((size_t)2, firstList.size()); 299 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
277 EXPECT_EQ(first, firstList[0]->renderer()); 300 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
278 EXPECT_EQ(first, firstList[1]->renderer());
279 301
280 renderView()->viewDisplayList().invalidate(second); 302 renderView()->viewDisplayList().invalidate(second);
281 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50)); 303 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
282 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50)); 304 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
283 305
284 const PaintList& secondList = renderView()->viewDisplayList().paintList(); 306 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 4,
285 EXPECT_EQ((size_t)4, secondList.size()); 307 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
286 EXPECT_EQ(second, secondList[0]->renderer()); 308 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline),
287 EXPECT_EQ(second, secondList[1]->renderer()); 309 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
288 EXPECT_EQ(first, secondList[2]->renderer()); 310 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
289 EXPECT_EQ(first, secondList[3]->renderer());
290 311
291 renderView()->viewDisplayList().invalidate(second); 312 renderView()->viewDisplayList().invalidate(second);
292 const PaintList& thirdList = renderView()->viewDisplayList().paintList(); 313
293 EXPECT_EQ((size_t)2, thirdList.size()); 314 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
294 EXPECT_EQ(first, thirdList[0]->renderer()); 315 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
295 EXPECT_EQ(first, thirdList[1]->renderer()); 316 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
296 } 317 }
297 318
298 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateAddLastOverlap) 319 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateAddLastOverlap)
299 { 320 {
300 setBodyInnerHTML("<div id='first'></div><div id='second'></div>"); 321 setBodyInnerHTML("<div id='first'></div><div id='second'></div>");
301 RenderObject* first = document().body()->firstChild()->renderer(); 322 RenderObject* first = document().body()->firstChild()->renderer();
302 RenderObject* second = document().body()->firstChild()->nextSibling()->rende rer(); 323 RenderObject* second = document().body()->firstChild()->nextSibling()->rende rer();
303 GraphicsContext* context = new GraphicsContext(nullptr); 324 GraphicsContext* context = new GraphicsContext(nullptr);
304 325
305 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150)); 326 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150));
306 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150)); 327 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150));
307 328
308 const PaintList& firstList = renderView()->viewDisplayList().paintList(); 329 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
309 EXPECT_EQ((size_t)2, firstList.size()); 330 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
310 EXPECT_EQ(first, firstList[0]->renderer()); 331 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
311 EXPECT_EQ(first, firstList[1]->renderer());
312 332
313 renderView()->viewDisplayList().invalidate(first); 333 renderView()->viewDisplayList().invalidate(first);
314 renderView()->viewDisplayList().invalidate(second); 334 renderView()->viewDisplayList().invalidate(second);
315 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150)); 335 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150));
316 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150)); 336 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150));
317 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50)); 337 drawRect(context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
318 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50)); 338 drawRect(context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
319 339
320 const PaintList& secondList = renderView()->viewDisplayList().paintList(); 340 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 4,
321 EXPECT_EQ((size_t)4, secondList.size()); 341 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
322 EXPECT_EQ(first, secondList[0]->renderer()); 342 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline),
323 EXPECT_EQ(first, secondList[1]->renderer()); 343 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
324 EXPECT_EQ(second, secondList[2]->renderer()); 344 TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
325 EXPECT_EQ(second, secondList[3]->renderer());
326 345
327 renderView()->viewDisplayList().invalidate(first); 346 renderView()->viewDisplayList().invalidate(first);
328 renderView()->viewDisplayList().invalidate(second); 347 renderView()->viewDisplayList().invalidate(second);
329 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150)); 348 drawRect(context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150));
330 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150)); 349 drawRect(context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150));
331 350
332 const PaintList& thirdList = renderView()->viewDisplayList().paintList(); 351 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
333 EXPECT_EQ((size_t)2, thirdList.size()); 352 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
334 EXPECT_EQ(first, thirdList[0]->renderer()); 353 TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
335 EXPECT_EQ(first, thirdList[1]->renderer()); 354 }
355
356 TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateClip)
357 {
358 setBodyInnerHTML("<div id='first'><div id='second'></div></div>");
359 RenderLayerModelObject* firstRenderer = toRenderLayerModelObject(document(). body()->firstChild()->renderer());
360 RenderLayerModelObject* secondRenderer = toRenderLayerModelObject(document() .body()->firstChild()->firstChild()->renderer());
361 GraphicsContext* context = new GraphicsContext(nullptr);
362
363 ClipRect firstClipRect(IntRect(1, 1, 2, 2));
364 {
365 ClipRecorder clipRecorder(firstRenderer, context, DisplayItem::ClipLayer Foreground, firstClipRect);
366 drawRect(context, firstRenderer, PaintPhaseBlockBackground, FloatRect(10 0, 100, 150, 150));
367 drawRect(context, secondRenderer, PaintPhaseBlockBackground, FloatRect(1 00, 100, 150, 150));
368 }
369
370 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 4,
371 TestDisplayItem(firstRenderer, DisplayItem::ClipLayerForeground),
372 TestDisplayItem(firstRenderer, DisplayItem::DrawingPaintPhaseBlockBackgr ound),
373 TestDisplayItem(secondRenderer, DisplayItem::DrawingPaintPhaseBlockBackg round),
374 TestDisplayItem(firstRenderer, DisplayItem::EndClip));
375
376 renderView()->viewDisplayList().invalidate(firstRenderer);
377 drawRect(context, firstRenderer, PaintPhaseBlockBackground, FloatRect(100, 1 00, 150, 150));
378 drawRect(context, secondRenderer, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150));
379
380 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 2,
381 TestDisplayItem(firstRenderer, DisplayItem::DrawingPaintPhaseBlockBackgr ound),
382 TestDisplayItem(secondRenderer, DisplayItem::DrawingPaintPhaseBlockBackg round));
383
384 renderView()->viewDisplayList().invalidate(secondRenderer);
385 drawRect(context, firstRenderer, PaintPhaseBlockBackground, FloatRect(100, 1 00, 150, 150));
386 ClipRect secondClipRect(IntRect(1, 1, 2, 2));
387 {
388 ClipRecorder clipRecorder(secondRenderer, context, DisplayItem::ClipLaye rForeground, secondClipRect);
389 drawRect(context, secondRenderer, PaintPhaseBlockBackground, FloatRect(1 00, 100, 150, 150));
390 }
391
392 EXPECT_DISPLAY_LIST(renderView()->viewDisplayList().paintList(), 4,
393 TestDisplayItem(firstRenderer, DisplayItem::DrawingPaintPhaseBlockBackgr ound),
394 TestDisplayItem(secondRenderer, DisplayItem::ClipLayerForeground),
395 TestDisplayItem(secondRenderer, DisplayItem::DrawingPaintPhaseBlockBackg round),
396 TestDisplayItem(secondRenderer, DisplayItem::EndClip));
336 } 397 }
337 398
338 } 399 }
339 400
340 } 401 }
OLDNEW
« no previous file with comments | « Source/core/paint/ViewDisplayList.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698