Chromium Code Reviews| Index: cc/tiles/image_controller.h |
| diff --git a/cc/tiles/image_controller.h b/cc/tiles/image_controller.h |
| index d64282f8e9040c09d0deee671c90e529fa5cb3b8..8a53edc89bee589750f08fa9a847b831ba5c32e0 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,11 @@ namespace cc { |
| class CC_EXPORT ImageController { |
| public: |
| - ImageController(); |
| + using ImageDecodeRequestId = uint64_t; |
| + using ImageDecodedCallback = base::Callback<void(ImageDecodeRequestId)>; |
| + explicit ImageController( |
| + base::SequencedTaskRunner* origin_task_runner, |
| + scoped_refptr<base::SequencedTaskRunner> worker_task_runner); |
| ~ImageController(); |
| void SetImageDecodeCache(ImageDecodeCache* cache); |
| @@ -32,10 +40,58 @@ 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(); |
| + |
| 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 ResumeWorkerTasks(); |
| + void StopWorkerTasks(); |
| + |
| + // Called from the worker thread. |
| + void ProcessNextImageDecodeOnWorkerThread(); |
| + |
| + void ImageDecodeCompleted(ImageDecodeRequestId id); |
| + |
| ImageDecodeCache* cache_ = nullptr; |
| std::vector<DrawImage> predecode_locked_images_; |
| + 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* origin_task_runner_ = nullptr; |
| + base::Lock lock_; |
|
ericrk
2017/01/04 07:48:31
nit: can you indicate which variables can be acces
vmpstr
2017/01/06 01:19:03
Done.
|
| + |
| + scoped_refptr<base::SequencedTaskRunner> worker_task_runner_; |
| + |
| + bool abort_tasks_ = false; |
| + |
| + base::WeakPtrFactory<ImageController> weak_ptr_factory_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(ImageController); |
| }; |