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

Commit fce69d0

Browse files
committed
Impl
Format view -> surface
1 parent 118fcdd commit fce69d0

28 files changed

+104
-67
lines changed

flow/embedded_views.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ void DisplayListEmbedderViewSlice::render_into(DisplayListBuilder* builder) {
7070
}
7171

7272
void ExternalViewEmbedder::SubmitFrame(GrDirectContext* context,
73+
uint64_t frame_view_id,
7374
std::unique_ptr<SurfaceFrame> frame) {
7475
frame->Submit();
7576
};

flow/embedded_views.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,7 @@ class ExternalViewEmbedder {
405405
//
406406
// It can also allocate frames for overlay surfaces to compose hybrid views.
407407
virtual void SubmitFrame(GrDirectContext* context,
408+
uint64_t frame_view_id,
408409
std::unique_ptr<SurfaceFrame> frame);
409410

410411
// This method provides the embedder a way to do additional tasks after

shell/common/rasterizer.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,9 @@ RasterStatus Rasterizer::DrawToSurface(
488488
RasterStatus Rasterizer::DrawToSurfaceUnsafe(
489489
FrameTimingsRecorder& frame_timings_recorder,
490490
flutter::LayerTree& layer_tree) {
491+
// Always gets the first surface, #0. After Flutter supports multi-view, it
492+
// should get the surface ID from layer_tree.
493+
uint64_t surface_id = 0;
491494
FML_DCHECK(surface_);
492495

493496
compositor_context_->ui_time().SetLapTime(
@@ -594,7 +597,7 @@ RasterStatus Rasterizer::DrawToSurfaceUnsafe(
594597
if (external_view_embedder_ &&
595598
(!raster_thread_merger_ || raster_thread_merger_->IsMerged())) {
596599
FML_DCHECK(!frame->IsSubmitted());
597-
external_view_embedder_->SubmitFrame(surface_->GetContext(),
600+
external_view_embedder_->SubmitFrame(surface_->GetContext(), surface_id,
598601
std::move(frame));
599602
} else {
600603
frame->Submit();

shell/common/rasterizer_unittests.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,9 @@ class MockExternalViewEmbedder : public ExternalViewEmbedder {
6969
MOCK_METHOD0(GetCurrentCanvases, std::vector<SkCanvas*>());
7070
MOCK_METHOD0(GetCurrentBuilders, std::vector<DisplayListBuilder*>());
7171
MOCK_METHOD1(CompositeEmbeddedView, EmbedderPaintContext(int view_id));
72-
MOCK_METHOD2(SubmitFrame,
72+
MOCK_METHOD3(SubmitFrame,
7373
void(GrDirectContext* context,
74+
uint64_t frame_view_id,
7475
std::unique_ptr<SurfaceFrame> frame));
7576
MOCK_METHOD2(EndFrame,
7677
void(bool should_resubmit_frame,

shell/common/shell_test_external_view_embedder.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ EmbedderPaintContext ShellTestExternalViewEmbedder::CompositeEmbeddedView(
106106
// |ExternalViewEmbedder|
107107
void ShellTestExternalViewEmbedder::SubmitFrame(
108108
GrDirectContext* context,
109+
uint64_t frame_view_id,
109110
std::unique_ptr<SurfaceFrame> frame) {
110111
if (!frame) {
111112
return;

shell/common/shell_test_external_view_embedder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class ShellTestExternalViewEmbedder final : public ExternalViewEmbedder {
8080

8181
// |ExternalViewEmbedder|
8282
void SubmitFrame(GrDirectContext* context,
83+
uint64_t frame_view_id,
8384
std::unique_ptr<SurfaceFrame> frame) override;
8485

8586
// |ExternalViewEmbedder|

shell/platform/android/external_view_embedder/external_view_embedder.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ SkRect AndroidExternalViewEmbedder::GetViewRect(int view_id) const {
9999
// |ExternalViewEmbedder|
100100
void AndroidExternalViewEmbedder::SubmitFrame(
101101
GrDirectContext* context,
102+
uint64_t frame_view_id,
102103
std::unique_ptr<SurfaceFrame> frame) {
103104
TRACE_EVENT0("flutter", "AndroidExternalViewEmbedder::SubmitFrame");
104105

shell/platform/android/external_view_embedder/external_view_embedder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class AndroidExternalViewEmbedder final : public ExternalViewEmbedder {
5555

5656
// |ExternalViewEmbedder|
5757
void SubmitFrame(GrDirectContext* context,
58+
uint64_t frame_view_id,
5859
std::unique_ptr<SurfaceFrame> frame) override;
5960

6061
// |ExternalViewEmbedder|

shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame) {
371371
},
372372
/*frame_size=*/SkISize::Make(800, 600));
373373

374-
embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
374+
embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame));
375375
// Submits frame if no Android view in the current frame.
376376
EXPECT_TRUE(did_submit_frame);
377377
// Doesn't resubmit frame.
@@ -439,7 +439,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame) {
439439
},
440440
/*frame_size=*/SkISize::Make(800, 600));
441441

442-
embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
442+
embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame));
443443
// Doesn't submit frame if there aren't Android views in the previous frame.
444444
EXPECT_FALSE(did_submit_frame);
445445
// Resubmits frame.
@@ -504,7 +504,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame) {
504504
return true;
505505
},
506506
/*frame_size=*/SkISize::Make(800, 600));
507-
embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
507+
embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame));
508508
// Submits frame if there are Android views in the previous frame.
509509
EXPECT_TRUE(did_submit_frame);
510510
// Doesn't resubmit frame.
@@ -614,7 +614,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrameOverlayComposition) {
614614
},
615615
/*frame_size=*/SkISize::Make(800, 600));
616616

617-
embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
617+
embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame));
618618

619619
EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
620620
embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
@@ -683,7 +683,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFramePlatformViewWithoutAnyOverlay) {
683683
},
684684
/*frame_size=*/SkISize::Make(800, 600));
685685

