OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_PLAYBACK_RASTER_SOURCE_H_ | 5 #ifndef CC_PLAYBACK_RASTER_SOURCE_H_ |
6 #define CC_PLAYBACK_RASTER_SOURCE_H_ | 6 #define CC_PLAYBACK_RASTER_SOURCE_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "cc/base/cc_export.h" | 14 #include "cc/base/cc_export.h" |
15 #include "cc/debug/rendering_stats_instrumentation.h" | 15 #include "cc/debug/rendering_stats_instrumentation.h" |
16 #include "cc/playback/recording_source.h" | 16 #include "cc/playback/recording_source.h" |
17 #include "skia/ext/analysis_canvas.h" | 17 #include "skia/ext/analysis_canvas.h" |
18 #include "third_party/skia/include/core/SkPicture.h" | 18 #include "third_party/skia/include/core/SkPicture.h" |
19 | 19 |
20 namespace gfx { | 20 namespace gfx { |
21 class ColorSpace; | 21 class ColorSpace; |
22 } | 22 } |
23 | 23 |
24 namespace cc { | 24 namespace cc { |
25 class DisplayItemList; | 25 class DisplayItemList; |
26 class DrawImage; | 26 class DrawImage; |
27 class ImageDecodeController; | 27 class ImageDecodeCache; |
28 | 28 |
29 class CC_EXPORT RasterSource : public base::RefCountedThreadSafe<RasterSource> { | 29 class CC_EXPORT RasterSource : public base::RefCountedThreadSafe<RasterSource> { |
30 public: | 30 public: |
31 struct CC_EXPORT PlaybackSettings { | 31 struct CC_EXPORT PlaybackSettings { |
32 PlaybackSettings(); | 32 PlaybackSettings(); |
33 | 33 |
34 // If set to true, this indicates that the canvas has already been | 34 // If set to true, this indicates that the canvas has already been |
35 // rasterized into. This means that the canvas cannot be cleared safely. | 35 // rasterized into. This means that the canvas cannot be cleared safely. |
36 bool playback_to_shared_canvas; | 36 bool playback_to_shared_canvas; |
37 | 37 |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 virtual sk_sp<SkPicture> GetFlattenedPicture(); | 121 virtual sk_sp<SkPicture> GetFlattenedPicture(); |
122 virtual size_t GetPictureMemoryUsage() const; | 122 virtual size_t GetPictureMemoryUsage() const; |
123 | 123 |
124 // Return true if LCD anti-aliasing may be used when rastering text. | 124 // Return true if LCD anti-aliasing may be used when rastering text. |
125 virtual bool CanUseLCDText() const; | 125 virtual bool CanUseLCDText() const; |
126 | 126 |
127 scoped_refptr<RasterSource> CreateCloneWithoutLCDText() const; | 127 scoped_refptr<RasterSource> CreateCloneWithoutLCDText() const; |
128 | 128 |
129 // Image decode controller should be set once. Its lifetime has to exceed that | 129 // Image decode controller should be set once. Its lifetime has to exceed that |
130 // of the raster source, since the raster source will access it during raster. | 130 // of the raster source, since the raster source will access it during raster. |
131 void set_image_decode_controller( | 131 void set_image_decode_cache(ImageDecodeCache* image_decode_cache) { |
132 ImageDecodeController* image_decode_controller) { | 132 DCHECK(image_decode_cache); |
133 DCHECK(image_decode_controller); | 133 image_decode_cache_ = image_decode_cache; |
134 image_decode_controller_ = image_decode_controller; | |
135 } | 134 } |
136 | 135 |
137 // Returns the ImageDecodeController, currently only used by | 136 // Returns the ImageDecodeCache, currently only used by |
138 // GpuRasterBufferProvider in order to create its own ImageHijackCanvas. | 137 // GpuRasterBufferProvider in order to create its own ImageHijackCanvas. |
139 // Because of the MultiPictureDraw approach used by GPU raster, it does not | 138 // Because of the MultiPictureDraw approach used by GPU raster, it does not |
140 // integrate well with the use of the ImageHijackCanvas internal to this | 139 // integrate well with the use of the ImageHijackCanvas internal to this |
141 // class. See gpu_raster_buffer_provider.cc for more information. | 140 // class. See gpu_raster_buffer_provider.cc for more information. |
142 // TODO(crbug.com/628394): Redesign this to avoid exposing | 141 // TODO(crbug.com/628394): Redesign this to avoid exposing |
143 // ImageDecodeController from the raster source. | 142 // ImageDecodeCache from the raster source. |
144 ImageDecodeController* image_decode_controller() const { | 143 ImageDecodeCache* image_decode_cache() const { return image_decode_cache_; } |
145 return image_decode_controller_; | |
146 } | |
147 | 144 |
148 protected: | 145 protected: |
149 friend class base::RefCountedThreadSafe<RasterSource>; | 146 friend class base::RefCountedThreadSafe<RasterSource>; |
150 | 147 |
151 RasterSource(const RecordingSource* other, bool can_use_lcd_text); | 148 RasterSource(const RecordingSource* other, bool can_use_lcd_text); |
152 RasterSource(const RasterSource* other, bool can_use_lcd_text); | 149 RasterSource(const RasterSource* other, bool can_use_lcd_text); |
153 virtual ~RasterSource(); | 150 virtual ~RasterSource(); |
154 | 151 |
155 // These members are const as this raster source may be in use on another | 152 // These members are const as this raster source may be in use on another |
156 // thread and so should not be touched after construction. | 153 // thread and so should not be touched after construction. |
157 const scoped_refptr<DisplayItemList> display_list_; | 154 const scoped_refptr<DisplayItemList> display_list_; |
158 const size_t painter_reported_memory_usage_; | 155 const size_t painter_reported_memory_usage_; |
159 const SkColor background_color_; | 156 const SkColor background_color_; |
160 const bool requires_clear_; | 157 const bool requires_clear_; |
161 const bool can_use_lcd_text_; | 158 const bool can_use_lcd_text_; |
162 const bool is_solid_color_; | 159 const bool is_solid_color_; |
163 const SkColor solid_color_; | 160 const SkColor solid_color_; |
164 const gfx::Rect recorded_viewport_; | 161 const gfx::Rect recorded_viewport_; |
165 const gfx::Size size_; | 162 const gfx::Size size_; |
166 const bool clear_canvas_with_debug_color_; | 163 const bool clear_canvas_with_debug_color_; |
167 const int slow_down_raster_scale_factor_for_debug_; | 164 const int slow_down_raster_scale_factor_for_debug_; |
168 // TODO(enne/vmiura): this has a read/write race between raster and compositor | 165 // TODO(enne/vmiura): this has a read/write race between raster and compositor |
169 // threads with multi-threaded Ganesh. Make this const or remove it. | 166 // threads with multi-threaded Ganesh. Make this const or remove it. |
170 bool should_attempt_to_use_distance_field_text_; | 167 bool should_attempt_to_use_distance_field_text_; |
171 | 168 |
172 // In practice, this is only set once before raster begins, so it's ok with | 169 // In practice, this is only set once before raster begins, so it's ok with |
173 // respect to threading. | 170 // respect to threading. |
174 ImageDecodeController* image_decode_controller_; | 171 ImageDecodeCache* image_decode_cache_; |
175 | 172 |
176 private: | 173 private: |
177 void RasterCommon(SkCanvas* canvas, SkPicture::AbortCallback* callback) const; | 174 void RasterCommon(SkCanvas* canvas, SkPicture::AbortCallback* callback) const; |
178 | 175 |
179 void PrepareForPlaybackToCanvas(SkCanvas* canvas) const; | 176 void PrepareForPlaybackToCanvas(SkCanvas* canvas) const; |
180 | 177 |
181 DISALLOW_COPY_AND_ASSIGN(RasterSource); | 178 DISALLOW_COPY_AND_ASSIGN(RasterSource); |
182 }; | 179 }; |
183 | 180 |
184 } // namespace cc | 181 } // namespace cc |
185 | 182 |
186 #endif // CC_PLAYBACK_RASTER_SOURCE_H_ | 183 #endif // CC_PLAYBACK_RASTER_SOURCE_H_ |
OLD | NEW |