| 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 28 matching lines...) Expand all Loading... |
| 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_decode_ == other.can_use_original_decode_ && |
| 49 target_color_space_ == other.target_color_space_ && |
| 49 (can_use_original_decode_ || | 50 (can_use_original_decode_ || |
| 50 (src_rect_ == other.src_rect_ && | 51 (src_rect_ == other.src_rect_ && |
| 51 target_size_ == other.target_size_ && | 52 target_size_ == other.target_size_ && |
| 52 filter_quality_ == other.filter_quality_)); | 53 filter_quality_ == other.filter_quality_)); |
| 53 } | 54 } |
| 54 | 55 |
| 55 bool operator!=(const ImageDecodeCacheKey& other) const { | 56 bool operator!=(const ImageDecodeCacheKey& other) const { |
| 56 return !(*this == other); | 57 return !(*this == other); |
| 57 } | 58 } |
| 58 | 59 |
| 59 uint32_t image_id() const { return image_id_; } | 60 uint32_t image_id() const { return image_id_; } |
| 60 SkFilterQuality filter_quality() const { return filter_quality_; } | 61 SkFilterQuality filter_quality() const { return filter_quality_; } |
| 61 gfx::Rect src_rect() const { return src_rect_; } | 62 gfx::Rect src_rect() const { return src_rect_; } |
| 62 gfx::Size target_size() const { return target_size_; } | 63 gfx::Size target_size() const { return target_size_; } |
| 64 const gfx::ColorSpace& target_color_space() const { |
| 65 return target_color_space_; |
| 66 } |
| 63 | 67 |
| 64 bool can_use_original_decode() const { return can_use_original_decode_; } | 68 bool can_use_original_decode() const { return can_use_original_decode_; } |
| 65 bool should_use_subrect() const { return should_use_subrect_; } | 69 bool should_use_subrect() const { return should_use_subrect_; } |
| 66 size_t get_hash() const { return hash_; } | 70 size_t get_hash() const { return hash_; } |
| 67 | 71 |
| 68 // Helper to figure out how much memory the locked image represented by this | 72 // Helper to figure out how much memory the locked image represented by this |
| 69 // key would take. | 73 // key would take. |
| 70 size_t locked_bytes() const { | 74 size_t locked_bytes() const { |
| 71 // TODO(vmpstr): Handle formats other than RGBA. | 75 // TODO(vmpstr): Handle formats other than RGBA. |
| 72 base::CheckedNumeric<size_t> result = 4; | 76 base::CheckedNumeric<size_t> result = 4; |
| 73 result *= target_size_.width(); | 77 result *= target_size_.width(); |
| 74 result *= target_size_.height(); | 78 result *= target_size_.height(); |
| 75 return result.ValueOrDefault(std::numeric_limits<size_t>::max()); | 79 return result.ValueOrDefault(std::numeric_limits<size_t>::max()); |
| 76 } | 80 } |
| 77 | 81 |
| 78 std::string ToString() const; | 82 std::string ToString() const; |
| 79 | 83 |
| 80 private: | 84 private: |
| 81 ImageDecodeCacheKey(uint32_t image_id, | 85 ImageDecodeCacheKey(uint32_t image_id, |
| 82 const gfx::Rect& src_rect, | 86 const gfx::Rect& src_rect, |
| 83 const gfx::Size& size, | 87 const gfx::Size& size, |
| 88 const gfx::ColorSpace& target_color_space, |
| 84 SkFilterQuality filter_quality, | 89 SkFilterQuality filter_quality, |
| 85 bool can_use_original_decode, | 90 bool can_use_original_decode, |
| 86 bool should_use_subrect); | 91 bool should_use_subrect); |
| 87 | 92 |
| 88 uint32_t image_id_; | 93 uint32_t image_id_; |
| 89 gfx::Rect src_rect_; | 94 gfx::Rect src_rect_; |
| 90 gfx::Size target_size_; | 95 gfx::Size target_size_; |
| 96 gfx::ColorSpace target_color_space_; |
| 91 SkFilterQuality filter_quality_; | 97 SkFilterQuality filter_quality_; |
| 92 bool can_use_original_decode_; | 98 bool can_use_original_decode_; |
| 93 bool should_use_subrect_; | 99 bool should_use_subrect_; |
| 94 size_t hash_; | 100 size_t hash_; |
| 95 }; | 101 }; |
| 96 | 102 |
| 97 // Hash function for the above ImageDecodeCacheKey. | 103 // Hash function for the above ImageDecodeCacheKey. |
| 98 struct ImageDecodeCacheKeyHash { | 104 struct ImageDecodeCacheKeyHash { |
| 99 size_t operator()(const ImageDecodeCacheKey& key) const { | 105 size_t operator()(const ImageDecodeCacheKey& key) const { |
| 100 return key.get_hash(); | 106 return key.get_hash(); |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 ResourceFormat format_; | 315 ResourceFormat format_; |
| 310 size_t max_items_in_cache_; | 316 size_t max_items_in_cache_; |
| 311 | 317 |
| 312 // Used to uniquely identify DecodedImages for memory traces. | 318 // Used to uniquely identify DecodedImages for memory traces. |
| 313 base::AtomicSequenceNumber next_tracing_id_; | 319 base::AtomicSequenceNumber next_tracing_id_; |
| 314 }; | 320 }; |
| 315 | 321 |
| 316 } // namespace cc | 322 } // namespace cc |
| 317 | 323 |
| 318 #endif // CC_TILES_SOFTWARE_IMAGE_DECODE_CACHE_H_ | 324 #endif // CC_TILES_SOFTWARE_IMAGE_DECODE_CACHE_H_ |
| OLD | NEW |