diff --git a/flow/embedded_views.cc b/flow/embedded_views.cc index 396b89ffb447b..cc74ae85d38c3 100644 --- a/flow/embedded_views.cc +++ b/flow/embedded_views.cc @@ -70,6 +70,7 @@ void DisplayListEmbedderViewSlice::render_into(DisplayListBuilder* builder) { } void ExternalViewEmbedder::SubmitFrame(GrDirectContext* context, + uint64_t frame_view_id, std::unique_ptr frame) { frame->Submit(); }; diff --git a/flow/embedded_views.h b/flow/embedded_views.h index 79e35fd7729ff..4f85395ac3643 100644 --- a/flow/embedded_views.h +++ b/flow/embedded_views.h @@ -438,6 +438,7 @@ class ExternalViewEmbedder { // // It can also allocate frames for overlay surfaces to compose hybrid views. virtual void SubmitFrame(GrDirectContext* context, + uint64_t frame_view_id, std::unique_ptr frame); // This method provides the embedder a way to do additional tasks after diff --git a/shell/common/rasterizer.cc b/shell/common/rasterizer.cc index cf124ad80476e..8cd610c9edb18 100644 --- a/shell/common/rasterizer.cc +++ b/shell/common/rasterizer.cc @@ -488,6 +488,9 @@ RasterStatus Rasterizer::DrawToSurface( RasterStatus Rasterizer::DrawToSurfaceUnsafe( FrameTimingsRecorder& frame_timings_recorder, flutter::LayerTree& layer_tree) { + // Always gets the first surface, #0. After Flutter supports multi-view, it + // should get the surface ID from layer_tree. + uint64_t surface_id = 0; FML_DCHECK(surface_); compositor_context_->ui_time().SetLapTime( @@ -595,7 +598,7 @@ RasterStatus Rasterizer::DrawToSurfaceUnsafe( if (external_view_embedder_ && (!raster_thread_merger_ || raster_thread_merger_->IsMerged())) { FML_DCHECK(!frame->IsSubmitted()); - external_view_embedder_->SubmitFrame(surface_->GetContext(), + external_view_embedder_->SubmitFrame(surface_->GetContext(), surface_id, std::move(frame)); } else { frame->Submit(); diff --git a/shell/common/rasterizer_unittests.cc b/shell/common/rasterizer_unittests.cc index a6f7ab7159e5d..1daa29a2cfe9f 100644 --- a/shell/common/rasterizer_unittests.cc +++ b/shell/common/rasterizer_unittests.cc @@ -69,8 +69,9 @@ class MockExternalViewEmbedder : public ExternalViewEmbedder { MOCK_METHOD0(GetCurrentCanvases, std::vector()); MOCK_METHOD0(GetCurrentBuilders, std::vector()); MOCK_METHOD1(CompositeEmbeddedView, EmbedderPaintContext(int view_id)); - MOCK_METHOD2(SubmitFrame, + MOCK_METHOD3(SubmitFrame, void(GrDirectContext* context, + uint64_t frame_view_id, std::unique_ptr frame)); MOCK_METHOD2(EndFrame, void(bool should_resubmit_frame, diff --git a/shell/common/shell_test_external_view_embedder.cc b/shell/common/shell_test_external_view_embedder.cc index 7d660b724b2f2..1a876657b2683 100644 --- a/shell/common/shell_test_external_view_embedder.cc +++ b/shell/common/shell_test_external_view_embedder.cc @@ -107,6 +107,7 @@ EmbedderPaintContext ShellTestExternalViewEmbedder::CompositeEmbeddedView( // |ExternalViewEmbedder| void ShellTestExternalViewEmbedder::SubmitFrame( GrDirectContext* context, + uint64_t frame_view_id, std::unique_ptr frame) { if (!frame) { return; diff --git a/shell/common/shell_test_external_view_embedder.h b/shell/common/shell_test_external_view_embedder.h index 5bff1c97ebdc9..b5020dc8e89b0 100644 --- a/shell/common/shell_test_external_view_embedder.h +++ b/shell/common/shell_test_external_view_embedder.h @@ -81,6 +81,7 @@ class ShellTestExternalViewEmbedder final : public ExternalViewEmbedder { // |ExternalViewEmbedder| void SubmitFrame(GrDirectContext* context, + uint64_t frame_view_id, std::unique_ptr frame) override; // |ExternalViewEmbedder| diff --git a/shell/platform/android/external_view_embedder/external_view_embedder.cc b/shell/platform/android/external_view_embedder/external_view_embedder.cc index c1054c78b9ee6..be7d6c6f05ed3 100644 --- a/shell/platform/android/external_view_embedder/external_view_embedder.cc +++ b/shell/platform/android/external_view_embedder/external_view_embedder.cc @@ -99,6 +99,7 @@ SkRect AndroidExternalViewEmbedder::GetViewRect(int view_id) const { // |ExternalViewEmbedder| void AndroidExternalViewEmbedder::SubmitFrame( GrDirectContext* context, + uint64_t frame_view_id, std::unique_ptr frame) { TRACE_EVENT0("flutter", "AndroidExternalViewEmbedder::SubmitFrame"); diff --git a/shell/platform/android/external_view_embedder/external_view_embedder.h b/shell/platform/android/external_view_embedder/external_view_embedder.h index 0b258854408d6..d3655b98091ba 100644 --- a/shell/platform/android/external_view_embedder/external_view_embedder.h +++ b/shell/platform/android/external_view_embedder/external_view_embedder.h @@ -55,6 +55,7 @@ class AndroidExternalViewEmbedder final : public ExternalViewEmbedder { // |ExternalViewEmbedder| void SubmitFrame(GrDirectContext* context, + uint64_t frame_view_id, std::unique_ptr frame) override; // |ExternalViewEmbedder| diff --git a/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc b/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc index b174cd92703f9..c71425451ee74 100644 --- a/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc +++ b/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc @@ -371,7 +371,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame) { }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame)); // Submits frame if no Android view in the current frame. EXPECT_TRUE(did_submit_frame); // Doesn't resubmit frame. @@ -439,7 +439,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame) { }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame)); // Doesn't submit frame if there aren't Android views in the previous frame. EXPECT_FALSE(did_submit_frame); // Resubmits frame. @@ -504,7 +504,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame) { return true; }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame)); // Submits frame if there are Android views in the previous frame. EXPECT_TRUE(did_submit_frame); // Doesn't resubmit frame. @@ -614,7 +614,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrameOverlayComposition) { }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame)); EXPECT_CALL(*jni_mock, FlutterViewEndFrame()); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); @@ -683,7 +683,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFramePlatformViewWithoutAnyOverlay) { }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame)); EXPECT_CALL(*jni_mock, FlutterViewEndFrame()); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); @@ -785,7 +785,7 @@ TEST(AndroidExternalViewEmbedder, DestroyOverlayLayersOnSizeChange) { return true; }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame)); EXPECT_CALL(*jni_mock, FlutterViewEndFrame()); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); @@ -873,7 +873,7 @@ TEST(AndroidExternalViewEmbedder, DoesNotDestroyOverlayLayersOnSizeChange) { return true; }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame)); EXPECT_CALL(*jni_mock, FlutterViewEndFrame()); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); @@ -985,7 +985,7 @@ TEST(AndroidExternalViewEmbedder, Teardown) { SkSurface::MakeNull(1000, 1000), framebuffer_info, [](const SurfaceFrame& surface_frame, SkCanvas* canvas) { return true; }, /*frame_size=*/SkISize::Make(800, 600)); - embedder->SubmitFrame(gr_context.get(), std::move(surface_frame)); + embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame)); embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger); diff --git a/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h b/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h index 498d8c85e378a..ba4d44cc21d1d 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h @@ -50,7 +50,9 @@ class FlutterCompositor { // Presents the FlutterLayers by updating FlutterView(s) using the // layer content. // Present sets frame_started_ to false. - virtual bool Present(const FlutterLayer** layers, size_t layers_count) = 0; + virtual bool Present(uint64_t surface_id, + const FlutterLayer** layers, + size_t layers_count) = 0; using PresentCallback = std::function; diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index adffefbd027b0..1df8303dc9a11 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -476,11 +476,13 @@ - (FlutterCompositor*)createFlutterCompositor { backing_store); }; - _compositor.present_layers_callback = [](const FlutterLayer** layers, // - size_t layers_count, // - void* user_data // - ) { - return reinterpret_cast(user_data)->Present(layers, layers_count); + _compositor.present_layers_surface_callback = [](uint64_t surface_id, // + const FlutterLayer** layers, // + size_t layers_count, // + void* user_data // + ) { + return reinterpret_cast(user_data)->Present(surface_id, layers, + layers_count); }; _compositor.avoid_backing_store_cache = true; diff --git a/shell/platform/darwin/macos/framework/Source/FlutterGLCompositor.h b/shell/platform/darwin/macos/framework/Source/FlutterGLCompositor.h index ef704134429d9..cdbc4c2b69b77 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterGLCompositor.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterGLCompositor.h @@ -44,7 +44,9 @@ class FlutterGLCompositor : public FlutterCompositor { // Presents the FlutterLayers by updating FlutterView(s) using the // layer content. // Present sets frame_started_ to false. - bool Present(const FlutterLayer** layers, size_t layers_count) override; + bool Present(uint64_t surface_id, + const FlutterLayer** layers, + size_t layers_count) override; private: const NSOpenGLContext* open_gl_context_; diff --git a/shell/platform/darwin/macos/framework/Source/FlutterGLCompositor.mm b/shell/platform/darwin/macos/framework/Source/FlutterGLCompositor.mm index 8ab6a993f8c86..7400196543fce 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterGLCompositor.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterGLCompositor.mm @@ -77,11 +77,10 @@ return true; } -bool FlutterGLCompositor::Present(const FlutterLayer** layers, size_t layers_count) { - // TODO(dkwingsmt): This class only supports single-view for now. As more - // classes are gradually converted to multi-view, it should get the view ID - // from somewhere. - FlutterView* view = GetView(kFlutterDefaultViewId); +bool FlutterGLCompositor::Present(uint64_t surface_id, + const FlutterLayer** layers, + size_t layers_count) { + FlutterView* view = GetView(surface_id); if (!view) { return false; } diff --git a/shell/platform/darwin/macos/framework/Source/FlutterGLCompositorUnittests.mm b/shell/platform/darwin/macos/framework/Source/FlutterGLCompositorUnittests.mm index 82b9a629652db..46de7725298ff 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterGLCompositorUnittests.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterGLCompositorUnittests.mm @@ -56,7 +56,7 @@ - (nullable FlutterView*)getView:(uint64_t)viewId { return true; }); - ASSERT_TRUE(macos_compositor->Present(nil, 0)); + ASSERT_TRUE(macos_compositor->Present(0, nil, 0)); ASSERT_TRUE(flag); } diff --git a/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositor.h b/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositor.h index 9a4d462d81f2c..fe07eed2c6854 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositor.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositor.h @@ -42,7 +42,9 @@ class FlutterMetalCompositor : public FlutterCompositor { // Composites the provided FlutterLayer objects and presents the composited // frame to the FlutterView(s). - bool Present(const FlutterLayer** layers, size_t layers_count) override; + bool Present(uint64_t surface_id, + const FlutterLayer** layers, + size_t layers_count) override; private: // Presents the platform view layer represented by `layer`. `layer_index` is diff --git a/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositor.mm b/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositor.mm index 74eae76f8e885..148341651ae38 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositor.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositor.mm @@ -80,11 +80,10 @@ return true; } -bool FlutterMetalCompositor::Present(const FlutterLayer** layers, size_t layers_count) { - // TODO(dkwingsmt): This class only supports single-view for now. As more - // classes are gradually converted to multi-view, it should get the view ID - // from somewhere. - FlutterView* view = GetView(kFlutterDefaultViewId); +bool FlutterMetalCompositor::Present(uint64_t surface_id, + const FlutterLayer** layers, + size_t layers_count) { + FlutterView* view = GetView(surface_id); if (!view) { return false; } diff --git a/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositorUnittests.mm b/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositorUnittests.mm index 4a2884cf61432..4084a61395d3f 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositorUnittests.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterMetalCompositorUnittests.mm @@ -73,7 +73,7 @@ - (nullable FlutterView*)getView:(uint64_t)viewId { return true; }); - ASSERT_TRUE(macos_compositor->Present(nil, 0)); + ASSERT_TRUE(macos_compositor->Present(0, nil, 0)); ASSERT_TRUE(flag); } diff --git a/shell/platform/embedder/embedder.cc b/shell/platform/embedder/embedder.cc index 8b363eec43fb2..16b9098b3e3fb 100644 --- a/shell/platform/embedder/embedder.cc +++ b/shell/platform/embedder/embedder.cc @@ -1038,7 +1038,7 @@ InferExternalViewEmbedderFromArgs(const FlutterCompositor* compositor) { auto c_collect_callback = SAFE_ACCESS(compositor, collect_backing_store_callback, nullptr); auto c_present_callback = - SAFE_ACCESS(compositor, present_layers_callback, nullptr); + SAFE_ACCESS(compositor, present_layers_surface_callback, nullptr); bool avoid_backing_store_cache = SAFE_ACCESS(compositor, avoid_backing_store_cache, false); @@ -1058,12 +1058,12 @@ InferExternalViewEmbedderFromArgs(const FlutterCompositor* compositor) { }; flutter::EmbedderExternalViewEmbedder::PresentCallback present_callback = - [c_present_callback, - user_data = compositor->user_data](const auto& layers) { + [c_present_callback, user_data = compositor->user_data]( + uint64_t surface_id, const auto& layers) { TRACE_EVENT0("flutter", "FlutterCompositorPresentLayers"); return c_present_callback( - const_cast(layers.data()), layers.size(), - user_data); + surface_id, const_cast(layers.data()), + layers.size(), user_data); }; return {std::make_unique( diff --git a/shell/platform/embedder/embedder.h b/shell/platform/embedder/embedder.h index c9e7bc27bb5a5..e708d98ad109a 100644 --- a/shell/platform/embedder/embedder.h +++ b/shell/platform/embedder/embedder.h @@ -1381,6 +1381,8 @@ typedef struct { size_t struct_size; /// The size of the render target the engine expects to render into. FlutterSize size; + /// Indicates the view that owns the layer this store is backing. + uint64_t surface_id; } FlutterBackingStoreConfig; typedef enum { @@ -1424,6 +1426,10 @@ typedef bool (*FlutterBackingStoreCollectCallback)( typedef bool (*FlutterLayersPresentCallback)(const FlutterLayer** layers, size_t layers_count, void* user_data); +typedef bool (*FlutterLayersPresentSurfaceCallback)(uint64_t surface_id, + const FlutterLayer** layers, + size_t layers_count, + void* user_data); typedef struct { /// This size of this struct. Must be sizeof(FlutterCompositor). @@ -1431,7 +1437,7 @@ typedef struct { /// A baton that in not interpreted by the engine in any way. If it passed /// back to the embedder in `FlutterCompositor.create_backing_store_callback`, /// `FlutterCompositor.collect_backing_store_callback` and - /// `FlutterCompositor.present_layers_callback` + /// `FlutterCompositor.present_layers_surface_callback` void* user_data; /// A callback invoked by the engine to obtain a backing store for a specific /// `FlutterLayer`. @@ -1444,11 +1450,13 @@ typedef struct { /// A callback invoked by the engine to release the backing store. The /// embedder may collect any resources associated with the backing store. FlutterBackingStoreCollectCallback collect_backing_store_callback; - /// Callback invoked by the engine to composite the contents of each layer - /// onto the screen. - FlutterLayersPresentCallback present_layers_callback; + /// A deprecated callback. It is not used and should not be set. + void* _deprecated_present_layers_callback; /// Avoid caching backing stores provided by this compositor. bool avoid_backing_store_cache; + /// Callback invoked by the engine to composite the contents of each layer + /// onto the screen. + FlutterLayersPresentSurfaceCallback present_layers_surface_callback; } FlutterCompositor; typedef struct { diff --git a/shell/platform/embedder/embedder_external_view_embedder.cc b/shell/platform/embedder/embedder_external_view_embedder.cc index 0e61db48ce8d8..0371abdd09f68 100644 --- a/shell/platform/embedder/embedder_external_view_embedder.cc +++ b/shell/platform/embedder/embedder_external_view_embedder.cc @@ -131,13 +131,15 @@ EmbedderPaintContext EmbedderExternalViewEmbedder::CompositeEmbeddedView( } static FlutterBackingStoreConfig MakeBackingStoreConfig( - const SkISize& backing_store_size) { + const SkISize& backing_store_size, + uint64_t surface_id) { FlutterBackingStoreConfig config = {}; config.struct_size = sizeof(config); config.size.width = backing_store_size.width(); config.size.height = backing_store_size.height(); + config.surface_id = surface_id; return config; } @@ -145,6 +147,7 @@ static FlutterBackingStoreConfig MakeBackingStoreConfig( // |ExternalViewEmbedder| void EmbedderExternalViewEmbedder::SubmitFrame( GrDirectContext* context, + uint64_t frame_view_id, std::unique_ptr frame) { auto [matched_render_targets, pending_keys] = render_target_cache_.GetExistingTargetsInCache(pending_views_); @@ -184,7 +187,7 @@ void EmbedderExternalViewEmbedder::SubmitFrame( const auto render_surface_size = external_view->GetRenderSurfaceSize(); const auto backing_store_config = - MakeBackingStoreConfig(render_surface_size); + MakeBackingStoreConfig(render_surface_size, frame_view_id); // This is where the embedder will create render targets for us. Control // flow to the embedder makes the engine susceptible to having the embedder @@ -263,7 +266,7 @@ void EmbedderExternalViewEmbedder::SubmitFrame( // Flush the layer description down to the embedder for presentation. // // @warning: Embedder may trample on our OpenGL context here. - presented_layers.InvokePresentCallback(present_callback_); + presented_layers.InvokePresentCallback(present_callback_, frame_view_id); } // See why this is necessary in the comment where this collection in realized. diff --git a/shell/platform/embedder/embedder_external_view_embedder.h b/shell/platform/embedder/embedder_external_view_embedder.h index 7921cb8b78255..8edad877dd2c7 100644 --- a/shell/platform/embedder/embedder_external_view_embedder.h +++ b/shell/platform/embedder/embedder_external_view_embedder.h @@ -33,7 +33,8 @@ class EmbedderExternalViewEmbedder final : public ExternalViewEmbedder { GrDirectContext* context, const FlutterBackingStoreConfig& config)>; using PresentCallback = - std::function& layers)>; + std::function& layers)>; using SurfaceTransformationCallback = std::function; //---------------------------------------------------------------------------- @@ -101,6 +102,7 @@ class EmbedderExternalViewEmbedder final : public ExternalViewEmbedder { // |ExternalViewEmbedder| void SubmitFrame(GrDirectContext* context, + uint64_t frame_view_id, std::unique_ptr frame) override; // |ExternalViewEmbedder| diff --git a/shell/platform/embedder/embedder_layers.cc b/shell/platform/embedder/embedder_layers.cc index 6465293748f9f..e612779dd73b9 100644 --- a/shell/platform/embedder/embedder_layers.cc +++ b/shell/platform/embedder/embedder_layers.cc @@ -199,14 +199,14 @@ void EmbedderLayers::PushPlatformViewLayer( presented_layers_.push_back(layer); } -void EmbedderLayers::InvokePresentCallback( - const PresentCallback& callback) const { +void EmbedderLayers::InvokePresentCallback(const PresentCallback& callback, + uint64_t frame_view_id) const { std::vector presented_layers_pointers; presented_layers_pointers.reserve(presented_layers_.size()); for (const auto& layer : presented_layers_) { presented_layers_pointers.push_back(&layer); } - callback(presented_layers_pointers); + callback(frame_view_id, presented_layers_pointers); } } // namespace flutter diff --git a/shell/platform/embedder/embedder_layers.h b/shell/platform/embedder/embedder_layers.h index c1cb2907588c9..9ad7bb64c3b70 100644 --- a/shell/platform/embedder/embedder_layers.h +++ b/shell/platform/embedder/embedder_layers.h @@ -30,8 +30,10 @@ class EmbedderLayers { const EmbeddedViewParams& params); using PresentCallback = - std::function& layers)>; - void InvokePresentCallback(const PresentCallback& callback) const; + std::function& layers)>; + void InvokePresentCallback(const PresentCallback& callback, + uint64_t frame_view_id) const; private: const SkISize frame_size_; diff --git a/shell/platform/embedder/tests/embedder_config_builder.cc b/shell/platform/embedder/tests/embedder_config_builder.cc index 92ff07a81291a..13a46b88b5f1f 100644 --- a/shell/platform/embedder/tests/embedder_config_builder.cc +++ b/shell/platform/embedder/tests/embedder_config_builder.cc @@ -355,16 +355,19 @@ void EmbedderConfigBuilder::SetCompositor(bool avoid_backing_store_cache) { return reinterpret_cast(user_data) ->CollectBackingStore(backing_store); }; - compositor_.present_layers_callback = [](const FlutterLayer** layers, // - size_t layers_count, // - void* user_data // - ) { - return reinterpret_cast(user_data)->Present( - layers, // - layers_count // - - ); - }; + compositor_.present_layers_surface_callback = + [](uint64_t surface_id, + const FlutterLayer** layers, // + size_t layers_count, // + void* user_data // + ) { + return reinterpret_cast(user_data)->Present( + surface_id, + layers, // + layers_count // + + ); + }; compositor_.avoid_backing_store_cache = avoid_backing_store_cache; project_args_.compositor = &compositor_; } diff --git a/shell/platform/embedder/tests/embedder_test_compositor.cc b/shell/platform/embedder/tests/embedder_test_compositor.cc index 4bbcf2ac83cac..7e9f4808a562b 100644 --- a/shell/platform/embedder/tests/embedder_test_compositor.cc +++ b/shell/platform/embedder/tests/embedder_test_compositor.cc @@ -60,7 +60,8 @@ sk_sp EmbedderTestCompositor::GetLastComposition() { return last_composition_; } -bool EmbedderTestCompositor::Present(const FlutterLayer** layers, +bool EmbedderTestCompositor::Present(uint64_t view_id, + const FlutterLayer** layers, size_t layers_count) { if (!UpdateOffscrenComposition(layers, layers_count)) { FML_LOG(ERROR) diff --git a/shell/platform/embedder/tests/embedder_test_compositor.h b/shell/platform/embedder/tests/embedder_test_compositor.h index 2578445c7ba6d..c32c4770b1e28 100644 --- a/shell/platform/embedder/tests/embedder_test_compositor.h +++ b/shell/platform/embedder/tests/embedder_test_compositor.h @@ -36,7 +36,9 @@ class EmbedderTestCompositor { bool CollectBackingStore(const FlutterBackingStore* backing_store); - bool Present(const FlutterLayer** layers, size_t layers_count); + bool Present(uint64_t view_id, + const FlutterLayer** layers, + size_t layers_count); void SetPlatformViewRendererCallback( const PlatformViewRendererCallback& callback); diff --git a/shell/platform/embedder/tests/embedder_unittests_gl.cc b/shell/platform/embedder/tests/embedder_unittests_gl.cc index 5efa27878e968..09b4020022db8 100644 --- a/shell/platform/embedder/tests/embedder_unittests_gl.cc +++ b/shell/platform/embedder/tests/embedder_unittests_gl.cc @@ -71,7 +71,7 @@ TEST_F(EmbedderTest, builder.SetCompositor(); builder.GetCompositor().create_backing_store_callback = nullptr; builder.GetCompositor().collect_backing_store_callback = nullptr; - builder.GetCompositor().present_layers_callback = nullptr; + builder.GetCompositor().present_layers_surface_callback = nullptr; auto engine = builder.LaunchEngine(); ASSERT_FALSE(engine.is_valid()); }