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

Side by Side Diff: cc/prioritized_texture_unittest.cc

Issue 11189043: cc: Rename cc classes and members to match filenames (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months 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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 6
7 #include "CCPrioritizedTexture.h" 7 #include "CCPrioritizedTexture.h"
8 8
9 #include "CCPrioritizedTextureManager.h" 9 #include "CCPrioritizedTextureManager.h"
10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread 10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread
11 #include "CCTexture.h" 11 #include "CCTexture.h"
12 #include "cc/test/fake_graphics_context.h" 12 #include "cc/test/fake_graphics_context.h"
13 #include "cc/test/tiled_layer_test_common.h" 13 #include "cc/test/tiled_layer_test_common.h"
14 #include "cc/test/web_compositor_initializer.h" 14 #include "cc/test/web_compositor_initializer.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 using namespace cc; 17 using namespace cc;
18 using namespace WebKitTests; 18 using namespace WebKitTests;
19 19
20 namespace cc { 20 namespace cc {
21 21
22 class CCPrioritizedTextureTest : public testing::Test { 22 class PrioritizedTextureTest : public testing::Test {
23 public: 23 public:
24 CCPrioritizedTextureTest() 24 PrioritizedTextureTest()
25 : m_textureSize(256, 256) 25 : m_textureSize(256, 256)
26 , m_textureFormat(GraphicsContext3D::RGBA) 26 , m_textureFormat(GraphicsContext3D::RGBA)
27 , m_compositorInitializer(0) 27 , m_compositorInitializer(0)
28 , m_context(WebKit::createFakeCCGraphicsContext()) 28 , m_context(WebKit::createFakeGraphicsContext())
29 { 29 {
30 DebugScopedSetImplThread implThread; 30 DebugScopedSetImplThread implThread;
31 m_resourceProvider = CCResourceProvider::create(m_context.get()); 31 m_resourceProvider = ResourceProvider::create(m_context.get());
32 } 32 }
33 33
34 virtual ~CCPrioritizedTextureTest() 34 virtual ~PrioritizedTextureTest()
35 { 35 {
36 DebugScopedSetImplThread implThread; 36 DebugScopedSetImplThread implThread;
37 m_resourceProvider.reset(); 37 m_resourceProvider.reset();
38 } 38 }
39 39
40 size_t texturesMemorySize(size_t textureCount) 40 size_t texturesMemorySize(size_t textureCount)
41 { 41 {
42 return CCTexture::memorySizeBytes(m_textureSize, m_textureFormat) * text ureCount; 42 return Texture::memorySizeBytes(m_textureSize, m_textureFormat) * textur eCount;
43 } 43 }
44 44
45 scoped_ptr<CCPrioritizedTextureManager> createManager(size_t maxTextures) 45 scoped_ptr<PrioritizedTextureManager> createManager(size_t maxTextures)
46 { 46 {
47 return CCPrioritizedTextureManager::create(texturesMemorySize(maxTexture s), 1024, 0); 47 return PrioritizedTextureManager::create(texturesMemorySize(maxTextures) , 1024, 0);
48 } 48 }
49 49
50 bool validateTexture(scoped_ptr<CCPrioritizedTexture>& texture, bool request Late) 50 bool validateTexture(scoped_ptr<PrioritizedTexture>& texture, bool requestLa te)
51 { 51 {
52 textureManagerAssertInvariants(texture->textureManager()); 52 textureManagerAssertInvariants(texture->textureManager());
53 if (requestLate) 53 if (requestLate)
54 texture->requestLate(); 54 texture->requestLate();
55 textureManagerAssertInvariants(texture->textureManager()); 55 textureManagerAssertInvariants(texture->textureManager());
56 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked; 56 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked;
57 bool success = texture->canAcquireBackingTexture(); 57 bool success = texture->canAcquireBackingTexture();
58 if (success) 58 if (success)
59 texture->acquireBackingTexture(resourceProvider()); 59 texture->acquireBackingTexture(resourceProvider());
60 return success; 60 return success;
61 } 61 }
62 62
63 void prioritizeTexturesAndBackings(CCPrioritizedTextureManager* textureManag er) 63 void prioritizeTexturesAndBackings(PrioritizedTextureManager* textureManager )
64 { 64 {
65 textureManager->prioritizeTextures(); 65 textureManager->prioritizeTextures();
66 textureManagerUpdateBackingsPriorities(textureManager); 66 textureManagerUpdateBackingsPriorities(textureManager);
67 } 67 }
68 68
69 void textureManagerUpdateBackingsPriorities(CCPrioritizedTextureManager* tex tureManager) 69 void textureManagerUpdateBackingsPriorities(PrioritizedTextureManager* textu reManager)
70 { 70 {
71 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked; 71 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked;
72 textureManager->pushTexturePrioritiesToBackings(); 72 textureManager->pushTexturePrioritiesToBackings();
73 } 73 }
74 74
75 CCResourceProvider* resourceProvider() 75 ResourceProvider* resourceProvider()
76 { 76 {
77 return m_resourceProvider.get(); 77 return m_resourceProvider.get();
78 } 78 }
79 79
80 void textureManagerAssertInvariants(CCPrioritizedTextureManager* textureMana ger) 80 void textureManagerAssertInvariants(PrioritizedTextureManager* textureManage r)
81 { 81 {
82 #if !ASSERT_DISABLED 82 #if !ASSERT_DISABLED
83 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked; 83 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked;
84 textureManager->assertInvariants(); 84 textureManager->assertInvariants();
85 #endif 85 #endif
86 } 86 }
87 87
88 bool textureBackingIsAbovePriorityCutoff(CCPrioritizedTexture* texture) 88 bool textureBackingIsAbovePriorityCutoff(PrioritizedTexture* texture)
89 { 89 {
90 return texture->m_backing->wasAbovePriorityCutoffAtLastPriorityUpdate(); 90 return texture->m_backing->wasAbovePriorityCutoffAtLastPriorityUpdate();
91 } 91 }
92 92
93 protected: 93 protected:
94 const IntSize m_textureSize; 94 const IntSize m_textureSize;
95 const GC3Denum m_textureFormat; 95 const GC3Denum m_textureFormat;
96 WebCompositorInitializer m_compositorInitializer; 96 WebCompositorInitializer m_compositorInitializer;
97 scoped_ptr<CCGraphicsContext> m_context; 97 scoped_ptr<GraphicsContext> m_context;
98 scoped_ptr<CCResourceProvider> m_resourceProvider; 98 scoped_ptr<ResourceProvider> m_resourceProvider;
99 }; 99 };
100 100
101 } 101 }
102 102
103 namespace { 103 namespace {
104 104
105 TEST_F(CCPrioritizedTextureTest, requestTextureExceedingMaxLimit) 105 TEST_F(PrioritizedTextureTest, requestTextureExceedingMaxLimit)
106 { 106 {
107 const size_t maxTextures = 8; 107 const size_t maxTextures = 8;
108 scoped_ptr<CCPrioritizedTextureManager> textureManager = createManager(maxTe xtures); 108 scoped_ptr<PrioritizedTextureManager> textureManager = createManager(maxText ures);
109 109
110 // Create textures for double our memory limit. 110 // Create textures for double our memory limit.
111 scoped_ptr<CCPrioritizedTexture> textures[maxTextures*2]; 111 scoped_ptr<PrioritizedTexture> textures[maxTextures*2];
112 112
113 for (size_t i = 0; i < maxTextures*2; ++i) 113 for (size_t i = 0; i < maxTextures*2; ++i)
114 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at); 114 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at);
115 115
116 // Set decreasing priorities 116 // Set decreasing priorities
117 for (size_t i = 0; i < maxTextures*2; ++i) 117 for (size_t i = 0; i < maxTextures*2; ++i)
118 textures[i]->setRequestPriority(100 + i); 118 textures[i]->setRequestPriority(100 + i);
119 119
120 // Only lower half should be available. 120 // Only lower half should be available.
121 prioritizeTexturesAndBackings(textureManager.get()); 121 prioritizeTexturesAndBackings(textureManager.get());
(...skipping 13 matching lines...) Expand all
135 EXPECT_TRUE(validateTexture(textures[8], false)); 135 EXPECT_TRUE(validateTexture(textures[8], false));
136 EXPECT_TRUE(validateTexture(textures[15], false)); 136 EXPECT_TRUE(validateTexture(textures[15], false));
137 137
138 EXPECT_EQ(texturesMemorySize(maxTextures), textureManager->memoryAboveCutoff Bytes()); 138 EXPECT_EQ(texturesMemorySize(maxTextures), textureManager->memoryAboveCutoff Bytes());
139 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes()); 139 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes());
140 140
141 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked; 141 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
142 textureManager->clearAllMemory(resourceProvider()); 142 textureManager->clearAllMemory(resourceProvider());
143 } 143 }
144 144
145 TEST_F(CCPrioritizedTextureTest, changeMemoryLimits) 145 TEST_F(PrioritizedTextureTest, changeMemoryLimits)
146 { 146 {
147 const size_t maxTextures = 8; 147 const size_t maxTextures = 8;
148 scoped_ptr<CCPrioritizedTextureManager> textureManager = createManager(maxTe xtures); 148 scoped_ptr<PrioritizedTextureManager> textureManager = createManager(maxText ures);
149 scoped_ptr<CCPrioritizedTexture> textures[maxTextures]; 149 scoped_ptr<PrioritizedTexture> textures[maxTextures];
150 150
151 for (size_t i = 0; i < maxTextures; ++i) 151 for (size_t i = 0; i < maxTextures; ++i)
152 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at); 152 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at);
153 for (size_t i = 0; i < maxTextures; ++i) 153 for (size_t i = 0; i < maxTextures; ++i)
154 textures[i]->setRequestPriority(100 + i); 154 textures[i]->setRequestPriority(100 + i);
155 155
156 // Set max limit to 8 textures 156 // Set max limit to 8 textures
157 textureManager->setMaxMemoryLimitBytes(texturesMemorySize(8)); 157 textureManager->setMaxMemoryLimitBytes(texturesMemorySize(8));
158 prioritizeTexturesAndBackings(textureManager.get()); 158 prioritizeTexturesAndBackings(textureManager.get());
159 for (size_t i = 0; i < maxTextures; ++i) 159 for (size_t i = 0; i < maxTextures; ++i)
(...skipping 29 matching lines...) Expand all
189 textureManager->reduceMemory(resourceProvider()); 189 textureManager->reduceMemory(resourceProvider());
190 } 190 }
191 191
192 EXPECT_EQ(texturesMemorySize(4), textureManager->memoryAboveCutoffBytes()); 192 EXPECT_EQ(texturesMemorySize(4), textureManager->memoryAboveCutoffBytes());
193 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes()); 193 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes());
194 194
195 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked; 195 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
196 textureManager->clearAllMemory(resourceProvider()); 196 textureManager->clearAllMemory(resourceProvider());
197 } 197 }
198 198
199 TEST_F(CCPrioritizedTextureTest, textureManagerPartialUpdateTextures) 199 TEST_F(PrioritizedTextureTest, textureManagerPartialUpdateTextures)
200 { 200 {
201 const size_t maxTextures = 4; 201 const size_t maxTextures = 4;
202 const size_t numTextures = 4; 202 const size_t numTextures = 4;
203 scoped_ptr<CCPrioritizedTextureManager> textureManager = createManager(maxTe xtures); 203 scoped_ptr<PrioritizedTextureManager> textureManager = createManager(maxText ures);
204 scoped_ptr<CCPrioritizedTexture> textures[numTextures]; 204 scoped_ptr<PrioritizedTexture> textures[numTextures];
205 scoped_ptr<CCPrioritizedTexture> moreTextures[numTextures]; 205 scoped_ptr<PrioritizedTexture> moreTextures[numTextures];
206 206
207 for (size_t i = 0; i < numTextures; ++i) { 207 for (size_t i = 0; i < numTextures; ++i) {
208 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at); 208 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at);
209 moreTextures[i] = textureManager->createTexture(m_textureSize, m_texture Format); 209 moreTextures[i] = textureManager->createTexture(m_textureSize, m_texture Format);
210 } 210 }
211 211
212 for (size_t i = 0; i < numTextures; ++i) 212 for (size_t i = 0; i < numTextures; ++i)
213 textures[i]->setRequestPriority(200 + i); 213 textures[i]->setRequestPriority(200 + i);
214 prioritizeTexturesAndBackings(textureManager.get()); 214 prioritizeTexturesAndBackings(textureManager.get());
215 215
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 // Lower priority have been fully evicted. 249 // Lower priority have been fully evicted.
250 EXPECT_FALSE(textures[0]->haveBackingTexture()); 250 EXPECT_FALSE(textures[0]->haveBackingTexture());
251 EXPECT_FALSE(textures[1]->haveBackingTexture()); 251 EXPECT_FALSE(textures[1]->haveBackingTexture());
252 EXPECT_FALSE(textures[2]->haveBackingTexture()); 252 EXPECT_FALSE(textures[2]->haveBackingTexture());
253 EXPECT_FALSE(textures[3]->haveBackingTexture()); 253 EXPECT_FALSE(textures[3]->haveBackingTexture());
254 254
255 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked; 255 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
256 textureManager->clearAllMemory(resourceProvider()); 256 textureManager->clearAllMemory(resourceProvider());
257 } 257 }
258 258
259 TEST_F(CCPrioritizedTextureTest, textureManagerPrioritiesAreEqual) 259 TEST_F(PrioritizedTextureTest, textureManagerPrioritiesAreEqual)
260 { 260 {
261 const size_t maxTextures = 16; 261 const size_t maxTextures = 16;
262 scoped_ptr<CCPrioritizedTextureManager> textureManager = createManager(maxTe xtures); 262 scoped_ptr<PrioritizedTextureManager> textureManager = createManager(maxText ures);
263 scoped_ptr<CCPrioritizedTexture> textures[maxTextures]; 263 scoped_ptr<PrioritizedTexture> textures[maxTextures];
264 264
265 for (size_t i = 0; i < maxTextures; ++i) 265 for (size_t i = 0; i < maxTextures; ++i)
266 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at); 266 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at);
267 267
268 // All 16 textures have the same priority except 2 higher priority. 268 // All 16 textures have the same priority except 2 higher priority.
269 for (size_t i = 0; i < maxTextures; ++i) 269 for (size_t i = 0; i < maxTextures; ++i)
270 textures[i]->setRequestPriority(100); 270 textures[i]->setRequestPriority(100);
271 textures[0]->setRequestPriority(99); 271 textures[0]->setRequestPriority(99);
272 textures[1]->setRequestPriority(99); 272 textures[1]->setRequestPriority(99);
273 273
(...skipping 15 matching lines...) Expand all
289 EXPECT_TRUE(validateTexture(textures[i], true)); 289 EXPECT_TRUE(validateTexture(textures[i], true));
290 for (size_t i = 9; i < maxTextures; i++) 290 for (size_t i = 9; i < maxTextures; i++)
291 EXPECT_FALSE(validateTexture(textures[i], true)); 291 EXPECT_FALSE(validateTexture(textures[i], true));
292 EXPECT_EQ(texturesMemorySize(8), textureManager->memoryAboveCutoffBytes()); 292 EXPECT_EQ(texturesMemorySize(8), textureManager->memoryAboveCutoffBytes());
293 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes()); 293 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes());
294 294
295 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked; 295 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
296 textureManager->clearAllMemory(resourceProvider()); 296 textureManager->clearAllMemory(resourceProvider());
297 } 297 }
298 298
299 TEST_F(CCPrioritizedTextureTest, textureManagerDestroyedFirst) 299 TEST_F(PrioritizedTextureTest, textureManagerDestroyedFirst)
300 { 300 {
301 scoped_ptr<CCPrioritizedTextureManager> textureManager = createManager(1); 301 scoped_ptr<PrioritizedTextureManager> textureManager = createManager(1);
302 scoped_ptr<CCPrioritizedTexture> texture = textureManager->createTexture(m_t extureSize, m_textureFormat); 302 scoped_ptr<PrioritizedTexture> texture = textureManager->createTexture(m_tex tureSize, m_textureFormat);
303 303
304 // Texture is initially invalid, but it will become available. 304 // Texture is initially invalid, but it will become available.
305 EXPECT_FALSE(texture->haveBackingTexture()); 305 EXPECT_FALSE(texture->haveBackingTexture());
306 306
307 texture->setRequestPriority(100); 307 texture->setRequestPriority(100);
308 prioritizeTexturesAndBackings(textureManager.get()); 308 prioritizeTexturesAndBackings(textureManager.get());
309 309
310 EXPECT_TRUE(validateTexture(texture, false)); 310 EXPECT_TRUE(validateTexture(texture, false));
311 EXPECT_TRUE(texture->canAcquireBackingTexture()); 311 EXPECT_TRUE(texture->canAcquireBackingTexture());
312 EXPECT_TRUE(texture->haveBackingTexture()); 312 EXPECT_TRUE(texture->haveBackingTexture());
313 313
314 { 314 {
315 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked; 315 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc ked;
316 textureManager->clearAllMemory(resourceProvider()); 316 textureManager->clearAllMemory(resourceProvider());
317 } 317 }
318 textureManager.reset(); 318 textureManager.reset();
319 319
320 EXPECT_FALSE(texture->canAcquireBackingTexture()); 320 EXPECT_FALSE(texture->canAcquireBackingTexture());
321 EXPECT_FALSE(texture->haveBackingTexture()); 321 EXPECT_FALSE(texture->haveBackingTexture());
322 } 322 }
323 323
324 TEST_F(CCPrioritizedTextureTest, textureMovedToNewManager) 324 TEST_F(PrioritizedTextureTest, textureMovedToNewManager)
325 { 325 {
326 scoped_ptr<CCPrioritizedTextureManager> textureManagerOne = createManager(1) ; 326 scoped_ptr<PrioritizedTextureManager> textureManagerOne = createManager(1);
327 scoped_ptr<CCPrioritizedTextureManager> textureManagerTwo = createManager(1) ; 327 scoped_ptr<PrioritizedTextureManager> textureManagerTwo = createManager(1);
328 scoped_ptr<CCPrioritizedTexture> texture = textureManagerOne->createTexture( m_textureSize, m_textureFormat); 328 scoped_ptr<PrioritizedTexture> texture = textureManagerOne->createTexture(m_ textureSize, m_textureFormat);
329 329
330 // Texture is initially invalid, but it will become available. 330 // Texture is initially invalid, but it will become available.
331 EXPECT_FALSE(texture->haveBackingTexture()); 331 EXPECT_FALSE(texture->haveBackingTexture());
332 332
333 texture->setRequestPriority(100); 333 texture->setRequestPriority(100);
334 prioritizeTexturesAndBackings(textureManagerOne.get()); 334 prioritizeTexturesAndBackings(textureManagerOne.get());
335 335
336 EXPECT_TRUE(validateTexture(texture, false)); 336 EXPECT_TRUE(validateTexture(texture, false));
337 EXPECT_TRUE(texture->canAcquireBackingTexture()); 337 EXPECT_TRUE(texture->canAcquireBackingTexture());
338 EXPECT_TRUE(texture->haveBackingTexture()); 338 EXPECT_TRUE(texture->haveBackingTexture());
(...skipping 14 matching lines...) Expand all
353 prioritizeTexturesAndBackings(textureManagerTwo.get()); 353 prioritizeTexturesAndBackings(textureManagerTwo.get());
354 354
355 EXPECT_TRUE(validateTexture(texture, false)); 355 EXPECT_TRUE(validateTexture(texture, false));
356 EXPECT_TRUE(texture->canAcquireBackingTexture()); 356 EXPECT_TRUE(texture->canAcquireBackingTexture());
357 EXPECT_TRUE(texture->haveBackingTexture()); 357 EXPECT_TRUE(texture->haveBackingTexture());
358 358
359 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked; 359 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
360 textureManagerTwo->clearAllMemory(resourceProvider()); 360 textureManagerTwo->clearAllMemory(resourceProvider());
361 } 361 }
362 362
363 TEST_F(CCPrioritizedTextureTest, renderSurfacesReduceMemoryAvailableOutsideRootS urface) 363 TEST_F(PrioritizedTextureTest, renderSurfacesReduceMemoryAvailableOutsideRootSur face)
364 { 364 {
365 const size_t maxTextures = 8; 365 const size_t maxTextures = 8;
366 scoped_ptr<CCPrioritizedTextureManager> textureManager = createManager(maxTe xtures); 366 scoped_ptr<PrioritizedTextureManager> textureManager = createManager(maxText ures);
367 367
368 // Half of the memory is taken by surfaces (with high priority place-holder) 368 // Half of the memory is taken by surfaces (with high priority place-holder)
369 scoped_ptr<CCPrioritizedTexture> renderSurfacePlaceHolder = textureManager-> createTexture(m_textureSize, m_textureFormat); 369 scoped_ptr<PrioritizedTexture> renderSurfacePlaceHolder = textureManager->cr eateTexture(m_textureSize, m_textureFormat);
370 renderSurfacePlaceHolder->setToSelfManagedMemoryPlaceholder(texturesMemorySi ze(4)); 370 renderSurfacePlaceHolder->setToSelfManagedMemoryPlaceholder(texturesMemorySi ze(4));
371 renderSurfacePlaceHolder->setRequestPriority(CCPriorityCalculator::renderSur facePriority()); 371 renderSurfacePlaceHolder->setRequestPriority(PriorityCalculator::renderSurfa cePriority());
372 372
373 // Create textures to fill our memory limit. 373 // Create textures to fill our memory limit.
374 scoped_ptr<CCPrioritizedTexture> textures[maxTextures]; 374 scoped_ptr<PrioritizedTexture> textures[maxTextures];
375 375
376 for (size_t i = 0; i < maxTextures; ++i) 376 for (size_t i = 0; i < maxTextures; ++i)
377 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at); 377 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at);
378 378
379 // Set decreasing non-visible priorities outside root surface. 379 // Set decreasing non-visible priorities outside root surface.
380 for (size_t i = 0; i < maxTextures; ++i) 380 for (size_t i = 0; i < maxTextures; ++i)
381 textures[i]->setRequestPriority(100 + i); 381 textures[i]->setRequestPriority(100 + i);
382 382
383 // Only lower half should be available. 383 // Only lower half should be available.
384 prioritizeTexturesAndBackings(textureManager.get()); 384 prioritizeTexturesAndBackings(textureManager.get());
(...skipping 14 matching lines...) Expand all
399 EXPECT_TRUE(validateTexture(textures[7], false)); 399 EXPECT_TRUE(validateTexture(textures[7], false));
400 400
401 EXPECT_EQ(texturesMemorySize(4), textureManager->memoryAboveCutoffBytes()); 401 EXPECT_EQ(texturesMemorySize(4), textureManager->memoryAboveCutoffBytes());
402 EXPECT_EQ(texturesMemorySize(4), textureManager->memoryForSelfManagedTexture s()); 402 EXPECT_EQ(texturesMemorySize(4), textureManager->memoryForSelfManagedTexture s());
403 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes()); 403 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes());
404 404
405 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked; 405 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
406 textureManager->clearAllMemory(resourceProvider()); 406 textureManager->clearAllMemory(resourceProvider());
407 } 407 }
408 408
409 TEST_F(CCPrioritizedTextureTest, renderSurfacesReduceMemoryAvailableForRequestLa te) 409 TEST_F(PrioritizedTextureTest, renderSurfacesReduceMemoryAvailableForRequestLate )
410 { 410 {
411 const size_t maxTextures = 8; 411 const size_t maxTextures = 8;
412 scoped_ptr<CCPrioritizedTextureManager> textureManager = createManager(maxTe xtures); 412 scoped_ptr<PrioritizedTextureManager> textureManager = createManager(maxText ures);
413 413
414 // Half of the memory is taken by surfaces (with high priority place-holder) 414 // Half of the memory is taken by surfaces (with high priority place-holder)
415 scoped_ptr<CCPrioritizedTexture> renderSurfacePlaceHolder = textureManager-> createTexture(m_textureSize, m_textureFormat); 415 scoped_ptr<PrioritizedTexture> renderSurfacePlaceHolder = textureManager->cr eateTexture(m_textureSize, m_textureFormat);
416 renderSurfacePlaceHolder->setToSelfManagedMemoryPlaceholder(texturesMemorySi ze(4)); 416 renderSurfacePlaceHolder->setToSelfManagedMemoryPlaceholder(texturesMemorySi ze(4));
417 renderSurfacePlaceHolder->setRequestPriority(CCPriorityCalculator::renderSur facePriority()); 417 renderSurfacePlaceHolder->setRequestPriority(PriorityCalculator::renderSurfa cePriority());
418 418
419 // Create textures to fill our memory limit. 419 // Create textures to fill our memory limit.
420 scoped_ptr<CCPrioritizedTexture> textures[maxTextures]; 420 scoped_ptr<PrioritizedTexture> textures[maxTextures];
421 421
422 for (size_t i = 0; i < maxTextures; ++i) 422 for (size_t i = 0; i < maxTextures; ++i)
423 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at); 423 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at);
424 424
425 // Set equal priorities. 425 // Set equal priorities.
426 for (size_t i = 0; i < maxTextures; ++i) 426 for (size_t i = 0; i < maxTextures; ++i)
427 textures[i]->setRequestPriority(100); 427 textures[i]->setRequestPriority(100);
428 428
429 // The first four to be requested late will be available. 429 // The first four to be requested late will be available.
430 prioritizeTexturesAndBackings(textureManager.get()); 430 prioritizeTexturesAndBackings(textureManager.get());
431 for (unsigned i = 0; i < maxTextures; ++i) 431 for (unsigned i = 0; i < maxTextures; ++i)
432 EXPECT_FALSE(validateTexture(textures[i], false)); 432 EXPECT_FALSE(validateTexture(textures[i], false));
433 for (unsigned i = 0; i < maxTextures; i += 2) 433 for (unsigned i = 0; i < maxTextures; i += 2)
434 EXPECT_TRUE(validateTexture(textures[i], true)); 434 EXPECT_TRUE(validateTexture(textures[i], true));
435 for (unsigned i = 1; i < maxTextures; i += 2) 435 for (unsigned i = 1; i < maxTextures; i += 2)
436 EXPECT_FALSE(validateTexture(textures[i], true)); 436 EXPECT_FALSE(validateTexture(textures[i], true));
437 437
438 EXPECT_EQ(texturesMemorySize(4), textureManager->memoryAboveCutoffBytes()); 438 EXPECT_EQ(texturesMemorySize(4), textureManager->memoryAboveCutoffBytes());
439 EXPECT_EQ(texturesMemorySize(4), textureManager->memoryForSelfManagedTexture s()); 439 EXPECT_EQ(texturesMemorySize(4), textureManager->memoryForSelfManagedTexture s());
440 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes()); 440 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes());
441 441
442 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked; 442 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
443 textureManager->clearAllMemory(resourceProvider()); 443 textureManager->clearAllMemory(resourceProvider());
444 } 444 }
445 445
446 TEST_F(CCPrioritizedTextureTest, whenRenderSurfaceNotAvailableTexturesAlsoNotAva ilable) 446 TEST_F(PrioritizedTextureTest, whenRenderSurfaceNotAvailableTexturesAlsoNotAvail able)
447 { 447 {
448 const size_t maxTextures = 8; 448 const size_t maxTextures = 8;
449 scoped_ptr<CCPrioritizedTextureManager> textureManager = createManager(maxTe xtures); 449 scoped_ptr<PrioritizedTextureManager> textureManager = createManager(maxText ures);
450 450
451 // Half of the memory is taken by surfaces (with high priority place-holder) 451 // Half of the memory is taken by surfaces (with high priority place-holder)
452 scoped_ptr<CCPrioritizedTexture> renderSurfacePlaceHolder = textureManager-> createTexture(m_textureSize, m_textureFormat); 452 scoped_ptr<PrioritizedTexture> renderSurfacePlaceHolder = textureManager->cr eateTexture(m_textureSize, m_textureFormat);
453 renderSurfacePlaceHolder->setToSelfManagedMemoryPlaceholder(texturesMemorySi ze(4)); 453 renderSurfacePlaceHolder->setToSelfManagedMemoryPlaceholder(texturesMemorySi ze(4));
454 renderSurfacePlaceHolder->setRequestPriority(CCPriorityCalculator::renderSur facePriority()); 454 renderSurfacePlaceHolder->setRequestPriority(PriorityCalculator::renderSurfa cePriority());
455 455
456 // Create textures to fill our memory limit. 456 // Create textures to fill our memory limit.
457 scoped_ptr<CCPrioritizedTexture> textures[maxTextures]; 457 scoped_ptr<PrioritizedTexture> textures[maxTextures];
458 458
459 for (size_t i = 0; i < maxTextures; ++i) 459 for (size_t i = 0; i < maxTextures; ++i)
460 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at); 460 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at);
461 461
462 // Set 6 visible textures in the root surface, and 2 in a child surface. 462 // Set 6 visible textures in the root surface, and 2 in a child surface.
463 for (size_t i = 0; i < 6; ++i) 463 for (size_t i = 0; i < 6; ++i)
464 textures[i]->setRequestPriority(CCPriorityCalculator::visiblePriority(tr ue)); 464 textures[i]->setRequestPriority(PriorityCalculator::visiblePriority(true ));
465 for (size_t i = 6; i < 8; ++i) 465 for (size_t i = 6; i < 8; ++i)
466 textures[i]->setRequestPriority(CCPriorityCalculator::visiblePriority(fa lse)); 466 textures[i]->setRequestPriority(PriorityCalculator::visiblePriority(fals e));
467 467
468 prioritizeTexturesAndBackings(textureManager.get()); 468 prioritizeTexturesAndBackings(textureManager.get());
469 469
470 // Unable to requestLate textures in the child surface. 470 // Unable to requestLate textures in the child surface.
471 EXPECT_FALSE(validateTexture(textures[6], true)); 471 EXPECT_FALSE(validateTexture(textures[6], true));
472 EXPECT_FALSE(validateTexture(textures[7], true)); 472 EXPECT_FALSE(validateTexture(textures[7], true));
473 473
474 // Root surface textures are valid. 474 // Root surface textures are valid.
475 for (size_t i = 0; i < 6; ++i) 475 for (size_t i = 0; i < 6; ++i)
476 EXPECT_TRUE(validateTexture(textures[i], false)); 476 EXPECT_TRUE(validateTexture(textures[i], false));
477 477
478 EXPECT_EQ(texturesMemorySize(6), textureManager->memoryAboveCutoffBytes()); 478 EXPECT_EQ(texturesMemorySize(6), textureManager->memoryAboveCutoffBytes());
479 EXPECT_EQ(texturesMemorySize(2), textureManager->memoryForSelfManagedTexture s()); 479 EXPECT_EQ(texturesMemorySize(2), textureManager->memoryForSelfManagedTexture s());
480 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes()); 480 EXPECT_LE(textureManager->memoryUseBytes(), textureManager->memoryAboveCutof fBytes());
481 481
482 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked; 482 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
483 textureManager->clearAllMemory(resourceProvider()); 483 textureManager->clearAllMemory(resourceProvider());
484 } 484 }
485 485
486 TEST_F(CCPrioritizedTextureTest, requestLateBackingsSorting) 486 TEST_F(PrioritizedTextureTest, requestLateBackingsSorting)
487 { 487 {
488 const size_t maxTextures = 8; 488 const size_t maxTextures = 8;
489 scoped_ptr<CCPrioritizedTextureManager> textureManager = createManager(maxTe xtures); 489 scoped_ptr<PrioritizedTextureManager> textureManager = createManager(maxText ures);
490 textureManager->setMaxMemoryLimitBytes(texturesMemorySize(maxTextures)); 490 textureManager->setMaxMemoryLimitBytes(texturesMemorySize(maxTextures));
491 491
492 // Create textures to fill our memory limit. 492 // Create textures to fill our memory limit.
493 scoped_ptr<CCPrioritizedTexture> textures[maxTextures]; 493 scoped_ptr<PrioritizedTexture> textures[maxTextures];
494 for (size_t i = 0; i < maxTextures; ++i) 494 for (size_t i = 0; i < maxTextures; ++i)
495 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at); 495 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at);
496 496
497 // Set equal priorities, and allocate backings for all textures. 497 // Set equal priorities, and allocate backings for all textures.
498 for (size_t i = 0; i < maxTextures; ++i) 498 for (size_t i = 0; i < maxTextures; ++i)
499 textures[i]->setRequestPriority(100); 499 textures[i]->setRequestPriority(100);
500 prioritizeTexturesAndBackings(textureManager.get()); 500 prioritizeTexturesAndBackings(textureManager.get());
501 for (unsigned i = 0; i < maxTextures; ++i) 501 for (unsigned i = 0; i < maxTextures; ++i)
502 EXPECT_TRUE(validateTexture(textures[i], false)); 502 EXPECT_TRUE(validateTexture(textures[i], false));
503 503
(...skipping 20 matching lines...) Expand all
524 // Make sure that only the requestLate textures are above the priority cutof f 524 // Make sure that only the requestLate textures are above the priority cutof f
525 for (size_t i = 0; i < maxTextures; i += 2) 525 for (size_t i = 0; i < maxTextures; i += 2)
526 EXPECT_TRUE(textureBackingIsAbovePriorityCutoff(textures[i].get())); 526 EXPECT_TRUE(textureBackingIsAbovePriorityCutoff(textures[i].get()));
527 for (size_t i = 1; i < maxTextures; i += 2) 527 for (size_t i = 1; i < maxTextures; i += 2)
528 EXPECT_FALSE(textureBackingIsAbovePriorityCutoff(textures[i].get())); 528 EXPECT_FALSE(textureBackingIsAbovePriorityCutoff(textures[i].get()));
529 529
530 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked; 530 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
531 textureManager->clearAllMemory(resourceProvider()); 531 textureManager->clearAllMemory(resourceProvider());
532 } 532 }
533 533
534 TEST_F(CCPrioritizedTextureTest, clearUploadsToEvictedResources) 534 TEST_F(PrioritizedTextureTest, clearUploadsToEvictedResources)
535 { 535 {
536 const size_t maxTextures = 4; 536 const size_t maxTextures = 4;
537 scoped_ptr<CCPrioritizedTextureManager> textureManager = 537 scoped_ptr<PrioritizedTextureManager> textureManager =
538 createManager(maxTextures); 538 createManager(maxTextures);
539 textureManager->setMaxMemoryLimitBytes(texturesMemorySize(maxTextures)); 539 textureManager->setMaxMemoryLimitBytes(texturesMemorySize(maxTextures));
540 540
541 // Create textures to fill our memory limit. 541 // Create textures to fill our memory limit.
542 scoped_ptr<CCPrioritizedTexture> textures[maxTextures]; 542 scoped_ptr<PrioritizedTexture> textures[maxTextures];
543 543
544 for (size_t i = 0; i < maxTextures; ++i) 544 for (size_t i = 0; i < maxTextures; ++i)
545 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at); 545 textures[i] = textureManager->createTexture(m_textureSize, m_textureForm at);
546 546
547 // Set equal priorities, and allocate backings for all textures. 547 // Set equal priorities, and allocate backings for all textures.
548 for (size_t i = 0; i < maxTextures; ++i) 548 for (size_t i = 0; i < maxTextures; ++i)
549 textures[i]->setRequestPriority(100); 549 textures[i]->setRequestPriority(100);
550 prioritizeTexturesAndBackings(textureManager.get()); 550 prioritizeTexturesAndBackings(textureManager.get());
551 for (unsigned i = 0; i < maxTextures; ++i) 551 for (unsigned i = 0; i < maxTextures; ++i)
552 EXPECT_TRUE(validateTexture(textures[i], false)); 552 EXPECT_TRUE(validateTexture(textures[i], false));
553 553
554 CCTextureUpdateQueue queue; 554 TextureUpdateQueue queue;
555 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked; 555 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
556 for (size_t i = 0; i < maxTextures; ++i) { 556 for (size_t i = 0; i < maxTextures; ++i) {
557 const TextureUploader::Parameters upload = { textures[i].get() }; 557 const TextureUploader::Parameters upload = { textures[i].get() };
558 queue.appendFullUpload(upload); 558 queue.appendFullUpload(upload);
559 } 559 }
560 560
561 // Make sure that we have backings for all of the textures. 561 // Make sure that we have backings for all of the textures.
562 for (size_t i = 0; i < maxTextures; ++i) 562 for (size_t i = 0; i < maxTextures; ++i)
563 EXPECT_TRUE(textures[i]->haveBackingTexture()); 563 EXPECT_TRUE(textures[i]->haveBackingTexture());
564 564
565 queue.clearUploadsToEvictedResources(); 565 queue.clearUploadsToEvictedResources();
566 EXPECT_EQ(4, queue.fullUploadSize()); 566 EXPECT_EQ(4, queue.fullUploadSize());
567 567
568 textureManager->reduceMemoryOnImplThread( 568 textureManager->reduceMemoryOnImplThread(
569 texturesMemorySize(1), resourceProvider()); 569 texturesMemorySize(1), resourceProvider());
570 queue.clearUploadsToEvictedResources(); 570 queue.clearUploadsToEvictedResources();
571 EXPECT_EQ(1, queue.fullUploadSize()); 571 EXPECT_EQ(1, queue.fullUploadSize());
572 572
573 textureManager->reduceMemoryOnImplThread(0, resourceProvider()); 573 textureManager->reduceMemoryOnImplThread(0, resourceProvider());
574 queue.clearUploadsToEvictedResources(); 574 queue.clearUploadsToEvictedResources();
575 EXPECT_EQ(0, queue.fullUploadSize()); 575 EXPECT_EQ(0, queue.fullUploadSize());
576 576
577 } 577 }
578 578
579 } // namespace 579 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698