Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1476ae7 authored by Tom Hudson's avatar Tom Hudson
Browse files

Fix bug, change crashes to warnings

Improve behavior when we get a call to draw 0 points.
Replace one ALWAYS_FATAL statements with noop.

Change-Id: I864b7a9633dfa3dc6eefa403beca4cc7ae14074f
parent 445e1c5d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -216,7 +216,7 @@ public:
    virtual void drawVertices(SkCanvas::VertexMode vertexMode, int vertexCount,
            const float* verts, const float* tex, const int* colors,
            const uint16_t* indices, int indexCount, const SkPaint& paint) override
        { LOG_ALWAYS_FATAL("DisplayListRenderer does not support drawVertices()"); }
        { /* DisplayListRenderer does not support drawVertices(); ignore */ }

    // Bitmap-based
    virtual void drawBitmap(const SkBitmap& bitmap, float left, float top, const SkPaint* paint) override;
+13 −2
Original line number Diff line number Diff line
@@ -22,9 +22,10 @@
namespace android {
namespace uirenderer {

SkiaCanvasProxy::SkiaCanvasProxy(Canvas* canvas)
SkiaCanvasProxy::SkiaCanvasProxy(Canvas* canvas, bool filterHwuiCalls)
        : INHERITED(canvas->width(), canvas->height())
        , mCanvas(canvas) {}
        , mCanvas(canvas)
        , mFilterHwuiCalls(filterHwuiCalls) {}

void SkiaCanvasProxy::onDrawPaint(const SkPaint& paint) {
    mCanvas->drawPaint(paint);
@@ -32,6 +33,10 @@ void SkiaCanvasProxy::onDrawPaint(const SkPaint& paint) {

void SkiaCanvasProxy::onDrawPoints(PointMode pointMode, size_t count, const SkPoint pts[],
        const SkPaint& paint) {
    if (!pts || count == 0) {
        return;
    }

    // convert the SkPoints into floats
    SK_COMPILE_ASSERT(sizeof(SkPoint) == sizeof(float)*2, SkPoint_is_no_longer_2_floats);
    const size_t floatCount = count << 1;
@@ -118,6 +123,9 @@ void SkiaCanvasProxy::onDrawSprite(const SkBitmap& bitmap, int left, int top,
void SkiaCanvasProxy::onDrawVertices(VertexMode mode, int vertexCount, const SkPoint vertices[],
        const SkPoint texs[], const SkColor colors[], SkXfermode*, const uint16_t indices[],
        int indexCount, const SkPaint& paint) {
    if (mFilterHwuiCalls) {
        return;
    }
    // convert the SkPoints into floats
    SK_COMPILE_ASSERT(sizeof(SkPoint) == sizeof(float)*2, SkPoint_is_no_longer_2_floats);
    const int floatCount = vertexCount << 1;
@@ -312,6 +320,9 @@ void SkiaCanvasProxy::onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScala

void SkiaCanvasProxy::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
        const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) {
    if (mFilterHwuiCalls) {
        return;
    }
    SkPatchUtils::VertexData data;

    SkMatrix matrix;
+7 −3
Original line number Diff line number Diff line
@@ -27,16 +27,19 @@ namespace uirenderer {

/**
 * This class serves as a proxy between Skia's SkCanvas and Android Framework's
 * Canvas.  The class does not maintain any state and will pass through any request
 * directly to the Canvas provided in the constructor.
 * Canvas.  The class does not maintain any draw-related state and will pass
 * through most requests directly to the Canvas provided in the constructor.
 *
 * Upon construction it is expected that the provided Canvas has already been
 * prepared for recording and will continue to be in the recording state while
 * this proxy class is being used.
 *
 * If filterHwuiCalls is true, the proxy silently ignores away draw calls that
 * aren't supported by HWUI.
 */
class ANDROID_API SkiaCanvasProxy : public SkCanvas {
public:
    SkiaCanvasProxy(Canvas* canvas);
    SkiaCanvasProxy(Canvas* canvas, bool filterHwuiCalls = false);
    virtual ~SkiaCanvasProxy() {}

protected:
@@ -94,6 +97,7 @@ protected:

private:
    Canvas* mCanvas;
    bool mFilterHwuiCalls;

    typedef SkCanvas INHERITED;
};