Move renderer config to EmbedderTestContext (flutter/engine#56699)
Moves all backend-specific renderer configuration out of `EmbedderConfigBuilder` and into the backend-specific subclasses of `EmbedderTestContext`. `EmbedderTestContext` is already backend-specific and as of recent patches, also houses compositor configuration, making it the natural home of this code. As a result, we no longer need backend-specific methods such as `SetSoftwareRendererConfig`, `SetMetalRendererConfig`, `SetOpenGLRendererConfig`, `SetVulkanRendererConfig`. Nor do we need manual backend initialisation in `EmbedderConfigBuilder`. Nor does that initialisation any longer require relying on internal backend-specific code within `EmbedderTestContext`, since we now do that initialisation in the `EmbedderTestContext` constructor. Since the bulk of the work previously done by this method now occurs in the `EmbedderTestContext` constructor, the only work remaining in these methods is surface creation. Further, since this is all now implemented in backend-specific `EmbedderTestContext` subclasses, they have all been renamed to a single method: `SetSurface`. Previously, all of these methods took a surface_size parameter, with two exceptions: * `SetVulkanRendererConfig` also took an optional `FlutterVulkanInstanceProcAddressCallback` parameter. This has been extracted to a separate method `SetVulkanInstanceProcAddressCallback` on `EmbedderTestContextVulkan`. * `SetSoftwareRendererConfig` defaulted the parameter to a size of (1, 1). For consistency, this is no longer defaulted, and all call sites have been updated, consistent with other backends. Lastly, one nice benefit is that because the render config is initialised in the `EmbedderTestContext` constructor, there's no longer a requirement to call `Set*RendererConfig` prior modifying any specific properties on the config, nor is it problematic to call the (replacement) `SetSurface` method after modifying the config. Where the renderer config was being customised in embedder unit tests, I've pushed that customisation up to the top of the test where the rest of the test context is configured. This eliminates nearly all remaining `#ifdef SHELL_ENABLE_$BACKEND` blocks in the EmbedderTest infrastructure. Issue: https://github.com/flutter/flutter/issues/158998 [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
This commit is contained in:
parent
235cf5e17f
commit
4e8108b3d2
@ -315,7 +315,6 @@ if (enable_unittests) {
|
|||||||
|
|
||||||
if (test_enable_gl) {
|
if (test_enable_gl) {
|
||||||
sources += [
|
sources += [
|
||||||
"tests/embedder_config_builder_gl.cc",
|
|
||||||
"tests/embedder_test_backingstore_producer_gl.cc",
|
"tests/embedder_test_backingstore_producer_gl.cc",
|
||||||
"tests/embedder_test_backingstore_producer_gl.h",
|
"tests/embedder_test_backingstore_producer_gl.h",
|
||||||
"tests/embedder_test_compositor_gl.cc",
|
"tests/embedder_test_compositor_gl.cc",
|
||||||
@ -333,7 +332,6 @@ if (enable_unittests) {
|
|||||||
|
|
||||||
if (test_enable_metal) {
|
if (test_enable_metal) {
|
||||||
sources += [
|
sources += [
|
||||||
"tests/embedder_config_builder_metal.mm",
|
|
||||||
"tests/embedder_test_backingstore_producer_metal.h",
|
"tests/embedder_test_backingstore_producer_metal.h",
|
||||||
"tests/embedder_test_backingstore_producer_metal.mm",
|
"tests/embedder_test_backingstore_producer_metal.mm",
|
||||||
"tests/embedder_test_compositor_metal.h",
|
"tests/embedder_test_compositor_metal.h",
|
||||||
@ -348,7 +346,6 @@ if (enable_unittests) {
|
|||||||
|
|
||||||
if (test_enable_vulkan) {
|
if (test_enable_vulkan) {
|
||||||
sources += [
|
sources += [
|
||||||
"tests/embedder_config_builder_vulkan.cc",
|
|
||||||
"tests/embedder_test_backingstore_producer_vulkan.cc",
|
"tests/embedder_test_backingstore_producer_vulkan.cc",
|
||||||
"tests/embedder_test_backingstore_producer_vulkan.h",
|
"tests/embedder_test_backingstore_producer_vulkan.h",
|
||||||
"tests/embedder_test_compositor_vulkan.cc",
|
"tests/embedder_test_compositor_vulkan.cc",
|
||||||
|
@ -35,7 +35,7 @@ TEST_F(EmbedderTest, CannotProvideMultipleSemanticsCallbacks) {
|
|||||||
{
|
{
|
||||||
EmbedderConfigBuilder builder(
|
EmbedderConfigBuilder builder(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.GetProjectArgs().update_semantics_callback =
|
builder.GetProjectArgs().update_semantics_callback =
|
||||||
[](const FlutterSemanticsUpdate* update, void* user_data) {};
|
[](const FlutterSemanticsUpdate* update, void* user_data) {};
|
||||||
builder.GetProjectArgs().update_semantics_callback2 =
|
builder.GetProjectArgs().update_semantics_callback2 =
|
||||||
@ -48,7 +48,7 @@ TEST_F(EmbedderTest, CannotProvideMultipleSemanticsCallbacks) {
|
|||||||
{
|
{
|
||||||
EmbedderConfigBuilder builder(
|
EmbedderConfigBuilder builder(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.GetProjectArgs().update_semantics_callback2 =
|
builder.GetProjectArgs().update_semantics_callback2 =
|
||||||
[](const FlutterSemanticsUpdate2* update, void* user_data) {};
|
[](const FlutterSemanticsUpdate2* update, void* user_data) {};
|
||||||
builder.GetProjectArgs().update_semantics_node_callback =
|
builder.GetProjectArgs().update_semantics_node_callback =
|
||||||
@ -63,7 +63,7 @@ TEST_F(EmbedderTest, CannotProvideMultipleSemanticsCallbacks) {
|
|||||||
{
|
{
|
||||||
EmbedderConfigBuilder builder(
|
EmbedderConfigBuilder builder(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.GetProjectArgs().update_semantics_callback =
|
builder.GetProjectArgs().update_semantics_callback =
|
||||||
[](const FlutterSemanticsUpdate* update, void* user_data) {};
|
[](const FlutterSemanticsUpdate* update, void* user_data) {};
|
||||||
builder.GetProjectArgs().update_semantics_node_callback =
|
builder.GetProjectArgs().update_semantics_node_callback =
|
||||||
@ -78,7 +78,7 @@ TEST_F(EmbedderTest, CannotProvideMultipleSemanticsCallbacks) {
|
|||||||
{
|
{
|
||||||
EmbedderConfigBuilder builder(
|
EmbedderConfigBuilder builder(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.GetProjectArgs().update_semantics_callback2 =
|
builder.GetProjectArgs().update_semantics_callback2 =
|
||||||
[](const FlutterSemanticsUpdate2* update, void* user_data) {};
|
[](const FlutterSemanticsUpdate2* update, void* user_data) {};
|
||||||
builder.GetProjectArgs().update_semantics_callback =
|
builder.GetProjectArgs().update_semantics_callback =
|
||||||
@ -171,7 +171,7 @@ TEST_F(EmbedderA11yTest, A11yTreeIsConsistentUsingV3Callbacks) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("a11y_main");
|
builder.SetDartEntrypoint("a11y_main");
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
@ -375,7 +375,7 @@ TEST_F(EmbedderA11yTest, A11yStringAttributes) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("a11y_string_attributes");
|
builder.SetDartEntrypoint("a11y_string_attributes");
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
@ -468,7 +468,7 @@ TEST_F(EmbedderA11yTest, A11yTreeIsConsistentUsingV2Callbacks) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("a11y_main");
|
builder.SetDartEntrypoint("a11y_main");
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
@ -662,7 +662,7 @@ TEST_F(EmbedderA11yTest, A11yTreeIsConsistentUsingV1Callbacks) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("a11y_main");
|
builder.SetDartEntrypoint("a11y_main");
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
#include "flutter/runtime/dart_vm.h"
|
#include "flutter/runtime/dart_vm.h"
|
||||||
#include "flutter/shell/platform/embedder/embedder.h"
|
#include "flutter/shell/platform/embedder/embedder.h"
|
||||||
#include "tests/embedder_test_context.h"
|
#include "tests/embedder_test_context.h"
|
||||||
#include "third_party/skia/include/core/SkBitmap.h"
|
|
||||||
#include "third_party/skia/include/core/SkImage.h"
|
#include "third_party/skia/include/core/SkImage.h"
|
||||||
|
|
||||||
namespace flutter::testing {
|
namespace flutter::testing {
|
||||||
@ -27,28 +26,6 @@ EmbedderConfigBuilder::EmbedderConfigBuilder(
|
|||||||
|
|
||||||
custom_task_runners_.struct_size = sizeof(FlutterCustomTaskRunners);
|
custom_task_runners_.struct_size = sizeof(FlutterCustomTaskRunners);
|
||||||
|
|
||||||
InitializeGLRendererConfig();
|
|
||||||
InitializeMetalRendererConfig();
|
|
||||||
InitializeVulkanRendererConfig();
|
|
||||||
|
|
||||||
software_renderer_config_.struct_size = sizeof(FlutterSoftwareRendererConfig);
|
|
||||||
software_renderer_config_.surface_present_callback =
|
|
||||||
[](void* context, const void* allocation, size_t row_bytes,
|
|
||||||
size_t height) {
|
|
||||||
auto image_info =
|
|
||||||
SkImageInfo::MakeN32Premul(SkISize::Make(row_bytes / 4, height));
|
|
||||||
SkBitmap bitmap;
|
|
||||||
if (!bitmap.installPixels(image_info, const_cast<void*>(allocation),
|
|
||||||
row_bytes)) {
|
|
||||||
FML_LOG(ERROR) << "Could not copy pixels for the software "
|
|
||||||
"composition from the engine.";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
bitmap.setImmutable();
|
|
||||||
return reinterpret_cast<EmbedderTestContextSoftware*>(context)->Present(
|
|
||||||
SkImages::RasterFromBitmap(bitmap));
|
|
||||||
};
|
|
||||||
|
|
||||||
// The first argument is always the executable name. Don't make tests have to
|
// The first argument is always the executable name. Don't make tests have to
|
||||||
// do this manually.
|
// do this manually.
|
||||||
AddCommandLineArgument("embedder_unittest");
|
AddCommandLineArgument("embedder_unittest");
|
||||||
@ -79,30 +56,6 @@ FlutterProjectArgs& EmbedderConfigBuilder::GetProjectArgs() {
|
|||||||
return project_args_;
|
return project_args_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetSoftwareRendererConfig(SkISize surface_size) {
|
|
||||||
renderer_config_.type = FlutterRendererType::kSoftware;
|
|
||||||
renderer_config_.software = software_renderer_config_;
|
|
||||||
context_.SetupSurface(surface_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetRendererConfig(EmbedderTestContextType type,
|
|
||||||
SkISize surface_size) {
|
|
||||||
switch (type) {
|
|
||||||
case EmbedderTestContextType::kOpenGLContext:
|
|
||||||
SetOpenGLRendererConfig(surface_size);
|
|
||||||
break;
|
|
||||||
case EmbedderTestContextType::kMetalContext:
|
|
||||||
SetMetalRendererConfig(surface_size);
|
|
||||||
break;
|
|
||||||
case EmbedderTestContextType::kVulkanContext:
|
|
||||||
SetVulkanRendererConfig(surface_size);
|
|
||||||
break;
|
|
||||||
case EmbedderTestContextType::kSoftwareContext:
|
|
||||||
SetSoftwareRendererConfig(surface_size);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetAssetsPath() {
|
void EmbedderConfigBuilder::SetAssetsPath() {
|
||||||
project_args_.assets_path = context_.GetAssetsPath().c_str();
|
project_args_.assets_path = context_.GetAssetsPath().c_str();
|
||||||
}
|
}
|
||||||
@ -217,10 +170,6 @@ void EmbedderConfigBuilder::SetupVsyncCallback() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
FlutterRendererConfig& EmbedderConfigBuilder::GetRendererConfig() {
|
|
||||||
return renderer_config_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetRenderTaskRunner(
|
void EmbedderConfigBuilder::SetRenderTaskRunner(
|
||||||
const FlutterTaskRunnerDescription* runner) {
|
const FlutterTaskRunnerDescription* runner) {
|
||||||
if (runner == nullptr) {
|
if (runner == nullptr) {
|
||||||
@ -336,10 +285,11 @@ UniqueEngine EmbedderConfigBuilder::SetupEngine(bool run) const {
|
|||||||
project_args.dart_entrypoint_argc = 0;
|
project_args.dart_entrypoint_argc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto result =
|
auto result = run ? FlutterEngineRun(FLUTTER_ENGINE_VERSION,
|
||||||
run ? FlutterEngineRun(FLUTTER_ENGINE_VERSION, &renderer_config_,
|
&context_.GetRendererConfig(),
|
||||||
&project_args, &context_, &engine)
|
&project_args, &context_, &engine)
|
||||||
: FlutterEngineInitialize(FLUTTER_ENGINE_VERSION, &renderer_config_,
|
: FlutterEngineInitialize(
|
||||||
|
FLUTTER_ENGINE_VERSION, &context_.GetRendererConfig(),
|
||||||
&project_args, &context_, &engine);
|
&project_args, &context_, &engine);
|
||||||
|
|
||||||
if (result != kSuccess) {
|
if (result != kSuccess) {
|
||||||
@ -349,52 +299,4 @@ UniqueEngine EmbedderConfigBuilder::SetupEngine(bool run) const {
|
|||||||
return UniqueEngine{engine};
|
return UniqueEngine{engine};
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef SHELL_ENABLE_GL
|
|
||||||
// OpenGL fallback implementations.
|
|
||||||
// See: flutter/shell/platform/embedder/tests/embedder_config_builder_gl.cc.
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::InitializeGLRendererConfig() {
|
|
||||||
// no-op.
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetOpenGLFBOCallBack() {
|
|
||||||
FML_LOG(FATAL) << "OpenGL is not enabled in this build.";
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetOpenGLPresentCallBack() {
|
|
||||||
FML_LOG(FATAL) << "OpenGL is not enabled in this build.";
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetOpenGLRendererConfig(SkISize surface_size) {
|
|
||||||
FML_LOG(FATAL) << "OpenGL is not enabled in this build.";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifndef SHELL_ENABLE_METAL
|
|
||||||
// Metal fallback implementations.
|
|
||||||
// See: flutter/shell/platform/embedder/tests/embedder_config_builder_metal.mm.
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::InitializeMetalRendererConfig() {
|
|
||||||
// no-op.
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetMetalRendererConfig(SkISize surface_size) {
|
|
||||||
FML_LOG(FATAL) << "Metal is not enabled in this build.";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifndef SHELL_ENABLE_VULKAN
|
|
||||||
// Vulkan fallback implementations.
|
|
||||||
// See: flutter/shell/platform/embedder/tests/embedder_config_builder_vulkan.cc.
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::InitializeVulkanRendererConfig() {
|
|
||||||
// no-op.
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetVulkanRendererConfig(
|
|
||||||
SkISize surface_size,
|
|
||||||
std::optional<FlutterVulkanInstanceProcAddressCallback>
|
|
||||||
instance_proc_address_callback) {
|
|
||||||
FML_LOG(FATAL) << "Vulkan is not enabled in this build.";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} // namespace flutter::testing
|
} // namespace flutter::testing
|
||||||
|
@ -44,31 +44,6 @@ class EmbedderConfigBuilder {
|
|||||||
|
|
||||||
FlutterProjectArgs& GetProjectArgs();
|
FlutterProjectArgs& GetProjectArgs();
|
||||||
|
|
||||||
void SetRendererConfig(EmbedderTestContextType type, SkISize surface_size);
|
|
||||||
|
|
||||||
void SetSoftwareRendererConfig(SkISize surface_size = SkISize::Make(1, 1));
|
|
||||||
|
|
||||||
void SetOpenGLRendererConfig(SkISize surface_size);
|
|
||||||
|
|
||||||
void SetMetalRendererConfig(SkISize surface_size);
|
|
||||||
|
|
||||||
void SetVulkanRendererConfig(
|
|
||||||
SkISize surface_size,
|
|
||||||
std::optional<FlutterVulkanInstanceProcAddressCallback>
|
|
||||||
instance_proc_address_callback = {});
|
|
||||||
|
|
||||||
// Used to explicitly set an `open_gl.fbo_callback`. Using this method will
|
|
||||||
// cause your test to fail since the ctor for this class sets
|
|
||||||
// `open_gl.fbo_callback_with_frame_info`. This method exists as a utility to
|
|
||||||
// explicitly test this behavior.
|
|
||||||
void SetOpenGLFBOCallBack();
|
|
||||||
|
|
||||||
// Used to explicitly set an `open_gl.present`. Using this method will cause
|
|
||||||
// your test to fail since the ctor for this class sets
|
|
||||||
// `open_gl.present_with_info`. This method exists as a utility to explicitly
|
|
||||||
// test this behavior.
|
|
||||||
void SetOpenGLPresentCallBack();
|
|
||||||
|
|
||||||
void SetAssetsPath();
|
void SetAssetsPath();
|
||||||
|
|
||||||
void SetSnapshots();
|
void SetSnapshots();
|
||||||
@ -109,7 +84,7 @@ class EmbedderConfigBuilder {
|
|||||||
|
|
||||||
FlutterCompositor& GetCompositor();
|
FlutterCompositor& GetCompositor();
|
||||||
|
|
||||||
FlutterRendererConfig& GetRendererConfig();
|
void SetSurface(SkISize surface_size) { context_.SetSurface(surface_size); }
|
||||||
|
|
||||||
void SetRenderTargetType(
|
void SetRenderTargetType(
|
||||||
EmbedderTestBackingStoreProducer::RenderTargetType type,
|
EmbedderTestBackingStoreProducer::RenderTargetType type,
|
||||||
@ -125,23 +100,8 @@ class EmbedderConfigBuilder {
|
|||||||
void SetupVsyncCallback();
|
void SetupVsyncCallback();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitializeGLRendererConfig();
|
|
||||||
void InitializeVulkanRendererConfig();
|
|
||||||
void InitializeMetalRendererConfig();
|
|
||||||
|
|
||||||
EmbedderTestContext& context_;
|
EmbedderTestContext& context_;
|
||||||
FlutterProjectArgs project_args_ = {};
|
FlutterProjectArgs project_args_ = {};
|
||||||
FlutterRendererConfig renderer_config_ = {};
|
|
||||||
FlutterSoftwareRendererConfig software_renderer_config_ = {};
|
|
||||||
#ifdef SHELL_ENABLE_GL
|
|
||||||
FlutterOpenGLRendererConfig opengl_renderer_config_ = {};
|
|
||||||
#endif
|
|
||||||
#ifdef SHELL_ENABLE_METAL
|
|
||||||
FlutterMetalRendererConfig metal_renderer_config_ = {};
|
|
||||||
#endif
|
|
||||||
#ifdef SHELL_ENABLE_VULKAN
|
|
||||||
FlutterVulkanRendererConfig vulkan_renderer_config_ = {};
|
|
||||||
#endif
|
|
||||||
std::string dart_entrypoint_;
|
std::string dart_entrypoint_;
|
||||||
FlutterCustomTaskRunners custom_task_runners_ = {};
|
FlutterCustomTaskRunners custom_task_runners_ = {};
|
||||||
FlutterCompositor compositor_ = {};
|
FlutterCompositor compositor_ = {};
|
||||||
|
@ -1,81 +0,0 @@
|
|||||||
// 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.
|
|
||||||
|
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_config_builder.h"
|
|
||||||
|
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.h"
|
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_test_context_gl.h"
|
|
||||||
|
|
||||||
namespace flutter::testing {
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::InitializeGLRendererConfig() {
|
|
||||||
opengl_renderer_config_.struct_size = sizeof(FlutterOpenGLRendererConfig);
|
|
||||||
opengl_renderer_config_.make_current = [](void* context) -> bool {
|
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)->GLMakeCurrent();
|
|
||||||
};
|
|
||||||
opengl_renderer_config_.clear_current = [](void* context) -> bool {
|
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)->GLClearCurrent();
|
|
||||||
};
|
|
||||||
opengl_renderer_config_.present_with_info =
|
|
||||||
[](void* context, const FlutterPresentInfo* present_info) -> bool {
|
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)->GLPresent(
|
|
||||||
*present_info);
|
|
||||||
};
|
|
||||||
opengl_renderer_config_.fbo_with_frame_info_callback =
|
|
||||||
[](void* context, const FlutterFrameInfo* frame_info) -> uint32_t {
|
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)->GLGetFramebuffer(
|
|
||||||
*frame_info);
|
|
||||||
};
|
|
||||||
opengl_renderer_config_.populate_existing_damage = nullptr;
|
|
||||||
opengl_renderer_config_.make_resource_current = [](void* context) -> bool {
|
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
|
||||||
->GLMakeResourceCurrent();
|
|
||||||
};
|
|
||||||
opengl_renderer_config_.gl_proc_resolver = [](void* context,
|
|
||||||
const char* name) -> void* {
|
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)->GLGetProcAddress(
|
|
||||||
name);
|
|
||||||
};
|
|
||||||
opengl_renderer_config_.fbo_reset_after_present = true;
|
|
||||||
opengl_renderer_config_.surface_transformation =
|
|
||||||
[](void* context) -> FlutterTransformation {
|
|
||||||
return reinterpret_cast<EmbedderTestContext*>(context)
|
|
||||||
->GetRootSurfaceTransformation();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetOpenGLFBOCallBack() {
|
|
||||||
// SetOpenGLRendererConfig must be called before this.
|
|
||||||
FML_CHECK(renderer_config_.type == FlutterRendererType::kOpenGL);
|
|
||||||
renderer_config_.open_gl.fbo_callback = [](void* context) -> uint32_t {
|
|
||||||
FlutterFrameInfo frame_info = {};
|
|
||||||
// fbo_callback doesn't use the frame size information, only
|
|
||||||
// fbo_callback_with_frame_info does.
|
|
||||||
frame_info.struct_size = sizeof(FlutterFrameInfo);
|
|
||||||
frame_info.size.width = 0;
|
|
||||||
frame_info.size.height = 0;
|
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)->GLGetFramebuffer(
|
|
||||||
frame_info);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetOpenGLPresentCallBack() {
|
|
||||||
// SetOpenGLRendererConfig must be called before this.
|
|
||||||
FML_CHECK(renderer_config_.type == FlutterRendererType::kOpenGL);
|
|
||||||
renderer_config_.open_gl.present = [](void* context) -> bool {
|
|
||||||
// passing a placeholder fbo_id.
|
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)->GLPresent(
|
|
||||||
FlutterPresentInfo{
|
|
||||||
.fbo_id = 0,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetOpenGLRendererConfig(SkISize surface_size) {
|
|
||||||
renderer_config_.type = FlutterRendererType::kOpenGL;
|
|
||||||
renderer_config_.open_gl = opengl_renderer_config_;
|
|
||||||
context_.SetupSurface(surface_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace flutter::testing
|
|
@ -1,47 +0,0 @@
|
|||||||
// 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.
|
|
||||||
|
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_config_builder.h"
|
|
||||||
|
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_test_context_metal.h"
|
|
||||||
|
|
||||||
namespace flutter::testing {
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::InitializeMetalRendererConfig() {
|
|
||||||
if (context_.GetContextType() != EmbedderTestContextType::kMetalContext) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
metal_renderer_config_.struct_size = sizeof(metal_renderer_config_);
|
|
||||||
EmbedderTestContextMetal& metal_context = reinterpret_cast<EmbedderTestContextMetal&>(context_);
|
|
||||||
|
|
||||||
metal_renderer_config_.device = metal_context.GetTestMetalContext()->GetMetalDevice();
|
|
||||||
metal_renderer_config_.present_command_queue =
|
|
||||||
metal_context.GetTestMetalContext()->GetMetalCommandQueue();
|
|
||||||
metal_renderer_config_.get_next_drawable_callback = [](void* user_data,
|
|
||||||
const FlutterFrameInfo* frame_info) {
|
|
||||||
return reinterpret_cast<EmbedderTestContextMetal*>(user_data)->GetNextDrawable(frame_info);
|
|
||||||
};
|
|
||||||
metal_renderer_config_.present_drawable_callback =
|
|
||||||
[](void* user_data, const FlutterMetalTexture* texture) -> bool {
|
|
||||||
EmbedderTestContextMetal* metal_context =
|
|
||||||
reinterpret_cast<EmbedderTestContextMetal*>(user_data);
|
|
||||||
return metal_context->Present(texture->texture_id);
|
|
||||||
};
|
|
||||||
metal_renderer_config_.external_texture_frame_callback =
|
|
||||||
[](void* user_data, int64_t texture_id, size_t width, size_t height,
|
|
||||||
FlutterMetalExternalTexture* texture_out) -> bool {
|
|
||||||
EmbedderTestContextMetal* metal_context =
|
|
||||||
reinterpret_cast<EmbedderTestContextMetal*>(user_data);
|
|
||||||
return metal_context->PopulateExternalTexture(texture_id, width, height, texture_out);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetMetalRendererConfig(SkISize surface_size) {
|
|
||||||
renderer_config_.type = FlutterRendererType::kMetal;
|
|
||||||
renderer_config_.metal = metal_renderer_config_;
|
|
||||||
context_.SetupSurface(surface_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace flutter::testing
|
|
@ -1,73 +0,0 @@
|
|||||||
// 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.
|
|
||||||
|
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_config_builder.h"
|
|
||||||
|
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_test_context_vulkan.h"
|
|
||||||
#include "flutter/vulkan/vulkan_device.h" // nogncheck
|
|
||||||
#include "vulkan/vulkan_core.h" // nogncheck
|
|
||||||
|
|
||||||
namespace flutter::testing {
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::InitializeVulkanRendererConfig() {
|
|
||||||
if (context_.GetContextType() != EmbedderTestContextType::kVulkanContext) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
vulkan_renderer_config_.struct_size = sizeof(FlutterVulkanRendererConfig);
|
|
||||||
vulkan_renderer_config_.version =
|
|
||||||
static_cast<EmbedderTestContextVulkan&>(context_)
|
|
||||||
.vulkan_context_->application_->GetAPIVersion();
|
|
||||||
vulkan_renderer_config_.instance =
|
|
||||||
static_cast<EmbedderTestContextVulkan&>(context_)
|
|
||||||
.vulkan_context_->application_->GetInstance();
|
|
||||||
vulkan_renderer_config_.physical_device =
|
|
||||||
static_cast<EmbedderTestContextVulkan&>(context_)
|
|
||||||
.vulkan_context_->device_->GetPhysicalDeviceHandle();
|
|
||||||
vulkan_renderer_config_.device =
|
|
||||||
static_cast<EmbedderTestContextVulkan&>(context_)
|
|
||||||
.vulkan_context_->device_->GetHandle();
|
|
||||||
vulkan_renderer_config_.queue_family_index =
|
|
||||||
static_cast<EmbedderTestContextVulkan&>(context_)
|
|
||||||
.vulkan_context_->device_->GetGraphicsQueueIndex();
|
|
||||||
vulkan_renderer_config_.queue =
|
|
||||||
static_cast<EmbedderTestContextVulkan&>(context_)
|
|
||||||
.vulkan_context_->device_->GetQueueHandle();
|
|
||||||
vulkan_renderer_config_.get_instance_proc_address_callback =
|
|
||||||
EmbedderTestContextVulkan::InstanceProcAddr;
|
|
||||||
vulkan_renderer_config_.get_next_image_callback =
|
|
||||||
[](void* context,
|
|
||||||
const FlutterFrameInfo* frame_info) -> FlutterVulkanImage {
|
|
||||||
VkImage image =
|
|
||||||
reinterpret_cast<EmbedderTestContextVulkan*>(context)->GetNextImage(
|
|
||||||
{static_cast<int>(frame_info->size.width),
|
|
||||||
static_cast<int>(frame_info->size.height)});
|
|
||||||
return {
|
|
||||||
.struct_size = sizeof(FlutterVulkanImage),
|
|
||||||
.image = reinterpret_cast<uint64_t>(image),
|
|
||||||
.format = VK_FORMAT_R8G8B8A8_UNORM,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
vulkan_renderer_config_.present_image_callback =
|
|
||||||
[](void* context, const FlutterVulkanImage* image) -> bool {
|
|
||||||
return reinterpret_cast<EmbedderTestContextVulkan*>(context)->PresentImage(
|
|
||||||
reinterpret_cast<VkImage>(image->image));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderConfigBuilder::SetVulkanRendererConfig(
|
|
||||||
SkISize surface_size,
|
|
||||||
std::optional<FlutterVulkanInstanceProcAddressCallback>
|
|
||||||
instance_proc_address_callback) {
|
|
||||||
renderer_config_.type = FlutterRendererType::kVulkan;
|
|
||||||
FlutterVulkanRendererConfig vulkan_renderer_config = vulkan_renderer_config_;
|
|
||||||
if (instance_proc_address_callback.has_value()) {
|
|
||||||
vulkan_renderer_config.get_instance_proc_address_callback =
|
|
||||||
instance_proc_address_callback.value();
|
|
||||||
}
|
|
||||||
renderer_config_.vulkan = vulkan_renderer_config;
|
|
||||||
context_.SetupSurface(surface_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace flutter::testing
|
|
@ -41,8 +41,7 @@
|
|||||||
// CREATE_NATIVE_ENTRY is leaky by design
|
// CREATE_NATIVE_ENTRY is leaky by design
|
||||||
// NOLINTBEGIN(clang-analyzer-core.StackAddressEscape)
|
// NOLINTBEGIN(clang-analyzer-core.StackAddressEscape)
|
||||||
|
|
||||||
namespace flutter {
|
namespace flutter::testing {
|
||||||
namespace testing {
|
|
||||||
|
|
||||||
using EmbedderTest = testing::EmbedderTest;
|
using EmbedderTest = testing::EmbedderTest;
|
||||||
|
|
||||||
@ -54,7 +53,7 @@ TEST_F(EmbedderTest, CanGetVulkanEmbedderContext) {
|
|||||||
TEST_F(EmbedderTest, CanCreateOpenGLRenderingEngine) {
|
TEST_F(EmbedderTest, CanCreateOpenGLRenderingEngine) {
|
||||||
EmbedderConfigBuilder builder(
|
EmbedderConfigBuilder builder(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(1, 1));
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
}
|
}
|
||||||
@ -68,7 +67,7 @@ TEST_F(EmbedderTest,
|
|||||||
MustPreventEngineLaunchWhenRequiredCompositorArgsAreAbsent) {
|
MustPreventEngineLaunchWhenRequiredCompositorArgsAreAbsent) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(1, 1));
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.GetCompositor().create_backing_store_callback = nullptr;
|
builder.GetCompositor().create_backing_store_callback = nullptr;
|
||||||
builder.GetCompositor().collect_backing_store_callback = nullptr;
|
builder.GetCompositor().collect_backing_store_callback = nullptr;
|
||||||
@ -86,7 +85,7 @@ TEST_F(EmbedderTest,
|
|||||||
TEST_F(EmbedderTest, LaunchFailsWhenMultiplePresentCallbacks) {
|
TEST_F(EmbedderTest, LaunchFailsWhenMultiplePresentCallbacks) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(1, 1));
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.GetCompositor().present_layers_callback =
|
builder.GetCompositor().present_layers_callback =
|
||||||
[](const FlutterLayer** layers, size_t layers_count, void* user_data) {
|
[](const FlutterLayer** layers, size_t layers_count, void* user_data) {
|
||||||
@ -106,7 +105,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderToOpenGLFramebuffer) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views");
|
builder.SetDartEntrypoint("can_composite_platform_views");
|
||||||
|
|
||||||
@ -226,7 +225,7 @@ TEST_F(EmbedderTest, RasterCacheDisabledWithPlatformViews) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views_with_opacity");
|
builder.SetDartEntrypoint("can_composite_platform_views_with_opacity");
|
||||||
|
|
||||||
@ -359,7 +358,7 @@ TEST_F(EmbedderTest, RasterCacheEnabled) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_with_opacity");
|
builder.SetDartEntrypoint("can_composite_with_opacity");
|
||||||
|
|
||||||
@ -445,7 +444,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderToOpenGLTexture) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views");
|
builder.SetDartEntrypoint("can_composite_platform_views");
|
||||||
|
|
||||||
@ -566,7 +565,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderToSoftwareBuffer) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views");
|
builder.SetDartEntrypoint("can_composite_platform_views");
|
||||||
|
|
||||||
@ -687,7 +686,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderKnownScene) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views_with_known_scene");
|
builder.SetDartEntrypoint("can_composite_platform_views_with_known_scene");
|
||||||
|
|
||||||
@ -902,7 +901,7 @@ TEST_F(EmbedderTest, CustomCompositorMustWorkWithCustomTaskRunner) {
|
|||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views");
|
builder.SetDartEntrypoint("can_composite_platform_views");
|
||||||
|
|
||||||
@ -1069,7 +1068,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderWithRootLayerOnly) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint(
|
builder.SetDartEntrypoint(
|
||||||
"can_composite_platform_views_with_root_layer_only");
|
"can_composite_platform_views_with_root_layer_only");
|
||||||
@ -1151,7 +1150,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderWithPlatformLayerOnBottom) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint(
|
builder.SetDartEntrypoint(
|
||||||
"can_composite_platform_views_with_platform_layer_on_bottom");
|
"can_composite_platform_views_with_platform_layer_on_bottom");
|
||||||
@ -1279,7 +1278,7 @@ TEST_F(EmbedderTest,
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 800));
|
builder.SetSurface(SkISize::Make(600, 800));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views_with_known_scene");
|
builder.SetDartEntrypoint("can_composite_platform_views_with_known_scene");
|
||||||
|
|
||||||
@ -1498,7 +1497,7 @@ TEST_F(EmbedderTest, CanRenderSceneWithoutCustomCompositor) {
|
|||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("can_render_scene_without_custom_compositor");
|
builder.SetDartEntrypoint("can_render_scene_without_custom_compositor");
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
|
||||||
auto rendered_scene = context.GetNextSceneImage();
|
auto rendered_scene = context.GetNextSceneImage();
|
||||||
|
|
||||||
@ -1529,7 +1528,7 @@ TEST_F(EmbedderTest, CanRenderSceneWithoutCustomCompositorWithTransformation) {
|
|||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("can_render_scene_without_custom_compositor");
|
builder.SetDartEntrypoint("can_render_scene_without_custom_compositor");
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 800));
|
builder.SetSurface(SkISize::Make(600, 800));
|
||||||
|
|
||||||
auto rendered_scene = context.GetNextSceneImage();
|
auto rendered_scene = context.GetNextSceneImage();
|
||||||
|
|
||||||
@ -1556,9 +1555,8 @@ TEST_P(EmbedderTestMultiBackend, CanRenderGradientWithoutCompositor) {
|
|||||||
auto& context = GetEmbedderContext(backend);
|
auto& context = GetEmbedderContext(backend);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("render_gradient");
|
builder.SetDartEntrypoint("render_gradient");
|
||||||
builder.SetRendererConfig(backend, SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
|
||||||
auto rendered_scene = context.GetNextSceneImage();
|
auto rendered_scene = context.GetNextSceneImage();
|
||||||
|
|
||||||
@ -1591,7 +1589,7 @@ TEST_F(EmbedderTest, CanRenderGradientWithoutCompositorWithXform) {
|
|||||||
const auto surface_size = SkISize::Make(600, 800);
|
const auto surface_size = SkISize::Make(600, 800);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("render_gradient");
|
builder.SetDartEntrypoint("render_gradient");
|
||||||
builder.SetOpenGLRendererConfig(surface_size);
|
builder.SetSurface(surface_size);
|
||||||
|
|
||||||
auto rendered_scene = context.GetNextSceneImage();
|
auto rendered_scene = context.GetNextSceneImage();
|
||||||
|
|
||||||
@ -1616,9 +1614,8 @@ TEST_P(EmbedderTestMultiBackend, CanRenderGradientWithCompositor) {
|
|||||||
auto& context = GetEmbedderContext(backend);
|
auto& context = GetEmbedderContext(backend);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("render_gradient");
|
builder.SetDartEntrypoint("render_gradient");
|
||||||
builder.SetRendererConfig(backend, SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetRenderTargetType(GetRenderTargetFromBackend(backend, true));
|
builder.SetRenderTargetType(GetRenderTargetFromBackend(backend, true));
|
||||||
|
|
||||||
@ -1654,7 +1651,7 @@ TEST_F(EmbedderTest, CanRenderGradientWithCompositorWithXform) {
|
|||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("render_gradient");
|
builder.SetDartEntrypoint("render_gradient");
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 800));
|
builder.SetSurface(SkISize::Make(600, 800));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer);
|
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer);
|
||||||
@ -1683,9 +1680,8 @@ TEST_P(EmbedderTestMultiBackend,
|
|||||||
auto& context = GetEmbedderContext(backend);
|
auto& context = GetEmbedderContext(backend);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("render_gradient_on_non_root_backing_store");
|
builder.SetDartEntrypoint("render_gradient_on_non_root_backing_store");
|
||||||
builder.SetRendererConfig(backend, SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetRenderTargetType(GetRenderTargetFromBackend(backend, true));
|
builder.SetRenderTargetType(GetRenderTargetFromBackend(backend, true));
|
||||||
|
|
||||||
@ -1825,7 +1821,7 @@ TEST_F(EmbedderTest, CanRenderGradientWithCompositorOnNonRootLayerWithXform) {
|
|||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("render_gradient_on_non_root_backing_store");
|
builder.SetDartEntrypoint("render_gradient_on_non_root_backing_store");
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 800));
|
builder.SetSurface(SkISize::Make(600, 800));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer);
|
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer);
|
||||||
@ -1974,7 +1970,7 @@ TEST_F(EmbedderTest, VerifyB141980393) {
|
|||||||
context.SetRootSurfaceTransformation(root_surface_transformation);
|
context.SetRootSurfaceTransformation(root_surface_transformation);
|
||||||
|
|
||||||
// Configure the Flutter project args for the root surface transformation.
|
// Configure the Flutter project args for the root surface transformation.
|
||||||
builder.SetOpenGLRendererConfig(
|
builder.SetSurface(
|
||||||
SkISize::Make(root_surface_rect.width(), root_surface_rect.height()));
|
SkISize::Make(root_surface_rect.width(), root_surface_rect.height()));
|
||||||
|
|
||||||
// Use a compositor instead of rendering directly to the surface.
|
// Use a compositor instead of rendering directly to the surface.
|
||||||
@ -2079,7 +2075,7 @@ TEST_F(EmbedderTest, CanCreateEmbedderWithCustomRenderTaskRunner) {
|
|||||||
EmbedderConfigBuilder builder(
|
EmbedderConfigBuilder builder(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
builder.SetDartEntrypoint("can_render_scene_without_custom_compositor");
|
builder.SetDartEntrypoint("can_render_scene_without_custom_compositor");
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetRenderTaskRunner(
|
builder.SetRenderTaskRunner(
|
||||||
&render_task_runner.GetFlutterTaskRunnerDescription());
|
&render_task_runner.GetFlutterTaskRunnerDescription());
|
||||||
|
|
||||||
@ -2138,7 +2134,7 @@ TEST_P(EmbedderTestMultiBackend,
|
|||||||
EmbedderTestContextType backend = GetParam();
|
EmbedderTestContextType backend = GetParam();
|
||||||
EmbedderConfigBuilder builder(GetEmbedderContext(backend));
|
EmbedderConfigBuilder builder(GetEmbedderContext(backend));
|
||||||
builder.SetDartEntrypoint("can_render_scene_without_custom_compositor");
|
builder.SetDartEntrypoint("can_render_scene_without_custom_compositor");
|
||||||
builder.SetRendererConfig(backend, SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetRenderTaskRunner(
|
builder.SetRenderTaskRunner(
|
||||||
&common_task_runner.GetFlutterTaskRunnerDescription());
|
&common_task_runner.GetFlutterTaskRunnerDescription());
|
||||||
builder.SetPlatformTaskRunner(
|
builder.SetPlatformTaskRunner(
|
||||||
@ -2194,7 +2190,7 @@ TEST_P(EmbedderTestMultiBackend,
|
|||||||
auto& context = GetEmbedderContext(backend);
|
auto& context = GetEmbedderContext(backend);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetRendererConfig(backend, SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_display_platform_view_with_pixel_ratio");
|
builder.SetDartEntrypoint("can_display_platform_view_with_pixel_ratio");
|
||||||
|
|
||||||
@ -2312,7 +2308,7 @@ TEST_F(
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 800));
|
builder.SetSurface(SkISize::Make(600, 800));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_display_platform_view_with_pixel_ratio");
|
builder.SetDartEntrypoint("can_display_platform_view_with_pixel_ratio");
|
||||||
|
|
||||||
@ -2435,7 +2431,7 @@ TEST_F(EmbedderTest,
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 1024));
|
builder.SetSurface(SkISize::Make(600, 1024));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("push_frames_over_and_over");
|
builder.SetDartEntrypoint("push_frames_over_and_over");
|
||||||
|
|
||||||
@ -2479,7 +2475,7 @@ TEST_F(EmbedderTest,
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 1024));
|
builder.SetSurface(SkISize::Make(600, 1024));
|
||||||
builder.SetDartEntrypoint("push_frames_over_and_over");
|
builder.SetDartEntrypoint("push_frames_over_and_over");
|
||||||
|
|
||||||
const auto root_surface_transformation =
|
const auto root_surface_transformation =
|
||||||
@ -2519,7 +2515,7 @@ TEST_P(EmbedderTestMultiBackend, PlatformViewMutatorsAreValid) {
|
|||||||
auto& context = GetEmbedderContext(backend);
|
auto& context = GetEmbedderContext(backend);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetRendererConfig(backend, SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("platform_view_mutators");
|
builder.SetDartEntrypoint("platform_view_mutators");
|
||||||
|
|
||||||
@ -2628,7 +2624,7 @@ TEST_F(EmbedderTest, PlatformViewMutatorsAreValidWithPixelRatio) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("platform_view_mutators_with_pixel_ratio");
|
builder.SetDartEntrypoint("platform_view_mutators_with_pixel_ratio");
|
||||||
|
|
||||||
@ -2740,7 +2736,7 @@ TEST_F(EmbedderTest,
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("platform_view_mutators_with_pixel_ratio");
|
builder.SetDartEntrypoint("platform_view_mutators_with_pixel_ratio");
|
||||||
|
|
||||||
@ -2857,7 +2853,7 @@ TEST_F(EmbedderTest, EmptySceneIsAcceptable) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("empty_scene");
|
builder.SetDartEntrypoint("empty_scene");
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
@ -2883,7 +2879,7 @@ TEST_F(EmbedderTest, SceneWithNoRootContainerIsAcceptable) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer);
|
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer);
|
||||||
@ -2913,7 +2909,7 @@ TEST_F(EmbedderTest, ArcEndCapsAreDrawnCorrectly) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 1024));
|
builder.SetSurface(SkISize::Make(800, 1024));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("arc_end_caps_correct");
|
builder.SetDartEntrypoint("arc_end_caps_correct");
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
@ -2947,7 +2943,7 @@ TEST_F(EmbedderTest, ClipsAreCorrectlyCalculated) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(400, 300));
|
builder.SetSurface(SkISize::Make(400, 300));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("scene_builder_with_clips");
|
builder.SetDartEntrypoint("scene_builder_with_clips");
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
@ -3027,7 +3023,7 @@ TEST_F(EmbedderTest, ComplexClipsAreCorrectlyCalculated) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(1024, 600));
|
builder.SetSurface(SkISize::Make(1024, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("scene_builder_with_complex_clips");
|
builder.SetDartEntrypoint("scene_builder_with_complex_clips");
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
@ -3111,7 +3107,7 @@ TEST_F(EmbedderTest, ComplexClipsAreCorrectlyCalculated) {
|
|||||||
TEST_F(EmbedderTest, ObjectsCanBePostedViaPorts) {
|
TEST_F(EmbedderTest, ObjectsCanBePostedViaPorts) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 1024));
|
builder.SetSurface(SkISize::Make(800, 1024));
|
||||||
builder.SetDartEntrypoint("objects_can_be_posted");
|
builder.SetDartEntrypoint("objects_can_be_posted");
|
||||||
|
|
||||||
// Synchronously acquire the send port from the Dart end. We will be using
|
// Synchronously acquire the send port from the Dart end. We will be using
|
||||||
@ -3311,7 +3307,7 @@ TEST_F(EmbedderTest, CompositorCanPostZeroLayersForPresentation) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(300, 200));
|
builder.SetSurface(SkISize::Make(300, 200));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("empty_scene_posts_zero_layers_to_compositor");
|
builder.SetDartEntrypoint("empty_scene_posts_zero_layers_to_compositor");
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
@ -3345,7 +3341,7 @@ TEST_F(EmbedderTest, CompositorCanPostOnlyPlatformViews) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(300, 200));
|
builder.SetSurface(SkISize::Make(300, 200));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("compositor_can_post_only_platform_views");
|
builder.SetDartEntrypoint("compositor_can_post_only_platform_views");
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
@ -3409,7 +3405,7 @@ TEST_F(EmbedderTest, CompositorRenderTargetsAreRecycled) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(300, 200));
|
builder.SetSurface(SkISize::Make(300, 200));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("render_targets_are_recycled");
|
builder.SetDartEntrypoint("render_targets_are_recycled");
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
@ -3455,7 +3451,7 @@ TEST_F(EmbedderTest, CompositorRenderTargetsAreInStableOrder) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(300, 200));
|
builder.SetSurface(SkISize::Make(300, 200));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("render_targets_are_in_stable_order");
|
builder.SetDartEntrypoint("render_targets_are_in_stable_order");
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
@ -3522,17 +3518,15 @@ TEST_F(EmbedderTest, CompositorRenderTargetsAreInStableOrder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, FrameInfoContainsValidWidthAndHeight) {
|
TEST_F(EmbedderTest, FrameInfoContainsValidWidthAndHeight) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 1024));
|
|
||||||
builder.SetDartEntrypoint("push_frames_over_and_over");
|
|
||||||
|
|
||||||
const auto root_surface_transformation =
|
const auto root_surface_transformation =
|
||||||
SkMatrix().preTranslate(0, 1024).preRotate(-90, 0, 0);
|
SkMatrix().preTranslate(0, 1024).preRotate(-90, 0, 0);
|
||||||
|
|
||||||
context.SetRootSurfaceTransformation(root_surface_transformation);
|
context.SetRootSurfaceTransformation(root_surface_transformation);
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(600, 1024));
|
||||||
|
builder.SetDartEntrypoint("push_frames_over_and_over");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
|
|
||||||
// Send a window metrics events so frames may be scheduled.
|
// Send a window metrics events so frames may be scheduled.
|
||||||
@ -3552,8 +3546,7 @@ TEST_F(EmbedderTest, FrameInfoContainsValidWidthAndHeight) {
|
|||||||
/* Nothing to do. */
|
/* Nothing to do. */
|
||||||
}));
|
}));
|
||||||
|
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLGetFBOCallback(
|
context.SetGLGetFBOCallback([](FlutterFrameInfo frame_info) {
|
||||||
[](FlutterFrameInfo frame_info) {
|
|
||||||
// width and height are rotated by 90 deg
|
// width and height are rotated by 90 deg
|
||||||
ASSERT_EQ(frame_info.size.width, event.height);
|
ASSERT_EQ(frame_info.size.width, event.height);
|
||||||
ASSERT_EQ(frame_info.size.height, event.width);
|
ASSERT_EQ(frame_info.size.height, event.width);
|
||||||
@ -3565,98 +3558,101 @@ TEST_F(EmbedderTest, FrameInfoContainsValidWidthAndHeight) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, MustNotRunWithBothFBOCallbacksSet) {
|
TEST_F(EmbedderTest, MustNotRunWithBothFBOCallbacksSet) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
|
context.SetOpenGLFBOCallBack();
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 1024));
|
builder.SetSurface(SkISize::Make(600, 1024));
|
||||||
builder.SetOpenGLFBOCallBack();
|
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_FALSE(engine.is_valid());
|
ASSERT_FALSE(engine.is_valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, MustNotRunWithBothPresentCallbacksSet) {
|
TEST_F(EmbedderTest, MustNotRunWithBothPresentCallbacksSet) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
|
context.SetOpenGLPresentCallBack();
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 1024));
|
builder.SetSurface(SkISize::Make(600, 1024));
|
||||||
builder.SetOpenGLPresentCallBack();
|
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_FALSE(engine.is_valid());
|
ASSERT_FALSE(engine.is_valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, MustStillRunWhenPopulateExistingDamageIsNotProvided) {
|
TEST_F(EmbedderTest, MustStillRunWhenPopulateExistingDamageIsNotProvided) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
|
context.GetRendererConfig().open_gl.populate_existing_damage = nullptr;
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(1, 1));
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage = nullptr;
|
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, MustRunWhenPopulateExistingDamageIsProvided) {
|
TEST_F(EmbedderTest, MustRunWhenPopulateExistingDamageIsProvided) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
context.GetRendererConfig().open_gl.populate_existing_damage =
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(1, 1));
|
|
||||||
|
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage =
|
|
||||||
[](void* context, const intptr_t id,
|
[](void* context, const intptr_t id,
|
||||||
FlutterDamage* existing_damage) -> void {
|
FlutterDamage* existing_damage) -> void {
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
->GLPopulateExistingDamage(id, existing_damage);
|
->GLPopulateExistingDamage(id, existing_damage);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, MustRunWithPopulateExistingDamageAndFBOCallback) {
|
TEST_F(EmbedderTest, MustRunWithPopulateExistingDamageAndFBOCallback) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
context.GetRendererConfig().open_gl.fbo_callback =
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(1, 1));
|
|
||||||
builder.GetRendererConfig().open_gl.fbo_callback =
|
|
||||||
[](void* context) -> uint32_t { return 0; };
|
[](void* context) -> uint32_t { return 0; };
|
||||||
builder.GetRendererConfig().open_gl.fbo_with_frame_info_callback = nullptr;
|
context.GetRendererConfig().open_gl.fbo_with_frame_info_callback = nullptr;
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage =
|
context.GetRendererConfig().open_gl.populate_existing_damage =
|
||||||
[](void* context, const intptr_t id,
|
[](void* context, const intptr_t id,
|
||||||
FlutterDamage* existing_damage) -> void {
|
FlutterDamage* existing_damage) -> void {
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
->GLPopulateExistingDamage(id, existing_damage);
|
->GLPopulateExistingDamage(id, existing_damage);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest,
|
TEST_F(EmbedderTest,
|
||||||
MustNotRunWhenPopulateExistingDamageButNoOtherFBOCallback) {
|
MustNotRunWhenPopulateExistingDamageButNoOtherFBOCallback) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
context.GetRendererConfig().open_gl.fbo_callback = nullptr;
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(1, 1));
|
context.GetRendererConfig().open_gl.fbo_with_frame_info_callback = nullptr;
|
||||||
builder.GetRendererConfig().open_gl.fbo_callback = nullptr;
|
context.GetRendererConfig().open_gl.populate_existing_damage =
|
||||||
builder.GetRendererConfig().open_gl.fbo_with_frame_info_callback = nullptr;
|
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage =
|
|
||||||
[](void* context, const intptr_t id,
|
[](void* context, const intptr_t id,
|
||||||
FlutterDamage* existing_damage) -> void {
|
FlutterDamage* existing_damage) -> void {
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
->GLPopulateExistingDamage(id, existing_damage);
|
->GLPopulateExistingDamage(id, existing_damage);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_FALSE(engine.is_valid());
|
ASSERT_FALSE(engine.is_valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, PresentInfoContainsValidFBOId) {
|
TEST_F(EmbedderTest, PresentInfoContainsValidFBOId) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(600, 1024));
|
builder.SetSurface(SkISize::Make(600, 1024));
|
||||||
builder.SetDartEntrypoint("push_frames_over_and_over");
|
builder.SetDartEntrypoint("push_frames_over_and_over");
|
||||||
|
|
||||||
const auto root_surface_transformation =
|
const auto root_surface_transformation =
|
||||||
@ -3683,9 +3679,8 @@ TEST_F(EmbedderTest, PresentInfoContainsValidFBOId) {
|
|||||||
/* Nothing to do. */
|
/* Nothing to do. */
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const uint32_t window_fbo_id =
|
const uint32_t window_fbo_id = context.GetWindowFBOId();
|
||||||
static_cast<EmbedderTestContextGL&>(context).GetWindowFBOId();
|
context.SetGLPresentCallback(
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
|
||||||
[window_fbo_id = window_fbo_id](FlutterPresentInfo present_info) {
|
[window_fbo_id = window_fbo_id](FlutterPresentInfo present_info) {
|
||||||
ASSERT_EQ(present_info.fbo_id, window_fbo_id);
|
ASSERT_EQ(present_info.fbo_id, window_fbo_id);
|
||||||
|
|
||||||
@ -3697,21 +3692,16 @@ TEST_F(EmbedderTest, PresentInfoContainsValidFBOId) {
|
|||||||
|
|
||||||
TEST_F(EmbedderTest,
|
TEST_F(EmbedderTest,
|
||||||
PresentInfoReceivesFullDamageWhenExistingDamageIsWholeScreen) {
|
PresentInfoReceivesFullDamageWhenExistingDamageIsWholeScreen) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
context.GetRendererConfig().open_gl.populate_existing_damage =
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
|
||||||
builder.SetDartEntrypoint("render_gradient_retained");
|
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage =
|
|
||||||
[](void* context, const intptr_t id,
|
[](void* context, const intptr_t id,
|
||||||
FlutterDamage* existing_damage) -> void {
|
FlutterDamage* existing_damage) -> void {
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
->GLPopulateExistingDamage(id, existing_damage);
|
->GLPopulateExistingDamage(id, existing_damage);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Return existing damage as the entire screen on purpose.
|
// Return existing damage as the entire screen on purpose.
|
||||||
static_cast<EmbedderTestContextGL&>(context)
|
context.SetGLPopulateExistingDamageCallback(
|
||||||
.SetGLPopulateExistingDamageCallback(
|
|
||||||
[](const intptr_t id, FlutterDamage* existing_damage_ptr) {
|
[](const intptr_t id, FlutterDamage* existing_damage_ptr) {
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
// The array must be valid after the callback returns.
|
// The array must be valid after the callback returns.
|
||||||
@ -3721,14 +3711,16 @@ TEST_F(EmbedderTest,
|
|||||||
existing_damage_ptr->damage = existing_damage_rects;
|
existing_damage_ptr->damage = existing_damage_rects;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
builder.SetDartEntrypoint("render_gradient_retained");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
|
|
||||||
// First frame should be entirely rerendered.
|
// First frame should be entirely rerendered.
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback([&](FlutterPresentInfo present_info) {
|
||||||
[&](FlutterPresentInfo present_info) {
|
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
||||||
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
||||||
@ -3758,8 +3750,7 @@ TEST_F(EmbedderTest,
|
|||||||
// Because it's the same as the first frame, the second frame damage should
|
// Because it's the same as the first frame, the second frame damage should
|
||||||
// be empty but, because there was a full existing buffer damage, the buffer
|
// be empty but, because there was a full existing buffer damage, the buffer
|
||||||
// damage should be the entire screen.
|
// damage should be the entire screen.
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback([&](FlutterPresentInfo present_info) {
|
||||||
[&](FlutterPresentInfo present_info) {
|
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
||||||
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
||||||
@ -3782,21 +3773,16 @@ TEST_F(EmbedderTest,
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, PresentInfoReceivesEmptyDamage) {
|
TEST_F(EmbedderTest, PresentInfoReceivesEmptyDamage) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
context.GetRendererConfig().open_gl.populate_existing_damage =
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
|
||||||
builder.SetDartEntrypoint("render_gradient_retained");
|
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage =
|
|
||||||
[](void* context, const intptr_t id,
|
[](void* context, const intptr_t id,
|
||||||
FlutterDamage* existing_damage) -> void {
|
FlutterDamage* existing_damage) -> void {
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
->GLPopulateExistingDamage(id, existing_damage);
|
->GLPopulateExistingDamage(id, existing_damage);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Return no existing damage on purpose.
|
// Return no existing damage on purpose.
|
||||||
static_cast<EmbedderTestContextGL&>(context)
|
context.SetGLPopulateExistingDamageCallback(
|
||||||
.SetGLPopulateExistingDamageCallback(
|
|
||||||
[](const intptr_t id, FlutterDamage* existing_damage_ptr) {
|
[](const intptr_t id, FlutterDamage* existing_damage_ptr) {
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
// The array must be valid after the callback returns.
|
// The array must be valid after the callback returns.
|
||||||
@ -3806,14 +3792,16 @@ TEST_F(EmbedderTest, PresentInfoReceivesEmptyDamage) {
|
|||||||
existing_damage_ptr->damage = existing_damage_rects;
|
existing_damage_ptr->damage = existing_damage_rects;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
builder.SetDartEntrypoint("render_gradient_retained");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
|
|
||||||
// First frame should be entirely rerendered.
|
// First frame should be entirely rerendered.
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback([&](FlutterPresentInfo present_info) {
|
||||||
[&](FlutterPresentInfo present_info) {
|
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
||||||
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
||||||
@ -3842,8 +3830,7 @@ TEST_F(EmbedderTest, PresentInfoReceivesEmptyDamage) {
|
|||||||
|
|
||||||
// Because it's the same as the first frame, the second frame should not be
|
// Because it's the same as the first frame, the second frame should not be
|
||||||
// rerendered assuming there is no existing damage.
|
// rerendered assuming there is no existing damage.
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback([&](FlutterPresentInfo present_info) {
|
||||||
[&](FlutterPresentInfo present_info) {
|
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
||||||
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
||||||
@ -3866,21 +3853,16 @@ TEST_F(EmbedderTest, PresentInfoReceivesEmptyDamage) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, PresentInfoReceivesPartialDamage) {
|
TEST_F(EmbedderTest, PresentInfoReceivesPartialDamage) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
context.GetRendererConfig().open_gl.populate_existing_damage =
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
|
||||||
builder.SetDartEntrypoint("render_gradient_retained");
|
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage =
|
|
||||||
[](void* context, const intptr_t id,
|
[](void* context, const intptr_t id,
|
||||||
FlutterDamage* existing_damage) -> void {
|
FlutterDamage* existing_damage) -> void {
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
->GLPopulateExistingDamage(id, existing_damage);
|
->GLPopulateExistingDamage(id, existing_damage);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Return existing damage as only part of the screen on purpose.
|
// Return existing damage as only part of the screen on purpose.
|
||||||
static_cast<EmbedderTestContextGL&>(context)
|
context.SetGLPopulateExistingDamageCallback(
|
||||||
.SetGLPopulateExistingDamageCallback(
|
|
||||||
[&](const intptr_t id, FlutterDamage* existing_damage_ptr) {
|
[&](const intptr_t id, FlutterDamage* existing_damage_ptr) {
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
// The array must be valid after the callback returns.
|
// The array must be valid after the callback returns.
|
||||||
@ -3890,14 +3872,16 @@ TEST_F(EmbedderTest, PresentInfoReceivesPartialDamage) {
|
|||||||
existing_damage_ptr->damage = existing_damage_rects;
|
existing_damage_ptr->damage = existing_damage_rects;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
builder.SetDartEntrypoint("render_gradient_retained");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
|
|
||||||
// First frame should be entirely rerendered.
|
// First frame should be entirely rerendered.
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback([&](FlutterPresentInfo present_info) {
|
||||||
[&](FlutterPresentInfo present_info) {
|
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
||||||
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
||||||
@ -3927,8 +3911,7 @@ TEST_F(EmbedderTest, PresentInfoReceivesPartialDamage) {
|
|||||||
// Because it's the same as the first frame, the second frame damage should be
|
// Because it's the same as the first frame, the second frame damage should be
|
||||||
// empty but, because there was a partial existing damage, the buffer damage
|
// empty but, because there was a partial existing damage, the buffer damage
|
||||||
// should represent that partial damage area.
|
// should represent that partial damage area.
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback([&](FlutterPresentInfo present_info) {
|
||||||
[&](FlutterPresentInfo present_info) {
|
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
||||||
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
||||||
@ -3951,25 +3934,23 @@ TEST_F(EmbedderTest, PresentInfoReceivesPartialDamage) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, PopulateExistingDamageReceivesValidID) {
|
TEST_F(EmbedderTest, PopulateExistingDamageReceivesValidID) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
context.GetRendererConfig().open_gl.populate_existing_damage =
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
|
||||||
builder.SetDartEntrypoint("render_gradient_retained");
|
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage =
|
|
||||||
[](void* context, const intptr_t id,
|
[](void* context, const intptr_t id,
|
||||||
FlutterDamage* existing_damage) -> void {
|
FlutterDamage* existing_damage) -> void {
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
->GLPopulateExistingDamage(id, existing_damage);
|
->GLPopulateExistingDamage(id, existing_damage);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
builder.SetDartEntrypoint("render_gradient_retained");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
|
|
||||||
const uint32_t window_fbo_id =
|
const uint32_t window_fbo_id = context.GetWindowFBOId();
|
||||||
static_cast<EmbedderTestContextGL&>(context).GetWindowFBOId();
|
context.SetGLPopulateExistingDamageCallback(
|
||||||
static_cast<EmbedderTestContextGL&>(context)
|
|
||||||
.SetGLPopulateExistingDamageCallback(
|
|
||||||
[window_fbo_id = window_fbo_id](intptr_t id,
|
[window_fbo_id = window_fbo_id](intptr_t id,
|
||||||
FlutterDamage* existing_damage) {
|
FlutterDamage* existing_damage) {
|
||||||
ASSERT_EQ(id, window_fbo_id);
|
ASSERT_EQ(id, window_fbo_id);
|
||||||
@ -3988,24 +3969,23 @@ TEST_F(EmbedderTest, PopulateExistingDamageReceivesValidID) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(EmbedderTest, PopulateExistingDamageReceivesInvalidID) {
|
TEST_F(EmbedderTest, PopulateExistingDamageReceivesInvalidID) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
context.GetRendererConfig().open_gl.populate_existing_damage =
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
|
||||||
builder.SetDartEntrypoint("render_gradient_retained");
|
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage =
|
|
||||||
[](void* context, const intptr_t id,
|
[](void* context, const intptr_t id,
|
||||||
FlutterDamage* existing_damage) -> void {
|
FlutterDamage* existing_damage) -> void {
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
->GLPopulateExistingDamage(id, existing_damage);
|
->GLPopulateExistingDamage(id, existing_damage);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Return a bad FBO ID on purpose.
|
// Return a bad FBO ID on purpose.
|
||||||
builder.GetRendererConfig().open_gl.fbo_with_frame_info_callback =
|
context.GetRendererConfig().open_gl.fbo_with_frame_info_callback =
|
||||||
[](void* context, const FlutterFrameInfo* frame_info) -> uint32_t {
|
[](void* context, const FlutterFrameInfo* frame_info) -> uint32_t {
|
||||||
return 123;
|
return 123;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
builder.SetDartEntrypoint("render_gradient_retained");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
|
|
||||||
@ -4014,10 +3994,8 @@ TEST_F(EmbedderTest, PopulateExistingDamageReceivesInvalidID) {
|
|||||||
/* Nothing to do. */
|
/* Nothing to do. */
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const uint32_t window_fbo_id =
|
const uint32_t window_fbo_id = context.GetWindowFBOId();
|
||||||
static_cast<EmbedderTestContextGL&>(context).GetWindowFBOId();
|
context.SetGLPopulateExistingDamageCallback(
|
||||||
static_cast<EmbedderTestContextGL&>(context)
|
|
||||||
.SetGLPopulateExistingDamageCallback(
|
|
||||||
[window_fbo_id = window_fbo_id](intptr_t id,
|
[window_fbo_id = window_fbo_id](intptr_t id,
|
||||||
FlutterDamage* existing_damage) {
|
FlutterDamage* existing_damage) {
|
||||||
ASSERT_NE(id, window_fbo_id);
|
ASSERT_NE(id, window_fbo_id);
|
||||||
@ -4039,7 +4017,7 @@ TEST_F(EmbedderTest, SetSingleDisplayConfigurationWithDisplayId) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("empty_scene");
|
builder.SetDartEntrypoint("empty_scene");
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
@ -4081,7 +4059,7 @@ TEST_F(EmbedderTest, SetSingleDisplayConfigurationWithoutDisplayId) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("empty_scene");
|
builder.SetDartEntrypoint("empty_scene");
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
@ -4123,7 +4101,7 @@ TEST_F(EmbedderTest, SetValidMultiDisplayConfiguration) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("empty_scene");
|
builder.SetDartEntrypoint("empty_scene");
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
@ -4172,7 +4150,7 @@ TEST_F(EmbedderTest, MultipleDisplaysWithSingleDisplayTrueIsInvalid) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("empty_scene");
|
builder.SetDartEntrypoint("empty_scene");
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
@ -4218,7 +4196,7 @@ TEST_F(EmbedderTest, MultipleDisplaysWithSameDisplayIdIsInvalid) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("empty_scene");
|
builder.SetDartEntrypoint("empty_scene");
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
@ -4264,7 +4242,7 @@ TEST_F(EmbedderTest, CompositorRenderTargetsNotRecycledWhenAvoidsCacheSet) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(300, 200));
|
builder.SetSurface(SkISize::Make(300, 200));
|
||||||
builder.SetCompositor(/*avoid_backing_store_cache=*/true);
|
builder.SetCompositor(/*avoid_backing_store_cache=*/true);
|
||||||
builder.SetDartEntrypoint("render_targets_are_recycled");
|
builder.SetDartEntrypoint("render_targets_are_recycled");
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
@ -4312,7 +4290,7 @@ TEST_F(EmbedderTest, SnapshotRenderTargetScalesDownToDriverMax) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
|
|
||||||
auto max_size = context.GetCompositor().GetGrContext()->maxRenderTargetSize();
|
auto max_size = context.GetCompositor().GetGrContext()->maxRenderTargetSize();
|
||||||
@ -4354,7 +4332,7 @@ TEST_F(EmbedderTest, SnapshotRenderTargetScalesDownToDriverMax) {
|
|||||||
TEST_F(EmbedderTest, ObjectsPostedViaPortsServicedOnSecondaryTaskHeap) {
|
TEST_F(EmbedderTest, ObjectsPostedViaPortsServicedOnSecondaryTaskHeap) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 1024));
|
builder.SetSurface(SkISize::Make(800, 1024));
|
||||||
builder.SetDartEntrypoint("objects_can_be_posted");
|
builder.SetDartEntrypoint("objects_can_be_posted");
|
||||||
|
|
||||||
// Synchronously acquire the send port from the Dart end. We will be using
|
// Synchronously acquire the send port from the Dart end. We will be using
|
||||||
@ -4404,7 +4382,7 @@ TEST_F(EmbedderTest, ObjectsPostedViaPortsServicedOnSecondaryTaskHeap) {
|
|||||||
TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLTexture) {
|
TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLTexture) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture);
|
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture);
|
||||||
@ -4467,7 +4445,7 @@ TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLTexture) {
|
|||||||
TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLFramebuffer) {
|
TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLFramebuffer) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer);
|
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer);
|
||||||
@ -4530,7 +4508,7 @@ TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLFramebuffer) {
|
|||||||
TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLSurface) {
|
TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLSurface) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface);
|
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface);
|
||||||
@ -4650,21 +4628,20 @@ TEST_F(EmbedderTest, ExternalTextureGLRefreshedTooOften) {
|
|||||||
TEST_F(
|
TEST_F(
|
||||||
EmbedderTest,
|
EmbedderTest,
|
||||||
PresentInfoReceivesFullScreenDamageWhenPopulateExistingDamageIsNotProvided) {
|
PresentInfoReceivesFullScreenDamageWhenPopulateExistingDamageIsNotProvided) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
|
context.GetRendererConfig().open_gl.populate_existing_damage = nullptr;
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetDartEntrypoint("render_gradient_retained");
|
builder.SetDartEntrypoint("render_gradient_retained");
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage = nullptr;
|
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
|
|
||||||
// First frame should be entirely rerendered.
|
// First frame should be entirely rerendered.
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback([&](FlutterPresentInfo present_info) {
|
||||||
[&](FlutterPresentInfo present_info) {
|
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
||||||
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
||||||
@ -4694,8 +4671,7 @@ TEST_F(
|
|||||||
// Since populate_existing_damage is not provided, the partial repaint
|
// Since populate_existing_damage is not provided, the partial repaint
|
||||||
// functionality is actually disabled. So, the next frame should be entirely
|
// functionality is actually disabled. So, the next frame should be entirely
|
||||||
// new frame.
|
// new frame.
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback([&](FlutterPresentInfo present_info) {
|
||||||
[&](FlutterPresentInfo present_info) {
|
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
||||||
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
||||||
@ -4719,21 +4695,16 @@ TEST_F(
|
|||||||
|
|
||||||
TEST_F(EmbedderTest,
|
TEST_F(EmbedderTest,
|
||||||
PresentInfoReceivesJoinedDamageWhenExistingDamageContainsMultipleRects) {
|
PresentInfoReceivesJoinedDamageWhenExistingDamageContainsMultipleRects) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = static_cast<EmbedderTestContextGL&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kOpenGLContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
context.GetRendererConfig().open_gl.populate_existing_damage =
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
|
||||||
builder.SetDartEntrypoint("render_gradient_retained");
|
|
||||||
builder.GetRendererConfig().open_gl.populate_existing_damage =
|
|
||||||
[](void* context, const intptr_t id,
|
[](void* context, const intptr_t id,
|
||||||
FlutterDamage* existing_damage) -> void {
|
FlutterDamage* existing_damage) -> void {
|
||||||
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
->GLPopulateExistingDamage(id, existing_damage);
|
->GLPopulateExistingDamage(id, existing_damage);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Return existing damage as the entire screen on purpose.
|
// Return existing damage as the entire screen on purpose.
|
||||||
static_cast<EmbedderTestContextGL&>(context)
|
context.SetGLPopulateExistingDamageCallback(
|
||||||
.SetGLPopulateExistingDamageCallback(
|
|
||||||
[](const intptr_t id, FlutterDamage* existing_damage_ptr) {
|
[](const intptr_t id, FlutterDamage* existing_damage_ptr) {
|
||||||
const size_t num_rects = 2;
|
const size_t num_rects = 2;
|
||||||
// The array must be valid after the callback returns.
|
// The array must be valid after the callback returns.
|
||||||
@ -4745,14 +4716,16 @@ TEST_F(EmbedderTest,
|
|||||||
existing_damage_ptr->damage = existing_damage_rects;
|
existing_damage_ptr->damage = existing_damage_rects;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
builder.SetDartEntrypoint("render_gradient_retained");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
|
|
||||||
// First frame should be entirely rerendered.
|
// First frame should be entirely rerendered.
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback([&](FlutterPresentInfo present_info) {
|
||||||
[&](FlutterPresentInfo present_info) {
|
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
||||||
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
||||||
@ -4782,8 +4755,7 @@ TEST_F(EmbedderTest,
|
|||||||
// Because it's the same as the first frame, the second frame damage should
|
// Because it's the same as the first frame, the second frame damage should
|
||||||
// be empty but, because there was a full existing buffer damage, the buffer
|
// be empty but, because there was a full existing buffer damage, the buffer
|
||||||
// damage should be the entire screen.
|
// damage should be the entire screen.
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback([&](FlutterPresentInfo present_info) {
|
||||||
[&](FlutterPresentInfo present_info) {
|
|
||||||
const size_t num_rects = 1;
|
const size_t num_rects = 1;
|
||||||
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
ASSERT_EQ(present_info.frame_damage.num_rects, num_rects);
|
||||||
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
ASSERT_EQ(present_info.frame_damage.damage->left, 0);
|
||||||
@ -4811,14 +4783,14 @@ TEST_F(EmbedderTest, CanRenderWithImpellerOpenGL) {
|
|||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
bool present_called = false;
|
bool present_called = false;
|
||||||
static_cast<EmbedderTestContextGL&>(context).SetGLPresentCallback(
|
context.SetGLPresentCallback(
|
||||||
[&present_called](FlutterPresentInfo present_info) {
|
[&present_called](FlutterPresentInfo present_info) {
|
||||||
present_called = true;
|
present_called = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.AddCommandLineArgument("--enable-impeller");
|
builder.AddCommandLineArgument("--enable-impeller");
|
||||||
builder.SetDartEntrypoint("render_impeller_test");
|
builder.SetDartEntrypoint("render_impeller_test");
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer);
|
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer);
|
||||||
@ -4869,7 +4841,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderToOpenGLSurface) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views");
|
builder.SetDartEntrypoint("can_composite_platform_views");
|
||||||
|
|
||||||
@ -4985,7 +4957,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderKnownSceneToOpenGLSurfaces) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views_with_known_scene");
|
builder.SetDartEntrypoint("can_composite_platform_views_with_known_scene");
|
||||||
|
|
||||||
@ -5197,7 +5169,6 @@ INSTANTIATE_TEST_SUITE_P(
|
|||||||
::testing::Values(EmbedderTestContextType::kOpenGLContext,
|
::testing::Values(EmbedderTestContextType::kOpenGLContext,
|
||||||
EmbedderTestContextType::kVulkanContext));
|
EmbedderTestContextType::kVulkanContext));
|
||||||
|
|
||||||
} // namespace testing
|
} // namespace flutter::testing
|
||||||
} // namespace flutter
|
|
||||||
|
|
||||||
// NOLINTEND(clang-analyzer-core.StackAddressEscape)
|
// NOLINTEND(clang-analyzer-core.StackAddressEscape)
|
||||||
|
@ -39,9 +39,8 @@ TEST_F(EmbedderTest, CanRenderGradientWithMetal) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("render_gradient");
|
builder.SetDartEntrypoint("render_gradient");
|
||||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
|
||||||
auto rendered_scene = context.GetNextSceneImage();
|
auto rendered_scene = context.GetNextSceneImage();
|
||||||
|
|
||||||
@ -108,7 +107,7 @@ TEST_F(EmbedderTest, ExternalTextureMetal) {
|
|||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("render_texture");
|
builder.SetDartEntrypoint("render_texture");
|
||||||
builder.SetMetalRendererConfig(texture_size);
|
builder.SetSurface(texture_size);
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
@ -132,7 +131,7 @@ TEST_F(EmbedderTest, MetalCompositorMustBeAbleToRenderPlatformViews) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views");
|
builder.SetDartEntrypoint("can_composite_platform_views");
|
||||||
|
|
||||||
@ -245,7 +244,7 @@ TEST_F(EmbedderTest, CanRenderSceneWithoutCustomCompositorMetal) {
|
|||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
|
|
||||||
builder.SetDartEntrypoint("can_render_scene_without_custom_compositor");
|
builder.SetDartEntrypoint("can_render_scene_without_custom_compositor");
|
||||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
|
||||||
auto rendered_scene = context.GetNextSceneImage();
|
auto rendered_scene = context.GetNextSceneImage();
|
||||||
|
|
||||||
@ -267,7 +266,7 @@ TEST_F(EmbedderTest, TextureDestructionCallbackCalledWithoutCustomCompositorMeta
|
|||||||
EmbedderTestContextMetal& context = reinterpret_cast<EmbedderTestContextMetal&>(
|
EmbedderTestContextMetal& context = reinterpret_cast<EmbedderTestContextMetal&>(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kMetalContext));
|
GetEmbedderContext(EmbedderTestContextType::kMetalContext));
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetDartEntrypoint("texture_destruction_callback_called_without_custom_compositor");
|
builder.SetDartEntrypoint("texture_destruction_callback_called_without_custom_compositor");
|
||||||
|
|
||||||
struct CollectContext {
|
struct CollectContext {
|
||||||
@ -317,7 +316,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderKnownSceneMetal) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views_with_known_scene");
|
builder.SetDartEntrypoint("can_composite_platform_views_with_known_scene");
|
||||||
|
|
||||||
@ -513,7 +512,7 @@ TEST_F(EmbedderTest, CompositorMustBeAbleToRenderKnownSceneMetal) {
|
|||||||
TEST_F(EmbedderTest, CreateInvalidBackingstoreMetalTexture) {
|
TEST_F(EmbedderTest, CreateInvalidBackingstoreMetalTexture) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetRenderTargetType(EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture);
|
builder.SetRenderTargetType(EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture);
|
||||||
builder.SetDartEntrypoint("invalid_backingstore");
|
builder.SetDartEntrypoint("invalid_backingstore");
|
||||||
@ -621,7 +620,7 @@ TEST_F(EmbedderTest, CanRenderWithImpellerMetal) {
|
|||||||
|
|
||||||
builder.AddCommandLineArgument("--enable-impeller");
|
builder.AddCommandLineArgument("--enable-impeller");
|
||||||
builder.SetDartEntrypoint("render_impeller_test");
|
builder.SetDartEntrypoint("render_impeller_test");
|
||||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
|
||||||
auto rendered_scene = context.GetNextSceneImage();
|
auto rendered_scene = context.GetNextSceneImage();
|
||||||
|
|
||||||
@ -646,7 +645,7 @@ TEST_F(EmbedderTest, CanRenderTextWithImpellerMetal) {
|
|||||||
|
|
||||||
builder.AddCommandLineArgument("--enable-impeller");
|
builder.AddCommandLineArgument("--enable-impeller");
|
||||||
builder.SetDartEntrypoint("render_impeller_text_test");
|
builder.SetDartEntrypoint("render_impeller_text_test");
|
||||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
|
|
||||||
auto rendered_scene = context.GetNextSceneImage();
|
auto rendered_scene = context.GetNextSceneImage();
|
||||||
|
|
||||||
@ -671,7 +670,7 @@ TEST_F(EmbedderTest, CanRenderTextWithImpellerAndCompositorMetal) {
|
|||||||
|
|
||||||
builder.AddCommandLineArgument("--enable-impeller");
|
builder.AddCommandLineArgument("--enable-impeller");
|
||||||
builder.SetDartEntrypoint("render_impeller_text_test");
|
builder.SetDartEntrypoint("render_impeller_text_test");
|
||||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
|
|
||||||
builder.SetRenderTargetType(EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture);
|
builder.SetRenderTargetType(EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture);
|
||||||
|
@ -96,6 +96,10 @@ void EmbedderTestContext::SetRootSurfaceTransformation(SkMatrix matrix) {
|
|||||||
root_surface_transformation_ = matrix;
|
root_surface_transformation_ = matrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FlutterRendererConfig& EmbedderTestContext::GetRendererConfig() {
|
||||||
|
return renderer_config_;
|
||||||
|
}
|
||||||
|
|
||||||
void EmbedderTestContext::AddIsolateCreateCallback(
|
void EmbedderTestContext::AddIsolateCreateCallback(
|
||||||
const fml::closure& closure) {
|
const fml::closure& closure) {
|
||||||
if (closure) {
|
if (closure) {
|
||||||
|
@ -72,9 +72,7 @@ class EmbedderTestContext {
|
|||||||
|
|
||||||
void SetRootSurfaceTransformation(SkMatrix matrix);
|
void SetRootSurfaceTransformation(SkMatrix matrix);
|
||||||
|
|
||||||
void SetRenderTargetType(
|
FlutterRendererConfig& GetRendererConfig();
|
||||||
EmbedderTestBackingStoreProducer::RenderTargetType type,
|
|
||||||
FlutterSoftwarePixelFormat software_pixfmt);
|
|
||||||
|
|
||||||
void AddIsolateCreateCallback(const fml::closure& closure);
|
void AddIsolateCreateCallback(const fml::closure& closure);
|
||||||
|
|
||||||
@ -129,6 +127,7 @@ class EmbedderTestContext {
|
|||||||
UniqueAOTData aot_data_;
|
UniqueAOTData aot_data_;
|
||||||
std::vector<fml::closure> isolate_create_callbacks_;
|
std::vector<fml::closure> isolate_create_callbacks_;
|
||||||
std::shared_ptr<TestDartNativeResolver> native_resolver_;
|
std::shared_ptr<TestDartNativeResolver> native_resolver_;
|
||||||
|
FlutterRendererConfig renderer_config_ = {};
|
||||||
SemanticsUpdateCallback2 update_semantics_callback2_;
|
SemanticsUpdateCallback2 update_semantics_callback2_;
|
||||||
SemanticsUpdateCallback update_semantics_callback_;
|
SemanticsUpdateCallback update_semantics_callback_;
|
||||||
SemanticsNodeCallback update_semantics_node_callback_;
|
SemanticsNodeCallback update_semantics_node_callback_;
|
||||||
@ -163,6 +162,8 @@ class EmbedderTestContext {
|
|||||||
|
|
||||||
void SetupAOTDataIfNecessary();
|
void SetupAOTDataIfNecessary();
|
||||||
|
|
||||||
|
virtual void SetSurface(SkISize surface_size) = 0;
|
||||||
|
|
||||||
virtual void SetupCompositor() = 0;
|
virtual void SetupCompositor() = 0;
|
||||||
|
|
||||||
void FireIsolateCreateCallbacks();
|
void FireIsolateCreateCallbacks();
|
||||||
@ -178,8 +179,6 @@ class EmbedderTestContext {
|
|||||||
|
|
||||||
void SetNextSceneCallback(const NextSceneCallback& next_scene_callback);
|
void SetNextSceneCallback(const NextSceneCallback& next_scene_callback);
|
||||||
|
|
||||||
virtual void SetupSurface(SkISize surface_size) = 0;
|
|
||||||
|
|
||||||
FML_DISALLOW_COPY_AND_ASSIGN(EmbedderTestContext);
|
FML_DISALLOW_COPY_AND_ASSIGN(EmbedderTestContext);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_test_context_gl.h"
|
#include "flutter/shell/platform/embedder/tests/embedder_test_context_gl.h"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "flutter/fml/make_copyable.h"
|
#include "flutter/fml/make_copyable.h"
|
||||||
@ -11,26 +12,85 @@
|
|||||||
#include "flutter/runtime/dart_vm.h"
|
#include "flutter/runtime/dart_vm.h"
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_assertions.h"
|
#include "flutter/shell/platform/embedder/tests/embedder_assertions.h"
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.h"
|
#include "flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.h"
|
||||||
#include "flutter/testing/test_gl_surface.h"
|
|
||||||
#include "flutter/testing/testing.h"
|
#include "flutter/testing/testing.h"
|
||||||
#include "tests/embedder_test.h"
|
#include "tests/embedder_test.h"
|
||||||
#include "third_party/dart/runtime/bin/elf_loader.h"
|
#include "third_party/dart/runtime/bin/elf_loader.h"
|
||||||
#include "third_party/skia/include/core/SkSurface.h"
|
#include "third_party/skia/include/core/SkSurface.h"
|
||||||
|
|
||||||
namespace flutter {
|
namespace flutter::testing {
|
||||||
namespace testing {
|
|
||||||
|
|
||||||
EmbedderTestContextGL::EmbedderTestContextGL(std::string assets_path)
|
EmbedderTestContextGL::EmbedderTestContextGL(std::string assets_path)
|
||||||
: EmbedderTestContext(std::move(assets_path)),
|
: EmbedderTestContext(std::move(assets_path)),
|
||||||
egl_context_(std::make_shared<TestEGLContext>()) {}
|
egl_context_(std::make_shared<TestEGLContext>()) {
|
||||||
|
renderer_config_.type = FlutterRendererType::kOpenGL;
|
||||||
|
renderer_config_.open_gl = {
|
||||||
|
.struct_size = sizeof(FlutterOpenGLRendererConfig),
|
||||||
|
.make_current = [](void* context) -> bool {
|
||||||
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
|
->GLMakeCurrent();
|
||||||
|
},
|
||||||
|
.clear_current = [](void* context) -> bool {
|
||||||
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
|
->GLClearCurrent();
|
||||||
|
},
|
||||||
|
.make_resource_current = [](void* context) -> bool {
|
||||||
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
|
->GLMakeResourceCurrent();
|
||||||
|
},
|
||||||
|
.fbo_reset_after_present = true,
|
||||||
|
.surface_transformation = [](void* context) -> FlutterTransformation {
|
||||||
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
|
->GetRootSurfaceTransformation();
|
||||||
|
},
|
||||||
|
.gl_proc_resolver = [](void* context, const char* name) -> void* {
|
||||||
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
|
->GLGetProcAddress(name);
|
||||||
|
},
|
||||||
|
.fbo_with_frame_info_callback =
|
||||||
|
[](void* context, const FlutterFrameInfo* frame_info) -> uint32_t {
|
||||||
|
return reinterpret_cast<EmbedderTestContextGL*>(context)
|
||||||
|
->GLGetFramebuffer(*frame_info);
|
||||||
|
},
|
||||||
|
.present_with_info = [](void* context,
|
||||||
|
const FlutterPresentInfo* present_info) -> bool {
|
||||||
|
return reinterpret_cast<EmbedderTestContextGL*>(context)->GLPresent(
|
||||||
|
*present_info);
|
||||||
|
},
|
||||||
|
.populate_existing_damage = nullptr,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
EmbedderTestContextGL::~EmbedderTestContextGL() {
|
EmbedderTestContextGL::~EmbedderTestContextGL() {
|
||||||
SetGLGetFBOCallback(nullptr);
|
SetGLGetFBOCallback(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmbedderTestContextGL::SetupSurface(SkISize surface_size) {
|
void EmbedderTestContextGL::SetOpenGLFBOCallBack() {
|
||||||
FML_CHECK(!gl_surface_);
|
// SetOpenGLRendererConfig must be called before this.
|
||||||
gl_surface_ = std::make_unique<TestGLSurface>(egl_context_, surface_size);
|
FML_CHECK(renderer_config_.type == FlutterRendererType::kOpenGL);
|
||||||
|
|
||||||
|
renderer_config_.open_gl.fbo_callback = [](void* context) -> uint32_t {
|
||||||
|
FlutterFrameInfo frame_info = {};
|
||||||
|
// fbo_callback doesn't use the frame size information, only
|
||||||
|
// fbo_callback_with_frame_info does.
|
||||||
|
frame_info.struct_size = sizeof(FlutterFrameInfo);
|
||||||
|
frame_info.size.width = 0;
|
||||||
|
frame_info.size.height = 0;
|
||||||
|
return reinterpret_cast<EmbedderTestContextGL*>(context)->GLGetFramebuffer(
|
||||||
|
frame_info);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmbedderTestContextGL::SetOpenGLPresentCallBack() {
|
||||||
|
// SetOpenGLRendererConfig must be called before this.
|
||||||
|
FML_CHECK(renderer_config_.type == FlutterRendererType::kOpenGL);
|
||||||
|
|
||||||
|
renderer_config_.open_gl.present = [](void* context) -> bool {
|
||||||
|
// passing a placeholder fbo_id.
|
||||||
|
return reinterpret_cast<EmbedderTestContextGL*>(context)->GLPresent(
|
||||||
|
FlutterPresentInfo{
|
||||||
|
.fbo_id = 0,
|
||||||
|
});
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EmbedderTestContextGL::GLMakeCurrent() {
|
bool EmbedderTestContextGL::GLMakeCurrent() {
|
||||||
@ -136,6 +196,11 @@ uint32_t EmbedderTestContextGL::GetWindowFBOId() const {
|
|||||||
return gl_surface_->GetWindowFBOId();
|
return gl_surface_->GetWindowFBOId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EmbedderTestContextGL::SetSurface(SkISize surface_size) {
|
||||||
|
FML_CHECK(!gl_surface_);
|
||||||
|
gl_surface_ = std::make_unique<TestGLSurface>(egl_context_, surface_size);
|
||||||
|
}
|
||||||
|
|
||||||
void EmbedderTestContextGL::SetupCompositor() {
|
void EmbedderTestContextGL::SetupCompositor() {
|
||||||
FML_CHECK(!compositor_) << "Already set up a compositor in this context.";
|
FML_CHECK(!compositor_) << "Already set up a compositor in this context.";
|
||||||
FML_CHECK(gl_surface_)
|
FML_CHECK(gl_surface_)
|
||||||
@ -145,5 +210,4 @@ void EmbedderTestContextGL::SetupCompositor() {
|
|||||||
GLClearCurrent();
|
GLClearCurrent();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace testing
|
} // namespace flutter::testing
|
||||||
} // namespace flutter
|
|
||||||
|
@ -30,6 +30,18 @@ class EmbedderTestContextGL : public EmbedderTestContext {
|
|||||||
// |EmbedderTestContext|
|
// |EmbedderTestContext|
|
||||||
EmbedderTestContextType GetContextType() const override;
|
EmbedderTestContextType GetContextType() const override;
|
||||||
|
|
||||||
|
// Used to explicitly set an `open_gl.fbo_callback`. Using this method will
|
||||||
|
// cause your test to fail since the ctor for this class sets
|
||||||
|
// `open_gl.fbo_callback_with_frame_info`. This method exists as a utility to
|
||||||
|
// explicitly test this behavior.
|
||||||
|
void SetOpenGLFBOCallBack();
|
||||||
|
|
||||||
|
// Used to explicitly set an `open_gl.present`. Using this method will cause
|
||||||
|
// your test to fail since the ctor for this class sets
|
||||||
|
// `open_gl.present_with_info`. This method exists as a utility to explicitly
|
||||||
|
// test this behavior.
|
||||||
|
void SetOpenGLPresentCallBack();
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
/// @brief Sets a callback that will be invoked (on the raster task
|
/// @brief Sets a callback that will be invoked (on the raster task
|
||||||
/// runner) when the engine asks the embedder for a new FBO ID at
|
/// runner) when the engine asks the embedder for a new FBO ID at
|
||||||
@ -66,14 +78,12 @@ class EmbedderTestContextGL : public EmbedderTestContext {
|
|||||||
|
|
||||||
void* GLGetProcAddress(const char* name);
|
void* GLGetProcAddress(const char* name);
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void SetupCompositor() override;
|
|
||||||
|
|
||||||
void SetupCompositorUsingGLSurfaces();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// This allows the builder to access the hooks.
|
// |EmbedderTestContext|
|
||||||
friend class EmbedderConfigBuilder;
|
void SetSurface(SkISize surface_size) override;
|
||||||
|
|
||||||
|
// |EmbedderTestContext|
|
||||||
|
void SetupCompositor() override;
|
||||||
|
|
||||||
std::shared_ptr<TestEGLContext> egl_context_;
|
std::shared_ptr<TestEGLContext> egl_context_;
|
||||||
std::unique_ptr<TestGLSurface> gl_surface_;
|
std::unique_ptr<TestGLSurface> gl_surface_;
|
||||||
@ -83,8 +93,6 @@ class EmbedderTestContextGL : public EmbedderTestContext {
|
|||||||
GLPresentCallback gl_present_callback_;
|
GLPresentCallback gl_present_callback_;
|
||||||
GLPopulateExistingDamageCallback gl_populate_existing_damage_callback_;
|
GLPopulateExistingDamageCallback gl_populate_existing_damage_callback_;
|
||||||
|
|
||||||
void SetupSurface(SkISize surface_size) override;
|
|
||||||
|
|
||||||
bool GLMakeCurrent();
|
bool GLMakeCurrent();
|
||||||
|
|
||||||
bool GLClearCurrent();
|
bool GLClearCurrent();
|
||||||
|
@ -35,9 +35,6 @@ class EmbedderTestContextMetal : public EmbedderTestContext {
|
|||||||
// |EmbedderTestContext|
|
// |EmbedderTestContext|
|
||||||
size_t GetSurfacePresentCount() const override;
|
size_t GetSurfacePresentCount() const override;
|
||||||
|
|
||||||
// |EmbedderTestContext|
|
|
||||||
void SetupCompositor() override;
|
|
||||||
|
|
||||||
void SetExternalTextureCallback(
|
void SetExternalTextureCallback(
|
||||||
TestExternalTextureCallback external_texture_frame_callback);
|
TestExternalTextureCallback external_texture_frame_callback);
|
||||||
|
|
||||||
@ -61,8 +58,11 @@ class EmbedderTestContextMetal : public EmbedderTestContext {
|
|||||||
FlutterMetalTexture GetNextDrawable(const FlutterFrameInfo* frame_info);
|
FlutterMetalTexture GetNextDrawable(const FlutterFrameInfo* frame_info);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// This allows the builder to access the hooks.
|
// |EmbedderTestContext|
|
||||||
friend class EmbedderConfigBuilder;
|
void SetSurface(SkISize surface_size) override;
|
||||||
|
|
||||||
|
// |EmbedderTestContext|
|
||||||
|
void SetupCompositor() override;
|
||||||
|
|
||||||
TestExternalTextureCallback external_texture_frame_callback_ = nullptr;
|
TestExternalTextureCallback external_texture_frame_callback_ = nullptr;
|
||||||
SkISize surface_size_ = SkISize::MakeEmpty();
|
SkISize surface_size_ = SkISize::MakeEmpty();
|
||||||
@ -72,8 +72,6 @@ class EmbedderTestContextMetal : public EmbedderTestContext {
|
|||||||
PresentCallback present_callback_ = nullptr;
|
PresentCallback present_callback_ = nullptr;
|
||||||
NextDrawableCallback next_drawable_callback_ = nullptr;
|
NextDrawableCallback next_drawable_callback_ = nullptr;
|
||||||
|
|
||||||
void SetupSurface(SkISize surface_size) override;
|
|
||||||
|
|
||||||
FML_DISALLOW_COPY_AND_ASSIGN(EmbedderTestContextMetal);
|
FML_DISALLOW_COPY_AND_ASSIGN(EmbedderTestContextMetal);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -11,35 +11,41 @@
|
|||||||
#include "flutter/fml/logging.h"
|
#include "flutter/fml/logging.h"
|
||||||
#include "flutter/shell/platform/embedder/tests/embedder_test_compositor_metal.h"
|
#include "flutter/shell/platform/embedder/tests/embedder_test_compositor_metal.h"
|
||||||
|
|
||||||
namespace flutter {
|
namespace flutter::testing {
|
||||||
namespace testing {
|
|
||||||
|
|
||||||
EmbedderTestContextMetal::EmbedderTestContextMetal(std::string assets_path)
|
EmbedderTestContextMetal::EmbedderTestContextMetal(std::string assets_path)
|
||||||
: EmbedderTestContext(std::move(assets_path)) {
|
: EmbedderTestContext(std::move(assets_path)) {
|
||||||
metal_context_ = std::make_unique<TestMetalContext>();
|
metal_context_ = std::make_unique<TestMetalContext>();
|
||||||
|
renderer_config_.type = FlutterRendererType::kMetal;
|
||||||
|
renderer_config_.metal = {
|
||||||
|
.struct_size = sizeof(FlutterMetalRendererConfig),
|
||||||
|
.device = metal_context_->GetMetalDevice(),
|
||||||
|
.present_command_queue = metal_context_->GetMetalCommandQueue(),
|
||||||
|
.get_next_drawable_callback =
|
||||||
|
[](void* user_data, const FlutterFrameInfo* frame_info) {
|
||||||
|
return reinterpret_cast<EmbedderTestContextMetal*>(user_data)->GetNextDrawable(
|
||||||
|
frame_info);
|
||||||
|
},
|
||||||
|
.present_drawable_callback = [](void* user_data, const FlutterMetalTexture* texture) -> bool {
|
||||||
|
return reinterpret_cast<EmbedderTestContextMetal*>(user_data)->Present(texture->texture_id);
|
||||||
|
},
|
||||||
|
.external_texture_frame_callback = [](void* user_data, int64_t texture_id, size_t width,
|
||||||
|
size_t height,
|
||||||
|
FlutterMetalExternalTexture* texture_out) -> bool {
|
||||||
|
return reinterpret_cast<EmbedderTestContextMetal*>(user_data)->PopulateExternalTexture(
|
||||||
|
texture_id, width, height, texture_out);
|
||||||
|
},
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
EmbedderTestContextMetal::~EmbedderTestContextMetal() {}
|
EmbedderTestContextMetal::~EmbedderTestContextMetal() {}
|
||||||
|
|
||||||
void EmbedderTestContextMetal::SetupSurface(SkISize surface_size) {
|
|
||||||
FML_CHECK(surface_size_.isEmpty());
|
|
||||||
surface_size_ = surface_size;
|
|
||||||
metal_surface_ = TestMetalSurface::Create(*metal_context_, surface_size_);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t EmbedderTestContextMetal::GetSurfacePresentCount() const {
|
|
||||||
return present_count_;
|
|
||||||
}
|
|
||||||
|
|
||||||
EmbedderTestContextType EmbedderTestContextMetal::GetContextType() const {
|
EmbedderTestContextType EmbedderTestContextMetal::GetContextType() const {
|
||||||
return EmbedderTestContextType::kMetalContext;
|
return EmbedderTestContextType::kMetalContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmbedderTestContextMetal::SetupCompositor() {
|
size_t EmbedderTestContextMetal::GetSurfacePresentCount() const {
|
||||||
FML_CHECK(!compositor_) << "Already set up a compositor in this context.";
|
return present_count_;
|
||||||
FML_CHECK(metal_surface_) << "Set up the Metal surface before setting up a compositor.";
|
|
||||||
compositor_ =
|
|
||||||
std::make_unique<EmbedderTestCompositorMetal>(surface_size_, metal_surface_->GetGrContext());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TestMetalContext* EmbedderTestContextMetal::GetTestMetalContext() {
|
TestMetalContext* EmbedderTestContextMetal::GetTestMetalContext() {
|
||||||
@ -98,5 +104,17 @@ FlutterMetalTexture EmbedderTestContextMetal::GetNextDrawable(const FlutterFrame
|
|||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace testing
|
void EmbedderTestContextMetal::SetSurface(SkISize surface_size) {
|
||||||
} // namespace flutter
|
FML_CHECK(surface_size_.isEmpty());
|
||||||
|
surface_size_ = surface_size;
|
||||||
|
metal_surface_ = TestMetalSurface::Create(*metal_context_, surface_size_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmbedderTestContextMetal::SetupCompositor() {
|
||||||
|
FML_CHECK(!compositor_) << "Already set up a compositor in this context.";
|
||||||
|
FML_CHECK(metal_surface_) << "Set up the Metal surface before setting up a compositor.";
|
||||||
|
compositor_ =
|
||||||
|
std::make_unique<EmbedderTestCompositorMetal>(surface_size_, metal_surface_->GetGrContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace flutter::testing
|
||||||
|
@ -13,34 +13,43 @@
|
|||||||
#include "flutter/shell/platform/embedder/tests/embedder_test_compositor_software.h"
|
#include "flutter/shell/platform/embedder/tests/embedder_test_compositor_software.h"
|
||||||
#include "flutter/testing/testing.h"
|
#include "flutter/testing/testing.h"
|
||||||
#include "third_party/dart/runtime/bin/elf_loader.h"
|
#include "third_party/dart/runtime/bin/elf_loader.h"
|
||||||
|
#include "third_party/skia/include/core/SkBitmap.h"
|
||||||
#include "third_party/skia/include/core/SkSurface.h"
|
#include "third_party/skia/include/core/SkSurface.h"
|
||||||
|
|
||||||
namespace flutter {
|
namespace flutter::testing {
|
||||||
namespace testing {
|
|
||||||
|
|
||||||
EmbedderTestContextSoftware::EmbedderTestContextSoftware(
|
EmbedderTestContextSoftware::EmbedderTestContextSoftware(
|
||||||
std::string assets_path)
|
std::string assets_path)
|
||||||
: EmbedderTestContext(std::move(assets_path)) {}
|
: EmbedderTestContext(std::move(assets_path)) {
|
||||||
|
renderer_config_.type = FlutterRendererType::kSoftware;
|
||||||
|
renderer_config_.software = {
|
||||||
|
.struct_size = sizeof(FlutterSoftwareRendererConfig),
|
||||||
|
.surface_present_callback =
|
||||||
|
[](void* context, const void* allocation, size_t row_bytes,
|
||||||
|
size_t height) {
|
||||||
|
auto image_info = SkImageInfo::MakeN32Premul(
|
||||||
|
SkISize::Make(row_bytes / 4, height));
|
||||||
|
SkBitmap bitmap;
|
||||||
|
if (!bitmap.installPixels(image_info, const_cast<void*>(allocation),
|
||||||
|
row_bytes)) {
|
||||||
|
FML_LOG(ERROR) << "Could not copy pixels for the software "
|
||||||
|
"composition from the engine.";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bitmap.setImmutable();
|
||||||
|
return reinterpret_cast<EmbedderTestContextSoftware*>(context)
|
||||||
|
->Present(SkImages::RasterFromBitmap(bitmap));
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
EmbedderTestContextSoftware::~EmbedderTestContextSoftware() = default;
|
EmbedderTestContextSoftware::~EmbedderTestContextSoftware() = default;
|
||||||
|
|
||||||
bool EmbedderTestContextSoftware::Present(const sk_sp<SkImage>& image) {
|
|
||||||
software_surface_present_count_++;
|
|
||||||
|
|
||||||
FireRootSurfacePresentCallbackIfPresent([image] { return image; });
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t EmbedderTestContextSoftware::GetSurfacePresentCount() const {
|
|
||||||
return software_surface_present_count_;
|
|
||||||
}
|
|
||||||
|
|
||||||
EmbedderTestContextType EmbedderTestContextSoftware::GetContextType() const {
|
EmbedderTestContextType EmbedderTestContextSoftware::GetContextType() const {
|
||||||
return EmbedderTestContextType::kSoftwareContext;
|
return EmbedderTestContextType::kSoftwareContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmbedderTestContextSoftware::SetupSurface(SkISize surface_size) {
|
void EmbedderTestContextSoftware::SetSurface(SkISize surface_size) {
|
||||||
surface_size_ = surface_size;
|
surface_size_ = surface_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,5 +58,14 @@ void EmbedderTestContextSoftware::SetupCompositor() {
|
|||||||
compositor_ = std::make_unique<EmbedderTestCompositorSoftware>(surface_size_);
|
compositor_ = std::make_unique<EmbedderTestCompositorSoftware>(surface_size_);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace testing
|
size_t EmbedderTestContextSoftware::GetSurfacePresentCount() const {
|
||||||
} // namespace flutter
|
return software_surface_present_count_;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EmbedderTestContextSoftware::Present(const sk_sp<SkImage>& image) {
|
||||||
|
software_surface_present_count_++;
|
||||||
|
FireRootSurfacePresentCallbackIfPresent([image] { return image; });
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace flutter::testing
|
||||||
|
@ -18,21 +18,24 @@ class EmbedderTestContextSoftware : public EmbedderTestContext {
|
|||||||
|
|
||||||
~EmbedderTestContextSoftware() override;
|
~EmbedderTestContextSoftware() override;
|
||||||
|
|
||||||
size_t GetSurfacePresentCount() const override;
|
|
||||||
|
|
||||||
// |EmbedderTestContext|
|
// |EmbedderTestContext|
|
||||||
EmbedderTestContextType GetContextType() const override;
|
EmbedderTestContextType GetContextType() const override;
|
||||||
|
|
||||||
|
// |EmbedderTestContext|
|
||||||
|
size_t GetSurfacePresentCount() const override;
|
||||||
|
|
||||||
bool Present(const sk_sp<SkImage>& image);
|
bool Present(const sk_sp<SkImage>& image);
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void SetupCompositor() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// |EmbedderTestContext|
|
||||||
|
void SetSurface(SkISize surface_size) override;
|
||||||
|
|
||||||
|
// |EmbedderTestContext|
|
||||||
|
void SetupCompositor() override;
|
||||||
|
|
||||||
sk_sp<SkSurface> surface_;
|
sk_sp<SkSurface> surface_;
|
||||||
SkISize surface_size_;
|
SkISize surface_size_;
|
||||||
size_t software_surface_present_count_ = 0;
|
size_t software_surface_present_count_ = 0;
|
||||||
void SetupSurface(SkISize surface_size) override;
|
|
||||||
|
|
||||||
FML_DISALLOW_COPY_AND_ASSIGN(EmbedderTestContextSoftware);
|
FML_DISALLOW_COPY_AND_ASSIGN(EmbedderTestContextSoftware);
|
||||||
};
|
};
|
||||||
|
@ -15,20 +15,52 @@
|
|||||||
#include "flutter/vulkan/vulkan_device.h"
|
#include "flutter/vulkan/vulkan_device.h"
|
||||||
#include "third_party/skia/include/core/SkSurface.h"
|
#include "third_party/skia/include/core/SkSurface.h"
|
||||||
|
|
||||||
namespace flutter {
|
namespace flutter::testing {
|
||||||
namespace testing {
|
|
||||||
|
|
||||||
EmbedderTestContextVulkan::EmbedderTestContextVulkan(std::string assets_path)
|
EmbedderTestContextVulkan::EmbedderTestContextVulkan(std::string assets_path)
|
||||||
: EmbedderTestContext(std::move(assets_path)), surface_() {
|
: EmbedderTestContext(std::move(assets_path)), surface_() {
|
||||||
vulkan_context_ = fml::MakeRefCounted<TestVulkanContext>();
|
vulkan_context_ = fml::MakeRefCounted<TestVulkanContext>();
|
||||||
|
renderer_config_.type = FlutterRendererType::kVulkan;
|
||||||
|
renderer_config_.vulkan = {
|
||||||
|
.struct_size = sizeof(FlutterVulkanRendererConfig),
|
||||||
|
.version = vulkan_context_->application_->GetAPIVersion(),
|
||||||
|
.instance = vulkan_context_->application_->GetInstance(),
|
||||||
|
.physical_device = vulkan_context_->device_->GetPhysicalDeviceHandle(),
|
||||||
|
.device = vulkan_context_->device_->GetHandle(),
|
||||||
|
.queue_family_index = vulkan_context_->device_->GetGraphicsQueueIndex(),
|
||||||
|
.queue = vulkan_context_->device_->GetQueueHandle(),
|
||||||
|
.get_instance_proc_address_callback =
|
||||||
|
EmbedderTestContextVulkan::InstanceProcAddr,
|
||||||
|
.get_next_image_callback =
|
||||||
|
[](void* context,
|
||||||
|
const FlutterFrameInfo* frame_info) -> FlutterVulkanImage {
|
||||||
|
VkImage image =
|
||||||
|
reinterpret_cast<EmbedderTestContextVulkan*>(context)->GetNextImage(
|
||||||
|
{static_cast<int>(frame_info->size.width),
|
||||||
|
static_cast<int>(frame_info->size.height)});
|
||||||
|
return {
|
||||||
|
.struct_size = sizeof(FlutterVulkanImage),
|
||||||
|
.image = reinterpret_cast<uint64_t>(image),
|
||||||
|
.format = VK_FORMAT_R8G8B8A8_UNORM,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
.present_image_callback = [](void* context,
|
||||||
|
const FlutterVulkanImage* image) -> bool {
|
||||||
|
return reinterpret_cast<EmbedderTestContextVulkan*>(context)
|
||||||
|
->PresentImage(reinterpret_cast<VkImage>(image->image));
|
||||||
|
},
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
EmbedderTestContextVulkan::~EmbedderTestContextVulkan() {}
|
EmbedderTestContextVulkan::~EmbedderTestContextVulkan() {}
|
||||||
|
|
||||||
void EmbedderTestContextVulkan::SetupSurface(SkISize surface_size) {
|
EmbedderTestContextType EmbedderTestContextVulkan::GetContextType() const {
|
||||||
FML_CHECK(surface_size_.isEmpty());
|
return EmbedderTestContextType::kVulkanContext;
|
||||||
surface_size_ = surface_size;
|
}
|
||||||
surface_ = TestVulkanSurface::Create(*vulkan_context_, surface_size_);
|
|
||||||
|
void EmbedderTestContextVulkan::SetVulkanInstanceProcAddressCallback(
|
||||||
|
FlutterVulkanInstanceProcAddressCallback callback) {
|
||||||
|
renderer_config_.vulkan.get_instance_proc_address_callback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t EmbedderTestContextVulkan::GetSurfacePresentCount() const {
|
size_t EmbedderTestContextVulkan::GetSurfacePresentCount() const {
|
||||||
@ -46,18 +78,6 @@ bool EmbedderTestContextVulkan::PresentImage(VkImage image) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmbedderTestContextType EmbedderTestContextVulkan::GetContextType() const {
|
|
||||||
return EmbedderTestContextType::kVulkanContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmbedderTestContextVulkan::SetupCompositor() {
|
|
||||||
FML_CHECK(!compositor_) << "Already set up a compositor in this context.";
|
|
||||||
FML_CHECK(surface_)
|
|
||||||
<< "Set up the Vulkan surface before setting up a compositor.";
|
|
||||||
compositor_ = std::make_unique<EmbedderTestCompositorVulkan>(
|
|
||||||
surface_size_, vulkan_context_->GetGrDirectContext());
|
|
||||||
}
|
|
||||||
|
|
||||||
void* EmbedderTestContextVulkan::InstanceProcAddr(
|
void* EmbedderTestContextVulkan::InstanceProcAddr(
|
||||||
void* user_data,
|
void* user_data,
|
||||||
FlutterVulkanInstanceHandle instance,
|
FlutterVulkanInstanceHandle instance,
|
||||||
@ -68,5 +88,18 @@ void* EmbedderTestContextVulkan::InstanceProcAddr(
|
|||||||
return reinterpret_cast<void*>(proc_addr);
|
return reinterpret_cast<void*>(proc_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace testing
|
void EmbedderTestContextVulkan::SetSurface(SkISize surface_size) {
|
||||||
} // namespace flutter
|
FML_CHECK(surface_size_.isEmpty());
|
||||||
|
surface_size_ = surface_size;
|
||||||
|
surface_ = TestVulkanSurface::Create(*vulkan_context_, surface_size_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmbedderTestContextVulkan::SetupCompositor() {
|
||||||
|
FML_CHECK(!compositor_) << "Already set up a compositor in this context.";
|
||||||
|
FML_CHECK(surface_)
|
||||||
|
<< "Set up the Vulkan surface before setting up a compositor.";
|
||||||
|
compositor_ = std::make_unique<EmbedderTestCompositorVulkan>(
|
||||||
|
surface_size_, vulkan_context_->GetGrDirectContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace flutter::testing
|
||||||
|
@ -26,18 +26,24 @@ class EmbedderTestContextVulkan : public EmbedderTestContext {
|
|||||||
// |EmbedderTestContext|
|
// |EmbedderTestContext|
|
||||||
size_t GetSurfacePresentCount() const override;
|
size_t GetSurfacePresentCount() const override;
|
||||||
|
|
||||||
// |EmbedderTestContext|
|
|
||||||
void SetupCompositor() override;
|
|
||||||
|
|
||||||
VkImage GetNextImage(const SkISize& size);
|
VkImage GetNextImage(const SkISize& size);
|
||||||
|
|
||||||
bool PresentImage(VkImage image);
|
bool PresentImage(VkImage image);
|
||||||
|
|
||||||
|
void SetVulkanInstanceProcAddressCallback(
|
||||||
|
FlutterVulkanInstanceProcAddressCallback callback);
|
||||||
|
|
||||||
static void* InstanceProcAddr(void* user_data,
|
static void* InstanceProcAddr(void* user_data,
|
||||||
FlutterVulkanInstanceHandle instance,
|
FlutterVulkanInstanceHandle instance,
|
||||||
const char* name);
|
const char* name);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// |EmbedderTestContext|
|
||||||
|
void SetSurface(SkISize surface_size) override;
|
||||||
|
|
||||||
|
// |EmbedderTestContext|
|
||||||
|
void SetupCompositor() override;
|
||||||
|
|
||||||
// The TestVulkanContext destructor must be called _after_ the compositor is
|
// The TestVulkanContext destructor must be called _after_ the compositor is
|
||||||
// freed.
|
// freed.
|
||||||
fml::RefPtr<TestVulkanContext> vulkan_context_ = nullptr;
|
fml::RefPtr<TestVulkanContext> vulkan_context_ = nullptr;
|
||||||
@ -47,10 +53,6 @@ class EmbedderTestContextVulkan : public EmbedderTestContext {
|
|||||||
SkISize surface_size_ = SkISize::MakeEmpty();
|
SkISize surface_size_ = SkISize::MakeEmpty();
|
||||||
size_t present_count_ = 0;
|
size_t present_count_ = 0;
|
||||||
|
|
||||||
void SetupSurface(SkISize surface_size) override;
|
|
||||||
|
|
||||||
friend class EmbedderConfigBuilder;
|
|
||||||
|
|
||||||
FML_DISALLOW_COPY_AND_ASSIGN(EmbedderTestContextVulkan);
|
FML_DISALLOW_COPY_AND_ASSIGN(EmbedderTestContextVulkan);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ TEST_F(EmbedderTest, CanLaunchAndShutdownWithValidProjectArgs) {
|
|||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
context.AddIsolateCreateCallback([&latch]() { latch.Signal(); });
|
context.AddIsolateCreateCallback([&latch]() { latch.Signal(); });
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
// Wait for the root isolate to launch.
|
// Wait for the root isolate to launch.
|
||||||
@ -81,7 +81,7 @@ TEST_F(EmbedderTest, CanLaunchAndShutdownWithValidProjectArgs) {
|
|||||||
TEST_F(EmbedderTest, DISABLED_CanLaunchAndShutdownMultipleTimes) {
|
TEST_F(EmbedderTest, DISABLED_CanLaunchAndShutdownMultipleTimes) {
|
||||||
EmbedderConfigBuilder builder(
|
EmbedderConfigBuilder builder(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
for (size_t i = 0; i < 3; ++i) {
|
for (size_t i = 0; i < 3; ++i) {
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
@ -97,7 +97,7 @@ TEST_F(EmbedderTest, CanInvokeCustomEntrypoint) {
|
|||||||
};
|
};
|
||||||
context.AddNativeCallback("SayHiFromCustomEntrypoint", entrypoint);
|
context.AddNativeCallback("SayHiFromCustomEntrypoint", entrypoint);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("customEntrypoint");
|
builder.SetDartEntrypoint("customEntrypoint");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
latch.Wait();
|
latch.Wait();
|
||||||
@ -136,7 +136,7 @@ TEST_F(EmbedderTest, CanInvokeCustomEntrypointMacro) {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("customEntrypoint1");
|
builder.SetDartEntrypoint("customEntrypoint1");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
latch1.Wait();
|
latch1.Wait();
|
||||||
@ -148,7 +148,7 @@ TEST_F(EmbedderTest, CanInvokeCustomEntrypointMacro) {
|
|||||||
TEST_F(EmbedderTest, CanTerminateCleanly) {
|
TEST_F(EmbedderTest, CanTerminateCleanly) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("terminateExitCodeHandler");
|
builder.SetDartEntrypoint("terminateExitCodeHandler");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
@ -169,7 +169,7 @@ TEST_F(EmbedderTest, ExecutableNameNotNull) {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("executableNameNotNull");
|
builder.SetDartEntrypoint("executableNameNotNull");
|
||||||
builder.SetExecutableName("/path/to/binary");
|
builder.SetExecutableName("/path/to/binary");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
@ -192,7 +192,7 @@ TEST_F(EmbedderTest, ImplicitViewNotNull) {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("implicitViewNotNull");
|
builder.SetDartEntrypoint("implicitViewNotNull");
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
latch.Wait();
|
latch.Wait();
|
||||||
@ -239,7 +239,7 @@ TEST_F(EmbedderTest, CanSpecifyCustomPlatformTaskRunner) {
|
|||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
const auto task_runner_description =
|
const auto task_runner_description =
|
||||||
test_task_runner.GetFlutterTaskRunnerDescription();
|
test_task_runner.GetFlutterTaskRunnerDescription();
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetPlatformTaskRunner(&task_runner_description);
|
builder.SetPlatformTaskRunner(&task_runner_description);
|
||||||
builder.SetDartEntrypoint("invokePlatformTaskRunner");
|
builder.SetDartEntrypoint("invokePlatformTaskRunner");
|
||||||
std::scoped_lock lock(engine_mutex);
|
std::scoped_lock lock(engine_mutex);
|
||||||
@ -283,7 +283,7 @@ TEST(EmbedderTestNoFixture, CanGetCurrentTimeInNanoseconds) {
|
|||||||
TEST_F(EmbedderTest, CanReloadSystemFonts) {
|
TEST_F(EmbedderTest, CanReloadSystemFonts) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
|
|
||||||
@ -301,7 +301,7 @@ TEST_F(EmbedderTest, IsolateServiceIdSent) {
|
|||||||
|
|
||||||
thread.GetTaskRunner()->PostTask([&]() {
|
thread.GetTaskRunner()->PostTask([&]() {
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("main");
|
builder.SetDartEntrypoint("main");
|
||||||
builder.SetPlatformMessageCallback(
|
builder.SetPlatformMessageCallback(
|
||||||
[&](const FlutterPlatformMessage* message) {
|
[&](const FlutterPlatformMessage* message) {
|
||||||
@ -337,7 +337,7 @@ TEST_F(EmbedderTest, IsolateServiceIdSent) {
|
|||||||
TEST_F(EmbedderTest, CanCreateAndCollectCallbacks) {
|
TEST_F(EmbedderTest, CanCreateAndCollectCallbacks) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("platform_messages_response");
|
builder.SetDartEntrypoint("platform_messages_response");
|
||||||
context.AddNativeCallback(
|
context.AddNativeCallback(
|
||||||
"SignalNativeTest",
|
"SignalNativeTest",
|
||||||
@ -376,7 +376,7 @@ TEST_F(EmbedderTest, PlatformMessagesCanReceiveResponse) {
|
|||||||
auto& context =
|
auto& context =
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("platform_messages_response");
|
builder.SetDartEntrypoint("platform_messages_response");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready;
|
fml::AutoResetWaitableEvent ready;
|
||||||
@ -432,7 +432,7 @@ TEST_F(EmbedderTest, PlatformMessagesCanReceiveResponse) {
|
|||||||
TEST_F(EmbedderTest, PlatformMessagesCanBeSentWithoutResponseHandles) {
|
TEST_F(EmbedderTest, PlatformMessagesCanBeSentWithoutResponseHandles) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("platform_messages_no_response");
|
builder.SetDartEntrypoint("platform_messages_no_response");
|
||||||
|
|
||||||
const std::string message_data = "Hello but don't call me back.";
|
const std::string message_data = "Hello but don't call me back.";
|
||||||
@ -477,7 +477,7 @@ TEST_F(EmbedderTest, PlatformMessagesCanBeSentWithoutResponseHandles) {
|
|||||||
TEST_F(EmbedderTest, NullPlatformMessagesCanBeSent) {
|
TEST_F(EmbedderTest, NullPlatformMessagesCanBeSent) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("null_platform_messages");
|
builder.SetDartEntrypoint("null_platform_messages");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready, message;
|
fml::AutoResetWaitableEvent ready, message;
|
||||||
@ -519,7 +519,7 @@ TEST_F(EmbedderTest, NullPlatformMessagesCanBeSent) {
|
|||||||
TEST_F(EmbedderTest, InvalidPlatformMessages) {
|
TEST_F(EmbedderTest, InvalidPlatformMessages) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
|
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
@ -544,7 +544,7 @@ TEST_F(EmbedderTest, CanSetCustomLogMessageCallback) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetDartEntrypoint("custom_logger");
|
builder.SetDartEntrypoint("custom_logger");
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
context.SetLogMessageCallback(
|
context.SetLogMessageCallback(
|
||||||
[&callback_latch](const char* tag, const char* message) {
|
[&callback_latch](const char* tag, const char* message) {
|
||||||
EXPECT_EQ(std::string(tag), "flutter");
|
EXPECT_EQ(std::string(tag), "flutter");
|
||||||
@ -563,7 +563,7 @@ TEST_F(EmbedderTest, CanSetCustomLogTag) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetDartEntrypoint("custom_logger");
|
builder.SetDartEntrypoint("custom_logger");
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetLogTag("butterfly");
|
builder.SetLogTag("butterfly");
|
||||||
context.SetLogMessageCallback(
|
context.SetLogMessageCallback(
|
||||||
[&callback_latch](const char* tag, const char* message) {
|
[&callback_latch](const char* tag, const char* message) {
|
||||||
@ -583,7 +583,7 @@ TEST_F(EmbedderTest, CanSetCustomLogTag) {
|
|||||||
TEST_F(EmbedderTest, VMShutsDownWhenNoEnginesInProcess) {
|
TEST_F(EmbedderTest, VMShutsDownWhenNoEnginesInProcess) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
const auto launch_count = DartVM::GetVMLaunchCount();
|
const auto launch_count = DartVM::GetVMLaunchCount();
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -602,7 +602,7 @@ TEST_F(EmbedderTest, VMShutsDownWhenNoEnginesInProcess) {
|
|||||||
TEST_F(EmbedderTest, DartEntrypointArgs) {
|
TEST_F(EmbedderTest, DartEntrypointArgs) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.AddDartEntrypointArgument("foo");
|
builder.AddDartEntrypointArgument("foo");
|
||||||
builder.AddDartEntrypointArgument("bar");
|
builder.AddDartEntrypointArgument("bar");
|
||||||
builder.SetDartEntrypoint("dart_entrypoint_args");
|
builder.SetDartEntrypoint("dart_entrypoint_args");
|
||||||
@ -636,7 +636,7 @@ TEST_F(EmbedderTest, VMAndIsolateSnapshotSizesAreRedundantInAOTMode) {
|
|||||||
}
|
}
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
// The fixture sets this up correctly. Intentionally mess up the args.
|
// The fixture sets this up correctly. Intentionally mess up the args.
|
||||||
builder.GetProjectArgs().vm_snapshot_data_size = 0;
|
builder.GetProjectArgs().vm_snapshot_data_size = 0;
|
||||||
@ -652,7 +652,7 @@ TEST_F(EmbedderTest, CanRenderImplicitView) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("render_implicit_view");
|
builder.SetDartEntrypoint("render_implicit_view");
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
@ -684,7 +684,7 @@ TEST_F(EmbedderTest, CanRenderImplicitViewUsingPresentLayersCallback) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor(/* avoid_backing_store_cache = */ false,
|
builder.SetCompositor(/* avoid_backing_store_cache = */ false,
|
||||||
/* use_present_layers_callback = */ true);
|
/* use_present_layers_callback = */ true);
|
||||||
builder.SetDartEntrypoint("render_implicit_view");
|
builder.SetDartEntrypoint("render_implicit_view");
|
||||||
@ -729,7 +729,7 @@ TEST_F(EmbedderTest,
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views_with_known_scene");
|
builder.SetDartEntrypoint("can_composite_platform_views_with_known_scene");
|
||||||
|
|
||||||
@ -948,7 +948,7 @@ TEST_F(EmbedderTest, NoLayerCreatedForTransparentOverlayOnTopOfPlatformLayer) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views_transparent_overlay");
|
builder.SetDartEntrypoint("can_composite_platform_views_transparent_overlay");
|
||||||
|
|
||||||
@ -1085,7 +1085,7 @@ TEST_F(EmbedderTest, NoLayerCreatedForNoOverlayOnTopOfPlatformLayer) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("can_composite_platform_views_no_overlay");
|
builder.SetDartEntrypoint("can_composite_platform_views_no_overlay");
|
||||||
|
|
||||||
@ -1220,7 +1220,7 @@ TEST_F(EmbedderTest, NoLayerCreatedForNoOverlayOnTopOfPlatformLayer) {
|
|||||||
TEST_F(EmbedderTest, CanCreateInitializedEngine) {
|
TEST_F(EmbedderTest, CanCreateInitializedEngine) {
|
||||||
EmbedderConfigBuilder builder(
|
EmbedderConfigBuilder builder(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.InitializeEngine();
|
auto engine = builder.InitializeEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
engine.reset();
|
engine.reset();
|
||||||
@ -1232,7 +1232,7 @@ TEST_F(EmbedderTest, CanCreateInitializedEngine) {
|
|||||||
TEST_F(EmbedderTest, CanRunInitializedEngine) {
|
TEST_F(EmbedderTest, CanRunInitializedEngine) {
|
||||||
EmbedderConfigBuilder builder(
|
EmbedderConfigBuilder builder(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.InitializeEngine();
|
auto engine = builder.InitializeEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
ASSERT_EQ(FlutterEngineRunInitialized(engine.get()), kSuccess);
|
ASSERT_EQ(FlutterEngineRunInitialized(engine.get()), kSuccess);
|
||||||
@ -1247,7 +1247,7 @@ TEST_F(EmbedderTest, CanRunInitializedEngine) {
|
|||||||
TEST_F(EmbedderTest, CanDeinitializeAnEngine) {
|
TEST_F(EmbedderTest, CanDeinitializeAnEngine) {
|
||||||
EmbedderConfigBuilder builder(
|
EmbedderConfigBuilder builder(
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext));
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.InitializeEngine();
|
auto engine = builder.InitializeEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
ASSERT_EQ(FlutterEngineRunInitialized(engine.get()), kSuccess);
|
ASSERT_EQ(FlutterEngineRunInitialized(engine.get()), kSuccess);
|
||||||
@ -1278,7 +1278,7 @@ TEST_F(EmbedderTest, CanDeinitializeAnEngine) {
|
|||||||
TEST_F(EmbedderTest, CanAddView) {
|
TEST_F(EmbedderTest, CanAddView) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("window_metrics_event_all_view_ids");
|
builder.SetDartEntrypoint("window_metrics_event_all_view_ids");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
||||||
@ -1326,7 +1326,7 @@ TEST_F(EmbedderTest, CanAddView) {
|
|||||||
TEST_F(EmbedderTest, AddViewSchedulesFrame) {
|
TEST_F(EmbedderTest, AddViewSchedulesFrame) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("add_view_schedules_frame");
|
builder.SetDartEntrypoint("add_view_schedules_frame");
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
context.AddNativeCallback(
|
context.AddNativeCallback(
|
||||||
@ -1371,7 +1371,7 @@ TEST_F(EmbedderTest, AddViewSchedulesFrame) {
|
|||||||
TEST_F(EmbedderTest, CanRemoveView) {
|
TEST_F(EmbedderTest, CanRemoveView) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("window_metrics_event_all_view_ids");
|
builder.SetDartEntrypoint("window_metrics_event_all_view_ids");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
||||||
@ -1432,7 +1432,7 @@ TEST_F(EmbedderTest, CanRemoveView) {
|
|||||||
TEST_F(EmbedderTest, CannotRemoveImplicitView) {
|
TEST_F(EmbedderTest, CannotRemoveImplicitView) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
@ -1452,7 +1452,7 @@ TEST_F(EmbedderTest, CannotRemoveImplicitView) {
|
|||||||
TEST_F(EmbedderTest, CannotAddDuplicateViews) {
|
TEST_F(EmbedderTest, CannotAddDuplicateViews) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("window_metrics_event_all_view_ids");
|
builder.SetDartEntrypoint("window_metrics_event_all_view_ids");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
||||||
@ -1524,7 +1524,7 @@ TEST_F(EmbedderTest, CannotAddDuplicateViews) {
|
|||||||
TEST_F(EmbedderTest, CanReuseViewIds) {
|
TEST_F(EmbedderTest, CanReuseViewIds) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("window_metrics_event_all_view_ids");
|
builder.SetDartEntrypoint("window_metrics_event_all_view_ids");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
||||||
@ -1589,7 +1589,7 @@ TEST_F(EmbedderTest, CanReuseViewIds) {
|
|||||||
TEST_F(EmbedderTest, CannotRemoveUnknownView) {
|
TEST_F(EmbedderTest, CannotRemoveUnknownView) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
@ -1615,7 +1615,7 @@ TEST_F(EmbedderTest, CannotRemoveUnknownView) {
|
|||||||
TEST_F(EmbedderTest, ViewOperationsOrdered) {
|
TEST_F(EmbedderTest, ViewOperationsOrdered) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("window_metrics_event_all_view_ids");
|
builder.SetDartEntrypoint("window_metrics_event_all_view_ids");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready_latch;
|
fml::AutoResetWaitableEvent ready_latch;
|
||||||
@ -1762,7 +1762,7 @@ TEST_F(EmbedderTest, ViewOperationsOrdered) {
|
|||||||
TEST_F(EmbedderTest, CanRenderMultipleViews) {
|
TEST_F(EmbedderTest, CanRenderMultipleViews) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("render_all_views");
|
builder.SetDartEntrypoint("render_all_views");
|
||||||
|
|
||||||
@ -1843,7 +1843,7 @@ TEST_F(EmbedderTest, BackingStoresCorrespondToTheirViews) {
|
|||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetDartEntrypoint("render_all_views");
|
builder.SetDartEntrypoint("render_all_views");
|
||||||
builder.SetSoftwareRendererConfig(SkISize::Make(800, 600));
|
builder.SetSurface(SkISize::Make(800, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
|
|
||||||
EmbedderTestBackingStoreProducerSoftware producer(
|
EmbedderTestBackingStoreProducerSoftware producer(
|
||||||
@ -1995,7 +1995,7 @@ TEST_F(EmbedderTest, BackingStoresCorrespondToTheirViews) {
|
|||||||
TEST_F(EmbedderTest, CanUpdateLocales) {
|
TEST_F(EmbedderTest, CanUpdateLocales) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("can_receive_locale_updates");
|
builder.SetDartEntrypoint("can_receive_locale_updates");
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
context.AddNativeCallback(
|
context.AddNativeCallback(
|
||||||
@ -2056,7 +2056,7 @@ TEST_F(EmbedderTest, LocalizationCallbacksCalled) {
|
|||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
context.AddIsolateCreateCallback([&latch]() { latch.Signal(); });
|
context.AddIsolateCreateCallback([&latch]() { latch.Signal(); });
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
// Wait for the root isolate to launch.
|
// Wait for the root isolate to launch.
|
||||||
@ -2087,7 +2087,7 @@ TEST_F(EmbedderTest, VerifyB143464703WithSoftwareBackend) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig(SkISize::Make(1024, 600));
|
builder.SetSurface(SkISize::Make(1024, 600));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint("verify_b143464703");
|
builder.SetDartEntrypoint("verify_b143464703");
|
||||||
|
|
||||||
@ -2211,7 +2211,7 @@ TEST_F(EmbedderTest, CanSendLowMemoryNotification) {
|
|||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
|
|
||||||
@ -2241,7 +2241,7 @@ TEST_F(EmbedderTest, CanPostTaskToAllNativeThreads) {
|
|||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
engine = builder.LaunchEngine();
|
engine = builder.LaunchEngine();
|
||||||
|
|
||||||
@ -2385,7 +2385,7 @@ TEST_F(EmbedderTest, MustNotRunWithMultipleAOTSources) {
|
|||||||
context,
|
context,
|
||||||
EmbedderConfigBuilder::InitializationPreference::kMultiAOTInitialize);
|
EmbedderConfigBuilder::InitializationPreference::kMultiAOTInitialize);
|
||||||
|
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_FALSE(engine.is_valid());
|
ASSERT_FALSE(engine.is_valid());
|
||||||
@ -2430,7 +2430,7 @@ TEST_F(EmbedderTest, CanLaunchAndShutdownWithAValidElfSource) {
|
|||||||
context,
|
context,
|
||||||
EmbedderConfigBuilder::InitializationPreference::kAOTDataInitialize);
|
EmbedderConfigBuilder::InitializationPreference::kAOTDataInitialize);
|
||||||
|
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
@ -2466,7 +2466,7 @@ TEST_F(EmbedderTest, CanSuccessfullyPopulateSpecificJITSnapshotCallbacks) {
|
|||||||
|
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
// Construct the location of valid JIT snapshots.
|
// Construct the location of valid JIT snapshots.
|
||||||
const std::string src_path = GetSourcePath();
|
const std::string src_path = GetSourcePath();
|
||||||
@ -2522,7 +2522,7 @@ TEST_F(EmbedderTest, JITSnapshotCallbacksFailWithInvalidLocation) {
|
|||||||
|
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
// Explicitly define the locations of the invalid JIT snapshots
|
// Explicitly define the locations of the invalid JIT snapshots
|
||||||
builder.GetProjectArgs().vm_snapshot_data =
|
builder.GetProjectArgs().vm_snapshot_data =
|
||||||
@ -2559,7 +2559,7 @@ TEST_F(EmbedderTest, CanLaunchEngineWithSpecifiedJITSnapshots) {
|
|||||||
|
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
// Construct the location of valid JIT snapshots.
|
// Construct the location of valid JIT snapshots.
|
||||||
const std::string src_path = GetSourcePath();
|
const std::string src_path = GetSourcePath();
|
||||||
@ -2599,7 +2599,7 @@ TEST_F(EmbedderTest, CanLaunchEngineWithSomeSpecifiedJITSnapshots) {
|
|||||||
|
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
// Construct the location of valid JIT snapshots.
|
// Construct the location of valid JIT snapshots.
|
||||||
const std::string src_path = GetSourcePath();
|
const std::string src_path = GetSourcePath();
|
||||||
@ -2632,7 +2632,7 @@ TEST_F(EmbedderTest, CanLaunchEngineWithInvalidJITSnapshots) {
|
|||||||
|
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
// Explicitly define the locations of the JIT snapshots
|
// Explicitly define the locations of the JIT snapshots
|
||||||
builder.GetProjectArgs().isolate_snapshot_data =
|
builder.GetProjectArgs().isolate_snapshot_data =
|
||||||
@ -2658,7 +2658,7 @@ TEST_F(EmbedderTest, CanLaunchEngineWithUnspecifiedJITSnapshots) {
|
|||||||
|
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
|
|
||||||
ASSERT_EQ(builder.GetProjectArgs().vm_snapshot_data, nullptr);
|
ASSERT_EQ(builder.GetProjectArgs().vm_snapshot_data, nullptr);
|
||||||
ASSERT_EQ(builder.GetProjectArgs().vm_snapshot_instructions, nullptr);
|
ASSERT_EQ(builder.GetProjectArgs().vm_snapshot_instructions, nullptr);
|
||||||
@ -2672,7 +2672,7 @@ TEST_F(EmbedderTest, CanLaunchEngineWithUnspecifiedJITSnapshots) {
|
|||||||
TEST_F(EmbedderTest, InvalidFlutterWindowMetricsEvent) {
|
TEST_F(EmbedderTest, InvalidFlutterWindowMetricsEvent) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
|
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
@ -2724,7 +2724,7 @@ static void expectSoftwareRenderingOutputMatches(
|
|||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
bool matches = false;
|
bool matches = false;
|
||||||
|
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetCompositor();
|
builder.SetCompositor();
|
||||||
builder.SetDartEntrypoint(std::move(entrypoint));
|
builder.SetDartEntrypoint(std::move(entrypoint));
|
||||||
builder.SetRenderTargetType(
|
builder.SetRenderTargetType(
|
||||||
@ -2943,7 +2943,7 @@ TEST_F(EmbedderTest, KeyDataIsCorrectlySerialized) {
|
|||||||
auto& context =
|
auto& context =
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("key_data_echo");
|
builder.SetDartEntrypoint("key_data_echo");
|
||||||
builder.SetPlatformMessageCallback(
|
builder.SetPlatformMessageCallback(
|
||||||
[&](const FlutterPlatformMessage* message) {
|
[&](const FlutterPlatformMessage* message) {
|
||||||
@ -3065,7 +3065,7 @@ TEST_F(EmbedderTest, KeyDataAreBuffered) {
|
|||||||
auto& context =
|
auto& context =
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("key_data_late_echo");
|
builder.SetDartEntrypoint("key_data_late_echo");
|
||||||
builder.SetPlatformMessageCallback(
|
builder.SetPlatformMessageCallback(
|
||||||
[&](const FlutterPlatformMessage* message) {
|
[&](const FlutterPlatformMessage* message) {
|
||||||
@ -3166,7 +3166,7 @@ TEST_F(EmbedderTest, KeyDataResponseIsCorrectlyInvoked) {
|
|||||||
auto& context =
|
auto& context =
|
||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("key_data_echo");
|
builder.SetDartEntrypoint("key_data_echo");
|
||||||
context.AddNativeCallback(
|
context.AddNativeCallback(
|
||||||
"SignalNativeTest",
|
"SignalNativeTest",
|
||||||
@ -3241,7 +3241,7 @@ TEST_F(EmbedderTest, BackToBackKeyEventResponsesCorrectlyInvoked) {
|
|||||||
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("key_data_echo");
|
builder.SetDartEntrypoint("key_data_echo");
|
||||||
context.AddNativeCallback(
|
context.AddNativeCallback(
|
||||||
"SignalNativeTest",
|
"SignalNativeTest",
|
||||||
@ -3340,7 +3340,7 @@ TEST_F(EmbedderTest, VsyncCallbackPostedIntoFuture) {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetupVsyncCallback();
|
builder.SetupVsyncCallback();
|
||||||
builder.SetDartEntrypoint("empty_scene");
|
builder.SetDartEntrypoint("empty_scene");
|
||||||
engine = builder.LaunchEngine();
|
engine = builder.LaunchEngine();
|
||||||
@ -3371,7 +3371,7 @@ TEST_F(EmbedderTest, VsyncCallbackPostedIntoFuture) {
|
|||||||
TEST_F(EmbedderTest, CanScheduleFrame) {
|
TEST_F(EmbedderTest, CanScheduleFrame) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("can_schedule_frame");
|
builder.SetDartEntrypoint("can_schedule_frame");
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
context.AddNativeCallback(
|
context.AddNativeCallback(
|
||||||
@ -3399,7 +3399,7 @@ TEST_F(EmbedderTest, CanScheduleFrame) {
|
|||||||
TEST_F(EmbedderTest, CanSetNextFrameCallback) {
|
TEST_F(EmbedderTest, CanSetNextFrameCallback) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("draw_solid_red");
|
builder.SetDartEntrypoint("draw_solid_red");
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
@ -3486,7 +3486,7 @@ TEST_F(EmbedderTest, EmbedderThreadHostUseCustomThreadConfig) {
|
|||||||
TEST_F(EmbedderTest, CanSendPointer) {
|
TEST_F(EmbedderTest, CanSendPointer) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("pointer_data_packet");
|
builder.SetDartEntrypoint("pointer_data_packet");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready_latch, count_latch, message_latch;
|
fml::AutoResetWaitableEvent ready_latch, count_latch, message_latch;
|
||||||
@ -3537,7 +3537,7 @@ TEST_F(EmbedderTest, CanSendPointer) {
|
|||||||
TEST_F(EmbedderTest, CanSendPointerEventWithViewId) {
|
TEST_F(EmbedderTest, CanSendPointerEventWithViewId) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("pointer_data_packet_view_id");
|
builder.SetDartEntrypoint("pointer_data_packet_view_id");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready_latch, add_view_latch, message_latch;
|
fml::AutoResetWaitableEvent ready_latch, add_view_latch, message_latch;
|
||||||
@ -3599,7 +3599,7 @@ TEST_F(EmbedderTest, CanSendPointerEventWithViewId) {
|
|||||||
TEST_F(EmbedderTest, WindowMetricsEventDefaultsToImplicitView) {
|
TEST_F(EmbedderTest, WindowMetricsEventDefaultsToImplicitView) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("window_metrics_event_view_id");
|
builder.SetDartEntrypoint("window_metrics_event_view_id");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
||||||
@ -3640,7 +3640,7 @@ TEST_F(EmbedderTest, WindowMetricsEventDefaultsToImplicitView) {
|
|||||||
TEST_F(EmbedderTest, IgnoresWindowMetricsEventForUnknownView) {
|
TEST_F(EmbedderTest, IgnoresWindowMetricsEventForUnknownView) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
auto& context = GetEmbedderContext(EmbedderTestContextType::kSoftwareContext);
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("window_metrics_event_view_id");
|
builder.SetDartEntrypoint("window_metrics_event_view_id");
|
||||||
|
|
||||||
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
fml::AutoResetWaitableEvent ready_latch, message_latch;
|
||||||
@ -3710,7 +3710,7 @@ TEST_F(EmbedderTest, RegisterChannelListener) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetDartEntrypoint("channel_listener_response");
|
builder.SetDartEntrypoint("channel_listener_response");
|
||||||
|
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
@ -3769,7 +3769,7 @@ TEST_F(EmbedderTest, PlatformThreadIsolatesWithCustomPlatformTaskRunner) {
|
|||||||
EmbedderConfigBuilder builder(context);
|
EmbedderConfigBuilder builder(context);
|
||||||
const auto task_runner_description =
|
const auto task_runner_description =
|
||||||
test_task_runner.GetFlutterTaskRunnerDescription();
|
test_task_runner.GetFlutterTaskRunnerDescription();
|
||||||
builder.SetSoftwareRendererConfig();
|
builder.SetSurface(SkISize::Make(1, 1));
|
||||||
builder.SetPlatformTaskRunner(&task_runner_description);
|
builder.SetPlatformTaskRunner(&task_runner_description);
|
||||||
builder.SetDartEntrypoint("invokePlatformThreadIsolate");
|
builder.SetDartEntrypoint("invokePlatformThreadIsolate");
|
||||||
builder.AddCommandLineArgument("--enable-platform-isolates");
|
builder.AddCommandLineArgument("--enable-platform-isolates");
|
||||||
|
@ -96,12 +96,12 @@ static_assert(
|
|||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
TEST_F(EmbedderTest, CanSwapOutVulkanCalls) {
|
TEST_F(EmbedderTest, CanSwapOutVulkanCalls) {
|
||||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kVulkanContext);
|
|
||||||
fml::AutoResetWaitableEvent latch;
|
fml::AutoResetWaitableEvent latch;
|
||||||
|
|
||||||
|
auto& context = static_cast<EmbedderTestContextVulkan&>(
|
||||||
|
GetEmbedderContext(EmbedderTestContextType::kVulkanContext));
|
||||||
context.AddIsolateCreateCallback([&latch]() { latch.Signal(); });
|
context.AddIsolateCreateCallback([&latch]() { latch.Signal(); });
|
||||||
EmbedderConfigBuilder builder(context);
|
context.SetVulkanInstanceProcAddressCallback(
|
||||||
builder.SetVulkanRendererConfig(
|
|
||||||
SkISize::Make(1024, 1024),
|
|
||||||
[](void* user_data, FlutterVulkanInstanceHandle instance,
|
[](void* user_data, FlutterVulkanInstanceHandle instance,
|
||||||
const char* name) -> void* {
|
const char* name) -> void* {
|
||||||
if (StrcmpFixed(name, "vkGetInstanceProcAddr") == 0) {
|
if (StrcmpFixed(name, "vkGetInstanceProcAddr") == 0) {
|
||||||
@ -114,6 +114,9 @@ TEST_F(EmbedderTest, CanSwapOutVulkanCalls) {
|
|||||||
return EmbedderTestContextVulkan::InstanceProcAddr(user_data, instance,
|
return EmbedderTestContextVulkan::InstanceProcAddr(user_data, instance,
|
||||||
name);
|
name);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
EmbedderConfigBuilder builder(context);
|
||||||
|
builder.SetSurface(SkISize::Make(1024, 1024));
|
||||||
auto engine = builder.LaunchEngine();
|
auto engine = builder.LaunchEngine();
|
||||||
ASSERT_TRUE(engine.is_valid());
|
ASSERT_TRUE(engine.is_valid());
|
||||||
// Wait for the root isolate to launch.
|
// Wait for the root isolate to launch.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user