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

Commit 4972ddf

Browse files
committed
[Windows] Move to new present callback
1 parent 599dbd7 commit 4972ddf

File tree

8 files changed

+79
-23
lines changed

8 files changed

+79
-23
lines changed

shell/platform/windows/compositor.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ class Compositor {
3131
virtual bool CollectBackingStore(const FlutterBackingStore* store) = 0;
3232

3333
// Present Flutter content and platform views onto the view.
34-
virtual bool Present(const FlutterLayer** layers, size_t layers_count) = 0;
34+
virtual bool Present(FlutterViewId view_id,
35+
const FlutterLayer** layers,
36+
size_t layers_count) = 0;
3537
};
3638

3739
} // namespace flutter

shell/platform/windows/compositor_opengl.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,10 @@ bool CompositorOpenGL::CollectBackingStore(const FlutterBackingStore* store) {
9292
return true;
9393
}
9494

95-
bool CompositorOpenGL::Present(const FlutterLayer** layers,
95+
bool CompositorOpenGL::Present(FlutterViewId view_id,
96+
const FlutterLayer** layers,
9697
size_t layers_count) {
97-
// TODO(loicsharma): Remove implicit view assumption.
98-
// https://github.com/flutter/flutter/issues/142845
99-
FlutterWindowsView* view = engine_->view(kImplicitViewId);
98+
FlutterWindowsView* view = engine_->view(view_id);
10099
if (!view) {
101100
return false;
102101
}

shell/platform/windows/compositor_opengl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ class CompositorOpenGL : public Compositor {
2828
bool CollectBackingStore(const FlutterBackingStore* store) override;
2929

3030
/// |Compositor|
31-
bool Present(const FlutterLayer** layers, size_t layers_count) override;
31+
bool Present(FlutterViewId view_id,
32+
const FlutterLayer** layers,
33+
size_t layers_count) override;
3234

3335
private:
3436
// The Flutter engine that manages the views to render.

shell/platform/windows/compositor_opengl_unittests.cc

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class CompositorOpenGLTest : public WindowsTest {
6868

6969
protected:
7070
FlutterWindowsEngine* engine() { return engine_.get(); }
71+
FlutterWindowsView* view() { return view_.get(); }
7172
egl::MockManager* egl_manager() { return egl_manager_; }
7273
egl::MockContext* render_context() { return render_context_.get(); }
7374
egl::MockWindowSurface* surface() { return surface_; }
@@ -168,7 +169,7 @@ TEST_F(CompositorOpenGLTest, Present) {
168169
EXPECT_CALL(*surface(), IsValid).WillRepeatedly(Return(true));
169170
EXPECT_CALL(*surface(), MakeCurrent).WillOnce(Return(true));
170171
EXPECT_CALL(*surface(), SwapBuffers).WillOnce(Return(true));
171-
EXPECT_TRUE(compositor.Present(&layer_ptr, 1));
172+
EXPECT_TRUE(compositor.Present(view()->view_id(), &layer_ptr, 1));
172173

173174
ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));
174175
}
@@ -184,7 +185,7 @@ TEST_F(CompositorOpenGLTest, PresentEmpty) {
184185
EXPECT_CALL(*surface(), IsValid).WillRepeatedly(Return(true));
185186
EXPECT_CALL(*surface(), MakeCurrent).WillOnce(Return(true));
186187
EXPECT_CALL(*surface(), SwapBuffers).WillOnce(Return(true));
187-
EXPECT_TRUE(compositor.Present(nullptr, 0));
188+
EXPECT_TRUE(compositor.Present(view()->view_id(), nullptr, 0));
188189
}
189190

190191
TEST_F(CompositorOpenGLTest, HeadlessPresentIgnored) {
@@ -203,7 +204,32 @@ TEST_F(CompositorOpenGLTest, HeadlessPresentIgnored) {
203204
layer.backing_store = &backing_store;
204205
const FlutterLayer* layer_ptr = &layer;
205206

206-
EXPECT_FALSE(compositor.Present(&layer_ptr, 1));
207+
EXPECT_FALSE(compositor.Present(kImplicitViewId, &layer_ptr, 1));
208+
209+
ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));
210+
}
211+
212+
TEST_F(CompositorOpenGLTest, UnknownViewIgnored) {
213+
UseEngineWithView();
214+
215+
auto compositor = CompositorOpenGL{engine(), kMockResolver};
216+
217+
FlutterBackingStoreConfig config = {};
218+
FlutterBackingStore backing_store = {};
219+
220+
EXPECT_CALL(*render_context(), MakeCurrent).WillOnce(Return(true));
221+
ASSERT_TRUE(compositor.CreateBackingStore(config, &backing_store));
222+
223+
FlutterLayer layer = {};
224+
layer.type = kFlutterLayerContentTypeBackingStore;
225+
layer.backing_store = &backing_store;
226+
const FlutterLayer* layer_ptr = &layer;
227+
228+
FlutterViewId unknown_view_id = 123;
229+
ASSERT_NE(view()->view_id(), unknown_view_id);
230+
ASSERT_EQ(engine()->view(unknown_view_id), nullptr);
231+
232+
EXPECT_FALSE(compositor.Present(unknown_view_id, &layer_ptr, 1));
207233

208234
ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));
209235
}
@@ -224,7 +250,9 @@ TEST_F(CompositorOpenGLTest, NoSurfaceIgnored) {
224250
layer.backing_store = &backing_store;
225251
const FlutterLayer* layer_ptr = &layer;
226252

227-
EXPECT_FALSE(compositor.Present(&layer_ptr, 1));
253+
EXPECT_FALSE(compositor.Present(view()->view_id(), &layer_ptr, 1));
254+
255+
ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));
228256
}
229257

