| Index: cc/tiles/decoded_image_tracker.cc
|
| diff --git a/cc/tiles/decoded_image_tracker.cc b/cc/tiles/decoded_image_tracker.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cdfa39bb28e8bd30bf221151a58c96b15ee38be7
|
| --- /dev/null
|
| +++ b/cc/tiles/decoded_image_tracker.cc
|
| @@ -0,0 +1,50 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "cc/tiles/decoded_image_tracker.h"
|
| +
|
| +namespace cc {
|
| +namespace {
|
| +const int kNumFramesToLock = 2;
|
| +} // namespace
|
| +
|
| +DecodedImageTracker::DecodedImageTracker() = default;
|
| +DecodedImageTracker::~DecodedImageTracker() {
|
| + for (auto& pair : locked_images_)
|
| + image_controller_->UnlockImageDecode(pair.first);
|
| +}
|
| +
|
| +void DecodedImageTracker::QueueImageDecode(sk_sp<const SkImage> image,
|
| + const base::Closure& callback) {
|
| + DCHECK(image_controller_);
|
| + // Queue the decode in the image controller, but switch out the callback for
|
| + // our own.
|
| + image_controller_->QueueImageDecode(
|
| + std::move(image), base::Bind(&DecodedImageTracker::ImageDecodeFinished,
|
| + base::Unretained(this), callback));
|
| +}
|
| +
|
| +void DecodedImageTracker::NotifyFrameFinished() {
|
| + // Go through the images and if the frame ref count goes to 0, unlock the
|
| + // image in the controller.
|
| + for (auto it = locked_images_.begin(); it != locked_images_.end();) {
|
| + auto id = it->first;
|
| + int& ref_count = it->second;
|
| + if (--ref_count != 0) {
|
| + ++it;
|
| + continue;
|
| + }
|
| + image_controller_->UnlockImageDecode(id);
|
| + it = locked_images_.erase(it);
|
| + }
|
| +}
|
| +
|
| +void DecodedImageTracker::ImageDecodeFinished(
|
| + const base::Closure& callback,
|
| + ImageController::ImageDecodeRequestId id) {
|
| + locked_images_.push_back(std::make_pair(id, kNumFramesToLock));
|
| + callback.Run();
|
| +}
|
| +
|
| +} // namespace cc
|
|
|