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

Unified Diff: cc/tiles/image_controller.cc

Issue 2668873002: cc: Add checker-imaging support to TileManager. (Closed)
Patch Set: addressed comments Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: cc/tiles/image_controller.cc
diff --git a/cc/tiles/image_controller.cc b/cc/tiles/image_controller.cc
index f0d1bb9666c9cde5de93e7879041193d1e74851f..d118c996ceef19a787ec386843653d01bf8369f1 100644
--- a/cc/tiles/image_controller.cc
+++ b/cc/tiles/image_controller.cc
@@ -20,8 +20,8 @@ ImageController::ImageDecodeRequestId
ImageController::ImageController(
base::SequencedTaskRunner* origin_task_runner,
scoped_refptr<base::SequencedTaskRunner> worker_task_runner)
- : origin_task_runner_(origin_task_runner),
- worker_task_runner_(std::move(worker_task_runner)),
+ : worker_task_runner_(std::move(worker_task_runner)),
+ origin_task_runner_(origin_task_runner),
weak_ptr_factory_(this) {}
ImageController::~ImageController() {
@@ -77,9 +77,10 @@ void ImageController::StopWorkerTasks() {
ImageDecodeRequestId id = request_to_complete.first;
ImageDecodeRequest& request = request_to_complete.second;
- // The task (if one exists) would have run already, so we just need to
- // complete it.
- if (request.task)
+ // The task (if one exists) would have run already, we just need to make
+ // sure it was completed. Multiple requests for the same image use the same
+ // task so it could have already been completed.
+ if (request.task && !request.task->HasCompleted())
request.task->DidComplete();
// Issue the callback, and unref the image immediately. This is so that any
@@ -106,7 +107,9 @@ void ImageController::StopWorkerTasks() {
// several different image deque requests for the same image.
if (request.task->state().IsNew())
request.task->state().DidCancel();
- request.task->DidComplete();
+
+ if (!request.task->HasCompleted())
+ request.task->DidComplete();
}
// Run the callback and unref the image.
request.callback.Run(id);
@@ -120,7 +123,10 @@ void ImageController::SetImageDecodeCache(ImageDecodeCache* cache) {
SetPredecodeImages(std::vector<DrawImage>(),
ImageDecodeCache::TracingInfo());
StopWorkerTasks();
+ } else if (cache_ && cache_ != cache) {
+ StopWorkerTasks();
}
+
cache_ = cache;
}

Powered by Google App Engine
This is Rietveld 408576698