686-
embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
686+
embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame));
687687

688688
EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
689689
embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
@@ -785,7 +785,7 @@ TEST(AndroidExternalViewEmbedder, DestroyOverlayLayersOnSizeChange) {
785785
return true;
786786
},
787787
/*frame_size=*/SkISize::Make(800, 600));
788-
embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
788+
embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame));
789789

790790
EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
791791
embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
@@ -873,7 +873,7 @@ TEST(AndroidExternalViewEmbedder, DoesNotDestroyOverlayLayersOnSizeChange) {
873873
return true;
874874
},
875875
/*frame_size=*/SkISize::Make(800, 600));
876-
embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
876+
embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame));
877877

878878
EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
879879
embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
@@ -985,7 +985,7 @@ TEST(AndroidExternalViewEmbedder, Teardown) {
985985
SkSurface::MakeNull(1000, 1000), framebuffer_info,
986986
[](const SurfaceFrame& surface_frame, SkCanvas* canvas) { return true; },
987987
/*frame_size=*/SkISize::Make(800, 600));
988-
embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
988+
embedder->SubmitFrame(gr_context.get(), 0, std::move(surface_frame));
989989

990990
embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
991991

shell/platform/darwin/macos/framework/Source/FlutterCompositor.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace flutter {
1919
// Platform views are not yet supported.
2020
class FlutterCompositor {
2121
public:
22-
using GetViewCallback = std::function<FlutterView*(uint64_t view_id)>;
22+
using GetViewCallback = std::function<FlutterView*(uint64_t surface_id)>;
2323

2424
explicit FlutterCompositor(GetViewCallback get_view_callback);
2525

@@ -46,7 +46,9 @@ class FlutterCompositor {
4646
// Presents the FlutterLayers by updating FlutterView(s) using the
4747
// layer content.
4848
// Present sets frame_started_ to false.
49-
virtual bool Present(const FlutterLayer** layers, size_t layers_count) = 0;
49+
virtual bool Present(uint64_t surface_id,
50+
const FlutterLayer** layers,
51+
size_t layers_count) = 0;
5052

5153
using PresentCallback = std::function<bool(bool has_flutter_content)>;
5254

@@ -64,7 +66,7 @@ class FlutterCompositor {
6466
typedef enum { kStarted, kPresenting, kEnded } FrameStatus;
6567

6668
protected:
67-
FlutterView* GetView(uint64_t view_id);
69+
FlutterView* GetView(uint64_t surface_id);
6870

6971
// Gets and sets the FrameStatus for the current frame.
7072
void SetFrameStatus(FrameStatus frame_status);

0 commit comments

Comments
 (0)