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

Side by Side Diff: cc/tiles/checker_image_tracker_unittest.cc

Issue 2869513002: cc: Clear checker-image tracking on navigation and visibility changes. (Closed)
Patch Set: missed pending invalidations Created 3 years, 7 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "cc/tiles/checker_image_tracker.h" 5 #include "cc/tiles/checker_image_tracker.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 30 matching lines...) Expand all
41 void UnlockImageDecode(ImageDecodeRequestId id) override { 41 void UnlockImageDecode(ImageDecodeRequestId id) override {
42 DCHECK_EQ(locked_images_.count(id), 1U); 42 DCHECK_EQ(locked_images_.count(id), 1U);
43 locked_images_.erase(id); 43 locked_images_.erase(id);
44 } 44 }
45 45
46 ImageDecodeRequestId QueueImageDecode( 46 ImageDecodeRequestId QueueImageDecode(
47 sk_sp<const SkImage> image, 47 sk_sp<const SkImage> image,
48 const ImageDecodedCallback& callback) override { 48 const ImageDecodedCallback& callback) override {
49 ImageDecodeRequestId request_id = next_image_request_id_++; 49 ImageDecodeRequestId request_id = next_image_request_id_++;
50 50
51 // The tracker should request a decode only once.
52 EXPECT_EQ(decodes_requested_.count(image->uniqueID()), 0u);
53 decodes_requested_.insert(image->uniqueID()); 51 decodes_requested_.insert(image->uniqueID());
54
55 locked_images_.insert(request_id); 52 locked_images_.insert(request_id);
56 53
57 // Post the callback asynchronously to match the behaviour in 54 // Post the callback asynchronously to match the behaviour in
58 // ImageController. 55 // ImageController.
59 worker_task_runner_->PostTask( 56 worker_task_runner_->PostTask(
60 FROM_HERE, 57 FROM_HERE,
61 base::BindOnce(callback, request_id, ImageDecodeResult::SUCCESS)); 58 base::BindOnce(callback, request_id, ImageDecodeResult::SUCCESS));
62 59
63 return request_id; 60 return request_id;
64 } 61 }
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 // Trigger completion for all decodes. Only 2 images should have been decoded 322 // Trigger completion for all decodes. Only 2 images should have been decoded
326 // since the second image was cancelled. 323 // since the second image was cancelled.
327 base::RunLoop().RunUntilIdle(); 324 base::RunLoop().RunUntilIdle();
328 EXPECT_EQ(image_controller_.decodes_requested().size(), 2U); 325 EXPECT_EQ(image_controller_.decodes_requested().size(), 2U);
329 EXPECT_EQ(image_controller_.decodes_requested().count( 326 EXPECT_EQ(image_controller_.decodes_requested().count(
330 checkerable_image3.image()->uniqueID()), 327 checkerable_image3.image()->uniqueID()),
331 1U); 328 1U);
332 EXPECT_EQ(image_controller_.num_of_locked_images(), 2); 329 EXPECT_EQ(image_controller_.num_of_locked_images(), 2);
333 } 330 }
334 331
332 TEST_F(CheckerImageTrackerTest, ClearsTracker) {
333 SetUpTracker(true);
334
335 DrawImage checkerable_image = CreateImage(ImageType::CHECKERABLE);
336 CheckerImageTracker::ImageDecodeQueue image_decode_queue =
337 BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
338 EXPECT_EQ(image_decode_queue.size(), 1U);
339 checker_image_tracker_->ScheduleImageDecodeQueue(
340 std::move(image_decode_queue));
341 base::RunLoop().RunUntilIdle();
342 checker_image_tracker_->TakeImagesToInvalidateOnSyncTree();
343
344 // The image is no longer checkered on the pending tree.
345 image_decode_queue =
346 BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
347 EXPECT_EQ(image_decode_queue.size(), 0U);
348 EXPECT_EQ(image_controller_.num_of_locked_images(), 1);
349
350 // Clear the tracker without clearing the async decode tracking. This should
351 // drop the decode but the image should not be checkered.
352 bool can_clear_decode_policy_tracking = false;
353 checker_image_tracker_->ClearTracker(can_clear_decode_policy_tracking);
354 EXPECT_EQ(image_controller_.num_of_locked_images(), 0);
355 image_decode_queue =
356 BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
357 EXPECT_EQ(image_decode_queue.size(), 0U);
358 checker_image_tracker_->DidActivateSyncTree();
359
360 // Now clear the decode tracking as well. The image will be re-checkered.
361 can_clear_decode_policy_tracking = true;
362 checker_image_tracker_->ClearTracker(can_clear_decode_policy_tracking);
363 image_decode_queue =
364 BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
365 image_decode_queue =
366 BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
367 EXPECT_EQ(image_decode_queue.size(), 1U);
368
369 // If an image had been decoded and tracker was cleared after it, we should
370 // continue checkering it.
371 DrawImage checkerable_image2 = CreateImage(ImageType::CHECKERABLE);
372 image_decode_queue =
373 BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
374 EXPECT_EQ(image_decode_queue.size(), 1U);
375 checker_image_tracker_->ScheduleImageDecodeQueue(
376 std::move(image_decode_queue));
377 base::RunLoop().RunUntilIdle();
378
379 EXPECT_EQ(image_controller_.num_of_locked_images(), 1);
380 can_clear_decode_policy_tracking = false;
381 checker_image_tracker_->ClearTracker(can_clear_decode_policy_tracking);
382 EXPECT_EQ(image_controller_.num_of_locked_images(), 0);
383 image_decode_queue =
384 BuildImageDecodeQueue({checkerable_image}, WhichTree::PENDING_TREE);
385 EXPECT_EQ(image_decode_queue.size(), 1U);
386 }
387
335 } // namespace 388 } // namespace
336 } // namespace cc 389 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698