blob: 0376f6a2cd72c9b7118e1cf5b5e1f3e0216bbd34 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_LIB_UI_PAINTING_IMAGE_DECODER_NO_GL_UNITTESTS_H_
#define FLUTTER_LIB_UI_PAINTING_IMAGE_DECODER_NO_GL_UNITTESTS_H_
#include <stdint.h>
#include "flutter/impeller/core/allocator.h"
#include "flutter/impeller/core/device_buffer.h"
#include "flutter/impeller/core/formats.h"
#include "flutter/impeller/geometry/size.h"
#include "flutter/lib/ui/painting/image_decoder.h"
#include "flutter/lib/ui/painting/image_decoder_impeller.h"
#include "flutter/testing/testing.h"
namespace impeller {
class TestImpellerTexture : public Texture {
public:
explicit TestImpellerTexture(TextureDescriptor desc) : Texture(desc) {}
void SetLabel(std::string_view label) override {}
bool IsValid() const override { return true; }
ISize GetSize() const { return GetTextureDescriptor().size; }
bool OnSetContents(const uint8_t* contents, size_t length, size_t slice) {
return true;
}
bool OnSetContents(std::shared_ptr<const fml::Mapping> mapping,
size_t slice) {
return true;
}
};
class TestImpellerDeviceBuffer : public DeviceBuffer {
public:
explicit TestImpellerDeviceBuffer(DeviceBufferDescriptor desc)
: DeviceBuffer(desc) {
bytes_ = static_cast<uint8_t*>(malloc(desc.size));
}
~TestImpellerDeviceBuffer() { free(bytes_); }
private:
std::shared_ptr<Texture> AsTexture(Allocator& allocator,
const TextureDescriptor& descriptor,
uint16_t row_bytes) const override {
return nullptr;
}
bool SetLabel(const std::string& label) override { return true; }
bool SetLabel(const std::string& label, Range range) override { return true; }
uint8_t* OnGetContents() const override { return bytes_; }
bool OnCopyHostBuffer(const uint8_t* source,
Range source_range,
size_t offset) override {
for (auto i = source_range.offset; i < source_range.length; i++, offset++) {
bytes_[offset] = source[i];
}
return true;
}
uint8_t* bytes_;
};
class TestImpellerAllocator : public impeller::Allocator {
public:
TestImpellerAllocator() {}
~TestImpellerAllocator() = default;
private:
uint16_t MinimumBytesPerRow(PixelFormat format) const override { return 0; }
ISize GetMaxTextureSizeSupported() const override {
return ISize{2048, 2048};
}
std::shared_ptr<DeviceBuffer> OnCreateBuffer(
const DeviceBufferDescriptor& desc) override {
return std::make_shared<TestImpellerDeviceBuffer>(desc);
}
std::shared_ptr<Texture> OnCreateTexture(
const TextureDescriptor& desc) override {
return std::make_shared<TestImpellerTexture>(desc);
}
};
} // namespace impeller
namespace flutter {
namespace testing {
float HalfToFloat(uint16_t half);
float DecodeBGR10(uint32_t x);
} // namespace testing
} // namespace flutter
#endif // FLUTTER_LIB_UI_PAINTING_IMAGE_DECODER_NO_GL_UNITTESTS_H_