| OLD | NEW | 
|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/decoded_image_tracker.h" | 5 #include "cc/tiles/decoded_image_tracker.h" | 
| 6 | 6 | 
| 7 namespace cc { | 7 namespace cc { | 
| 8 namespace { | 8 namespace { | 
| 9 const int kNumFramesToLock = 2; | 9 const int kNumFramesToLock = 2; | 
| 10 }  // namespace | 10 }  // namespace | 
| 11 | 11 | 
| 12 DecodedImageTracker::DecodedImageTracker() = default; | 12 DecodedImageTracker::DecodedImageTracker() = default; | 
| 13 DecodedImageTracker::~DecodedImageTracker() { | 13 DecodedImageTracker::~DecodedImageTracker() { | 
| 14   for (auto& pair : locked_images_) | 14   for (auto& pair : locked_images_) | 
| 15     image_controller_->UnlockImageDecode(pair.first); | 15     image_controller_->UnlockImageDecode(pair.first); | 
| 16 } | 16 } | 
| 17 | 17 | 
| 18 void DecodedImageTracker::QueueImageDecode( | 18 void DecodedImageTracker::QueueImageDecode( | 
| 19     const PaintImage& image, | 19     const PaintImage& image, | 
| 20     const base::Callback<void(bool)>& callback) { | 20     const base::Callback<void(bool)>& callback) { | 
| 21   DCHECK(image_controller_); | 21   DCHECK(image_controller_); | 
| 22   // Queue the decode in the image controller, but switch out the callback for | 22   // Queue the decode in the image controller, but switch out the callback for | 
| 23   // our own. | 23   // our own. | 
| 24   image_controller_->QueueImageDecode( | 24   image_controller_->QueueImageDecode( | 
| 25       image.sk_image(), base::Bind(&DecodedImageTracker::ImageDecodeFinished, | 25       image, base::Bind(&DecodedImageTracker::ImageDecodeFinished, | 
| 26                                    base::Unretained(this), callback)); | 26                         base::Unretained(this), callback)); | 
| 27 } | 27 } | 
| 28 | 28 | 
| 29 void DecodedImageTracker::NotifyFrameFinished() { | 29 void DecodedImageTracker::NotifyFrameFinished() { | 
| 30   // Go through the images and if the frame ref count goes to 0, unlock the | 30   // Go through the images and if the frame ref count goes to 0, unlock the | 
| 31   // image in the controller. | 31   // image in the controller. | 
| 32   for (auto it = locked_images_.begin(); it != locked_images_.end();) { | 32   for (auto it = locked_images_.begin(); it != locked_images_.end();) { | 
| 33     auto id = it->first; | 33     auto id = it->first; | 
| 34     int& ref_count = it->second; | 34     int& ref_count = it->second; | 
| 35     if (--ref_count != 0) { | 35     if (--ref_count != 0) { | 
| 36       ++it; | 36       ++it; | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 47     ImageController::ImageDecodeResult result) { | 47     ImageController::ImageDecodeResult result) { | 
| 48   if (result == ImageController::ImageDecodeResult::SUCCESS) | 48   if (result == ImageController::ImageDecodeResult::SUCCESS) | 
| 49     locked_images_.push_back(std::make_pair(id, kNumFramesToLock)); | 49     locked_images_.push_back(std::make_pair(id, kNumFramesToLock)); | 
| 50   bool decode_succeeded = | 50   bool decode_succeeded = | 
| 51       result == ImageController::ImageDecodeResult::SUCCESS || | 51       result == ImageController::ImageDecodeResult::SUCCESS || | 
| 52       result == ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED; | 52       result == ImageController::ImageDecodeResult::DECODE_NOT_REQUIRED; | 
| 53   callback.Run(decode_succeeded); | 53   callback.Run(decode_succeeded); | 
| 54 } | 54 } | 
| 55 | 55 | 
| 56 }  // namespace cc | 56 }  // namespace cc | 
| OLD | NEW | 
|---|