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

Side by Side Diff: cc/CCTextureUpdateControllerTest.cpp

Issue 10916292: Adaptively throttle texture uploads (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: cc_unittests passing again 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
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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 } 108 }
109 109
110 m_numDanglingUploads = 0; 110 m_numDanglingUploads = 0;
111 m_numConsecutiveFlushes++; 111 m_numConsecutiveFlushes++;
112 m_numTotalFlushes++; 112 m_numTotalFlushes++;
113 m_numPreviousFlushes++; 113 m_numPreviousFlushes++;
114 } 114 }
115 115
116 void onBeginUploads() 116 void onBeginUploads()
117 { 117 {
118 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flush.";
119
118 m_numPreviousFlushes = 0; 120 m_numPreviousFlushes = 0;
119 m_numPreviousUploads = 0; 121 m_numPreviousUploads = 0;
120 m_numBeginUploads++; 122 m_numBeginUploads++;
121 } 123 }
122 124
123 void onUpload() 125 void onUpload()
124 { 126 {
125 // Check for too many consecutive uploads 127 // Check for too many consecutive uploads
126 if (m_numTotalUploads < m_fullUploadCountExpected) 128 if (m_numTotalUploads < m_fullUploadCountExpected)
127 EXPECT_LT(m_numDanglingUploads, kFlushPeriodFull) << "Too many conse cutive full uploads detected."; 129 EXPECT_LT(m_numDanglingUploads, kFlushPeriodFull) << "Too many conse cutive full uploads detected.";
128 else 130 else
129 EXPECT_LT(m_numDanglingUploads, kFlushPeriodPartial) << "Too many co nsecutive partial uploads detected."; 131 EXPECT_LT(m_numDanglingUploads, kFlushPeriodPartial) << "Too many co nsecutive partial uploads detected.";
130 132
131 m_numConsecutiveFlushes = 0; 133 m_numConsecutiveFlushes = 0;
132 m_numDanglingUploads++; 134 m_numDanglingUploads++;
133 m_numTotalUploads++; 135 m_numTotalUploads++;
134 m_numPreviousUploads++; 136 m_numPreviousUploads++;
135 } 137 }
136 138
137 void onEndUploads() 139 void onEndUploads()
138 { 140 {
139 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flush.";
140
brianderson 2012/09/18 00:45:52 onEndUploads is called before the final flush to k
141 // Note: The m_numTotalUploads != m_fullUploadCountExpected comparison 141 // Note: The m_numTotalUploads != m_fullUploadCountExpected comparison
142 // allows for the quota not to be hit in the case where we are trasition ing 142 // allows for the quota not to be hit in the case where we are trasition ing
143 // from full uploads to partial uploads. 143 // from full uploads to partial uploads.
144 if (m_numTotalUploads != m_totalUploadCountExpected && m_numTotalUploads != m_fullUploadCountExpected) { 144 if (m_numTotalUploads != m_totalUploadCountExpected && m_numTotalUploads != m_fullUploadCountExpected) {
145 EXPECT_EQ(m_maxUploadCountPerUpdate, m_numPreviousUploads) 145 EXPECT_EQ(m_maxUploadCountPerUpdate, m_numPreviousUploads)
146 << "endUpload() was called when there are textures to upload, bu t the upload quota hasn't been filled."; 146 << "endUpload() was called when there are textures to upload, bu t the upload quota hasn't been filled.";
147 } 147 }
148 148
149 m_numEndUploads++; 149 m_numEndUploads++;
150 } 150 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 { 258 {
259 appendFullUploadsToUpdateQueue(1); 259 appendFullUploadsToUpdateQueue(1);
260 appendPartialUploadsToUpdateQueue(0); 260 appendPartialUploadsToUpdateQueue(0);
261 DebugScopedSetImplThread implThread; 261 DebugScopedSetImplThread implThread;
262 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 262 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
263 263
264 EXPECT_EQ(1, m_numBeginUploads); 264 EXPECT_EQ(1, m_numBeginUploads);
265 EXPECT_EQ(1, m_numEndUploads); 265 EXPECT_EQ(1, m_numEndUploads);
266 EXPECT_EQ(1, m_numPreviousFlushes); 266 EXPECT_EQ(1, m_numPreviousFlushes);
267 EXPECT_EQ(1, m_numPreviousUploads); 267 EXPECT_EQ(1, m_numPreviousUploads);
268 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
268 } 269 }
269 270
270 TEST_F(CCTextureUpdateControllerTest, OnePartialUpload) 271 TEST_F(CCTextureUpdateControllerTest, OnePartialUpload)
271 { 272 {
272 appendFullUploadsToUpdateQueue(0); 273 appendFullUploadsToUpdateQueue(0);
273 appendPartialUploadsToUpdateQueue(1); 274 appendPartialUploadsToUpdateQueue(1);
274 DebugScopedSetImplThread implThread; 275 DebugScopedSetImplThread implThread;
275 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 276 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
276 277
277 EXPECT_EQ(1, m_numBeginUploads); 278 EXPECT_EQ(1, m_numBeginUploads);
278 EXPECT_EQ(1, m_numEndUploads); 279 EXPECT_EQ(1, m_numEndUploads);
279 EXPECT_EQ(1, m_numPreviousFlushes); 280 EXPECT_EQ(1, m_numPreviousFlushes);
280 EXPECT_EQ(1, m_numPreviousUploads); 281 EXPECT_EQ(1, m_numPreviousUploads);
282 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
281 } 283 }
282 284
283 TEST_F(CCTextureUpdateControllerTest, OneFullOnePartialUpload) 285 TEST_F(CCTextureUpdateControllerTest, OneFullOnePartialUpload)
284 { 286 {
285 appendFullUploadsToUpdateQueue(1); 287 appendFullUploadsToUpdateQueue(1);
286 appendPartialUploadsToUpdateQueue(1); 288 appendPartialUploadsToUpdateQueue(1);
287 DebugScopedSetImplThread implThread; 289 DebugScopedSetImplThread implThread;
288 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 290 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
289 291
290 // We expect the full uploads to be followed by a flush 292 // We expect the full uploads to be followed by a flush
291 // before the partial uploads begin. 293 // before the partial uploads begin.
292 EXPECT_EQ(1, m_numBeginUploads); 294 EXPECT_EQ(1, m_numBeginUploads);
293 EXPECT_EQ(1, m_numEndUploads); 295 EXPECT_EQ(1, m_numEndUploads);
294 EXPECT_EQ(2, m_numPreviousFlushes); 296 EXPECT_EQ(2, m_numPreviousFlushes);
295 EXPECT_EQ(2, m_numPreviousUploads); 297 EXPECT_EQ(2, m_numPreviousUploads);
298 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
296 } 299 }
297 300
298 301
299 // NO REMAINDER TESTS 302 // NO REMAINDER TESTS
300 // This class of tests upload a number of textures that is a multiple of the flu sh period. 303 // This class of tests upload a number of textures that is a multiple of the flu sh period.
301 const int fullUploadFlushMultipler = 7; 304 const int fullUploadFlushMultipler = 7;
302 const int fullNoRemainderCount = fullUploadFlushMultipler * kFlushPeriodFull; 305 const int fullNoRemainderCount = fullUploadFlushMultipler * kFlushPeriodFull;
303 306
304 const int partialUploadFlushMultipler = 11; 307 const int partialUploadFlushMultipler = 11;
305 const int partialNoRemainderCount = partialUploadFlushMultipler * kFlushPeriodPa rtial; 308 const int partialNoRemainderCount = partialUploadFlushMultipler * kFlushPeriodPa rtial;
306 309
307 TEST_F(CCTextureUpdateControllerTest, ManyFullUploadsNoRemainder) 310 TEST_F(CCTextureUpdateControllerTest, ManyFullUploadsNoRemainder)
308 { 311 {
309 appendFullUploadsToUpdateQueue(fullNoRemainderCount); 312 appendFullUploadsToUpdateQueue(fullNoRemainderCount);
310 appendPartialUploadsToUpdateQueue(0); 313 appendPartialUploadsToUpdateQueue(0);
311 DebugScopedSetImplThread implThread; 314 DebugScopedSetImplThread implThread;
312 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 315 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
313 316
314 EXPECT_EQ(1, m_numBeginUploads); 317 EXPECT_EQ(1, m_numBeginUploads);
315 EXPECT_EQ(1, m_numEndUploads); 318 EXPECT_EQ(1, m_numEndUploads);
316 EXPECT_EQ(fullUploadFlushMultipler, m_numPreviousFlushes); 319 EXPECT_EQ(fullUploadFlushMultipler, m_numPreviousFlushes);
317 EXPECT_EQ(fullNoRemainderCount, m_numPreviousUploads); 320 EXPECT_EQ(fullNoRemainderCount, m_numPreviousUploads);
321 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
318 } 322 }
319 323
320 TEST_F(CCTextureUpdateControllerTest, ManyPartialUploadsNoRemainder) 324 TEST_F(CCTextureUpdateControllerTest, ManyPartialUploadsNoRemainder)
321 { 325 {
322 appendFullUploadsToUpdateQueue(0); 326 appendFullUploadsToUpdateQueue(0);
323 appendPartialUploadsToUpdateQueue(partialNoRemainderCount); 327 appendPartialUploadsToUpdateQueue(partialNoRemainderCount);
324 DebugScopedSetImplThread implThread; 328 DebugScopedSetImplThread implThread;
325 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 329 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
326 330
327 EXPECT_EQ(1, m_numBeginUploads); 331 EXPECT_EQ(1, m_numBeginUploads);
328 EXPECT_EQ(1, m_numEndUploads); 332 EXPECT_EQ(1, m_numEndUploads);
329 EXPECT_EQ(partialUploadFlushMultipler, m_numPreviousFlushes); 333 EXPECT_EQ(partialUploadFlushMultipler, m_numPreviousFlushes);
330 EXPECT_EQ(partialNoRemainderCount, m_numPreviousUploads); 334 EXPECT_EQ(partialNoRemainderCount, m_numPreviousUploads);
335 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
331 } 336 }
332 337
333 TEST_F(CCTextureUpdateControllerTest, ManyFullManyPartialUploadsNoRemainder) 338 TEST_F(CCTextureUpdateControllerTest, ManyFullManyPartialUploadsNoRemainder)
334 { 339 {
335 appendFullUploadsToUpdateQueue(fullNoRemainderCount); 340 appendFullUploadsToUpdateQueue(fullNoRemainderCount);
336 appendPartialUploadsToUpdateQueue(partialNoRemainderCount); 341 appendPartialUploadsToUpdateQueue(partialNoRemainderCount);
337 DebugScopedSetImplThread implThread; 342 DebugScopedSetImplThread implThread;
338 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 343 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
339 344
340 EXPECT_EQ(1, m_numBeginUploads); 345 EXPECT_EQ(1, m_numBeginUploads);
341 EXPECT_EQ(1, m_numEndUploads); 346 EXPECT_EQ(1, m_numEndUploads);
342 EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler, m_numPrevi ousFlushes); 347 EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler, m_numPrevi ousFlushes);
343 EXPECT_EQ(fullNoRemainderCount + partialNoRemainderCount, m_numPreviousUploa ds); 348 EXPECT_EQ(fullNoRemainderCount + partialNoRemainderCount, m_numPreviousUploa ds);
349 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
344 } 350 }
345 351
346 352
347 // MIN/MAX REMAINDER TESTS 353 // MIN/MAX REMAINDER TESTS
348 // This class of tests mix and match uploading 1 more and 1 less texture 354 // This class of tests mix and match uploading 1 more and 1 less texture
349 // than a multiple of the flush period. 355 // than a multiple of the flush period.
350 356
351 const int fullMinRemainderCount = fullNoRemainderCount + 1; 357 const int fullMinRemainderCount = fullNoRemainderCount + 1;
352 const int fullMaxRemainderCount = fullNoRemainderCount - 1; 358 const int fullMaxRemainderCount = fullNoRemainderCount - 1;
353 const int partialMinRemainderCount = partialNoRemainderCount + 1; 359 const int partialMinRemainderCount = partialNoRemainderCount + 1;
354 const int partialMaxRemainderCount = partialNoRemainderCount - 1; 360 const int partialMaxRemainderCount = partialNoRemainderCount - 1;
355 361
356 TEST_F(CCTextureUpdateControllerTest, ManyFullAndPartialMinRemainder) 362 TEST_F(CCTextureUpdateControllerTest, ManyFullAndPartialMinRemainder)
357 { 363 {
358 appendFullUploadsToUpdateQueue(fullMinRemainderCount); 364 appendFullUploadsToUpdateQueue(fullMinRemainderCount);
359 appendPartialUploadsToUpdateQueue(partialMinRemainderCount); 365 appendPartialUploadsToUpdateQueue(partialMinRemainderCount);
360 DebugScopedSetImplThread implThread; 366 DebugScopedSetImplThread implThread;
361 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 367 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
362 368
363 EXPECT_EQ(1, m_numBeginUploads); 369 EXPECT_EQ(1, m_numBeginUploads);
364 EXPECT_EQ(1, m_numEndUploads); 370 EXPECT_EQ(1, m_numEndUploads);
365 EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler + 2, m_numP reviousFlushes); 371 EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler + 2, m_numP reviousFlushes);
366 EXPECT_EQ(fullMinRemainderCount + partialMinRemainderCount, m_numPreviousUpl oads); 372 EXPECT_EQ(fullMinRemainderCount + partialMinRemainderCount, m_numPreviousUpl oads);
373 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
367 } 374 }
368 375
369 TEST_F(CCTextureUpdateControllerTest, ManyFullAndPartialUploadsMaxRemainder) 376 TEST_F(CCTextureUpdateControllerTest, ManyFullAndPartialUploadsMaxRemainder)
370 { 377 {
371 appendFullUploadsToUpdateQueue(fullMaxRemainderCount); 378 appendFullUploadsToUpdateQueue(fullMaxRemainderCount);
372 appendPartialUploadsToUpdateQueue(partialMaxRemainderCount); 379 appendPartialUploadsToUpdateQueue(partialMaxRemainderCount);
373 DebugScopedSetImplThread implThread; 380 DebugScopedSetImplThread implThread;
374 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 381 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
375 382
376 EXPECT_EQ(1, m_numBeginUploads); 383 EXPECT_EQ(1, m_numBeginUploads);
377 EXPECT_EQ(1, m_numEndUploads); 384 EXPECT_EQ(1, m_numEndUploads);
378 EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler, m_numPrevi ousFlushes); 385 EXPECT_EQ(fullUploadFlushMultipler + partialUploadFlushMultipler, m_numPrevi ousFlushes);
379 EXPECT_EQ(fullMaxRemainderCount + partialMaxRemainderCount, m_numPreviousUpl oads); 386 EXPECT_EQ(fullMaxRemainderCount + partialMaxRemainderCount, m_numPreviousUpl oads);
387 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
380 } 388 }
381 389
382 TEST_F(CCTextureUpdateControllerTest, ManyFullMinRemainderManyPartialMaxRemainde r) 390 TEST_F(CCTextureUpdateControllerTest, ManyFullMinRemainderManyPartialMaxRemainde r)
383 { 391 {
384 appendFullUploadsToUpdateQueue(fullMinRemainderCount); 392 appendFullUploadsToUpdateQueue(fullMinRemainderCount);
385 appendPartialUploadsToUpdateQueue(partialMaxRemainderCount); 393 appendPartialUploadsToUpdateQueue(partialMaxRemainderCount);
386 DebugScopedSetImplThread implThread; 394 DebugScopedSetImplThread implThread;
387 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 395 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
388 396
389 EXPECT_EQ(1, m_numBeginUploads); 397 EXPECT_EQ(1, m_numBeginUploads);
390 EXPECT_EQ(1, m_numEndUploads); 398 EXPECT_EQ(1, m_numEndUploads);
391 EXPECT_EQ((fullUploadFlushMultipler+1) + partialUploadFlushMultipler, m_numP reviousFlushes); 399 EXPECT_EQ((fullUploadFlushMultipler+1) + partialUploadFlushMultipler, m_numP reviousFlushes);
392 EXPECT_EQ(fullMinRemainderCount + partialMaxRemainderCount, m_numPreviousUpl oads); 400 EXPECT_EQ(fullMinRemainderCount + partialMaxRemainderCount, m_numPreviousUpl oads);
401 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
393 } 402 }
394 403
395 TEST_F(CCTextureUpdateControllerTest, ManyFullMaxRemainderManyPartialMinRemainde r) 404 TEST_F(CCTextureUpdateControllerTest, ManyFullMaxRemainderManyPartialMinRemainde r)
396 { 405 {
397 appendFullUploadsToUpdateQueue(fullMaxRemainderCount); 406 appendFullUploadsToUpdateQueue(fullMaxRemainderCount);
398 appendPartialUploadsToUpdateQueue(partialMinRemainderCount); 407 appendPartialUploadsToUpdateQueue(partialMinRemainderCount);
399 DebugScopedSetImplThread implThread; 408 DebugScopedSetImplThread implThread;
400 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected); 409 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), m_totalUploadCountExpected);
401 410
402 EXPECT_EQ(1, m_numBeginUploads); 411 EXPECT_EQ(1, m_numBeginUploads);
403 EXPECT_EQ(1, m_numEndUploads); 412 EXPECT_EQ(1, m_numEndUploads);
404 EXPECT_EQ(fullUploadFlushMultipler + (partialUploadFlushMultipler+1), m_numP reviousFlushes); 413 EXPECT_EQ(fullUploadFlushMultipler + (partialUploadFlushMultipler+1), m_numP reviousFlushes);
405 EXPECT_EQ(fullMaxRemainderCount + partialMinRemainderCount, m_numPreviousUpl oads); 414 EXPECT_EQ(fullMaxRemainderCount + partialMinRemainderCount, m_numPreviousUpl oads);
415 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
406 } 416 }
407 417
408 418
409 // MULTIPLE UPDATE TESTS 419 // MULTIPLE UPDATE TESTS
410 // These tests attempt to upload too many textures at once, requiring 420 // These tests attempt to upload too many textures at once, requiring
411 // multiple calls to update(). 421 // multiple calls to update().
412 422
413 int expectedFlushes(int uploads, int flushPeriod) 423 int expectedFlushes(int uploads, int flushPeriod)
414 { 424 {
415 return (uploads + flushPeriod - 1) / flushPeriod; 425 return (uploads + flushPeriod - 1) / flushPeriod;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 EXPECT_EQ(3, m_numEndUploads); 470 EXPECT_EQ(3, m_numEndUploads);
461 471
462 expectedPreviousFlushes = expectedFlushes(kFullUploads-kMaxUploadsPerUpdate* 2, kFlushPeriodFull) + 472 expectedPreviousFlushes = expectedFlushes(kFullUploads-kMaxUploadsPerUpdate* 2, kFlushPeriodFull) +
463 expectedFlushes(kPartialUploads, kFlushPeriodParti al); 473 expectedFlushes(kPartialUploads, kFlushPeriodParti al);
464 EXPECT_EQ(expectedPreviousFlushes, m_numPreviousFlushes); 474 EXPECT_EQ(expectedPreviousFlushes, m_numPreviousFlushes);
465 475
466 expectedPreviousUploads = (kFullUploads-kMaxUploadsPerUpdate*2)+kPartialUplo ads; 476 expectedPreviousUploads = (kFullUploads-kMaxUploadsPerUpdate*2)+kPartialUplo ads;
467 EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads); 477 EXPECT_EQ(expectedPreviousUploads, m_numPreviousUploads);
468 478
469 // Final sanity checks 479 // Final sanity checks
480 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
470 EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads); 481 EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads);
471 } 482 }
472 483
473 TEST_F(CCTextureUpdateControllerTest, TripleUpdateFinalUpdateAllPartial) 484 TEST_F(CCTextureUpdateControllerTest, TripleUpdateFinalUpdateAllPartial)
474 { 485 {
475 const int kMaxUploadsPerUpdate = 40; 486 const int kMaxUploadsPerUpdate = 40;
476 const int kFullUploads = 70; 487 const int kFullUploads = 70;
477 const int kPartialUploads = 30; 488 const int kPartialUploads = 30;
478 489
479 int expectedPreviousFlushes = 0; 490 int expectedPreviousFlushes = 0;
(...skipping 28 matching lines...) Expand all
508 519
509 // Third update (30 partial OR 20 partial if 10 partial uploaded in second u pdate) 520 // 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); 521 CCTextureUpdateController::updateTextures(m_resourceProvider.get(), &m_copie r, &m_uploader, m_queue.get(), kMaxUploadsPerUpdate);
511 522
512 EXPECT_EQ(3, m_numBeginUploads); 523 EXPECT_EQ(3, m_numBeginUploads);
513 EXPECT_EQ(3, m_numEndUploads); 524 EXPECT_EQ(3, m_numEndUploads);
514 EXPECT_LE(m_numPreviousUploads, kMaxUploadsPerUpdate); 525 EXPECT_LE(m_numPreviousUploads, kMaxUploadsPerUpdate);
515 // Be lenient on the exact number of flushes here as well. 526 // Be lenient on the exact number of flushes here as well.
516 527
517 // Final sanity checks 528 // Final sanity checks
529 EXPECT_EQ(0, m_numDanglingUploads) << "Last upload wasn't followed by a flus h.";
518 EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads); 530 EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads);
519 } 531 }
520 532
521 class FakeCCTextureUpdateControllerClient : public cc::CCTextureUpdateController Client { 533 class FakeCCTextureUpdateControllerClient : public cc::CCTextureUpdateController Client {
522 public: 534 public:
523 FakeCCTextureUpdateControllerClient() { reset(); } 535 FakeCCTextureUpdateControllerClient() { reset(); }
524 void reset() { m_readyToFinalizeCalled = false; } 536 void reset() { m_readyToFinalizeCalled = false; }
525 bool readyToFinalizeCalled() const { return m_readyToFinalizeCalled; } 537 bool readyToFinalizeCalled() const { return m_readyToFinalizeCalled; }
526 538
527 virtual void readyToFinalizeTextureUpdates() OVERRIDE { m_readyToFinalizeCal led = true; } 539 virtual void readyToFinalizeTextureUpdates() OVERRIDE { m_readyToFinalizeCal led = true; }
528 540
529 protected: 541 protected:
530 bool m_readyToFinalizeCalled; 542 bool m_readyToFinalizeCalled;
531 }; 543 };
532 544
533 class FakeCCTextureUpdateController : public cc::CCTextureUpdateController { 545 class FakeCCTextureUpdateController : public cc::CCTextureUpdateController {
534 public: 546 public:
535 static PassOwnPtr<FakeCCTextureUpdateController> create(cc::CCTextureUpdateC ontrollerClient* client, cc::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploa der* uploader) 547 static PassOwnPtr<FakeCCTextureUpdateController> create(cc::CCTextureUpdateC ontrollerClient* client, cc::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploa der* uploader, size_t maxPartialTextureUpdates)
536 { 548 {
537 return adoptPtr(new FakeCCTextureUpdateController(client, thread, queue, resourceProvider, copier, uploader)); 549 return adoptPtr(new FakeCCTextureUpdateController(client, thread, queue, resourceProvider, copier, uploader, maxPartialTextureUpdates));
538 } 550 }
539 551
540 void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; } 552 void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; }
541 virtual double monotonicTimeNow() const OVERRIDE { return m_monotonicTimeNow ; } 553 virtual double monotonicTimeNow() const OVERRIDE { return m_monotonicTimeNow ; }
542 void setUpdateMoreTexturesTime(double time) { m_updateMoreTexturesTime = tim e; } 554 void setUpdateMoreTexturesTime(double time) { m_updateMoreTexturesTime = tim e; }
543 virtual double updateMoreTexturesTime() const OVERRIDE { return m_updateMore TexturesTime; } 555 virtual double updateMoreTexturesTime() const OVERRIDE { return m_updateMore TexturesTime; }
544 void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = siz e; } 556 void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = siz e; }
545 virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMore TexturesSize; } 557 virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMore TexturesSize; }
546 558
547 protected: 559 protected:
548 FakeCCTextureUpdateController(cc::CCTextureUpdateControllerClient* client, c c::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader) 560 FakeCCTextureUpdateController(cc::CCTextureUpdateControllerClient* client, c c::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader, size_t maxP artialTextureUpdates)
549 : cc::CCTextureUpdateController(client, thread, queue, resourceProvider, copier, uploader) 561 : cc::CCTextureUpdateController(client, thread, queue, resourceProvider, copier, uploader, maxPartialTextureUpdates)
550 , m_monotonicTimeNow(0) 562 , m_monotonicTimeNow(0)
551 , m_updateMoreTexturesTime(0) 563 , m_updateMoreTexturesTime(0)
552 , m_updateMoreTexturesSize(0) { } 564 , m_updateMoreTexturesSize(0) { }
553 565
554 double m_monotonicTimeNow; 566 double m_monotonicTimeNow;
555 double m_updateMoreTexturesTime; 567 double m_updateMoreTexturesTime;
556 size_t m_updateMoreTexturesSize; 568 size_t m_updateMoreTexturesSize;
557 }; 569 };
558 570
559 static void runPendingTask(FakeCCThread* thread, FakeCCTextureUpdateController* controller) 571 static void runPendingTask(FakeCCThread* thread, FakeCCTextureUpdateController* controller)
560 { 572 {
561 EXPECT_TRUE(thread->hasPendingTask()); 573 EXPECT_TRUE(thread->hasPendingTask());
562 controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread->pen dingDelayMs() / 1000.0); 574 controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread->pen dingDelayMs() / 1000.0);
563 thread->runPendingTask(); 575 thread->runPendingTask();
564 } 576 }
565 577
566 TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures) 578 TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures)
567 { 579 {
568 FakeCCTextureUpdateControllerClient client; 580 FakeCCTextureUpdateControllerClient client;
569 FakeCCThread thread; 581 FakeCCThread thread;
570 582
571 setMaxUploadCountPerUpdate(1); 583 setMaxUploadCountPerUpdate(1);
572 appendFullUploadsToUpdateQueue(3); 584 appendFullUploadsToUpdateQueue(3);
573 appendPartialUploadsToUpdateQueue(0); 585 appendPartialUploadsToUpdateQueue(0);
574 586
575 DebugScopedSetImplThread implThread; 587 DebugScopedSetImplThread implThread;
576 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop ier, &m_uploader)); 588 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop ier, &m_uploader, 0));
577 589
578 controller->setMonotonicTimeNow(0); 590 controller->setMonotonicTimeNow(0);
579 controller->setUpdateMoreTexturesTime(0.1); 591 controller->setUpdateMoreTexturesTime(0.1);
580 controller->setUpdateMoreTexturesSize(1); 592 controller->setUpdateMoreTexturesSize(1);
581 // Not enough time for any updates. 593 // Not enough time for any updates.
582 controller->performMoreUpdates(0.09); 594 controller->performMoreUpdates(0.09);
583 EXPECT_FALSE(thread.hasPendingTask()); 595 EXPECT_FALSE(thread.hasPendingTask());
584 EXPECT_EQ(0, m_numBeginUploads); 596 EXPECT_EQ(0, m_numBeginUploads);
585 EXPECT_EQ(0, m_numEndUploads); 597 EXPECT_EQ(0, m_numEndUploads);
586 598
(...skipping 25 matching lines...) Expand all
612 TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates) 624 TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates)
613 { 625 {
614 FakeCCTextureUpdateControllerClient client; 626 FakeCCTextureUpdateControllerClient client;
615 FakeCCThread thread; 627 FakeCCThread thread;
616 628
617 setMaxUploadCountPerUpdate(1); 629 setMaxUploadCountPerUpdate(1);
618 appendFullUploadsToUpdateQueue(2); 630 appendFullUploadsToUpdateQueue(2);
619 appendPartialUploadsToUpdateQueue(0); 631 appendPartialUploadsToUpdateQueue(0);
620 632
621 DebugScopedSetImplThread implThread; 633 DebugScopedSetImplThread implThread;
622 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop ier, &m_uploader)); 634 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop ier, &m_uploader, 0));
623 635
624 controller->setMonotonicTimeNow(0); 636 controller->setMonotonicTimeNow(0);
625 controller->setUpdateMoreTexturesTime(0.1); 637 controller->setUpdateMoreTexturesTime(0.1);
626 controller->setUpdateMoreTexturesSize(1); 638 controller->setUpdateMoreTexturesSize(1);
627 // Enough time for 3 updates but only 2 necessary. 639 // Enough time for 3 updates but only 2 necessary.
628 controller->performMoreUpdates(0.31); 640 controller->performMoreUpdates(0.31);
629 runPendingTask(&thread, controller.get()); 641 runPendingTask(&thread, controller.get());
630 runPendingTask(&thread, controller.get()); 642 runPendingTask(&thread, controller.get());
631 EXPECT_FALSE(thread.hasPendingTask()); 643 EXPECT_FALSE(thread.hasPendingTask());
632 EXPECT_TRUE(client.readyToFinalizeCalled()); 644 EXPECT_TRUE(client.readyToFinalizeCalled());
(...skipping 18 matching lines...) Expand all
651 TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime) 663 TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime)
652 { 664 {
653 FakeCCTextureUpdateControllerClient client; 665 FakeCCTextureUpdateControllerClient client;
654 FakeCCThread thread; 666 FakeCCThread thread;
655 667
656 setMaxUploadCountPerUpdate(1); 668 setMaxUploadCountPerUpdate(1);
657 appendFullUploadsToUpdateQueue(2); 669 appendFullUploadsToUpdateQueue(2);
658 appendPartialUploadsToUpdateQueue(0); 670 appendPartialUploadsToUpdateQueue(0);
659 671
660 DebugScopedSetImplThread implThread; 672 DebugScopedSetImplThread implThread;
661 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop ier, &m_uploader)); 673 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop ier, &m_uploader, 0));
662 674
663 controller->setMonotonicTimeNow(0); 675 controller->setMonotonicTimeNow(0);
664 controller->setUpdateMoreTexturesTime(0.5); 676 controller->setUpdateMoreTexturesTime(0.5);
665 controller->setUpdateMoreTexturesSize(1); 677 controller->setUpdateMoreTexturesSize(1);
666 678
667 for (int i = 0; i < 100; i++) { 679 for (int i = 0; i < 100; i++) {
668 if (client.readyToFinalizeCalled()) 680 if (client.readyToFinalizeCalled())
669 break; 681 break;
670 682
671 // Not enough time for any updates. 683 // Not enough time for any updates.
672 controller->performMoreUpdates(0.4); 684 controller->performMoreUpdates(0.4);
673 685
674 if (thread.hasPendingTask()) 686 if (thread.hasPendingTask())
675 runPendingTask(&thread, controller.get()); 687 runPendingTask(&thread, controller.get());
676 } 688 }
677 689
678 EXPECT_FALSE(thread.hasPendingTask()); 690 EXPECT_FALSE(thread.hasPendingTask());
679 EXPECT_TRUE(client.readyToFinalizeCalled()); 691 EXPECT_TRUE(client.readyToFinalizeCalled());
680 EXPECT_EQ(2, m_numBeginUploads); 692 EXPECT_EQ(2, m_numBeginUploads);
681 EXPECT_EQ(2, m_numEndUploads); 693 EXPECT_EQ(2, m_numEndUploads);
682 EXPECT_EQ(2, m_numTotalUploads); 694 EXPECT_EQ(2, m_numTotalUploads);
683 } 695 }
684 696
685 } // namespace 697 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698