1 // Copyright 2017 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_TEST_FAKE_PAINT_IMAGE_GENERATOR_H_ 6 #define CC_TEST_FAKE_PAINT_IMAGE_GENERATOR_H_ 7 8 #include <vector> 9 10 #include "base/containers/flat_map.h" 11 #include "cc/paint/paint_image_generator.h" 12 #include "third_party/skia/include/core/SkYUVAPixmaps.h" 13 14 namespace cc { 15 16 class FakePaintImageGenerator : public PaintImageGenerator { 17 public: 18 // RGB decoding mode constructor. 19 explicit FakePaintImageGenerator( 20 const SkImageInfo& info, 21 std::vector<FrameMetadata> frames = {FrameMetadata()}, 22 bool allocate_discardable_memory = true, 23 std::vector<SkISize> supported_sizes = {}); 24 // YUV decoding mode constructor. 25 explicit FakePaintImageGenerator( 26 const SkImageInfo& info, 27 const SkYUVAPixmapInfo& yuva_pixmap_info, 28 std::vector<FrameMetadata> frames = {FrameMetadata()}, 29 bool allocate_discardable_memory = true, 30 std::vector<SkISize> supported_sizes = {}); 31 FakePaintImageGenerator(const FakePaintImageGenerator&) = delete; 32 ~FakePaintImageGenerator() override; 33 34 FakePaintImageGenerator& operator=(const FakePaintImageGenerator&) = delete; 35 36 // PaintImageGenerator implementation. 37 sk_sp<SkData> GetEncodedData() const override; 38 bool GetPixels(const SkImageInfo& info, 39 void* pixels, 40 size_t row_bytes, 41 size_t frame_index, 42 PaintImage::GeneratorClientId client_id, 43 uint32_t lazy_pixel_ref) override; 44 bool QueryYUVA( 45 const SkYUVAPixmapInfo::SupportedDataTypes& supported_data_types, 46 SkYUVAPixmapInfo* yuva_pixmap_info) const override; 47 bool GetYUVAPlanes(const SkYUVAPixmaps& pixmaps, 48 size_t frame_index, 49 uint32_t lazy_pixel_ref) override; 50 SkISize GetSupportedDecodeSize(const SkISize& requested_size) const override; 51 const ImageHeaderMetadata* GetMetadataForDecodeAcceleration() const override; 52 frames_decoded()53 const base::flat_map<size_t, int>& frames_decoded() const { 54 return frames_decoded_count_; 55 } decode_infos()56 const std::vector<SkImageInfo>& decode_infos() const { 57 CHECK(!is_yuv_); 58 return decode_infos_; 59 } reset_frames_decoded()60 void reset_frames_decoded() { frames_decoded_count_.clear(); } SetExpectFallbackToRGB()61 void SetExpectFallbackToRGB() { expect_fallback_to_rgb_ = true; } SetImageHeaderMetadata(const ImageHeaderMetadata & image_metadata)62 void SetImageHeaderMetadata(const ImageHeaderMetadata& image_metadata) { 63 image_metadata_ = image_metadata; 64 } 65 66 private: 67 std::vector<uint8_t> image_backing_memory_; 68 SkPixmap image_pixmap_; 69 base::flat_map<size_t, int> frames_decoded_count_; 70 std::vector<SkISize> supported_sizes_; 71 std::vector<SkImageInfo> decode_infos_; 72 bool is_yuv_ = false; 73 SkYUVAPixmapInfo yuva_pixmap_info_; 74 // TODO(skbug.com/8564): After Skia supports rendering from software YUV 75 // planes and after Chrome implements it, we should no longer expect RGB 76 // fallback. 77 bool expect_fallback_to_rgb_ = false; 78 ImageHeaderMetadata image_metadata_; 79 }; 80 81 } // namespace cc 82 83 #endif // CC_TEST_FAKE_PAINT_IMAGE_GENERATOR_H_ 84