Reduce usage of SkCanvas::flush
SkCanvas::flush is problematic and we wish to deprecate it. As a first step, this CL begins to remove Skia's internal usage of it.
Ideally clients would use SkSurface::flush and/or GrContext::flush.
Change-Id: I39bb0702f8230134a97961a4ee70833fd5bd0dcc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/196641
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 7dd4465..d771074 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -1146,15 +1146,16 @@
Viewer::SkFontFields* fFontOverrides;
};
-void Viewer::drawSlide(SkCanvas* canvas) {
+void Viewer::drawSlide(SkSurface* surface) {
if (fCurrentSlide < 0) {
return;
}
- SkAutoCanvasRestore autorestore(canvas, false);
+ SkAutoCanvasRestore autorestore(surface->getCanvas(), false);
// By default, we render directly into the window's surface/canvas
- SkCanvas* slideCanvas = canvas;
+ SkSurface* slideSurface = surface;
+ SkCanvas* slideCanvas = surface->getCanvas();
fLastImage.reset();
// If we're in any of the color managed modes, construct the color space we're going to use
@@ -1179,14 +1180,15 @@
// Grab some things we'll need to make surfaces (for tiling or general offscreen rendering)
SkColorType colorType = (ColorMode::kColorManagedF16 == fColorMode) ? kRGBA_F16_SkColorType
: kN32_SkColorType;
- SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType);
- canvas->getProps(&props);
auto make_surface = [=](int w, int h) {
+ SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType);
+ slideCanvas->getProps(&props);
+
SkImageInfo info = SkImageInfo::Make(w, h, colorType, kPremul_SkAlphaType, colorSpace);
return Window::kRaster_BackendType == this->fBackendType
? SkSurface::MakeRaster(info, &props)
- : canvas->makeSurface(info, &props);
+ : slideCanvas->makeSurface(info, &props);
};
// We need to render offscreen if we're...
@@ -1200,6 +1202,7 @@
colorSpace != nullptr) {
offscreenSurface = make_surface(fWindow->width(), fWindow->height());
+ slideSurface = offscreenSurface.get();
slideCanvas = offscreenSurface->getCanvas();
}
@@ -1250,13 +1253,14 @@
// Force a flush so we can time that, too
fStatsLayer.beginTiming(fFlushTimer);
- slideCanvas->flush();
+ slideSurface->flush();
fStatsLayer.endTiming(fFlushTimer);
// If we rendered offscreen, snap an image and push the results to the window's canvas
if (offscreenSurface) {
fLastImage = offscreenSurface->makeImageSnapshot();
+ SkCanvas* canvas = surface->getCanvas();
SkPaint paint;
paint.setBlendMode(SkBlendMode::kSrc);
int prePerspectiveCount = canvas->save();
@@ -1275,10 +1279,10 @@
fWindow->show();
}
-void Viewer::onPaint(SkCanvas* canvas) {
- this->drawSlide(canvas);
+void Viewer::onPaint(SkSurface* surface) {
+ this->drawSlide(surface);
- fCommands.drawHelp(canvas);
+ fCommands.drawHelp(surface->getCanvas());
this->drawImGui();