OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |