From 6e3d1395cb1a08ca845fd73bf91294145b323e76 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Mon, 24 Jul 2023 17:30:51 +0000 Subject: [PATCH 1/4] Reland "remove more calls to SkCanvas::flush() and SkSurface::flush()" --- display_list/testing/dl_rendering_unittests.cc | 16 ++++++++++------ lib/web_ui/skwasm/surface.cpp | 3 ++- .../flutter/flatland_external_view_embedder.cc | 7 ++++++- .../flutter/gfx_external_view_embedder.cc | 7 ++++++- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/display_list/testing/dl_rendering_unittests.cc b/display_list/testing/dl_rendering_unittests.cc index af6b0cf8682e2..4e1b9752fe85a 100644 --- a/display_list/testing/dl_rendering_unittests.cc +++ b/display_list/testing/dl_rendering_unittests.cc @@ -4141,8 +4141,6 @@ class DisplayListNopTest : public DisplayListCanvas { auto surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(w, h)); SkCanvas* canvas = surface->getCanvas(); renderer(canvas); - canvas->flush(); - surface->flushAndSubmit(true); return std::make_unique(surface, snapshot); } @@ -4258,8 +4256,11 @@ class DisplayListNopTest : public DisplayListCanvas { result_canvas->clear(SK_ColorTRANSPARENT); result_canvas->drawImage(test_image.get(), 0, 0); result_canvas->drawRect(test_bounds, sk_paint); - result_canvas->flush(); - result_surface->sk_surface()->flushAndSubmit(true); + if (GrDirectContext* direct_context = GrAsDirectContext( + result_surface->sk_surface()->recordingContext())) { + return direct_context->flushAndSubmit(result_surface->sk_surface(), + true); + } auto result_pixels = std::make_unique(result_surface->sk_surface()); @@ -4316,8 +4317,11 @@ class DisplayListNopTest : public DisplayListCanvas { result_canvas->drawImage(test_image_dst_data->image(), 0, 0); result_canvas->drawImage(test_image_src_data->image(), 0, 0, SkSamplingOptions(), &sk_paint); - result_canvas->flush(); - result_surface->sk_surface()->flushAndSubmit(true); + if (GrDirectContext* direct_context = GrAsDirectContext( + result_surface->sk_surface()->recordingContext())) { + return direct_context->flushAndSubmit(result_surface->sk_surface(), + true); + } auto result_pixels = std::make_unique(result_surface->sk_surface()); diff --git a/lib/web_ui/skwasm/surface.cpp b/lib/web_ui/skwasm/surface.cpp index 99811dcd406d2..834131f8bce69 100644 --- a/lib/web_ui/skwasm/surface.cpp +++ b/lib/web_ui/skwasm/surface.cpp @@ -5,6 +5,7 @@ #include "surface.h" #include "third_party/skia/include/gpu/GrBackendSurface.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" using namespace Skwasm; @@ -171,7 +172,7 @@ void Surface::_renderPicture(const SkPicture* picture) { makeCurrent(_glContext); auto canvas = _surface->getCanvas(); canvas->drawPicture(picture); - _surface->flush(); + _grContext->flush(_surface); } void Surface::_rasterizeImage(SkImage* image, diff --git a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc index 3823e672b2361..7281d471f09ee 100644 --- a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc +++ b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc @@ -9,6 +9,8 @@ #include "flutter/fml/trace_event.h" #include "third_party/skia/include/core/SkPicture.h" #include "third_party/skia/include/core/SkSurface.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" +#include "third_party/skia/include/gpu/GrRecordingContext.h" namespace flutter_runner { namespace { @@ -487,7 +489,10 @@ void FlatlandExternalViewEmbedder::SubmitFrame( canvas->setMatrix(SkMatrix::I()); canvas->clear(SK_ColorTRANSPARENT); canvas->drawPicture(layer->second.picture); - canvas->flush(); + if (GrDirectContext* direct_context = + GrAsDirectContext(canvas->recordingContext())) { + return direct_context->flushAndSubmit(); + } } } diff --git a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc index 37e8d6a474431..aeba9b76de002 100644 --- a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc +++ b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc @@ -14,6 +14,8 @@ #include "flutter/fml/trace_event.h" #include "third_party/skia/include/core/SkPicture.h" #include "third_party/skia/include/core/SkSurface.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" +#include "third_party/skia/include/gpu/GrRecordingContext.h" namespace flutter_runner { namespace { @@ -617,7 +619,10 @@ void GfxExternalViewEmbedder::SubmitFrame( canvas->setMatrix(SkMatrix::I()); canvas->clear(SK_ColorTRANSPARENT); canvas->drawPicture(layer->second.picture); - canvas->flush(); + if (GrDirectContext* direct_context = + GrAsDirectContext(canvas->recordingContext())) { + return direct_context->flushAndSubmit(); + } } } From f588005c2442ecb1c49d59af9ae15bb72f0dbc78 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Mon, 24 Jul 2023 17:36:37 +0000 Subject: [PATCH 2/4] flush and submit context also --- display_list/testing/dl_rendering_unittests.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/display_list/testing/dl_rendering_unittests.cc b/display_list/testing/dl_rendering_unittests.cc index 4e1b9752fe85a..2f85ec9728c22 100644 --- a/display_list/testing/dl_rendering_unittests.cc +++ b/display_list/testing/dl_rendering_unittests.cc @@ -4258,6 +4258,7 @@ class DisplayListNopTest : public DisplayListCanvas { result_canvas->drawRect(test_bounds, sk_paint); if (GrDirectContext* direct_context = GrAsDirectContext( result_surface->sk_surface()->recordingContext())) { + direct_context->flushAndSubmit(); return direct_context->flushAndSubmit(result_surface->sk_surface(), true); } @@ -4319,6 +4320,7 @@ class DisplayListNopTest : public DisplayListCanvas { SkSamplingOptions(), &sk_paint); if (GrDirectContext* direct_context = GrAsDirectContext( result_surface->sk_surface()->recordingContext())) { + direct_context->flushAndSubmit(); return direct_context->flushAndSubmit(result_surface->sk_surface(), true); } From f35ad3ffe1735a229b122a3db67819313975d202 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Mon, 24 Jul 2023 17:52:50 +0000 Subject: [PATCH 3/4] remove extra returns --- .../platform/fuchsia/flutter/flatland_external_view_embedder.cc | 2 +- shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc index 7281d471f09ee..640dc0728b67f 100644 --- a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc +++ b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc @@ -491,7 +491,7 @@ void FlatlandExternalViewEmbedder::SubmitFrame( canvas->drawPicture(layer->second.picture); if (GrDirectContext* direct_context = GrAsDirectContext(canvas->recordingContext())) { - return direct_context->flushAndSubmit(); + direct_context->flushAndSubmit(); } } } diff --git a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc index aeba9b76de002..e30c8f74041f8 100644 --- a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc +++ b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc @@ -621,7 +621,7 @@ void GfxExternalViewEmbedder::SubmitFrame( canvas->drawPicture(layer->second.picture); if (GrDirectContext* direct_context = GrAsDirectContext(canvas->recordingContext())) { - return direct_context->flushAndSubmit(); + direct_context->flushAndSubmit(); } } } From 981e2cd2d7029b310ba5bc84cec0b72d7d6d94a5 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Mon, 24 Jul 2023 19:32:39 +0000 Subject: [PATCH 4/4] remove more returns --- display_list/testing/dl_rendering_unittests.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/display_list/testing/dl_rendering_unittests.cc b/display_list/testing/dl_rendering_unittests.cc index 2f85ec9728c22..97282a70340cf 100644 --- a/display_list/testing/dl_rendering_unittests.cc +++ b/display_list/testing/dl_rendering_unittests.cc @@ -4259,8 +4259,7 @@ class DisplayListNopTest : public DisplayListCanvas { if (GrDirectContext* direct_context = GrAsDirectContext( result_surface->sk_surface()->recordingContext())) { direct_context->flushAndSubmit(); - return direct_context->flushAndSubmit(result_surface->sk_surface(), - true); + direct_context->flushAndSubmit(result_surface->sk_surface(), true); } auto result_pixels = std::make_unique(result_surface->sk_surface()); @@ -4321,8 +4320,7 @@ class DisplayListNopTest : public DisplayListCanvas { if (GrDirectContext* direct_context = GrAsDirectContext( result_surface->sk_surface()->recordingContext())) { direct_context->flushAndSubmit(); - return direct_context->flushAndSubmit(result_surface->sk_surface(), - true); + direct_context->flushAndSubmit(result_surface->sk_surface(), true); } auto result_pixels = std::make_unique(result_surface->sk_surface());