Loading libs/renderengine/skia/BoxShadowUtils.cpp +19 −1 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 libs/renderengine/skia/BoxShadowUtils.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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}; Loading libs/renderengine/skia/SkiaRenderEngine.cpp +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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()); } } } } Loading Loading
libs/renderengine/skia/BoxShadowUtils.cpp +19 −1 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading @@ -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
libs/renderengine/skia/BoxShadowUtils.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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}; Loading
libs/renderengine/skia/SkiaRenderEngine.cpp +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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()); } } } } Loading