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

Side by Side Diff: cc/tiles/image_controller.h

Issue 2537683002: cc: Add image decode queue functionality to image manager. (Closed)
Patch Set: image-queue: update Created 4 years 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 unified diff | Download patch
OLDNEW
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 #ifndef CC_TILES_IMAGE_CONTROLLER_H_ 5 #ifndef CC_TILES_IMAGE_CONTROLLER_H_
6 #define CC_TILES_IMAGE_CONTROLLER_H_ 6 #define CC_TILES_IMAGE_CONTROLLER_H_
7 7
8 #include <set>
8 #include <vector> 9 #include <vector>
9 10
10 #include "base/macros.h" 11 #include "base/macros.h"
11 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/memory/weak_ptr.h"
14 #include "base/threading/simple_thread.h"
12 #include "cc/base/cc_export.h" 15 #include "cc/base/cc_export.h"
16 #include "cc/base/unique_notifier.h"
13 #include "cc/playback/draw_image.h" 17 #include "cc/playback/draw_image.h"
14 #include "cc/raster/tile_task.h" 18 #include "cc/raster/tile_task.h"
15 #include "cc/tiles/image_decode_cache.h" 19 #include "cc/tiles/image_decode_cache.h"
16 20
17 namespace cc { 21 namespace cc {
18 22
19 class CC_EXPORT ImageController { 23 class CC_EXPORT ImageController {
20 public: 24 public:
21 ImageController(); 25 using ImageDecodeRequestId = uint64_t;
26 using ImageDecodedCallback = base::Callback<void(ImageDecodeRequestId)>;
27 explicit ImageController(base::SequencedTaskRunner* task_runner);
22 ~ImageController(); 28 ~ImageController();
23 29
24 void SetImageDecodeCache(ImageDecodeCache* cache); 30 void SetImageDecodeCache(ImageDecodeCache* cache);
25 void GetTasksForImagesAndRef( 31 void GetTasksForImagesAndRef(
26 std::vector<DrawImage>* images, 32 std::vector<DrawImage>* images,
27 std::vector<scoped_refptr<TileTask>>* tasks, 33 std::vector<scoped_refptr<TileTask>>* tasks,
28 const ImageDecodeCache::TracingInfo& tracing_info); 34 const ImageDecodeCache::TracingInfo& tracing_info);
29 void UnrefImages(const std::vector<DrawImage>& images); 35 void UnrefImages(const std::vector<DrawImage>& images);
30 void ReduceMemoryUsage(); 36 void ReduceMemoryUsage();
31 std::vector<scoped_refptr<TileTask>> SetPredecodeImages( 37 std::vector<scoped_refptr<TileTask>> SetPredecodeImages(
32 std::vector<DrawImage> predecode_images, 38 std::vector<DrawImage> predecode_images,
33 const ImageDecodeCache::TracingInfo& tracing_info); 39 const ImageDecodeCache::TracingInfo& tracing_info);
34 40
41 ImageDecodeRequestId QueueImageDecode(sk_sp<const SkImage> image,
42 const ImageDecodedCallback& callback);
43 void NotifyFrameFinished();
44
45 // Called from the worker thread.
46 void ProcessImageDecodes();
47
35 private: 48 private:
49 struct ImageDecodeRequest {
50 ImageDecodeRequest();
51 ImageDecodeRequest(ImageDecodeRequestId id,
52 const DrawImage& draw_image,
53 const ImageDecodedCallback& callback,
54 scoped_refptr<TileTask> task,
55 bool need_unref);
56 ImageDecodeRequest(ImageDecodeRequest&& other);
57 ImageDecodeRequest(const ImageDecodeRequest& other);
58 ~ImageDecodeRequest();
59
60 ImageDecodeRequest& operator=(ImageDecodeRequest&& other);
61 ImageDecodeRequest& operator=(const ImageDecodeRequest& other);
62
63 ImageDecodeRequestId id;
64 DrawImage draw_image;
65 ImageDecodedCallback callback;
66 scoped_refptr<TileTask> task;
67 bool need_unref;
68 };
69
70 void StartWorkerThread();
71 void StopWorkerThread();
72
73 void ImageDecodeCompleted(ImageDecodeRequestId id);
74
36 ImageDecodeCache* cache_ = nullptr; 75 ImageDecodeCache* cache_ = nullptr;
37 std::vector<DrawImage> predecode_locked_images_; 76 std::vector<DrawImage> predecode_locked_images_;
38 77
39 // Debugging information for crbug.com/650234. 78 // Debugging information for crbug.com/650234.
40 size_t num_times_cache_was_set_ = 0; 79 size_t num_times_cache_was_set_ = 0;
41 80
81 static ImageDecodeRequestId s_next_image_decode_queue_id_;
82 std::map<ImageDecodeRequestId, ImageDecodeRequest> image_decode_queue_;
83 std::map<ImageDecodeRequestId, ImageDecodeRequest>
84 requests_needing_completion_;
85 std::vector<std::pair<DrawImage, int>> requested_locked_images_;
86
87 base::SequencedTaskRunner* task_runner_ = nullptr;
88 base::Lock lock_;
89 base::ConditionVariable work_available_cv_;
90 std::unique_ptr<base::SimpleThread> worker_thread_;
91
92 bool shutdown_ = true;
93
94 base::WeakPtrFactory<ImageController> weak_ptr_factory_;
95
42 DISALLOW_COPY_AND_ASSIGN(ImageController); 96 DISALLOW_COPY_AND_ASSIGN(ImageController);
43 }; 97 };
44 98
45 } // namespace cc 99 } // namespace cc
46 100
47 #endif // CC_TILES_IMAGE_CONTROLLER_H_ 101 #endif // CC_TILES_IMAGE_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698