| Index: cc/tiles/image_controller.h
|
| diff --git a/cc/tiles/image_controller.h b/cc/tiles/image_controller.h
|
| index 983aa14985839aae402449c051b1c9f7fdb8be23..3f0bf75875646385255b15391493593be9b5bde5 100644
|
| --- a/cc/tiles/image_controller.h
|
| +++ b/cc/tiles/image_controller.h
|
| @@ -5,11 +5,15 @@
|
| #ifndef CC_TILES_IMAGE_CONTROLLER_H_
|
| #define CC_TILES_IMAGE_CONTROLLER_H_
|
|
|
| +#include <set>
|
| #include <vector>
|
|
|
| #include "base/macros.h"
|
| #include "base/memory/ref_counted.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "base/threading/simple_thread.h"
|
| #include "cc/base/cc_export.h"
|
| +#include "cc/base/unique_notifier.h"
|
| #include "cc/playback/draw_image.h"
|
| #include "cc/raster/tile_task.h"
|
| #include "cc/tiles/image_decode_cache.h"
|
| @@ -18,7 +22,9 @@ namespace cc {
|
|
|
| class CC_EXPORT ImageController {
|
| public:
|
| - ImageController();
|
| + using ImageDecodeRequestId = uint64_t;
|
| + using ImageDecodedCallback = base::Callback<void(ImageDecodeRequestId)>;
|
| + explicit ImageController(base::SequencedTaskRunner* task_runner);
|
| ~ImageController();
|
|
|
| void SetImageDecodeCache(ImageDecodeCache* cache);
|
| @@ -32,13 +38,61 @@ class CC_EXPORT ImageController {
|
| std::vector<DrawImage> predecode_images,
|
| const ImageDecodeCache::TracingInfo& tracing_info);
|
|
|
| + ImageDecodeRequestId QueueImageDecode(sk_sp<const SkImage> image,
|
| + const ImageDecodedCallback& callback);
|
| + void NotifyFrameFinished();
|
| +
|
| + // Called from the worker thread.
|
| + void ProcessImageDecodes();
|
| +
|
| private:
|
| + struct ImageDecodeRequest {
|
| + ImageDecodeRequest();
|
| + ImageDecodeRequest(ImageDecodeRequestId id,
|
| + const DrawImage& draw_image,
|
| + const ImageDecodedCallback& callback,
|
| + scoped_refptr<TileTask> task,
|
| + bool need_unref);
|
| + ImageDecodeRequest(ImageDecodeRequest&& other);
|
| + ImageDecodeRequest(const ImageDecodeRequest& other);
|
| + ~ImageDecodeRequest();
|
| +
|
| + ImageDecodeRequest& operator=(ImageDecodeRequest&& other);
|
| + ImageDecodeRequest& operator=(const ImageDecodeRequest& other);
|
| +
|
| + ImageDecodeRequestId id;
|
| + DrawImage draw_image;
|
| + ImageDecodedCallback callback;
|
| + scoped_refptr<TileTask> task;
|
| + bool need_unref;
|
| + };
|
| +
|
| + void StartWorkerThread();
|
| + void StopWorkerThread();
|
| +
|
| + void ImageDecodeCompleted(ImageDecodeRequestId id);
|
| +
|
| ImageDecodeCache* cache_ = nullptr;
|
| std::vector<DrawImage> predecode_locked_images_;
|
|
|
| // Debugging information for crbug.com/650234.
|
| size_t num_times_cache_was_set_ = 0;
|
|
|
| + static ImageDecodeRequestId s_next_image_decode_queue_id_;
|
| + std::map<ImageDecodeRequestId, ImageDecodeRequest> image_decode_queue_;
|
| + std::map<ImageDecodeRequestId, ImageDecodeRequest>
|
| + requests_needing_completion_;
|
| + std::vector<std::pair<DrawImage, int>> requested_locked_images_;
|
| +
|
| + base::SequencedTaskRunner* task_runner_ = nullptr;
|
| + base::Lock lock_;
|
| + base::ConditionVariable work_available_cv_;
|
| + std::unique_ptr<base::SimpleThread> worker_thread_;
|
| +
|
| + bool shutdown_ = true;
|
| +
|
| + base::WeakPtrFactory<ImageController> weak_ptr_factory_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ImageController);
|
| };
|
|
|
|
|