OLD | NEW |
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/tiled_layer.h" | 5 #include "cc/tiled_layer.h" |
6 | 6 |
7 #include "cc/bitmap_content_layer_updater.h" | 7 #include "cc/bitmap_content_layer_updater.h" |
8 #include "cc/layer_painter.h" | 8 #include "cc/layer_painter.h" |
9 #include "cc/overdraw_metrics.h" | 9 #include "cc/overdraw_metrics.h" |
10 #include "cc/rendering_stats.h" | 10 #include "cc/rendering_stats.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 | 23 |
24 namespace cc { | 24 namespace cc { |
25 namespace { | 25 namespace { |
26 | 26 |
27 class TestOcclusionTracker : public OcclusionTracker { | 27 class TestOcclusionTracker : public OcclusionTracker { |
28 public: | 28 public: |
29 TestOcclusionTracker() | 29 TestOcclusionTracker() |
30 : OcclusionTracker(gfx::Rect(0, 0, 1000, 1000), true) | 30 : OcclusionTracker(gfx::Rect(0, 0, 1000, 1000), true) |
31 , m_layerClipRectInTarget(gfx::Rect(0, 0, 1000, 1000)) | 31 , m_layerClipRectInTarget(gfx::Rect(0, 0, 1000, 1000)) |
32 { | 32 { |
33 // Pretend we have visited a render surface. | |
34 m_stack.push_back(StackObject()); | 33 m_stack.push_back(StackObject()); |
35 } | 34 } |
36 | 35 |
37 void setOcclusion(const Region& occlusion) { m_stack.back().occlusionInTarge
t = occlusion; } | 36 void setRenderTarget(Layer* renderTarget) |
| 37 { |
| 38 m_stack.back().target = renderTarget; |
| 39 } |
| 40 |
| 41 void setOcclusion(const Region& occlusion) { m_stack.back().occlusionFromIns
ideTarget = occlusion; } |
38 | 42 |
39 protected: | 43 protected: |
40 virtual gfx::Rect layerClipRectInTarget(const Layer* layer) const OVERRIDE {
return m_layerClipRectInTarget; } | 44 virtual gfx::Rect layerClipRectInTarget(const Layer* layer) const OVERRIDE {
return m_layerClipRectInTarget; } |
41 | 45 |
42 private: | 46 private: |
43 gfx::Rect m_layerClipRectInTarget; | 47 gfx::Rect m_layerClipRectInTarget; |
44 }; | 48 }; |
45 | 49 |
46 class TiledLayerTest : public testing::Test { | 50 class TiledLayerTest : public testing::Test { |
47 public: | 51 public: |
48 TiledLayerTest() | 52 TiledLayerTest() |
49 : m_proxy(NULL) | 53 : m_proxy(NULL) |
50 , m_outputSurface(createFakeOutputSurface()) | 54 , m_outputSurface(createFakeOutputSurface()) |
51 , m_queue(make_scoped_ptr(new ResourceUpdateQueue)) | 55 , m_queue(make_scoped_ptr(new ResourceUpdateQueue)) |
52 , m_occlusion(0) | 56 , m_occlusion(0) |
53 { | 57 { |
54 } | 58 } |
55 | 59 |
56 virtual void SetUp() | 60 virtual void SetUp() |
57 { | 61 { |
58 m_layerTreeHost = LayerTreeHost::create(&m_fakeLayerImplTreeHostClient,
m_settings, scoped_ptr<Thread>(NULL)); | 62 m_layerTreeHost = LayerTreeHost::create(&m_fakeLayerImplTreeHostClient,
m_settings, scoped_ptr<Thread>(NULL)); |
59 m_proxy = m_layerTreeHost->proxy(); | 63 m_proxy = m_layerTreeHost->proxy(); |
60 m_resourceManager = PrioritizedResourceManager::create(m_proxy); | 64 m_resourceManager = PrioritizedResourceManager::create(m_proxy); |
61 m_layerTreeHost->initializeRendererIfNeeded(); | 65 m_layerTreeHost->initializeRendererIfNeeded(); |
| 66 m_layerTreeHost->setRootLayer(Layer::create()); |
| 67 |
62 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc
ked(m_proxy); | 68 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc
ked(m_proxy); |
63 m_resourceProvider = ResourceProvider::create(m_outputSurface.get()); | 69 m_resourceProvider = ResourceProvider::create(m_outputSurface.get()); |
64 m_hostImpl = make_scoped_ptr(new FakeLayerTreeHostImpl(m_proxy)); | 70 m_hostImpl = make_scoped_ptr(new FakeLayerTreeHostImpl(m_proxy)); |
65 } | 71 } |
66 | 72 |
67 virtual ~TiledLayerTest() | 73 virtual ~TiledLayerTest() |
68 { | 74 { |
69 resourceManagerClearAllMemory(m_resourceManager.get(), m_resourceProvide
r.get()); | 75 resourceManagerClearAllMemory(m_resourceManager.get(), m_resourceProvide
r.get()); |
| 76 |
70 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc
ked(m_proxy); | 77 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc
ked(m_proxy); |
71 m_resourceProvider.reset(); | 78 m_resourceProvider.reset(); |
72 m_hostImpl.reset(); | 79 m_hostImpl.reset(); |
73 } | 80 } |
74 | 81 |
75 class ScopedFakeTiledLayerImpl { | |
76 public: | |
77 ScopedFakeTiledLayerImpl(LayerTreeImpl* treeImpl, int id) | |
78 { | |
79 m_layerImpl = new FakeTiledLayerImpl(treeImpl, id); | |
80 } | |
81 ~ScopedFakeTiledLayerImpl() | |
82 { | |
83 delete m_layerImpl; | |
84 } | |
85 FakeTiledLayerImpl* get() | |
86 { | |
87 return m_layerImpl; | |
88 } | |
89 FakeTiledLayerImpl* operator->() | |
90 { | |
91 return m_layerImpl; | |
92 } | |
93 private: | |
94 FakeTiledLayerImpl* m_layerImpl; | |
95 }; | |
96 void resourceManagerClearAllMemory(PrioritizedResourceManager* resourceManag
er, ResourceProvider* resourceProvider) | 82 void resourceManagerClearAllMemory(PrioritizedResourceManager* resourceManag
er, ResourceProvider* resourceProvider) |
97 { | 83 { |
98 { | 84 { |
99 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThread
Blocked(m_proxy); | 85 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThread
Blocked(m_proxy); |
100 resourceManager->clearAllMemory(resourceProvider); | 86 resourceManager->clearAllMemory(resourceProvider); |
101 resourceManager->reduceMemory(resourceProvider); | 87 resourceManager->reduceMemory(resourceProvider); |
102 } | 88 } |
103 resourceManager->unlinkAndClearEvictedBackings(); | 89 resourceManager->unlinkAndClearEvictedBackings(); |
104 } | 90 } |
105 void updateTextures() | 91 void updateTextures() |
(...skipping 14 matching lines...) Expand all Loading... |
120 { | 106 { |
121 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc
ked(m_proxy); | 107 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc
ked(m_proxy); |
122 layer->pushPropertiesTo(layerImpl); | 108 layer->pushPropertiesTo(layerImpl); |
123 } | 109 } |
124 void layerUpdate(FakeTiledLayer* layer, TestOcclusionTracker* occluded) | 110 void layerUpdate(FakeTiledLayer* layer, TestOcclusionTracker* occluded) |
125 { | 111 { |
126 DebugScopedSetMainThread mainThread(m_proxy); | 112 DebugScopedSetMainThread mainThread(m_proxy); |
127 layer->update(*m_queue.get(), occluded, m_stats); | 113 layer->update(*m_queue.get(), occluded, m_stats); |
128 } | 114 } |
129 | 115 |
130 bool updateAndPush(FakeTiledLayer* layer1, | 116 void calcDrawProps(const scoped_refptr<FakeTiledLayer>& layer1) |
131 FakeTiledLayerImpl* layerImpl1, | 117 { |
132 FakeTiledLayer* layer2 = 0, | 118 scoped_refptr<FakeTiledLayer> layer2; |
133 FakeTiledLayerImpl* layerImpl2 = 0) | 119 calcDrawProps(layer1, layer2); |
| 120 } |
| 121 |
| 122 void calcDrawProps(const scoped_refptr<FakeTiledLayer>& layer1, |
| 123 const scoped_refptr<FakeTiledLayer>& layer2) |
| 124 { |
| 125 if (layer1 && !layer1->parent()) |
| 126 m_layerTreeHost->rootLayer()->addChild(layer1); |
| 127 if (layer2 && !layer1->parent()) |
| 128 m_layerTreeHost->rootLayer()->addChild(layer2); |
| 129 if (m_occlusion) |
| 130 m_occlusion->setRenderTarget(m_layerTreeHost->rootLayer()); |
| 131 |
| 132 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; |
| 133 LayerTreeHostCommon::calculateDrawProperties( |
| 134 m_layerTreeHost->rootLayer(), |
| 135 m_layerTreeHost->deviceViewportSize(), |
| 136 m_layerTreeHost->deviceScaleFactor(), |
| 137 1, // page_scale_factor |
| 138 m_layerTreeHost->rendererCapabilities().maxTextureSize, |
| 139 false, // can_use_lcd_text |
| 140 renderSurfaceLayerList); |
| 141 } |
| 142 |
| 143 bool updateAndPush(const scoped_refptr<FakeTiledLayer>& layer1, |
| 144 const scoped_ptr<FakeTiledLayerImpl>& layerImpl1) |
| 145 { |
| 146 scoped_refptr<FakeTiledLayer> layer2; |
| 147 scoped_ptr<FakeTiledLayerImpl> layerImpl2; |
| 148 return updateAndPush(layer1, layerImpl1, layer2, layerImpl2); |
| 149 } |
| 150 |
| 151 bool updateAndPush(const scoped_refptr<FakeTiledLayer>& layer1, |
| 152 const scoped_ptr<FakeTiledLayerImpl>& layerImpl1, |
| 153 const scoped_refptr<FakeTiledLayer>& layer2, |
| 154 const scoped_ptr<FakeTiledLayerImpl>& layerImpl2) |
134 { | 155 { |
135 // Get textures | 156 // Get textures |
136 m_resourceManager->clearPriorities(); | 157 m_resourceManager->clearPriorities(); |
137 if (layer1) | 158 if (layer1) |
138 layer1->setTexturePriorities(m_priorityCalculator); | 159 layer1->setTexturePriorities(m_priorityCalculator); |
139 if (layer2) | 160 if (layer2) |
140 layer2->setTexturePriorities(m_priorityCalculator); | 161 layer2->setTexturePriorities(m_priorityCalculator); |
141 m_resourceManager->prioritizeTextures(); | 162 m_resourceManager->prioritizeTextures(); |
142 | 163 |
143 // Update content | 164 // Update content |
144 if (layer1) | 165 if (layer1) |
145 layer1->update(*m_queue.get(), m_occlusion, m_stats); | 166 layer1->update(*m_queue.get(), m_occlusion, m_stats); |
146 if (layer2) | 167 if (layer2) |
147 layer2->update(*m_queue.get(), m_occlusion, m_stats); | 168 layer2->update(*m_queue.get(), m_occlusion, m_stats); |
148 | 169 |
149 bool needsUpdate = false; | 170 bool needsUpdate = false; |
150 if (layer1) | 171 if (layer1) |
151 needsUpdate |= layer1->needsIdlePaint(); | 172 needsUpdate |= layer1->needsIdlePaint(); |
152 if (layer2) | 173 if (layer2) |
153 needsUpdate |= layer2->needsIdlePaint(); | 174 needsUpdate |= layer2->needsIdlePaint(); |
154 | 175 |
155 // Update textures and push. | 176 // Update textures and push. |
156 updateTextures(); | 177 updateTextures(); |
157 if (layer1) | 178 if (layer1) |
158 layerPushPropertiesTo(layer1, layerImpl1); | 179 layerPushPropertiesTo(layer1.get(), layerImpl1.get()); |
159 if (layer2) | 180 if (layer2) |
160 layerPushPropertiesTo(layer2, layerImpl2); | 181 layerPushPropertiesTo(layer2.get(), layerImpl2.get()); |
161 | 182 |
162 return needsUpdate; | 183 return needsUpdate; |
163 } | 184 } |
164 | 185 |
165 public: | 186 public: |
166 Proxy* m_proxy; | 187 Proxy* m_proxy; |
167 LayerTreeSettings m_settings; | 188 LayerTreeSettings m_settings; |
168 scoped_ptr<OutputSurface> m_outputSurface; | 189 scoped_ptr<OutputSurface> m_outputSurface; |
169 scoped_ptr<ResourceProvider> m_resourceProvider; | 190 scoped_ptr<ResourceProvider> m_resourceProvider; |
170 scoped_ptr<ResourceUpdateQueue> m_queue; | 191 scoped_ptr<ResourceUpdateQueue> m_queue; |
171 RenderingStats m_stats; | 192 RenderingStats m_stats; |
172 PriorityCalculator m_priorityCalculator; | 193 PriorityCalculator m_priorityCalculator; |
173 FakeLayerImplTreeHostClient m_fakeLayerImplTreeHostClient; | 194 FakeLayerImplTreeHostClient m_fakeLayerImplTreeHostClient; |
174 scoped_ptr<LayerTreeHost> m_layerTreeHost; | 195 scoped_ptr<LayerTreeHost> m_layerTreeHost; |
175 scoped_ptr<FakeLayerTreeHostImpl> m_hostImpl; | 196 scoped_ptr<FakeLayerTreeHostImpl> m_hostImpl; |
176 scoped_ptr<PrioritizedResourceManager> m_resourceManager; | 197 scoped_ptr<PrioritizedResourceManager> m_resourceManager; |
177 TestOcclusionTracker* m_occlusion; | 198 TestOcclusionTracker* m_occlusion; |
178 }; | 199 }; |
179 | 200 |
180 TEST_F(TiledLayerTest, pushDirtyTiles) | 201 TEST_F(TiledLayerTest, pushDirtyTiles) |
181 { | 202 { |
182 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 203 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
183 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 204 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
184 | 205 |
185 // The tile size is 100x100, so this invalidates and then paints two tiles. | 206 // The tile size is 100x100, so this invalidates and then paints two tiles. |
186 layer->setBounds(gfx::Size(100, 200)); | 207 layer->setBounds(gfx::Size(100, 200)); |
187 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 208 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
188 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); | 209 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); |
189 updateAndPush(layer.get(), layerImpl.get()); | 210 updateAndPush(layer, layerImpl); |
190 | 211 |
191 // We should have both tiles on the impl side. | 212 // We should have both tiles on the impl side. |
192 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 213 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
193 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 214 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
194 | 215 |
195 // Invalidates both tiles, but then only update one of them. | 216 // Invalidates both tiles, but then only update one of them. |
196 layer->setBounds(gfx::Size(100, 200)); | 217 layer->setBounds(gfx::Size(100, 200)); |
197 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 218 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
198 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); | 219 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); |
199 updateAndPush(layer.get(), layerImpl.get()); | 220 updateAndPush(layer, layerImpl); |
200 | 221 |
201 // We should only have the first tile since the other tile was invalidated b
ut not painted. | 222 // We should only have the first tile since the other tile was invalidated b
ut not painted. |
202 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 223 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
203 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); | 224 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); |
204 } | 225 } |
205 | 226 |
206 TEST_F(TiledLayerTest, pushOccludedDirtyTiles) | 227 TEST_F(TiledLayerTest, pushOccludedDirtyTiles) |
207 { | 228 { |
208 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 229 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
209 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 230 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
210 TestOcclusionTracker occluded; | 231 TestOcclusionTracker occluded; |
211 m_occlusion = &occluded; | 232 m_occlusion = &occluded; |
212 | 233 |
213 // The tile size is 100x100, so this invalidates and then paints two tiles. | 234 // The tile size is 100x100, so this invalidates and then paints two tiles. |
214 layer->setBounds(gfx::Size(100, 200)); | 235 layer->setBounds(gfx::Size(100, 200)); |
215 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 236 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
216 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 100, 200); | 237 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 100, 200); |
217 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); | 238 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); |
218 updateAndPush(layer.get(), layerImpl.get()); | 239 updateAndPush(layer, layerImpl); |
219 | 240 |
220 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 241 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
221 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); | 242 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); |
222 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 243 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
223 | 244 |
224 // We should have both tiles on the impl side. | 245 // We should have both tiles on the impl side. |
225 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 246 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
226 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 247 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
227 | 248 |
228 // Invalidates part of the top tile... | 249 // Invalidates part of the top tile... |
229 layer->invalidateContentRect(gfx::Rect(0, 0, 50, 50)); | 250 layer->invalidateContentRect(gfx::Rect(0, 0, 50, 50)); |
230 // ....but the area is occluded. | 251 // ....but the area is occluded. |
231 occluded.setOcclusion(gfx::Rect(0, 0, 50, 50)); | 252 occluded.setOcclusion(gfx::Rect(0, 0, 50, 50)); |
232 updateAndPush(layer.get(), layerImpl.get()); | 253 updateAndPush(layer, layerImpl); |
233 | 254 |
234 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 255 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
235 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
2500, 1); | 256 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
2500, 1); |
236 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 257 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
237 | 258 |
238 // We should still have both tiles, as part of the top tile is still unocclu
ded. | 259 // We should still have both tiles, as part of the top tile is still unocclu
ded. |
239 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 260 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
240 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 261 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
241 } | 262 } |
242 | 263 |
243 TEST_F(TiledLayerTest, pushDeletedTiles) | 264 TEST_F(TiledLayerTest, pushDeletedTiles) |
244 { | 265 { |
245 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 266 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
246 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 267 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
247 | 268 |
248 // The tile size is 100x100, so this invalidates and then paints two tiles. | 269 // The tile size is 100x100, so this invalidates and then paints two tiles. |
249 layer->setBounds(gfx::Size(100, 200)); | 270 layer->setBounds(gfx::Size(100, 200)); |
250 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 271 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
251 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); | 272 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); |
252 updateAndPush(layer.get(), layerImpl.get()); | 273 updateAndPush(layer, layerImpl); |
253 | 274 |
254 // We should have both tiles on the impl side. | 275 // We should have both tiles on the impl side. |
255 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 276 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
256 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 277 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
257 | 278 |
258 m_resourceManager->clearPriorities(); | 279 m_resourceManager->clearPriorities(); |
259 resourceManagerClearAllMemory(m_resourceManager.get(), m_resourceProvider.ge
t()); | 280 resourceManagerClearAllMemory(m_resourceManager.get(), m_resourceProvider.ge
t()); |
260 m_resourceManager->setMaxMemoryLimitBytes(4*1024*1024); | 281 m_resourceManager->setMaxMemoryLimitBytes(4*1024*1024); |
261 | 282 |
262 // This should drop the tiles on the impl thread. | 283 // This should drop the tiles on the impl thread. |
263 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 284 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
264 | 285 |
265 // We should now have no textures on the impl thread. | 286 // We should now have no textures on the impl thread. |
266 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0)); | 287 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0)); |
267 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); | 288 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); |
268 | 289 |
269 // This should recreate and update one of the deleted textures. | 290 // This should recreate and update one of the deleted textures. |
270 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 291 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
271 updateAndPush(layer.get(), layerImpl.get()); | 292 updateAndPush(layer, layerImpl); |
272 | 293 |
273 // We should have one tiles on the impl side. | 294 // We should have one tiles on the impl side. |
274 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 295 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
275 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); | 296 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); |
276 } | 297 } |
277 | 298 |
278 TEST_F(TiledLayerTest, pushIdlePaintTiles) | 299 TEST_F(TiledLayerTest, pushIdlePaintTiles) |
279 { | 300 { |
280 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 301 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
281 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 302 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
282 | 303 |
283 // The tile size is 100x100. Setup 5x5 tiles with one visible tile in the ce
nter. | 304 // The tile size is 100x100. Setup 5x5 tiles with one visible tile in the ce
nter. |
284 // This paints 1 visible of the 25 invalid tiles. | 305 // This paints 1 visible of the 25 invalid tiles. |
285 layer->setBounds(gfx::Size(500, 500)); | 306 layer->setBounds(gfx::Size(500, 500)); |
286 layer->drawProperties().visible_content_rect = gfx::Rect(200, 200, 100, 100)
; | 307 layer->drawProperties().visible_content_rect = gfx::Rect(200, 200, 100, 100)
; |
287 layer->invalidateContentRect(gfx::Rect(0, 0, 500, 500)); | 308 layer->invalidateContentRect(gfx::Rect(0, 0, 500, 500)); |
288 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 309 bool needsUpdate = updateAndPush(layer, layerImpl); |
289 // We should need idle-painting for surrounding tiles. | 310 // We should need idle-painting for surrounding tiles. |
290 EXPECT_TRUE(needsUpdate); | 311 EXPECT_TRUE(needsUpdate); |
291 | 312 |
292 // We should have one tile on the impl side. | 313 // We should have one tile on the impl side. |
293 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(2, 2)); | 314 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(2, 2)); |
294 | 315 |
295 // For the next four updates, we should detect we still need idle painting. | 316 // For the next four updates, we should detect we still need idle painting. |
296 for (int i = 0; i < 4; i++) { | 317 for (int i = 0; i < 4; i++) { |
297 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 318 needsUpdate = updateAndPush(layer, layerImpl); |
298 EXPECT_TRUE(needsUpdate); | 319 EXPECT_TRUE(needsUpdate); |
299 } | 320 } |
300 | 321 |
301 // We should always finish painting eventually. | 322 // We should always finish painting eventually. |
302 for (int i = 0; i < 20; i++) | 323 for (int i = 0; i < 20; i++) |
303 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 324 needsUpdate = updateAndPush(layer, layerImpl); |
304 | 325 |
305 // We should have pre-painted all of the surrounding tiles. | 326 // We should have pre-painted all of the surrounding tiles. |
306 for (int i = 0; i < 5; i++) { | 327 for (int i = 0; i < 5; i++) { |
307 for (int j = 0; j < 5; j++) | 328 for (int j = 0; j < 5; j++) |
308 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(i, j)); | 329 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(i, j)); |
309 } | 330 } |
310 | 331 |
311 EXPECT_FALSE(needsUpdate); | 332 EXPECT_FALSE(needsUpdate); |
312 } | 333 } |
313 | 334 |
314 TEST_F(TiledLayerTest, predictivePainting) | 335 TEST_F(TiledLayerTest, predictivePainting) |
315 { | 336 { |
316 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 337 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
317 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 338 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
318 | 339 |
319 // Prepainting should occur in the scroll direction first, and the | 340 // Prepainting should occur in the scroll direction first, and the |
320 // visible rect should be extruded only along the dominant axis. | 341 // visible rect should be extruded only along the dominant axis. |
321 gfx::Vector2d directions[6] = { gfx::Vector2d(-10, 0), | 342 gfx::Vector2d directions[6] = { gfx::Vector2d(-10, 0), |
322 gfx::Vector2d(10, 0), | 343 gfx::Vector2d(10, 0), |
323 gfx::Vector2d(0, -10), | 344 gfx::Vector2d(0, -10), |
324 gfx::Vector2d(0, 10), | 345 gfx::Vector2d(0, 10), |
325 gfx::Vector2d(10, 20), | 346 gfx::Vector2d(10, 20), |
326 gfx::Vector2d(-20, 10) }; | 347 gfx::Vector2d(-20, 10) }; |
327 // We should push all tiles that touch the extruded visible rect. | 348 // We should push all tiles that touch the extruded visible rect. |
(...skipping 17 matching lines...) Expand all Loading... |
345 gfx::Size contentBounds = gfx::Size(500, 500); | 366 gfx::Size contentBounds = gfx::Size(500, 500); |
346 gfx::Rect contentRect = gfx::Rect(0, 0, 500, 500); | 367 gfx::Rect contentRect = gfx::Rect(0, 0, 500, 500); |
347 gfx::Rect visibleRect = gfx::Rect(200, 200, 100, 100); | 368 gfx::Rect visibleRect = gfx::Rect(200, 200, 100, 100); |
348 gfx::Rect previousVisibleRect = gfx::Rect(visibleRect.origin() + directi
ons[k], visibleRect.size()); | 369 gfx::Rect previousVisibleRect = gfx::Rect(visibleRect.origin() + directi
ons[k], visibleRect.size()); |
349 gfx::Rect nextVisibleRect = gfx::Rect(visibleRect.origin() - directions[
k], visibleRect.size()); | 370 gfx::Rect nextVisibleRect = gfx::Rect(visibleRect.origin() - directions[
k], visibleRect.size()); |
350 | 371 |
351 // Setup. Use the previousVisibleRect to setup the prediction for next f
rame. | 372 // Setup. Use the previousVisibleRect to setup the prediction for next f
rame. |
352 layer->setBounds(contentBounds); | 373 layer->setBounds(contentBounds); |
353 layer->drawProperties().visible_content_rect = previousVisibleRect; | 374 layer->drawProperties().visible_content_rect = previousVisibleRect; |
354 layer->invalidateContentRect(contentRect); | 375 layer->invalidateContentRect(contentRect); |
355 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 376 bool needsUpdate = updateAndPush(layer, layerImpl); |
356 | 377 |
357 // Invalidate and move the visibleRect in the scroll direction. | 378 // Invalidate and move the visibleRect in the scroll direction. |
358 // Check that the correct tiles have been painted in the visible pass. | 379 // Check that the correct tiles have been painted in the visible pass. |
359 layer->invalidateContentRect(contentRect); | 380 layer->invalidateContentRect(contentRect); |
360 layer->drawProperties().visible_content_rect = visibleRect; | 381 layer->drawProperties().visible_content_rect = visibleRect; |
361 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 382 needsUpdate = updateAndPush(layer, layerImpl); |
362 for (int i = 0; i < 5; i++) { | 383 for (int i = 0; i < 5; i++) { |
363 for (int j = 0; j < 5; j++) | 384 for (int j = 0; j < 5; j++) |
364 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), pushedVisible
Tiles[k].Contains(i, j)); | 385 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), pushedVisible
Tiles[k].Contains(i, j)); |
365 } | 386 } |
366 | 387 |
367 // Move the transform in the same direction without invalidating. | 388 // Move the transform in the same direction without invalidating. |
368 // Check that non-visible pre-painting occured in the correct direction. | 389 // Check that non-visible pre-painting occured in the correct direction. |
369 // Ignore diagonal scrolls here (k > 3) as these have new visible conten
t now. | 390 // Ignore diagonal scrolls here (k > 3) as these have new visible conten
t now. |
370 if (k <= 3) { | 391 if (k <= 3) { |
371 layer->drawProperties().visible_content_rect = nextVisibleRect; | 392 layer->drawProperties().visible_content_rect = nextVisibleRect; |
372 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 393 needsUpdate = updateAndPush(layer, layerImpl); |
373 for (int i = 0; i < 5; i++) { | 394 for (int i = 0; i < 5; i++) { |
374 for (int j = 0; j < 5; j++) | 395 for (int j = 0; j < 5; j++) |
375 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), pushedPre
paintTiles[k].Contains(i, j)); | 396 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), pushedPre
paintTiles[k].Contains(i, j)); |
376 } | 397 } |
377 } | 398 } |
378 | 399 |
379 // We should always finish painting eventually. | 400 // We should always finish painting eventually. |
380 for (int i = 0; i < 20; i++) | 401 for (int i = 0; i < 20; i++) |
381 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 402 needsUpdate = updateAndPush(layer, layerImpl); |
382 EXPECT_FALSE(needsUpdate); | 403 EXPECT_FALSE(needsUpdate); |
383 } | 404 } |
384 } | 405 } |
385 | 406 |
386 TEST_F(TiledLayerTest, pushTilesAfterIdlePaintFailed) | 407 TEST_F(TiledLayerTest, pushTilesAfterIdlePaintFailed) |
387 { | 408 { |
388 // Start with 2mb of memory, but the test is going to try to use just more t
han 1mb, so we reduce to 1mb later. | 409 // Start with 2mb of memory, but the test is going to try to use just more t
han 1mb, so we reduce to 1mb later. |
389 m_resourceManager->setMaxMemoryLimitBytes(2 * 1024 * 1024); | 410 m_resourceManager->setMaxMemoryLimitBytes(2 * 1024 * 1024); |
390 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); | 411 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); |
391 ScopedFakeTiledLayerImpl layerImpl1(m_hostImpl->activeTree(), 1); | 412 scoped_ptr<FakeTiledLayerImpl> layerImpl1 = make_scoped_ptr(new FakeTiledLay
erImpl(m_hostImpl->activeTree(), 1)); |
392 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); | 413 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); |
393 ScopedFakeTiledLayerImpl layerImpl2(m_hostImpl->activeTree(), 2); | 414 scoped_ptr<FakeTiledLayerImpl> layerImpl2 = make_scoped_ptr(new FakeTiledLay
erImpl(m_hostImpl->activeTree(), 2)); |
394 | 415 |
395 // For this test we have two layers. layer1 exhausts most texture memory, le
aving room for 2 more tiles from | 416 // For this test we have two layers. layer1 exhausts most texture memory, le
aving room for 2 more tiles from |
396 // layer2, but not all three tiles. First we paint layer1, and one tile from
layer2. Then when we idle paint | 417 // layer2, but not all three tiles. First we paint layer1, and one tile from
layer2. Then when we idle paint |
397 // layer2, we will fail on the third tile of layer2, and this should not lea
ve the second tile in a bad state. | 418 // layer2, we will fail on the third tile of layer2, and this should not lea
ve the second tile in a bad state. |
398 | 419 |
399 // This uses 960000 bytes, leaving 88576 bytes of memory left, which is enou
gh for 2 tiles only in the other layer. | 420 // This uses 960000 bytes, leaving 88576 bytes of memory left, which is enou
gh for 2 tiles only in the other layer. |
400 gfx::Rect layer1Rect(0, 0, 100, 2400); | 421 gfx::Rect layer1Rect(0, 0, 100, 2400); |
401 | 422 |
402 // This requires 4*30000 bytes of memory. | 423 // This requires 4*30000 bytes of memory. |
403 gfx::Rect layer2Rect(0, 0, 100, 300); | 424 gfx::Rect layer2Rect(0, 0, 100, 300); |
404 | 425 |
405 // Paint a single tile in layer2 so that it will idle paint. | 426 // Paint a single tile in layer2 so that it will idle paint. |
406 layer1->setBounds(layer1Rect.size()); | 427 layer1->setBounds(layer1Rect.size()); |
407 layer1->drawProperties().visible_content_rect = layer1Rect; | 428 layer1->drawProperties().visible_content_rect = layer1Rect; |
408 layer2->setBounds(layer2Rect.size()); | 429 layer2->setBounds(layer2Rect.size()); |
409 layer2->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 430 layer2->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
410 bool needsUpdate = updateAndPush(layer1.get(), layerImpl1.get(), | 431 bool needsUpdate = updateAndPush(layer1, layerImpl1, |
411 layer2.get(), layerImpl2.get()); | 432 layer2, layerImpl2); |
412 // We should need idle-painting for both remaining tiles in layer2. | 433 // We should need idle-painting for both remaining tiles in layer2. |
413 EXPECT_TRUE(needsUpdate); | 434 EXPECT_TRUE(needsUpdate); |
414 | 435 |
415 // Reduce our memory limits to 1mb. | 436 // Reduce our memory limits to 1mb. |
416 m_resourceManager->setMaxMemoryLimitBytes(1024 * 1024); | 437 m_resourceManager->setMaxMemoryLimitBytes(1024 * 1024); |
417 | 438 |
418 // Now idle paint layer2. We are going to run out of memory though! | 439 // Now idle paint layer2. We are going to run out of memory though! |
419 // Oh well, commit the frame and push. | 440 // Oh well, commit the frame and push. |
420 for (int i = 0; i < 4; i++) { | 441 for (int i = 0; i < 4; i++) { |
421 needsUpdate = updateAndPush(layer1.get(), layerImpl1.get(), | 442 needsUpdate = updateAndPush(layer1, layerImpl1, |
422 layer2.get(), layerImpl2.get()); | 443 layer2, layerImpl2); |
423 } | 444 } |
424 | 445 |
425 // Sanity check, we should have textures for the big layer. | 446 // Sanity check, we should have textures for the big layer. |
426 EXPECT_TRUE(layerImpl1->hasResourceIdForTileAt(0, 0)); | 447 EXPECT_TRUE(layerImpl1->hasResourceIdForTileAt(0, 0)); |
427 EXPECT_TRUE(layerImpl1->hasResourceIdForTileAt(0, 23)); | 448 EXPECT_TRUE(layerImpl1->hasResourceIdForTileAt(0, 23)); |
428 | 449 |
429 // We should only have the first two tiles from layer2 since | 450 // We should only have the first two tiles from layer2 since |
430 // it failed to idle update the last tile. | 451 // it failed to idle update the last tile. |
431 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 0)); | 452 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 0)); |
432 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 0)); | 453 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 0)); |
433 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 1)); | 454 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 1)); |
434 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 1)); | 455 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 1)); |
435 | 456 |
436 EXPECT_FALSE(needsUpdate); | 457 EXPECT_FALSE(needsUpdate); |
437 EXPECT_FALSE(layerImpl2->hasResourceIdForTileAt(0, 2)); | 458 EXPECT_FALSE(layerImpl2->hasResourceIdForTileAt(0, 2)); |
438 } | 459 } |
439 | 460 |
440 TEST_F(TiledLayerTest, pushIdlePaintedOccludedTiles) | 461 TEST_F(TiledLayerTest, pushIdlePaintedOccludedTiles) |
441 { | 462 { |
442 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 463 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
443 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 464 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
444 TestOcclusionTracker occluded; | 465 TestOcclusionTracker occluded; |
445 m_occlusion = &occluded; | 466 m_occlusion = &occluded; |
446 | 467 |
447 // The tile size is 100x100, so this invalidates one occluded tile, culls it
during paint, but prepaints it. | 468 // The tile size is 100x100, so this invalidates one occluded tile, culls it
during paint, but prepaints it. |
448 occluded.setOcclusion(gfx::Rect(0, 0, 100, 100)); | 469 occluded.setOcclusion(gfx::Rect(0, 0, 100, 100)); |
449 | 470 |
450 layer->setBounds(gfx::Size(100, 100)); | 471 layer->setBounds(gfx::Size(100, 100)); |
| 472 calcDrawProps(layer); |
451 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 473 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
452 updateAndPush(layer.get(), layerImpl.get()); | 474 updateAndPush(layer, layerImpl); |
453 | 475 |
454 // We should have the prepainted tile on the impl side, but culled it during
paint. | 476 // We should have the prepainted tile on the impl side, but culled it during
paint. |
455 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 477 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
456 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); | 478 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); |
457 } | 479 } |
458 | 480 |
459 TEST_F(TiledLayerTest, pushTilesMarkedDirtyDuringPaint) | 481 TEST_F(TiledLayerTest, pushTilesMarkedDirtyDuringPaint) |
460 { | 482 { |
461 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 483 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
462 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 484 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
463 | 485 |
464 // The tile size is 100x100, so this invalidates and then paints two tiles. | 486 // The tile size is 100x100, so this invalidates and then paints two tiles. |
465 // However, during the paint, we invalidate one of the tiles. This should | 487 // However, during the paint, we invalidate one of the tiles. This should |
466 // not prevent the tile from being pushed. | 488 // not prevent the tile from being pushed. |
467 layer->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), la
yer.get()); | 489 layer->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), la
yer.get()); |
468 layer->setBounds(gfx::Size(100, 200)); | 490 layer->setBounds(gfx::Size(100, 200)); |
| 491 calcDrawProps(layer); |
469 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 492 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
470 updateAndPush(layer.get(), layerImpl.get()); | 493 updateAndPush(layer, layerImpl); |
471 | 494 |
472 // We should have both tiles on the impl side. | 495 // We should have both tiles on the impl side. |
473 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 496 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
474 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 497 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
475 } | 498 } |
476 | 499 |
477 TEST_F(TiledLayerTest, pushTilesLayerMarkedDirtyDuringPaintOnNextLayer) | 500 TEST_F(TiledLayerTest, pushTilesLayerMarkedDirtyDuringPaintOnNextLayer) |
478 { | 501 { |
479 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); | 502 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); |
480 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); | 503 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); |
481 ScopedFakeTiledLayerImpl layer1Impl(m_hostImpl->activeTree(), 1); | 504 scoped_ptr<FakeTiledLayerImpl> layer1Impl = make_scoped_ptr(new FakeTiledLay
erImpl(m_hostImpl->activeTree(), 1)); |
482 ScopedFakeTiledLayerImpl layer2Impl(m_hostImpl->activeTree(), 2); | 505 scoped_ptr<FakeTiledLayerImpl> layer2Impl = make_scoped_ptr(new FakeTiledLay
erImpl(m_hostImpl->activeTree(), 2)); |
483 | 506 |
484 // Invalidate a tile on layer1, during update of layer 2. | 507 // Invalidate a tile on layer1, during update of layer 2. |
485 layer2->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), l
ayer1.get()); | 508 layer2->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), l
ayer1.get()); |
486 layer1->setBounds(gfx::Size(100, 200)); | 509 layer1->setBounds(gfx::Size(100, 200)); |
| 510 layer2->setBounds(gfx::Size(100, 200)); |
| 511 calcDrawProps(layer1, layer2); |
487 layer1->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 512 layer1->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
488 layer2->setBounds(gfx::Size(100, 200)); | |
489 layer2->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 513 layer2->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
490 updateAndPush(layer1.get(), layer1Impl.get(), | 514 updateAndPush(layer1, layer1Impl, |
491 layer2.get(), layer2Impl.get()); | 515 layer2, layer2Impl); |
492 | 516 |
493 // We should have both tiles on the impl side for all layers. | 517 // We should have both tiles on the impl side for all layers. |
494 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 0)); | 518 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 0)); |
495 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 1)); | 519 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 1)); |
496 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 0)); | 520 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 0)); |
497 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 1)); | 521 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 1)); |
498 } | 522 } |
499 | 523 |
500 TEST_F(TiledLayerTest, pushTilesLayerMarkedDirtyDuringPaintOnPreviousLayer) | 524 TEST_F(TiledLayerTest, pushTilesLayerMarkedDirtyDuringPaintOnPreviousLayer) |
501 { | 525 { |
502 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); | 526 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); |
503 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); | 527 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer
(m_resourceManager.get())); |
504 ScopedFakeTiledLayerImpl layer1Impl(m_hostImpl->activeTree(), 1); | 528 scoped_ptr<FakeTiledLayerImpl> layer1Impl = make_scoped_ptr(new FakeTiledLay
erImpl(m_hostImpl->activeTree(), 1)); |
505 ScopedFakeTiledLayerImpl layer2Impl(m_hostImpl->activeTree(), 2); | 529 scoped_ptr<FakeTiledLayerImpl> layer2Impl = make_scoped_ptr(new FakeTiledLay
erImpl(m_hostImpl->activeTree(), 2)); |
506 | 530 |
507 layer1->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), l
ayer2.get()); | 531 layer1->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), l
ayer2.get()); |
508 layer1->setBounds(gfx::Size(100, 200)); | 532 layer1->setBounds(gfx::Size(100, 200)); |
| 533 layer2->setBounds(gfx::Size(100, 200)); |
| 534 calcDrawProps(layer1, layer2); |
509 layer1->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 535 layer1->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
510 layer2->setBounds(gfx::Size(100, 200)); | |
511 layer2->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 536 layer2->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
512 updateAndPush(layer1.get(), layer1Impl.get(), | 537 updateAndPush(layer1, layer1Impl, |
513 layer2.get(), layer2Impl.get()); | 538 layer2, layer2Impl); |
514 | 539 |
515 // We should have both tiles on the impl side for all layers. | 540 // We should have both tiles on the impl side for all layers. |
516 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 0)); | 541 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 0)); |
517 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 1)); | 542 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 1)); |
518 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 0)); | 543 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 0)); |
519 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 1)); | 544 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 1)); |
520 } | 545 } |
521 | 546 |
522 TEST_F(TiledLayerTest, paintSmallAnimatedLayersImmediately) | 547 TEST_F(TiledLayerTest, paintSmallAnimatedLayersImmediately) |
523 { | 548 { |
(...skipping 12 matching lines...) Expand all Loading... |
536 int memoryForLayer = layerWidth * layerHeight * 4; | 561 int memoryForLayer = layerWidth * layerHeight * 4; |
537 layerTreeHost->setViewportSize(gfx::Size(layerWidth, layerHeight), gfx::
Size(layerWidth, layerHeight)); | 562 layerTreeHost->setViewportSize(gfx::Size(layerWidth, layerHeight), gfx::
Size(layerWidth, layerHeight)); |
538 | 563 |
539 // Use 10x5 tiles to run out of memory. | 564 // Use 10x5 tiles to run out of memory. |
540 if (runOutOfMemory[i]) | 565 if (runOutOfMemory[i]) |
541 layerWidth *= 2; | 566 layerWidth *= 2; |
542 | 567 |
543 m_resourceManager->setMaxMemoryLimitBytes(memoryForLayer); | 568 m_resourceManager->setMaxMemoryLimitBytes(memoryForLayer); |
544 | 569 |
545 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLa
yer(m_resourceManager.get())); | 570 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLa
yer(m_resourceManager.get())); |
546 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 571 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiled
LayerImpl(m_hostImpl->activeTree(), 1)); |
547 | 572 |
548 // Full size layer with half being visible. | 573 // Full size layer with half being visible. |
549 gfx::Size contentBounds(layerWidth, layerHeight); | 574 gfx::Size contentBounds(layerWidth, layerHeight); |
550 gfx::Rect contentRect(gfx::Point(), contentBounds); | 575 gfx::Rect contentRect(gfx::Point(), contentBounds); |
551 gfx::Rect visibleRect(gfx::Point(), gfx::Size(layerWidth / 2, layerHeigh
t)); | 576 gfx::Rect visibleRect(gfx::Point(), gfx::Size(layerWidth / 2, layerHeigh
t)); |
552 | 577 |
553 // Pretend the layer is animating. | 578 // Pretend the layer is animating. |
554 layer->drawProperties().target_space_transform_is_animating = true; | 579 layer->drawProperties().target_space_transform_is_animating = true; |
555 layer->setBounds(contentBounds); | 580 layer->setBounds(contentBounds); |
556 layer->drawProperties().visible_content_rect = visibleRect; | 581 layer->drawProperties().visible_content_rect = visibleRect; |
(...skipping 21 matching lines...) Expand all Loading... |
578 for (int j = 0; j < 5; ++j) | 603 for (int j = 0; j < 5; ++j) |
579 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), i < 5); | 604 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), i < 5); |
580 } | 605 } |
581 } | 606 } |
582 } | 607 } |
583 } | 608 } |
584 | 609 |
585 TEST_F(TiledLayerTest, idlePaintOutOfMemory) | 610 TEST_F(TiledLayerTest, idlePaintOutOfMemory) |
586 { | 611 { |
587 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 612 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
588 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 613 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
589 | 614 |
590 // We have enough memory for only the visible rect, so we will run out of me
mory in first idle paint. | 615 // We have enough memory for only the visible rect, so we will run out of me
mory in first idle paint. |
591 int memoryLimit = 4 * 100 * 100; // 1 tiles, 4 bytes per pixel. | 616 int memoryLimit = 4 * 100 * 100; // 1 tiles, 4 bytes per pixel. |
592 m_resourceManager->setMaxMemoryLimitBytes(memoryLimit); | 617 m_resourceManager->setMaxMemoryLimitBytes(memoryLimit); |
593 | 618 |
594 // The tile size is 100x100, so this invalidates and then paints two tiles. | 619 // The tile size is 100x100, so this invalidates and then paints two tiles. |
595 bool needsUpdate = false; | 620 bool needsUpdate = false; |
596 layer->setBounds(gfx::Size(300, 300)); | 621 layer->setBounds(gfx::Size(300, 300)); |
| 622 calcDrawProps(layer); |
597 layer->drawProperties().visible_content_rect = gfx::Rect(100, 100, 100, 100)
; | 623 layer->drawProperties().visible_content_rect = gfx::Rect(100, 100, 100, 100)
; |
598 for (int i = 0; i < 2; i++) | 624 for (int i = 0; i < 2; i++) |
599 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 625 needsUpdate = updateAndPush(layer, layerImpl); |
600 | 626 |
601 // Idle-painting should see no more priority tiles for painting. | 627 // Idle-painting should see no more priority tiles for painting. |
602 EXPECT_FALSE(needsUpdate); | 628 EXPECT_FALSE(needsUpdate); |
603 | 629 |
604 // We should have one tile on the impl side. | 630 // We should have one tile on the impl side. |
605 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 1)); | 631 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 1)); |
606 } | 632 } |
607 | 633 |
608 TEST_F(TiledLayerTest, idlePaintZeroSizedLayer) | 634 TEST_F(TiledLayerTest, idlePaintZeroSizedLayer) |
609 { | 635 { |
610 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 636 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
611 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 637 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
612 | 638 |
613 bool animating[2] = {false, true}; | 639 bool animating[2] = {false, true}; |
614 for (int i = 0; i < 2; i++) { | 640 for (int i = 0; i < 2; i++) { |
615 // Pretend the layer is animating. | 641 // Pretend the layer is animating. |
616 layer->drawProperties().target_space_transform_is_animating = animating[
i]; | 642 layer->drawProperties().target_space_transform_is_animating = animating[
i]; |
617 | 643 |
618 // The layer's bounds are empty. | 644 // The layer's bounds are empty. |
619 // Empty layers don't paint or idle-paint. | 645 // Empty layers don't paint or idle-paint. |
620 layer->setBounds(gfx::Size()); | 646 layer->setBounds(gfx::Size()); |
| 647 calcDrawProps(layer); |
621 layer->drawProperties().visible_content_rect = gfx::Rect(); | 648 layer->drawProperties().visible_content_rect = gfx::Rect(); |
622 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 649 bool needsUpdate = updateAndPush(layer, layerImpl); |
623 | 650 |
624 // Empty layers don't have tiles. | 651 // Empty layers don't have tiles. |
625 EXPECT_EQ(0u, layer->numPaintedTiles()); | 652 EXPECT_EQ(0u, layer->numPaintedTiles()); |
626 | 653 |
627 // Empty layers don't need prepaint. | 654 // Empty layers don't need prepaint. |
628 EXPECT_FALSE(needsUpdate); | 655 EXPECT_FALSE(needsUpdate); |
629 | 656 |
630 // Empty layers don't have tiles. | 657 // Empty layers don't have tiles. |
631 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0)); | 658 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0)); |
632 } | 659 } |
633 } | 660 } |
634 | 661 |
635 TEST_F(TiledLayerTest, idlePaintNonVisibleLayers) | 662 TEST_F(TiledLayerTest, idlePaintNonVisibleLayers) |
636 { | 663 { |
637 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 664 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
638 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 665 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
639 | 666 |
640 // Alternate between not visible and visible. | 667 // Alternate between not visible and visible. |
641 gfx::Rect v(0, 0, 100, 100); | 668 gfx::Rect v(0, 0, 100, 100); |
642 gfx::Rect nv(0, 0, 0, 0); | 669 gfx::Rect nv(0, 0, 0, 0); |
643 gfx::Rect visibleRect[10] = {nv, nv, v, v, nv, nv, v, v, nv, nv}; | 670 gfx::Rect visibleRect[10] = {nv, nv, v, v, nv, nv, v, v, nv, nv}; |
644 bool invalidate[10] = {true, true, true, true, true, true, true, true, fals
e, false }; | 671 bool invalidate[10] = {true, true, true, true, true, true, true, true, fals
e, false }; |
645 | 672 |
646 // We should not have any tiles except for when the layer was visible | 673 // We should not have any tiles except for when the layer was visible |
647 // or after the layer was visible and we didn't invalidate. | 674 // or after the layer was visible and we didn't invalidate. |
648 bool haveTile[10] = { false, false, true, true, false, false, true, true, tr
ue, true }; | 675 bool haveTile[10] = { false, false, true, true, false, false, true, true, tr
ue, true }; |
649 | 676 |
650 for (int i = 0; i < 10; i++) { | 677 for (int i = 0; i < 10; i++) { |
651 layer->setBounds(gfx::Size(100, 100)); | 678 layer->setBounds(gfx::Size(100, 100)); |
| 679 calcDrawProps(layer); |
652 layer->drawProperties().visible_content_rect = visibleRect[i]; | 680 layer->drawProperties().visible_content_rect = visibleRect[i]; |
653 | 681 |
654 if (invalidate[i]) | 682 if (invalidate[i]) |
655 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 100)); | 683 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 100)); |
656 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 684 bool needsUpdate = updateAndPush(layer, layerImpl); |
657 | 685 |
658 // We should never signal idle paint, as we painted the entire layer | 686 // We should never signal idle paint, as we painted the entire layer |
659 // or the layer was not visible. | 687 // or the layer was not visible. |
660 EXPECT_FALSE(needsUpdate); | 688 EXPECT_FALSE(needsUpdate); |
661 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(0, 0), haveTile[i]); | 689 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(0, 0), haveTile[i]); |
662 } | 690 } |
663 } | 691 } |
664 | 692 |
665 TEST_F(TiledLayerTest, invalidateFromPrepare) | 693 TEST_F(TiledLayerTest, invalidateFromPrepare) |
666 { | 694 { |
667 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 695 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
668 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 696 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
669 | 697 |
670 // The tile size is 100x100, so this invalidates and then paints two tiles. | 698 // The tile size is 100x100, so this invalidates and then paints two tiles. |
671 layer->setBounds(gfx::Size(100, 200)); | 699 layer->setBounds(gfx::Size(100, 200)); |
| 700 calcDrawProps(layer); |
672 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 701 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
673 updateAndPush(layer.get(), layerImpl.get()); | 702 updateAndPush(layer, layerImpl); |
674 | 703 |
675 // We should have both tiles on the impl side. | 704 // We should have both tiles on the impl side. |
676 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 705 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
677 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 706 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
678 | 707 |
679 layer->fakeLayerUpdater()->clearPrepareCount(); | 708 layer->fakeLayerUpdater()->clearPrepareCount(); |
680 // Invoke update again. As the layer is valid update shouldn't be invoked on | 709 // Invoke update again. As the layer is valid update shouldn't be invoked on |
681 // the LayerUpdater. | 710 // the LayerUpdater. |
682 updateAndPush(layer.get(), layerImpl.get()); | 711 updateAndPush(layer, layerImpl); |
683 EXPECT_EQ(0, layer->fakeLayerUpdater()->prepareCount()); | 712 EXPECT_EQ(0, layer->fakeLayerUpdater()->prepareCount()); |
684 | 713 |
685 // setRectToInvalidate triggers invalidateContentRect() being invoked from u
pdate. | 714 // setRectToInvalidate triggers invalidateContentRect() being invoked from u
pdate. |
686 layer->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(25, 25, 50, 50), la
yer.get()); | 715 layer->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(25, 25, 50, 50), la
yer.get()); |
687 layer->fakeLayerUpdater()->clearPrepareCount(); | 716 layer->fakeLayerUpdater()->clearPrepareCount(); |
688 layer->invalidateContentRect(gfx::Rect(0, 0, 50, 50)); | 717 layer->invalidateContentRect(gfx::Rect(0, 0, 50, 50)); |
689 updateAndPush(layer.get(), layerImpl.get()); | 718 updateAndPush(layer, layerImpl); |
690 EXPECT_EQ(1, layer->fakeLayerUpdater()->prepareCount()); | 719 EXPECT_EQ(1, layer->fakeLayerUpdater()->prepareCount()); |
691 layer->fakeLayerUpdater()->clearPrepareCount(); | 720 layer->fakeLayerUpdater()->clearPrepareCount(); |
692 | 721 |
693 // The layer should still be invalid as update invoked invalidate. | 722 // The layer should still be invalid as update invoked invalidate. |
694 updateAndPush(layer.get(), layerImpl.get()); // visible | 723 updateAndPush(layer, layerImpl); // visible |
695 EXPECT_EQ(1, layer->fakeLayerUpdater()->prepareCount()); | 724 EXPECT_EQ(1, layer->fakeLayerUpdater()->prepareCount()); |
696 } | 725 } |
697 | 726 |
698 TEST_F(TiledLayerTest, verifyUpdateRectWhenContentBoundsAreScaled) | 727 TEST_F(TiledLayerTest, verifyUpdateRectWhenContentBoundsAreScaled) |
699 { | 728 { |
700 // The updateRect (that indicates what was actually painted) should be in | 729 // The updateRect (that indicates what was actually painted) should be in |
701 // layer space, not the content space. | 730 // layer space, not the content space. |
702 scoped_refptr<FakeTiledLayerWithScaledBounds> layer = make_scoped_refptr(new
FakeTiledLayerWithScaledBounds(m_resourceManager.get())); | 731 scoped_refptr<FakeTiledLayerWithScaledBounds> layer = make_scoped_refptr(new
FakeTiledLayerWithScaledBounds(m_resourceManager.get())); |
703 | 732 |
704 gfx::Rect layerBounds(0, 0, 300, 200); | 733 gfx::Rect layerBounds(0, 0, 300, 200); |
(...skipping 26 matching lines...) Expand all Loading... |
731 layer->invalidateContentRect(partialDamage); | 760 layer->invalidateContentRect(partialDamage); |
732 layer->setTexturePriorities(m_priorityCalculator); | 761 layer->setTexturePriorities(m_priorityCalculator); |
733 m_resourceManager->prioritizeTextures(); | 762 m_resourceManager->prioritizeTextures(); |
734 layer->update(*m_queue.get(), 0, m_stats); | 763 layer->update(*m_queue.get(), 0, m_stats); |
735 EXPECT_FLOAT_RECT_EQ(gfx::RectF(45, 80, 15, 8), layer->updateRect()); | 764 EXPECT_FLOAT_RECT_EQ(gfx::RectF(45, 80, 15, 8), layer->updateRect()); |
736 } | 765 } |
737 | 766 |
738 TEST_F(TiledLayerTest, verifyInvalidationWhenContentsScaleChanges) | 767 TEST_F(TiledLayerTest, verifyInvalidationWhenContentsScaleChanges) |
739 { | 768 { |
740 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 769 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
741 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 770 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
742 | 771 |
743 // Create a layer with one tile. | 772 // Create a layer with one tile. |
744 layer->setBounds(gfx::Size(100, 100)); | 773 layer->setBounds(gfx::Size(100, 100)); |
745 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 774 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
746 | 775 |
747 // Invalidate the entire layer. | 776 // Invalidate the entire layer. |
748 layer->setNeedsDisplay(); | 777 layer->setNeedsDisplay(); |
749 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100), layer->lastNeedsDisplayRect
()); | 778 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100), layer->lastNeedsDisplayRect
()); |
750 | 779 |
751 // Push the tiles to the impl side and check that there is exactly one. | 780 // Push the tiles to the impl side and check that there is exactly one. |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
883 layer->drawProperties().visible_content_rect = contentRect; | 912 layer->drawProperties().visible_content_rect = contentRect; |
884 layer->invalidateContentRect(contentRect); | 913 layer->invalidateContentRect(contentRect); |
885 | 914 |
886 m_layerTreeHost->setRootLayer(layer); | 915 m_layerTreeHost->setRootLayer(layer); |
887 m_layerTreeHost->setViewportSize(gfx::Size(300, 200), gfx::Size(300, 200)); | 916 m_layerTreeHost->setViewportSize(gfx::Size(300, 200), gfx::Size(300, 200)); |
888 | 917 |
889 // Full update of all 6 tiles. | 918 // Full update of all 6 tiles. |
890 m_layerTreeHost->updateLayers( | 919 m_layerTreeHost->updateLayers( |
891 *m_queue.get(), std::numeric_limits<size_t>::max()); | 920 *m_queue.get(), std::numeric_limits<size_t>::max()); |
892 { | 921 { |
893 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 922 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiled
LayerImpl(m_hostImpl->activeTree(), 1)); |
894 EXPECT_EQ(6, m_queue->fullUploadSize()); | 923 EXPECT_EQ(6, m_queue->fullUploadSize()); |
895 EXPECT_EQ(0, m_queue->partialUploadSize()); | 924 EXPECT_EQ(0, m_queue->partialUploadSize()); |
896 updateTextures(); | 925 updateTextures(); |
897 EXPECT_EQ(6, layer->fakeLayerUpdater()->updateCount()); | 926 EXPECT_EQ(6, layer->fakeLayerUpdater()->updateCount()); |
898 EXPECT_FALSE(m_queue->hasMoreUpdates()); | 927 EXPECT_FALSE(m_queue->hasMoreUpdates()); |
899 layer->fakeLayerUpdater()->clearUpdateCount(); | 928 layer->fakeLayerUpdater()->clearUpdateCount(); |
900 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 929 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
901 } | 930 } |
902 m_layerTreeHost->commitComplete(); | 931 m_layerTreeHost->commitComplete(); |
903 | 932 |
904 // Full update of 3 tiles and partial update of 3 tiles. | 933 // Full update of 3 tiles and partial update of 3 tiles. |
905 layer->invalidateContentRect(gfx::Rect(0, 0, 300, 150)); | 934 layer->invalidateContentRect(gfx::Rect(0, 0, 300, 150)); |
906 m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t>::m
ax()); | 935 m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t>::m
ax()); |
907 { | 936 { |
908 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 937 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiled
LayerImpl(m_hostImpl->activeTree(), 1)); |
909 EXPECT_EQ(3, m_queue->fullUploadSize()); | 938 EXPECT_EQ(3, m_queue->fullUploadSize()); |
910 EXPECT_EQ(3, m_queue->partialUploadSize()); | 939 EXPECT_EQ(3, m_queue->partialUploadSize()); |
911 updateTextures(); | 940 updateTextures(); |
912 EXPECT_EQ(6, layer->fakeLayerUpdater()->updateCount()); | 941 EXPECT_EQ(6, layer->fakeLayerUpdater()->updateCount()); |
913 EXPECT_FALSE(m_queue->hasMoreUpdates()); | 942 EXPECT_FALSE(m_queue->hasMoreUpdates()); |
914 layer->fakeLayerUpdater()->clearUpdateCount(); | 943 layer->fakeLayerUpdater()->clearUpdateCount(); |
915 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 944 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
916 } | 945 } |
917 m_layerTreeHost->commitComplete(); | 946 m_layerTreeHost->commitComplete(); |
918 | 947 |
919 // Partial update of 6 tiles. | 948 // Partial update of 6 tiles. |
920 layer->invalidateContentRect(gfx::Rect(50, 50, 200, 100)); | 949 layer->invalidateContentRect(gfx::Rect(50, 50, 200, 100)); |
921 { | 950 { |
922 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 951 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiled
LayerImpl(m_hostImpl->activeTree(), 1)); |
923 m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t
>::max()); | 952 m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t
>::max()); |
924 EXPECT_EQ(2, m_queue->fullUploadSize()); | 953 EXPECT_EQ(2, m_queue->fullUploadSize()); |
925 EXPECT_EQ(4, m_queue->partialUploadSize()); | 954 EXPECT_EQ(4, m_queue->partialUploadSize()); |
926 updateTextures(); | 955 updateTextures(); |
927 EXPECT_EQ(6, layer->fakeLayerUpdater()->updateCount()); | 956 EXPECT_EQ(6, layer->fakeLayerUpdater()->updateCount()); |
928 EXPECT_FALSE(m_queue->hasMoreUpdates()); | 957 EXPECT_FALSE(m_queue->hasMoreUpdates()); |
929 layer->fakeLayerUpdater()->clearUpdateCount(); | 958 layer->fakeLayerUpdater()->clearUpdateCount(); |
930 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 959 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
931 } | 960 } |
932 m_layerTreeHost->commitComplete(); | 961 m_layerTreeHost->commitComplete(); |
933 | 962 |
934 // Checkerboard all tiles. | 963 // Checkerboard all tiles. |
935 layer->invalidateContentRect(gfx::Rect(0, 0, 300, 200)); | 964 layer->invalidateContentRect(gfx::Rect(0, 0, 300, 200)); |
936 { | 965 { |
937 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 966 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiled
LayerImpl(m_hostImpl->activeTree(), 1)); |
938 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 967 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
939 } | 968 } |
940 m_layerTreeHost->commitComplete(); | 969 m_layerTreeHost->commitComplete(); |
941 | 970 |
942 // Partial update of 6 checkerboard tiles. | 971 // Partial update of 6 checkerboard tiles. |
943 layer->invalidateContentRect(gfx::Rect(50, 50, 200, 100)); | 972 layer->invalidateContentRect(gfx::Rect(50, 50, 200, 100)); |
944 { | 973 { |
945 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 974 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiled
LayerImpl(m_hostImpl->activeTree(), 1)); |
946 m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t
>::max()); | 975 m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t
>::max()); |
947 EXPECT_EQ(6, m_queue->fullUploadSize()); | 976 EXPECT_EQ(6, m_queue->fullUploadSize()); |
948 EXPECT_EQ(0, m_queue->partialUploadSize()); | 977 EXPECT_EQ(0, m_queue->partialUploadSize()); |
949 updateTextures(); | 978 updateTextures(); |
950 EXPECT_EQ(6, layer->fakeLayerUpdater()->updateCount()); | 979 EXPECT_EQ(6, layer->fakeLayerUpdater()->updateCount()); |
951 EXPECT_FALSE(m_queue->hasMoreUpdates()); | 980 EXPECT_FALSE(m_queue->hasMoreUpdates()); |
952 layer->fakeLayerUpdater()->clearUpdateCount(); | 981 layer->fakeLayerUpdater()->clearUpdateCount(); |
953 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 982 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
954 } | 983 } |
955 m_layerTreeHost->commitComplete(); | 984 m_layerTreeHost->commitComplete(); |
956 | 985 |
957 // Partial update of 4 tiles. | 986 // Partial update of 4 tiles. |
958 layer->invalidateContentRect(gfx::Rect(50, 50, 100, 100)); | 987 layer->invalidateContentRect(gfx::Rect(50, 50, 100, 100)); |
959 { | 988 { |
960 ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1); | 989 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiled
LayerImpl(m_hostImpl->activeTree(), 1)); |
961 m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t
>::max()); | 990 m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t
>::max()); |
962 EXPECT_EQ(0, m_queue->fullUploadSize()); | 991 EXPECT_EQ(0, m_queue->fullUploadSize()); |
963 EXPECT_EQ(4, m_queue->partialUploadSize()); | 992 EXPECT_EQ(4, m_queue->partialUploadSize()); |
964 updateTextures(); | 993 updateTextures(); |
965 EXPECT_EQ(4, layer->fakeLayerUpdater()->updateCount()); | 994 EXPECT_EQ(4, layer->fakeLayerUpdater()->updateCount()); |
966 EXPECT_FALSE(m_queue->hasMoreUpdates()); | 995 EXPECT_FALSE(m_queue->hasMoreUpdates()); |
967 layer->fakeLayerUpdater()->clearUpdateCount(); | 996 layer->fakeLayerUpdater()->clearUpdateCount(); |
968 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 997 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
969 } | 998 } |
970 m_layerTreeHost->commitComplete(); | 999 m_layerTreeHost->commitComplete(); |
(...skipping 15 matching lines...) Expand all Loading... |
986 layer->setTexturePriorities(m_priorityCalculator); | 1015 layer->setTexturePriorities(m_priorityCalculator); |
987 m_resourceManager->prioritizeTextures(); | 1016 m_resourceManager->prioritizeTextures(); |
988 layer->update(*m_queue.get(), 0, m_stats); | 1017 layer->update(*m_queue.get(), 0, m_stats); |
989 EXPECT_EQ(2, layer->fakeLayerUpdater()->updateCount()); | 1018 EXPECT_EQ(2, layer->fakeLayerUpdater()->updateCount()); |
990 } | 1019 } |
991 | 1020 |
992 TEST_F(TiledLayerTest, tilesPaintedWithOcclusion) | 1021 TEST_F(TiledLayerTest, tilesPaintedWithOcclusion) |
993 { | 1022 { |
994 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1023 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
995 TestOcclusionTracker occluded; | 1024 TestOcclusionTracker occluded; |
| 1025 m_occlusion = &occluded; |
996 | 1026 |
997 // The tile size is 100x100. | 1027 // The tile size is 100x100. |
998 | 1028 |
999 layer->setBounds(gfx::Size(600, 600)); | 1029 layer->setBounds(gfx::Size(600, 600)); |
| 1030 calcDrawProps(layer); |
1000 | 1031 |
1001 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); | 1032 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
1002 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); | 1033 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); |
1003 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1034 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
1004 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1035 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1005 | 1036 |
1006 layer->setTexturePriorities(m_priorityCalculator); | 1037 layer->setTexturePriorities(m_priorityCalculator); |
1007 m_resourceManager->prioritizeTextures(); | 1038 m_resourceManager->prioritizeTextures(); |
1008 layer->update(*m_queue.get(), &occluded, m_stats); | 1039 layer->update(*m_queue.get(), &occluded, m_stats); |
1009 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1040 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
(...skipping 26 matching lines...) Expand all Loading... |
1036 | 1067 |
1037 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1068 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
1038 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000 + 360000, 1); | 1069 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000 + 360000, 1); |
1039 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); | 1070 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); |
1040 } | 1071 } |
1041 | 1072 |
1042 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints) | 1073 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints) |
1043 { | 1074 { |
1044 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1075 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
1045 TestOcclusionTracker occluded; | 1076 TestOcclusionTracker occluded; |
| 1077 m_occlusion = &occluded; |
1046 | 1078 |
1047 // The tile size is 100x100. | 1079 // The tile size is 100x100. |
1048 | 1080 |
1049 layer->setBounds(gfx::Size(600, 600)); | 1081 layer->setBounds(gfx::Size(600, 600)); |
| 1082 calcDrawProps(layer); |
1050 | 1083 |
1051 // The partially occluded tiles (by the 150 occlusion height) are visible be
yond the occlusion, so not culled. | 1084 // The partially occluded tiles (by the 150 occlusion height) are visible be
yond the occlusion, so not culled. |
1052 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); | 1085 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); |
1053 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 360); | 1086 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 360); |
1054 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 360); | 1087 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 360); |
1055 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1088 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1056 | 1089 |
1057 layer->setTexturePriorities(m_priorityCalculator); | 1090 layer->setTexturePriorities(m_priorityCalculator); |
1058 m_resourceManager->prioritizeTextures(); | 1091 m_resourceManager->prioritizeTextures(); |
1059 layer->update(*m_queue.get(), &occluded, m_stats); | 1092 layer->update(*m_queue.get(), &occluded, m_stats); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1094 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1127 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
1095 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000 + 180000, 1); | 1128 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000 + 180000, 1); |
1096 EXPECT_EQ(3 + 6 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); | 1129 EXPECT_EQ(3 + 6 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); |
1097 | 1130 |
1098 } | 1131 } |
1099 | 1132 |
1100 TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation) | 1133 TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation) |
1101 { | 1134 { |
1102 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1135 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
1103 TestOcclusionTracker occluded; | 1136 TestOcclusionTracker occluded; |
| 1137 m_occlusion = &occluded; |
1104 | 1138 |
1105 // The tile size is 100x100. | 1139 // The tile size is 100x100. |
1106 | 1140 |
1107 layer->setBounds(gfx::Size(600, 600)); | 1141 layer->setBounds(gfx::Size(600, 600)); |
| 1142 calcDrawProps(layer); |
1108 | 1143 |
1109 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); | 1144 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
1110 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 600); | 1145 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 600); |
1111 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 600); | 1146 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 600); |
1112 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1147 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1113 layer->setTexturePriorities(m_priorityCalculator); | 1148 layer->setTexturePriorities(m_priorityCalculator); |
1114 m_resourceManager->prioritizeTextures(); | 1149 m_resourceManager->prioritizeTextures(); |
1115 layer->update(*m_queue.get(), &occluded, m_stats); | 1150 layer->update(*m_queue.get(), &occluded, m_stats); |
1116 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1151 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
1117 { | 1152 { |
(...skipping 14 matching lines...) Expand all Loading... |
1132 | 1167 |
1133 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1168 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
1134 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1169 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); |
1135 EXPECT_EQ(6, occluded.overdrawMetrics().tilesCulledForUpload()); | 1170 EXPECT_EQ(6, occluded.overdrawMetrics().tilesCulledForUpload()); |
1136 } | 1171 } |
1137 | 1172 |
1138 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms) | 1173 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms) |
1139 { | 1174 { |
1140 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1175 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
1141 TestOcclusionTracker occluded; | 1176 TestOcclusionTracker occluded; |
| 1177 m_occlusion = &occluded; |
1142 | 1178 |
1143 // The tile size is 100x100. | 1179 // The tile size is 100x100. |
1144 | 1180 |
1145 // This makes sure the painting works when the occluded region (in screen sp
ace) | 1181 // This makes sure the painting works when the occluded region (in screen sp
ace) |
1146 // is transformed differently than the layer. | 1182 // is transformed differently than the layer. |
1147 layer->setBounds(gfx::Size(600, 600)); | 1183 layer->setBounds(gfx::Size(600, 600)); |
| 1184 calcDrawProps(layer); |
1148 gfx::Transform screenTransform; | 1185 gfx::Transform screenTransform; |
1149 screenTransform.Scale(0.5, 0.5); | 1186 screenTransform.Scale(0.5, 0.5); |
1150 layer->drawProperties().screen_space_transform = screenTransform; | 1187 layer->drawProperties().screen_space_transform = screenTransform; |
1151 layer->drawProperties().target_space_transform = screenTransform; | 1188 layer->drawProperties().target_space_transform = screenTransform; |
1152 | 1189 |
1153 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50)); | 1190 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50)); |
1154 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); | 1191 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); |
1155 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1192 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
1156 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1193 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1157 layer->setTexturePriorities(m_priorityCalculator); | 1194 layer->setTexturePriorities(m_priorityCalculator); |
1158 m_resourceManager->prioritizeTextures(); | 1195 m_resourceManager->prioritizeTextures(); |
1159 layer->update(*m_queue.get(), &occluded, m_stats); | 1196 layer->update(*m_queue.get(), &occluded, m_stats); |
1160 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1197 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
1161 | 1198 |
1162 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1199 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
1163 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1200 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); |
1164 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); | 1201 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); |
1165 } | 1202 } |
1166 | 1203 |
1167 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndScaling) | 1204 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndScaling) |
1168 { | 1205 { |
1169 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1206 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
1170 TestOcclusionTracker occluded; | 1207 TestOcclusionTracker occluded; |
| 1208 m_occlusion = &occluded; |
1171 | 1209 |
1172 // The tile size is 100x100. | 1210 // The tile size is 100x100. |
1173 | 1211 |
1174 // This makes sure the painting works when the content space is scaled to | 1212 // This makes sure the painting works when the content space is scaled to |
1175 // a different layer space. In this case tiles are scaled to be 200x200 | 1213 // a different layer space. In this case tiles are scaled to be 200x200 |
1176 // pixels, which means none should be occluded. | 1214 // pixels, which means none should be occluded. |
1177 layer->updateContentsScale(0.5); | 1215 layer->setBounds(gfx::Size(600, 600)); |
| 1216 layer->setRasterScale(0.5); |
| 1217 calcDrawProps(layer); |
1178 EXPECT_FLOAT_EQ(layer->contentsScaleX(), layer->contentsScaleY()); | 1218 EXPECT_FLOAT_EQ(layer->contentsScaleX(), layer->contentsScaleY()); |
1179 layer->setBounds(gfx::Size(600, 600)); | |
1180 gfx::Transform drawTransform; | 1219 gfx::Transform drawTransform; |
1181 double invScaleFactor = 1 / layer->contentsScaleX(); | 1220 double invScaleFactor = 1 / layer->contentsScaleX(); |
1182 drawTransform.Scale(invScaleFactor, invScaleFactor); | 1221 drawTransform.Scale(invScaleFactor, invScaleFactor); |
1183 layer->drawProperties().target_space_transform = drawTransform; | 1222 layer->drawProperties().target_space_transform = drawTransform; |
1184 layer->drawProperties().screen_space_transform = drawTransform; | 1223 layer->drawProperties().screen_space_transform = drawTransform; |
1185 | 1224 |
1186 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); | 1225 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
1187 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->bounds()); | 1226 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->bounds()); |
1188 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1227 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
1189 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1228 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1430 updateTextures(); | 1469 updateTextures(); |
1431 EXPECT_EQ(6, root->fakeLayerUpdater()->updateCount()); | 1470 EXPECT_EQ(6, root->fakeLayerUpdater()->updateCount()); |
1432 EXPECT_EQ(3, child->fakeLayerUpdater()->updateCount()); | 1471 EXPECT_EQ(3, child->fakeLayerUpdater()->updateCount()); |
1433 EXPECT_EQ(3, child2->fakeLayerUpdater()->updateCount()); | 1472 EXPECT_EQ(3, child2->fakeLayerUpdater()->updateCount()); |
1434 EXPECT_FALSE(m_queue->hasMoreUpdates()); | 1473 EXPECT_FALSE(m_queue->hasMoreUpdates()); |
1435 | 1474 |
1436 root->fakeLayerUpdater()->clearUpdateCount(); | 1475 root->fakeLayerUpdater()->clearUpdateCount(); |
1437 child->fakeLayerUpdater()->clearUpdateCount(); | 1476 child->fakeLayerUpdater()->clearUpdateCount(); |
1438 child2->fakeLayerUpdater()->clearUpdateCount(); | 1477 child2->fakeLayerUpdater()->clearUpdateCount(); |
1439 | 1478 |
1440 ScopedFakeTiledLayerImpl rootImpl(m_hostImpl->activeTree(), root->id()); | 1479 scoped_ptr<FakeTiledLayerImpl> rootImpl = make_scoped_ptr(new FakeTiledL
ayerImpl(m_hostImpl->activeTree(), root->id())); |
1441 ScopedFakeTiledLayerImpl childImpl(m_hostImpl->activeTree(), child->id()
); | 1480 scoped_ptr<FakeTiledLayerImpl> childImpl = make_scoped_ptr(new FakeTiled
LayerImpl(m_hostImpl->activeTree(), child->id())); |
1442 ScopedFakeTiledLayerImpl child2Impl(m_hostImpl->activeTree(), child2->id
()); | 1481 scoped_ptr<FakeTiledLayerImpl> child2Impl = make_scoped_ptr(new FakeTile
dLayerImpl(m_hostImpl->activeTree(), child2->id())); |
1443 layerPushPropertiesTo(root.get(), rootImpl.get()); | 1482 layerPushPropertiesTo(root.get(), rootImpl.get()); |
1444 layerPushPropertiesTo(child.get(), childImpl.get()); | 1483 layerPushPropertiesTo(child.get(), childImpl.get()); |
1445 layerPushPropertiesTo(child2.get(), child2Impl.get()); | 1484 layerPushPropertiesTo(child2.get(), child2Impl.get()); |
1446 | 1485 |
1447 for (unsigned i = 0; i < 3; ++i) { | 1486 for (unsigned i = 0; i < 3; ++i) { |
1448 for (unsigned j = 0; j < 2; ++j) | 1487 for (unsigned j = 0; j < 2; ++j) |
1449 EXPECT_TRUE(rootImpl->hasResourceIdForTileAt(i, j)); | 1488 EXPECT_TRUE(rootImpl->hasResourceIdForTileAt(i, j)); |
1450 EXPECT_TRUE(childImpl->hasResourceIdForTileAt(i, 0)); | 1489 EXPECT_TRUE(childImpl->hasResourceIdForTileAt(i, 0)); |
1451 EXPECT_TRUE(child2Impl->hasResourceIdForTileAt(i, 0)); | 1490 EXPECT_TRUE(child2Impl->hasResourceIdForTileAt(i, 0)); |
1452 } | 1491 } |
(...skipping 12 matching lines...) Expand all Loading... |
1465 updateTextures(); | 1504 updateTextures(); |
1466 EXPECT_EQ(6, root->fakeLayerUpdater()->updateCount()); | 1505 EXPECT_EQ(6, root->fakeLayerUpdater()->updateCount()); |
1467 EXPECT_EQ(0, child->fakeLayerUpdater()->updateCount()); | 1506 EXPECT_EQ(0, child->fakeLayerUpdater()->updateCount()); |
1468 EXPECT_EQ(0, child2->fakeLayerUpdater()->updateCount()); | 1507 EXPECT_EQ(0, child2->fakeLayerUpdater()->updateCount()); |
1469 EXPECT_FALSE(m_queue->hasMoreUpdates()); | 1508 EXPECT_FALSE(m_queue->hasMoreUpdates()); |
1470 | 1509 |
1471 root->fakeLayerUpdater()->clearUpdateCount(); | 1510 root->fakeLayerUpdater()->clearUpdateCount(); |
1472 child->fakeLayerUpdater()->clearUpdateCount(); | 1511 child->fakeLayerUpdater()->clearUpdateCount(); |
1473 child2->fakeLayerUpdater()->clearUpdateCount(); | 1512 child2->fakeLayerUpdater()->clearUpdateCount(); |
1474 | 1513 |
1475 ScopedFakeTiledLayerImpl rootImpl(m_hostImpl->activeTree(), root->id()); | 1514 scoped_ptr<FakeTiledLayerImpl> rootImpl = make_scoped_ptr(new FakeTiledL
ayerImpl(m_hostImpl->activeTree(), root->id())); |
1476 ScopedFakeTiledLayerImpl childImpl(m_hostImpl->activeTree(), child->id()
); | 1515 scoped_ptr<FakeTiledLayerImpl> childImpl = make_scoped_ptr(new FakeTiled
LayerImpl(m_hostImpl->activeTree(), child->id())); |
1477 ScopedFakeTiledLayerImpl child2Impl(m_hostImpl->activeTree(), child2->id
()); | 1516 scoped_ptr<FakeTiledLayerImpl> child2Impl = make_scoped_ptr(new FakeTile
dLayerImpl(m_hostImpl->activeTree(), child2->id())); |
1478 layerPushPropertiesTo(root.get(), rootImpl.get()); | 1517 layerPushPropertiesTo(root.get(), rootImpl.get()); |
1479 layerPushPropertiesTo(child.get(), childImpl.get()); | 1518 layerPushPropertiesTo(child.get(), childImpl.get()); |
1480 layerPushPropertiesTo(child2.get(), child2Impl.get()); | 1519 layerPushPropertiesTo(child2.get(), child2Impl.get()); |
1481 | 1520 |
1482 for (unsigned i = 0; i < 3; ++i) { | 1521 for (unsigned i = 0; i < 3; ++i) { |
1483 for (unsigned j = 0; j < 2; ++j) | 1522 for (unsigned j = 0; j < 2; ++j) |
1484 EXPECT_TRUE(rootImpl->hasResourceIdForTileAt(i, j)); | 1523 EXPECT_TRUE(rootImpl->hasResourceIdForTileAt(i, j)); |
1485 EXPECT_FALSE(childImpl->hasResourceIdForTileAt(i, 0)); | 1524 EXPECT_FALSE(childImpl->hasResourceIdForTileAt(i, 0)); |
1486 EXPECT_FALSE(child2Impl->hasResourceIdForTileAt(i, 0)); | 1525 EXPECT_FALSE(child2Impl->hasResourceIdForTileAt(i, 0)); |
1487 } | 1526 } |
(...skipping 13 matching lines...) Expand all Loading... |
1501 updateTextures(); | 1540 updateTextures(); |
1502 EXPECT_EQ(0, root->fakeLayerUpdater()->updateCount()); | 1541 EXPECT_EQ(0, root->fakeLayerUpdater()->updateCount()); |
1503 EXPECT_EQ(0, child->fakeLayerUpdater()->updateCount()); | 1542 EXPECT_EQ(0, child->fakeLayerUpdater()->updateCount()); |
1504 EXPECT_EQ(0, child2->fakeLayerUpdater()->updateCount()); | 1543 EXPECT_EQ(0, child2->fakeLayerUpdater()->updateCount()); |
1505 EXPECT_FALSE(m_queue->hasMoreUpdates()); | 1544 EXPECT_FALSE(m_queue->hasMoreUpdates()); |
1506 | 1545 |
1507 root->fakeLayerUpdater()->clearUpdateCount(); | 1546 root->fakeLayerUpdater()->clearUpdateCount(); |
1508 child->fakeLayerUpdater()->clearUpdateCount(); | 1547 child->fakeLayerUpdater()->clearUpdateCount(); |
1509 child2->fakeLayerUpdater()->clearUpdateCount(); | 1548 child2->fakeLayerUpdater()->clearUpdateCount(); |
1510 | 1549 |
1511 ScopedFakeTiledLayerImpl rootImpl(m_hostImpl->activeTree(), root->id()); | 1550 scoped_ptr<FakeTiledLayerImpl> rootImpl = make_scoped_ptr(new FakeTiledL
ayerImpl(m_hostImpl->activeTree(), root->id())); |
1512 ScopedFakeTiledLayerImpl childImpl(m_hostImpl->activeTree(), child->id()
); | 1551 scoped_ptr<FakeTiledLayerImpl> childImpl = make_scoped_ptr(new FakeTiled
LayerImpl(m_hostImpl->activeTree(), child->id())); |
1513 ScopedFakeTiledLayerImpl child2Impl(m_hostImpl->activeTree(), child2->id
()); | 1552 scoped_ptr<FakeTiledLayerImpl> child2Impl = make_scoped_ptr(new FakeTile
dLayerImpl(m_hostImpl->activeTree(), child2->id())); |
1514 layerPushPropertiesTo(root.get(), rootImpl.get()); | 1553 layerPushPropertiesTo(root.get(), rootImpl.get()); |
1515 layerPushPropertiesTo(child.get(), childImpl.get()); | 1554 layerPushPropertiesTo(child.get(), childImpl.get()); |
1516 layerPushPropertiesTo(child2.get(), child2Impl.get()); | 1555 layerPushPropertiesTo(child2.get(), child2Impl.get()); |
1517 | 1556 |
1518 for (unsigned i = 0; i < 3; ++i) { | 1557 for (unsigned i = 0; i < 3; ++i) { |
1519 for (unsigned j = 0; j < 2; ++j) | 1558 for (unsigned j = 0; j < 2; ++j) |
1520 EXPECT_FALSE(rootImpl->hasResourceIdForTileAt(i, j)); | 1559 EXPECT_FALSE(rootImpl->hasResourceIdForTileAt(i, j)); |
1521 EXPECT_FALSE(childImpl->hasResourceIdForTileAt(i, 0)); | 1560 EXPECT_FALSE(childImpl->hasResourceIdForTileAt(i, 0)); |
1522 EXPECT_FALSE(child2Impl->hasResourceIdForTileAt(i, 0)); | 1561 EXPECT_FALSE(child2Impl->hasResourceIdForTileAt(i, 0)); |
1523 } | 1562 } |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1624 | 1663 |
1625 // Invalidate the entire layer in layer space. When painting, the rect given
to webkit should match the layer's bounds. | 1664 // Invalidate the entire layer in layer space. When painting, the rect given
to webkit should match the layer's bounds. |
1626 layer->setNeedsDisplayRect(layerRect); | 1665 layer->setNeedsDisplayRect(layerRect); |
1627 layer->update(*m_queue.get(), 0, m_stats); | 1666 layer->update(*m_queue.get(), 0, m_stats); |
1628 | 1667 |
1629 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); | 1668 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); |
1630 } | 1669 } |
1631 | 1670 |
1632 } // namespace | 1671 } // namespace |
1633 } // namespace cc | 1672 } // namespace cc |
OLD | NEW |