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
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user