From b05e6c3e364d91009f92747d14946eb36a59ad04 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Fri, 14 Jul 2023 15:06:11 +0000 Subject: [PATCH] Remove calls to SkCanvas::flush() --- display_list/skia/dl_sk_canvas.cc | 9 ++++++++- display_list/testing/dl_rendering_unittests.cc | 1 - lib/ui/painting/image_encoding_impl.h | 5 ++++- shell/common/rasterizer_unittests.cc | 1 - shell/common/snapshot_controller_skia.cc | 5 ++++- shell/gpu/gpu_surface_gl_skia.cc | 4 ++-- shell/platform/fuchsia/flutter/canvas_spy.cc | 2 -- shell/platform/fuchsia/flutter/canvas_spy.h | 3 --- 8 files changed, 18 insertions(+), 12 deletions(-) diff --git a/display_list/skia/dl_sk_canvas.cc b/display_list/skia/dl_sk_canvas.cc index 7f73e0515cf6e..504954d0265b0 100644 --- a/display_list/skia/dl_sk_canvas.cc +++ b/display_list/skia/dl_sk_canvas.cc @@ -8,6 +8,9 @@ #include "flutter/display_list/skia/dl_sk_dispatcher.h" #include "flutter/fml/trace_event.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" +#include "third_party/skia/include/gpu/GrRecordingContext.h" + namespace flutter { // clang-format off @@ -372,7 +375,11 @@ void DlSkCanvasAdapter::DrawShadow(const SkPath& path, } void DlSkCanvasAdapter::Flush() { - delegate_->flush(); + auto dContext = GrAsDirectContext(delegate_->recordingContext()); + + if (dContext) { + dContext->flushAndSubmit(); + } } } // namespace flutter diff --git a/display_list/testing/dl_rendering_unittests.cc b/display_list/testing/dl_rendering_unittests.cc index 7a1a95816057d..55afd24d806d6 100644 --- a/display_list/testing/dl_rendering_unittests.cc +++ b/display_list/testing/dl_rendering_unittests.cc @@ -492,7 +492,6 @@ class RenderEnvironment { renderer.Render(canvas, info); canvas->restoreToCount(restore_count); - canvas->flush(); if (GrDirectContext* dContext = GrAsDirectContext(surface->recordingContext())) { dContext->flushAndSubmit(surface, /*syncCpu=*/true); diff --git a/lib/ui/painting/image_encoding_impl.h b/lib/ui/painting/image_encoding_impl.h index d7248e87b96d2..595f8276e4c96 100644 --- a/lib/ui/painting/image_encoding_impl.h +++ b/lib/ui/painting/image_encoding_impl.h @@ -9,6 +9,7 @@ #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkImage.h" #include "third_party/skia/include/core/SkSurface.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" #include "third_party/skia/include/gpu/ganesh/SkSurfaceGanesh.h" namespace flutter { @@ -41,7 +42,9 @@ sk_sp ConvertToRasterUsingResourceContext( } surface->getCanvas()->drawImage(image, 0, 0); - surface->getCanvas()->flush(); + if (resource_context) { + resource_context->flushAndSubmit(); + } auto snapshot = surface->makeImageSnapshot(); diff --git a/shell/common/rasterizer_unittests.cc b/shell/common/rasterizer_unittests.cc index daf36364851b1..92d23c82dc915 100644 --- a/shell/common/rasterizer_unittests.cc +++ b/shell/common/rasterizer_unittests.cc @@ -990,7 +990,6 @@ TEST(RasterizerTest, TeardownFreesResourceCache) { SkPaint paint; sk_surface->getCanvas()->drawPaint(paint); - sk_surface->getCanvas()->flush(); context->flushAndSubmit(true); EXPECT_EQ(context->getResourceCachePurgeableBytes(), 0ul); diff --git a/shell/common/snapshot_controller_skia.cc b/shell/common/snapshot_controller_skia.cc index d39a9003050d4..fe7897f38d178 100644 --- a/shell/common/snapshot_controller_skia.cc +++ b/shell/common/snapshot_controller_skia.cc @@ -23,7 +23,10 @@ sk_sp DrawSnapshot( } draw_callback(surface->getCanvas()); - surface->getCanvas()->flush(); + auto dContext = GrAsDirectContext(surface->recordingContext()); + if (dContext) { + dContext->flushAndSubmit(); + } sk_sp device_snapshot; { diff --git a/shell/gpu/gpu_surface_gl_skia.cc b/shell/gpu/gpu_surface_gl_skia.cc index 8285145b4efd3..9ced169f118af 100644 --- a/shell/gpu/gpu_surface_gl_skia.cc +++ b/shell/gpu/gpu_surface_gl_skia.cc @@ -268,8 +268,8 @@ bool GPUSurfaceGLSkia::PresentSurface(const SurfaceFrame& frame, delegate_->GLContextSetDamageRegion(frame.submit_info().buffer_damage); { - TRACE_EVENT0("flutter", "SkCanvas::Flush"); - onscreen_surface_->getCanvas()->flush(); + TRACE_EVENT0("flutter", "GrDirectContext::flushAndSubmit"); + context_->flushAndSubmit(); } GLPresentInfo present_info = { diff --git a/shell/platform/fuchsia/flutter/canvas_spy.cc b/shell/platform/fuchsia/flutter/canvas_spy.cc index fe45a8fdebb50..75df63a9069eb 100644 --- a/shell/platform/fuchsia/flutter/canvas_spy.cc +++ b/shell/platform/fuchsia/flutter/canvas_spy.cc @@ -267,6 +267,4 @@ void DidDrawCanvas::onDrawEdgeAAImageSet2(const ImageSetEntry set[], did_draw_ = true; } -void DidDrawCanvas::onFlush() {} - } // namespace flutter diff --git a/shell/platform/fuchsia/flutter/canvas_spy.h b/shell/platform/fuchsia/flutter/canvas_spy.h index 629538dd83df2..fa781cbcb3861 100644 --- a/shell/platform/fuchsia/flutter/canvas_spy.h +++ b/shell/platform/fuchsia/flutter/canvas_spy.h @@ -248,9 +248,6 @@ class DidDrawCanvas final : public SkCanvasVirtualEnforcer { const SkPaint*, SrcRectConstraint) override; - // |SkCanvasVirtualEnforcer| - void onFlush() override; - void MarkDrawIfNonTransparentPaint(const SkPaint& paint); FML_DISALLOW_COPY_AND_ASSIGN(DidDrawCanvas);