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

Commit 2960d169 authored by Derek Sollenberger's avatar Derek Sollenberger
Browse files

Stop copying VectorDrawable pixels when drawing.

Drawing a mutable SkBitmap to an SkCanvas will result in the pixels
being copied and a new genID assigned. This results in both a cpu
and gpu copy every time a VectorDrawable is redrawn.

The solution is to create an SkImage using the flag to instruct it
not to copy the pixels which is what Bitmap::makeImage() does.

Bug: 173732636
Test: captured SKP and verified the genID is consistent between frames
Change-Id: Ie13385e89de51c6b9ee2f2ba31eccbfdf3adac48
parent 2af48c7f
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -505,13 +505,11 @@ void Tree::draw(SkCanvas* canvas, const SkRect& bounds, const SkPaint& inPaint)
    SkPaint paint = inPaint;
    paint.setAlpha(mProperties.getRootAlpha() * 255);

    Bitmap& bitmap = getBitmapUpdateIfDirty();
    SkBitmap skiaBitmap;
    bitmap.getSkBitmap(&skiaBitmap);
    sk_sp<SkImage> cachedBitmap = getBitmapUpdateIfDirty().makeImage();

    int scaledWidth = SkScalarCeilToInt(mProperties.getScaledWidth());
    int scaledHeight = SkScalarCeilToInt(mProperties.getScaledHeight());
    canvas->drawBitmapRect(skiaBitmap, SkRect::MakeWH(scaledWidth, scaledHeight), bounds,
    canvas->drawImageRect(cachedBitmap, SkRect::MakeWH(scaledWidth, scaledHeight), bounds,
                           &paint, SkCanvas::kFast_SrcRectConstraint);
}