Remove final usage of asSkCanvas
Bug: 137581257
Test: builds
Change-Id: Ib38f85c11be332e6cd784f8bbf55f58cde72ac09
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 6ea6af8..f01b1bf 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -778,6 +778,13 @@
mCanvas->drawDrawable(drawable.get());
}
+void SkiaCanvas::drawPicture(const SkPicture& picture) {
+ // TODO: Change to mCanvas->drawPicture()? SkCanvas::drawPicture seems to be
+ // where the logic is for playback vs. ref picture. Using picture.playback here
+ // to stay behavior-identical for now, but should revisit this at some point.
+ picture.playback(mCanvas);
+}
+
// ----------------------------------------------------------------------------
// Canvas draw operations: View System
// ----------------------------------------------------------------------------
diff --git a/libs/hwui/SkiaCanvas.h b/libs/hwui/SkiaCanvas.h
index 05a6d0d..799a891 100644
--- a/libs/hwui/SkiaCanvas.h
+++ b/libs/hwui/SkiaCanvas.h
@@ -46,8 +46,6 @@
virtual ~SkiaCanvas();
- virtual SkCanvas* asSkCanvas() override { return mCanvas; }
-
virtual void resetRecording(int width, int height,
uirenderer::RenderNode* renderNode) override {
LOG_ALWAYS_FATAL("SkiaCanvas cannot be reset as a recording canvas");
@@ -155,9 +153,11 @@
virtual void drawRenderNode(uirenderer::RenderNode* renderNode) override;
virtual void callDrawGLFunction(Functor* functor,
uirenderer::GlFunctorLifecycleListener* listener) override;
+ virtual void drawPicture(const SkPicture& picture) override;
protected:
SkiaCanvas();
+ SkCanvas* asSkCanvas() { return mCanvas; }
void reset(SkCanvas* skiaCanvas);
void drawDrawable(SkDrawable* drawable) { mCanvas->drawDrawable(drawable); }
diff --git a/libs/hwui/hwui/Canvas.h b/libs/hwui/hwui/Canvas.h
index ac8db21..ee4fa1d6 100644
--- a/libs/hwui/hwui/Canvas.h
+++ b/libs/hwui/hwui/Canvas.h
@@ -131,20 +131,6 @@
*/
static void setCompatibilityVersion(int apiLevel);
- /**
- * Provides a Skia SkCanvas interface that acts as a proxy to this Canvas.
- * It is useful for testing and clients (e.g. Picture/Movie) that expect to
- * draw their contents into an SkCanvas.
- *
- * The SkCanvas returned is *only* valid until another Canvas call is made
- * that would change state (e.g. matrix or clip). Clients of asSkCanvas()
- * are responsible for *not* persisting this pointer.
- *
- * Further, the returned SkCanvas should NOT be unref'd and is valid until
- * this canvas is destroyed or a new bitmap is set.
- */
- virtual SkCanvas* asSkCanvas() = 0;
-
virtual void setBitmap(const SkBitmap& bitmap) = 0;
virtual bool isOpaque() = 0;
@@ -264,6 +250,7 @@
const SkPaint* paint) = 0;
virtual double drawAnimatedImage(AnimatedImageDrawable* imgDrawable) = 0;
+ virtual void drawPicture(const SkPicture& picture) = 0;
/**
* Specifies if the positions passed to ::drawText are absolute or relative
diff --git a/libs/hwui/tests/unit/SkiaCanvasTests.cpp b/libs/hwui/tests/unit/SkiaCanvasTests.cpp
index f6178af..2ed1b25 100644
--- a/libs/hwui/tests/unit/SkiaCanvasTests.cpp
+++ b/libs/hwui/tests/unit/SkiaCanvasTests.cpp
@@ -78,7 +78,7 @@
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
// Playback to a software sRGB canvas. The result should be fully red.
- canvas.asSkCanvas()->drawPicture(picture);
+ canvas.drawPicture(*picture);
ASSERT_EQ(0xFF0000FF, *skBitmap.getAddr32(0, 0));
}