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

Commit f5f27cd8 authored by Stan Iliev's avatar Stan Iliev
Browse files

Fix recent apps in system UI for Skia pipeline

Enable HW Bitmaps for Skia pipelines by using a readback to
convert GraphicBuffer into a raster SkImage. Both BitmapShader
and drawing HW bitmaps into a canvas are supported.

Test: recent apps work, no memory leaks, CTS graphics and
UiRendering tests passed, HWUI unit test passed
bug: 38136140
Change-Id: I23fed5febad3b1009e0417fb7e21a347a8d11b0d
Merged-In: I23fed5febad3b1009e0417fb7e21a347a8d11b0d
parent 07f580ea
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -486,7 +486,13 @@ void Bitmap::setAlphaType(SkAlphaType alphaType) {
void Bitmap::getSkBitmap(SkBitmap* outBitmap) {
    outBitmap->setHasHardwareMipMap(mHasHardwareMipMap);
    if (isHardware()) {
        if (uirenderer::Properties::isSkiaEnabled()) {
            // TODO: add color correctness for Skia pipeline - pass null color space for now
            outBitmap->allocPixels(SkImageInfo::Make(info().width(), info().height(),
                    info().colorType(), info().alphaType(), nullptr));
        } else {
            outBitmap->allocPixels(info());
        }
        uirenderer::renderthread::RenderProxy::copyGraphicBufferInto(graphicBuffer(), outBitmap);
        return;
    }
@@ -495,10 +501,14 @@ void Bitmap::getSkBitmap(SkBitmap* outBitmap) {
}

void Bitmap::getSkBitmapForShaders(SkBitmap* outBitmap) {
    if (isHardware() && uirenderer::Properties::isSkiaEnabled()) {
        getSkBitmap(outBitmap);
    } else {
        outBitmap->setInfo(info(), rowBytes());
        outBitmap->setPixelRef(this);
        outBitmap->setHasHardwareMipMap(mHasHardwareMipMap);
    }
}

void Bitmap::getBounds(SkRect* bounds) const {
    SkASSERT(bounds);