OLD | NEW |
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_GPU_IMAGE_DECODE_CACHE_H_ | 5 #ifndef CC_TILES_GPU_IMAGE_DECODE_CACHE_H_ |
6 #define CC_TILES_GPU_IMAGE_DECODE_CACHE_H_ | 6 #define CC_TILES_GPU_IMAGE_DECODE_CACHE_H_ |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 #include <unordered_map> | 9 #include <unordered_map> |
10 #include <vector> | 10 #include <vector> |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 int ref_reached_zero_count = 0; | 223 int ref_reached_zero_count = 0; |
224 }; | 224 }; |
225 | 225 |
226 void ReportUsageStats() const; | 226 void ReportUsageStats() const; |
227 | 227 |
228 // May be null if image not yet uploaded / prepared. | 228 // May be null if image not yet uploaded / prepared. |
229 sk_sp<SkImage> image_; | 229 sk_sp<SkImage> image_; |
230 UsageStats usage_stats_; | 230 UsageStats usage_stats_; |
231 }; | 231 }; |
232 | 232 |
233 struct ImageData : public base::RefCounted<ImageData> { | 233 struct ImageData : public base::RefCountedThreadSafe<ImageData> { |
234 ImageData(DecodedDataMode mode, | 234 ImageData(DecodedDataMode mode, |
235 size_t size, | 235 size_t size, |
236 const gfx::ColorSpace& target_color_space, | 236 const gfx::ColorSpace& target_color_space, |
237 const SkImage::DeferredTextureImageUsageParams& upload_params); | 237 const SkImage::DeferredTextureImageUsageParams& upload_params); |
238 | 238 |
239 const DecodedDataMode mode; | 239 const DecodedDataMode mode; |
240 const size_t size; | 240 const size_t size; |
241 gfx::ColorSpace target_color_space; | 241 gfx::ColorSpace target_color_space; |
242 bool is_at_raster = false; | 242 bool is_at_raster = false; |
243 SkImage::DeferredTextureImageUsageParams upload_params; | 243 SkImage::DeferredTextureImageUsageParams upload_params; |
244 | 244 |
245 // If true, this image is no longer in our |persistent_cache_| and will be | 245 // If true, this image is no longer in our |persistent_cache_| and will be |
246 // deleted as soon as its ref count reaches zero. | 246 // deleted as soon as its ref count reaches zero. |
247 bool is_orphaned = false; | 247 bool is_orphaned = false; |
248 | 248 |
249 DecodedImageData decode; | 249 DecodedImageData decode; |
250 UploadedImageData upload; | 250 UploadedImageData upload; |
251 | 251 |
252 private: | 252 private: |
253 friend class base::RefCounted<ImageData>; | 253 friend class base::RefCountedThreadSafe<ImageData>; |
254 ~ImageData(); | 254 ~ImageData(); |
255 }; | 255 }; |
256 | 256 |
257 // A ref-count and ImageData, used to associate the ImageData with a specific | 257 // A ref-count and ImageData, used to associate the ImageData with a specific |
258 // DrawImage in the |in_use_cache_|. | 258 // DrawImage in the |in_use_cache_|. |
259 struct InUseCacheEntry { | 259 struct InUseCacheEntry { |
260 explicit InUseCacheEntry(scoped_refptr<ImageData> image_data); | 260 explicit InUseCacheEntry(scoped_refptr<ImageData> image_data); |
261 InUseCacheEntry(const InUseCacheEntry& other); | 261 InUseCacheEntry(const InUseCacheEntry& other); |
262 InUseCacheEntry(InUseCacheEntry&& other); | 262 InUseCacheEntry(InUseCacheEntry&& other); |
263 ~InUseCacheEntry(); | 263 ~InUseCacheEntry(); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 | 368 |
369 // We can't release GPU backed SkImages without holding the context lock, | 369 // We can't release GPU backed SkImages without holding the context lock, |
370 // so we add them to this list and defer deletion until the next time the lock | 370 // so we add them to this list and defer deletion until the next time the lock |
371 // is held. | 371 // is held. |
372 std::vector<sk_sp<SkImage>> images_pending_deletion_; | 372 std::vector<sk_sp<SkImage>> images_pending_deletion_; |
373 }; | 373 }; |
374 | 374 |
375 } // namespace cc | 375 } // namespace cc |
376 | 376 |
377 #endif // CC_TILES_GPU_IMAGE_DECODE_CACHE_H_ | 377 #endif // CC_TILES_GPU_IMAGE_DECODE_CACHE_H_ |
OLD | NEW |