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

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

Powered by Google App Engine
This is Rietveld 408576698