blob: aea4b0732d5d603556b66be317a5a10a33d3fdd3 [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_SHELL_PLATFORM_EMBEDDER_TESTS_EMBEDDER_TEST_BACKINGSTORE_PRODUCER_H_
#define FLUTTER_SHELL_PLATFORM_EMBEDDER_TESTS_EMBEDDER_TEST_BACKINGSTORE_PRODUCER_H_
#include <memory>
#include "flutter/fml/macros.h"
#include "flutter/fml/memory/ref_ptr_internal.h"
#include "flutter/shell/platform/embedder/embedder.h"
#include "third_party/skia/include/gpu/GrDirectContext.h"
#ifdef SHELL_ENABLE_METAL
#include "flutter/testing/test_metal_context.h"
#endif
#ifdef SHELL_ENABLE_VULKAN
#include "flutter/testing/test_vulkan_context.h"
#endif
namespace flutter {
namespace testing {
class EmbedderTestBackingStoreProducer {
public:
struct UserData {
SkSurface* surface;
FlutterVulkanImage* image;
};
enum class RenderTargetType {
kSoftwareBuffer,
kSoftwareBuffer2,
kOpenGLFramebuffer,
kOpenGLTexture,
kMetalTexture,
kVulkanImage,
};
EmbedderTestBackingStoreProducer(
sk_sp<GrDirectContext> context,
RenderTargetType type,
FlutterSoftwarePixelFormat software_pixfmt = kNative32);
~EmbedderTestBackingStoreProducer();
bool Create(const FlutterBackingStoreConfig* config,
FlutterBackingStore* renderer_out);
private:
bool CreateFramebuffer(const FlutterBackingStoreConfig* config,
FlutterBackingStore* renderer_out);
bool CreateTexture(const FlutterBackingStoreConfig* config,
FlutterBackingStore* renderer_out);
bool CreateSoftware(const FlutterBackingStoreConfig* config,
FlutterBackingStore* backing_store_out);
bool CreateSoftware2(const FlutterBackingStoreConfig* config,
FlutterBackingStore* backing_store_out);
bool CreateMTLTexture(const FlutterBackingStoreConfig* config,
FlutterBackingStore* renderer_out);
bool CreateVulkanImage(const FlutterBackingStoreConfig* config,
FlutterBackingStore* renderer_out);
sk_sp<GrDirectContext> context_;
RenderTargetType type_;
FlutterSoftwarePixelFormat software_pixfmt_;
#ifdef SHELL_ENABLE_METAL
std::unique_ptr<TestMetalContext> test_metal_context_;
#endif
#ifdef SHELL_ENABLE_VULKAN
fml::RefPtr<TestVulkanContext> test_vulkan_context_;
#endif
FML_DISALLOW_COPY_AND_ASSIGN(EmbedderTestBackingStoreProducer);
};
} // namespace testing
} // namespace flutter
#endif // FLUTTER_SHELL_PLATFORM_EMBEDDER_TESTS_EMBEDDER_TEST_BACKINGSTORE_PRODUCER_H_