From 05f958c7f3b1c66d543e9170d54ecc1b5a253df4 Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Fri, 2 Jun 2023 18:11:00 -0700 Subject: [PATCH] Revert "[Impeller] Add Impeller Metal support in the embedder API (#42411)" (#42532) This reverts commit 052e22661754d278b33a55deec9c26b0a5d402c1. Expected to resolve https://github.com/flutter/flutter/issues/128145 --- ci/licenses_golden/licenses_flutter | 16 -- flow/BUILD.gn | 5 - flow/embedded_views.cc | 6 +- flow/embedded_views.h | 17 +- .../backend/metal/playground_impl_mtl.mm | 2 +- impeller/renderer/backend/metal/BUILD.gn | 2 - impeller/renderer/backend/metal/context_mtl.h | 15 -- .../renderer/backend/metal/context_mtl.mm | 63 ++--- impeller/renderer/backend/metal/surface_mtl.h | 12 +- .../renderer/backend/metal/surface_mtl.mm | 164 ++++--------- impeller/renderer/backend/metal/texture_mtl.h | 6 +- .../renderer/backend/metal/texture_mtl.mm | 22 +- .../backend/metal/texture_wrapper_mtl.h | 16 -- .../backend/metal/texture_wrapper_mtl.mm | 22 -- shell/common/rasterizer.cc | 4 +- shell/common/rasterizer_unittests.cc | 3 +- .../shell_test_external_view_embedder.cc | 1 - .../shell_test_external_view_embedder.h | 1 - shell/gpu/gpu_surface_metal_impeller.h | 26 +- shell/gpu/gpu_surface_metal_impeller.mm | 159 ++---------- .../external_view_embedder.cc | 1 - .../external_view_embedder.h | 1 - .../external_view_embedder_unittests.cc | 18 +- .../darwin/ios/ios_external_view_embedder.h | 1 - .../darwin/ios/ios_external_view_embedder.mm | 6 +- shell/platform/embedder/BUILD.gn | 24 +- shell/platform/embedder/embedder.cc | 229 ++++-------------- .../embedder/embedder_external_view.cc | 31 +-- .../embedder_external_view_embedder.cc | 5 +- .../embedder_external_view_embedder.h | 3 - .../embedder/embedder_render_target.cc | 15 +- .../embedder/embedder_render_target.h | 70 ++---- .../embedder/embedder_render_target_cache.cc | 3 +- .../embedder_render_target_impeller.cc | 45 ---- .../embedder_render_target_impeller.h | 44 ---- .../embedder/embedder_render_target_skia.cc | 40 --- .../embedder/embedder_render_target_skia.h | 41 ---- shell/platform/embedder/embedder_surface.cc | 9 - shell/platform/embedder/embedder_surface.h | 5 +- .../embedder_surface_metal_impeller.h | 70 ------ .../embedder_surface_metal_impeller.mm | 97 -------- .../embedder/platform_view_embedder.cc | 7 +- .../embedder/platform_view_embedder.h | 5 +- .../flatland_external_view_embedder.cc | 1 - .../flutter/flatland_external_view_embedder.h | 1 - .../flutter/gfx_external_view_embedder.cc | 1 - .../flutter/gfx_external_view_embedder.h | 1 - .../fuchsia/flutter/platform_view_unittest.cc | 1 - ...atland_external_view_embedder_unittests.cc | 22 +- .../tests/flatland_platform_view_unittest.cc | 1 - .../gfx_external_view_embedder_unittests.cc | 22 +- 51 files changed, 227 insertions(+), 1155 deletions(-) delete mode 100644 impeller/renderer/backend/metal/texture_wrapper_mtl.h delete mode 100644 impeller/renderer/backend/metal/texture_wrapper_mtl.mm delete mode 100644 shell/platform/embedder/embedder_render_target_impeller.cc delete mode 100644 shell/platform/embedder/embedder_render_target_impeller.h delete mode 100644 shell/platform/embedder/embedder_render_target_skia.cc delete mode 100644 shell/platform/embedder/embedder_render_target_skia.h delete mode 100644 shell/platform/embedder/embedder_surface_metal_impeller.h delete mode 100644 shell/platform/embedder/embedder_surface_metal_impeller.mm diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index e2eb8eedb432f..69d87bce22845 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1482,8 +1482,6 @@ ORIGIN: ../../../flutter/impeller/renderer/backend/metal/surface_mtl.h + ../../. ORIGIN: ../../../flutter/impeller/renderer/backend/metal/surface_mtl.mm + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.mm + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.mm + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.mm + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/allocator_vk.cc + ../../../flutter/LICENSE @@ -2803,10 +2801,6 @@ ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target.cc + ../ ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_cache.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_cache.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_impeller.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_impeller.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_skia.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_skia.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/embedder/embedder_struct_macros.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface.h + ../../../flutter/LICENSE @@ -2814,8 +2808,6 @@ ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_gl.cc + ../../ ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_gl.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal.mm + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.mm + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_software.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_software.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_vulkan.cc + ../../../flutter/LICENSE @@ -4156,8 +4148,6 @@ FILE: ../../../flutter/impeller/renderer/backend/metal/surface_mtl.h FILE: ../../../flutter/impeller/renderer/backend/metal/surface_mtl.mm FILE: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.h FILE: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.mm -FILE: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.h -FILE: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.mm FILE: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.h FILE: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.mm FILE: ../../../flutter/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -5493,10 +5483,6 @@ FILE: ../../../flutter/shell/platform/embedder/embedder_render_target.cc FILE: ../../../flutter/shell/platform/embedder/embedder_render_target.h FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_cache.cc FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_cache.h -FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_impeller.cc -FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_impeller.h -FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_skia.cc -FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_skia.h FILE: ../../../flutter/shell/platform/embedder/embedder_struct_macros.h FILE: ../../../flutter/shell/platform/embedder/embedder_surface.cc FILE: ../../../flutter/shell/platform/embedder/embedder_surface.h @@ -5504,8 +5490,6 @@ FILE: ../../../flutter/shell/platform/embedder/embedder_surface_gl.cc FILE: ../../../flutter/shell/platform/embedder/embedder_surface_gl.h FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal.h FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal.mm -FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.h -FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.mm FILE: ../../../flutter/shell/platform/embedder/embedder_surface_software.cc FILE: ../../../flutter/shell/platform/embedder/embedder_surface_software.h FILE: ../../../flutter/shell/platform/embedder/embedder_surface_vulkan.cc diff --git a/flow/BUILD.gn b/flow/BUILD.gn index 560b067e7e22b..efda895393f26 100644 --- a/flow/BUILD.gn +++ b/flow/BUILD.gn @@ -4,7 +4,6 @@ import("//build/fuchsia/sdk.gni") import("//flutter/common/config.gni") -import("//flutter/impeller/tools/impeller.gni") import("//flutter/shell/config.gni") import("//flutter/testing/testing.gni") @@ -97,10 +96,6 @@ source_set("flow") { "//third_party/skia", ] - if (impeller_supports_rendering) { - deps += [ "//flutter/impeller" ] - } - public_deps = [ "//flutter/display_list" ] } diff --git a/flow/embedded_views.cc b/flow/embedded_views.cc index c19f1c198e3e3..b76c9730af903 100644 --- a/flow/embedded_views.cc +++ b/flow/embedded_views.cc @@ -42,10 +42,8 @@ bool DisplayListEmbedderViewSlice::recording_ended() { return builder_ == nullptr; } -void ExternalViewEmbedder::SubmitFrame( - GrDirectContext* context, - const std::shared_ptr& aiks_context, - std::unique_ptr frame) { +void ExternalViewEmbedder::SubmitFrame(GrDirectContext* context, + std::unique_ptr frame) { frame->Submit(); }; diff --git a/flow/embedded_views.h b/flow/embedded_views.h index 5293babc419a9..4162e79a15af6 100644 --- a/flow/embedded_views.h +++ b/flow/embedded_views.h @@ -5,7 +5,6 @@ #ifndef FLUTTER_FLOW_EMBEDDED_VIEWS_H_ #define FLUTTER_FLOW_EMBEDDED_VIEWS_H_ -#include #include #include "flutter/display_list/dl_builder.h" @@ -23,16 +22,6 @@ #include "third_party/skia/include/core/SkSize.h" #include "third_party/skia/include/core/SkSurface.h" -#if IMPELLER_SUPPORTS_RENDERING -#include "flutter/impeller/aiks/aiks_context.h" // nogncheck -#include "flutter/impeller/renderer/context.h" // nogncheck -#else // IMPELLER_SUPPORTS_RENDERING -namespace impeller { -class Context; -class AiksContext; -} // namespace impeller -#endif // !IMPELLER_SUPPORTS_RENDERING - class GrDirectContext; namespace flutter { @@ -425,10 +414,8 @@ class ExternalViewEmbedder { // This method can mutate the root Skia canvas before submitting the frame. // // It can also allocate frames for overlay surfaces to compose hybrid views. - virtual void SubmitFrame( - GrDirectContext* context, - const std::shared_ptr& aiks_context, - std::unique_ptr frame); + virtual void SubmitFrame(GrDirectContext* context, + std::unique_ptr frame); // This method provides the embedder a way to do additional tasks after // |SubmitFrame|. For example, merge task runners if `should_resubmit_frame` diff --git a/impeller/playground/backend/metal/playground_impl_mtl.mm b/impeller/playground/backend/metal/playground_impl_mtl.mm index 55e17871f70a5..25f108666ebe0 100644 --- a/impeller/playground/backend/metal/playground_impl_mtl.mm +++ b/impeller/playground/backend/metal/playground_impl_mtl.mm @@ -121,7 +121,7 @@ auto drawable = SurfaceMTL::GetMetalDrawableAndValidate(context, data_->metal_layer); - return SurfaceMTL::MakeFromMetalLayerDrawable(context, drawable); + return SurfaceMTL::WrapCurrentMetalLayerDrawable(context, drawable); } } // namespace impeller diff --git a/impeller/renderer/backend/metal/BUILD.gn b/impeller/renderer/backend/metal/BUILD.gn index 9a0f6a631e3d7..7ad03e9cea138 100644 --- a/impeller/renderer/backend/metal/BUILD.gn +++ b/impeller/renderer/backend/metal/BUILD.gn @@ -42,8 +42,6 @@ impeller_component("metal") { "surface_mtl.mm", "texture_mtl.h", "texture_mtl.mm", - "texture_wrapper_mtl.h", - "texture_wrapper_mtl.mm", "vertex_descriptor_mtl.h", "vertex_descriptor_mtl.mm", ] diff --git a/impeller/renderer/backend/metal/context_mtl.h b/impeller/renderer/backend/metal/context_mtl.h index 820c0e216e2de..fe461601daf06 100644 --- a/impeller/renderer/backend/metal/context_mtl.h +++ b/impeller/renderer/backend/metal/context_mtl.h @@ -21,12 +21,6 @@ #include "impeller/renderer/capabilities.h" #include "impeller/renderer/context.h" -#if TARGET_OS_SIMULATOR -#define IMPELLER_CA_METAL_LAYER_AVAILABLE API_AVAILABLE(macos(10.11), ios(13.0)) -#else // TARGET_OS_SIMULATOR -#define IMPELLER_CA_METAL_LAYER_AVAILABLE API_AVAILABLE(macos(10.11), ios(8.0)) -#endif // TARGET_OS_SIMULATOR - namespace impeller { class ContextMTL final : public Context, @@ -44,14 +38,6 @@ class ContextMTL final : public Context, std::shared_ptr is_gpu_disabled_sync_switch, const std::string& label); - static std::shared_ptr Create( - id device, - id command_queue, - const std::vector>& shader_libraries_data, - std::shared_ptr worker_task_runner, - std::shared_ptr is_gpu_disabled_sync_switch, - const std::string& label); - // |Context| ~ContextMTL() override; @@ -104,7 +90,6 @@ class ContextMTL final : public Context, ContextMTL( id device, - id command_queue, NSArray>* shader_libraries, std::shared_ptr worker_task_runner, std::shared_ptr is_gpu_disabled_sync_switch); diff --git a/impeller/renderer/backend/metal/context_mtl.mm b/impeller/renderer/backend/metal/context_mtl.mm index cc4ea365cab42..20af3b87c7141 100644 --- a/impeller/renderer/backend/metal/context_mtl.mm +++ b/impeller/renderer/backend/metal/context_mtl.mm @@ -6,11 +6,9 @@ #include -#include "flutter/fml/concurrent_message_loop.h" #include "flutter/fml/file.h" #include "flutter/fml/logging.h" #include "flutter/fml/paths.h" -#include "flutter/fml/synchronization/sync_switch.h" #include "impeller/core/sampler_descriptor.h" #include "impeller/renderer/backend/metal/sampler_library_mtl.h" #include "impeller/renderer/capabilities.h" @@ -69,12 +67,10 @@ static bool DeviceSupportsComputeSubgroups(id device) { ContextMTL::ContextMTL( id device, - id command_queue, NSArray>* shader_libraries, std::shared_ptr worker_task_runner, std::shared_ptr is_gpu_disabled_sync_switch) : device_(device), - command_queue_(command_queue), worker_task_runner_(std::move(worker_task_runner)), is_gpu_disabled_sync_switch_(std::move(is_gpu_disabled_sync_switch)) { // Validate device. @@ -100,6 +96,16 @@ static bool DeviceSupportsComputeSubgroups(id device) { shader_library_ = std::move(library); } + // Setup command queue. + { + command_queue_ = device_.newCommandQueue; + if (!command_queue_) { + VALIDATION_LOG << "Could not setup the command queue."; + return; + } + command_queue_.label = @"Impeller Command Queue"; + } + // Setup the pipeline library. { pipeline_library_ = @@ -198,28 +204,13 @@ static bool DeviceSupportsComputeSubgroups(id device) { return ::MTLCreateSystemDefaultDevice(); } -static id CreateMetalCommandQueue(id device) { - auto command_queue = device.newCommandQueue; - if (!command_queue) { - VALIDATION_LOG << "Could not setup the command queue."; - return nullptr; - } - command_queue.label = @"Impeller Command Queue"; - return command_queue; -} - std::shared_ptr ContextMTL::Create( const std::vector& shader_library_paths, std::shared_ptr worker_task_runner, std::shared_ptr is_gpu_disabled_sync_switch) { auto device = CreateMetalDevice(); - auto command_queue = CreateMetalCommandQueue(device); - if (!command_queue) { - return nullptr; - } auto context = std::shared_ptr(new ContextMTL( - device, command_queue, - MTLShaderLibraryFromFilePaths(device, shader_library_paths), + device, MTLShaderLibraryFromFilePaths(device, shader_library_paths), std::move(worker_task_runner), std::move(is_gpu_disabled_sync_switch))); if (!context->IsValid()) { FML_LOG(ERROR) << "Could not create Metal context."; @@ -232,36 +223,12 @@ static bool DeviceSupportsComputeSubgroups(id device) { const std::vector>& shader_libraries_data, std::shared_ptr worker_task_runner, std::shared_ptr is_gpu_disabled_sync_switch, - const std::string& library_label) { + const std::string& label) { auto device = CreateMetalDevice(); - auto command_queue = CreateMetalCommandQueue(device); - if (!command_queue) { - return nullptr; - } auto context = std::shared_ptr(new ContextMTL( - device, command_queue, - MTLShaderLibraryFromFileData(device, shader_libraries_data, - library_label), - std::move(worker_task_runner), std::move(is_gpu_disabled_sync_switch))); - if (!context->IsValid()) { - FML_LOG(ERROR) << "Could not create Metal context."; - return nullptr; - } - return context; -} - -std::shared_ptr ContextMTL::Create( - id device, - id command_queue, - const std::vector>& shader_libraries_data, - std::shared_ptr worker_task_runner, - std::shared_ptr is_gpu_disabled_sync_switch, - const std::string& library_label) { - auto context = std::shared_ptr(new ContextMTL( - device, command_queue, - MTLShaderLibraryFromFileData(device, shader_libraries_data, - library_label), - std::move(worker_task_runner), std::move(is_gpu_disabled_sync_switch))); + device, + MTLShaderLibraryFromFileData(device, shader_libraries_data, label), + worker_task_runner, std::move(is_gpu_disabled_sync_switch))); if (!context->IsValid()) { FML_LOG(ERROR) << "Could not create Metal context."; return nullptr; diff --git a/impeller/renderer/backend/metal/surface_mtl.h b/impeller/renderer/backend/metal/surface_mtl.h index 3a7db1c1300d7..cebc43e340451 100644 --- a/impeller/renderer/backend/metal/surface_mtl.h +++ b/impeller/renderer/backend/metal/surface_mtl.h @@ -5,7 +5,6 @@ #pragma once #include -#include #include "flutter/fml/macros.h" #include "impeller/geometry/rect.h" @@ -38,15 +37,10 @@ class SurfaceMTL final : public Surface { const std::shared_ptr& context, CAMetalLayer* layer); - static std::unique_ptr MakeFromMetalLayerDrawable( + static std::unique_ptr WrapCurrentMetalLayerDrawable( const std::shared_ptr& context, id drawable, std::optional clip_rect = std::nullopt); - - static std::unique_ptr MakeFromTexture( - const std::shared_ptr& context, - id texture, - std::optional clip_rect); #pragma GCC diagnostic pop // |Surface| @@ -64,8 +58,6 @@ class SurfaceMTL final : public Surface { std::weak_ptr context_; std::shared_ptr resolve_texture_; id drawable_ = nil; - std::shared_ptr source_texture_; - std::shared_ptr destination_texture_; bool requires_blit_ = false; std::optional clip_rect_; @@ -75,8 +67,6 @@ class SurfaceMTL final : public Surface { const RenderTarget& target, std::shared_ptr resolve_texture, id drawable, - std::shared_ptr source_texture, - std::shared_ptr destination_texture, bool requires_blit, std::optional clip_rect); diff --git a/impeller/renderer/backend/metal/surface_mtl.mm b/impeller/renderer/backend/metal/surface_mtl.mm index 7ff1810d1751f..90f70f5347feb 100644 --- a/impeller/renderer/backend/metal/surface_mtl.mm +++ b/impeller/renderer/backend/metal/surface_mtl.mm @@ -7,7 +7,6 @@ #include "flutter/fml/trace_event.h" #include "flutter/impeller/renderer/command_buffer.h" #include "impeller/base/validation.h" -#include "impeller/core/texture_descriptor.h" #include "impeller/renderer/backend/metal/context_mtl.h" #include "impeller/renderer/backend/metal/formats_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" @@ -40,11 +39,17 @@ return current_drawable; } -static std::optional WrapTextureWithRenderTarget( - Allocator& allocator, - id texture, - bool requires_blit, +std::unique_ptr SurfaceMTL::WrapCurrentMetalLayerDrawable( + const std::shared_ptr& context, + id drawable, std::optional clip_rect) { + bool requires_blit = ShouldPerformPartialRepaint(clip_rect); + const auto color_format = FromMTLPixelFormat(drawable.texture.pixelFormat); + + if (color_format == PixelFormat::kUnknown) { + VALIDATION_LOG << "Unknown drawable color format."; + return nullptr; + } // compositor_context.cc will offset the rendering by the clip origin. Here we // shrink to the size of the clip. This has the same effect as clipping the // rendering but also creates smaller intermediate passes. @@ -52,144 +57,80 @@ if (requires_blit) { if (!clip_rect.has_value()) { VALIDATION_LOG << "Missing clip rectangle."; - return std::nullopt; + return nullptr; } root_size = ISize(clip_rect->size.width, clip_rect->size.height); } else { - root_size = {static_cast(texture.width), - static_cast(texture.height)}; + root_size = {static_cast(drawable.texture.width), + static_cast(drawable.texture.height)}; } + TextureDescriptor msaa_tex_desc; + msaa_tex_desc.storage_mode = StorageMode::kDeviceTransient; + msaa_tex_desc.type = TextureType::kTexture2DMultisample; + msaa_tex_desc.sample_count = SampleCount::kCount4; + msaa_tex_desc.format = color_format; + msaa_tex_desc.size = root_size; + msaa_tex_desc.usage = static_cast(TextureUsage::kRenderTarget); + + auto msaa_tex = context->GetResourceAllocator()->CreateTexture(msaa_tex_desc); + if (!msaa_tex) { + VALIDATION_LOG << "Could not allocate MSAA color texture."; + return nullptr; + } + msaa_tex->SetLabel("ImpellerOnscreenColorMSAA"); + TextureDescriptor resolve_tex_desc; - resolve_tex_desc.format = FromMTLPixelFormat(texture.pixelFormat); - resolve_tex_desc.size = root_size; + resolve_tex_desc.format = color_format; + resolve_tex_desc.size = msaa_tex_desc.size; resolve_tex_desc.usage = static_cast(TextureUsage::kRenderTarget) | static_cast(TextureUsage::kShaderRead); resolve_tex_desc.sample_count = SampleCount::kCount1; resolve_tex_desc.storage_mode = StorageMode::kDevicePrivate; - if (resolve_tex_desc.format == PixelFormat::kUnknown) { - VALIDATION_LOG << "Unknown drawable color format."; - return std::nullopt; - } - // Create color resolve texture. std::shared_ptr resolve_tex; if (requires_blit) { resolve_tex_desc.compression_type = CompressionType::kLossy; - resolve_tex = allocator.CreateTexture(resolve_tex_desc); + resolve_tex = + context->GetResourceAllocator()->CreateTexture(resolve_tex_desc); } else { - resolve_tex = std::make_shared(resolve_tex_desc, texture); + resolve_tex = + std::make_shared(resolve_tex_desc, drawable.texture); } if (!resolve_tex) { VALIDATION_LOG << "Could not wrap resolve texture."; - return std::nullopt; + return nullptr; } resolve_tex->SetLabel("ImpellerOnscreenResolve"); - TextureDescriptor msaa_tex_desc; - msaa_tex_desc.storage_mode = StorageMode::kDeviceTransient; - msaa_tex_desc.type = TextureType::kTexture2DMultisample; - msaa_tex_desc.sample_count = SampleCount::kCount4; - msaa_tex_desc.format = resolve_tex->GetTextureDescriptor().format; - msaa_tex_desc.size = resolve_tex->GetSize(); - msaa_tex_desc.usage = static_cast(TextureUsage::kRenderTarget); - - auto msaa_tex = allocator.CreateTexture(msaa_tex_desc); - if (!msaa_tex) { - VALIDATION_LOG << "Could not allocate MSAA color texture."; - return std::nullopt; - } - msaa_tex->SetLabel("ImpellerOnscreenColorMSAA"); - ColorAttachment color0; color0.texture = msaa_tex; color0.clear_color = Color::DarkSlateGray(); color0.load_action = LoadAction::kClear; color0.store_action = StoreAction::kMultisampleResolve; - color0.resolve_texture = std::move(resolve_tex); + color0.resolve_texture = resolve_tex; RenderTarget render_target_desc; render_target_desc.SetColorAttachment(color0, 0u); - return render_target_desc; -} - -std::unique_ptr SurfaceMTL::MakeFromMetalLayerDrawable( - const std::shared_ptr& context, - id drawable, - std::optional clip_rect) { - bool requires_blit = ShouldPerformPartialRepaint(clip_rect); - - auto render_target = - WrapTextureWithRenderTarget(*context->GetResourceAllocator(), - drawable.texture, requires_blit, clip_rect); - if (!render_target) { - return nullptr; - } - - auto source_texture = - requires_blit ? render_target->GetRenderTargetTexture() : nullptr; - auto destination_texture = TextureMTL::Wrapper( - render_target->GetRenderTargetTexture()->GetTextureDescriptor(), - drawable.texture); - - return std::unique_ptr(new SurfaceMTL( - context, // context - *render_target, // target - render_target->GetRenderTargetTexture(), // resolve_texture - drawable, // drawable - source_texture, // source_texture - destination_texture, // destination_texture - requires_blit, // requires_blit - clip_rect // clip_rect - )); -} - -std::unique_ptr SurfaceMTL::MakeFromTexture( - const std::shared_ptr& context, - id texture, - std::optional clip_rect) { - bool requires_blit = ShouldPerformPartialRepaint(clip_rect); - - auto render_target = WrapTextureWithRenderTarget( - *context->GetResourceAllocator(), texture, requires_blit, clip_rect); - if (!render_target) { - return nullptr; - } - - auto source_texture = - requires_blit ? render_target->GetRenderTargetTexture() : nullptr; - auto destination_texture = TextureMTL::Wrapper( - render_target->GetRenderTargetTexture()->GetTextureDescriptor(), texture); - - return std::unique_ptr(new SurfaceMTL( - context, // context - *render_target, // target - render_target->GetRenderTargetTexture(), // resolve_texture - nil, // drawable - source_texture, // source_texture - destination_texture, // destination_texture - requires_blit, // requires_blit - clip_rect // clip_rect - )); + // The constructor is private. So make_unique may not be used. + return std::unique_ptr(new SurfaceMTL(context, render_target_desc, + resolve_tex, drawable, + requires_blit, clip_rect)); } SurfaceMTL::SurfaceMTL(const std::weak_ptr& context, const RenderTarget& target, std::shared_ptr resolve_texture, id drawable, - std::shared_ptr source_texture, - std::shared_ptr destination_texture, bool requires_blit, std::optional clip_rect) : Surface(target), context_(context), resolve_texture_(std::move(resolve_texture)), drawable_(drawable), - source_texture_(std::move(source_texture)), - destination_texture_(std::move(destination_texture)), requires_blit_(requires_blit), clip_rect_(clip_rect) {} @@ -232,16 +173,16 @@ static bool ShouldWaitForCommandBuffer() { // |Surface| bool SurfaceMTL::Present() const { + if (drawable_ == nil) { + return false; + } + auto context = context_.lock(); if (!context) { return false; } if (requires_blit_) { - if (!(source_texture_ && destination_texture_)) { - return false; - } - auto blit_command_buffer = context->CreateCommandBuffer(); if (!blit_command_buffer) { return false; @@ -251,7 +192,8 @@ static bool ShouldWaitForCommandBuffer() { VALIDATION_LOG << "Missing clip rectangle."; return false; } - blit_pass->AddCopy(source_texture_, destination_texture_, std::nullopt, + auto current = TextureMTL::Wrapper({}, drawable_.texture); + blit_pass->AddCopy(resolve_texture_, current, std::nullopt, clip_rect_->origin); blit_pass->EncodeCommands(context->GetResourceAllocator()); if (!blit_command_buffer->SubmitCommands()) { @@ -259,15 +201,13 @@ static bool ShouldWaitForCommandBuffer() { } } - if (drawable_) { - if (ShouldWaitForCommandBuffer()) { - id command_buffer = - ContextMTL::Cast(context.get())->CreateMTLCommandBuffer(); - [command_buffer commit]; - [command_buffer waitUntilScheduled]; - } - [drawable_ present]; + if (ShouldWaitForCommandBuffer()) { + id command_buffer = + ContextMTL::Cast(context.get())->CreateMTLCommandBuffer(); + [command_buffer commit]; + [command_buffer waitUntilScheduled]; } + [drawable_ present]; return true; } diff --git a/impeller/renderer/backend/metal/texture_mtl.h b/impeller/renderer/backend/metal/texture_mtl.h index 91cd8a122da11..9d9378d1b6ce7 100644 --- a/impeller/renderer/backend/metal/texture_mtl.h +++ b/impeller/renderer/backend/metal/texture_mtl.h @@ -19,10 +19,8 @@ class TextureMTL final : public Texture, id texture, bool wrapped = false); - static std::shared_ptr Wrapper( - TextureDescriptor desc, - id texture, - std::function deletion_proc = nullptr); + static std::shared_ptr Wrapper(TextureDescriptor desc, + id texture); // |Texture| ~TextureMTL() override; diff --git a/impeller/renderer/backend/metal/texture_mtl.mm b/impeller/renderer/backend/metal/texture_mtl.mm index bc57684363a7d..5c63624c014c6 100644 --- a/impeller/renderer/backend/metal/texture_mtl.mm +++ b/impeller/renderer/backend/metal/texture_mtl.mm @@ -9,13 +9,6 @@ namespace impeller { -std::shared_ptr WrapperMTL(TextureDescriptor desc, - const void* mtl_texture, - std::function deletion_proc) { - return TextureMTL::Wrapper(desc, (__bridge id)mtl_texture, - std::move(deletion_proc)); -} - TextureMTL::TextureMTL(TextureDescriptor p_desc, id texture, bool wrapped) @@ -35,18 +28,9 @@ is_valid_ = true; } -std::shared_ptr TextureMTL::Wrapper( - TextureDescriptor desc, - id texture, - std::function deletion_proc) { - if (deletion_proc) { - return std::shared_ptr( - new TextureMTL(desc, texture, true), - [deletion_proc = std::move(deletion_proc)](TextureMTL* t) { - deletion_proc(); - }); - } - return std::shared_ptr(new TextureMTL(desc, texture, true)); +std::shared_ptr TextureMTL::Wrapper(TextureDescriptor desc, + id texture) { + return std::make_shared(desc, texture, true); } TextureMTL::~TextureMTL() = default; diff --git a/impeller/renderer/backend/metal/texture_wrapper_mtl.h b/impeller/renderer/backend/metal/texture_wrapper_mtl.h deleted file mode 100644 index e6fe71f0f22e6..0000000000000 --- a/impeller/renderer/backend/metal/texture_wrapper_mtl.h +++ /dev/null @@ -1,16 +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. - -#pragma once - -#include "impeller/core/texture.h" - -namespace impeller { - -std::shared_ptr WrapTextureMTL( - TextureDescriptor desc, - const void* mtl_texture, - std::function deletion_proc = nullptr); - -} // namespace impeller diff --git a/impeller/renderer/backend/metal/texture_wrapper_mtl.mm b/impeller/renderer/backend/metal/texture_wrapper_mtl.mm deleted file mode 100644 index 2b6a908f6d7cb..0000000000000 --- a/impeller/renderer/backend/metal/texture_wrapper_mtl.mm +++ /dev/null @@ -1,22 +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 "impeller/renderer/backend/metal/texture_wrapper_mtl.h" - -#include - -#include "impeller/renderer/backend/metal/formats_mtl.h" -#include "impeller/renderer/backend/metal/texture_mtl.h" - -namespace impeller { - -std::shared_ptr WrapTextureMTL(TextureDescriptor desc, - const void* mtl_texture, - std::function deletion_proc) { - auto texture = (__bridge id)mtl_texture; - desc.format = FromMTLPixelFormat(texture.pixelFormat); - return TextureMTL::Wrapper(desc, texture, std::move(deletion_proc)); -} - -} // namespace impeller diff --git a/shell/common/rasterizer.cc b/shell/common/rasterizer.cc index 963c5005571c5..493befca84579 100644 --- a/shell/common/rasterizer.cc +++ b/shell/common/rasterizer.cc @@ -626,8 +626,8 @@ RasterStatus Rasterizer::DrawToSurfaceUnsafe( if (external_view_embedder_ && (!raster_thread_merger_ || raster_thread_merger_->IsMerged())) { FML_DCHECK(!frame->IsSubmitted()); - external_view_embedder_->SubmitFrame( - surface_->GetContext(), surface_->GetAiksContext(), std::move(frame)); + external_view_embedder_->SubmitFrame(surface_->GetContext(), + std::move(frame)); } else { frame->Submit(); } diff --git a/shell/common/rasterizer_unittests.cc b/shell/common/rasterizer_unittests.cc index daf36364851b1..53de96c86bd4e 100644 --- a/shell/common/rasterizer_unittests.cc +++ b/shell/common/rasterizer_unittests.cc @@ -74,9 +74,8 @@ class MockExternalViewEmbedder : public ExternalViewEmbedder { PostPrerollResult( fml::RefPtr raster_thread_merger)); MOCK_METHOD1(CompositeEmbeddedView, DlCanvas*(int64_t view_id)); - MOCK_METHOD3(SubmitFrame, + MOCK_METHOD2(SubmitFrame, void(GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame)); MOCK_METHOD2(EndFrame, void(bool should_resubmit_frame, diff --git a/shell/common/shell_test_external_view_embedder.cc b/shell/common/shell_test_external_view_embedder.cc index 22b9bfe13554b..2536bb62ac6a2 100644 --- a/shell/common/shell_test_external_view_embedder.cc +++ b/shell/common/shell_test_external_view_embedder.cc @@ -91,7 +91,6 @@ DlCanvas* ShellTestExternalViewEmbedder::CompositeEmbeddedView( // |ExternalViewEmbedder| void ShellTestExternalViewEmbedder::SubmitFrame( GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) { if (!frame) { return; diff --git a/shell/common/shell_test_external_view_embedder.h b/shell/common/shell_test_external_view_embedder.h index 36a392d208856..204472d5bc050 100644 --- a/shell/common/shell_test_external_view_embedder.h +++ b/shell/common/shell_test_external_view_embedder.h @@ -75,7 +75,6 @@ class ShellTestExternalViewEmbedder final : public ExternalViewEmbedder { // |ExternalViewEmbedder| void SubmitFrame(GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) override; // |ExternalViewEmbedder| diff --git a/shell/gpu/gpu_surface_metal_impeller.h b/shell/gpu/gpu_surface_metal_impeller.h index d89e5bf208166..3b139c1890384 100644 --- a/shell/gpu/gpu_surface_metal_impeller.h +++ b/shell/gpu/gpu_surface_metal_impeller.h @@ -5,25 +5,22 @@ #ifndef FLUTTER_SHELL_GPU_GPU_SURFACE_METAL_IMPELLER_H_ #define FLUTTER_SHELL_GPU_GPU_SURFACE_METAL_IMPELLER_H_ -#include +#include #include "flutter/flow/surface.h" #include "flutter/fml/macros.h" #include "flutter/fml/platform/darwin/scoped_nsobject.h" #include "flutter/impeller/aiks/aiks_context.h" -#include "flutter/impeller/renderer/backend/metal/context_mtl.h" #include "flutter/impeller/renderer/renderer.h" #include "flutter/shell/gpu/gpu_surface_metal_delegate.h" #include "third_party/skia/include/gpu/mtl/GrMtlTypes.h" namespace flutter { -class IMPELLER_CA_METAL_LAYER_AVAILABLE GPUSurfaceMetalImpeller - : public Surface { +class SK_API_AVAILABLE_CA_METAL_LAYER GPUSurfaceMetalImpeller : public Surface { public: GPUSurfaceMetalImpeller(GPUSurfaceMetalDelegate* delegate, - const std::shared_ptr& context, - bool render_to_surface = true); + const std::shared_ptr& context); // |Surface| ~GPUSurfaceMetalImpeller(); @@ -35,29 +32,16 @@ class IMPELLER_CA_METAL_LAYER_AVAILABLE GPUSurfaceMetalImpeller private: const GPUSurfaceMetalDelegate* delegate_; - const MTLRenderTargetType render_target_type_; std::shared_ptr impeller_renderer_; std::shared_ptr aiks_context_; - fml::scoped_nsprotocol> last_texture_; - // TODO(38466): Refactor GPU surface APIs take into account the fact that an - // external view embedder may want to render to the root surface. This is a - // hack to make avoid allocating resources for the root surface when an - // external view embedder is present. - bool render_to_surface_ = true; + fml::scoped_nsprotocol> last_drawable_; bool disable_partial_repaint_ = false; // Accumulated damage for each framebuffer; Key is address of underlying // MTLTexture for each drawable std::map damage_; // |Surface| - std::unique_ptr AcquireFrame( - const SkISize& frame_size) override; - - std::unique_ptr AcquireFrameFromCAMetalLayer( - const SkISize& frame_size); - - std::unique_ptr AcquireFrameFromMTLTexture( - const SkISize& frame_size); + std::unique_ptr AcquireFrame(const SkISize& size) override; // |Surface| SkMatrix GetRootTransformation() const override; diff --git a/shell/gpu/gpu_surface_metal_impeller.mm b/shell/gpu/gpu_surface_metal_impeller.mm index 32b2f28325394..94f77a1ec192f 100644 --- a/shell/gpu/gpu_surface_metal_impeller.mm +++ b/shell/gpu/gpu_surface_metal_impeller.mm @@ -29,14 +29,11 @@ } GPUSurfaceMetalImpeller::GPUSurfaceMetalImpeller(GPUSurfaceMetalDelegate* delegate, - const std::shared_ptr& context, - bool render_to_surface) + const std::shared_ptr& context) : delegate_(delegate), - render_target_type_(delegate->GetRenderTargetType()), impeller_renderer_(CreateImpellerRenderer(context)), aiks_context_( - std::make_shared(impeller_renderer_ ? context : nullptr)), - render_to_surface_(render_to_surface) { + std::make_shared(impeller_renderer_ ? context : nullptr)) { // If this preference is explicitly set, we allow for disabling partial repaint. NSNumber* disablePartialRepaint = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FLTDisablePartialRepaint"]; @@ -53,7 +50,7 @@ } // |Surface| -std::unique_ptr GPUSurfaceMetalImpeller::AcquireFrame(const SkISize& frame_size) { +std::unique_ptr GPUSurfaceMetalImpeller::AcquireFrame(const SkISize& frame_info) { TRACE_EVENT0("impeller", "GPUSurfaceMetalImpeller::AcquireFrame"); if (!IsValid()) { @@ -61,33 +58,7 @@ return nullptr; } - if (frame_size.isEmpty()) { - FML_LOG(ERROR) << "Metal surface was asked for an empty frame."; - return nullptr; - } - - if (!render_to_surface_) { - return std::make_unique( - nullptr, SurfaceFrame::FramebufferInfo(), - [](const SurfaceFrame& surface_frame, DlCanvas* canvas) { return true; }, frame_size); - } - - switch (render_target_type_) { - case MTLRenderTargetType::kCAMetalLayer: - return AcquireFrameFromCAMetalLayer(frame_size); - case MTLRenderTargetType::kMTLTexture: - return AcquireFrameFromMTLTexture(frame_size); - default: - FML_CHECK(false) << "Unknown MTLRenderTargetType type."; - } - - return nullptr; -} - -std::unique_ptr GPUSurfaceMetalImpeller::AcquireFrameFromCAMetalLayer( - const SkISize& frame_size) { - auto layer = delegate_->GetCAMetalLayer(frame_size); - + auto layer = delegate_->GetCAMetalLayer(frame_info); if (!layer) { FML_LOG(ERROR) << "Invalid CAMetalLayer given by the embedder."; return nullptr; @@ -98,16 +69,15 @@ auto drawable = impeller::SurfaceMTL::GetMetalDrawableAndValidate( impeller_renderer_->GetContext(), mtl_layer); if (Settings::kSurfaceDataAccessible) { - last_texture_.reset([drawable.texture retain]); + last_drawable_.reset([drawable retain]); } - id last_texture = static_cast>(last_texture_); + id metal_drawable = static_cast>(last_drawable_); SurfaceFrame::SubmitCallback submit_callback = fml::MakeCopyable([this, // renderer = impeller_renderer_, // aiks_context = aiks_context_, // - drawable, // - last_texture // + metal_drawable // ](SurfaceFrame& surface_frame, DlCanvas* canvas) mutable -> bool { if (!aiks_context) { return false; @@ -120,7 +90,7 @@ } if (!disable_partial_repaint_) { - uintptr_t texture = reinterpret_cast(last_texture); + uintptr_t texture = reinterpret_cast(metal_drawable.texture); for (auto& entry : damage_) { if (entry.first != texture) { @@ -141,106 +111,8 @@ buffer_damage->width(), buffer_damage->height()); } - auto surface = impeller::SurfaceMTL::MakeFromMetalLayerDrawable( - impeller_renderer_->GetContext(), drawable, clip_rect); - - if (clip_rect && (clip_rect->size.width == 0 || clip_rect->size.height == 0)) { - return surface->Present(); - } - - impeller::IRect cull_rect = surface->coverage(); - SkIRect sk_cull_rect = SkIRect::MakeWH(cull_rect.size.width, cull_rect.size.height); - impeller::DlDispatcher impeller_dispatcher(cull_rect); - display_list->Dispatch(impeller_dispatcher, sk_cull_rect); - auto picture = impeller_dispatcher.EndRecordingAsPicture(); - - return renderer->Render( - std::move(surface), - fml::MakeCopyable([aiks_context, picture = std::move(picture)]( - impeller::RenderTarget& render_target) -> bool { - return aiks_context->Render(picture, render_target); - })); - }); - - SurfaceFrame::FramebufferInfo framebuffer_info; - framebuffer_info.supports_readback = true; - - if (!disable_partial_repaint_) { - // Provide accumulated damage to rasterizer (area in current framebuffer that lags behind - // front buffer) - uintptr_t texture = reinterpret_cast(drawable.texture); - auto i = damage_.find(texture); - if (i != damage_.end()) { - framebuffer_info.existing_damage = i->second; - } - framebuffer_info.supports_partial_repaint = true; - } - - return std::make_unique(nullptr, // surface - framebuffer_info, // framebuffer info - submit_callback, // submit callback - frame_size, // frame size - nullptr, // context result - true // display list fallback - ); -} - -std::unique_ptr GPUSurfaceMetalImpeller::AcquireFrameFromMTLTexture( - const SkISize& frame_size) { - GPUMTLTextureInfo texture_info = delegate_->GetMTLTexture(frame_size); - id mtl_texture = (id)(texture_info.texture); - - if (!mtl_texture) { - FML_LOG(ERROR) << "Invalid MTLTexture given by the embedder."; - return nullptr; - } - - if (Settings::kSurfaceDataAccessible) { - last_texture_.reset([mtl_texture retain]); - } - - SurfaceFrame::SubmitCallback submit_callback = - fml::MakeCopyable([this, // - renderer = impeller_renderer_, // - aiks_context = aiks_context_, // - texture_info, // - mtl_texture, // - delegate = delegate_ // - ](SurfaceFrame& surface_frame, DlCanvas* canvas) mutable -> bool { - if (!aiks_context) { - return false; - } - - auto display_list = surface_frame.BuildDisplayList(); - if (!display_list) { - FML_LOG(ERROR) << "Could not build display list for surface frame."; - return false; - } - - if (!disable_partial_repaint_) { - uintptr_t texture_ptr = reinterpret_cast(mtl_texture); - - for (auto& entry : damage_) { - if (entry.first != texture_ptr) { - // Accumulate damage for other framebuffers - if (surface_frame.submit_info().frame_damage) { - entry.second.join(*surface_frame.submit_info().frame_damage); - } - } - } - // Reset accumulated damage for current framebuffer - damage_[texture_ptr] = SkIRect::MakeEmpty(); - } - - std::optional clip_rect; - if (surface_frame.submit_info().buffer_damage.has_value()) { - auto buffer_damage = surface_frame.submit_info().buffer_damage; - clip_rect = impeller::IRect::MakeXYWH(buffer_damage->x(), buffer_damage->y(), - buffer_damage->width(), buffer_damage->height()); - } - - auto surface = - impeller::SurfaceMTL::MakeFromTexture(renderer->GetContext(), mtl_texture, clip_rect); + auto surface = impeller::SurfaceMTL::WrapCurrentMetalLayerDrawable( + impeller_renderer_->GetContext(), metal_drawable, clip_rect); if (clip_rect && (clip_rect->size.width == 0 || clip_rect->size.height == 0)) { return surface->Present(); @@ -258,8 +130,6 @@ impeller::RenderTarget& render_target) -> bool { return aiks_context->Render(picture, render_target); })); - - delegate->PresentTexture(texture_info); }); SurfaceFrame::FramebufferInfo framebuffer_info; @@ -268,7 +138,7 @@ if (!disable_partial_repaint_) { // Provide accumulated damage to rasterizer (area in current framebuffer that lags behind // front buffer) - uintptr_t texture = reinterpret_cast(mtl_texture); + uintptr_t texture = reinterpret_cast(metal_drawable.texture); auto i = damage_.find(texture); if (i != damage_.end()) { framebuffer_info.existing_damage = i->second; @@ -279,7 +149,7 @@ return std::make_unique(nullptr, // surface framebuffer_info, // framebuffer info submit_callback, // submit callback - frame_size, // frame size + frame_info, // frame size nullptr, // context result true // display list fallback ); @@ -318,10 +188,11 @@ } Surface::SurfaceData GPUSurfaceMetalImpeller::GetSurfaceData() const { - if (!(last_texture_ && [last_texture_ conformsToProtocol:@protocol(MTLTexture)])) { + if (!(last_drawable_ && [last_drawable_ conformsToProtocol:@protocol(CAMetalDrawable)])) { return {}; } - id texture = last_texture_.get(); + id metal_drawable = static_cast>(last_drawable_); + id texture = metal_drawable.texture; int bytesPerPixel = 0; std::string pixel_format; switch (texture.pixelFormat) { diff --git a/shell/platform/android/external_view_embedder/external_view_embedder.cc b/shell/platform/android/external_view_embedder/external_view_embedder.cc index d29a80eb16a8c..f1d8af9f6a710 100644 --- a/shell/platform/android/external_view_embedder/external_view_embedder.cc +++ b/shell/platform/android/external_view_embedder/external_view_embedder.cc @@ -64,7 +64,6 @@ SkRect AndroidExternalViewEmbedder::GetViewRect(int64_t view_id) const { // |ExternalViewEmbedder| void AndroidExternalViewEmbedder::SubmitFrame( GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) { TRACE_EVENT0("flutter", "AndroidExternalViewEmbedder::SubmitFrame"); diff --git a/shell/platform/android/external_view_embedder/external_view_embedder.h b/shell/platform/android/external_view_embedder/external_view_embedder.h index 33b876674f6c3..03bae5ecb8e1a 100644 --- a/shell/platform/android/external_view_embedder/external_view_embedder.h +++ b/shell/platform/android/external_view_embedder/external_view_embedder.h @@ -46,7 +46,6 @@ class AndroidExternalViewEmbedder final : public ExternalViewEmbedder { // |ExternalViewEmbedder| void SubmitFrame(GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) override; // |ExternalViewEmbedder| diff --git a/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc b/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc index e6417a08f0800..3c08eef409281 100644 --- a/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc +++ b/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc @@ -313,7 +313,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame) { }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); // Submits frame if no Android view in the current frame. EXPECT_TRUE(did_submit_frame); // Doesn't resubmit frame. @@ -381,7 +381,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame) { }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); // Doesn't submit frame if there aren't Android views in the previous frame. EXPECT_FALSE(did_submit_frame); // Resubmits frame. @@ -446,7 +446,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame) { return true; }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); // Submits frame if there are Android views in the previous frame. EXPECT_TRUE(did_submit_frame); // Doesn't resubmit frame. @@ -553,7 +553,7 @@ TEST(AndroidExternalViewEmbedder, OverlayCoverTwoPlatformViews) { }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); EXPECT_CALL(*jni_mock, FlutterViewEndFrame()); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); @@ -656,7 +656,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrameOverlayComposition) { }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); EXPECT_CALL(*jni_mock, FlutterViewEndFrame()); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); @@ -724,7 +724,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFramePlatformViewWithoutAnyOverlay) { }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); EXPECT_CALL(*jni_mock, FlutterViewEndFrame()); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); @@ -825,7 +825,7 @@ TEST(AndroidExternalViewEmbedder, DestroyOverlayLayersOnSizeChange) { return true; }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); EXPECT_CALL(*jni_mock, FlutterViewEndFrame()); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); @@ -912,7 +912,7 @@ TEST(AndroidExternalViewEmbedder, DoesNotDestroyOverlayLayersOnSizeChange) { return true; }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); EXPECT_CALL(*jni_mock, FlutterViewEndFrame()); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); @@ -1023,7 +1023,7 @@ TEST(AndroidExternalViewEmbedder, Teardown) { SkSurfaces::Null(1000, 1000), framebuffer_info, [](const SurfaceFrame& surface_frame, DlCanvas* canvas) { return true; }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); diff --git a/shell/platform/darwin/ios/ios_external_view_embedder.h b/shell/platform/darwin/ios/ios_external_view_embedder.h index d83b435930f21..3893ccec0c1ab 100644 --- a/shell/platform/darwin/ios/ios_external_view_embedder.h +++ b/shell/platform/darwin/ios/ios_external_view_embedder.h @@ -51,7 +51,6 @@ class IOSExternalViewEmbedder : public ExternalViewEmbedder { // |ExternalViewEmbedder| void SubmitFrame(GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) override; // |ExternalViewEmbedder| diff --git a/shell/platform/darwin/ios/ios_external_view_embedder.mm b/shell/platform/darwin/ios/ios_external_view_embedder.mm index 67112e999d13d..4e28b6cfcca82 100644 --- a/shell/platform/darwin/ios/ios_external_view_embedder.mm +++ b/shell/platform/darwin/ios/ios_external_view_embedder.mm @@ -66,10 +66,8 @@ } // |ExternalViewEmbedder| -void IOSExternalViewEmbedder::SubmitFrame( - GrDirectContext* context, - const std::shared_ptr& aiks_context, - std::unique_ptr frame) { +void IOSExternalViewEmbedder::SubmitFrame(GrDirectContext* context, + std::unique_ptr frame) { TRACE_EVENT0("flutter", "IOSExternalViewEmbedder::SubmitFrame"); FML_CHECK(platform_views_controller_); platform_views_controller_->SubmitFrame(context, ios_context_, std::move(frame)); diff --git a/shell/platform/embedder/BUILD.gn b/shell/platform/embedder/BUILD.gn index aa43f3f48b755..9c827ac38bd3c 100644 --- a/shell/platform/embedder/BUILD.gn +++ b/shell/platform/embedder/BUILD.gn @@ -5,7 +5,6 @@ import("//build/toolchain/clang.gni") import("//flutter/build/zip_bundle.gni") import("//flutter/common/config.gni") -import("//flutter/impeller/tools/impeller.gni") import("//flutter/shell/gpu/gpu.gni") import("//flutter/shell/platform/embedder/embedder.gni") import("//flutter/testing/testing.gni") @@ -76,8 +75,6 @@ template("embedder_source_set") { "embedder_render_target.h", "embedder_render_target_cache.cc", "embedder_render_target_cache.h", - "embedder_render_target_skia.cc", - "embedder_render_target_skia.h", "embedder_struct_macros.h", "embedder_surface.cc", "embedder_surface.h", @@ -94,8 +91,6 @@ template("embedder_source_set") { "vsync_waiter_embedder.h", ] - public_deps = [ ":embedder_headers" ] - if (embedder_enable_gl) { sources += [ "embedder_external_texture_gl.cc", @@ -121,15 +116,6 @@ template("embedder_source_set") { "//third_party/skia", ] - if (impeller_supports_rendering) { - sources += [ - "embedder_render_target_impeller.cc", - "embedder_render_target_impeller.h", - ] - - deps += [ "//flutter/impeller" ] - } - if (embedder_enable_metal) { sources += [ "embedder_external_texture_metal.h", @@ -138,13 +124,6 @@ template("embedder_source_set") { "embedder_surface_metal.mm", ] - if (impeller_supports_rendering) { - sources += [ - "embedder_surface_metal_impeller.h", - "embedder_surface_metal_impeller.mm", - ] - } - cflags_objc = flutter_cflags_objc cflags_objcc = flutter_cflags_objcc @@ -163,11 +142,12 @@ template("embedder_source_set") { ] } + public_deps = [ ":embedder_headers" ] + public_configs += [ ":embedder_gpu_configuration_config", ":embedder_header_config", "//flutter:config", - "//flutter/impeller:impeller_public_config", ] } } diff --git a/shell/platform/embedder/embedder.cc b/shell/platform/embedder/embedder.cc index 7e026d86cb055..3090f58865f9a 100644 --- a/shell/platform/embedder/embedder.cc +++ b/shell/platform/embedder/embedder.cc @@ -54,7 +54,6 @@ extern const intptr_t kPlatformStrongDillSize; #include "flutter/shell/platform/embedder/embedder_external_texture_resolver.h" #include "flutter/shell/platform/embedder/embedder_platform_message_response.h" #include "flutter/shell/platform/embedder/embedder_render_target.h" -#include "flutter/shell/platform/embedder/embedder_render_target_skia.h" #include "flutter/shell/platform/embedder/embedder_struct_macros.h" #include "flutter/shell/platform/embedder/embedder_task_runner.h" #include "flutter/shell/platform/embedder/embedder_thread_host.h" @@ -69,14 +68,7 @@ extern const intptr_t kPlatformStrongDillSize; #ifdef SHELL_ENABLE_METAL #include "flutter/shell/platform/embedder/embedder_surface_metal.h" -#ifdef IMPELLER_SUPPORTS_RENDERING -#include "flutter/shell/platform/embedder/embedder_render_target_impeller.h" // nogncheck -#include "flutter/shell/platform/embedder/embedder_surface_metal_impeller.h" // nogncheck -#include "impeller/core/texture.h" // nogncheck -#include "impeller/renderer/backend/metal/texture_wrapper_mtl.h" // nogncheck -#include "impeller/renderer/render_target.h" // nogncheck -#endif // IMPELLER_SUPPORTS_RENDERING -#endif // SHELL_ENABLE_METAL +#endif const int32_t kFlutterSemanticsNodeIdBatchEnd = -1; const int32_t kFlutterSemanticsCustomActionIdBatchEnd = -1; @@ -460,8 +452,7 @@ InferMetalPlatformViewCreationCallback( const flutter::PlatformViewEmbedder::PlatformDispatchTable& platform_dispatch_table, std::unique_ptr - external_view_embedder, - bool enable_impeller) { + external_view_embedder) { if (config->type != kMetal) { return nullptr; } @@ -495,33 +486,20 @@ InferMetalPlatformViewCreationCallback( return texture_info; }; + flutter::EmbedderSurfaceMetal::MetalDispatchTable metal_dispatch_table = { + .present = metal_present, + .get_texture = metal_get_texture, + }; + std::shared_ptr view_embedder = std::move(external_view_embedder); - std::unique_ptr embedder_surface; - - if (enable_impeller) { - flutter::EmbedderSurfaceMetalImpeller::MetalDispatchTable - metal_dispatch_table = { - .present = metal_present, - .get_texture = metal_get_texture, - }; - embedder_surface = std::make_unique( - const_cast(config->metal.device), - const_cast( - config->metal.present_command_queue), - metal_dispatch_table, view_embedder); - } else { - flutter::EmbedderSurfaceMetal::MetalDispatchTable metal_dispatch_table = { - .present = metal_present, - .get_texture = metal_get_texture, - }; - embedder_surface = std::make_unique( - const_cast(config->metal.device), - const_cast( - config->metal.present_command_queue), - metal_dispatch_table, view_embedder); - } + std::unique_ptr embedder_surface = + std::make_unique( + const_cast(config->metal.device), + const_cast( + config->metal.present_command_queue), + metal_dispatch_table, view_embedder); // The static leak checker gets confused by the use of fml::MakeCopyable. // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) @@ -672,8 +650,7 @@ InferPlatformViewCreationCallback( const flutter::PlatformViewEmbedder::PlatformDispatchTable& platform_dispatch_table, std::unique_ptr - external_view_embedder, - bool enable_impeller) { + external_view_embedder) { if (config == nullptr) { return nullptr; } @@ -690,7 +667,7 @@ InferPlatformViewCreationCallback( case kMetal: return InferMetalPlatformViewCreationCallback( config, user_data, platform_dispatch_table, - std::move(external_view_embedder), enable_impeller); + std::move(external_view_embedder)); case kVulkan: return InferVulkanPlatformViewCreationCallback( config, user_data, platform_dispatch_table, @@ -920,76 +897,6 @@ static sk_sp MakeSkSurfaceFromBackingStore( #endif } -static std::unique_ptr -MakeRenderTargetFromBackingStoreImpeller( - FlutterBackingStore backing_store, - const fml::closure& on_release, - const std::shared_ptr& aiks_context, - const FlutterBackingStoreConfig& config, - const FlutterMetalBackingStore* metal) { -#if defined(SHELL_ENABLE_METAL) && defined(IMPELLER_SUPPORTS_RENDERING) - if (!metal->texture.texture) { - FML_LOG(ERROR) << "Embedder supplied null Metal texture."; - return nullptr; - } - - const auto size = impeller::ISize(config.size.width, config.size.height); - - impeller::TextureDescriptor resolve_tex_desc; - resolve_tex_desc.size = size; - resolve_tex_desc.sample_count = impeller::SampleCount::kCount1; - resolve_tex_desc.storage_mode = impeller::StorageMode::kDevicePrivate; - resolve_tex_desc.usage = - static_cast(impeller::TextureUsage::kRenderTarget) | - static_cast(impeller::TextureUsage::kShaderRead); - - auto resolve_tex = impeller::WrapTextureMTL( - resolve_tex_desc, metal->texture.texture, - [callback = metal->texture.destruction_callback, - user_data = metal->texture.user_data]() { callback(user_data); }); - if (!resolve_tex) { - FML_LOG(ERROR) << "Could not wrap embedder supplied Metal render texture."; - return nullptr; - } - resolve_tex->SetLabel("ImpellerBackingStoreResolve"); - - impeller::TextureDescriptor msaa_tex_desc; - msaa_tex_desc.storage_mode = impeller::StorageMode::kDeviceTransient; - msaa_tex_desc.type = impeller::TextureType::kTexture2DMultisample; - msaa_tex_desc.sample_count = impeller::SampleCount::kCount4; - msaa_tex_desc.format = resolve_tex->GetTextureDescriptor().format; - msaa_tex_desc.size = size; - msaa_tex_desc.usage = - static_cast(impeller::TextureUsage::kRenderTarget); - - auto msaa_tex = - aiks_context->GetContext()->GetResourceAllocator()->CreateTexture( - msaa_tex_desc); - if (!msaa_tex) { - FML_LOG(ERROR) << "Could not allocate MSAA color texture."; - return nullptr; - } - msaa_tex->SetLabel("ImpellerBackingStoreColorMSAA"); - - impeller::ColorAttachment color0; - color0.texture = msaa_tex; - color0.clear_color = impeller::Color::DarkSlateGray(); - color0.load_action = impeller::LoadAction::kClear; - color0.store_action = impeller::StoreAction::kMultisampleResolve; - color0.resolve_texture = resolve_tex; - - impeller::RenderTarget render_target_desc; - render_target_desc.SetColorAttachment(color0, 0u); - - return std::make_unique( - backing_store, aiks_context, - std::make_unique(std::move(render_target_desc)), - on_release); -#else - return nullptr; -#endif -} - static sk_sp MakeSkSurfaceFromBackingStore( GrDirectContext* context, const FlutterBackingStoreConfig& config, @@ -1044,23 +951,9 @@ static sk_sp MakeSkSurfaceFromBackingStore( } static std::unique_ptr -MakeRenderTargetFromSkSurface(FlutterBackingStore backing_store, - sk_sp skia_surface, - fml::closure on_release) { - if (!skia_surface) { - return nullptr; - } - return std::make_unique( - backing_store, std::move(skia_surface), std::move(on_release)); -} - -static std::unique_ptr -CreateEmbedderRenderTarget( - const FlutterCompositor* compositor, - const FlutterBackingStoreConfig& config, - GrDirectContext* context, - const std::shared_ptr& aiks_context, - bool enable_impeller) { +CreateEmbedderRenderTarget(const FlutterCompositor* compositor, + const FlutterBackingStoreConfig& config, + GrDirectContext* context) { FlutterBackingStore backing_store = {}; backing_store.struct_size = sizeof(backing_store); @@ -1095,77 +988,53 @@ CreateEmbedderRenderTarget( // No safe access checks on the renderer are necessary since we allocated // the struct. - std::unique_ptr render_target; + sk_sp render_surface; switch (backing_store.type) { - case kFlutterBackingStoreTypeOpenGL: { + case kFlutterBackingStoreTypeOpenGL: switch (backing_store.open_gl.type) { - case kFlutterOpenGLTargetTypeTexture: { - auto skia_surface = MakeSkSurfaceFromBackingStore( + case kFlutterOpenGLTargetTypeTexture: + render_surface = MakeSkSurfaceFromBackingStore( context, config, &backing_store.open_gl.texture); - render_target = MakeRenderTargetFromSkSurface( - backing_store, std::move(skia_surface), - collect_callback.Release()); break; - } - case kFlutterOpenGLTargetTypeFramebuffer: { - auto skia_surface = MakeSkSurfaceFromBackingStore( + case kFlutterOpenGLTargetTypeFramebuffer: + render_surface = MakeSkSurfaceFromBackingStore( context, config, &backing_store.open_gl.framebuffer); - render_target = MakeRenderTargetFromSkSurface( - backing_store, std::move(skia_surface), - collect_callback.Release()); break; - } } break; - } - case kFlutterBackingStoreTypeSoftware: { - auto skia_surface = MakeSkSurfaceFromBackingStore( - context, config, &backing_store.software); - render_target = MakeRenderTargetFromSkSurface( - backing_store, std::move(skia_surface), collect_callback.Release()); + case kFlutterBackingStoreTypeSoftware: + render_surface = MakeSkSurfaceFromBackingStore(context, config, + &backing_store.software); break; - } - case kFlutterBackingStoreTypeSoftware2: { - auto skia_surface = MakeSkSurfaceFromBackingStore( - context, config, &backing_store.software2); - render_target = MakeRenderTargetFromSkSurface( - backing_store, std::move(skia_surface), collect_callback.Release()); + case kFlutterBackingStoreTypeSoftware2: + render_surface = MakeSkSurfaceFromBackingStore(context, config, + &backing_store.software2); break; - } - case kFlutterBackingStoreTypeMetal: { - if (enable_impeller) { - auto impeller_target = MakeRenderTargetFromBackingStoreImpeller( - backing_store, collect_callback.Release(), aiks_context, config, - &backing_store.metal); - } else { - auto skia_surface = MakeSkSurfaceFromBackingStore(context, config, - &backing_store.metal); - render_target = MakeRenderTargetFromSkSurface( - backing_store, std::move(skia_surface), collect_callback.Release()); - } + case kFlutterBackingStoreTypeMetal: + render_surface = + MakeSkSurfaceFromBackingStore(context, config, &backing_store.metal); break; - } - case kFlutterBackingStoreTypeVulkan: { - auto skia_surface = + + case kFlutterBackingStoreTypeVulkan: + render_surface = MakeSkSurfaceFromBackingStore(context, config, &backing_store.vulkan); - render_target = MakeRenderTargetFromSkSurface( - backing_store, std::move(skia_surface), collect_callback.Release()); break; - } }; - if (!render_target) { + if (!render_surface) { FML_LOG(ERROR) << "Could not create a surface from an embedder provided " "render target."; + return nullptr; } - return render_target; + + return std::make_unique( + backing_store, std::move(render_surface), collect_callback.Release()); } static std::pair, bool /* halt engine launch if true */> -InferExternalViewEmbedderFromArgs(const FlutterCompositor* compositor, - bool enable_impeller) { +InferExternalViewEmbedderFromArgs(const FlutterCompositor* compositor) { if (compositor == nullptr) { return {nullptr, false}; } @@ -1189,13 +1058,9 @@ InferExternalViewEmbedderFromArgs(const FlutterCompositor* compositor, flutter::EmbedderExternalViewEmbedder::CreateRenderTargetCallback create_render_target_callback = - [captured_compositor, enable_impeller]( - GrDirectContext* context, - const std::shared_ptr& aiks_context, - const auto& config) { + [captured_compositor](GrDirectContext* context, const auto& config) { return CreateEmbedderRenderTarget(&captured_compositor, config, - context, aiks_context, - enable_impeller); + context); }; flutter::EmbedderExternalViewEmbedder::PresentCallback present_callback = @@ -1947,8 +1812,8 @@ FlutterEngineResult FlutterEngineInitialize(size_t version, user_data]() { return ptr(user_data); }; } - auto external_view_embedder_result = InferExternalViewEmbedderFromArgs( - SAFE_ACCESS(args, compositor, nullptr), settings.enable_impeller); + auto external_view_embedder_result = + InferExternalViewEmbedderFromArgs(SAFE_ACCESS(args, compositor, nullptr)); if (external_view_embedder_result.second) { return LOG_EMBEDDER_ERROR(kInvalidArguments, "Compositor arguments were invalid."); @@ -1965,7 +1830,7 @@ FlutterEngineResult FlutterEngineInitialize(size_t version, auto on_create_platform_view = InferPlatformViewCreationCallback( config, user_data, platform_dispatch_table, - std::move(external_view_embedder_result.first), settings.enable_impeller); + std::move(external_view_embedder_result.first)); if (!on_create_platform_view) { return LOG_EMBEDDER_ERROR( diff --git a/shell/platform/embedder/embedder_external_view.cc b/shell/platform/embedder/embedder_external_view.cc index fe013ef312f8b..cd72a3e4978b6 100644 --- a/shell/platform/embedder/embedder_external_view.cc +++ b/shell/platform/embedder/embedder_external_view.cc @@ -3,15 +3,9 @@ // found in the LICENSE file. #include "flutter/shell/platform/embedder/embedder_external_view.h" - -#include "flutter/display_list/dl_builder.h" #include "flutter/fml/trace_event.h" #include "flutter/shell/common/dl_op_spy.h" -#ifdef IMPELLER_SUPPORTS_RENDERING -#include "impeller/display_list/dl_dispatcher.h" -#endif // IMPELLER_SUPPORTS_RENDERING - namespace flutter { static SkISize TransformedSurfaceSize(const SkISize& size, @@ -89,30 +83,15 @@ bool EmbedderExternalView::Render(const EmbedderRenderTarget& render_target) { << "Unnecessarily asked to render into a render target when there was " "nothing to render."; -#ifdef IMPELLER_SUPPORTS_RENDERING - auto* impeller_target = render_target.GetImpellerRenderTarget(); - if (impeller_target) { - auto aiks_context = render_target.GetAiksContext(); - - auto dl_builder = DisplayListBuilder(); - dl_builder.SetTransform(&surface_transformation_); - slice_->render_into(&dl_builder); - - auto dispatcher = impeller::DlDispatcher(); - dispatcher.drawDisplayList(dl_builder.Build(), 1); - return aiks_context->Render(dispatcher.EndRecordingAsPicture(), - *impeller_target); - } -#endif // IMPELLER_SUPPORTS_RENDERING - - auto skia_surface = render_target.GetSkiaSurface(); - if (!skia_surface) { + auto surface = render_target.GetRenderSurface(); + if (!surface) { return false; } - FML_DCHECK(render_target.GetRenderTargetSize() == render_surface_size_); + FML_DCHECK(SkISize::Make(surface->width(), surface->height()) == + render_surface_size_); - auto canvas = skia_surface->getCanvas(); + auto canvas = surface->getCanvas(); if (!canvas) { return false; } diff --git a/shell/platform/embedder/embedder_external_view_embedder.cc b/shell/platform/embedder/embedder_external_view_embedder.cc index f87d451a6af26..e4870090c6c9f 100644 --- a/shell/platform/embedder/embedder_external_view_embedder.cc +++ b/shell/platform/embedder/embedder_external_view_embedder.cc @@ -125,7 +125,6 @@ static FlutterBackingStoreConfig MakeBackingStoreConfig( // |ExternalViewEmbedder| void EmbedderExternalViewEmbedder::SubmitFrame( GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) { auto [matched_render_targets, pending_keys] = render_target_cache_.GetExistingTargetsInCache(pending_views_); @@ -173,8 +172,8 @@ void EmbedderExternalViewEmbedder::SubmitFrame( // the context must be reset. // // @warning: Embedder may trample on our OpenGL context here. - auto render_target = create_render_target_callback_(context, aiks_context, - backing_store_config); + auto render_target = + create_render_target_callback_(context, backing_store_config); if (!render_target) { FML_LOG(ERROR) << "Embedder did not return a valid render target."; diff --git a/shell/platform/embedder/embedder_external_view_embedder.h b/shell/platform/embedder/embedder_external_view_embedder.h index 014f7393c416e..55a08f0627a72 100644 --- a/shell/platform/embedder/embedder_external_view_embedder.h +++ b/shell/platform/embedder/embedder_external_view_embedder.h @@ -6,7 +6,6 @@ #define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_EXTERNAL_VIEW_EMBEDDER_H_ #include -#include #include #include "flutter/flow/embedded_views.h" @@ -32,7 +31,6 @@ class EmbedderExternalViewEmbedder final : public ExternalViewEmbedder { using CreateRenderTargetCallback = std::function( GrDirectContext* context, - const std::shared_ptr& aiks_context, const FlutterBackingStoreConfig& config)>; using PresentCallback = std::function& layers)>; @@ -97,7 +95,6 @@ class EmbedderExternalViewEmbedder final : public ExternalViewEmbedder { // |ExternalViewEmbedder| void SubmitFrame(GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) override; // |ExternalViewEmbedder| diff --git a/shell/platform/embedder/embedder_render_target.cc b/shell/platform/embedder/embedder_render_target.cc index 69259e3ab206d..5d6d22887c043 100644 --- a/shell/platform/embedder/embedder_render_target.cc +++ b/shell/platform/embedder/embedder_render_target.cc @@ -4,17 +4,24 @@ #include "flutter/shell/platform/embedder/embedder_render_target.h" -#include #include +#include "flutter/fml/logging.h" + +#include "third_party/skia/include/core/SkSurface.h" + namespace flutter { EmbedderRenderTarget::EmbedderRenderTarget(FlutterBackingStore backing_store, + sk_sp render_surface, fml::closure on_release) - : backing_store_(backing_store), on_release_(std::move(on_release)) { + : backing_store_(backing_store), + render_surface_(std::move(render_surface)), + on_release_(std::move(on_release)) { // TODO(38468): The optimization to elide backing store updates between frames // has not been implemented yet. backing_store_.did_update = true; + FML_DCHECK(render_surface_); } EmbedderRenderTarget::~EmbedderRenderTarget() { @@ -27,4 +34,8 @@ const FlutterBackingStore* EmbedderRenderTarget::GetBackingStore() const { return &backing_store_; } +sk_sp EmbedderRenderTarget::GetRenderSurface() const { + return render_surface_; +} + } // namespace flutter diff --git a/shell/platform/embedder/embedder_render_target.h b/shell/platform/embedder/embedder_render_target.h index cfbb67c07f5f3..8afbed31e30f0 100644 --- a/shell/platform/embedder/embedder_render_target.h +++ b/shell/platform/embedder/embedder_render_target.h @@ -5,18 +5,12 @@ #ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_H_ #define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_H_ -#include #include "flutter/fml/closure.h" #include "flutter/fml/macros.h" #include "flutter/shell/platform/embedder/embedder.h" -#include "third_party/skia/include/core/SkSize.h" +#include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkSurface.h" -namespace impeller { -class RenderTarget; -class AiksContext; -} // namespace impeller - namespace flutter { //------------------------------------------------------------------------------ @@ -27,12 +21,29 @@ namespace flutter { /// class EmbedderRenderTarget { public: + //---------------------------------------------------------------------------- + /// @brief Creates a render target whose backing store is managed by the + /// embedder. The way this render target is exposed to the engine + /// is via an SkSurface and a callback that is invoked by this + /// object in its destructor. + /// + /// @param[in] backing_store The backing store describing this render + /// target. + /// @param[in] render_surface The surface for this target. + /// @param[in] on_release The callback to invoke (eventually forwarded + /// to the embedder) when the backing store is no + /// longer required by the engine. + /// + EmbedderRenderTarget(FlutterBackingStore backing_store, + sk_sp render_surface, + fml::closure on_release); + //---------------------------------------------------------------------------- /// @brief Destroys this instance of the render target and invokes the /// callback for the embedder to release its resource associated /// with the particular backing store. /// - virtual ~EmbedderRenderTarget(); + ~EmbedderRenderTarget(); //---------------------------------------------------------------------------- /// @brief A render surface the rasterizer can use to draw into the @@ -40,30 +51,7 @@ class EmbedderRenderTarget { /// /// @return The render surface. /// - virtual sk_sp GetSkiaSurface() const = 0; - - //---------------------------------------------------------------------------- - /// @brief An impeller render target the rasterizer can use to draw into - /// the backing store. - /// - /// @return The Impeller render target. - /// - virtual impeller::RenderTarget* GetImpellerRenderTarget() const = 0; - - //---------------------------------------------------------------------------- - /// @brief Returns the AiksContext that should be used for rendering, if - /// this render target is backed by Impeller. - /// - /// @return The Impeller Aiks context. - /// - virtual std::shared_ptr GetAiksContext() const = 0; - - //---------------------------------------------------------------------------- - /// @brief Returns the size of the render target. - /// - /// @return The size of the render target. - /// - virtual SkISize GetRenderTargetSize() const = 0; + sk_sp GetRenderSurface() const; //---------------------------------------------------------------------------- /// @brief The embedder backing store descriptor. This is the descriptor @@ -77,25 +65,9 @@ class EmbedderRenderTarget { /// const FlutterBackingStore* GetBackingStore() const; - protected: - //---------------------------------------------------------------------------- - /// @brief Creates a render target whose backing store is managed by the - /// embedder. The way this render target is exposed to the engine - /// is via an SkSurface and a callback that is invoked by this - /// object in its destructor. - /// - /// @param[in] backing_store The backing store describing this render - /// target. - /// @param[in] on_release The callback to invoke (eventually forwarded - /// to the embedder) when the backing store is no - /// longer required by the engine. - /// - EmbedderRenderTarget(FlutterBackingStore backing_store, - fml::closure on_release); - private: FlutterBackingStore backing_store_; - + sk_sp render_surface_; fml::closure on_release_; FML_DISALLOW_COPY_AND_ASSIGN(EmbedderRenderTarget); diff --git a/shell/platform/embedder/embedder_render_target_cache.cc b/shell/platform/embedder/embedder_render_target_cache.cc index 3d0e6b4c99858..1347b032791d1 100644 --- a/shell/platform/embedder/embedder_render_target_cache.cc +++ b/shell/platform/embedder/embedder_render_target_cache.cc @@ -56,8 +56,9 @@ void EmbedderRenderTargetCache::CacheRenderTarget( if (target == nullptr) { return; } + auto surface = target->GetRenderSurface(); auto desc = EmbedderExternalView::RenderTargetDescriptor{ - view_identifier, target->GetRenderTargetSize()}; + view_identifier, SkISize::Make(surface->width(), surface->height())}; cached_render_targets_[desc].push(std::move(target)); } diff --git a/shell/platform/embedder/embedder_render_target_impeller.cc b/shell/platform/embedder/embedder_render_target_impeller.cc deleted file mode 100644 index 44f23b62654d2..0000000000000 --- a/shell/platform/embedder/embedder_render_target_impeller.cc +++ /dev/null @@ -1,45 +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/embedder_render_target_impeller.h" - -#include "flutter/fml/logging.h" -#include "flutter/impeller/renderer/render_target.h" - -namespace flutter { - -EmbedderRenderTargetImpeller::EmbedderRenderTargetImpeller( - FlutterBackingStore backing_store, - std::shared_ptr aiks_context, - std::unique_ptr impeller_target, - fml::closure on_release) - : EmbedderRenderTarget(backing_store, std::move(on_release)), - aiks_context_(std::move(aiks_context)), - impeller_target_(std::move(impeller_target)) { - FML_DCHECK(aiks_context_); - FML_DCHECK(impeller_target_); -} - -EmbedderRenderTargetImpeller::~EmbedderRenderTargetImpeller() = default; - -sk_sp EmbedderRenderTargetImpeller::GetSkiaSurface() const { - return nullptr; -} - -impeller::RenderTarget* EmbedderRenderTargetImpeller::GetImpellerRenderTarget() - const { - return impeller_target_.get(); -} - -std::shared_ptr -EmbedderRenderTargetImpeller::GetAiksContext() const { - return aiks_context_; -} - -SkISize EmbedderRenderTargetImpeller::GetRenderTargetSize() const { - auto size = impeller_target_->GetRenderTargetSize(); - return SkISize::Make(size.width, size.height); -} - -} // namespace flutter diff --git a/shell/platform/embedder/embedder_render_target_impeller.h b/shell/platform/embedder/embedder_render_target_impeller.h deleted file mode 100644 index 2425402008f8a..0000000000000 --- a/shell/platform/embedder/embedder_render_target_impeller.h +++ /dev/null @@ -1,44 +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. - -#ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_IMPELLER_H_ -#define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_IMPELLER_H_ - -#include "flutter/shell/platform/embedder/embedder_render_target.h" - -namespace flutter { - -class EmbedderRenderTargetImpeller final : public EmbedderRenderTarget { - public: - EmbedderRenderTargetImpeller( - FlutterBackingStore backing_store, - std::shared_ptr aiks_context, - std::unique_ptr impeller_target, - fml::closure on_release); - - // |EmbedderRenderTarget| - ~EmbedderRenderTargetImpeller() override; - - // |EmbedderRenderTarget| - sk_sp GetSkiaSurface() const override; - - // |EmbedderRenderTarget| - impeller::RenderTarget* GetImpellerRenderTarget() const override; - - // |EmbedderRenderTarget| - std::shared_ptr GetAiksContext() const override; - - // |EmbedderRenderTarget| - SkISize GetRenderTargetSize() const override; - - private: - std::shared_ptr aiks_context_; - std::unique_ptr impeller_target_; - - FML_DISALLOW_COPY_AND_ASSIGN(EmbedderRenderTargetImpeller); -}; - -} // namespace flutter - -#endif // FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_IMPELLER_H_ diff --git a/shell/platform/embedder/embedder_render_target_skia.cc b/shell/platform/embedder/embedder_render_target_skia.cc deleted file mode 100644 index e8d60ca60890f..0000000000000 --- a/shell/platform/embedder/embedder_render_target_skia.cc +++ /dev/null @@ -1,40 +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/embedder_render_target_skia.h" - -#include "flutter/fml/logging.h" - -namespace flutter { - -EmbedderRenderTargetSkia::EmbedderRenderTargetSkia( - FlutterBackingStore backing_store, - sk_sp render_surface, - fml::closure on_release) - : EmbedderRenderTarget(backing_store, std::move(on_release)), - render_surface_(std::move(render_surface)) { - FML_DCHECK(render_surface_); -} - -EmbedderRenderTargetSkia::~EmbedderRenderTargetSkia() = default; - -sk_sp EmbedderRenderTargetSkia::GetSkiaSurface() const { - return render_surface_; -} - -impeller::RenderTarget* EmbedderRenderTargetSkia::GetImpellerRenderTarget() - const { - return nullptr; -} - -std::shared_ptr -EmbedderRenderTargetSkia::GetAiksContext() const { - return nullptr; -} - -SkISize EmbedderRenderTargetSkia::GetRenderTargetSize() const { - return SkISize::Make(render_surface_->width(), render_surface_->height()); -} - -} // namespace flutter diff --git a/shell/platform/embedder/embedder_render_target_skia.h b/shell/platform/embedder/embedder_render_target_skia.h deleted file mode 100644 index 2ccacfee33a2e..0000000000000 --- a/shell/platform/embedder/embedder_render_target_skia.h +++ /dev/null @@ -1,41 +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. - -#ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_SKIA_H_ -#define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_SKIA_H_ - -#include "flutter/shell/platform/embedder/embedder_render_target.h" - -namespace flutter { - -class EmbedderRenderTargetSkia final : public EmbedderRenderTarget { - public: - EmbedderRenderTargetSkia(FlutterBackingStore backing_store, - sk_sp render_surface, - fml::closure on_release); - - // |EmbedderRenderTarget| - ~EmbedderRenderTargetSkia() override; - - // |EmbedderRenderTarget| - sk_sp GetSkiaSurface() const override; - - // |EmbedderRenderTarget| - impeller::RenderTarget* GetImpellerRenderTarget() const override; - - // |EmbedderRenderTarget| - std::shared_ptr GetAiksContext() const override; - - // |EmbedderRenderTarget| - SkISize GetRenderTargetSize() const override; - - private: - sk_sp render_surface_; - - FML_DISALLOW_COPY_AND_ASSIGN(EmbedderRenderTargetSkia); -}; - -} // namespace flutter - -#endif // FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_SKIA_H_ diff --git a/shell/platform/embedder/embedder_surface.cc b/shell/platform/embedder/embedder_surface.cc index 029833f7434ba..dbe619b8e0fa7 100644 --- a/shell/platform/embedder/embedder_surface.cc +++ b/shell/platform/embedder/embedder_surface.cc @@ -10,13 +10,4 @@ EmbedderSurface::EmbedderSurface() = default; EmbedderSurface::~EmbedderSurface() = default; -std::shared_ptr EmbedderSurface::CreateImpellerContext() - const { - return nullptr; -} - -sk_sp EmbedderSurface::CreateResourceContext() const { - return nullptr; -} - } // namespace flutter diff --git a/shell/platform/embedder/embedder_surface.h b/shell/platform/embedder/embedder_surface.h index 32873f1a944a5..ed8dbff74b8d0 100644 --- a/shell/platform/embedder/embedder_surface.h +++ b/shell/platform/embedder/embedder_surface.h @@ -5,7 +5,6 @@ #ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_SURFACE_H_ #define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_SURFACE_H_ -#include #include "flutter/flow/embedded_views.h" #include "flutter/flow/surface.h" #include "flutter/fml/macros.h" @@ -22,9 +21,7 @@ class EmbedderSurface { virtual std::unique_ptr CreateGPUSurface() = 0; - virtual std::shared_ptr CreateImpellerContext() const; - - virtual sk_sp CreateResourceContext() const; + virtual sk_sp CreateResourceContext() const = 0; private: FML_DISALLOW_COPY_AND_ASSIGN(EmbedderSurface); diff --git a/shell/platform/embedder/embedder_surface_metal_impeller.h b/shell/platform/embedder/embedder_surface_metal_impeller.h deleted file mode 100644 index 4fb2b990029c6..0000000000000 --- a/shell/platform/embedder/embedder_surface_metal_impeller.h +++ /dev/null @@ -1,70 +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. - -#ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_SURFACE_METAL_IMPELLER_H_ -#define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_SURFACE_METAL_IMPELLER_H_ - -#include -#include "flutter/fml/macros.h" -#include "flutter/shell/gpu/gpu_surface_metal_delegate.h" -#include "flutter/shell/gpu/gpu_surface_metal_skia.h" -#include "flutter/shell/platform/embedder/embedder_external_view_embedder.h" -#include "flutter/shell/platform/embedder/embedder_surface.h" -#include "fml/concurrent_message_loop.h" - -namespace impeller { -class Context; -} - -namespace flutter { - -class EmbedderSurfaceMetalImpeller final : public EmbedderSurface, - public GPUSurfaceMetalDelegate { - public: - struct MetalDispatchTable { - std::function present; // required - std::function - get_texture; // required - }; - - EmbedderSurfaceMetalImpeller( - GPUMTLDeviceHandle device, - GPUMTLCommandQueueHandle command_queue, - MetalDispatchTable dispatch_table, - std::shared_ptr external_view_embedder); - - ~EmbedderSurfaceMetalImpeller() override; - - private: - bool valid_ = false; - MetalDispatchTable metal_dispatch_table_; - std::shared_ptr external_view_embedder_; - std::shared_ptr context_; - std::shared_ptr concurrent_loop_; - - // |EmbedderSurface| - bool IsValid() const override; - - // |EmbedderSurface| - std::unique_ptr CreateGPUSurface() override; - - // |GPUSurfaceMetalDelegate| - GPUCAMetalLayerHandle GetCAMetalLayer( - const SkISize& frame_size) const override; - - // |GPUSurfaceMetalDelegate| - bool PresentDrawable(GrMTLHandle drawable) const override; - - // |GPUSurfaceMetalDelegate| - GPUMTLTextureInfo GetMTLTexture(const SkISize& frame_size) const override; - - // |GPUSurfaceMetalDelegate| - bool PresentTexture(GPUMTLTextureInfo texture) const override; - - FML_DISALLOW_COPY_AND_ASSIGN(EmbedderSurfaceMetalImpeller); -}; - -} // namespace flutter - -#endif // FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_SURFACE_METAL_IMPELLER_H_ diff --git a/shell/platform/embedder/embedder_surface_metal_impeller.mm b/shell/platform/embedder/embedder_surface_metal_impeller.mm deleted file mode 100644 index c7984f4f386ef..0000000000000 --- a/shell/platform/embedder/embedder_surface_metal_impeller.mm +++ /dev/null @@ -1,97 +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 -#include - -#include "flutter/shell/platform/embedder/embedder_surface_metal_impeller.h" - -#include "flutter/fml/logging.h" -#include "flutter/fml/synchronization/sync_switch.h" -#include "flutter/shell/gpu/gpu_surface_metal_delegate.h" -#include "flutter/shell/gpu/gpu_surface_metal_impeller.h" -#import "flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.h" -#include "impeller/entity/mtl/entity_shaders.h" -#include "impeller/entity/mtl/framebuffer_blend_shaders.h" -#include "impeller/entity/mtl/modern_shaders.h" -#include "impeller/renderer/backend/metal/context_mtl.h" -#include "impeller/scene/shaders/mtl/scene_shaders.h" - -FLUTTER_ASSERT_NOT_ARC - -namespace flutter { - -EmbedderSurfaceMetalImpeller::EmbedderSurfaceMetalImpeller( - GPUMTLDeviceHandle device, - GPUMTLCommandQueueHandle command_queue, - MetalDispatchTable metal_dispatch_table, - std::shared_ptr external_view_embedder) - : GPUSurfaceMetalDelegate(MTLRenderTargetType::kMTLTexture), - metal_dispatch_table_(std::move(metal_dispatch_table)), - external_view_embedder_(std::move(external_view_embedder)), - concurrent_loop_(fml::ConcurrentMessageLoop::Create()) { - std::vector> shader_mappings = { - std::make_shared(impeller_entity_shaders_data, - impeller_entity_shaders_length), - std::make_shared(impeller_scene_shaders_data, - impeller_scene_shaders_length), - std::make_shared(impeller_modern_shaders_data, - impeller_modern_shaders_length), - std::make_shared(impeller_framebuffer_blend_shaders_data, - impeller_framebuffer_blend_shaders_length), - }; - context_ = impeller::ContextMTL::Create( - (id)device, // device - (id)command_queue, // command_queue - shader_mappings, // shader_libraries_data - concurrent_loop_->GetTaskRunner(), // worker_task_runner - std::make_shared(false), // is_gpu_disabled_sync_switch - "Impeller Library" // library_label - ); - - valid_ = !!context_; -} - -EmbedderSurfaceMetalImpeller::~EmbedderSurfaceMetalImpeller() = default; - -bool EmbedderSurfaceMetalImpeller::IsValid() const { - return valid_; -} - -std::unique_ptr EmbedderSurfaceMetalImpeller::CreateGPUSurface() - IMPELLER_CA_METAL_LAYER_AVAILABLE { - if (!IsValid()) { - return nullptr; - } - - const bool render_to_surface = !external_view_embedder_; - auto surface = std::make_unique(this, context_, render_to_surface); - - if (!surface->IsValid()) { - return nullptr; - } - - return surface; -} - -GPUCAMetalLayerHandle EmbedderSurfaceMetalImpeller::GetCAMetalLayer( - const SkISize& frame_info) const { - FML_CHECK(false) << "Only rendering to MTLTexture is supported."; - return nullptr; -} - -bool EmbedderSurfaceMetalImpeller::PresentDrawable(GrMTLHandle drawable) const { - FML_CHECK(false) << "Only rendering to MTLTexture is supported."; - return false; -} - -GPUMTLTextureInfo EmbedderSurfaceMetalImpeller::GetMTLTexture(const SkISize& frame_info) const { - return metal_dispatch_table_.get_texture(frame_info); -} - -bool EmbedderSurfaceMetalImpeller::PresentTexture(GPUMTLTextureInfo texture) const { - return metal_dispatch_table_.present(texture); -} - -} // namespace flutter diff --git a/shell/platform/embedder/platform_view_embedder.cc b/shell/platform/embedder/platform_view_embedder.cc index ccbe0fc01a524..1cedc22810a50 100644 --- a/shell/platform/embedder/platform_view_embedder.cc +++ b/shell/platform/embedder/platform_view_embedder.cc @@ -86,7 +86,7 @@ PlatformViewEmbedder::PlatformViewEmbedder( PlatformViewEmbedder::PlatformViewEmbedder( PlatformView::Delegate& delegate, const flutter::TaskRunners& task_runners, - std::unique_ptr embedder_surface, + std::unique_ptr embedder_surface, PlatformDispatchTable platform_dispatch_table, std::shared_ptr external_view_embedder) : PlatformView(delegate, task_runners), @@ -157,11 +157,6 @@ PlatformViewEmbedder::CreateExternalViewEmbedder() { return external_view_embedder_; } -std::shared_ptr PlatformViewEmbedder::GetImpellerContext() - const { - return embedder_surface_->CreateImpellerContext(); -} - // |PlatformView| sk_sp PlatformViewEmbedder::CreateResourceContext() const { if (embedder_surface_ == nullptr) { diff --git a/shell/platform/embedder/platform_view_embedder.h b/shell/platform/embedder/platform_view_embedder.h index 87378b5074672..20f4dc139875b 100644 --- a/shell/platform/embedder/platform_view_embedder.h +++ b/shell/platform/embedder/platform_view_embedder.h @@ -76,7 +76,7 @@ class PlatformViewEmbedder final : public PlatformView { PlatformViewEmbedder( PlatformView::Delegate& delegate, const flutter::TaskRunners& task_runners, - std::unique_ptr embedder_surface, + std::unique_ptr embedder_surface, PlatformDispatchTable platform_dispatch_table, std::shared_ptr external_view_embedder); #endif @@ -118,9 +118,6 @@ class PlatformViewEmbedder final : public PlatformView { // |PlatformView| std::shared_ptr CreateExternalViewEmbedder() override; - // |PlatformView| - std::shared_ptr GetImpellerContext() const override; - // |PlatformView| sk_sp CreateResourceContext() const override; diff --git a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc index 366b72bc0b429..901bd8c078e97 100644 --- a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc +++ b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc @@ -132,7 +132,6 @@ void FlatlandExternalViewEmbedder::EndFrame( void FlatlandExternalViewEmbedder::SubmitFrame( GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) { TRACE_EVENT0("flutter", "FlatlandExternalViewEmbedder::SubmitFrame"); std::vector> frame_surfaces; diff --git a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h index 5a3142eb5d2f6..00a845cde2e85 100644 --- a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h +++ b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h @@ -87,7 +87,6 @@ class FlatlandExternalViewEmbedder final // |ExternalViewEmbedder| void SubmitFrame(GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) override; // |ExternalViewEmbedder| diff --git a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc index 37e8d6a474431..21c6810c4e11b 100644 --- a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc +++ b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc @@ -231,7 +231,6 @@ void GfxExternalViewEmbedder::EndFrame( void GfxExternalViewEmbedder::SubmitFrame( GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) { TRACE_EVENT0("flutter", "GfxExternalViewEmbedder::SubmitFrame"); std::vector> frame_surfaces; diff --git a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h index 6d0bc30061047..eb37d2e7e2d1f 100644 --- a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h +++ b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h @@ -110,7 +110,6 @@ class GfxExternalViewEmbedder final : public flutter::ExternalViewEmbedder { // |ExternalViewEmbedder| void SubmitFrame(GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) override; // |ExternalViewEmbedder| diff --git a/shell/platform/fuchsia/flutter/platform_view_unittest.cc b/shell/platform/fuchsia/flutter/platform_view_unittest.cc index c0aa42e0a5dbf..4959461c8a115 100644 --- a/shell/platform/fuchsia/flutter/platform_view_unittest.cc +++ b/shell/platform/fuchsia/flutter/platform_view_unittest.cc @@ -54,7 +54,6 @@ class MockExternalViewEmbedder : public flutter::ExternalViewEmbedder { fml::RefPtr raster_thread_merger) override {} void SubmitFrame(GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) override {} void PrerollCompositeEmbeddedView( diff --git a/shell/platform/fuchsia/flutter/tests/flatland_external_view_embedder_unittests.cc b/shell/platform/fuchsia/flutter/tests/flatland_external_view_embedder_unittests.cc index 58af0ccb88526..35f734d2044ac 100644 --- a/shell/platform/fuchsia/flutter/tests/flatland_external_view_embedder_unittests.cc +++ b/shell/platform/fuchsia/flutter/tests/flatland_external_view_embedder_unittests.cc @@ -335,12 +335,11 @@ void DrawSimpleFrame(FlatlandExternalViewEmbedder& external_view_embedder, flutter::SurfaceFrame::FramebufferInfo framebuffer_info; framebuffer_info.supports_readback = true; external_view_embedder.SubmitFrame( - nullptr, nullptr, - std::make_unique( - nullptr, std::move(framebuffer_info), - [](const flutter::SurfaceFrame& surface_frame, - flutter::DlCanvas* canvas) { return true; }, - frame_size)); + nullptr, std::make_unique( + nullptr, std::move(framebuffer_info), + [](const flutter::SurfaceFrame& surface_frame, + flutter::DlCanvas* canvas) { return true; }, + frame_size)); } void DrawFrameWithView( @@ -366,12 +365,11 @@ void DrawFrameWithView( flutter::SurfaceFrame::FramebufferInfo framebuffer_info; framebuffer_info.supports_readback = true; external_view_embedder.SubmitFrame( - nullptr, nullptr, - std::make_unique( - nullptr, std::move(framebuffer_info), - [](const flutter::SurfaceFrame& surface_frame, - flutter::DlCanvas* canvas) { return true; }, - frame_size)); + nullptr, std::make_unique( + nullptr, std::move(framebuffer_info), + [](const flutter::SurfaceFrame& surface_frame, + flutter::DlCanvas* canvas) { return true; }, + frame_size)); } }; // namespace diff --git a/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc b/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc index 78f6f9588958a..ce1d55fdc1c91 100644 --- a/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc +++ b/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc @@ -53,7 +53,6 @@ class MockExternalViewEmbedder : public flutter::ExternalViewEmbedder { fml::RefPtr raster_thread_merger) override {} void SubmitFrame(GrDirectContext* context, - const std::shared_ptr& aiks_context, std::unique_ptr frame) override {} void PrerollCompositeEmbeddedView( diff --git a/shell/platform/fuchsia/flutter/tests/gfx_external_view_embedder_unittests.cc b/shell/platform/fuchsia/flutter/tests/gfx_external_view_embedder_unittests.cc index eba9a2dc0ad5c..77c04bb6ab7ed 100644 --- a/shell/platform/fuchsia/flutter/tests/gfx_external_view_embedder_unittests.cc +++ b/shell/platform/fuchsia/flutter/tests/gfx_external_view_embedder_unittests.cc @@ -458,12 +458,11 @@ void DrawSimpleFrame(GfxExternalViewEmbedder& external_view_embedder, external_view_embedder.EndFrame(false, nullptr); flutter::SurfaceFrame::FramebufferInfo framebuffer_info; external_view_embedder.SubmitFrame( - nullptr, nullptr, - std::make_unique( - nullptr, framebuffer_info, - [](const flutter::SurfaceFrame& surface_frame, - flutter::DlCanvas* canvas) { return true; }, - frame_size)); + nullptr, std::make_unique( + nullptr, framebuffer_info, + [](const flutter::SurfaceFrame& surface_frame, + flutter::DlCanvas* canvas) { return true; }, + frame_size)); } void DrawFrameWithView( @@ -488,12 +487,11 @@ void DrawFrameWithView( external_view_embedder.EndFrame(false, nullptr); flutter::SurfaceFrame::FramebufferInfo framebuffer_info; external_view_embedder.SubmitFrame( - nullptr, nullptr, - std::make_unique( - nullptr, framebuffer_info, - [](const flutter::SurfaceFrame& surface_frame, - flutter::DlCanvas* canvas) { return true; }, - frame_size)); + nullptr, std::make_unique( + nullptr, framebuffer_info, + [](const flutter::SurfaceFrame& surface_frame, + flutter::DlCanvas* canvas) { return true; }, + frame_size)); } FramePresentedInfo MakeFramePresentedInfoForOnePresent(