Reland "remove surface dependance on external view embedder (#22468)" (flutter/engine#22470)

This commit is contained in:
Kaushik Iska 2020-11-12 17:37:12 -06:00 committed by GitHub
parent 465c84321e
commit 356e31aef5
51 changed files with 118 additions and 264 deletions

View File

@ -667,7 +667,6 @@ FILE: ../../../flutter/shell/common/vsync_waiter_fallback.cc
FILE: ../../../flutter/shell/common/vsync_waiter_fallback.h
FILE: ../../../flutter/shell/common/vsync_waiters_test.cc
FILE: ../../../flutter/shell/common/vsync_waiters_test.h
FILE: ../../../flutter/shell/gpu/gpu_surface_delegate.h
FILE: ../../../flutter/shell/gpu/gpu_surface_gl.cc
FILE: ../../../flutter/shell/gpu/gpu_surface_gl.h
FILE: ../../../flutter/shell/gpu/gpu_surface_gl_delegate.cc

View File

@ -10,10 +10,6 @@ Surface::Surface() = default;
Surface::~Surface() = default;
flutter::ExternalViewEmbedder* Surface::GetExternalViewEmbedder() {
return nullptr;
}
std::unique_ptr<GLContextResult> Surface::MakeRenderContextCurrent() {
return std::make_unique<GLContextDefaultResult>(true);
}

View File

@ -29,8 +29,6 @@ class Surface {
virtual GrDirectContext* GetContext() = 0;
virtual flutter::ExternalViewEmbedder* GetExternalViewEmbedder();
virtual std::unique_ptr<GLContextResult> MakeRenderContextCurrent();
virtual bool ClearRenderContext();

View File

@ -563,6 +563,8 @@ class PlatformView {
ComputePlatformResolvedLocales(
const std::vector<std::string>& supported_locale_data);
virtual std::shared_ptr<ExternalViewEmbedder> CreateExternalViewEmbedder();
protected:
PlatformView::Delegate& delegate_;
const TaskRunners task_runners_;
@ -575,8 +577,6 @@ class PlatformView {
// GPU task runner.
virtual std::unique_ptr<Surface> CreateRenderingSurface();
virtual std::shared_ptr<ExternalViewEmbedder> CreateExternalViewEmbedder();
private:
FML_DISALLOW_COPY_AND_ASSIGN(PlatformView);
};

View File

@ -76,8 +76,8 @@ void Rasterizer::Setup(std::unique_ptr<Surface> surface) {
user_override_resource_cache_bytes_);
}
compositor_context_->OnGrContextCreated();
if (surface_->GetExternalViewEmbedder() &&
surface_->GetExternalViewEmbedder()->SupportsDynamicThreadMerging() &&
if (external_view_embedder_ &&
external_view_embedder_->SupportsDynamicThreadMerging() &&
!raster_thread_merger_) {
const auto platform_id =
delegate_.GetTaskRunners().GetPlatformTaskRunner()->GetTaskQueueId();
@ -191,9 +191,9 @@ void Rasterizer::Draw(fml::RefPtr<Pipeline<flutter::LayerTree>> pipeline,
}
// EndFrame should perform cleanups for the external_view_embedder.
if (surface_ != nullptr && surface_->GetExternalViewEmbedder() != nullptr) {
surface_->GetExternalViewEmbedder()->EndFrame(should_resubmit_frame,
raster_thread_merger_);
if (surface_ && external_view_embedder_) {
external_view_embedder_->EndFrame(should_resubmit_frame,
raster_thread_merger_);
}
// Consume as many pipeline items as possible. But yield the event loop
@ -423,14 +423,12 @@ RasterStatus Rasterizer::DrawToSurface(flutter::LayerTree& layer_tree) {
// for instrumentation.
compositor_context_->ui_time().SetLapTime(layer_tree.build_time());
auto* external_view_embedder = surface_->GetExternalViewEmbedder();
SkCanvas* embedder_root_canvas = nullptr;
if (external_view_embedder != nullptr) {
external_view_embedder->BeginFrame(
if (external_view_embedder_) {
external_view_embedder_->BeginFrame(
layer_tree.frame_size(), surface_->GetContext(),
layer_tree.device_pixel_ratio(), raster_thread_merger_);
embedder_root_canvas = external_view_embedder->GetRootCanvas();
embedder_root_canvas = external_view_embedder_->GetRootCanvas();
}
// On Android, the external view embedder deletes surfaces in `BeginFrame`.
@ -453,13 +451,13 @@ RasterStatus Rasterizer::DrawToSurface(flutter::LayerTree& layer_tree) {
embedder_root_canvas ? embedder_root_canvas : frame->SkiaCanvas();
auto compositor_frame = compositor_context_->AcquireFrame(
surface_->GetContext(), // skia GrContext
root_surface_canvas, // root surface canvas
external_view_embedder, // external view embedder
root_surface_transformation, // root surface transformation
true, // instrumentation enabled
frame->supports_readback(), // surface supports pixel reads
raster_thread_merger_ // thread merger
surface_->GetContext(), // skia GrContext
root_surface_canvas, // root surface canvas
external_view_embedder_.get(), // external view embedder
root_surface_transformation, // root surface transformation
true, // instrumentation enabled
frame->supports_readback(), // surface supports pixel reads
raster_thread_merger_ // thread merger
);
if (compositor_frame) {
@ -468,11 +466,11 @@ RasterStatus Rasterizer::DrawToSurface(flutter::LayerTree& layer_tree) {
raster_status == RasterStatus::kSkipAndRetry) {
return raster_status;
}
if (external_view_embedder != nullptr &&
if (external_view_embedder_ &&
(!raster_thread_merger_ || raster_thread_merger_->IsMerged())) {
FML_DCHECK(!frame->IsSubmitted());
external_view_embedder->SubmitFrame(surface_->GetContext(),
std::move(frame));
external_view_embedder_->SubmitFrame(surface_->GetContext(),
std::move(frame));
} else {
frame->Submit();
}
@ -653,6 +651,11 @@ void Rasterizer::SetNextFrameCallback(const fml::closure& callback) {
next_frame_callback_ = callback;
}
void Rasterizer::SetExternalViewEmbedder(
const std::shared_ptr<ExternalViewEmbedder>& view_embedder) {
external_view_embedder_ = view_embedder;
}
void Rasterizer::FireNextFrameCallbackIfPresent() {
if (!next_frame_callback_) {
return;

View File

@ -8,6 +8,7 @@
#include <memory>
#include <optional>
#include "flow/embedded_views.h"
#include "flutter/common/settings.h"
#include "flutter/common/task_runners.h"
#include "flutter/flow/compositor_context.h"
@ -349,6 +350,16 @@ class Rasterizer final : public SnapshotDelegate {
///
void SetNextFrameCallback(const fml::closure& callback);
//----------------------------------------------------------------------------
/// @brief Set the External View Embedder. This is done on shell
/// initialization. This is non-null on platforms that support
/// embedding externally composited views.
///
/// @param[in] view_embedder The external view embedder object.
///
void SetExternalViewEmbedder(
const std::shared_ptr<ExternalViewEmbedder>& view_embedder);
//----------------------------------------------------------------------------
/// @brief Returns a pointer to the compositor context used by this
/// rasterizer. This pointer will never be `nullptr`.
@ -437,6 +448,7 @@ class Rasterizer final : public SnapshotDelegate {
std::optional<size_t> max_cache_bytes_;
fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger_;
fml::TaskRunnerAffineWeakPtrFactory<Rasterizer> weak_factory_;
std::shared_ptr<ExternalViewEmbedder> external_view_embedder_;
// |SnapshotDelegate|
sk_sp<SkImage> MakeRasterSnapshot(sk_sp<SkPicture> picture,

View File

@ -113,9 +113,9 @@ TEST(RasterizerTest,
auto rasterizer = std::make_unique<Rasterizer>(delegate);
auto surface = std::make_unique<MockSurface>();
MockExternalViewEmbedder external_view_embedder;
EXPECT_CALL(*surface, GetExternalViewEmbedder())
.WillRepeatedly(Return(&external_view_embedder));
std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
std::make_shared<MockExternalViewEmbedder>();
rasterizer->SetExternalViewEmbedder(external_view_embedder);
auto surface_frame = std::make_unique<SurfaceFrame>(
/*surface=*/nullptr, /*supports_readback=*/true,
@ -123,15 +123,15 @@ TEST(RasterizerTest,
EXPECT_CALL(*surface, AcquireFrame(SkISize()))
.WillOnce(Return(ByMove(std::move(surface_frame))));
EXPECT_CALL(external_view_embedder,
EXPECT_CALL(*external_view_embedder,
BeginFrame(/*frame_size=*/SkISize(), /*context=*/nullptr,
/*device_pixel_ratio=*/2.0,
/*raster_thread_merger=*/
fml::RefPtr<fml::RasterThreadMerger>(nullptr)))
.Times(1);
EXPECT_CALL(external_view_embedder, SubmitFrame).Times(1);
EXPECT_CALL(*external_view_embedder, SubmitFrame).Times(1);
EXPECT_CALL(
external_view_embedder,
*external_view_embedder,
EndFrame(/*should_resubmit_frame=*/false,
/*raster_thread_merger=*/fml::RefPtr<fml::RasterThreadMerger>(
nullptr)))
@ -170,10 +170,10 @@ TEST(
EXPECT_CALL(delegate, OnFrameRasterized(_));
auto rasterizer = std::make_unique<Rasterizer>(delegate);
auto surface = std::make_unique<MockSurface>();
MockExternalViewEmbedder external_view_embedder;
EXPECT_CALL(*surface, GetExternalViewEmbedder())
.WillRepeatedly(Return(&external_view_embedder));
EXPECT_CALL(external_view_embedder, SupportsDynamicThreadMerging)
std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
std::make_shared<MockExternalViewEmbedder>();
rasterizer->SetExternalViewEmbedder(external_view_embedder);
EXPECT_CALL(*external_view_embedder, SupportsDynamicThreadMerging)
.WillRepeatedly(Return(true));
auto surface_frame = std::make_unique<SurfaceFrame>(
/*surface=*/nullptr, /*supports_readback=*/true,
@ -181,14 +181,14 @@ TEST(
EXPECT_CALL(*surface, AcquireFrame(SkISize()))
.WillOnce(Return(ByMove(std::move(surface_frame))));
EXPECT_CALL(external_view_embedder,
EXPECT_CALL(*external_view_embedder,
BeginFrame(/*frame_size=*/SkISize(), /*context=*/nullptr,
/*device_pixel_ratio=*/2.0,
/*raster_thread_merger=*/_))
.Times(1);
EXPECT_CALL(external_view_embedder, SubmitFrame).Times(0);
EXPECT_CALL(external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
/*raster_thread_merger=*/_))
EXPECT_CALL(*external_view_embedder, SubmitFrame).Times(0);
EXPECT_CALL(*external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
/*raster_thread_merger=*/_))
.Times(1);
rasterizer->Setup(std::move(surface));
@ -229,26 +229,26 @@ TEST(
auto rasterizer = std::make_unique<Rasterizer>(delegate);
auto surface = std::make_unique<MockSurface>();
MockExternalViewEmbedder external_view_embedder;
EXPECT_CALL(*surface, GetExternalViewEmbedder())
.WillRepeatedly(Return(&external_view_embedder));
std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
std::make_shared<MockExternalViewEmbedder>();
rasterizer->SetExternalViewEmbedder(external_view_embedder);
auto surface_frame = std::make_unique<SurfaceFrame>(
/*surface=*/nullptr, /*supports_readback=*/true,
/*submit_callback=*/[](const SurfaceFrame&, SkCanvas*) { return true; });
EXPECT_CALL(*surface, AcquireFrame(SkISize()))
.WillOnce(Return(ByMove(std::move(surface_frame))));
EXPECT_CALL(external_view_embedder, SupportsDynamicThreadMerging)
EXPECT_CALL(*external_view_embedder, SupportsDynamicThreadMerging)
.WillRepeatedly(Return(true));
EXPECT_CALL(external_view_embedder,
EXPECT_CALL(*external_view_embedder,
BeginFrame(/*frame_size=*/SkISize(), /*context=*/nullptr,
/*device_pixel_ratio=*/2.0,
/*raster_thread_merger=*/_))
.Times(1);
EXPECT_CALL(external_view_embedder, SubmitFrame).Times(1);
EXPECT_CALL(external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
/*raster_thread_merger=*/_))
EXPECT_CALL(*external_view_embedder, SubmitFrame).Times(1);
EXPECT_CALL(*external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
/*raster_thread_merger=*/_))
.Times(1);
rasterizer->Setup(std::move(surface));
@ -261,4 +261,40 @@ TEST(
auto no_discard = [](LayerTree&) { return false; };
rasterizer->Draw(pipeline, no_discard);
}
TEST(RasterizerTest, externalViewEmbedderDoesntEndFrameWhenNoSurfaceIsSet) {
std::string test_name =
::testing::UnitTest::GetInstance()->current_test_info()->name();
ThreadHost thread_host("io.flutter.test." + test_name + ".",
ThreadHost::Type::Platform | ThreadHost::Type::GPU |
ThreadHost::Type::IO | ThreadHost::Type::UI);
TaskRunners task_runners("test", thread_host.platform_thread->GetTaskRunner(),
thread_host.raster_thread->GetTaskRunner(),
thread_host.ui_thread->GetTaskRunner(),
thread_host.io_thread->GetTaskRunner());
MockDelegate delegate;
EXPECT_CALL(delegate, GetTaskRunners())
.WillRepeatedly(ReturnRef(task_runners));
auto rasterizer = std::make_unique<Rasterizer>(delegate);
std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
std::make_shared<MockExternalViewEmbedder>();
rasterizer->SetExternalViewEmbedder(external_view_embedder);
EXPECT_CALL(
*external_view_embedder,
EndFrame(/*should_resubmit_frame=*/false,
/*raster_thread_merger=*/fml::RefPtr<fml::RasterThreadMerger>(
nullptr)))
.Times(0);
fml::AutoResetWaitableEvent latch;
thread_host.raster_thread->GetTaskRunner()->PostTask([&] {
auto pipeline = fml::AdoptRef(new Pipeline<LayerTree>(/*depth=*/10));
auto no_discard = [](LayerTree&) { return false; };
rasterizer->Draw(pipeline, no_discard);
latch.Signal();
});
latch.Wait();
}
} // namespace flutter

View File

@ -547,6 +547,10 @@ bool Shell::Setup(std::unique_ptr<PlatformView> platform_view,
rasterizer_ = std::move(rasterizer);
io_manager_ = std::move(io_manager);
// Set the external view embedder for the rasterizer.
auto view_embedder = platform_view_->CreateExternalViewEmbedder();
rasterizer_->SetExternalViewEmbedder(view_embedder);
// The weak ptr must be generated in the platform thread which owns the unique
// ptr.
weak_engine_ = engine_->GetWeakPtr();

View File

@ -79,10 +79,5 @@ ShellTestPlatformViewGL::GetGLProcResolver() const {
};
}
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder* ShellTestPlatformViewGL::GetExternalViewEmbedder() {
return shell_test_external_view_embedder_.get();
}
} // namespace testing
} // namespace flutter

View File

@ -64,9 +64,6 @@ class ShellTestPlatformViewGL : public ShellTestPlatformView,
// |GPUSurfaceGLDelegate|
GLProcResolver GetGLProcResolver() const override;
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
FML_DISALLOW_COPY_AND_ASSIGN(ShellTestPlatformViewGL);
};

View File

@ -198,10 +198,5 @@ SkMatrix ShellTestPlatformViewVulkan::OffScreenSurface::GetRootTransformation()
return matrix;
}
flutter::ExternalViewEmbedder*
ShellTestPlatformViewVulkan::OffScreenSurface::GetExternalViewEmbedder() {
return shell_test_external_view_embedder_.get();
}
} // namespace testing
} // namespace flutter

View File

@ -47,8 +47,6 @@ class ShellTestPlatformViewVulkan : public ShellTestPlatformView {
// |Surface|
GrDirectContext* GetContext() override;
flutter::ExternalViewEmbedder* GetExternalViewEmbedder() override;
private:
bool valid_;
fml::RefPtr<vulkan::VulkanProcTable> vk_;

View File

@ -16,7 +16,6 @@ gpu_common_deps = [
source_set("gpu_surface_software") {
sources = [
"gpu_surface_delegate.h",
"gpu_surface_software.cc",
"gpu_surface_software.h",
"gpu_surface_software_delegate.cc",
@ -28,7 +27,6 @@ source_set("gpu_surface_software") {
source_set("gpu_surface_gl") {
sources = [
"gpu_surface_delegate.h",
"gpu_surface_gl.cc",
"gpu_surface_gl.h",
"gpu_surface_gl_delegate.cc",
@ -40,7 +38,6 @@ source_set("gpu_surface_gl") {
source_set("gpu_surface_vulkan") {
sources = [
"gpu_surface_delegate.h",
"gpu_surface_vulkan.cc",
"gpu_surface_vulkan.h",
"gpu_surface_vulkan_delegate.cc",
@ -52,7 +49,6 @@ source_set("gpu_surface_vulkan") {
source_set("gpu_surface_metal") {
sources = [
"gpu_surface_delegate.h",
"gpu_surface_metal.h",
"gpu_surface_metal.mm",
]

View File

@ -1,28 +0,0 @@
#ifndef FLUTTER_SHELL_GPU_GPU_SURFACE_DELEGATE_H_
#define FLUTTER_SHELL_GPU_GPU_SURFACE_DELEGATE_H_
#include "flutter/flow/embedded_views.h"
namespace flutter {
class GPUSurfaceDelegate {
public:
virtual ~GPUSurfaceDelegate() {}
//----------------------------------------------------------------------------
/// @brief Gets the view embedder that controls how the Flutter layer
/// hierarchy split into multiple chunks should be composited back
/// on-screen. This field is optional and the Flutter rasterizer
/// will render into a single on-screen surface if this call
/// returns a null external view embedder. This happens on the GPU
/// thread.
///
/// @return The external view embedder, or, null if Flutter is rendering
/// into a single on-screen surface.
///
virtual ExternalViewEmbedder* GetExternalViewEmbedder() = 0;
};
} // namespace flutter
#endif // FLUTTER_SHELL_GPU_GPU_SURFACE_DELEGATE_H_

View File

@ -333,11 +333,6 @@ GrDirectContext* GPUSurfaceGL::GetContext() {
return context_.get();
}
// |Surface|
flutter::ExternalViewEmbedder* GPUSurfaceGL::GetExternalViewEmbedder() {
return delegate_->GetExternalViewEmbedder();
}
// |Surface|
std::unique_ptr<GLContextResult> GPUSurfaceGL::MakeRenderContextCurrent() {
return delegate_->GLContextMakeCurrent();

View File

@ -42,9 +42,6 @@ class GPUSurfaceGL : public Surface {
// |Surface|
GrDirectContext* GetContext() override;
// |Surface|
flutter::ExternalViewEmbedder* GetExternalViewEmbedder() override;
// |Surface|
std::unique_ptr<GLContextResult> MakeRenderContextCurrent() override;

View File

@ -99,8 +99,4 @@ GPUSurfaceGLDelegate::GetDefaultPlatformGLInterface() {
return CreateGLInterface(nullptr);
}
ExternalViewEmbedder* GPUSurfaceGLDelegate::GetExternalViewEmbedder() {
return nullptr;
}
} // namespace flutter

View File

@ -8,7 +8,6 @@
#include "flutter/common/graphics/gl_context_switch.h"
#include "flutter/flow/embedded_views.h"
#include "flutter/fml/macros.h"
#include "flutter/shell/gpu/gpu_surface_delegate.h"
#include "third_party/skia/include/core/SkMatrix.h"
#include "third_party/skia/include/gpu/gl/GrGLInterface.h"
@ -21,12 +20,9 @@ struct GLFrameInfo {
uint32_t height;
};
class GPUSurfaceGLDelegate : public GPUSurfaceDelegate {
class GPUSurfaceGLDelegate {
public:
~GPUSurfaceGLDelegate() override;
// |GPUSurfaceDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
~GPUSurfaceGLDelegate();
// Called to make the main GL context current on the current thread.
virtual std::unique_ptr<GLContextResult> GLContextMakeCurrent() = 0;

View File

@ -10,7 +10,6 @@
#include "flutter/flow/surface.h"
#include "flutter/fml/macros.h"
#include "flutter/fml/platform/darwin/scoped_nsobject.h"
#include "flutter/shell/gpu/gpu_surface_delegate.h"
#include "third_party/skia/include/gpu/GrDirectContext.h"
#include "third_party/skia/include/gpu/mtl/GrMtlTypes.h"
@ -20,16 +19,14 @@ namespace flutter {
class SK_API_AVAILABLE_CA_METAL_LAYER GPUSurfaceMetal : public Surface {
public:
GPUSurfaceMetal(GPUSurfaceDelegate* delegate,
fml::scoped_nsobject<CAMetalLayer> layer,
GPUSurfaceMetal(fml::scoped_nsobject<CAMetalLayer> layer,
sk_sp<GrDirectContext> context,
fml::scoped_nsprotocol<id<MTLCommandQueue>> command_queue);
// |Surface|
~GPUSurfaceMetal() override;
~GPUSurfaceMetal();
private:
GPUSurfaceDelegate* delegate_;
fml::scoped_nsobject<CAMetalLayer> layer_;
sk_sp<GrDirectContext> context_;
fml::scoped_nsprotocol<id<MTLCommandQueue>> command_queue_;
@ -47,9 +44,6 @@ class SK_API_AVAILABLE_CA_METAL_LAYER GPUSurfaceMetal : public Surface {
// |Surface|
GrDirectContext* GetContext() override;
// |Surface|
flutter::ExternalViewEmbedder* GetExternalViewEmbedder() override;
// |Surface|
std::unique_ptr<GLContextResult> MakeRenderContextCurrent() override;

View File

@ -15,12 +15,10 @@ static_assert(!__has_feature(objc_arc), "ARC must be disabled.");
namespace flutter {
GPUSurfaceMetal::GPUSurfaceMetal(GPUSurfaceDelegate* delegate,
fml::scoped_nsobject<CAMetalLayer> layer,
GPUSurfaceMetal::GPUSurfaceMetal(fml::scoped_nsobject<CAMetalLayer> layer,
sk_sp<GrDirectContext> context,
fml::scoped_nsprotocol<id<MTLCommandQueue>> command_queue)
: delegate_(delegate),
layer_(std::move(layer)),
: layer_(std::move(layer)),
context_(std::move(context)),
command_queue_(std::move(command_queue)) {
layer_.get().pixelFormat = MTLPixelFormatBGRA8Unorm;
@ -121,11 +119,6 @@ GrDirectContext* GPUSurfaceMetal::GetContext() {
return context_.get();
}
// |Surface|
flutter::ExternalViewEmbedder* GPUSurfaceMetal::GetExternalViewEmbedder() {
return delegate_->GetExternalViewEmbedder();
}
// |Surface|
std::unique_ptr<GLContextResult> GPUSurfaceMetal::MakeRenderContextCurrent() {
// This backend has no such concept.

View File

@ -87,9 +87,4 @@ GrDirectContext* GPUSurfaceSoftware::GetContext() {
return nullptr;
}
// |Surface|
flutter::ExternalViewEmbedder* GPUSurfaceSoftware::GetExternalViewEmbedder() {
return delegate_->GetExternalViewEmbedder();
}
} // namespace flutter

View File

@ -31,9 +31,6 @@ class GPUSurfaceSoftware : public Surface {
// |Surface|
GrDirectContext* GetContext() override;
// |Surface|
flutter::ExternalViewEmbedder* GetExternalViewEmbedder() override;
private:
GPUSurfaceSoftwareDelegate* delegate_;
// TODO(38466): Refactor GPU surface APIs take into account the fact that an

View File

@ -8,8 +8,4 @@ namespace flutter {
GPUSurfaceSoftwareDelegate::~GPUSurfaceSoftwareDelegate() = default;
ExternalViewEmbedder* GPUSurfaceSoftwareDelegate::GetExternalViewEmbedder() {
return nullptr;
}
} // namespace flutter

View File

@ -7,7 +7,6 @@
#include "flutter/flow/embedded_views.h"
#include "flutter/fml/macros.h"
#include "flutter/shell/gpu/gpu_surface_delegate.h"
#include "third_party/skia/include/core/SkSurface.h"
namespace flutter {
@ -25,12 +24,9 @@ namespace flutter {
/// @see |IOSurfaceSoftware|, |AndroidSurfaceSoftware|,
/// |EmbedderSurfaceSoftware|.
///
class GPUSurfaceSoftwareDelegate : public GPUSurfaceDelegate {
class GPUSurfaceSoftwareDelegate {
public:
~GPUSurfaceSoftwareDelegate() override;
// |GPUSurfaceDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
~GPUSurfaceSoftwareDelegate();
//----------------------------------------------------------------------------
/// @brief Called when the GPU surface needs a new buffer to render a new

View File

@ -13,7 +13,6 @@ GPUSurfaceVulkan::GPUSurfaceVulkan(
std::unique_ptr<vulkan::VulkanNativeSurface> native_surface,
bool render_to_surface)
: window_(delegate->vk(), std::move(native_surface), render_to_surface),
delegate_(delegate),
render_to_surface_(render_to_surface),
weak_factory_(this) {}
@ -67,8 +66,4 @@ GrDirectContext* GPUSurfaceVulkan::GetContext() {
return window_.GetSkiaGrContext();
}
flutter::ExternalViewEmbedder* GPUSurfaceVulkan::GetExternalViewEmbedder() {
return delegate_->GetExternalViewEmbedder();
}
} // namespace flutter

View File

@ -36,12 +36,8 @@ class GPUSurfaceVulkan : public Surface {
// |Surface|
GrDirectContext* GetContext() override;
// |Surface|
flutter::ExternalViewEmbedder* GetExternalViewEmbedder() override;
private:
vulkan::VulkanWindow window_;
GPUSurfaceVulkanDelegate* delegate_;
const bool render_to_surface_;
fml::WeakPtrFactory<GPUSurfaceVulkan> weak_factory_;

View File

@ -8,8 +8,4 @@ namespace flutter {
GPUSurfaceVulkanDelegate::~GPUSurfaceVulkanDelegate() = default;
ExternalViewEmbedder* GPUSurfaceVulkanDelegate::GetExternalViewEmbedder() {
return nullptr;
}
} // namespace flutter

View File

@ -6,17 +6,13 @@
#define FLUTTER_SHELL_GPU_GPU_SURFACE_VULKAN_DELEGATE_H_
#include "flutter/fml/memory/ref_ptr.h"
#include "flutter/shell/gpu/gpu_surface_delegate.h"
#include "flutter/vulkan/vulkan_proc_table.h"
namespace flutter {
class GPUSurfaceVulkanDelegate : public GPUSurfaceDelegate {
class GPUSurfaceVulkanDelegate {
public:
~GPUSurfaceVulkanDelegate() override;
// |GPUSurfaceDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
~GPUSurfaceVulkanDelegate();
// Obtain a reference to the Vulkan implementation's proc table.
virtual fml::RefPtr<vulkan::VulkanProcTable> vk() = 0;

View File

@ -132,11 +132,6 @@ intptr_t AndroidSurfaceGL::GLContextFBO(GLFrameInfo frame_info) const {
return 0;
}
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder* AndroidSurfaceGL::GetExternalViewEmbedder() {
return external_view_embedder_.get();
}
// |GPUSurfaceGLDelegate|
sk_sp<const GrGLInterface> AndroidSurfaceGL::GetGLInterface() const {
// This is a workaround for a bug in the Android emulator EGL/GLES

View File

@ -63,9 +63,6 @@ class AndroidSurfaceGL final : public GPUSurfaceGLDelegate,
// |GPUSurfaceGLDelegate|
intptr_t GLContextFBO(GLFrameInfo frame_info) const override;
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
// |GPUSurfaceGLDelegate|
sk_sp<const GrGLInterface> GetGLInterface() const override;

View File

@ -141,11 +141,6 @@ bool AndroidSurfaceSoftware::PresentBackingStore(
return true;
}
// |GPUSurfaceSoftwareDelegate|
ExternalViewEmbedder* AndroidSurfaceSoftware::GetExternalViewEmbedder() {
return external_view_embedder_.get();
}
void AndroidSurfaceSoftware::TeardownOnScreenContext() {}
bool AndroidSurfaceSoftware::OnScreenSurfaceResize(const SkISize& size) {

View File

@ -53,9 +53,6 @@ class AndroidSurfaceSoftware final : public AndroidSurface,
// |GPUSurfaceSoftwareDelegate|
bool PresentBackingStore(sk_sp<SkSurface> backing_store) override;
// |GPUSurfaceSoftwareDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
private:
const std::shared_ptr<AndroidExternalViewEmbedder> external_view_embedder_;

View File

@ -77,10 +77,6 @@ bool AndroidSurfaceVulkan::SetNativeWindow(
return native_window_ && native_window_->IsValid();
}
ExternalViewEmbedder* AndroidSurfaceVulkan::GetExternalViewEmbedder() {
return external_view_embedder_.get();
}
fml::RefPtr<vulkan::VulkanProcTable> AndroidSurfaceVulkan::vk() {
return proc_table_;
}

View File

@ -50,9 +50,6 @@ class AndroidSurfaceVulkan : public AndroidSurface,
// |AndroidSurface|
bool SetNativeWindow(fml::RefPtr<AndroidNativeWindow> window) override;
// |GPUSurfaceVulkanDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
// |GPUSurfaceVulkanDelegate|
fml::RefPtr<vulkan::VulkanProcTable> vk() override;

View File

@ -52,11 +52,6 @@ class SurfaceMock : public Surface {
MOCK_METHOD(GrDirectContext*, GetContext, (), (override));
MOCK_METHOD(flutter::ExternalViewEmbedder*,
GetExternalViewEmbedder,
(),
(override));
MOCK_METHOD(std::unique_ptr<GLContextResult>,
MakeRenderContextCurrent,
(),

View File

@ -22,8 +22,4 @@ intptr_t AndroidSurfaceMock::GLContextFBO(GLFrameInfo frame_info) const {
return 0;
}
ExternalViewEmbedder* AndroidSurfaceMock::GetExternalViewEmbedder() {
return nullptr;
}
} // namespace flutter

View File

@ -49,9 +49,6 @@ class AndroidSurfaceMock final : public GPUSurfaceGLDelegate,
// |GPUSurfaceGLDelegate|
intptr_t GLContextFBO(GLFrameInfo frame_info) const override;
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
};
} // namespace flutter

View File

@ -48,9 +48,6 @@ class IOSSurfaceGL final : public IOSSurface, public GPUSurfaceGLDelegate {
// |GPUSurfaceGLDelegate|
bool SurfaceSupportsReadback() const override;
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
private:
std::unique_ptr<IOSRenderTargetGL> render_target_;

View File

@ -82,9 +82,4 @@ bool IOSSurfaceGL::GLContextPresent(uint32_t fbo_id) {
return IsValid() && render_target_->PresentRenderBuffer();
}
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder* IOSSurfaceGL::GetExternalViewEmbedder() {
return GetSurfaceExternalViewEmbedder().get();
}
} // namespace flutter

View File

@ -6,7 +6,6 @@
#define FLUTTER_SHELL_PLATFORM_DARWIN_IOS_IOS_SURFACE_METAL_H_
#include "flutter/fml/macros.h"
#include "flutter/shell/gpu/gpu_surface_delegate.h"
#import "flutter/shell/platform/darwin/ios/ios_surface.h"
#include "third_party/skia/include/gpu/mtl/GrMtlTypes.h"
@ -14,15 +13,14 @@
namespace flutter {
class SK_API_AVAILABLE_CA_METAL_LAYER IOSSurfaceMetal final : public IOSSurface,
public GPUSurfaceDelegate {
class SK_API_AVAILABLE_CA_METAL_LAYER IOSSurfaceMetal final : public IOSSurface {
public:
IOSSurfaceMetal(fml::scoped_nsobject<CAMetalLayer> layer,
std::shared_ptr<IOSContext> context,
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder);
// |IOSSurface|
~IOSSurfaceMetal() override;
~IOSSurfaceMetal();
private:
fml::scoped_nsobject<CAMetalLayer> layer_;
@ -37,9 +35,6 @@ class SK_API_AVAILABLE_CA_METAL_LAYER IOSSurfaceMetal final : public IOSSurface,
// |IOSSurface|
std::unique_ptr<Surface> CreateGPUSurface(GrDirectContext* gr_context) override;
// |GPUSurfaceDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
FML_DISALLOW_COPY_AND_ASSIGN(IOSSurfaceMetal);
};

View File

@ -47,16 +47,10 @@ void IOSSurfaceMetal::UpdateStorageSizeIfNecessary() {
std::unique_ptr<Surface> IOSSurfaceMetal::CreateGPUSurface(GrDirectContext* /* unused */) {
auto metal_context = CastToMetalContext(GetContext());
return std::make_unique<GPUSurfaceMetal>(this, // Metal surface delegate
layer_, // layer
return std::make_unique<GPUSurfaceMetal>(layer_, // layer
metal_context->GetMainContext(), // context
metal_context->GetMainCommandQueue() // command queue
);
}
// |GPUSurfaceDelegate|
ExternalViewEmbedder* IOSSurfaceMetal::GetExternalViewEmbedder() {
return GetSurfaceExternalViewEmbedder().get();
}
} // namespace flutter

View File

@ -39,9 +39,6 @@ class IOSSurfaceSoftware final : public IOSSurface, public GPUSurfaceSoftwareDel
// |GPUSurfaceSoftwareDelegate|
bool PresentBackingStore(sk_sp<SkSurface> backing_store) override;
// |GPUSurfaceSoftwareDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
private:
fml::scoped_nsobject<CALayer> layer_;
sk_sp<SkSurface> sk_surface_;

View File

@ -123,9 +123,4 @@ bool IOSSurfaceSoftware::PresentBackingStore(sk_sp<SkSurface> backing_store) {
return true;
}
// |GPUSurfaceSoftwareDelegate|
ExternalViewEmbedder* IOSSurfaceSoftware::GetExternalViewEmbedder() {
return GetSurfaceExternalViewEmbedder().get();
}
} // namespace flutter

View File

@ -70,11 +70,6 @@ SkMatrix EmbedderSurfaceGL::GLContextSurfaceTransformation() const {
return callback();
}
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder* EmbedderSurfaceGL::GetExternalViewEmbedder() {
return external_view_embedder_.get();
}
// |GPUSurfaceGLDelegate|
EmbedderSurfaceGL::GLProcResolver EmbedderSurfaceGL::GetGLProcResolver() const {
return gl_dispatch_table_.gl_proc_resolver;

View File

@ -67,9 +67,6 @@ class EmbedderSurfaceGL final : public EmbedderSurface,
// |GPUSurfaceGLDelegate|
SkMatrix GLContextSurfaceTransformation() const override;
// |GPUSurfaceGLDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
// |GPUSurfaceGLDelegate|
GLProcResolver GetGLProcResolver() const override;

View File

@ -106,9 +106,4 @@ bool EmbedderSurfaceSoftware::PresentBackingStore(
);
}
// |GPUSurfaceSoftwareDelegate|
ExternalViewEmbedder* EmbedderSurfaceSoftware::GetExternalViewEmbedder() {
return external_view_embedder_.get();
}
} // namespace flutter

View File

@ -47,9 +47,6 @@ class EmbedderSurfaceSoftware final : public EmbedderSurface,
// |GPUSurfaceSoftwareDelegate|
bool PresentBackingStore(sk_sp<SkSurface> backing_store) override;
// |GPUSurfaceSoftwareDelegate|
ExternalViewEmbedder* GetExternalViewEmbedder() override;
FML_DISALLOW_COPY_AND_ASSIGN(EmbedderSurfaceSoftware);
};

View File

@ -80,6 +80,10 @@ class PlatformView final : public flutter::PlatformView,
// |PlatformView|
flutter::PointerDataDispatcherMaker GetDispatcherMaker() override;
// |flutter::PlatformView|
std::shared_ptr<flutter::ExternalViewEmbedder> CreateExternalViewEmbedder()
override;
private:
void RegisterPlatformMessageHandlers();
@ -121,10 +125,6 @@ class PlatformView final : public flutter::PlatformView,
// |flutter::PlatformView|
std::unique_ptr<flutter::Surface> CreateRenderingSurface() override;
// |flutter::PlatformView|
std::shared_ptr<flutter::ExternalViewEmbedder> CreateExternalViewEmbedder()
override;
// |flutter::PlatformView|
void HandlePlatformMessage(
fml::RefPtr<flutter::PlatformMessage> message) override;

View File

@ -215,7 +215,8 @@ TEST_F(PlatformViewTests, CreateSurfaceTest) {
RunLoopUntilIdle();
EXPECT_EQ(gr_context.get(), delegate.surface()->GetContext());
EXPECT_EQ(view_embedder.get(), delegate.surface()->GetExternalViewEmbedder());
EXPECT_EQ(view_embedder.get(),
platform_view.CreateExternalViewEmbedder().get());
}
// This test makes sure that the PlatformView correctly registers Scenic

View File

@ -51,9 +51,4 @@ SkMatrix Surface::GetRootTransformation() const {
return matrix;
}
// |flutter::GetViewEmbedder|
flutter::ExternalViewEmbedder* Surface::GetExternalViewEmbedder() {
return view_embedder_.get();
}
} // namespace flutter_runner

View File

@ -39,9 +39,6 @@ class Surface final : public flutter::Surface {
// |flutter::Surface|
SkMatrix GetRootTransformation() const override;
// |flutter::Surface|
flutter::ExternalViewEmbedder* GetExternalViewEmbedder() override;
FML_DISALLOW_COPY_AND_ASSIGN(Surface);
};