Loading core/jni/android/graphics/Picture.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -100,8 +100,9 @@ void Picture::draw(Canvas* canvas) { this->endRecording(); SkASSERT(NULL != mPicture.get()); } if (NULL != mPicture.get()) { mPicture->playback(canvas->asSkCanvas()); if (mPicture) { canvas->drawPicture(*mPicture); } } Loading libs/hwui/SkiaCanvas.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -778,6 +778,13 @@ void SkiaCanvas::drawCircle(uirenderer::CanvasPropertyPrimitive* x, 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 // ---------------------------------------------------------------------------- Loading libs/hwui/SkiaCanvas.h +2 −2 Original line number Diff line number Diff line Loading @@ -46,8 +46,6 @@ public: 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"); Loading Loading @@ -155,9 +153,11 @@ public: 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); } Loading libs/hwui/hwui/Canvas.h +1 −14 Original line number Diff line number Diff line Loading @@ -131,20 +131,6 @@ public: */ 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; Loading Loading @@ -264,6 +250,7 @@ public: 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 Loading libs/hwui/tests/unit/SkiaCanvasTests.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ TEST(SkiaCanvas, colorSpaceXform) { 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)); } Loading Loading
core/jni/android/graphics/Picture.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -100,8 +100,9 @@ void Picture::draw(Canvas* canvas) { this->endRecording(); SkASSERT(NULL != mPicture.get()); } if (NULL != mPicture.get()) { mPicture->playback(canvas->asSkCanvas()); if (mPicture) { canvas->drawPicture(*mPicture); } } Loading
libs/hwui/SkiaCanvas.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -778,6 +778,13 @@ void SkiaCanvas::drawCircle(uirenderer::CanvasPropertyPrimitive* x, 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 // ---------------------------------------------------------------------------- Loading
libs/hwui/SkiaCanvas.h +2 −2 Original line number Diff line number Diff line Loading @@ -46,8 +46,6 @@ public: 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"); Loading Loading @@ -155,9 +153,11 @@ public: 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); } Loading
libs/hwui/hwui/Canvas.h +1 −14 Original line number Diff line number Diff line Loading @@ -131,20 +131,6 @@ public: */ 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; Loading Loading @@ -264,6 +250,7 @@ public: 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 Loading
libs/hwui/tests/unit/SkiaCanvasTests.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ TEST(SkiaCanvas, colorSpaceXform) { 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)); } Loading