blob: d2a35ae866c22a1fab3fa89a20497c1e972e4e76 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <cc/test/fake_paint_image_generator.h>
namespace cc {
FakePaintImageGenerator::FakePaintImageGenerator(
const SkImageInfo& info,
std::vector<FrameMetadata> frames,
bool allocate_discardable_memory,
std::vector<SkISize> supported_sizes)
: PaintImageGenerator(info, std::move(frames)),
image_backing_memory_(
allocate_discardable_memory ? info.computeMinByteSize() : 0,
0),
image_pixmap_(info, image_backing_memory_.data(), info.minRowBytes()),
supported_sizes_(std::move(supported_sizes)) {}
FakePaintImageGenerator::~FakePaintImageGenerator() = default;
sk_sp<SkData> FakePaintImageGenerator::GetEncodedData() const {
return nullptr;
}
bool FakePaintImageGenerator::GetPixels(const SkImageInfo& info,
void* pixels,
size_t row_bytes,
size_t frame_index,
PaintImage::GeneratorClientId client_id,
uint32_t lazy_pixel_ref) {
if (image_backing_memory_.empty())
return false;
if (frames_decoded_count_.find(frame_index) == frames_decoded_count_.end())
frames_decoded_count_[frame_index] = 1;
else
frames_decoded_count_[frame_index]++;
SkPixmap dst(info, pixels, row_bytes);
CHECK(image_pixmap_.scalePixels(dst, kMedium_SkFilterQuality));
decode_infos_.push_back(info);
return true;
}
bool FakePaintImageGenerator::QueryYUVA8(SkYUVASizeInfo* info,
SkYUVAIndex indices[],
SkYUVColorSpace* color_space) const {
return false;
}
bool FakePaintImageGenerator::GetYUVA8Planes(const SkYUVASizeInfo& info,
const SkYUVAIndex indices[],
void* planes[4],
size_t frame_index,
uint32_t lazy_pixel_ref) {
NOTREACHED();
return false;
}
SkISize FakePaintImageGenerator::GetSupportedDecodeSize(
const SkISize& requested_size) const {
for (auto& size : supported_sizes_) {
if (size.width() >= requested_size.width() &&
size.height() >= requested_size.height()) {
return size;
}
}
return PaintImageGenerator::GetSupportedDecodeSize(requested_size);
}
} // namespace cc