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

Side by Side Diff: cc/tiled_layer_unittest.cc

Issue 11369109: cc: Rename PrioritizedTexture to PrioritizedResource. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 | « cc/tiled_layer.cc ('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 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 "config.h" 5 #include "config.h"
6 6
7 #include "cc/tiled_layer.h" 7 #include "cc/tiled_layer.h"
8 8
9 #include "cc/bitmap_content_layer_updater.h" 9 #include "cc/bitmap_content_layer_updater.h"
10 #include "cc/layer_painter.h" 10 #include "cc/layer_painter.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 private: 45 private:
46 gfx::Rect m_layerClipRectInTarget; 46 gfx::Rect m_layerClipRectInTarget;
47 }; 47 };
48 48
49 class TiledLayerTest : public testing::Test { 49 class TiledLayerTest : public testing::Test {
50 public: 50 public:
51 TiledLayerTest() 51 TiledLayerTest()
52 : m_context(WebKit::createFakeGraphicsContext()) 52 : m_context(WebKit::createFakeGraphicsContext())
53 , m_queue(make_scoped_ptr(new ResourceUpdateQueue)) 53 , m_queue(make_scoped_ptr(new ResourceUpdateQueue))
54 , m_textureManager(PrioritizedTextureManager::create(60*1024*1024, 1024, Renderer::ContentPool)) 54 , m_resourceManager(PrioritizedResourceManager::create(60*1024*1024, 102 4, Renderer::ContentPool))
55 , m_occlusion(0) 55 , m_occlusion(0)
56 { 56 {
57 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked; 57 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked;
58 m_resourceProvider = ResourceProvider::create(m_context.get()); 58 m_resourceProvider = ResourceProvider::create(m_context.get());
59 } 59 }
60 60
61 virtual ~TiledLayerTest() 61 virtual ~TiledLayerTest()
62 { 62 {
63 textureManagerClearAllMemory(m_textureManager.get(), m_resourceProvider. get()); 63 resourceManagerClearAllMemory(m_resourceManager.get(), m_resourceProvide r.get());
64 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked; 64 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked;
65 m_resourceProvider.reset(); 65 m_resourceProvider.reset();
66 } 66 }
67 67
68 // Helper classes and functions that set the current thread to be the impl t hread 68 // Helper classes and functions that set the current thread to be the impl t hread
69 // before doing the action that they wrap. 69 // before doing the action that they wrap.
70 class ScopedFakeTiledLayerImpl { 70 class ScopedFakeTiledLayerImpl {
71 public: 71 public:
72 ScopedFakeTiledLayerImpl(int id) 72 ScopedFakeTiledLayerImpl(int id)
73 { 73 {
74 DebugScopedSetImplThread implThread; 74 DebugScopedSetImplThread implThread;
75 m_layerImpl = new FakeTiledLayerImpl(id); 75 m_layerImpl = new FakeTiledLayerImpl(id);
76 } 76 }
77 ~ScopedFakeTiledLayerImpl() 77 ~ScopedFakeTiledLayerImpl()
78 { 78 {
79 DebugScopedSetImplThread implThread; 79 DebugScopedSetImplThread implThread;
80 delete m_layerImpl; 80 delete m_layerImpl;
81 } 81 }
82 FakeTiledLayerImpl* get() 82 FakeTiledLayerImpl* get()
83 { 83 {
84 return m_layerImpl; 84 return m_layerImpl;
85 } 85 }
86 FakeTiledLayerImpl* operator->() 86 FakeTiledLayerImpl* operator->()
87 { 87 {
88 return m_layerImpl; 88 return m_layerImpl;
89 } 89 }
90 private: 90 private:
91 FakeTiledLayerImpl* m_layerImpl; 91 FakeTiledLayerImpl* m_layerImpl;
92 }; 92 };
93 void textureManagerClearAllMemory(PrioritizedTextureManager* textureManager, ResourceProvider* resourceProvider) 93 void resourceManagerClearAllMemory(PrioritizedResourceManager* resourceManag er, ResourceProvider* resourceProvider)
94 { 94 {
95 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked; 95 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked;
96 textureManager->clearAllMemory(resourceProvider); 96 resourceManager->clearAllMemory(resourceProvider);
97 textureManager->reduceMemory(resourceProvider); 97 resourceManager->reduceMemory(resourceProvider);
98 } 98 }
99 void updateTextures() 99 void updateTextures()
100 { 100 {
101 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked; 101 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked;
102 DCHECK(m_queue); 102 DCHECK(m_queue);
103 scoped_ptr<ResourceUpdateController> updateController = 103 scoped_ptr<ResourceUpdateController> updateController =
104 ResourceUpdateController::create( 104 ResourceUpdateController::create(
105 NULL, 105 NULL,
106 Proxy::implThread(), 106 Proxy::implThread(),
107 m_queue.Pass(), 107 m_queue.Pass(),
(...skipping 11 matching lines...) Expand all
119 DebugScopedSetMainThread mainThread; 119 DebugScopedSetMainThread mainThread;
120 layer->update(*m_queue.get(), occluded, m_stats); 120 layer->update(*m_queue.get(), occluded, m_stats);
121 } 121 }
122 122
123 bool updateAndPush(FakeTiledLayer* layer1, 123 bool updateAndPush(FakeTiledLayer* layer1,
124 FakeTiledLayerImpl* layerImpl1, 124 FakeTiledLayerImpl* layerImpl1,
125 FakeTiledLayer* layer2 = 0, 125 FakeTiledLayer* layer2 = 0,
126 FakeTiledLayerImpl* layerImpl2 = 0) 126 FakeTiledLayerImpl* layerImpl2 = 0)
127 { 127 {
128 // Get textures 128 // Get textures
129 m_textureManager->clearPriorities(); 129 m_resourceManager->clearPriorities();
130 if (layer1) 130 if (layer1)
131 layer1->setTexturePriorities(m_priorityCalculator); 131 layer1->setTexturePriorities(m_priorityCalculator);
132 if (layer2) 132 if (layer2)
133 layer2->setTexturePriorities(m_priorityCalculator); 133 layer2->setTexturePriorities(m_priorityCalculator);
134 m_textureManager->prioritizeTextures(); 134 m_resourceManager->prioritizeTextures();
135 135
136 // Update content 136 // Update content
137 if (layer1) 137 if (layer1)
138 layer1->update(*m_queue.get(), m_occlusion, m_stats); 138 layer1->update(*m_queue.get(), m_occlusion, m_stats);
139 if (layer2) 139 if (layer2)
140 layer2->update(*m_queue.get(), m_occlusion, m_stats); 140 layer2->update(*m_queue.get(), m_occlusion, m_stats);
141 141
142 bool needsUpdate = false; 142 bool needsUpdate = false;
143 if (layer1) 143 if (layer1)
144 needsUpdate |= layer1->needsIdlePaint(); 144 needsUpdate |= layer1->needsIdlePaint();
145 if (layer2) 145 if (layer2)
146 needsUpdate |= layer2->needsIdlePaint(); 146 needsUpdate |= layer2->needsIdlePaint();
147 147
148 // Update textures and push. 148 // Update textures and push.
149 updateTextures(); 149 updateTextures();
150 if (layer1) 150 if (layer1)
151 layerPushPropertiesTo(layer1, layerImpl1); 151 layerPushPropertiesTo(layer1, layerImpl1);
152 if (layer2) 152 if (layer2)
153 layerPushPropertiesTo(layer2, layerImpl2); 153 layerPushPropertiesTo(layer2, layerImpl2);
154 154
155 return needsUpdate; 155 return needsUpdate;
156 } 156 }
157 157
158 public: 158 public:
159 scoped_ptr<GraphicsContext> m_context; 159 scoped_ptr<GraphicsContext> m_context;
160 scoped_ptr<ResourceProvider> m_resourceProvider; 160 scoped_ptr<ResourceProvider> m_resourceProvider;
161 scoped_ptr<ResourceUpdateQueue> m_queue; 161 scoped_ptr<ResourceUpdateQueue> m_queue;
162 RenderingStats m_stats; 162 RenderingStats m_stats;
163 PriorityCalculator m_priorityCalculator; 163 PriorityCalculator m_priorityCalculator;
164 scoped_ptr<PrioritizedTextureManager> m_textureManager; 164 scoped_ptr<PrioritizedResourceManager> m_resourceManager;
165 TestOcclusionTracker* m_occlusion; 165 TestOcclusionTracker* m_occlusion;
166 }; 166 };
167 167
168 TEST_F(TiledLayerTest, pushDirtyTiles) 168 TEST_F(TiledLayerTest, pushDirtyTiles)
169 { 169 {
170 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 170 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
171 ScopedFakeTiledLayerImpl layerImpl(1); 171 ScopedFakeTiledLayerImpl layerImpl(1);
172 172
173 // The tile size is 100x100, so this invalidates and then paints two tiles. 173 // The tile size is 100x100, so this invalidates and then paints two tiles.
174 layer->setBounds(gfx::Size(100, 200)); 174 layer->setBounds(gfx::Size(100, 200));
175 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200)); 175 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200));
176 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); 176 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200));
177 updateAndPush(layer.get(), layerImpl.get()); 177 updateAndPush(layer.get(), layerImpl.get());
178 178
179 // We should have both tiles on the impl side. 179 // We should have both tiles on the impl side.
180 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); 180 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
181 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); 181 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1));
182 182
183 // Invalidates both tiles, but then only update one of them. 183 // Invalidates both tiles, but then only update one of them.
184 layer->setBounds(gfx::Size(100, 200)); 184 layer->setBounds(gfx::Size(100, 200));
185 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 100)); 185 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 100));
186 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); 186 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200));
187 updateAndPush(layer.get(), layerImpl.get()); 187 updateAndPush(layer.get(), layerImpl.get());
188 188
189 // We should only have the first tile since the other tile was invalidated b ut not painted. 189 // We should only have the first tile since the other tile was invalidated b ut not painted.
190 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); 190 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
191 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); 191 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1));
192 } 192 }
193 193
194 TEST_F(TiledLayerTest, pushOccludedDirtyTiles) 194 TEST_F(TiledLayerTest, pushOccludedDirtyTiles)
195 { 195 {
196 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 196 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
197 ScopedFakeTiledLayerImpl layerImpl(1); 197 ScopedFakeTiledLayerImpl layerImpl(1);
198 TestOcclusionTracker occluded; 198 TestOcclusionTracker occluded;
199 m_occlusion = &occluded; 199 m_occlusion = &occluded;
200 200
201 // The tile size is 100x100, so this invalidates and then paints two tiles. 201 // The tile size is 100x100, so this invalidates and then paints two tiles.
202 layer->setBounds(gfx::Size(100, 200)); 202 layer->setBounds(gfx::Size(100, 200));
203 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200)); 203 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200));
204 layer->setDrawableContentRect(gfx::Rect(0, 0, 100, 200)); 204 layer->setDrawableContentRect(gfx::Rect(0, 0, 100, 200));
205 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); 205 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200));
206 updateAndPush(layer.get(), layerImpl.get()); 206 updateAndPush(layer.get(), layerImpl.get());
(...skipping 16 matching lines...) Expand all
223 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 + 2500, 1); 223 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 + 2500, 1);
224 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); 224 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload());
225 225
226 // We should still have both tiles, as part of the top tile is still unocclu ded. 226 // We should still have both tiles, as part of the top tile is still unocclu ded.
227 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); 227 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
228 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); 228 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1));
229 } 229 }
230 230
231 TEST_F(TiledLayerTest, pushDeletedTiles) 231 TEST_F(TiledLayerTest, pushDeletedTiles)
232 { 232 {
233 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 233 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
234 ScopedFakeTiledLayerImpl layerImpl(1); 234 ScopedFakeTiledLayerImpl layerImpl(1);
235 235
236 // The tile size is 100x100, so this invalidates and then paints two tiles. 236 // The tile size is 100x100, so this invalidates and then paints two tiles.
237 layer->setBounds(gfx::Size(100, 200)); 237 layer->setBounds(gfx::Size(100, 200));
238 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200)); 238 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200));
239 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); 239 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200));
240 updateAndPush(layer.get(), layerImpl.get()); 240 updateAndPush(layer.get(), layerImpl.get());
241 241
242 // We should have both tiles on the impl side. 242 // We should have both tiles on the impl side.
243 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); 243 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
244 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); 244 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1));
245 245
246 m_textureManager->clearPriorities(); 246 m_resourceManager->clearPriorities();
247 textureManagerClearAllMemory(m_textureManager.get(), m_resourceProvider.get( )); 247 resourceManagerClearAllMemory(m_resourceManager.get(), m_resourceProvider.ge t());
248 m_textureManager->setMaxMemoryLimitBytes(4*1024*1024); 248 m_resourceManager->setMaxMemoryLimitBytes(4*1024*1024);
249 249
250 // This should drop the tiles on the impl thread. 250 // This should drop the tiles on the impl thread.
251 layerPushPropertiesTo(layer.get(), layerImpl.get()); 251 layerPushPropertiesTo(layer.get(), layerImpl.get());
252 252
253 // We should now have no textures on the impl thread. 253 // We should now have no textures on the impl thread.
254 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0)); 254 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0));
255 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); 255 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1));
256 256
257 // This should recreate and update one of the deleted textures. 257 // This should recreate and update one of the deleted textures.
258 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 100)); 258 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 100));
259 updateAndPush(layer.get(), layerImpl.get()); 259 updateAndPush(layer.get(), layerImpl.get());
260 260
261 // We should have one tiles on the impl side. 261 // We should have one tiles on the impl side.
262 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); 262 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
263 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); 263 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1));
264 } 264 }
265 265
266 TEST_F(TiledLayerTest, pushIdlePaintTiles) 266 TEST_F(TiledLayerTest, pushIdlePaintTiles)
267 { 267 {
268 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 268 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
269 ScopedFakeTiledLayerImpl layerImpl(1); 269 ScopedFakeTiledLayerImpl layerImpl(1);
270 270
271 // The tile size is 100x100. Setup 5x5 tiles with one visible tile in the ce nter. 271 // The tile size is 100x100. Setup 5x5 tiles with one visible tile in the ce nter.
272 // This paints 1 visible of the 25 invalid tiles. 272 // This paints 1 visible of the 25 invalid tiles.
273 layer->setBounds(gfx::Size(500, 500)); 273 layer->setBounds(gfx::Size(500, 500));
274 layer->setVisibleContentRect(gfx::Rect(200, 200, 100, 100)); 274 layer->setVisibleContentRect(gfx::Rect(200, 200, 100, 100));
275 layer->invalidateContentRect(gfx::Rect(0, 0, 500, 500)); 275 layer->invalidateContentRect(gfx::Rect(0, 0, 500, 500));
276 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); 276 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get());
277 // We should need idle-painting for surrounding tiles. 277 // We should need idle-painting for surrounding tiles.
278 EXPECT_TRUE(needsUpdate); 278 EXPECT_TRUE(needsUpdate);
(...skipping 15 matching lines...) Expand all
294 for (int i = 0; i < 5; i++) { 294 for (int i = 0; i < 5; i++) {
295 for (int j = 0; j < 5; j++) 295 for (int j = 0; j < 5; j++)
296 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(i, j)); 296 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(i, j));
297 } 297 }
298 298
299 EXPECT_FALSE(needsUpdate); 299 EXPECT_FALSE(needsUpdate);
300 } 300 }
301 301
302 TEST_F(TiledLayerTest, predictivePainting) 302 TEST_F(TiledLayerTest, predictivePainting)
303 { 303 {
304 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 304 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
305 ScopedFakeTiledLayerImpl layerImpl(1); 305 ScopedFakeTiledLayerImpl layerImpl(1);
306 306
307 // Prepainting should occur in the scroll direction first, and the 307 // Prepainting should occur in the scroll direction first, and the
308 // visible rect should be extruded only along the dominant axis. 308 // visible rect should be extruded only along the dominant axis.
309 gfx::Vector2d directions[6] = { gfx::Vector2d(-10, 0), 309 gfx::Vector2d directions[6] = { gfx::Vector2d(-10, 0),
310 gfx::Vector2d(10, 0), 310 gfx::Vector2d(10, 0),
311 gfx::Vector2d(0, -10), 311 gfx::Vector2d(0, -10),
312 gfx::Vector2d(0, 10), 312 gfx::Vector2d(0, 10),
313 gfx::Vector2d(10, 20), 313 gfx::Vector2d(10, 20),
314 gfx::Vector2d(-20, 10) }; 314 gfx::Vector2d(-20, 10) };
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 // We should always finish painting eventually. 367 // We should always finish painting eventually.
368 for (int i = 0; i < 20; i++) 368 for (int i = 0; i < 20; i++)
369 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); 369 needsUpdate = updateAndPush(layer.get(), layerImpl.get());
370 EXPECT_FALSE(needsUpdate); 370 EXPECT_FALSE(needsUpdate);
371 } 371 }
372 } 372 }
373 373
374 TEST_F(TiledLayerTest, pushTilesAfterIdlePaintFailed) 374 TEST_F(TiledLayerTest, pushTilesAfterIdlePaintFailed)
375 { 375 {
376 // 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. 376 // 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.
377 m_textureManager->setMaxMemoryLimitBytes(2 * 1024 * 1024); 377 m_resourceManager->setMaxMemoryLimitBytes(2 * 1024 * 1024);
378 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer (m_textureManager.get())); 378 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer (m_resourceManager.get()));
379 ScopedFakeTiledLayerImpl layerImpl1(1); 379 ScopedFakeTiledLayerImpl layerImpl1(1);
380 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer (m_textureManager.get())); 380 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer (m_resourceManager.get()));
381 ScopedFakeTiledLayerImpl layerImpl2(2); 381 ScopedFakeTiledLayerImpl layerImpl2(2);
382 382
383 // For this test we have two layers. layer1 exhausts most texture memory, le aving room for 2 more tiles from 383 // For this test we have two layers. layer1 exhausts most texture memory, le aving room for 2 more tiles from
384 // layer2, but not all three tiles. First we paint layer1, and one tile from layer2. Then when we idle paint 384 // layer2, but not all three tiles. First we paint layer1, and one tile from layer2. Then when we idle paint
385 // layer2, we will fail on the third tile of layer2, and this should not lea ve the second tile in a bad state. 385 // layer2, we will fail on the third tile of layer2, and this should not lea ve the second tile in a bad state.
386 386
387 // This uses 960000 bytes, leaving 88576 bytes of memory left, which is enou gh for 2 tiles only in the other layer. 387 // This uses 960000 bytes, leaving 88576 bytes of memory left, which is enou gh for 2 tiles only in the other layer.
388 gfx::Rect layer1Rect(0, 0, 100, 2400); 388 gfx::Rect layer1Rect(0, 0, 100, 2400);
389 389
390 // This requires 4*30000 bytes of memory. 390 // This requires 4*30000 bytes of memory.
391 gfx::Rect layer2Rect(0, 0, 100, 300); 391 gfx::Rect layer2Rect(0, 0, 100, 300);
392 392
393 // Paint a single tile in layer2 so that it will idle paint. 393 // Paint a single tile in layer2 so that it will idle paint.
394 layer1->setBounds(layer1Rect.size()); 394 layer1->setBounds(layer1Rect.size());
395 layer1->setVisibleContentRect(layer1Rect); 395 layer1->setVisibleContentRect(layer1Rect);
396 layer2->setBounds(layer2Rect.size()); 396 layer2->setBounds(layer2Rect.size());
397 layer2->setVisibleContentRect(gfx::Rect(0, 0, 100, 100)); 397 layer2->setVisibleContentRect(gfx::Rect(0, 0, 100, 100));
398 bool needsUpdate = updateAndPush(layer1.get(), layerImpl1.get(), 398 bool needsUpdate = updateAndPush(layer1.get(), layerImpl1.get(),
399 layer2.get(), layerImpl2.get()); 399 layer2.get(), layerImpl2.get());
400 // We should need idle-painting for both remaining tiles in layer2. 400 // We should need idle-painting for both remaining tiles in layer2.
401 EXPECT_TRUE(needsUpdate); 401 EXPECT_TRUE(needsUpdate);
402 402
403 // Reduce our memory limits to 1mb. 403 // Reduce our memory limits to 1mb.
404 m_textureManager->setMaxMemoryLimitBytes(1024 * 1024); 404 m_resourceManager->setMaxMemoryLimitBytes(1024 * 1024);
405 405
406 // Now idle paint layer2. We are going to run out of memory though! 406 // Now idle paint layer2. We are going to run out of memory though!
407 // Oh well, commit the frame and push. 407 // Oh well, commit the frame and push.
408 for (int i = 0; i < 4; i++) { 408 for (int i = 0; i < 4; i++) {
409 needsUpdate = updateAndPush(layer1.get(), layerImpl1.get(), 409 needsUpdate = updateAndPush(layer1.get(), layerImpl1.get(),
410 layer2.get(), layerImpl2.get()); 410 layer2.get(), layerImpl2.get());
411 } 411 }
412 412
413 // Sanity check, we should have textures for the big layer. 413 // Sanity check, we should have textures for the big layer.
414 EXPECT_TRUE(layerImpl1->hasResourceIdForTileAt(0, 0)); 414 EXPECT_TRUE(layerImpl1->hasResourceIdForTileAt(0, 0));
415 EXPECT_TRUE(layerImpl1->hasResourceIdForTileAt(0, 23)); 415 EXPECT_TRUE(layerImpl1->hasResourceIdForTileAt(0, 23));
416 416
417 // We should only have the first two tiles from layer2 since 417 // We should only have the first two tiles from layer2 since
418 // it failed to idle update the last tile. 418 // it failed to idle update the last tile.
419 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 0)); 419 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 0));
420 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 0)); 420 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 0));
421 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 1)); 421 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 1));
422 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 1)); 422 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 1));
423 423
424 EXPECT_FALSE(needsUpdate); 424 EXPECT_FALSE(needsUpdate);
425 EXPECT_FALSE(layerImpl2->hasResourceIdForTileAt(0, 2)); 425 EXPECT_FALSE(layerImpl2->hasResourceIdForTileAt(0, 2));
426 } 426 }
427 427
428 TEST_F(TiledLayerTest, pushIdlePaintedOccludedTiles) 428 TEST_F(TiledLayerTest, pushIdlePaintedOccludedTiles)
429 { 429 {
430 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 430 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
431 ScopedFakeTiledLayerImpl layerImpl(1); 431 ScopedFakeTiledLayerImpl layerImpl(1);
432 TestOcclusionTracker occluded; 432 TestOcclusionTracker occluded;
433 m_occlusion = &occluded; 433 m_occlusion = &occluded;
434 434
435 // The tile size is 100x100, so this invalidates one occluded tile, culls it during paint, but prepaints it. 435 // The tile size is 100x100, so this invalidates one occluded tile, culls it during paint, but prepaints it.
436 occluded.setOcclusion(gfx::Rect(0, 0, 100, 100)); 436 occluded.setOcclusion(gfx::Rect(0, 0, 100, 100));
437 437
438 layer->setBounds(gfx::Size(100, 100)); 438 layer->setBounds(gfx::Size(100, 100));
439 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 100)); 439 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 100));
440 updateAndPush(layer.get(), layerImpl.get()); 440 updateAndPush(layer.get(), layerImpl.get());
441 441
442 // We should have the prepainted tile on the impl side, but culled it during paint. 442 // We should have the prepainted tile on the impl side, but culled it during paint.
443 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); 443 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
444 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); 444 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload());
445 } 445 }
446 446
447 TEST_F(TiledLayerTest, pushTilesMarkedDirtyDuringPaint) 447 TEST_F(TiledLayerTest, pushTilesMarkedDirtyDuringPaint)
448 { 448 {
449 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 449 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
450 ScopedFakeTiledLayerImpl layerImpl(1); 450 ScopedFakeTiledLayerImpl layerImpl(1);
451 451
452 // The tile size is 100x100, so this invalidates and then paints two tiles. 452 // The tile size is 100x100, so this invalidates and then paints two tiles.
453 // However, during the paint, we invalidate one of the tiles. This should 453 // However, during the paint, we invalidate one of the tiles. This should
454 // not prevent the tile from being pushed. 454 // not prevent the tile from being pushed.
455 layer->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), la yer.get()); 455 layer->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), la yer.get());
456 layer->setBounds(gfx::Size(100, 200)); 456 layer->setBounds(gfx::Size(100, 200));
457 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200)); 457 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200));
458 updateAndPush(layer.get(), layerImpl.get()); 458 updateAndPush(layer.get(), layerImpl.get());
459 459
460 // We should have both tiles on the impl side. 460 // We should have both tiles on the impl side.
461 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); 461 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
462 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); 462 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1));
463 } 463 }
464 464
465 TEST_F(TiledLayerTest, pushTilesLayerMarkedDirtyDuringPaintOnNextLayer) 465 TEST_F(TiledLayerTest, pushTilesLayerMarkedDirtyDuringPaintOnNextLayer)
466 { 466 {
467 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer (m_textureManager.get())); 467 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer (m_resourceManager.get()));
468 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer (m_textureManager.get())); 468 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer (m_resourceManager.get()));
469 ScopedFakeTiledLayerImpl layer1Impl(1); 469 ScopedFakeTiledLayerImpl layer1Impl(1);
470 ScopedFakeTiledLayerImpl layer2Impl(2); 470 ScopedFakeTiledLayerImpl layer2Impl(2);
471 471
472 // Invalidate a tile on layer1, during update of layer 2. 472 // Invalidate a tile on layer1, during update of layer 2.
473 layer2->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), l ayer1.get()); 473 layer2->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), l ayer1.get());
474 layer1->setBounds(gfx::Size(100, 200)); 474 layer1->setBounds(gfx::Size(100, 200));
475 layer1->setVisibleContentRect(gfx::Rect(0, 0, 100, 200)); 475 layer1->setVisibleContentRect(gfx::Rect(0, 0, 100, 200));
476 layer2->setBounds(gfx::Size(100, 200)); 476 layer2->setBounds(gfx::Size(100, 200));
477 layer2->setVisibleContentRect(gfx::Rect(0, 0, 100, 200)); 477 layer2->setVisibleContentRect(gfx::Rect(0, 0, 100, 200));
478 updateAndPush(layer1.get(), layer1Impl.get(), 478 updateAndPush(layer1.get(), layer1Impl.get(),
479 layer2.get(), layer2Impl.get()); 479 layer2.get(), layer2Impl.get());
480 480
481 // We should have both tiles on the impl side for all layers. 481 // We should have both tiles on the impl side for all layers.
482 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 0)); 482 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 0));
483 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 1)); 483 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 1));
484 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 0)); 484 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 0));
485 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 1)); 485 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 1));
486 } 486 }
487 487
488 TEST_F(TiledLayerTest, pushTilesLayerMarkedDirtyDuringPaintOnPreviousLayer) 488 TEST_F(TiledLayerTest, pushTilesLayerMarkedDirtyDuringPaintOnPreviousLayer)
489 { 489 {
490 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer (m_textureManager.get())); 490 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer (m_resourceManager.get()));
491 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer (m_textureManager.get())); 491 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer (m_resourceManager.get()));
492 ScopedFakeTiledLayerImpl layer1Impl(1); 492 ScopedFakeTiledLayerImpl layer1Impl(1);
493 ScopedFakeTiledLayerImpl layer2Impl(2); 493 ScopedFakeTiledLayerImpl layer2Impl(2);
494 494
495 layer1->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), l ayer2.get()); 495 layer1->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), l ayer2.get());
496 layer1->setBounds(gfx::Size(100, 200)); 496 layer1->setBounds(gfx::Size(100, 200));
497 layer1->setVisibleContentRect(gfx::Rect(0, 0, 100, 200)); 497 layer1->setVisibleContentRect(gfx::Rect(0, 0, 100, 200));
498 layer2->setBounds(gfx::Size(100, 200)); 498 layer2->setBounds(gfx::Size(100, 200));
499 layer2->setVisibleContentRect(gfx::Rect(0, 0, 100, 200)); 499 layer2->setVisibleContentRect(gfx::Rect(0, 0, 100, 200));
500 updateAndPush(layer1.get(), layer1Impl.get(), 500 updateAndPush(layer1.get(), layer1Impl.get(),
501 layer2.get(), layer2Impl.get()); 501 layer2.get(), layer2Impl.get());
(...skipping 18 matching lines...) Expand all
520 int layerWidth = 4 * FakeTiledLayer::tileSize().width(); 520 int layerWidth = 4 * FakeTiledLayer::tileSize().width();
521 int layerHeight = 4 * FakeTiledLayer::tileSize().height(); 521 int layerHeight = 4 * FakeTiledLayer::tileSize().height();
522 int memoryForLayer = layerWidth * layerHeight * 4; 522 int memoryForLayer = layerWidth * layerHeight * 4;
523 gfx::Size viewportSize = gfx::Size(layerWidth, layerHeight); 523 gfx::Size viewportSize = gfx::Size(layerWidth, layerHeight);
524 layerTreeHost->setViewportSize(viewportSize, viewportSize); 524 layerTreeHost->setViewportSize(viewportSize, viewportSize);
525 525
526 // Use 8x4 tiles to run out of memory. 526 // Use 8x4 tiles to run out of memory.
527 if (runOutOfMemory[i]) 527 if (runOutOfMemory[i])
528 layerWidth *= 2; 528 layerWidth *= 2;
529 529
530 m_textureManager->setMaxMemoryLimitBytes(memoryForLayer); 530 m_resourceManager->setMaxMemoryLimitBytes(memoryForLayer);
531 531
532 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLa yer(m_textureManager.get())); 532 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLa yer(m_resourceManager.get()));
533 ScopedFakeTiledLayerImpl layerImpl(1); 533 ScopedFakeTiledLayerImpl layerImpl(1);
534 534
535 // Full size layer with half being visible. 535 // Full size layer with half being visible.
536 gfx::Size contentBounds(layerWidth, layerHeight); 536 gfx::Size contentBounds(layerWidth, layerHeight);
537 gfx::Rect contentRect(gfx::Point(), contentBounds); 537 gfx::Rect contentRect(gfx::Point(), contentBounds);
538 gfx::Rect visibleRect(gfx::Point(), gfx::Size(layerWidth / 2, layerHeigh t)); 538 gfx::Rect visibleRect(gfx::Point(), gfx::Size(layerWidth / 2, layerHeigh t));
539 539
540 // Pretend the layer is animating. 540 // Pretend the layer is animating.
541 layer->setDrawTransformIsAnimating(true); 541 layer->setDrawTransformIsAnimating(true);
542 layer->setBounds(contentBounds); 542 layer->setBounds(contentBounds);
543 layer->setVisibleContentRect(visibleRect); 543 layer->setVisibleContentRect(visibleRect);
544 layer->invalidateContentRect(contentRect); 544 layer->invalidateContentRect(contentRect);
545 layer->setLayerTreeHost(layerTreeHost.get()); 545 layer->setLayerTreeHost(layerTreeHost.get());
546 546
547 // The layer should paint it's entire contents on the first paint 547 // The layer should paint it's entire contents on the first paint
548 // if it is close to the viewport size and has the available memory. 548 // if it is close to the viewport size and has the available memory.
549 layer->setTexturePriorities(m_priorityCalculator); 549 layer->setTexturePriorities(m_priorityCalculator);
550 m_textureManager->prioritizeTextures(); 550 m_resourceManager->prioritizeTextures();
551 layer->update(*m_queue.get(), 0, m_stats); 551 layer->update(*m_queue.get(), 0, m_stats);
552 updateTextures(); 552 updateTextures();
553 layerPushPropertiesTo(layer.get(), layerImpl.get()); 553 layerPushPropertiesTo(layer.get(), layerImpl.get());
554 554
555 // We should have all the tiles for the small animated layer. 555 // We should have all the tiles for the small animated layer.
556 // We should still have the visible tiles when we didn't 556 // We should still have the visible tiles when we didn't
557 // have enough memory for all the tiles. 557 // have enough memory for all the tiles.
558 if (!runOutOfMemory[i]) { 558 if (!runOutOfMemory[i]) {
559 for (int i = 0; i < 4; ++i) { 559 for (int i = 0; i < 4; ++i) {
560 for (int j = 0; j < 4; ++j) 560 for (int j = 0; j < 4; ++j)
561 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(i, j)); 561 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(i, j));
562 } 562 }
563 } else { 563 } else {
564 for (int i = 0; i < 8; ++i) { 564 for (int i = 0; i < 8; ++i) {
565 for (int j = 0; j < 4; ++j) 565 for (int j = 0; j < 4; ++j)
566 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), i < 4); 566 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), i < 4);
567 } 567 }
568 } 568 }
569 } 569 }
570 } 570 }
571 571
572 TEST_F(TiledLayerTest, idlePaintOutOfMemory) 572 TEST_F(TiledLayerTest, idlePaintOutOfMemory)
573 { 573 {
574 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 574 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
575 ScopedFakeTiledLayerImpl layerImpl(1); 575 ScopedFakeTiledLayerImpl layerImpl(1);
576 576
577 // We have enough memory for only the visible rect, so we will run out of me mory in first idle paint. 577 // We have enough memory for only the visible rect, so we will run out of me mory in first idle paint.
578 int memoryLimit = 4 * 100 * 100; // 1 tiles, 4 bytes per pixel. 578 int memoryLimit = 4 * 100 * 100; // 1 tiles, 4 bytes per pixel.
579 m_textureManager->setMaxMemoryLimitBytes(memoryLimit); 579 m_resourceManager->setMaxMemoryLimitBytes(memoryLimit);
580 580
581 // The tile size is 100x100, so this invalidates and then paints two tiles. 581 // The tile size is 100x100, so this invalidates and then paints two tiles.
582 bool needsUpdate = false; 582 bool needsUpdate = false;
583 layer->setBounds(gfx::Size(300, 300)); 583 layer->setBounds(gfx::Size(300, 300));
584 layer->setVisibleContentRect(gfx::Rect(100, 100, 100, 100)); 584 layer->setVisibleContentRect(gfx::Rect(100, 100, 100, 100));
585 for (int i = 0; i < 2; i++) 585 for (int i = 0; i < 2; i++)
586 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); 586 needsUpdate = updateAndPush(layer.get(), layerImpl.get());
587 587
588 // Idle-painting should see no more priority tiles for painting. 588 // Idle-painting should see no more priority tiles for painting.
589 EXPECT_FALSE(needsUpdate); 589 EXPECT_FALSE(needsUpdate);
590 590
591 // We should have one tile on the impl side. 591 // We should have one tile on the impl side.
592 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 1)); 592 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 1));
593 } 593 }
594 594
595 TEST_F(TiledLayerTest, idlePaintZeroSizedLayer) 595 TEST_F(TiledLayerTest, idlePaintZeroSizedLayer)
596 { 596 {
597 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 597 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
598 ScopedFakeTiledLayerImpl layerImpl(1); 598 ScopedFakeTiledLayerImpl layerImpl(1);
599 599
600 bool animating[2] = {false, true}; 600 bool animating[2] = {false, true};
601 for (int i = 0; i < 2; i++) { 601 for (int i = 0; i < 2; i++) {
602 // Pretend the layer is animating. 602 // Pretend the layer is animating.
603 layer->setDrawTransformIsAnimating(animating[i]); 603 layer->setDrawTransformIsAnimating(animating[i]);
604 604
605 // The layer's bounds are empty. 605 // The layer's bounds are empty.
606 // Empty layers don't paint or idle-paint. 606 // Empty layers don't paint or idle-paint.
607 layer->setBounds(gfx::Size()); 607 layer->setBounds(gfx::Size());
608 layer->setVisibleContentRect(gfx::Rect()); 608 layer->setVisibleContentRect(gfx::Rect());
609 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); 609 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get());
610 610
611 // Empty layers don't have tiles. 611 // Empty layers don't have tiles.
612 EXPECT_EQ(0u, layer->numPaintedTiles()); 612 EXPECT_EQ(0u, layer->numPaintedTiles());
613 613
614 // Empty layers don't need prepaint. 614 // Empty layers don't need prepaint.
615 EXPECT_FALSE(needsUpdate); 615 EXPECT_FALSE(needsUpdate);
616 616
617 // Empty layers don't have tiles. 617 // Empty layers don't have tiles.
618 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0)); 618 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0));
619 } 619 }
620 } 620 }
621 621
622 TEST_F(TiledLayerTest, idlePaintNonVisibleLayers) 622 TEST_F(TiledLayerTest, idlePaintNonVisibleLayers)
623 { 623 {
624 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 624 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
625 ScopedFakeTiledLayerImpl layerImpl(1); 625 ScopedFakeTiledLayerImpl layerImpl(1);
626 626
627 // Alternate between not visible and visible. 627 // Alternate between not visible and visible.
628 gfx::Rect v(0, 0, 100, 100); 628 gfx::Rect v(0, 0, 100, 100);
629 gfx::Rect nv(0, 0, 0, 0); 629 gfx::Rect nv(0, 0, 0, 0);
630 gfx::Rect visibleRect[10] = {nv, nv, v, v, nv, nv, v, v, nv, nv}; 630 gfx::Rect visibleRect[10] = {nv, nv, v, v, nv, nv, v, v, nv, nv};
631 bool invalidate[10] = {true, true, true, true, true, true, true, true, fals e, false }; 631 bool invalidate[10] = {true, true, true, true, true, true, true, true, fals e, false };
632 632
633 // We should not have any tiles except for when the layer was visible 633 // We should not have any tiles except for when the layer was visible
634 // or after the layer was visible and we didn't invalidate. 634 // or after the layer was visible and we didn't invalidate.
635 bool haveTile[10] = { false, false, true, true, false, false, true, true, tr ue, true }; 635 bool haveTile[10] = { false, false, true, true, false, false, true, true, tr ue, true };
636 636
637 for (int i = 0; i < 10; i++) { 637 for (int i = 0; i < 10; i++) {
638 layer->setBounds(gfx::Size(100, 100)); 638 layer->setBounds(gfx::Size(100, 100));
639 layer->setVisibleContentRect(visibleRect[i]); 639 layer->setVisibleContentRect(visibleRect[i]);
640 640
641 if (invalidate[i]) 641 if (invalidate[i])
642 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 100)); 642 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 100));
643 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); 643 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get());
644 644
645 // We should never signal idle paint, as we painted the entire layer 645 // We should never signal idle paint, as we painted the entire layer
646 // or the layer was not visible. 646 // or the layer was not visible.
647 EXPECT_FALSE(needsUpdate); 647 EXPECT_FALSE(needsUpdate);
648 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(0, 0), haveTile[i]); 648 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(0, 0), haveTile[i]);
649 } 649 }
650 } 650 }
651 651
652 TEST_F(TiledLayerTest, invalidateFromPrepare) 652 TEST_F(TiledLayerTest, invalidateFromPrepare)
653 { 653 {
654 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 654 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
655 ScopedFakeTiledLayerImpl layerImpl(1); 655 ScopedFakeTiledLayerImpl layerImpl(1);
656 656
657 // The tile size is 100x100, so this invalidates and then paints two tiles. 657 // The tile size is 100x100, so this invalidates and then paints two tiles.
658 layer->setBounds(gfx::Size(100, 200)); 658 layer->setBounds(gfx::Size(100, 200));
659 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200)); 659 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200));
660 updateAndPush(layer.get(), layerImpl.get()); 660 updateAndPush(layer.get(), layerImpl.get());
661 661
662 // We should have both tiles on the impl side. 662 // We should have both tiles on the impl side.
663 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); 663 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
664 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); 664 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1));
(...skipping 14 matching lines...) Expand all
679 679
680 // The layer should still be invalid as update invoked invalidate. 680 // The layer should still be invalid as update invoked invalidate.
681 updateAndPush(layer.get(), layerImpl.get()); // visible 681 updateAndPush(layer.get(), layerImpl.get()); // visible
682 EXPECT_EQ(1, layer->fakeLayerUpdater()->prepareCount()); 682 EXPECT_EQ(1, layer->fakeLayerUpdater()->prepareCount());
683 } 683 }
684 684
685 TEST_F(TiledLayerTest, verifyUpdateRectWhenContentBoundsAreScaled) 685 TEST_F(TiledLayerTest, verifyUpdateRectWhenContentBoundsAreScaled)
686 { 686 {
687 // The updateRect (that indicates what was actually painted) should be in 687 // The updateRect (that indicates what was actually painted) should be in
688 // layer space, not the content space. 688 // layer space, not the content space.
689 scoped_refptr<FakeTiledLayerWithScaledBounds> layer = make_scoped_refptr(new FakeTiledLayerWithScaledBounds(m_textureManager.get())); 689 scoped_refptr<FakeTiledLayerWithScaledBounds> layer = make_scoped_refptr(new FakeTiledLayerWithScaledBounds(m_resourceManager.get()));
690 690
691 gfx::Rect layerBounds(0, 0, 300, 200); 691 gfx::Rect layerBounds(0, 0, 300, 200);
692 gfx::Rect contentBounds(0, 0, 200, 250); 692 gfx::Rect contentBounds(0, 0, 200, 250);
693 693
694 layer->setBounds(layerBounds.size()); 694 layer->setBounds(layerBounds.size());
695 layer->setContentBounds(contentBounds.size()); 695 layer->setContentBounds(contentBounds.size());
696 layer->setVisibleContentRect(contentBounds); 696 layer->setVisibleContentRect(contentBounds);
697 697
698 // On first update, the updateRect includes all tiles, even beyond the bound aries of the layer. 698 // On first update, the updateRect includes all tiles, even beyond the bound aries of the layer.
699 // However, it should still be in layer space, not content space. 699 // However, it should still be in layer space, not content space.
700 layer->invalidateContentRect(contentBounds); 700 layer->invalidateContentRect(contentBounds);
701 701
702 layer->setTexturePriorities(m_priorityCalculator); 702 layer->setTexturePriorities(m_priorityCalculator);
703 m_textureManager->prioritizeTextures(); 703 m_resourceManager->prioritizeTextures();
704 layer->update(*m_queue.get(), 0, m_stats); 704 layer->update(*m_queue.get(), 0, m_stats);
705 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 300, 300 * 0.8), layer->updateRect()); 705 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 300, 300 * 0.8), layer->updateRect());
706 updateTextures(); 706 updateTextures();
707 707
708 // After the tiles are updated once, another invalidate only needs to update the bounds of the layer. 708 // After the tiles are updated once, another invalidate only needs to update the bounds of the layer.
709 layer->setTexturePriorities(m_priorityCalculator); 709 layer->setTexturePriorities(m_priorityCalculator);
710 m_textureManager->prioritizeTextures(); 710 m_resourceManager->prioritizeTextures();
711 layer->invalidateContentRect(contentBounds); 711 layer->invalidateContentRect(contentBounds);
712 layer->update(*m_queue.get(), 0, m_stats); 712 layer->update(*m_queue.get(), 0, m_stats);
713 EXPECT_FLOAT_RECT_EQ(gfx::RectF(layerBounds), layer->updateRect()); 713 EXPECT_FLOAT_RECT_EQ(gfx::RectF(layerBounds), layer->updateRect());
714 updateTextures(); 714 updateTextures();
715 715
716 // Partial re-paint should also be represented by the updateRect in layer sp ace, not content space. 716 // Partial re-paint should also be represented by the updateRect in layer sp ace, not content space.
717 gfx::Rect partialDamage(30, 100, 10, 10); 717 gfx::Rect partialDamage(30, 100, 10, 10);
718 layer->invalidateContentRect(partialDamage); 718 layer->invalidateContentRect(partialDamage);
719 layer->setTexturePriorities(m_priorityCalculator); 719 layer->setTexturePriorities(m_priorityCalculator);
720 m_textureManager->prioritizeTextures(); 720 m_resourceManager->prioritizeTextures();
721 layer->update(*m_queue.get(), 0, m_stats); 721 layer->update(*m_queue.get(), 0, m_stats);
722 EXPECT_FLOAT_RECT_EQ(gfx::RectF(45, 80, 15, 8), layer->updateRect()); 722 EXPECT_FLOAT_RECT_EQ(gfx::RectF(45, 80, 15, 8), layer->updateRect());
723 } 723 }
724 724
725 TEST_F(TiledLayerTest, verifyInvalidationWhenContentsScaleChanges) 725 TEST_F(TiledLayerTest, verifyInvalidationWhenContentsScaleChanges)
726 { 726 {
727 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 727 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
728 ScopedFakeTiledLayerImpl layerImpl(1); 728 ScopedFakeTiledLayerImpl layerImpl(1);
729 729
730 // Create a layer with one tile. 730 // Create a layer with one tile.
731 layer->setBounds(gfx::Size(100, 100)); 731 layer->setBounds(gfx::Size(100, 100));
732 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 100)); 732 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 100));
733 733
734 // Invalidate the entire layer. 734 // Invalidate the entire layer.
735 layer->setNeedsDisplay(); 735 layer->setNeedsDisplay();
736 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100), layer->lastNeedsDisplayRect ()); 736 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100), layer->lastNeedsDisplayRect ());
737 737
738 // Push the tiles to the impl side and check that there is exactly one. 738 // Push the tiles to the impl side and check that there is exactly one.
739 layer->setTexturePriorities(m_priorityCalculator); 739 layer->setTexturePriorities(m_priorityCalculator);
740 m_textureManager->prioritizeTextures(); 740 m_resourceManager->prioritizeTextures();
741 layer->update(*m_queue.get(), 0, m_stats); 741 layer->update(*m_queue.get(), 0, m_stats);
742 updateTextures(); 742 updateTextures();
743 layerPushPropertiesTo(layer.get(), layerImpl.get()); 743 layerPushPropertiesTo(layer.get(), layerImpl.get());
744 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); 744 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
745 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); 745 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1));
746 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 0)); 746 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 0));
747 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 1)); 747 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 1));
748 748
749 // Change the contents scale and verify that the content rectangle requiring painting 749 // Change the contents scale and verify that the content rectangle requiring painting
750 // is not scaled. 750 // is not scaled.
751 layer->setContentsScale(2); 751 layer->setContentsScale(2);
752 layer->setVisibleContentRect(gfx::Rect(0, 0, 200, 200)); 752 layer->setVisibleContentRect(gfx::Rect(0, 0, 200, 200));
753 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100), layer->lastNeedsDisplayRect ()); 753 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100), layer->lastNeedsDisplayRect ());
754 754
755 // The impl side should get 2x2 tiles now. 755 // The impl side should get 2x2 tiles now.
756 layer->setTexturePriorities(m_priorityCalculator); 756 layer->setTexturePriorities(m_priorityCalculator);
757 m_textureManager->prioritizeTextures(); 757 m_resourceManager->prioritizeTextures();
758 layer->update(*m_queue.get(), 0, m_stats); 758 layer->update(*m_queue.get(), 0, m_stats);
759 updateTextures(); 759 updateTextures();
760 layerPushPropertiesTo(layer.get(), layerImpl.get()); 760 layerPushPropertiesTo(layer.get(), layerImpl.get());
761 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); 761 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
762 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); 762 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1));
763 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 0)); 763 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 0));
764 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 1)); 764 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 1));
765 765
766 // Invalidate the entire layer again, but do not paint. All tiles should be gone now from the 766 // Invalidate the entire layer again, but do not paint. All tiles should be gone now from the
767 // impl side. 767 // impl side.
768 layer->setNeedsDisplay(); 768 layer->setNeedsDisplay();
769 layer->setTexturePriorities(m_priorityCalculator); 769 layer->setTexturePriorities(m_priorityCalculator);
770 m_textureManager->prioritizeTextures(); 770 m_resourceManager->prioritizeTextures();
771 771
772 layerPushPropertiesTo(layer.get(), layerImpl.get()); 772 layerPushPropertiesTo(layer.get(), layerImpl.get());
773 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0)); 773 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0));
774 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); 774 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1));
775 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 0)); 775 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 0));
776 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 1)); 776 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 1));
777 } 777 }
778 778
779 TEST_F(TiledLayerTest, skipsDrawGetsReset) 779 TEST_F(TiledLayerTest, skipsDrawGetsReset)
780 { 780 {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 EXPECT_FALSE(childLayer->skipsDraw()); 812 EXPECT_FALSE(childLayer->skipsDraw());
813 813
814 layerTreeHost->commitComplete(); 814 layerTreeHost->commitComplete();
815 815
816 // Remove the child layer. 816 // Remove the child layer.
817 rootLayer->removeAllChildren(); 817 rootLayer->removeAllChildren();
818 818
819 layerTreeHost->updateLayers(*m_queue.get(), memoryLimit); 819 layerTreeHost->updateLayers(*m_queue.get(), memoryLimit);
820 EXPECT_FALSE(rootLayer->skipsDraw()); 820 EXPECT_FALSE(rootLayer->skipsDraw());
821 821
822 textureManagerClearAllMemory(layerTreeHost->contentsTextureManager(), m_reso urceProvider.get()); 822 resourceManagerClearAllMemory(layerTreeHost->contentsTextureManager(), m_res ourceProvider.get());
823 layerTreeHost->setRootLayer(0); 823 layerTreeHost->setRootLayer(0);
824 } 824 }
825 825
826 TEST_F(TiledLayerTest, resizeToSmaller) 826 TEST_F(TiledLayerTest, resizeToSmaller)
827 { 827 {
828 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 828 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
829 829
830 layer->setBounds(gfx::Size(700, 700)); 830 layer->setBounds(gfx::Size(700, 700));
831 layer->setVisibleContentRect(gfx::Rect(0, 0, 700, 700)); 831 layer->setVisibleContentRect(gfx::Rect(0, 0, 700, 700));
832 layer->invalidateContentRect(gfx::Rect(0, 0, 700, 700)); 832 layer->invalidateContentRect(gfx::Rect(0, 0, 700, 700));
833 833
834 layer->setTexturePriorities(m_priorityCalculator); 834 layer->setTexturePriorities(m_priorityCalculator);
835 m_textureManager->prioritizeTextures(); 835 m_resourceManager->prioritizeTextures();
836 layer->update(*m_queue.get(), 0, m_stats); 836 layer->update(*m_queue.get(), 0, m_stats);
837 837
838 layer->setBounds(gfx::Size(200, 200)); 838 layer->setBounds(gfx::Size(200, 200));
839 layer->invalidateContentRect(gfx::Rect(0, 0, 200, 200)); 839 layer->invalidateContentRect(gfx::Rect(0, 0, 200, 200));
840 } 840 }
841 841
842 TEST_F(TiledLayerTest, hugeLayerUpdateCrash) 842 TEST_F(TiledLayerTest, hugeLayerUpdateCrash)
843 { 843 {
844 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 844 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
845 845
846 int size = 1 << 30; 846 int size = 1 << 30;
847 layer->setBounds(gfx::Size(size, size)); 847 layer->setBounds(gfx::Size(size, size));
848 layer->setVisibleContentRect(gfx::Rect(0, 0, 700, 700)); 848 layer->setVisibleContentRect(gfx::Rect(0, 0, 700, 700));
849 layer->invalidateContentRect(gfx::Rect(0, 0, size, size)); 849 layer->invalidateContentRect(gfx::Rect(0, 0, size, size));
850 850
851 // Ensure no crash for bounds where size * size would overflow an int. 851 // Ensure no crash for bounds where size * size would overflow an int.
852 layer->setTexturePriorities(m_priorityCalculator); 852 layer->setTexturePriorities(m_priorityCalculator);
853 m_textureManager->prioritizeTextures(); 853 m_resourceManager->prioritizeTextures();
854 layer->update(*m_queue.get(), 0, m_stats); 854 layer->update(*m_queue.get(), 0, m_stats);
855 } 855 }
856 856
857 TEST_F(TiledLayerTest, partialUpdates) 857 TEST_F(TiledLayerTest, partialUpdates)
858 { 858 {
859 LayerTreeSettings settings; 859 LayerTreeSettings settings;
860 settings.maxPartialTextureUpdates = 4; 860 settings.maxPartialTextureUpdates = 4;
861 861
862 FakeLayerImplTreeHostClient fakeLayerImplTreeHostClient; 862 FakeLayerImplTreeHostClient fakeLayerImplTreeHostClient;
863 scoped_ptr<LayerTreeHost> layerTreeHost = LayerTreeHost::create(&fakeLayerIm plTreeHostClient, settings); 863 scoped_ptr<LayerTreeHost> layerTreeHost = LayerTreeHost::create(&fakeLayerIm plTreeHostClient, settings);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 EXPECT_EQ(0, m_queue->fullUploadSize()); 952 EXPECT_EQ(0, m_queue->fullUploadSize());
953 EXPECT_EQ(4, m_queue->partialUploadSize()); 953 EXPECT_EQ(4, m_queue->partialUploadSize());
954 updateTextures(); 954 updateTextures();
955 EXPECT_EQ(4, layer->fakeLayerUpdater()->updateCount()); 955 EXPECT_EQ(4, layer->fakeLayerUpdater()->updateCount());
956 EXPECT_FALSE(m_queue->hasMoreUpdates()); 956 EXPECT_FALSE(m_queue->hasMoreUpdates());
957 layer->fakeLayerUpdater()->clearUpdateCount(); 957 layer->fakeLayerUpdater()->clearUpdateCount();
958 layerPushPropertiesTo(layer.get(), layerImpl.get()); 958 layerPushPropertiesTo(layer.get(), layerImpl.get());
959 } 959 }
960 layerTreeHost->commitComplete(); 960 layerTreeHost->commitComplete();
961 961
962 textureManagerClearAllMemory(layerTreeHost->contentsTextureManager(), m_reso urceProvider.get()); 962 resourceManagerClearAllMemory(layerTreeHost->contentsTextureManager(), m_res ourceProvider.get());
963 layerTreeHost->setRootLayer(0); 963 layerTreeHost->setRootLayer(0);
964 } 964 }
965 965
966 TEST_F(TiledLayerTest, tilesPaintedWithoutOcclusion) 966 TEST_F(TiledLayerTest, tilesPaintedWithoutOcclusion)
967 { 967 {
968 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 968 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
969 969
970 // The tile size is 100x100, so this invalidates and then paints two tiles. 970 // The tile size is 100x100, so this invalidates and then paints two tiles.
971 layer->setBounds(gfx::Size(100, 200)); 971 layer->setBounds(gfx::Size(100, 200));
972 layer->setDrawableContentRect(gfx::Rect(0, 0, 100, 200)); 972 layer->setDrawableContentRect(gfx::Rect(0, 0, 100, 200));
973 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200)); 973 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 200));
974 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); 974 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200));
975 975
976 layer->setTexturePriorities(m_priorityCalculator); 976 layer->setTexturePriorities(m_priorityCalculator);
977 m_textureManager->prioritizeTextures(); 977 m_resourceManager->prioritizeTextures();
978 layer->update(*m_queue.get(), 0, m_stats); 978 layer->update(*m_queue.get(), 0, m_stats);
979 EXPECT_EQ(2, layer->fakeLayerUpdater()->updateCount()); 979 EXPECT_EQ(2, layer->fakeLayerUpdater()->updateCount());
980 } 980 }
981 981
982 TEST_F(TiledLayerTest, tilesPaintedWithOcclusion) 982 TEST_F(TiledLayerTest, tilesPaintedWithOcclusion)
983 { 983 {
984 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 984 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
985 TestOcclusionTracker occluded; 985 TestOcclusionTracker occluded;
986 986
987 // The tile size is 100x100. 987 // The tile size is 100x100.
988 988
989 layer->setBounds(gfx::Size(600, 600)); 989 layer->setBounds(gfx::Size(600, 600));
990 990
991 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); 991 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100));
992 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->contentBounds() )); 992 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->contentBounds() ));
993 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()) ); 993 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()) );
994 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 994 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
995 995
996 layer->setTexturePriorities(m_priorityCalculator); 996 layer->setTexturePriorities(m_priorityCalculator);
997 m_textureManager->prioritizeTextures(); 997 m_resourceManager->prioritizeTextures();
998 layer->update(*m_queue.get(), &occluded, m_stats); 998 layer->update(*m_queue.get(), &occluded, m_stats);
999 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); 999 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount());
1000 1000
1001 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1001 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1002 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000, 1); 1002 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000, 1);
1003 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); 1003 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload());
1004 1004
1005 layer->fakeLayerUpdater()->clearUpdateCount(); 1005 layer->fakeLayerUpdater()->clearUpdateCount();
1006 layer->setTexturePriorities(m_priorityCalculator); 1006 layer->setTexturePriorities(m_priorityCalculator);
1007 m_textureManager->prioritizeTextures(); 1007 m_resourceManager->prioritizeTextures();
1008 1008
1009 occluded.setOcclusion(gfx::Rect(250, 200, 300, 100)); 1009 occluded.setOcclusion(gfx::Rect(250, 200, 300, 100));
1010 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1010 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
1011 layer->update(*m_queue.get(), &occluded, m_stats); 1011 layer->update(*m_queue.get(), &occluded, m_stats);
1012 EXPECT_EQ(36-2, layer->fakeLayerUpdater()->updateCount()); 1012 EXPECT_EQ(36-2, layer->fakeLayerUpdater()->updateCount());
1013 1013
1014 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1014 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1015 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 + 340000, 1); 1015 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 + 340000, 1);
1016 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); 1016 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload());
1017 1017
1018 layer->fakeLayerUpdater()->clearUpdateCount(); 1018 layer->fakeLayerUpdater()->clearUpdateCount();
1019 layer->setTexturePriorities(m_priorityCalculator); 1019 layer->setTexturePriorities(m_priorityCalculator);
1020 m_textureManager->prioritizeTextures(); 1020 m_resourceManager->prioritizeTextures();
1021 1021
1022 occluded.setOcclusion(gfx::Rect(250, 250, 300, 100)); 1022 occluded.setOcclusion(gfx::Rect(250, 250, 300, 100));
1023 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1023 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
1024 layer->update(*m_queue.get(), &occluded, m_stats); 1024 layer->update(*m_queue.get(), &occluded, m_stats);
1025 EXPECT_EQ(36, layer->fakeLayerUpdater()->updateCount()); 1025 EXPECT_EQ(36, layer->fakeLayerUpdater()->updateCount());
1026 1026
1027 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1027 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1028 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 + 340000 + 360000, 1); 1028 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 + 340000 + 360000, 1);
1029 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); 1029 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload());
1030 } 1030 }
1031 1031
1032 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints) 1032 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints)
1033 { 1033 {
1034 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 1034 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
1035 TestOcclusionTracker occluded; 1035 TestOcclusionTracker occluded;
1036 1036
1037 // The tile size is 100x100. 1037 // The tile size is 100x100.
1038 1038
1039 layer->setBounds(gfx::Size(600, 600)); 1039 layer->setBounds(gfx::Size(600, 600));
1040 1040
1041 // The partially occluded tiles (by the 150 occlusion height) are visible be yond the occlusion, so not culled. 1041 // The partially occluded tiles (by the 150 occlusion height) are visible be yond the occlusion, so not culled.
1042 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); 1042 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150));
1043 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 360)); 1043 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 360));
1044 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 360)); 1044 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 360));
1045 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1045 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
1046 1046
1047 layer->setTexturePriorities(m_priorityCalculator); 1047 layer->setTexturePriorities(m_priorityCalculator);
1048 m_textureManager->prioritizeTextures(); 1048 m_resourceManager->prioritizeTextures();
1049 layer->update(*m_queue.get(), &occluded, m_stats); 1049 layer->update(*m_queue.get(), &occluded, m_stats);
1050 EXPECT_EQ(24-3, layer->fakeLayerUpdater()->updateCount()); 1050 EXPECT_EQ(24-3, layer->fakeLayerUpdater()->updateCount());
1051 1051
1052 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1052 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1053 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000, 1); 1053 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000, 1);
1054 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); 1054 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload());
1055 1055
1056 layer->fakeLayerUpdater()->clearUpdateCount(); 1056 layer->fakeLayerUpdater()->clearUpdateCount();
1057 1057
1058 // Now the visible region stops at the edge of the occlusion so the partly v isible tiles become fully occluded. 1058 // Now the visible region stops at the edge of the occlusion so the partly v isible tiles become fully occluded.
1059 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); 1059 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150));
1060 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 350)); 1060 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 350));
1061 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 350)); 1061 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 350));
1062 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1062 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
1063 layer->setTexturePriorities(m_priorityCalculator); 1063 layer->setTexturePriorities(m_priorityCalculator);
1064 m_textureManager->prioritizeTextures(); 1064 m_resourceManager->prioritizeTextures();
1065 layer->update(*m_queue.get(), &occluded, m_stats); 1065 layer->update(*m_queue.get(), &occluded, m_stats);
1066 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); 1066 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount());
1067 1067
1068 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1068 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1069 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 + 180000, 1); 1069 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 + 180000, 1);
1070 EXPECT_EQ(3 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); 1070 EXPECT_EQ(3 + 6, occluded.overdrawMetrics().tilesCulledForUpload());
1071 1071
1072 layer->fakeLayerUpdater()->clearUpdateCount(); 1072 layer->fakeLayerUpdater()->clearUpdateCount();
1073 1073
1074 // Now the visible region is even smaller than the occlusion, it should have the same result. 1074 // Now the visible region is even smaller than the occlusion, it should have the same result.
1075 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); 1075 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150));
1076 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 340)); 1076 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 340));
1077 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 340)); 1077 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 340));
1078 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1078 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
1079 layer->setTexturePriorities(m_priorityCalculator); 1079 layer->setTexturePriorities(m_priorityCalculator);
1080 m_textureManager->prioritizeTextures(); 1080 m_resourceManager->prioritizeTextures();
1081 layer->update(*m_queue.get(), &occluded, m_stats); 1081 layer->update(*m_queue.get(), &occluded, m_stats);
1082 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); 1082 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount());
1083 1083
1084 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1084 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1085 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 + 180000 + 180000, 1); 1085 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 + 180000 + 180000, 1);
1086 EXPECT_EQ(3 + 6 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); 1086 EXPECT_EQ(3 + 6 + 6, occluded.overdrawMetrics().tilesCulledForUpload());
1087 1087
1088 } 1088 }
1089 1089
1090 TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation) 1090 TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation)
1091 { 1091 {
1092 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 1092 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
1093 TestOcclusionTracker occluded; 1093 TestOcclusionTracker occluded;
1094 1094
1095 // The tile size is 100x100. 1095 // The tile size is 100x100.
1096 1096
1097 layer->setBounds(gfx::Size(600, 600)); 1097 layer->setBounds(gfx::Size(600, 600));
1098 1098
1099 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); 1099 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100));
1100 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 600)); 1100 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 600));
1101 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 600)); 1101 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 600));
1102 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1102 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
1103 layer->setTexturePriorities(m_priorityCalculator); 1103 layer->setTexturePriorities(m_priorityCalculator);
1104 m_textureManager->prioritizeTextures(); 1104 m_resourceManager->prioritizeTextures();
1105 layer->update(*m_queue.get(), &occluded, m_stats); 1105 layer->update(*m_queue.get(), &occluded, m_stats);
1106 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); 1106 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount());
1107 { 1107 {
1108 updateTextures(); 1108 updateTextures();
1109 } 1109 }
1110 1110
1111 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1111 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1112 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000, 1); 1112 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000, 1);
1113 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); 1113 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload());
1114 1114
1115 layer->fakeLayerUpdater()->clearUpdateCount(); 1115 layer->fakeLayerUpdater()->clearUpdateCount();
1116 layer->setTexturePriorities(m_priorityCalculator); 1116 layer->setTexturePriorities(m_priorityCalculator);
1117 m_textureManager->prioritizeTextures(); 1117 m_resourceManager->prioritizeTextures();
1118 1118
1119 // Repaint without marking it dirty. The 3 culled tiles will be pre-painted now. 1119 // Repaint without marking it dirty. The 3 culled tiles will be pre-painted now.
1120 layer->update(*m_queue.get(), &occluded, m_stats); 1120 layer->update(*m_queue.get(), &occluded, m_stats);
1121 EXPECT_EQ(3, layer->fakeLayerUpdater()->updateCount()); 1121 EXPECT_EQ(3, layer->fakeLayerUpdater()->updateCount());
1122 1122
1123 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1123 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1124 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000, 1); 1124 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000, 1);
1125 EXPECT_EQ(6, occluded.overdrawMetrics().tilesCulledForUpload()); 1125 EXPECT_EQ(6, occluded.overdrawMetrics().tilesCulledForUpload());
1126 } 1126 }
1127 1127
1128 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms) 1128 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms)
1129 { 1129 {
1130 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 1130 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
1131 TestOcclusionTracker occluded; 1131 TestOcclusionTracker occluded;
1132 1132
1133 // The tile size is 100x100. 1133 // The tile size is 100x100.
1134 1134
1135 // This makes sure the painting works when the occluded region (in screen sp ace) 1135 // This makes sure the painting works when the occluded region (in screen sp ace)
1136 // is transformed differently than the layer. 1136 // is transformed differently than the layer.
1137 layer->setBounds(gfx::Size(600, 600)); 1137 layer->setBounds(gfx::Size(600, 600));
1138 WebTransformationMatrix screenTransform; 1138 WebTransformationMatrix screenTransform;
1139 screenTransform.scale(0.5); 1139 screenTransform.scale(0.5);
1140 layer->setScreenSpaceTransform(screenTransform); 1140 layer->setScreenSpaceTransform(screenTransform);
1141 layer->setDrawTransform(screenTransform); 1141 layer->setDrawTransform(screenTransform);
1142 1142
1143 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50)); 1143 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50));
1144 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->contentBounds() )); 1144 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->contentBounds() ));
1145 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()) ); 1145 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()) );
1146 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1146 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
1147 layer->setTexturePriorities(m_priorityCalculator); 1147 layer->setTexturePriorities(m_priorityCalculator);
1148 m_textureManager->prioritizeTextures(); 1148 m_resourceManager->prioritizeTextures();
1149 layer->update(*m_queue.get(), &occluded, m_stats); 1149 layer->update(*m_queue.get(), &occluded, m_stats);
1150 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); 1150 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount());
1151 1151
1152 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1152 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1153 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000, 1); 1153 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000, 1);
1154 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); 1154 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload());
1155 } 1155 }
1156 1156
1157 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndScaling) 1157 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndScaling)
1158 { 1158 {
1159 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 1159 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
1160 TestOcclusionTracker occluded; 1160 TestOcclusionTracker occluded;
1161 1161
1162 // The tile size is 100x100. 1162 // The tile size is 100x100.
1163 1163
1164 // This makes sure the painting works when the content space is scaled to 1164 // This makes sure the painting works when the content space is scaled to
1165 // a different layer space. In this case tiles are scaled to be 200x200 1165 // a different layer space. In this case tiles are scaled to be 200x200
1166 // pixels, which means none should be occluded. 1166 // pixels, which means none should be occluded.
1167 layer->setContentsScale(0.5); 1167 layer->setContentsScale(0.5);
1168 EXPECT_FLOAT_EQ(layer->contentsScaleX(), layer->contentsScaleY()); 1168 EXPECT_FLOAT_EQ(layer->contentsScaleX(), layer->contentsScaleY());
1169 layer->setBounds(gfx::Size(600, 600)); 1169 layer->setBounds(gfx::Size(600, 600));
1170 WebTransformationMatrix drawTransform; 1170 WebTransformationMatrix drawTransform;
1171 drawTransform.scale(1 / layer->contentsScaleX()); 1171 drawTransform.scale(1 / layer->contentsScaleX());
1172 layer->setDrawTransform(drawTransform); 1172 layer->setDrawTransform(drawTransform);
1173 layer->setScreenSpaceTransform(drawTransform); 1173 layer->setScreenSpaceTransform(drawTransform);
1174 1174
1175 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); 1175 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100));
1176 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->bounds())); 1176 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->bounds()));
1177 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()) ); 1177 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()) );
1178 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1178 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
1179 layer->setTexturePriorities(m_priorityCalculator); 1179 layer->setTexturePriorities(m_priorityCalculator);
1180 m_textureManager->prioritizeTextures(); 1180 m_resourceManager->prioritizeTextures();
1181 layer->update(*m_queue.get(), &occluded, m_stats); 1181 layer->update(*m_queue.get(), &occluded, m_stats);
1182 // The content is half the size of the layer (so the number of tiles is fewe r). 1182 // The content is half the size of the layer (so the number of tiles is fewe r).
1183 // In this case, the content is 300x300, and since the tile size is 100, the 1183 // In this case, the content is 300x300, and since the tile size is 100, the
1184 // number of tiles 3x3. 1184 // number of tiles 3x3.
1185 EXPECT_EQ(9, layer->fakeLayerUpdater()->updateCount()); 1185 EXPECT_EQ(9, layer->fakeLayerUpdater()->updateCount());
1186 1186
1187 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1187 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1188 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000, 1 ); 1188 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000, 1 );
1189 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); 1189 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload());
1190 1190
1191 layer->fakeLayerUpdater()->clearUpdateCount(); 1191 layer->fakeLayerUpdater()->clearUpdateCount();
1192 1192
1193 // This makes sure the painting works when the content space is scaled to 1193 // This makes sure the painting works when the content space is scaled to
1194 // a different layer space. In this case the occluded region catches the 1194 // a different layer space. In this case the occluded region catches the
1195 // blown up tiles. 1195 // blown up tiles.
1196 occluded.setOcclusion(gfx::Rect(200, 200, 300, 200)); 1196 occluded.setOcclusion(gfx::Rect(200, 200, 300, 200));
1197 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->bounds())); 1197 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->bounds()));
1198 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()) ); 1198 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()) );
1199 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1199 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
1200 layer->setTexturePriorities(m_priorityCalculator); 1200 layer->setTexturePriorities(m_priorityCalculator);
1201 m_textureManager->prioritizeTextures(); 1201 m_resourceManager->prioritizeTextures();
1202 layer->update(*m_queue.get(), &occluded, m_stats); 1202 layer->update(*m_queue.get(), &occluded, m_stats);
1203 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); 1203 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount());
1204 1204
1205 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1205 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1206 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 + 80000, 1); 1206 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 + 80000, 1);
1207 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); 1207 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload());
1208 1208
1209 layer->fakeLayerUpdater()->clearUpdateCount(); 1209 layer->fakeLayerUpdater()->clearUpdateCount();
1210 1210
1211 // This makes sure content scaling and transforms work together. 1211 // This makes sure content scaling and transforms work together.
1212 WebTransformationMatrix screenTransform; 1212 WebTransformationMatrix screenTransform;
1213 screenTransform.scale(0.5); 1213 screenTransform.scale(0.5);
1214 layer->setScreenSpaceTransform(screenTransform); 1214 layer->setScreenSpaceTransform(screenTransform);
1215 layer->setDrawTransform(screenTransform); 1215 layer->setDrawTransform(screenTransform);
1216 1216
1217 occluded.setOcclusion(gfx::Rect(100, 100, 150, 100)); 1217 occluded.setOcclusion(gfx::Rect(100, 100, 150, 100));
1218 1218
1219 gfx::Rect layerBoundsRect(gfx::Point(), layer->bounds()); 1219 gfx::Rect layerBoundsRect(gfx::Point(), layer->bounds());
1220 layer->setDrawableContentRect(gfx::ToEnclosingRect(gfx::ScaleRect(layerBound sRect, 0.5))); 1220 layer->setDrawableContentRect(gfx::ToEnclosingRect(gfx::ScaleRect(layerBound sRect, 0.5)));
1221 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()) ); 1221 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()) );
1222 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1222 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600));
1223 layer->setTexturePriorities(m_priorityCalculator); 1223 layer->setTexturePriorities(m_priorityCalculator);
1224 m_textureManager->prioritizeTextures(); 1224 m_resourceManager->prioritizeTextures();
1225 layer->update(*m_queue.get(), &occluded, m_stats); 1225 layer->update(*m_queue.get(), &occluded, m_stats);
1226 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); 1226 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount());
1227 1227
1228 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1228 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
1229 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 + 80000 + 80000, 1); 1229 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 + 80000 + 80000, 1);
1230 EXPECT_EQ(1 + 1, occluded.overdrawMetrics().tilesCulledForUpload()); 1230 EXPECT_EQ(1 + 1, occluded.overdrawMetrics().tilesCulledForUpload());
1231 } 1231 }
1232 1232
1233 TEST_F(TiledLayerTest, visibleContentOpaqueRegion) 1233 TEST_F(TiledLayerTest, visibleContentOpaqueRegion)
1234 { 1234 {
1235 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 1235 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
1236 TestOcclusionTracker occluded; 1236 TestOcclusionTracker occluded;
1237 1237
1238 // The tile size is 100x100, so this invalidates and then paints two tiles i n various ways. 1238 // The tile size is 100x100, so this invalidates and then paints two tiles i n various ways.
1239 1239
1240 gfx::Rect opaquePaintRect; 1240 gfx::Rect opaquePaintRect;
1241 Region opaqueContents; 1241 Region opaqueContents;
1242 1242
1243 gfx::Rect contentBounds = gfx::Rect(0, 0, 100, 200); 1243 gfx::Rect contentBounds = gfx::Rect(0, 0, 100, 200);
1244 gfx::Rect visibleBounds = gfx::Rect(0, 0, 100, 150); 1244 gfx::Rect visibleBounds = gfx::Rect(0, 0, 100, 150);
1245 1245
1246 layer->setBounds(contentBounds.size()); 1246 layer->setBounds(contentBounds.size());
1247 layer->setDrawableContentRect(visibleBounds); 1247 layer->setDrawableContentRect(visibleBounds);
1248 layer->setVisibleContentRect(visibleBounds); 1248 layer->setVisibleContentRect(visibleBounds);
1249 layer->setDrawOpacity(1); 1249 layer->setDrawOpacity(1);
1250 1250
1251 layer->setTexturePriorities(m_priorityCalculator); 1251 layer->setTexturePriorities(m_priorityCalculator);
1252 m_textureManager->prioritizeTextures(); 1252 m_resourceManager->prioritizeTextures();
1253 1253
1254 // If the layer doesn't paint opaque content, then the visibleContentOpaqueR egion should be empty. 1254 // If the layer doesn't paint opaque content, then the visibleContentOpaqueR egion should be empty.
1255 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); 1255 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect());
1256 layer->invalidateContentRect(contentBounds); 1256 layer->invalidateContentRect(contentBounds);
1257 layer->update(*m_queue.get(), &occluded, m_stats); 1257 layer->update(*m_queue.get(), &occluded, m_stats);
1258 opaqueContents = layer->visibleContentOpaqueRegion(); 1258 opaqueContents = layer->visibleContentOpaqueRegion();
1259 EXPECT_TRUE(opaqueContents.IsEmpty()); 1259 EXPECT_TRUE(opaqueContents.IsEmpty());
1260 1260
1261 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000, 1); 1261 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000, 1);
1262 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); 1262 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1317 EXPECT_EQ(1u, Region::Iterator(opaqueContents).size()); 1317 EXPECT_EQ(1u, Region::Iterator(opaqueContents).size());
1318 1318
1319 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000 * 2 + 1 + 1, 1); 1319 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000 * 2 + 1 + 1, 1);
1320 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 17100, 1); 1320 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 17100, 1);
1321 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 + 20000 - 17100 + 1 + 1, 1); 1321 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 + 20000 - 17100 + 1 + 1, 1);
1322 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); 1322 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload());
1323 } 1323 }
1324 1324
1325 TEST_F(TiledLayerTest, pixelsPaintedMetrics) 1325 TEST_F(TiledLayerTest, pixelsPaintedMetrics)
1326 { 1326 {
1327 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_textureManager.get())); 1327 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( m_resourceManager.get()));
1328 TestOcclusionTracker occluded; 1328 TestOcclusionTracker occluded;
1329 1329
1330 // The tile size is 100x100, so this invalidates and then paints two tiles i n various ways. 1330 // The tile size is 100x100, so this invalidates and then paints two tiles i n various ways.
1331 1331
1332 gfx::Rect opaquePaintRect; 1332 gfx::Rect opaquePaintRect;
1333 Region opaqueContents; 1333 Region opaqueContents;
1334 1334
1335 gfx::Rect contentBounds = gfx::Rect(0, 0, 100, 300); 1335 gfx::Rect contentBounds = gfx::Rect(0, 0, 100, 300);
1336 gfx::Rect visibleBounds = gfx::Rect(0, 0, 100, 300); 1336 gfx::Rect visibleBounds = gfx::Rect(0, 0, 100, 300);
1337 1337
1338 layer->setBounds(contentBounds.size()); 1338 layer->setBounds(contentBounds.size());
1339 layer->setDrawableContentRect(visibleBounds); 1339 layer->setDrawableContentRect(visibleBounds);
1340 layer->setVisibleContentRect(visibleBounds); 1340 layer->setVisibleContentRect(visibleBounds);
1341 layer->setDrawOpacity(1); 1341 layer->setDrawOpacity(1);
1342 1342
1343 layer->setTexturePriorities(m_priorityCalculator); 1343 layer->setTexturePriorities(m_priorityCalculator);
1344 m_textureManager->prioritizeTextures(); 1344 m_resourceManager->prioritizeTextures();
1345 1345
1346 // Invalidates and paints the whole layer. 1346 // Invalidates and paints the whole layer.
1347 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); 1347 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect());
1348 layer->invalidateContentRect(contentBounds); 1348 layer->invalidateContentRect(contentBounds);
1349 layer->update(*m_queue.get(), &occluded, m_stats); 1349 layer->update(*m_queue.get(), &occluded, m_stats);
1350 updateTextures(); 1350 updateTextures();
1351 opaqueContents = layer->visibleContentOpaqueRegion(); 1351 opaqueContents = layer->visibleContentOpaqueRegion();
1352 EXPECT_TRUE(opaqueContents.IsEmpty()); 1352 EXPECT_TRUE(opaqueContents.IsEmpty());
1353 1353
1354 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 30000, 1); 1354 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 30000, 1);
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1515 1515
1516 for (unsigned i = 0; i < 3; ++i) { 1516 for (unsigned i = 0; i < 3; ++i) {
1517 for (unsigned j = 0; j < 2; ++j) 1517 for (unsigned j = 0; j < 2; ++j)
1518 EXPECT_FALSE(rootImpl->hasResourceIdForTileAt(i, j)); 1518 EXPECT_FALSE(rootImpl->hasResourceIdForTileAt(i, j));
1519 EXPECT_FALSE(childImpl->hasResourceIdForTileAt(i, 0)); 1519 EXPECT_FALSE(childImpl->hasResourceIdForTileAt(i, 0));
1520 EXPECT_FALSE(child2Impl->hasResourceIdForTileAt(i, 0)); 1520 EXPECT_FALSE(child2Impl->hasResourceIdForTileAt(i, 0));
1521 } 1521 }
1522 } 1522 }
1523 layerTreeHost->commitComplete(); 1523 layerTreeHost->commitComplete();
1524 1524
1525 textureManagerClearAllMemory(layerTreeHost->contentsTextureManager(), m_reso urceProvider.get()); 1525 resourceManagerClearAllMemory(layerTreeHost->contentsTextureManager(), m_res ourceProvider.get());
1526 layerTreeHost->setRootLayer(0); 1526 layerTreeHost->setRootLayer(0);
1527 } 1527 }
1528 1528
1529 class TrackingLayerPainter : public LayerPainter { 1529 class TrackingLayerPainter : public LayerPainter {
1530 public: 1530 public:
1531 static scoped_ptr<TrackingLayerPainter> create() { return make_scoped_ptr(ne w TrackingLayerPainter()); } 1531 static scoped_ptr<TrackingLayerPainter> create() { return make_scoped_ptr(ne w TrackingLayerPainter()); }
1532 1532
1533 virtual void paint(SkCanvas*, const gfx::Rect& contentRect, gfx::RectF&) OVE RRIDE 1533 virtual void paint(SkCanvas*, const gfx::Rect& contentRect, gfx::RectF&) OVE RRIDE
1534 { 1534 {
1535 m_paintedRect = contentRect; 1535 m_paintedRect = contentRect;
1536 } 1536 }
1537 1537
1538 const gfx::Rect& paintedRect() const { return m_paintedRect; } 1538 const gfx::Rect& paintedRect() const { return m_paintedRect; }
1539 void resetPaintedRect() { m_paintedRect = gfx::Rect(); } 1539 void resetPaintedRect() { m_paintedRect = gfx::Rect(); }
1540 1540
1541 private: 1541 private:
1542 TrackingLayerPainter() { } 1542 TrackingLayerPainter() { }
1543 1543
1544 gfx::Rect m_paintedRect; 1544 gfx::Rect m_paintedRect;
1545 }; 1545 };
1546 1546
1547 class UpdateTrackingTiledLayer : public FakeTiledLayer { 1547 class UpdateTrackingTiledLayer : public FakeTiledLayer {
1548 public: 1548 public:
1549 explicit UpdateTrackingTiledLayer(PrioritizedTextureManager* manager) 1549 explicit UpdateTrackingTiledLayer(PrioritizedResourceManager* manager)
1550 : FakeTiledLayer(manager) 1550 : FakeTiledLayer(manager)
1551 { 1551 {
1552 scoped_ptr<TrackingLayerPainter> trackingLayerPainter(TrackingLayerPaint er::create()); 1552 scoped_ptr<TrackingLayerPainter> trackingLayerPainter(TrackingLayerPaint er::create());
1553 m_trackingLayerPainter = trackingLayerPainter.get(); 1553 m_trackingLayerPainter = trackingLayerPainter.get();
1554 m_layerUpdater = BitmapContentLayerUpdater::create(trackingLayerPainter. PassAs<LayerPainter>()); 1554 m_layerUpdater = BitmapContentLayerUpdater::create(trackingLayerPainter. PassAs<LayerPainter>());
1555 } 1555 }
1556 1556
1557 TrackingLayerPainter* trackingLayerPainter() const { return m_trackingLayerP ainter; } 1557 TrackingLayerPainter* trackingLayerPainter() const { return m_trackingLayerP ainter; }
1558 1558
1559 protected: 1559 protected:
1560 virtual ~UpdateTrackingTiledLayer() { } 1560 virtual ~UpdateTrackingTiledLayer() { }
1561 1561
1562 virtual LayerUpdater* updater() const OVERRIDE { return m_layerUpdater.get() ; } 1562 virtual LayerUpdater* updater() const OVERRIDE { return m_layerUpdater.get() ; }
1563 1563
1564 private: 1564 private:
1565 TrackingLayerPainter* m_trackingLayerPainter; 1565 TrackingLayerPainter* m_trackingLayerPainter;
1566 scoped_refptr<BitmapContentLayerUpdater> m_layerUpdater; 1566 scoped_refptr<BitmapContentLayerUpdater> m_layerUpdater;
1567 }; 1567 };
1568 1568
1569 TEST_F(TiledLayerTest, nonIntegerContentsScaleIsNotDistortedDuringPaint) 1569 TEST_F(TiledLayerTest, nonIntegerContentsScaleIsNotDistortedDuringPaint)
1570 { 1570 {
1571 scoped_refptr<UpdateTrackingTiledLayer> layer = make_scoped_refptr(new Updat eTrackingTiledLayer(m_textureManager.get())); 1571 scoped_refptr<UpdateTrackingTiledLayer> layer = make_scoped_refptr(new Updat eTrackingTiledLayer(m_resourceManager.get()));
1572 1572
1573 gfx::Rect layerRect(0, 0, 30, 31); 1573 gfx::Rect layerRect(0, 0, 30, 31);
1574 layer->setPosition(layerRect.origin()); 1574 layer->setPosition(layerRect.origin());
1575 layer->setBounds(layerRect.size()); 1575 layer->setBounds(layerRect.size());
1576 layer->setContentsScale(1.5); 1576 layer->setContentsScale(1.5);
1577 1577
1578 gfx::Rect contentRect(0, 0, 45, 47); 1578 gfx::Rect contentRect(0, 0, 45, 47);
1579 EXPECT_EQ(contentRect.size(), layer->contentBounds()); 1579 EXPECT_EQ(contentRect.size(), layer->contentBounds());
1580 layer->setVisibleContentRect(contentRect); 1580 layer->setVisibleContentRect(contentRect);
1581 layer->setDrawableContentRect(contentRect); 1581 layer->setDrawableContentRect(contentRect);
1582 1582
1583 layer->setTexturePriorities(m_priorityCalculator); 1583 layer->setTexturePriorities(m_priorityCalculator);
1584 m_textureManager->prioritizeTextures(); 1584 m_resourceManager->prioritizeTextures();
1585 1585
1586 // Update the whole tile. 1586 // Update the whole tile.
1587 layer->update(*m_queue.get(), 0, m_stats); 1587 layer->update(*m_queue.get(), 0, m_stats);
1588 layer->trackingLayerPainter()->resetPaintedRect(); 1588 layer->trackingLayerPainter()->resetPaintedRect();
1589 1589
1590 EXPECT_RECT_EQ(gfx::Rect(), layer->trackingLayerPainter()->paintedRect()); 1590 EXPECT_RECT_EQ(gfx::Rect(), layer->trackingLayerPainter()->paintedRect());
1591 updateTextures(); 1591 updateTextures();
1592 1592
1593 // Invalidate the entire layer in content space. When painting, the rect giv en to webkit should match the layer's bounds. 1593 // Invalidate the entire layer in content space. When painting, the rect giv en to webkit should match the layer's bounds.
1594 layer->invalidateContentRect(contentRect); 1594 layer->invalidateContentRect(contentRect);
1595 layer->update(*m_queue.get(), 0, m_stats); 1595 layer->update(*m_queue.get(), 0, m_stats);
1596 1596
1597 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); 1597 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect());
1598 } 1598 }
1599 1599
1600 TEST_F(TiledLayerTest, nonIntegerContentsScaleIsNotDistortedDuringInvalidation) 1600 TEST_F(TiledLayerTest, nonIntegerContentsScaleIsNotDistortedDuringInvalidation)
1601 { 1601 {
1602 scoped_refptr<UpdateTrackingTiledLayer> layer = make_scoped_refptr(new Updat eTrackingTiledLayer(m_textureManager.get())); 1602 scoped_refptr<UpdateTrackingTiledLayer> layer = make_scoped_refptr(new Updat eTrackingTiledLayer(m_resourceManager.get()));
1603 1603
1604 gfx::Rect layerRect(0, 0, 30, 31); 1604 gfx::Rect layerRect(0, 0, 30, 31);
1605 layer->setPosition(layerRect.origin()); 1605 layer->setPosition(layerRect.origin());
1606 layer->setBounds(layerRect.size()); 1606 layer->setBounds(layerRect.size());
1607 layer->setContentsScale(1.3f); 1607 layer->setContentsScale(1.3f);
1608 1608
1609 gfx::Rect contentRect(gfx::Point(), layer->contentBounds()); 1609 gfx::Rect contentRect(gfx::Point(), layer->contentBounds());
1610 layer->setVisibleContentRect(contentRect); 1610 layer->setVisibleContentRect(contentRect);
1611 layer->setDrawableContentRect(contentRect); 1611 layer->setDrawableContentRect(contentRect);
1612 1612
1613 layer->setTexturePriorities(m_priorityCalculator); 1613 layer->setTexturePriorities(m_priorityCalculator);
1614 m_textureManager->prioritizeTextures(); 1614 m_resourceManager->prioritizeTextures();
1615 1615
1616 // Update the whole tile. 1616 // Update the whole tile.
1617 layer->update(*m_queue.get(), 0, m_stats); 1617 layer->update(*m_queue.get(), 0, m_stats);
1618 layer->trackingLayerPainter()->resetPaintedRect(); 1618 layer->trackingLayerPainter()->resetPaintedRect();
1619 1619
1620 EXPECT_RECT_EQ(gfx::Rect(), layer->trackingLayerPainter()->paintedRect()); 1620 EXPECT_RECT_EQ(gfx::Rect(), layer->trackingLayerPainter()->paintedRect());
1621 updateTextures(); 1621 updateTextures();
1622 1622
1623 // Invalidate the entire layer in layer space. When painting, the rect given to webkit should match the layer's bounds. 1623 // Invalidate the entire layer in layer space. When painting, the rect given to webkit should match the layer's bounds.
1624 layer->setNeedsDisplayRect(layerRect); 1624 layer->setNeedsDisplayRect(layerRect);
1625 layer->update(*m_queue.get(), 0, m_stats); 1625 layer->update(*m_queue.get(), 0, m_stats);
1626 1626
1627 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); 1627 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect());
1628 } 1628 }
1629 1629
1630 } // anonymous namespace 1630 } // anonymous namespace
OLDNEW
« no previous file with comments | « cc/tiled_layer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698