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

Commit 7464f7f8 authored by Cairn Overturf's avatar Cairn Overturf Committed by Android (Google) Code Review
Browse files

Merge "Add back FPK optimization to box shadow drawing" into main

parents b2435af9 daab6a49
Loading
Loading
Loading
Loading
+19 −1
Original line number Original line Diff line number Diff line
@@ -147,7 +147,8 @@ void BoxShadowUtils::cleanup() {
}
}


void BoxShadowUtils::drawBoxShadows(SkCanvas* canvas, const SkRect& rect, float cornerRadius,
void BoxShadowUtils::drawBoxShadows(SkCanvas* canvas, const SkRect& rect, float cornerRadius,
                                    const android::gui::BoxShadowSettings& settings) {
                                    const android::gui::BoxShadowSettings& settings,
                                    bool shouldDrawFpkRect) {
    for (const gui::BoxShadowSettings::BoxShadowParams& box : settings.boxShadows) {
    for (const gui::BoxShadowSettings::BoxShadowParams& box : settings.boxShadows) {
        SkRect boxRect = rect;
        SkRect boxRect = rect;
        boxRect.outset(box.spreadRadius, box.spreadRadius);
        boxRect.outset(box.spreadRadius, box.spreadRadius);
@@ -177,6 +178,23 @@ void BoxShadowUtils::drawBoxShadows(SkCanvas* canvas, const SkRect& rect, float
        sk_sp<SkShader> shader = mBlurImages[blurRadiusIndex];
        sk_sp<SkShader> shader = mBlurImages[blurRadiusIndex];
        drawNineSlice(canvas, shader, boxRect, box.color, cornerScale);
        drawNineSlice(canvas, shader, boxRect, box.color, cornerScale);
    }
    }

    if (shouldDrawFpkRect) {
        SFTRACE_NAME("FPKOptimization");
        // This optimization is just for Ganesh and can be removed once graphite is
        // enabled.
        // On a device with ARM Mali-G710 MP7 with 4 chrome windows open this
        // reduces GPU work period from 16ms to 10ms.
        SkRect killRect = rect;
        float inset = (1.0f - kSin45Deg) * cornerRadius;
        killRect.inset(inset, inset);

        SkPaint paint;
        paint.setAntiAlias(false);
        paint.setColor(0);
        paint.setBlendMode(SkBlendMode::kSrc);
        canvas->drawRect(killRect, paint);
    }
}
}


} // namespace android::renderengine::skia
} // namespace android::renderengine::skia
 No newline at end of file
+1 −1
Original line number Original line Diff line number Diff line
@@ -14,7 +14,7 @@ public:
    void init(SkiaGpuContext* context);
    void init(SkiaGpuContext* context);
    void cleanup();
    void cleanup();
    void drawBoxShadows(SkCanvas* canvas, const SkRect& rect, float cornerRadius,
    void drawBoxShadows(SkCanvas* canvas, const SkRect& rect, float cornerRadius,
                        const android::gui::BoxShadowSettings& settings);
                        const android::gui::BoxShadowSettings& settings, bool shouldDrawFpkRect);


private:
private:
    static constexpr std::array<int, 8> kSupportedBlurRadius = {8, 12, 14, 16, 24, 28, 48, 64};
    static constexpr std::array<int, 8> kSupportedBlurRadius = {8, 12, 14, 16, 24, 28, 48, 64};
+2 −1
Original line number Original line Diff line number Diff line
@@ -1097,8 +1097,9 @@ void SkiaRenderEngine::drawLayersInternal(


                float cornerRadius =
                float cornerRadius =
                        roundf(preferredOriginalBounds.radii(SkRRect::kUpperLeft_Corner).fX);
                        roundf(preferredOriginalBounds.radii(SkRRect::kUpperLeft_Corner).fX);

                mBoxShadowUtils.drawBoxShadows(canvas, preferredOriginalBounds.rect(), cornerRadius,
                mBoxShadowUtils.drawBoxShadows(canvas, preferredOriginalBounds.rect(), cornerRadius,
                                               layer.boxShadowSettings);
                                               layer.boxShadowSettings, supportsForwardPixelKill());
            }
            }
        }
        }