Skip to content

Commit 62459b3

Browse files
authored
[embedder] Platform View owns lifecycle of external view embedder (#21847)
Changing it to shared_ptr and migrating the ownership from surface to platform view.
1 parent 44ea967 commit 62459b3

File tree

6 files changed

+23
-19
lines changed

6 files changed

+23
-19
lines changed

shell/platform/embedder/embedder_surface_gl.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ namespace flutter {
1111
EmbedderSurfaceGL::EmbedderSurfaceGL(
1212
GLDispatchTable gl_dispatch_table,
1313
bool fbo_reset_after_present,
14-
std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder)
14+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder)
1515
: gl_dispatch_table_(gl_dispatch_table),
1616
fbo_reset_after_present_(fbo_reset_after_present),
17-
external_view_embedder_(std::move(external_view_embedder)) {
17+
external_view_embedder_(external_view_embedder) {
1818
// Make sure all required members of the dispatch table are checked.
1919
if (!gl_dispatch_table_.gl_make_current_callback ||
2020
!gl_dispatch_table_.gl_clear_current_callback ||

shell/platform/embedder/embedder_surface_gl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class EmbedderSurfaceGL final : public EmbedderSurface,
2929
EmbedderSurfaceGL(
3030
GLDispatchTable gl_dispatch_table,
3131
bool fbo_reset_after_present,
32-
std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
32+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
3333

3434
~EmbedderSurfaceGL() override;
3535

@@ -38,7 +38,7 @@ class EmbedderSurfaceGL final : public EmbedderSurface,
3838
GLDispatchTable gl_dispatch_table_;
3939
bool fbo_reset_after_present_;
4040

41-
std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder_;
41+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder_;
4242

4343
// |EmbedderSurface|
4444
bool IsValid() const override;

shell/platform/embedder/embedder_surface_software.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ namespace flutter {
1111

1212
EmbedderSurfaceSoftware::EmbedderSurfaceSoftware(
1313
SoftwareDispatchTable software_dispatch_table,
14-
std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder)
14+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder)
1515
: software_dispatch_table_(software_dispatch_table),
16-
external_view_embedder_(std::move(external_view_embedder)) {
16+
external_view_embedder_(external_view_embedder) {
1717
if (!software_dispatch_table_.software_present_backing_store) {
1818
return;
1919
}

shell/platform/embedder/embedder_surface_software.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ class EmbedderSurfaceSoftware final : public EmbedderSurface,
2222

2323
EmbedderSurfaceSoftware(
2424
SoftwareDispatchTable software_dispatch_table,
25-
std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
25+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
2626

2727
~EmbedderSurfaceSoftware() override;
2828

2929
private:
3030
bool valid_ = false;
3131
SoftwareDispatchTable software_dispatch_table_;
3232
sk_sp<SkSurface> sk_surface_;
33-
std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder_;
33+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder_;
3434

3535
// |EmbedderSurface|
3636
bool IsValid() const override;

shell/platform/embedder/platform_view_embedder.cc

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ PlatformViewEmbedder::PlatformViewEmbedder(
1111
flutter::TaskRunners task_runners,
1212
EmbedderSurfaceSoftware::SoftwareDispatchTable software_dispatch_table,
1313
PlatformDispatchTable platform_dispatch_table,
14-
std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder)
14+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder)
1515
: PlatformView(delegate, std::move(task_runners)),
16-
embedder_surface_(std::make_unique<EmbedderSurfaceSoftware>(
17-
software_dispatch_table,
18-
std::move(external_view_embedder))),
16+
external_view_embedder_(external_view_embedder),
17+
embedder_surface_(
18+
std::make_unique<EmbedderSurfaceSoftware>(software_dispatch_table,
19+
external_view_embedder_)),
1920
platform_dispatch_table_(platform_dispatch_table) {}
2021

2122
#ifdef SHELL_ENABLE_GL
@@ -25,12 +26,13 @@ PlatformViewEmbedder::PlatformViewEmbedder(
2526
EmbedderSurfaceGL::GLDispatchTable gl_dispatch_table,
2627
bool fbo_reset_after_present,
2728
PlatformDispatchTable platform_dispatch_table,
28-
std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder)
29+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder)
2930
: PlatformView(delegate, std::move(task_runners)),
30-
embedder_surface_(std::make_unique<EmbedderSurfaceGL>(
31-
gl_dispatch_table,
32-
fbo_reset_after_present,
33-
std::move(external_view_embedder))),
31+
external_view_embedder_(external_view_embedder),
32+
embedder_surface_(
33+
std::make_unique<EmbedderSurfaceGL>(gl_dispatch_table,
34+
fbo_reset_after_present,
35+
external_view_embedder_)),
3436
platform_dispatch_table_(platform_dispatch_table) {}
3537
#endif
3638

shell/platform/embedder/platform_view_embedder.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include <functional>
99

10+
#include "flow/embedded_views.h"
1011
#include "flutter/fml/macros.h"
1112
#include "flutter/shell/common/platform_view.h"
1213
#include "flutter/shell/platform/embedder/embedder.h"
@@ -49,7 +50,7 @@ class PlatformViewEmbedder final : public PlatformView {
4950
flutter::TaskRunners task_runners,
5051
EmbedderSurfaceSoftware::SoftwareDispatchTable software_dispatch_table,
5152
PlatformDispatchTable platform_dispatch_table,
52-
std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
53+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
5354

5455
#ifdef SHELL_ENABLE_GL
5556
// Creates a platform view that sets up an OpenGL rasterizer.
@@ -59,7 +60,7 @@ class PlatformViewEmbedder final : public PlatformView {
5960
EmbedderSurfaceGL::GLDispatchTable gl_dispatch_table,
6061
bool fbo_reset_after_present,
6162
PlatformDispatchTable platform_dispatch_table,
62-
std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
63+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
6364
#endif
6465

6566
~PlatformViewEmbedder() override;
@@ -74,6 +75,7 @@ class PlatformViewEmbedder final : public PlatformView {
7475
fml::RefPtr<flutter::PlatformMessage> message) override;
7576

7677
private:
78+
std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder_;
7779
std::unique_ptr<EmbedderSurface> embedder_surface_;
7880
PlatformDispatchTable platform_dispatch_table_;
7981

0 commit comments

Comments
 (0)