230258
} // namespace testing

shell/platform/windows/compositor_software.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,10 @@ bool CompositorSoftware::CollectBackingStore(const FlutterBackingStore* store) {
3838
return true;
3939
}
4040

41-
bool CompositorSoftware::Present(const FlutterLayer** layers,
41+
bool CompositorSoftware::Present(FlutterViewId view_id,
42+
const FlutterLayer** layers,
4243
size_t layers_count) {
43-
// TODO(loicsharma): Remove implicit view assumption.
44-
// https://github.com/flutter/flutter/issues/142845
45-
FlutterWindowsView* view = engine_->view(kImplicitViewId);
44+
FlutterWindowsView* view = engine_->view(view_id);
4645
if (!view) {
4746
return false;
4847
}

shell/platform/windows/compositor_software.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ class CompositorSoftware : public Compositor {
2424
bool CollectBackingStore(const FlutterBackingStore* store) override;
2525

2626
/// |Compositor|
27-
bool Present(const FlutterLayer** layers, size_t layers_count) override;
27+
bool Present(FlutterViewId view_id,
28+
const FlutterLayer** layers,
29+
size_t layers_count) override;
2830

2931
private:
3032
FlutterWindowsEngine* engine_;

shell/platform/windows/compositor_software_unittests.cc

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ TEST_F(CompositorSoftwareTest, Present) {
104104
const FlutterLayer* layer_ptr = &layer;
105105

106106
EXPECT_CALL(*view(), PresentSoftwareBitmap).WillOnce(Return(true));
107-
EXPECT_TRUE(compositor.Present(&layer_ptr, 1));
107+
EXPECT_TRUE(compositor.Present(view()->view_id(), &layer_ptr, 1));
108108

109109
ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));
110110
}
@@ -115,7 +115,31 @@ TEST_F(CompositorSoftwareTest, PresentEmpty) {
115115
auto compositor = CompositorSoftware{engine()};
116116

117117
EXPECT_CALL(*view(), ClearSoftwareBitmap).WillOnce(Return(true));
118-
EXPECT_TRUE(compositor.Present(nullptr, 0));
118+
EXPECT_TRUE(compositor.Present(view()->view_id(), nullptr, 0));
119+
}
120+
121+
TEST_F(CompositorSoftwareTest, UnknownViewIgnored) {
122+
UseEngineWithView();
123+
124+
auto compositor = CompositorSoftware{engine()};
125+
126+
FlutterBackingStoreConfig config = {};
127+
FlutterBackingStore backing_store = {};
128+
129+
ASSERT_TRUE(compositor.CreateBackingStore(config, &backing_store));
130+
131+
FlutterLayer layer = {};
132+
layer.type = kFlutterLayerContentTypeBackingStore;
133+
layer.backing_store = &backing_store;
134+
const FlutterLayer* layer_ptr = &layer;
135+
136+
FlutterViewId unknown_view_id = 123;
137+
ASSERT_NE(view()->view_id(), unknown_view_id);
138+
ASSERT_EQ(engine()->view(unknown_view_id), nullptr);
139+
140+
EXPECT_FALSE(compositor.Present(unknown_view_id, &layer_ptr, 1));
141+
142+
ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));
119143
}
120144

121145
TEST_F(CompositorSoftwareTest, HeadlessPresentIgnored) {
@@ -133,7 +157,7 @@ TEST_F(CompositorSoftwareTest, HeadlessPresentIgnored) {
133157
layer.backing_store = &backing_store;
134158
const FlutterLayer* layer_ptr = &layer;
135159

136-
EXPECT_FALSE(compositor.Present(&layer_ptr, 1));
160+
EXPECT_FALSE(compositor.Present(kImplicitViewId, &layer_ptr, 1));
137161

138162
ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));
139163
}

shell/platform/windows/flutter_windows_engine.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -414,12 +414,12 @@ bool FlutterWindowsEngine::Run(std::string_view entrypoint) {
414414
return host->compositor_->CollectBackingStore(backing_store);
415415
};
416416

417-
compositor.present_layers_callback = [](const FlutterLayer** layers,
418-
size_t layers_count,
419-
void* user_data) -> bool {
420-
auto host = static_cast<FlutterWindowsEngine*>(user_data);
417+
compositor.present_view_callback =
418+
[](const FlutterPresentViewInfo* info) -> bool {
419+
auto host = static_cast<FlutterWindowsEngine*>(info->user_data);
421420

422-
return host->compositor_->Present(layers, layers_count);
421+
return host->compositor_->Present(info->view_id, info->layers,
422+
info->layers_count);
423423
};
424424
args.compositor = &compositor;
425425

0 commit comments

Comments
 (0)