diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index a4657cb0b7e0f..02b295d603272 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -56,6 +56,8 @@ FILE: ../../../flutter/display_list/display_list_blend_mode.h FILE: ../../../flutter/display_list/display_list_builder.cc FILE: ../../../flutter/display_list/display_list_builder.h FILE: ../../../flutter/display_list/display_list_builder_benchmarks.cc +FILE: ../../../flutter/display_list/display_list_builder_multiplexer.cc +FILE: ../../../flutter/display_list/display_list_builder_multiplexer.h FILE: ../../../flutter/display_list/display_list_canvas_dispatcher.cc FILE: ../../../flutter/display_list/display_list_canvas_dispatcher.h FILE: ../../../flutter/display_list/display_list_canvas_recorder.cc diff --git a/display_list/BUILD.gn b/display_list/BUILD.gn index 0724e4a997d6b..077209220e69b 100644 --- a/display_list/BUILD.gn +++ b/display_list/BUILD.gn @@ -16,6 +16,8 @@ source_set("display_list") { "display_list_blend_mode.h", "display_list_builder.cc", "display_list_builder.h", + "display_list_builder_multiplexer.cc", + "display_list_builder_multiplexer.h", "display_list_canvas_dispatcher.cc", "display_list_canvas_dispatcher.h", "display_list_canvas_recorder.cc", diff --git a/display_list/display_list_builder_multiplexer.cc b/display_list/display_list_builder_multiplexer.cc new file mode 100644 index 0000000000000..0c029c532f89d --- /dev/null +++ b/display_list/display_list_builder_multiplexer.cc @@ -0,0 +1,28 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "flutter/display_list/display_list_builder_multiplexer.h" + +namespace flutter { + +void DisplayListBuilderMultiplexer::addBuilder(DisplayListBuilder* builder) { + builders_.push_back(builder); +} + +void DisplayListBuilderMultiplexer::saveLayer( + const SkRect* bounds, + const DlPaint* paint, + const DlImageFilter* backdrop_filter) { + for (auto* builder : builders_) { + builder->saveLayer(bounds, paint, backdrop_filter); + } +} + +void DisplayListBuilderMultiplexer::restore() { + for (auto* builder : builders_) { + builder->restore(); + } +} + +} // namespace flutter diff --git a/display_list/display_list_builder_multiplexer.h b/display_list/display_list_builder_multiplexer.h new file mode 100644 index 0000000000000..498301d136773 --- /dev/null +++ b/display_list/display_list_builder_multiplexer.h @@ -0,0 +1,36 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef FLUTTER_DISPLAY_LIST_DISPLAY_LIST_BUILDER_MULTIPLEXER_H_ +#define FLUTTER_DISPLAY_LIST_DISPLAY_LIST_BUILDER_MULTIPLEXER_H_ + +#include "flutter/display_list/display_list_builder.h" +#include "flutter/display_list/display_list_image_filter.h" +#include "flutter/display_list/display_list_paint.h" +#include "flutter/fml/macros.h" + +namespace flutter { + +/// A class that mutiplexes some of the DisplayListBuilder calls to multiple +/// other builders. For now it only implements saveLayer and restore as those +/// are needed to create a replacement for PaintContext::internal_nodes_canvas. +class DisplayListBuilderMultiplexer { + public: + DisplayListBuilderMultiplexer() = default; + + void addBuilder(DisplayListBuilder* builder); + + void saveLayer(const SkRect* bounds, + const DlPaint* paint, + const DlImageFilter* backdrop_filter = nullptr); + + void restore(); + + private: + std::vector builders_; +}; + +} // namespace flutter + +#endif // FLUTTER_DISPLAY_LIST_DISPLAY_LIST_BUILDER_MULTIPLEXER_H_ diff --git a/flow/embedded_views.h b/flow/embedded_views.h index 6a678978f2c85..cc252ae527835 100644 --- a/flow/embedded_views.h +++ b/flow/embedded_views.h @@ -7,6 +7,7 @@ #include +#include "flutter/display_list/display_list_builder.h" #include "flutter/flow/rtree.h" #include "flutter/flow/surface_frame.h" #include "flutter/fml/memory/ref_counted.h" @@ -393,6 +394,7 @@ class ExternalViewEmbedder { } virtual std::vector GetCurrentCanvases() = 0; + virtual std::vector GetCurrentBuilders() = 0; // Must be called on the UI thread. virtual EmbedderPaintContext CompositeEmbeddedView(int view_id) = 0; diff --git a/flow/layers/backdrop_filter_layer.cc b/flow/layers/backdrop_filter_layer.cc index eb85e73b6a199..9f67b746b1c9b 100644 --- a/flow/layers/backdrop_filter_layer.cc +++ b/flow/layers/backdrop_filter_layer.cc @@ -60,6 +60,10 @@ void BackdropFilterLayer::Paint(PaintContext& context) const { AutoCachePaint save_paint(context); save_paint.setBlendMode(blend_mode_); if (context.leaf_nodes_builder) { + // Note that we perform a saveLayer directly on the + // leaf_nodes_builder here similar to how the SkCanvas + // path specifies the kLeafNodesCanvas below. + // See https:://flutter.dev/go/backdrop-filter-with-overlay-canvas context.leaf_nodes_builder->saveLayer(&paint_bounds(), save_paint.dl_paint(), filter_.get()); diff --git a/flow/layers/color_filter_layer.cc b/flow/layers/color_filter_layer.cc index 9c22dbfe258bf..02822bf68d612 100644 --- a/flow/layers/color_filter_layer.cc +++ b/flow/layers/color_filter_layer.cc @@ -61,10 +61,11 @@ void ColorFilterLayer::Paint(PaintContext& context) const { AutoCachePaint cache_paint(context); cache_paint.setColorFilter(filter_.get()); if (context.leaf_nodes_builder) { - context.leaf_nodes_builder->saveLayer(&paint_bounds(), - cache_paint.dl_paint()); + FML_DCHECK(context.builder_multiplexer); + context.builder_multiplexer->saveLayer(&paint_bounds(), + cache_paint.dl_paint()); PaintChildren(context); - context.leaf_nodes_builder->restore(); + context.builder_multiplexer->restore(); } else { Layer::AutoSaveLayer save = Layer::AutoSaveLayer::Create( context, paint_bounds(), cache_paint.sk_paint()); diff --git a/flow/layers/layer.h b/flow/layers/layer.h index 5cdd3e7db028c..17d5dc92ac0a3 100644 --- a/flow/layers/layer.h +++ b/flow/layers/layer.h @@ -11,6 +11,7 @@ #include #include "flutter/common/graphics/texture.h" +#include "flutter/display_list/display_list_builder_multiplexer.h" #include "flutter/flow/diff_context.h" #include "flutter/flow/embedded_views.h" #include "flutter/flow/instrumentation.h" @@ -29,7 +30,9 @@ #include "third_party/skia/include/core/SkRRect.h" #include "third_party/skia/include/core/SkRect.h" #include "third_party/skia/include/utils/SkNWayCanvas.h" + namespace flutter { + namespace testing { class MockLayer; } // namespace testing @@ -150,6 +153,7 @@ struct PaintContext { // a |kSrcOver| blend mode. SkScalar inherited_opacity = SK_Scalar1; DisplayListBuilder* leaf_nodes_builder = nullptr; + DisplayListBuilderMultiplexer* builder_multiplexer = nullptr; }; // Represents a single composited layer. Created on the UI thread but then diff --git a/flow/layers/layer_tree.cc b/flow/layers/layer_tree.cc index 0fafe40f62861..de7573ef4ac39 100644 --- a/flow/layers/layer_tree.cc +++ b/flow/layers/layer_tree.cc @@ -119,6 +119,16 @@ void LayerTree::Paint(CompositorContext::ScopedFrame& frame, internal_nodes_canvas.addCanvas(overlay_canvases[i]); } } + DisplayListBuilder* builder = frame.display_list_builder(); + DisplayListBuilderMultiplexer builder_multiplexer; + if (builder) { + builder_multiplexer.addBuilder(builder); + if (frame.view_embedder()) { + for (auto* view_builder : frame.view_embedder()->GetCurrentBuilders()) { + builder_multiplexer.addBuilder(view_builder); + } + } + } // clear the previous snapshots. LayerSnapshotStore* snapshot_store = nullptr; @@ -146,7 +156,8 @@ void LayerTree::Paint(CompositorContext::ScopedFrame& frame, .layer_snapshot_store = snapshot_store, .enable_leaf_layer_tracing = enable_leaf_layer_tracing_, .inherited_opacity = SK_Scalar1, - .leaf_nodes_builder = frame.display_list_builder(), + .leaf_nodes_builder = builder, + .builder_multiplexer = builder ? &builder_multiplexer : nullptr, // clang-format on }; @@ -191,6 +202,8 @@ sk_sp LayerTree::Flatten(const SkRect& bounds) { SkISize canvas_size = builder.getBaseLayerSize(); SkNWayCanvas internal_nodes_canvas(canvas_size.width(), canvas_size.height()); internal_nodes_canvas.addCanvas(&builder); + DisplayListBuilderMultiplexer multiplexer; + multiplexer.addBuilder(builder.builder().get()); PaintContext paint_context = { // clang-format off @@ -208,6 +221,7 @@ sk_sp LayerTree::Flatten(const SkRect& bounds) { .layer_snapshot_store = nullptr, .enable_leaf_layer_tracing = false, .leaf_nodes_builder = builder.builder().get(), + .builder_multiplexer = &multiplexer, // clang-format on }; diff --git a/flow/layers/layer_tree_unittests.cc b/flow/layers/layer_tree_unittests.cc index c39867508c002..9eeac5a1f77cd 100644 --- a/flow/layers/layer_tree_unittests.cc +++ b/flow/layers/layer_tree_unittests.cc @@ -256,6 +256,7 @@ TEST_F(LayerTreeTest, PaintContextInitialization) { EXPECT_EQ(context.inherited_opacity, SK_Scalar1); EXPECT_EQ(context.leaf_nodes_builder, nullptr); + EXPECT_EQ(context.builder_multiplexer, nullptr); }; // These 4 initializers are required because they are handled by reference diff --git a/flow/testing/layer_test.h b/flow/testing/layer_test.h index 317c7109dc8dc..60b4536056ab6 100644 --- a/flow/testing/layer_test.h +++ b/flow/testing/layer_test.h @@ -12,6 +12,7 @@ #include #include +#include "flutter/display_list/display_list_builder_multiplexer.h" #include "flutter/flow/testing/mock_raster_cache.h" #include "flutter/fml/macros.h" #include "flutter/testing/canvas_test.h" @@ -92,6 +93,7 @@ class LayerTestBase : public CanvasTestBase { .checkerboard_offscreen_layers = false, .frame_device_pixel_ratio = 1.0f, .leaf_nodes_builder = display_list_recorder_.builder().get(), + .builder_multiplexer = &display_list_multiplexer_, // clang-format on }, check_board_context_{ @@ -109,6 +111,8 @@ class LayerTestBase : public CanvasTestBase { // clang-format on } { internal_display_list_canvas_.addCanvas(&display_list_recorder_); + display_list_multiplexer_.addBuilder( + display_list_recorder_.builder().get()); use_null_raster_cache(); } @@ -183,6 +187,7 @@ class LayerTestBase : public CanvasTestBase { display_list_paint_context_.leaf_nodes_canvas = nullptr; display_list_paint_context_.internal_nodes_canvas = nullptr; display_list_paint_context_.leaf_nodes_builder = nullptr; + display_list_paint_context_.builder_multiplexer = nullptr; } return display_list_; } @@ -214,6 +219,7 @@ class LayerTestBase : public CanvasTestBase { PrerollContext preroll_context_; PaintContext paint_context_; DisplayListCanvasRecorder display_list_recorder_; + DisplayListBuilderMultiplexer display_list_multiplexer_; sk_sp display_list_; SkNWayCanvas internal_display_list_canvas_; PaintContext display_list_paint_context_; diff --git a/flow/testing/mock_embedder.cc b/flow/testing/mock_embedder.cc index 6c3c7bf0a59a7..8004308d796c2 100644 --- a/flow/testing/mock_embedder.cc +++ b/flow/testing/mock_embedder.cc @@ -36,6 +36,11 @@ std::vector MockViewEmbedder::GetCurrentCanvases() { return std::vector({}); } +// |ExternalViewEmbedder| +std::vector MockViewEmbedder::GetCurrentBuilders() { + return std::vector({}); +} + // |ExternalViewEmbedder| EmbedderPaintContext MockViewEmbedder::CompositeEmbeddedView(int view_id) { return {nullptr, nullptr}; diff --git a/flow/testing/mock_embedder.h b/flow/testing/mock_embedder.h index ea6a1e09c771d..abc57d3d28530 100644 --- a/flow/testing/mock_embedder.h +++ b/flow/testing/mock_embedder.h @@ -37,6 +37,9 @@ class MockViewEmbedder : public ExternalViewEmbedder { // |ExternalViewEmbedder| std::vector GetCurrentCanvases() override; + // |ExternalViewEmbedder| + std::vector GetCurrentBuilders() override; + // |ExternalViewEmbedder| EmbedderPaintContext CompositeEmbeddedView(int view_id) override; }; diff --git a/shell/common/rasterizer_unittests.cc b/shell/common/rasterizer_unittests.cc index 35693c8de848c..45232840bf2b1 100644 --- a/shell/common/rasterizer_unittests.cc +++ b/shell/common/rasterizer_unittests.cc @@ -66,6 +66,7 @@ class MockExternalViewEmbedder : public ExternalViewEmbedder { PostPrerollResult( fml::RefPtr raster_thread_merger)); MOCK_METHOD0(GetCurrentCanvases, std::vector()); + MOCK_METHOD0(GetCurrentBuilders, std::vector()); MOCK_METHOD1(CompositeEmbeddedView, EmbedderPaintContext(int view_id)); MOCK_METHOD2(SubmitFrame, void(GrDirectContext* context, diff --git a/shell/common/shell_test_external_view_embedder.cc b/shell/common/shell_test_external_view_embedder.cc index 14482ba260c6b..579f682089517 100644 --- a/shell/common/shell_test_external_view_embedder.cc +++ b/shell/common/shell_test_external_view_embedder.cc @@ -72,6 +72,12 @@ std::vector ShellTestExternalViewEmbedder::GetCurrentCanvases() { return {}; } +// |ExternalViewEmbedder| +std::vector +ShellTestExternalViewEmbedder::GetCurrentBuilders() { + return {}; +} + // |ExternalViewEmbedder| void ShellTestExternalViewEmbedder::PushVisitedPlatformView(int64_t view_id) { visited_platform_views_.push_back(view_id); diff --git a/shell/common/shell_test_external_view_embedder.h b/shell/common/shell_test_external_view_embedder.h index 86c051e5c5963..583a09182e5fc 100644 --- a/shell/common/shell_test_external_view_embedder.h +++ b/shell/common/shell_test_external_view_embedder.h @@ -65,6 +65,9 @@ class ShellTestExternalViewEmbedder final : public ExternalViewEmbedder { // |ExternalViewEmbedder| std::vector GetCurrentCanvases() override; + // |ExternalViewEmbedder| + std::vector GetCurrentBuilders() override; + // |ExternalViewEmbedder| EmbedderPaintContext CompositeEmbeddedView(int view_id) override; 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 8bbb1682b2ba6..3545cb1453dce 100644 --- a/shell/platform/android/external_view_embedder/external_view_embedder.cc +++ b/shell/platform/android/external_view_embedder/external_view_embedder.cc @@ -69,6 +69,19 @@ std::vector AndroidExternalViewEmbedder::GetCurrentCanvases() { return canvases; } +// |ExternalViewEmbedder| +std::vector +AndroidExternalViewEmbedder::GetCurrentBuilders() { + std::vector builders; + for (size_t i = 0; i < composition_order_.size(); i++) { + int64_t view_id = composition_order_[i]; + if (slices_.count(view_id) == 1) { + builders.push_back(slices_.at(view_id)->builder()); + } + } + return builders; +} + SkRect AndroidExternalViewEmbedder::GetViewRect(int view_id) const { const EmbeddedViewParams& params = view_params_.at(view_id); // TODO(egarciad): The rect should be computed from the mutator stack. 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 aa6e0729b22b6..5bae7a4e1c9e7 100644 --- a/shell/platform/android/external_view_embedder/external_view_embedder.h +++ b/shell/platform/android/external_view_embedder/external_view_embedder.h @@ -47,6 +47,12 @@ class AndroidExternalViewEmbedder final : public ExternalViewEmbedder { // |ExternalViewEmbedder| std::vector GetCurrentCanvases() override; + // |ExternalViewEmbedder| + // Similar call to GetCurrentCanvases but will return the array of + // builders being used by PlatformViews on platforms that provide + // optional DisplayListBuilder objects for rendering. + std::vector GetCurrentBuilders() override; + // |ExternalViewEmbedder| void SubmitFrame(GrDirectContext* context, std::unique_ptr frame) override; 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 df21dae22820b..3005024bb9fe3 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 @@ -124,6 +124,9 @@ TEST(AndroidExternalViewEmbedder, GetCurrentCanvases) { ASSERT_EQ(2UL, canvases.size()); ASSERT_EQ(SkISize::Make(10, 20), canvases[0]->getBaseLayerSize()); ASSERT_EQ(SkISize::Make(10, 20), canvases[1]->getBaseLayerSize()); + + auto builders = embedder->GetCurrentBuilders(); + ASSERT_EQ(2UL, builders.size()); } TEST(AndroidExternalViewEmbedder, GetCurrentCanvasesCompositeOrder) { @@ -149,6 +152,9 @@ TEST(AndroidExternalViewEmbedder, GetCurrentCanvasesCompositeOrder) { ASSERT_EQ(2UL, canvases.size()); ASSERT_EQ(embedder->CompositeEmbeddedView(0).canvas, canvases[0]); ASSERT_EQ(embedder->CompositeEmbeddedView(1).canvas, canvases[1]); + + auto builders = embedder->GetCurrentBuilders(); + ASSERT_EQ(2UL, builders.size()); } TEST(AndroidExternalViewEmbedder, CompositeEmbeddedView) { @@ -178,6 +184,9 @@ TEST(AndroidExternalViewEmbedder, CancelFrame) { auto canvases = embedder->GetCurrentCanvases(); ASSERT_EQ(0UL, canvases.size()); + + auto builders = embedder->GetCurrentBuilders(); + ASSERT_EQ(0UL, builders.size()); } TEST(AndroidExternalViewEmbedder, RasterizerRunsOnPlatformThread) { diff --git a/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm b/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm index 2406365cc0322..9987fe6dd8265 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm @@ -379,6 +379,15 @@ - (BOOL)flt_hasFirstResponderInViewHierarchySubtree { return canvases; } +std::vector FlutterPlatformViewsController::GetCurrentBuilders() { + std::vector builders; + for (size_t i = 0; i < composition_order_.size(); i++) { + int64_t view_id = composition_order_[i]; + builders.push_back(slices_[view_id]->builder()); + } + return builders; +} + int FlutterPlatformViewsController::CountClips(const MutatorsStack& mutators_stack) { std::vector>::const_reverse_iterator iter = mutators_stack.Bottom(); int clipCount = 0; diff --git a/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm index b91880b3a4d09..cc205e91bd3f6 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm @@ -1076,16 +1076,19 @@ - (void)testFlutterPlatformViewControllerBeginFrameShouldResetCompisitionOrder { flutterPlatformViewsController->PrerollCompositeEmbeddedView(0, std::move(embeddedViewParams1)); flutterPlatformViewsController->CompositeEmbeddedView(0); XCTAssertEqual(flutterPlatformViewsController->GetCurrentCanvases().size(), 1UL); + XCTAssertEqual(flutterPlatformViewsController->GetCurrentBuilders().size(), 1UL); // Second frame, |GetCurrentCanvases| should be empty at the start flutterPlatformViewsController->BeginFrame(SkISize::Make(300, 300)); XCTAssertTrue(flutterPlatformViewsController->GetCurrentCanvases().empty()); + XCTAssertTrue(flutterPlatformViewsController->GetCurrentBuilders().empty()); auto embeddedViewParams2 = std::make_unique(finalMatrix, SkSize::Make(300, 300), stack); flutterPlatformViewsController->PrerollCompositeEmbeddedView(0, std::move(embeddedViewParams2)); flutterPlatformViewsController->CompositeEmbeddedView(0); XCTAssertEqual(flutterPlatformViewsController->GetCurrentCanvases().size(), 1UL); + XCTAssertEqual(flutterPlatformViewsController->GetCurrentBuilders().size(), 1UL); } - (void)testThreadMergeAtEndFrame { diff --git a/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h b/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h index 8d41b7629c8dd..c7877dc7601ed 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h +++ b/shell/platform/darwin/ios/framework/Source/FlutterPlatformViews_Internal.h @@ -165,6 +165,8 @@ class FlutterPlatformViewsController { std::vector GetCurrentCanvases(); + std::vector GetCurrentBuilders(); + EmbedderPaintContext CompositeEmbeddedView(int view_id); // The rect of the platform view at index view_id. This rect has been translated into the diff --git a/shell/platform/darwin/ios/ios_external_view_embedder.h b/shell/platform/darwin/ios/ios_external_view_embedder.h index 296930d745f6e..03cec910bae39 100644 --- a/shell/platform/darwin/ios/ios_external_view_embedder.h +++ b/shell/platform/darwin/ios/ios_external_view_embedder.h @@ -49,6 +49,9 @@ class IOSExternalViewEmbedder : public ExternalViewEmbedder { // |ExternalViewEmbedder| std::vector GetCurrentCanvases() override; + // |ExternalViewEmbedder| + std::vector GetCurrentBuilders() override; + // |ExternalViewEmbedder| EmbedderPaintContext CompositeEmbeddedView(int view_id) override; diff --git a/shell/platform/darwin/ios/ios_external_view_embedder.mm b/shell/platform/darwin/ios/ios_external_view_embedder.mm index 392c3ba8d6105..76995be2c56ad 100644 --- a/shell/platform/darwin/ios/ios_external_view_embedder.mm +++ b/shell/platform/darwin/ios/ios_external_view_embedder.mm @@ -64,6 +64,12 @@ return platform_views_controller_->GetCurrentCanvases(); } +// |ExternalViewEmbedder| +std::vector IOSExternalViewEmbedder::GetCurrentBuilders() { + FML_CHECK(platform_views_controller_); + return platform_views_controller_->GetCurrentBuilders(); +} + // |ExternalViewEmbedder| EmbedderPaintContext IOSExternalViewEmbedder::CompositeEmbeddedView(int view_id) { TRACE_EVENT0("flutter", "IOSExternalViewEmbedder::CompositeEmbeddedView"); diff --git a/shell/platform/embedder/embedder_external_view_embedder.cc b/shell/platform/embedder/embedder_external_view_embedder.cc index 56580e3f5e89d..026d1c5d48dd3 100644 --- a/shell/platform/embedder/embedder_external_view_embedder.cc +++ b/shell/platform/embedder/embedder_external_view_embedder.cc @@ -110,6 +110,12 @@ std::vector EmbedderExternalViewEmbedder::GetCurrentCanvases() { return canvases; } +// |ExternalViewEmbedder| +std::vector +EmbedderExternalViewEmbedder::GetCurrentBuilders() { + return std::vector({}); +} + // |ExternalViewEmbedder| EmbedderPaintContext EmbedderExternalViewEmbedder::CompositeEmbeddedView( int view_id) { diff --git a/shell/platform/embedder/embedder_external_view_embedder.h b/shell/platform/embedder/embedder_external_view_embedder.h index 94bbf6712a46c..7921cb8b78255 100644 --- a/shell/platform/embedder/embedder_external_view_embedder.h +++ b/shell/platform/embedder/embedder_external_view_embedder.h @@ -93,6 +93,9 @@ class EmbedderExternalViewEmbedder final : public ExternalViewEmbedder { // |ExternalViewEmbedder| std::vector GetCurrentCanvases() override; + // |ExternalViewEmbedder| + std::vector GetCurrentBuilders() override; + // |ExternalViewEmbedder| EmbedderPaintContext CompositeEmbeddedView(int view_id) override; diff --git a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc index 7b9ac92512996..54d91c1fe8a8e 100644 --- a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc +++ b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc @@ -56,6 +56,11 @@ std::vector FlatlandExternalViewEmbedder::GetCurrentCanvases() { return canvases; } +std::vector +FlatlandExternalViewEmbedder::GetCurrentBuilders() { + return std::vector(); +} + void FlatlandExternalViewEmbedder::PrerollCompositeEmbeddedView( int view_id, std::unique_ptr params) { diff --git a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h index 1c07f8393aac6..360e068699def 100644 --- a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h +++ b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h @@ -64,6 +64,9 @@ class FlatlandExternalViewEmbedder final // |ExternalViewEmbedder| std::vector GetCurrentCanvases() override; + // |ExternalViewEmbedder| + std::vector GetCurrentBuilders() override; + // |ExternalViewEmbedder| void PrerollCompositeEmbeddedView( int view_id, diff --git a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc index 1501e8fbd8268..1cd292764efa3 100644 --- a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc +++ b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc @@ -164,6 +164,11 @@ std::vector GfxExternalViewEmbedder::GetCurrentCanvases() { return canvases; } +std::vector +GfxExternalViewEmbedder::GetCurrentBuilders() { + return std::vector({}); +} + void GfxExternalViewEmbedder::PrerollCompositeEmbeddedView( int view_id, std::unique_ptr params) { diff --git a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h index 09be1bf769b21..c2e67e34a2845 100644 --- a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h +++ b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h @@ -87,6 +87,9 @@ class GfxExternalViewEmbedder final : public flutter::ExternalViewEmbedder { // |ExternalViewEmbedder| std::vector GetCurrentCanvases() override; + // |ExternalViewEmbedder| + std::vector GetCurrentBuilders() override; + // |ExternalViewEmbedder| void PrerollCompositeEmbeddedView( int view_id, diff --git a/shell/platform/fuchsia/flutter/platform_view_unittest.cc b/shell/platform/fuchsia/flutter/platform_view_unittest.cc index 4f6a9cc2149c4..3d7eb7977f5c0 100644 --- a/shell/platform/fuchsia/flutter/platform_view_unittest.cc +++ b/shell/platform/fuchsia/flutter/platform_view_unittest.cc @@ -48,6 +48,9 @@ class MockExternalViewEmbedder : public flutter::ExternalViewEmbedder { std::vector GetCurrentCanvases() override { return std::vector(); } + std::vector GetCurrentBuilders() override { + return std::vector(); + } void CancelFrame() override {} void BeginFrame( diff --git a/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc b/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc index beaf150684a7e..f2565ac69c9c4 100644 --- a/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc +++ b/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc @@ -47,6 +47,9 @@ class MockExternalViewEmbedder : public flutter::ExternalViewEmbedder { std::vector GetCurrentCanvases() override { return std::vector(); } + std::vector GetCurrentBuilders() override { + return std::vector(); + } void CancelFrame() override {} void BeginFrame( diff --git a/shell/testing/tester_main.cc b/shell/testing/tester_main.cc index ecab46ac1a7f1..c1eab867f6a1c 100644 --- a/shell/testing/tester_main.cc +++ b/shell/testing/tester_main.cc @@ -59,6 +59,9 @@ class TesterExternalViewEmbedder : public ExternalViewEmbedder { // |ExternalViewEmbedder| std::vector GetCurrentCanvases() override { return {&canvas_}; } + // |ExternalViewEmbedder| + std::vector GetCurrentBuilders() override { return {}; } + // |ExternalViewEmbedder| EmbedderPaintContext CompositeEmbeddedView(int view_id) override { return {&canvas_, nullptr};