Skip to content

Commit d637f29

Browse files
authored
External view embedder can tell if embedded views have mutated (#9653)
* refactoring to move the mutator stack handling to preroll * more review fixes * Add support for external view embedded to know if it has changed * remove the need to reset * address comments * Rename to HasPendingViewOperations
1 parent ceee3d7 commit d637f29

File tree

7 files changed

+31
-0
lines changed

7 files changed

+31
-0
lines changed

flow/embedded_views.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ class ExternalViewEmbedder {
183183
public:
184184
ExternalViewEmbedder() = default;
185185

186+
// This will return true after pre-roll if any of the embedded views
187+
// have mutated for last layer tree.
188+
virtual bool HasPendingViewOperations() = 0;
189+
186190
virtual void BeginFrame(SkISize frame_size) = 0;
187191

188192
virtual void PrerollCompositeEmbeddedView(

shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,13 @@
160160
frame_size_ = frame_size;
161161
}
162162

163+
bool FlutterPlatformViewsController::HasPendingViewOperations() {
164+
if (!views_to_recomposite_.empty()) {
165+
return true;
166+
}
167+
return active_composition_order_ != composition_order_;
168+
}
169+
163170
void FlutterPlatformViewsController::PrerollCompositeEmbeddedView(
164171
int view_id,
165172
std::unique_ptr<EmbeddedViewParams> params) {

shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ class FlutterPlatformViewsController {
7979

8080
void SetFrameSize(SkISize frame_size);
8181

82+
bool HasPendingViewOperations();
83+
8284
void PrerollCompositeEmbeddedView(int view_id,
8385
std::unique_ptr<flutter::EmbeddedViewParams> params);
8486

shell/platform/darwin/ios/ios_surface_gl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ class IOSSurfaceGL final : public IOSSurface,
5151
// |GPUSurfaceGLDelegate|
5252
flutter::ExternalViewEmbedder* GetExternalViewEmbedder() override;
5353

54+
// |flutter::ExternalViewEmbedder|
55+
bool HasPendingViewOperations() override;
56+
5457
// |flutter::ExternalViewEmbedder|
5558
void BeginFrame(SkISize frame_size) override;
5659

shell/platform/darwin/ios/ios_surface_gl.mm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@
8282
}
8383
}
8484

85+
bool IOSSurfaceGL::HasPendingViewOperations() {
86+
FlutterPlatformViewsController* platform_views_controller = GetPlatformViewsController();
87+
FML_CHECK(platform_views_controller != nullptr);
88+
return platform_views_controller->HasPendingViewOperations();
89+
}
90+
8591
void IOSSurfaceGL::BeginFrame(SkISize frame_size) {
8692
FlutterPlatformViewsController* platform_views_controller = GetPlatformViewsController();
8793
FML_CHECK(platform_views_controller != nullptr);

shell/platform/darwin/ios/ios_surface_software.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ class IOSSurfaceSoftware final : public IOSSurface,
4545
// |GPUSurfaceSoftwareDelegate|
4646
flutter::ExternalViewEmbedder* GetExternalViewEmbedder() override;
4747

48+
// |flutter::ExternalViewEmbedder|
49+
bool HasPendingViewOperations() override;
50+
4851
// |flutter::ExternalViewEmbedder|
4952
void BeginFrame(SkISize frame_size) override;
5053

shell/platform/darwin/ios/ios_surface_software.mm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@
135135
}
136136
}
137137

138+
bool IOSSurfaceSoftware::HasPendingViewOperations() {
139+
FlutterPlatformViewsController* platform_views_controller = GetPlatformViewsController();
140+
FML_CHECK(platform_views_controller != nullptr);
141+
return platform_views_controller->HasPendingViewOperations();
142+
}
143+
138144
void IOSSurfaceSoftware::BeginFrame(SkISize frame_size) {
139145
FlutterPlatformViewsController* platform_views_controller = GetPlatformViewsController();
140146
FML_CHECK(platform_views_controller != nullptr);

0 commit comments

Comments
 (0)