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_SOFTWARE_IMAGE_DECODE_CACHE_H_ | 5 #ifndef CC_TILES_SOFTWARE_IMAGE_DECODE_CACHE_H_ |
6 #define CC_TILES_SOFTWARE_IMAGE_DECODE_CACHE_H_ | 6 #define CC_TILES_SOFTWARE_IMAGE_DECODE_CACHE_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 27 matching lines...) Expand all Loading... |
38 public: | 38 public: |
39 static ImageDecodeCacheKey FromDrawImage(const DrawImage& image); | 39 static ImageDecodeCacheKey FromDrawImage(const DrawImage& image); |
40 | 40 |
41 ImageDecodeCacheKey(const ImageDecodeCacheKey& other); | 41 ImageDecodeCacheKey(const ImageDecodeCacheKey& other); |
42 | 42 |
43 bool operator==(const ImageDecodeCacheKey& other) const { | 43 bool operator==(const ImageDecodeCacheKey& other) const { |
44 // The image_id always has to be the same. However, after that all original | 44 // The image_id always has to be the same. However, after that all original |
45 // decodes are the same, so if we can use the original decode, return true. | 45 // decodes are the same, so if we can use the original decode, return true. |
46 // If not, then we have to compare every field. | 46 // If not, then we have to compare every field. |
47 return image_id_ == other.image_id_ && | 47 return image_id_ == other.image_id_ && |
48 can_use_original_decode_ == other.can_use_original_decode_ && | 48 can_use_original_size_decode_ == |
49 (can_use_original_decode_ || | 49 other.can_use_original_size_decode_ && |
| 50 target_color_space_ == other.target_color_space_ && |
| 51 (can_use_original_size_decode_ || |
50 (src_rect_ == other.src_rect_ && | 52 (src_rect_ == other.src_rect_ && |
51 target_size_ == other.target_size_ && | 53 target_size_ == other.target_size_ && |
52 filter_quality_ == other.filter_quality_)); | 54 filter_quality_ == other.filter_quality_)); |
53 } | 55 } |
54 | 56 |
55 bool operator!=(const ImageDecodeCacheKey& other) const { | 57 bool operator!=(const ImageDecodeCacheKey& other) const { |
56 return !(*this == other); | 58 return !(*this == other); |
57 } | 59 } |
58 | 60 |
59 uint32_t image_id() const { return image_id_; } | 61 uint32_t image_id() const { return image_id_; } |
60 SkFilterQuality filter_quality() const { return filter_quality_; } | 62 SkFilterQuality filter_quality() const { return filter_quality_; } |
61 gfx::Rect src_rect() const { return src_rect_; } | 63 gfx::Rect src_rect() const { return src_rect_; } |
62 gfx::Size target_size() const { return target_size_; } | 64 gfx::Size target_size() const { return target_size_; } |
| 65 const gfx::ColorSpace& target_color_space() const { |
| 66 return target_color_space_; |
| 67 } |
63 | 68 |
64 bool can_use_original_decode() const { return can_use_original_decode_; } | 69 bool can_use_original_size_decode() const { |
| 70 return can_use_original_size_decode_; |
| 71 } |
65 bool should_use_subrect() const { return should_use_subrect_; } | 72 bool should_use_subrect() const { return should_use_subrect_; } |
66 size_t get_hash() const { return hash_; } | 73 size_t get_hash() const { return hash_; } |
67 | 74 |
68 // Helper to figure out how much memory the locked image represented by this | 75 // Helper to figure out how much memory the locked image represented by this |
69 // key would take. | 76 // key would take. |
70 size_t locked_bytes() const { | 77 size_t locked_bytes() const { |
71 // TODO(vmpstr): Handle formats other than RGBA. | 78 // TODO(vmpstr): Handle formats other than RGBA. |
72 base::CheckedNumeric<size_t> result = 4; | 79 base::CheckedNumeric<size_t> result = 4; |
73 result *= target_size_.width(); | 80 result *= target_size_.width(); |
74 result *= target_size_.height(); | 81 result *= target_size_.height(); |
75 return result.ValueOrDefault(std::numeric_limits<size_t>::max()); | 82 return result.ValueOrDefault(std::numeric_limits<size_t>::max()); |
76 } | 83 } |
77 | 84 |
78 std::string ToString() const; | 85 std::string ToString() const; |
79 | 86 |
80 private: | 87 private: |
81 ImageDecodeCacheKey(uint32_t image_id, | 88 ImageDecodeCacheKey(uint32_t image_id, |
82 const gfx::Rect& src_rect, | 89 const gfx::Rect& src_rect, |
83 const gfx::Size& size, | 90 const gfx::Size& size, |
| 91 const gfx::ColorSpace& target_color_space, |
84 SkFilterQuality filter_quality, | 92 SkFilterQuality filter_quality, |
85 bool can_use_original_decode, | 93 bool can_use_original_size_decode, |
86 bool should_use_subrect); | 94 bool should_use_subrect); |
87 | 95 |
88 uint32_t image_id_; | 96 uint32_t image_id_; |
89 gfx::Rect src_rect_; | 97 gfx::Rect src_rect_; |
90 gfx::Size target_size_; | 98 gfx::Size target_size_; |
| 99 gfx::ColorSpace target_color_space_; |
91 SkFilterQuality filter_quality_; | 100 SkFilterQuality filter_quality_; |
92 bool can_use_original_decode_; | 101 bool can_use_original_size_decode_; |
93 bool should_use_subrect_; | 102 bool should_use_subrect_; |
94 size_t hash_; | 103 size_t hash_; |
95 }; | 104 }; |
96 | 105 |
97 // Hash function for the above ImageDecodeCacheKey. | 106 // Hash function for the above ImageDecodeCacheKey. |
98 struct ImageDecodeCacheKeyHash { | 107 struct ImageDecodeCacheKeyHash { |
99 size_t operator()(const ImageDecodeCacheKey& key) const { | 108 size_t operator()(const ImageDecodeCacheKey& key) const { |
100 return key.get_hash(); | 109 return key.get_hash(); |
101 } | 110 } |
102 }; | 111 }; |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 ResourceFormat format_; | 321 ResourceFormat format_; |
313 size_t max_items_in_cache_; | 322 size_t max_items_in_cache_; |
314 | 323 |
315 // Used to uniquely identify DecodedImages for memory traces. | 324 // Used to uniquely identify DecodedImages for memory traces. |
316 base::AtomicSequenceNumber next_tracing_id_; | 325 base::AtomicSequenceNumber next_tracing_id_; |
317 }; | 326 }; |
318 | 327 |
319 } // namespace cc | 328 } // namespace cc |
320 | 329 |
321 #endif // CC_TILES_SOFTWARE_IMAGE_DECODE_CACHE_H_ | 330 #endif // CC_TILES_SOFTWARE_IMAGE_DECODE_CACHE_H_ |
OLD | NEW |