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

Commit bf09ffb4 authored by Chris Craik's avatar Chris Craik
Browse files

Quick reject empty paths

bug:7260035

Adding a circle of radius 0 to a path is a no-op in skia, so detect
this case both in the PathRenderer, and in quickReject().

Change-Id: I7a172db49a5d5351b4734b39d4e4ca6379658096
parent bfbf6e12
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1265,7 +1265,7 @@ bool OpenGLRenderer::quickRejectPreStroke(float left, float top, float right, fl
}

bool OpenGLRenderer::quickReject(float left, float top, float right, float bottom) {
    if (mSnapshot->isIgnored()) {
    if (mSnapshot->isIgnored() || bottom <= top || right <= left) {
        return true;
    }

@@ -1951,6 +1951,11 @@ void OpenGLRenderer::drawConvexPath(const SkPath& path, SkPaint* paint) {
    // TODO: try clipping large paths to viewport
    PathRenderer::convexPathVertices(path, paint, mSnapshot->transform, vertexBuffer);

    if (!vertexBuffer.getSize()) {
        // no vertices to draw
        return;
    }

    setupDraw();
    setupDrawNoTexture();
    if (isAA) setupDrawAA();
+5 −0
Original line number Diff line number Diff line
@@ -323,6 +323,11 @@ void PathRenderer::convexPathVertices(const SkPath &path, const SkPaint* paint,
    convexPathPerimeterVertices(path, threshInvScaleX * threshInvScaleX,
            threshInvScaleY * threshInvScaleY, tempVertices);

    if (!tempVertices.size()) {
        // path was empty, return without allocating vertex buffer
        return;
    }

#if VERTEX_DEBUG
    for (unsigned int i = 0; i < tempVertices.size(); i++) {
        ALOGD("orig path: point at %f %f", tempVertices[i].position[0], tempVertices[i].position[1]);