Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make EmbedderExternalViewEmbedder present to the correct view #51719

Merged
merged 4 commits into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions flow/embedded_views.cc
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ bool DisplayListEmbedderViewSlice::recording_ended() {
}

void ExternalViewEmbedder::SubmitFlutterView(
int64_t flutter_view_id,
GrDirectContext* context,
const std::shared_ptr<impeller::AiksContext>& aiks_context,
std::unique_ptr<SurfaceFrame> frame) {
Expand Down
7 changes: 5 additions & 2 deletions flow/embedded_views.h
Original file line number Diff line number Diff line change
Expand Up @@ -435,16 +435,19 @@ class ExternalViewEmbedder {
virtual DlCanvas* CompositeEmbeddedView(int64_t platform_view_id) = 0;

// Prepare for a view to be drawn.
virtual void PrepareFlutterView(int64_t flutter_view_id,
SkISize frame_size,
virtual void PrepareFlutterView(SkISize frame_size,
double device_pixel_ratio) = 0;

// Submits the content stored since |PrepareFlutterView| to the specified
// Flutter view.
//
// Implementers must submit the frame by calling frame.Submit().
//
// This method can mutate the root Skia canvas before submitting the frame.
//
// It can also allocate frames for overlay surfaces to compose hybrid views.
virtual void SubmitFlutterView(
int64_t flutter_view_id,
GrDirectContext* context,
const std::shared_ptr<impeller::AiksContext>& aiks_context,
std::unique_ptr<SurfaceFrame> frame);
Expand Down
3 changes: 1 addition & 2 deletions flow/testing/mock_embedder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ void MockViewEmbedder::BeginFrame(
const fml::RefPtr<fml::RasterThreadMerger>& raster_thread_merger) {}

// |ExternalViewEmbedder|
void MockViewEmbedder::PrepareFlutterView(int64_t flutter_view_id,
SkISize frame_size,
void MockViewEmbedder::PrepareFlutterView(SkISize frame_size,
double device_pixel_ratio) {}

// |ExternalViewEmbedder|
Expand Down
3 changes: 1 addition & 2 deletions flow/testing/mock_embedder.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ class MockViewEmbedder : public ExternalViewEmbedder {
raster_thread_merger) override;

// |ExternalViewEmbedder|
void PrepareFlutterView(int64_t flutter_view_id,
SkISize frame_size,
void PrepareFlutterView(SkISize frame_size,
double device_pixel_ratio) override;

// |ExternalViewEmbedder|
Expand Down
7 changes: 4 additions & 3 deletions shell/common/rasterizer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -663,8 +663,8 @@ DrawSurfaceStatus Rasterizer::DrawToSurfaceUnsafe(

DlCanvas* embedder_root_canvas = nullptr;
if (external_view_embedder_) {
external_view_embedder_->PrepareFlutterView(
view_id, layer_tree.frame_size(), device_pixel_ratio);
external_view_embedder_->PrepareFlutterView(layer_tree.frame_size(),
device_pixel_ratio);
// TODO(dkwingsmt): Add view ID here.
embedder_root_canvas = external_view_embedder_->GetRootCanvas();
}
Expand Down Expand Up @@ -752,7 +752,8 @@ DrawSurfaceStatus Rasterizer::DrawToSurfaceUnsafe(
(!raster_thread_merger_ || raster_thread_merger_->IsMerged())) {
FML_DCHECK(!frame->IsSubmitted());
external_view_embedder_->SubmitFlutterView(
surface_->GetContext(), surface_->GetAiksContext(), std::move(frame));
view_id, surface_->GetContext(), surface_->GetAiksContext(),
std::move(frame));
} else {
frame->Submit();
}
Expand Down
73 changes: 39 additions & 34 deletions shell/common/rasterizer_unittests.cc
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,7 @@ class MockExternalViewEmbedder : public ExternalViewEmbedder {
(override));
MOCK_METHOD(void,
PrepareFlutterView,
(int64_t flutter_view_id,
SkISize frame_size,
double device_pixel_ratio),
(SkISize frame_size, double device_pixel_ratio),
(override));
MOCK_METHOD(void,
PrerollCompositeEmbeddedView,
Expand All @@ -113,7 +111,8 @@ class MockExternalViewEmbedder : public ExternalViewEmbedder {
MOCK_METHOD(DlCanvas*, CompositeEmbeddedView, (int64_t view_id), (override));
MOCK_METHOD(void,
SubmitFlutterView,
(GrDirectContext * context,
(int64_t flutter_view_id,
GrDirectContext* context,
const std::shared_ptr<impeller::AiksContext>& aiks_context,
std::unique_ptr<SurfaceFrame> frame),
(override));
Expand Down Expand Up @@ -223,12 +222,13 @@ TEST(RasterizerTest,
/*raster_thread_merger=*/
fml::RefPtr<fml::RasterThreadMerger>(nullptr)))
.Times(1);
EXPECT_CALL(*external_view_embedder, PrepareFlutterView(
/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
.Times(1);
EXPECT_CALL(*external_view_embedder,
PrepareFlutterView(/*flutter_view_id=*/kImplicitViewId,
/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
SubmitFlutterView(/*flutter_view_id=*/kImplicitViewId, _, _, _))
.Times(1);
EXPECT_CALL(*external_view_embedder, SubmitFlutterView).Times(1);
EXPECT_CALL(
*external_view_embedder,
EndFrame(/*should_resubmit_frame=*/false,
Expand Down Expand Up @@ -299,12 +299,13 @@ TEST(
EXPECT_CALL(*external_view_embedder, BeginFrame(/*context=*/nullptr,
/*raster_thread_merger=*/_))
.Times(1);
EXPECT_CALL(*external_view_embedder,
PrepareFlutterView(/*flutter_view_id=*/kImplicitViewId,
/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
EXPECT_CALL(*external_view_embedder, PrepareFlutterView(
/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
.Times(1);
EXPECT_CALL(*external_view_embedder, SubmitFlutterView).Times(0);
EXPECT_CALL(*external_view_embedder,
SubmitFlutterView(/*flutter_view_id=*/kImplicitViewId, _, _, _))
.Times(0);
EXPECT_CALL(*external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
/*raster_thread_merger=*/_))
.Times(1);
Expand Down Expand Up @@ -378,12 +379,13 @@ TEST(
EXPECT_CALL(*external_view_embedder, BeginFrame(/*context=*/nullptr,
/*raster_thread_merger=*/_))
.Times(1);
EXPECT_CALL(*external_view_embedder, PrepareFlutterView(
/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
.Times(1);
EXPECT_CALL(*external_view_embedder,
PrepareFlutterView(/*flutter_view_id=*/kImplicitViewId,
/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
SubmitFlutterView(/*flutter_view_id=*/kImplicitViewId, _, _, _))
.Times(1);
EXPECT_CALL(*external_view_embedder, SubmitFlutterView).Times(1);
EXPECT_CALL(*external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
/*raster_thread_merger=*/_))
.Times(1);
Expand Down Expand Up @@ -460,12 +462,13 @@ TEST(RasterizerTest,
EXPECT_CALL(*external_view_embedder, BeginFrame(/*context=*/nullptr,
/*raster_thread_merger=*/_))
.Times(2);
EXPECT_CALL(*external_view_embedder, PrepareFlutterView(
/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
.Times(2);
EXPECT_CALL(*external_view_embedder,
PrepareFlutterView(/*flutter_view_id=*/kImplicitViewId,
/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
SubmitFlutterView(/*flutter_view_id=*/kImplicitViewId, _, _, _))
.Times(2);
EXPECT_CALL(*external_view_embedder, SubmitFlutterView).Times(2);
EXPECT_CALL(*external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
/*raster_thread_merger=*/_))
.Times(2);
Expand Down Expand Up @@ -575,10 +578,9 @@ TEST(RasterizerTest, externalViewEmbedderDoesntEndFrameWhenNotUsedThisFrame) {
EXPECT_CALL(*external_view_embedder, BeginFrame(/*context=*/nullptr,
/*raster_thread_merger=*/_))
.Times(0);
EXPECT_CALL(*external_view_embedder,
PrepareFlutterView(/*flutter_view_id=*/kImplicitViewId,
/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
EXPECT_CALL(*external_view_embedder, PrepareFlutterView(
/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
.Times(0);
EXPECT_CALL(
*external_view_embedder,
Expand Down Expand Up @@ -696,17 +698,20 @@ TEST(RasterizerTest, drawMultipleViewsWithExternalViewEmbedder) {
EXPECT_CALL(*external_view_embedder, BeginFrame(/*context=*/nullptr,
/*raster_thread_merger=*/_))
.Times(1);
EXPECT_CALL(
*external_view_embedder,
PrepareFlutterView(/*flutter_view_id=*/0, /*frame_size=*/SkISize(),
/*device_pixel_ratio=*/1.5))
EXPECT_CALL(*external_view_embedder,
PrepareFlutterView(/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/1.5))
.Times(1);
EXPECT_CALL(
*external_view_embedder,
PrepareFlutterView(/*flutter_view_id=*/1, /*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
EXPECT_CALL(*external_view_embedder,
SubmitFlutterView(/*flutter_view_id=*/0, _, _, _))
.Times(1);
EXPECT_CALL(*external_view_embedder,
PrepareFlutterView(/*frame_size=*/SkISize(),
/*device_pixel_ratio=*/2.0))
.Times(1);
EXPECT_CALL(*external_view_embedder,
SubmitFlutterView(/*flutter_view_id=*/1, _, _, _))
.Times(1);
EXPECT_CALL(*external_view_embedder, SubmitFlutterView).Times(2);
EXPECT_CALL(*external_view_embedder, EndFrame(/*should_resubmit_frame=*/false,
/*raster_thread_merger=*/_))
.Times(1);
Expand Down
2 changes: 1 addition & 1 deletion shell/common/shell_test_external_view_embedder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ void ShellTestExternalViewEmbedder::BeginFrame(

// |ExternalViewEmbedder|
void ShellTestExternalViewEmbedder::PrepareFlutterView(
int64_t flutter_view_id,
SkISize frame_size,
double device_pixel_ratio) {
visited_platform_views_.clear();
Expand Down Expand Up @@ -94,6 +93,7 @@ DlCanvas* ShellTestExternalViewEmbedder::CompositeEmbeddedView(

// |ExternalViewEmbedder|
void ShellTestExternalViewEmbedder::SubmitFlutterView(
int64_t flutter_view_id,
GrDirectContext* context,
const std::shared_ptr<impeller::AiksContext>& aiks_context,
std::unique_ptr<SurfaceFrame> frame) {
Expand Down
4 changes: 2 additions & 2 deletions shell/common/shell_test_external_view_embedder.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,7 @@ class ShellTestExternalViewEmbedder final : public ExternalViewEmbedder {
raster_thread_merger) override;

// |ExternalViewEmbedder|
void PrepareFlutterView(int64_t flutter_view_id,
SkISize frame_size,
void PrepareFlutterView(SkISize frame_size,
double device_pixel_ratio) override;

// |ExternalViewEmbedder|
Expand All @@ -78,6 +77,7 @@ class ShellTestExternalViewEmbedder final : public ExternalViewEmbedder {

// |ExternalViewEmbedder|
void SubmitFlutterView(
int64_t flutter_view_id,
GrDirectContext* context,
const std::shared_ptr<impeller::AiksContext>& aiks_context,
std::unique_ptr<SurfaceFrame> frame) override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,14 @@ SkRect AndroidExternalViewEmbedder::GetViewRect(int64_t view_id) const {

// |ExternalViewEmbedder|
void AndroidExternalViewEmbedder::SubmitFlutterView(
int64_t flutter_view_id,
GrDirectContext* context,
const std::shared_ptr<impeller::AiksContext>& aiks_context,
std::unique_ptr<SurfaceFrame> frame) {
TRACE_EVENT0("flutter", "AndroidExternalViewEmbedder::SubmitFlutterView");
// TODO(dkwingsmt): This class only supports rendering into the implicit view.
// Properly support multi-view in the future.
FML_DCHECK(flutter_view_id == kFlutterImplicitViewId);

if (!FrameHasPlatformLayers()) {
frame->Submit();
Expand Down Expand Up @@ -268,12 +272,8 @@ void AndroidExternalViewEmbedder::BeginFrame(

// |ExternalViewEmbedder|
void AndroidExternalViewEmbedder::PrepareFlutterView(
int64_t flutter_view_id,
SkISize frame_size,
double device_pixel_ratio) {
// TODO(dkwingsmt): This class only supports rendering into the implicit view.
// Properly support multi-view in the future.
FML_DCHECK(flutter_view_id == kFlutterImplicitViewId);
Reset();

// The surface size changed. Therefore, destroy existing surfaces as
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class AndroidExternalViewEmbedder final : public ExternalViewEmbedder {

// |ExternalViewEmbedder|
void SubmitFlutterView(
int64_t flutter_view_id,
GrDirectContext* context,
const std::shared_ptr<impeller::AiksContext>& aiks_context,
std::unique_ptr<SurfaceFrame> frame) override;
Expand All @@ -62,8 +63,7 @@ class AndroidExternalViewEmbedder final : public ExternalViewEmbedder {
raster_thread_merger) override;

// |ExternalViewEmbedder|
void PrepareFlutterView(int64_t flutter_view_id,
SkISize frame_size,
void PrepareFlutterView(SkISize frame_size,
double device_pixel_ratio) override;

// |ExternalViewEmbedder|
Expand Down
Loading