Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 021ff04

Browse files
authored
Reverts 2 commits that remove surface dependance on external view embedder (#22468)
* Revert "Remove GetExternalViewEmbedder from surface (#22272)" This reverts commit 5419f70. * Revert "Rasterizer is initialized with an external view embedder (#22405)" This reverts commit f95df42.
1 parent d37b862 commit 021ff04

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+264
-82
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,7 @@ FILE: ../../../flutter/shell/common/vsync_waiter_fallback.cc
667667
FILE: ../../../flutter/shell/common/vsync_waiter_fallback.h
668668
FILE: ../../../flutter/shell/common/vsync_waiters_test.cc
669669
FILE: ../../../flutter/shell/common/vsync_waiters_test.h
670+
FILE: ../../../flutter/shell/gpu/gpu_surface_delegate.h
670671
FILE: ../../../flutter/shell/gpu/gpu_surface_gl.cc
671672
FILE: ../../../flutter/shell/gpu/gpu_surface_gl.h
672673
FILE: ../../../flutter/shell/gpu/gpu_surface_gl_delegate.cc

flow/surface.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ Surface::Surface() = default;
1010

1111
Surface::~Surface() = default;
1212

13+
flutter::ExternalViewEmbedder* Surface::GetExternalViewEmbedder() {
14+
return nullptr;
15+
}
16+
1317
std::unique_ptr<GLContextResult> Surface::MakeRenderContextCurrent() {
1418
return std::make_unique<GLContextDefaultResult>(true);
1519
}

flow/surface.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ class Surface {
2929

3030
virtual GrDirectContext* GetContext() = 0;
3131

32+
virtual flutter::ExternalViewEmbedder* GetExternalViewEmbedder();
33+
3234
virtual std::unique_ptr<GLContextResult> MakeRenderContextCurrent();
3335

3436
virtual bool ClearRenderContext();

shell/common/platform_view.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,8 +563,6 @@ class PlatformView {
563563
ComputePlatformResolvedLocales(
564564
const std::vector<std::string>& supported_locale_data);
565565

566-
virtual std::shared_ptr<ExternalViewEmbedder> CreateExternalViewEmbedder();
567-
568566
protected:
569567
PlatformView::Delegate& delegate_;
570568
const TaskRunners task_runners_;
@@ -577,6 +575,8 @@ class PlatformView {
577575
// GPU task runner.
578576
virtual std::unique_ptr<Surface> CreateRenderingSurface();
579577

578+
virtual std::shared_ptr<ExternalViewEmbedder> CreateExternalViewEmbedder();
579+
580580
private:
581581
FML_DISALLOW_COPY_AND_ASSIGN(PlatformView);
582582
};

shell/common/rasterizer.cc

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ void Rasterizer::Setup(std::unique_ptr<Surface> surface) {
7676
user_override_resource_cache_bytes_);
7777
}
7878
compositor_context_->OnGrContextCreated();
79-
if (external_view_embedder_ &&
80-
external_view_embedder_->SupportsDynamicThreadMerging() &&
79+
if (surface_->GetExternalViewEmbedder() &&
80+
surface_->GetExternalViewEmbedder()->SupportsDynamicThreadMerging() &&
8181
!raster_thread_merger_) {
8282
const auto platform_id =
8383
delegate_.GetTaskRunners().GetPlatformTaskRunner()->GetTaskQueueId();
@@ -191,9 +191,9 @@ void Rasterizer::Draw(fml::RefPtr<Pipeline<flutter::LayerTree>> pipeline,
191191
}
192192

193193
// EndFrame should perform cleanups for the external_view_embedder.
194-
if (external_view_embedder_) {
195-
external_view_embedder_->EndFrame(should_resubmit_frame,
196-
raster_thread_merger_);
194+
if (surface_ != nullptr && surface_->GetExternalViewEmbedder() != nullptr) {
195+
surface_->GetExternalViewEmbedder()->EndFrame(should_resubmit_frame,
196+
raster_thread_merger_);
197197
}
198198

199199
// Consume as many pipeline items as possible. But yield the event loop
@@ -423,12 +423,14 @@ RasterStatus Rasterizer::DrawToSurface(flutter::LayerTree& layer_tree) {
423423
// for instrumentation.
424424
compositor_context_->ui_time().SetLapTime(layer_tree.build_time());
425425

426+
auto* external_view_embedder = surface_->GetExternalViewEmbedder();
427+
426428
SkCanvas* embedder_root_canvas = nullptr;
427-
if (external_view_embedder_) {
428-
external_view_embedder_->BeginFrame(
429+
if (external_view_embedder != nullptr) {
430+
external_view_embedder->BeginFrame(
429431
layer_tree.frame_size(), surface_->GetContext(),
430432
layer_tree.device_pixel_ratio(), raster_thread_merger_);
431-
embedder_root_canvas = external_view_embedder_->GetRootCanvas();
433+
embedder_root_canvas = external_view_embedder->GetRootCanvas();
432434
}
433435

434436
// On Android, the external view embedder deletes surfaces in `BeginFrame`.
@@ -451,13 +453,13 @@ RasterStatus Rasterizer::DrawToSurface(flutter::LayerTree& layer_tree) {
451453
embedder_root_canvas ? embedder_root_canvas : frame->SkiaCanvas();
452454

453455
auto compositor_frame = compositor_context_->AcquireFrame(
454-
surface_->GetContext(), // skia GrContext
455-
root_surface_canvas, // root surface canvas
456-
external_view_embedder_.get(), // external view embedder
457-
root_surface_transformation, // root surface transformation
458-
true, // instrumentation enabled
459-
frame->supports_readback(), // surface supports pixel reads
460-
raster_thread_merger_ // thread merger
456+
surface_->GetContext(), // skia GrContext
457+
root_surface_canvas, // root surface canvas
458+
external_view_embedder, // external view embedder
459+
root_surface_transformation, // root surface transformation
460+
true, // instrumentation enabled
461+
frame->supports_readback(), // surface supports pixel reads
462+
raster_thread_merger_ // thread merger
461463
);
462464

463465
if (compositor_frame) {
@@ -466,11 +468,11 @@ RasterStatus Rasterizer::DrawToSurface(flutter::LayerTree& layer_tree) {
466468
raster_status == RasterStatus::kSkipAndRetry) {
467469
return raster_status;
468470
}
469-
if (external_view_embedder_ &&
471+
if (external_view_embedder != nullptr &&
470472
(!raster_thread_merger_ || raster_thread_merger_->IsMerged())) {
471473
FML_DCHECK(!frame->IsSubmitted());
472-
external_view_embedder_->SubmitFrame(surface_->GetContext(),
473-
std::move(frame));
474+
external_view_embedder->SubmitFrame(surface_->GetContext(),
475+
std::move(frame));
474476
} else {
475477
frame->Submit();
476478
}
@@ -651,11 +653,6 @@ void Rasterizer::SetNextFrameCallback(const fml::closure& callback) {
651653
next_frame_callback_ = callback;
652654
}
653655

654-
void Rasterizer::SetExternalViewEmbedder(
655-
const std::shared_ptr<ExternalViewEmbedder>& view_embedder) {
656-
external_view_embedder_ = view_embedder;
657-
}
658-
659656
void Rasterizer::FireNextFrameCallbackIfPresent() {
660657
if (!next_frame_callback_) {
661658
return;

shell/common/rasterizer.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <memory>
99
#include <optional>
1010

11-
#include "flow/embedded_views.h"
1211
#include "flutter/common/settings.h"
1312
#include "flutter/common/task_runners.h"
1413
#include "flutter/flow/compositor_context.h"
@@ -350,16 +349,6 @@ class Rasterizer final : public SnapshotDelegate {
350349
///
351350
void SetNextFrameCallback(const fml::closure& callback);
352351

353-
//----------------------------------------------------------------------------
354-
/// @brief Set the External View Embedder. This is done on shell
355-
/// initialization. This is non-null on platforms that support
356-
/// embedding externally composited views.
357-
///
358-
/// @param[in] view_embedder The external view embedder object.
359-
///
360-
void SetExternalViewEmbedder(
361-
const std::shared_ptr<ExternalViewEmbedder>& view_embedder);
362-
363352
//----------------------------------------------------------------------------
364353
/// @brief Returns a pointer to the compositor context used by this
365354
/// rasterizer. This pointer will never be `nullptr`.
@@ -448,7 +437,6 @@ class Rasterizer final : public SnapshotDelegate {
448437
std::optional<size_t> max_cache_bytes_;
449438
fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger_;
450439
fml::TaskRunnerAffineWeakPtrFactory<Rasterizer> weak_factory_;
451-
std::shared_ptr<ExternalViewEmbedder> external_view_embedder_;
452440

453441
// |SnapshotDelegate|
454442
sk_sp<SkImage> MakeRasterSnapshot(sk_sp<SkPicture> picture,

shell/common/rasterizer_unittests.cc

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -113,25 +113,25 @@ TEST(RasterizerTest,
113113
auto rasterizer = std::make_unique<Rasterizer>(delegate);
114114
auto surface = std::make_unique<MockSurface>();
115115

116-
std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
117-
std::make_shared<MockExternalViewEmbedder>();
118-
rasterizer->SetExternalViewEmbedder(external_view_embedder);
116+
MockExternalViewEmbedder external_view_embedder;
117+
EXPECT_CALL(*surface, GetExternalViewEmbedder())
118+
.WillRepeatedly(Return(&external_view_embedder));
119119

120120
auto surface_frame = std::make_unique<SurfaceFrame>(
121121
/*surface=*/nullptr, /*supports_readback=*/true,
122122
/*submit_callback=*/[](const SurfaceFrame&, SkCanvas*) { return true; });
123123
EXPECT_CALL(*surface, AcquireFrame(SkISize()))
124124
.WillOnce(Return(ByMove(std::move(surface_frame))));
125125

126-
EXPECT_CALL(*external_view_embedder,
126+
EXPECT_CALL(external_view_embedder,
127127
BeginFrame(/*frame_size=*/SkISize(), /*context=*/nullptr,
128128
/*device_pixel_ratio=*/2.0,
129129
/*raster_thread_merger=*/
130130
fml::RefPtr<fml::RasterThreadMerger>(nullptr)))
131131
.Times(1);
132-
EXPECT_CALL(*external_view_embedder, SubmitFrame).Times(1);
132+
EXPECT_CALL(external_view_embedder, SubmitFrame).Times(1);
133133
EXPECT_CALL(
134-
*external_view_embedder,
134+
external_view_embedder,
135135
EndFrame(/*should_resubmit_frame=*/false,
136136
/*raster_thread_merger=*/fml::RefPtr<fml::RasterThreadMerger>(
137137
nullptr)))
@@ -170,25 +170,25 @@ TEST(
170170
EXPECT_CALL(delegate, OnFrameRasterized(_));
171171
auto rasterizer = std::make_unique<Rasterizer>(delegate);
172172
auto surface = std::make_unique<MockSurface>();
173-
std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
174-
std::make_shared<MockExternalViewEmbedder>();
175-
rasterizer->SetExternalViewEmbedder(external_view_embedder);
176-
EXPECT_CALL(*external_view_embedder, SupportsDynamicThreadMerging)
173+
MockExternalViewEmbedder external_view_embedder;
174+
EXPECT_CALL(*surface, GetExternalViewEmbedder())
175+
.WillRepeatedly(Return(&external_view_embedder));
176+
EXPECT_CALL(external_view_embedder, SupportsDynamicThreadMerging)
177177
.WillRepeatedly(Return(true));
178178
auto surface_frame = std::make_unique<SurfaceFrame>(
179179
/*surface=*/nullptr, /*supports_readback=*/true,
180180
/*submit_callback=*/[](const SurfaceFrame&, SkCanvas*) { return true; });
181181
EXPECT_CALL(*surface, AcquireFrame(SkISize()))
182182
.WillOnce(Return(ByMove(std::move(surface_frame))));
183183

184-
EXPECT_CALL(*external_view_embedder,
184+
EXPECT_CALL(external_view_embedder,
185185
BeginFrame(/*frame_size=*/SkISize(), /*context=*/nullptr,
186186
/*device_pixel_ratio=*/2.0,
187187
/*raster_thread_merger=*/_))
188188
.Times(1);
189-
EXPECT_CALL(*external_view_embedder, SubmitFrame).Times(0);
190-
EXPECT_CALL(*external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
191-
/*raster_thread_merger=*/_))
189+
EXPECT_CALL(external_view_embedder, SubmitFrame).Times(0);
190+
EXPECT_CALL(external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
191+
/*raster_thread_merger=*/_))
192192
.Times(1);
193193

194194
rasterizer->Setup(std::move(surface));
@@ -229,26 +229,26 @@ TEST(
229229
auto rasterizer = std::make_unique<Rasterizer>(delegate);
230230
auto surface = std::make_unique<MockSurface>();
231231

232-
std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
233-
std::make_shared<MockExternalViewEmbedder>();
234-
rasterizer->SetExternalViewEmbedder(external_view_embedder);
232+
MockExternalViewEmbedder external_view_embedder;
233+
EXPECT_CALL(*surface, GetExternalViewEmbedder())
234+
.WillRepeatedly(Return(&external_view_embedder));
235235

236236
auto surface_frame = std::make_unique<SurfaceFrame>(
237237
/*surface=*/nullptr, /*supports_readback=*/true,
238238
/*submit_callback=*/[](const SurfaceFrame&, SkCanvas*) { return true; });
239239
EXPECT_CALL(*surface, AcquireFrame(SkISize()))
240240
.WillOnce(Return(ByMove(std::move(surface_frame))));
241-
EXPECT_CALL(*external_view_embedder, SupportsDynamicThreadMerging)
241+
EXPECT_CALL(external_view_embedder, SupportsDynamicThreadMerging)
242242
.WillRepeatedly(Return(true));
243243

244-
EXPECT_CALL(*external_view_embedder,
244+
EXPECT_CALL(external_view_embedder,
245245
BeginFrame(/*frame_size=*/SkISize(), /*context=*/nullptr,
246246
/*device_pixel_ratio=*/2.0,
247247
/*raster_thread_merger=*/_))
248248
.Times(1);
249-
EXPECT_CALL(*external_view_embedder, SubmitFrame).Times(1);
250-
EXPECT_CALL(*external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
251-
/*raster_thread_merger=*/_))
249+
EXPECT_CALL(external_view_embedder, SubmitFrame).Times(1);
250+
EXPECT_CALL(external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
251+
/*raster_thread_merger=*/_))
252252
.Times(1);
253253

254254
rasterizer->Setup(std::move(surface));

shell/common/shell.cc

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -547,10 +547,6 @@ bool Shell::Setup(std::unique_ptr<PlatformView> platform_view,
547547
rasterizer_ = std::move(rasterizer);
548548
io_manager_ = std::move(io_manager);
549549

550-
// Set the external view embedder for the rasterizer.
551-
auto view_embedder = platform_view_->CreateExternalViewEmbedder();
552-
rasterizer_->SetExternalViewEmbedder(view_embedder);
553-
554550
// The weak ptr must be generated in the platform thread which owns the unique
555551
// ptr.
556552
weak_engine_ = engine_->GetWeakPtr();

shell/common/shell_test_platform_view_gl.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,10 @@ ShellTestPlatformViewGL::GetGLProcResolver() const {
7979
};
8080
}
8181

82+
// |GPUSurfaceGLDelegate|
83+
ExternalViewEmbedder* ShellTestPlatformViewGL::GetExternalViewEmbedder() {
84+
return shell_test_external_view_embedder_.get();
85+
}
86+
8287
} // namespace testing
8388
} // namespace flutter

shell/common/shell_test_platform_view_gl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ class ShellTestPlatformViewGL : public ShellTestPlatformView,
6464
// |GPUSurfaceGLDelegate|
6565
GLProcResolver GetGLProcResolver() const override;
6666

67+
// |GPUSurfaceGLDelegate|
68+
ExternalViewEmbedder* GetExternalViewEmbedder() override;
69+
6770
FML_DISALLOW_COPY_AND_ASSIGN(ShellTestPlatformViewGL);
6871
};
6972

0 commit comments

Comments
 (0)