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

Side by Side Diff: cc/CCTextureUpdateControllerTest.cpp

Issue 10937007: cc: Only use upload throttling when performing full texture uploads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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 "CCTextureUpdateController.h" 7 #include "CCTextureUpdateController.h"
8 8
9 #include "CCSchedulerTestCommon.h" 9 #include "CCSchedulerTestCommon.h"
10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread 10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 { 237 {
238 m_test->onUpload(); 238 m_test->onUpload();
239 } 239 }
240 240
241 241
242 // ZERO UPLOADS TESTS 242 // ZERO UPLOADS TESTS
243 TEST_F(CCTextureUpdateControllerTest, ZeroUploads) 243 TEST_F(CCTextureUpdateControllerTest, ZeroUploads)
244 { 244 {
245 appendFullUploadsToUpdateQueue(0); 245 appendFullUploadsToUpdateQueue(0);
246 appendPartialUploadsToUpdateQueue(0); 246 appendPartialUploadsToUpdateQueue(0);
247 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 247 DebugScopedSetImplThread implThread;
248 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get());
248 249
249 EXPECT_EQ(0, m_numBeginUploads);
250 EXPECT_EQ(0, m_numEndUploads);
251 EXPECT_EQ(0, m_numPreviousFlushes); 250 EXPECT_EQ(0, m_numPreviousFlushes);
252 EXPECT_EQ(0, m_numPreviousUploads); 251 EXPECT_EQ(0, m_numPreviousUploads);
253 } 252 }
254 253
255 254
256 // ONE UPLOAD TESTS 255 // ONE UPLOAD TESTS
257 TEST_F(CCTextureUpdateControllerTest, OneFullUpload) 256 TEST_F(CCTextureUpdateControllerTest, OneFullUpload)
258 { 257 {
259 appendFullUploadsToUpdateQueue(1); 258 appendFullUploadsToUpdateQueue(1);
260 appendPartialUploadsToUpdateQueue(0); 259 appendPartialUploadsToUpdateQueue(0);
261 DebugScopedSetImplThread implThread; 260 DebugScopedSetImplThread implThread;
262 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 261 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get());
263 262
264 EXPECT_EQ(1, m_numBeginUploads);
265 EXPECT_EQ(1, m_numEndUploads);
266 EXPECT_EQ(1, m_numPreviousFlushes); 263 EXPECT_EQ(1, m_numPreviousFlushes);
267 EXPECT_EQ(1, m_numPreviousUploads); 264 EXPECT_EQ(1, m_numPreviousUploads);
268 } 265 }
269 266
270 TEST_F(CCTextureUpdateControllerTest, OnePartialUpload) 267 TEST_F(CCTextureUpdateControllerTest, OnePartialUpload)
271 { 268 {
272 appendFullUploadsToUpdateQueue(0); 269 appendFullUploadsToUpdateQueue(0);
273 appendPartialUploadsToUpdateQueue(1); 270 appendPartialUploadsToUpdateQueue(1);
274 DebugScopedSetImplThread implThread; 271 DebugScopedSetImplThread implThread;
275 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 272 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get());
276 273
277 EXPECT_EQ(1, m_numBeginUploads);
278 EXPECT_EQ(1, m_numEndUploads);
279 EXPECT_EQ(1, m_numPreviousFlushes); 274 EXPECT_EQ(1, m_numPreviousFlushes);
280 EXPECT_EQ(1, m_numPreviousUploads); 275 EXPECT_EQ(1, m_numPreviousUploads);
281 } 276 }
282 277
283 TEST_F(CCTextureUpdateControllerTest, OneFullOnePartialUpload) 278 TEST_F(CCTextureUpdateControllerTest, OneFullOnePartialUpload)
284 { 279 {
285 appendFullUploadsToUpdateQueue(1); 280 appendFullUploadsToUpdateQueue(1);
286 appendPartialUploadsToUpdateQueue(1); 281 appendPartialUploadsToUpdateQueue(1);
287 DebugScopedSetImplThread implThread; 282 DebugScopedSetImplThread implThread;
288 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 283 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get());
289 284
290 // We expect the full uploads to be followed by a flush 285 EXPECT_EQ(1, m_numPreviousFlushes);
291 // before the partial uploads begin.
292 EXPECT_EQ(1, m_numBeginUploads);
293 EXPECT_EQ(1, m_numEndUploads);
294 EXPECT_EQ(2, m_numPreviousFlushes);
295 EXPECT_EQ(2, m_numPreviousUploads); 286 EXPECT_EQ(2, m_numPreviousUploads);
296 } 287 }
297 288
298 289
299 // NO REMAINDER TESTS
300 // This class of tests upload a number of textures that is a multiple of the flu sh period. 290 // This class of tests upload a number of textures that is a multiple of the flu sh period.
301 const int fullUploadFlushMultipler = 7; 291 const int fullUploadFlushMultipler = 7;
302 const int fullNoRemainderCount = fullUploadFlushMultipler * kFlushPeriodFull; 292 const int fullCount = fullUploadFlushMultipler * kFlushPeriodFull;
303 293
304 const int partialUploadFlushMultipler = 11; 294 const int partialUploadFlushMultipler = 11;
305 const int partialNoRemainderCount = partialUploadFlushMultipler * kFlushPeriodPa rtial; 295 const int partialCount = partialUploadFlushMultipler * kFlushPeriodPartial;
306 296
307 TEST_F(CCTextureUpdateControllerTest, ManyFullUploadsNoRemainder) 297 TEST_F(CCTextureUpdateControllerTest, ManyFullUploads)
308 { 298 {
309 appendFullUploadsToUpdateQueue(fullNoRemainderCount); 299 appendFullUploadsToUpdateQueue(fullCount);
310 appendPartialUploadsToUpdateQueue(0); 300 appendPartialUploadsToUpdateQueue(0);
311 DebugScopedSetImplThread implThread; 301 DebugScopedSetImplThread implThread;
312 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 302 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get());
313 303
314 EXPECT_EQ(1, m_numBeginUploads);
315 EXPECT_EQ(1, m_numEndUploads);
316 EXPECT_EQ(fullUploadFlushMultipler, m_numPreviousFlushes); 304 EXPECT_EQ(fullUploadFlushMultipler, m_numPreviousFlushes);
317 EXPECT_EQ(fullNoRemainderCount, m_numPreviousUploads); 305 EXPECT_EQ(fullCount, m_numPreviousUploads);
318 } 306 }
319 307
320 TEST_F(CCTextureUpdateControllerTest, ManyPartialUploadsNoRemainder) 308 TEST_F(CCTextureUpdateControllerTest, ManyPartialUploads)
321 { 309 {
322 appendFullUploadsToUpdateQueue(0); 310 appendFullUploadsToUpdateQueue(0);
323 appendPartialUploadsToUpdateQueue(partialNoRemainderCount); 311 appendPartialUploadsToUpdateQueue(partialCount);
324 DebugScopedSetImplThread implThread; 312 DebugScopedSetImplThread implThread;
325 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 313 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get());
326 314
327 EXPECT_EQ(1, m_numBeginUploads);
328 EXPECT_EQ(1, m_numEndUploads);
329 EXPECT_EQ(partialUploadFlushMultipler, m_numPreviousFlushes); 315 EXPECT_EQ(partialUploadFlushMultipler, m_numPreviousFlushes);
330 EXPECT_EQ(partialNoRemainderCount, m_numPreviousUploads); 316 EXPECT_EQ(partialCount, m_numPreviousUploads);
331 } 317 }
332 318
333 TEST_F(CCTextureUpdateControllerTest, ManyFullManyPartialUploadsNoRemainder) 319 TEST_F(CCTextureUpdateControllerTest, ManyFullManyPartialUploads)
334 { 320 {
335 appendFullUploadsToUpdateQueue(fullNoRemainderCount); 321 appendFullUploadsToUpdateQueue(fullCount);
336 appendPartialUploadsToUpdateQueue(partialNoRemainderCount); 322 appendPartialUploadsToUpdateQueue(partialCount);
337 DebugScopedSetImplThread implThread; 323 DebugScopedSetImplThread implThread;
338 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 324 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get());
339 325
340 EXPECT_EQ(1, m_numBeginUploads);
341 EXPECT_EQ(1, m_numEndUploads);
342 EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler, m_numPrevi ousFlushes); 326 EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler, m_numPrevi ousFlushes);
343 EXPECT_EQ(fullNoRemainderCount + partialNoRemainderCount, m_numPreviousUploa ds); 327 EXPECT_EQ(fullCount + partialCount, m_numPreviousUploads);
344 }
345
346
347 // MIN/MAX REMAINDER TESTS
348 // This class of tests mix and match uploading 1 more and 1 less texture
349 // than a multiple of the flush period.
350
351 const int fullMinRemainderCount = fullNoRemainderCount + 1;
352 const int fullMaxRemainderCount = fullNoRemainderCount - 1;
353 const int partialMinRemainderCount = partialNoRemainderCount + 1;
354 const int partialMaxRemainderCount = partialNoRemainderCount - 1;
355
356 TEST_F(CCTextureUpdateControllerTest, ManyFullAndPartialMinRemainder)
357 {
358 appendFullUploadsToUpdateQueue(fullMinRemainderCount);
359 appendPartialUploadsToUpdateQueue(partialMinRemainderCount);
360 DebugScopedSetImplThread implThread;
361 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
362
363 EXPECT_EQ(1, m_numBeginUploads);
364 EXPECT_EQ(1, m_numEndUploads);
365 EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler + 2, m_numP reviousFlushes);
366 EXPECT_EQ(fullMinRemainderCount + partialMinRemainderCount, m_numPreviousUpl oads);
367 }
368
369 TEST_F(CCTextureUpdateControllerTest, ManyFullAndPartialUploadsMaxRemainder)
370 {
371 appendFullUploadsToUpdateQueue(fullMaxRemainderCount);
372 appendPartialUploadsToUpdateQueue(partialMaxRemainderCount);
373 DebugScopedSetImplThread implThread;
374 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
375
376 EXPECT_EQ(1, m_numBeginUploads);
377 EXPECT_EQ(1, m_numEndUploads);
378 EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler, m_numPrevi ousFlushes);
379 EXPECT_EQ(fullMaxRemainderCount + partialMaxRemainderCount, m_numPreviousUpl oads);
380 }
381
382 TEST_F(CCTextureUpdateControllerTest, ManyFullMinRemainderManyPartialMaxRemainde r)
383 {
384 appendFullUploadsToUpdateQueue(fullMinRemainderCount);
385 appendPartialUploadsToUpdateQueue(partialMaxRemainderCount);
386 DebugScopedSetImplThread implThread;
387 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
388
389 EXPECT_EQ(1, m_numBeginUploads);
390 EXPECT_EQ(1, m_numEndUploads);
391 EXPECT_EQ((fullUploadFlushMultipler+1) + partialUploadFlushMultipler, m_numP reviousFlushes);
392 EXPECT_EQ(fullMinRemainderCount + partialMaxRemainderCount, m_numPreviousUpl oads);
393 }
394
395 TEST_F(CCTextureUpdateControllerTest, ManyFullMaxRemainderManyPartialMinRemainde r)
396 {
397 appendFullUploadsToUpdateQueue(fullMaxRemainderCount);
398 appendPartialUploadsToUpdateQueue(partialMinRemainderCount);
399 DebugScopedSetImplThread implThread;
400 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
401
402 EXPECT_EQ(1, m_numBeginUploads);
403 EXPECT_EQ(1, m_numEndUploads);
404 EXPECT_EQ(fullUploadFlushMultipler + (partialUploadFlushMultipler+1), m_numP reviousFlushes);
405 EXPECT_EQ(fullMaxRemainderCount + partialMinRemainderCount, m_numPreviousUpl oads);
406 }
407
408
409 // MULTIPLE UPDATE TESTS
410 // These tests attempt to upload too many textures at once, requiring
411 // multiple calls to update().
412
413 int expectedFlushes(int uploads, int flushPeriod)
414 {
415 return (uploads + flushPeriod - 1) / flushPeriod;
416 }
417
418 TEST_F(CCTextureUpdateControllerTest, TripleUpdateFinalUpdateFullAndPartial)
419 {
420 const int kMaxUploadsPerUpdate = 40;
421 const int kFullUploads = 100;
422 const int kPartialUploads = 20;
423
424 int expectedPreviousFlushes = 0;
425 int expectedPreviousUploads = 0;
426
427 setMaxUploadCountPerUpdate(kMaxUploadsPerUpdate);
428 appendFullUploadsToUpdateQueue(kFullUploads);
429 appendPartialUploadsToUpdateQueue(kPartialUploads);
430
431 // First update (40 full)
432 DebugScopedSetImplThread implThread;
433 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate);
434
435 EXPECT_EQ(1, m_numBeginUploads);
436 EXPECT_EQ(1, m_numEndUploads);
437
438 expectedPreviousFlushes = expectedFlushes(kMaxUploadsPerUpdate, kFlushPeriod Full);
439 EXPECT_EQ(expectedPreviousFlushes, m_numPreviousFlushes);
440
441 expectedPreviousUploads = kMaxUploadsPerUpdate;
442 EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads);
443
444 // Second update (40 full)
445 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate);
446
447 EXPECT_EQ(2, m_numBeginUploads);
448 EXPECT_EQ(2, m_numEndUploads);
449
450 expectedPreviousFlushes = expectedFlushes(kMaxUploadsPerUpdate, kFlushPeriod Full);
451 EXPECT_EQ(expectedPreviousFlushes, m_numPreviousFlushes);
452
453 expectedPreviousUploads = kMaxUploadsPerUpdate;
454 EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads);
455
456 // Third update (20 full, 20 partial)
457 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate);
458
459 EXPECT_EQ(3, m_numBeginUploads);
460 EXPECT_EQ(3, m_numEndUploads);
461
462 expectedPreviousFlushes = expectedFlushes(kFullUploads-kMaxUploadsPerUpdate* 2, kFlushPeriodFull) +
463 expectedFlushes(kPartialUploads, kFlushPeriodParti al);
464 EXPECT_EQ(expectedPreviousFlushes, m_numPreviousFlushes);
465
466 expectedPreviousUploads = (kFullUploads-kMaxUploadsPerUpdate*2)+kPartialUplo ads;
467 EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads);
468
469 // Final sanity checks
470 EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads);
471 }
472
473 TEST_F(CCTextureUpdateControllerTest, TripleUpdateFinalUpdateAllPartial)
474 {
475 const int kMaxUploadsPerUpdate = 40;
476 const int kFullUploads = 70;
477 const int kPartialUploads = 30;
478
479 int expectedPreviousFlushes = 0;
480 int expectedPreviousUploads = 0;
481
482 setMaxUploadCountPerUpdate(kMaxUploadsPerUpdate);
483 appendFullUploadsToUpdateQueue(kFullUploads);
484 appendPartialUploadsToUpdateQueue(kPartialUploads);
485
486 // First update (40 full)
487 DebugScopedSetImplThread implThread;
488 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate);
489
490 EXPECT_EQ(1, m_numBeginUploads);
491 EXPECT_EQ(1, m_numEndUploads);
492
493 expectedPreviousFlushes = expectedFlushes(kMaxUploadsPerUpdate, kFlushPeriod Full);
494 EXPECT_EQ(expectedPreviousFlushes, m_numPreviousFlushes);
495
496 expectedPreviousUploads = kMaxUploadsPerUpdate;
497 EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads);
498
499 // Second update (30 full, optionally 10 partial)
500 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate);
501
502 EXPECT_EQ(2, m_numBeginUploads);
503 EXPECT_EQ(2, m_numEndUploads);
504 EXPECT_LE(m_numPreviousUploads, kMaxUploadsPerUpdate);
505 // Be lenient on the exact number of flushes here, as the number of flushes
506 // will depend on whether some partial uploads were performed.
507 // onFlush(), onUpload(), and onEndUpload() will do basic flush checks for u s anyway.
508
509 // Third update (30 partial OR 20 partial if 10 partial uploaded in second u pdate)
510 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate);
511
512 EXPECT_EQ(3, m_numBeginUploads);
513 EXPECT_EQ(3, m_numEndUploads);
514 EXPECT_LE(m_numPreviousUploads, kMaxUploadsPerUpdate);
515 // Be lenient on the exact number of flushes here as well.
516
517 // Final sanity checks
518 EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads);
519 } 328 }
520 329
521 class FakeCCTextureUpdateControllerClient : public cc::CCTextureUpdateController Client { 330 class FakeCCTextureUpdateControllerClient : public cc::CCTextureUpdateController Client {
522 public: 331 public:
523 FakeCCTextureUpdateControllerClient() { reset(); } 332 FakeCCTextureUpdateControllerClient() { reset(); }
524 void reset() { m_readyToFinalizeCalled = false; } 333 void reset() { m_readyToFinalizeCalled = false; }
525 bool readyToFinalizeCalled() const { return m_readyToFinalizeCalled; } 334 bool readyToFinalizeCalled() const { return m_readyToFinalizeCalled; }
526 335
527 virtual void readyToFinalizeTextureUpdates() OVERRIDE { m_readyToFinalizeCal led = true; } 336 virtual void readyToFinalizeTextureUpdates() OVERRIDE { m_readyToFinalizeCal led = true; }
528 337
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 } 485 }
677 486
678 EXPECT_FALSE(thread.hasPendingTask()); 487 EXPECT_FALSE(thread.hasPendingTask());
679 EXPECT_TRUE(client.readyToFinalizeCalled()); 488 EXPECT_TRUE(client.readyToFinalizeCalled());
680 EXPECT_EQ(2, m_numBeginUploads); 489 EXPECT_EQ(2, m_numBeginUploads);
681 EXPECT_EQ(2, m_numEndUploads); 490 EXPECT_EQ(2, m_numEndUploads);
682 EXPECT_EQ(2, m_numTotalUploads); 491 EXPECT_EQ(2, m_numTotalUploads);
683 } 492 }
684 493
685 } // namespace 494 } // namespace
OLDNEW
« cc/CCTextureUpdateController.cpp ('K') | « cc/CCTextureUpdateController.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698