From ea42f7eaa0d5300986b6baea046a6dc85ffda84f Mon Sep 17 00:00:00 2001 From: Kaushik Iska Date: Fri, 6 Nov 2020 07:30:48 -0600 Subject: [PATCH] Platform views have CreateExternalViewEmbedder (flutter/engine#22214) --- engine/src/flutter/shell/common/platform_view.cc | 7 +++++++ engine/src/flutter/shell/common/platform_view.h | 3 +++ .../flutter/shell/common/shell_test_platform_view_gl.cc | 6 ++++++ .../src/flutter/shell/common/shell_test_platform_view_gl.h | 3 +++ .../shell/common/shell_test_platform_view_vulkan.cc | 6 ++++++ .../flutter/shell/common/shell_test_platform_view_vulkan.h | 3 +++ .../shell/platform/android/platform_view_android.cc | 6 ++++++ .../flutter/shell/platform/android/platform_view_android.h | 3 +++ .../flutter/shell/platform/darwin/ios/platform_view_ios.h | 3 +++ .../flutter/shell/platform/darwin/ios/platform_view_ios.mm | 5 +++++ .../shell/platform/embedder/platform_view_embedder.cc | 6 ++++++ .../shell/platform/embedder/platform_view_embedder.h | 3 +++ .../shell/platform/fuchsia/flutter/platform_view.cc | 6 ++++++ .../flutter/shell/platform/fuchsia/flutter/platform_view.h | 4 ++++ 14 files changed, 64 insertions(+) diff --git a/engine/src/flutter/shell/common/platform_view.cc b/engine/src/flutter/shell/common/platform_view.cc index a933bd3b3c6..3e2b1daa476 100644 --- a/engine/src/flutter/shell/common/platform_view.cc +++ b/engine/src/flutter/shell/common/platform_view.cc @@ -136,6 +136,13 @@ std::unique_ptr PlatformView::CreateRenderingSurface() { return nullptr; } +std::shared_ptr +PlatformView::CreateExternalViewEmbedder() { + FML_DLOG(WARNING) + << "This platform doesn't support embedding external views."; + return nullptr; +} + void PlatformView::SetNextFrameCallback(const fml::closure& closure) { if (!closure) { return; diff --git a/engine/src/flutter/shell/common/platform_view.h b/engine/src/flutter/shell/common/platform_view.h index 5b376878ee2..a67b4b793cc 100644 --- a/engine/src/flutter/shell/common/platform_view.h +++ b/engine/src/flutter/shell/common/platform_view.h @@ -7,6 +7,7 @@ #include +#include "flow/embedded_views.h" #include "flutter/common/task_runners.h" #include "flutter/flow/surface.h" #include "flutter/flow/texture.h" @@ -593,6 +594,8 @@ class PlatformView { // GPU task runner. virtual std::unique_ptr CreateRenderingSurface(); + virtual std::shared_ptr CreateExternalViewEmbedder(); + private: FML_DISALLOW_COPY_AND_ASSIGN(PlatformView); }; diff --git a/engine/src/flutter/shell/common/shell_test_platform_view_gl.cc b/engine/src/flutter/shell/common/shell_test_platform_view_gl.cc index 2175464f83f..287686b08c8 100644 --- a/engine/src/flutter/shell/common/shell_test_platform_view_gl.cc +++ b/engine/src/flutter/shell/common/shell_test_platform_view_gl.cc @@ -37,6 +37,12 @@ std::unique_ptr ShellTestPlatformViewGL::CreateRenderingSurface() { return std::make_unique(this, true); } +// |PlatformView| +std::shared_ptr +ShellTestPlatformViewGL::CreateExternalViewEmbedder() { + return shell_test_external_view_embedder_; +} + // |PlatformView| PointerDataDispatcherMaker ShellTestPlatformViewGL::GetDispatcherMaker() { return [](DefaultPointerDataDispatcher::Delegate& delegate) { diff --git a/engine/src/flutter/shell/common/shell_test_platform_view_gl.h b/engine/src/flutter/shell/common/shell_test_platform_view_gl.h index a4e020915f3..5779147e289 100644 --- a/engine/src/flutter/shell/common/shell_test_platform_view_gl.h +++ b/engine/src/flutter/shell/common/shell_test_platform_view_gl.h @@ -40,6 +40,9 @@ class ShellTestPlatformViewGL : public ShellTestPlatformView, // |PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |PlatformView| + std::shared_ptr CreateExternalViewEmbedder() override; + // |PlatformView| std::unique_ptr CreateVSyncWaiter() override; diff --git a/engine/src/flutter/shell/common/shell_test_platform_view_vulkan.cc b/engine/src/flutter/shell/common/shell_test_platform_view_vulkan.cc index 3c43095af39..b34c1a70b80 100644 --- a/engine/src/flutter/shell/common/shell_test_platform_view_vulkan.cc +++ b/engine/src/flutter/shell/common/shell_test_platform_view_vulkan.cc @@ -39,6 +39,12 @@ std::unique_ptr ShellTestPlatformViewVulkan::CreateRenderingSurface() { shell_test_external_view_embedder_); } +// |PlatformView| +std::shared_ptr +ShellTestPlatformViewVulkan::CreateExternalViewEmbedder() { + return shell_test_external_view_embedder_; +} + // |PlatformView| PointerDataDispatcherMaker ShellTestPlatformViewVulkan::GetDispatcherMaker() { return [](DefaultPointerDataDispatcher::Delegate& delegate) { diff --git a/engine/src/flutter/shell/common/shell_test_platform_view_vulkan.h b/engine/src/flutter/shell/common/shell_test_platform_view_vulkan.h index c2a13e70f68..745647e77ca 100644 --- a/engine/src/flutter/shell/common/shell_test_platform_view_vulkan.h +++ b/engine/src/flutter/shell/common/shell_test_platform_view_vulkan.h @@ -76,6 +76,9 @@ class ShellTestPlatformViewVulkan : public ShellTestPlatformView { // |PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |PlatformView| + std::shared_ptr CreateExternalViewEmbedder() override; + // |PlatformView| std::unique_ptr CreateVSyncWaiter() override; diff --git a/engine/src/flutter/shell/platform/android/platform_view_android.cc b/engine/src/flutter/shell/platform/android/platform_view_android.cc index 8ebac2aa929..8612d646519 100644 --- a/engine/src/flutter/shell/platform/android/platform_view_android.cc +++ b/engine/src/flutter/shell/platform/android/platform_view_android.cc @@ -307,6 +307,12 @@ std::unique_ptr PlatformViewAndroid::CreateRenderingSurface() { return android_surface_->CreateGPUSurface(); } +// |PlatformView| +std::shared_ptr +PlatformViewAndroid::CreateExternalViewEmbedder() { + return external_view_embedder_; +} + // |PlatformView| sk_sp PlatformViewAndroid::CreateResourceContext() const { if (!android_surface_) { diff --git a/engine/src/flutter/shell/platform/android/platform_view_android.h b/engine/src/flutter/shell/platform/android/platform_view_android.h index b1bf8194976..b2500c979b9 100644 --- a/engine/src/flutter/shell/platform/android/platform_view_android.h +++ b/engine/src/flutter/shell/platform/android/platform_view_android.h @@ -127,6 +127,9 @@ class PlatformViewAndroid final : public PlatformView { // |PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |PlatformView| + std::shared_ptr CreateExternalViewEmbedder() override; + // |PlatformView| sk_sp CreateResourceContext() const override; diff --git a/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.h b/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.h index 661d5e57f5b..0681cfb9566 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.h +++ b/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.h @@ -140,6 +140,9 @@ class PlatformViewIOS final : public PlatformView { // |PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |PlatformView| + std::shared_ptr CreateExternalViewEmbedder() override; + // |PlatformView| sk_sp CreateResourceContext() const override; diff --git a/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.mm b/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.mm index 43543c1e2fc..fb151d6d515 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.mm @@ -140,6 +140,11 @@ std::unique_ptr PlatformViewIOS::CreateRenderingSurface() { return ios_surface_->CreateGPUSurface(); } +// |PlatformView| +std::shared_ptr PlatformViewIOS::CreateExternalViewEmbedder() { + return ios_surface_factory_->GetExternalViewEmbedder(); +} + // |PlatformView| sk_sp PlatformViewIOS::CreateResourceContext() const { return ios_context_->CreateResourceContext(); diff --git a/engine/src/flutter/shell/platform/embedder/platform_view_embedder.cc b/engine/src/flutter/shell/platform/embedder/platform_view_embedder.cc index de51eb31afc..d5cbb54d678 100644 --- a/engine/src/flutter/shell/platform/embedder/platform_view_embedder.cc +++ b/engine/src/flutter/shell/platform/embedder/platform_view_embedder.cc @@ -77,6 +77,12 @@ std::unique_ptr PlatformViewEmbedder::CreateRenderingSurface() { return embedder_surface_->CreateGPUSurface(); } +// |PlatformView| +std::shared_ptr +PlatformViewEmbedder::CreateExternalViewEmbedder() { + return external_view_embedder_; +} + // |PlatformView| sk_sp PlatformViewEmbedder::CreateResourceContext() const { if (embedder_surface_ == nullptr) { diff --git a/engine/src/flutter/shell/platform/embedder/platform_view_embedder.h b/engine/src/flutter/shell/platform/embedder/platform_view_embedder.h index 6fefcf8b20a..76fc26a99b3 100644 --- a/engine/src/flutter/shell/platform/embedder/platform_view_embedder.h +++ b/engine/src/flutter/shell/platform/embedder/platform_view_embedder.h @@ -82,6 +82,9 @@ class PlatformViewEmbedder final : public PlatformView { // |PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |PlatformView| + std::shared_ptr CreateExternalViewEmbedder() override; + // |PlatformView| sk_sp CreateResourceContext() const override; diff --git a/engine/src/flutter/shell/platform/fuchsia/flutter/platform_view.cc b/engine/src/flutter/shell/platform/fuchsia/flutter/platform_view.cc index fa7e9a77c93..0d379b39575 100644 --- a/engine/src/flutter/shell/platform/fuchsia/flutter/platform_view.cc +++ b/engine/src/flutter/shell/platform/fuchsia/flutter/platform_view.cc @@ -586,6 +586,12 @@ std::unique_ptr PlatformView::CreateRenderingSurface() { return on_create_surface_callback_ ? on_create_surface_callback_() : nullptr; } +// |flutter::PlatformView| +std::shared_ptr +PlatformView::CreateExternalViewEmbedder() { + return external_view_embedder_; +} + // |flutter::PlatformView| void PlatformView::HandlePlatformMessage( fml::RefPtr message) { diff --git a/engine/src/flutter/shell/platform/fuchsia/flutter/platform_view.h b/engine/src/flutter/shell/platform/fuchsia/flutter/platform_view.h index 092633f1dde..28765d2fd14 100644 --- a/engine/src/flutter/shell/platform/fuchsia/flutter/platform_view.h +++ b/engine/src/flutter/shell/platform/fuchsia/flutter/platform_view.h @@ -121,6 +121,10 @@ class PlatformView final : public flutter::PlatformView, // |flutter::PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |flutter::PlatformView| + std::shared_ptr CreateExternalViewEmbedder() + override; + // |flutter::PlatformView| void HandlePlatformMessage( fml::RefPtr message) override;