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

Commit 55603e12 authored by Derek Sollenberger's avatar Derek Sollenberger
Browse files

Performance fixes and additional logging for RE Blur.

Test: perfetto shows decreased GPU time
Change-Id: I12b0b3e9b6082de169f90dead932acac6b0d8545
parent 4bf67f5d
Loading
Loading
Loading
Loading
+12 −8
Original line number Original line Diff line number Diff line
@@ -14,6 +14,8 @@
 * limitations under the License.
 * limitations under the License.
 */
 */


#define ATRACE_TAG ATRACE_TAG_GRAPHICS

#include "BlurFilter.h"
#include "BlurFilter.h"
#include <SkCanvas.h>
#include <SkCanvas.h>
#include <SkData.h>
#include <SkData.h>
@@ -38,11 +40,11 @@ BlurFilter::BlurFilter() {
        half4 main(float2 xy) {
        half4 main(float2 xy) {
            float2 scaled_xy = float2(xy.x * in_inverseScale, xy.y * in_inverseScale);
            float2 scaled_xy = float2(xy.x * in_inverseScale, xy.y * in_inverseScale);


            float4 c = float4(sample(input, scaled_xy));
            half4 c = sample(input, scaled_xy);
            c += float4(sample(input, scaled_xy + float2( in_blurOffset.x,  in_blurOffset.y)));
            c += sample(input, scaled_xy + float2( in_blurOffset.x,  in_blurOffset.y));
            c += float4(sample(input, scaled_xy + float2( in_blurOffset.x, -in_blurOffset.y)));
            c += sample(input, scaled_xy + float2( in_blurOffset.x, -in_blurOffset.y));
            c += float4(sample(input, scaled_xy + float2(-in_blurOffset.x,  in_blurOffset.y)));
            c += sample(input, scaled_xy + float2(-in_blurOffset.x,  in_blurOffset.y));
            c += float4(sample(input, scaled_xy + float2(-in_blurOffset.x, -in_blurOffset.y)));
            c += sample(input, scaled_xy + float2(-in_blurOffset.x, -in_blurOffset.y));


            return half4(c.rgb * 0.2, 1.0);
            return half4(c.rgb * 0.2, 1.0);
        }
        }
@@ -57,8 +59,6 @@ BlurFilter::BlurFilter() {


sk_sp<SkSurface> BlurFilter::generate(SkCanvas* canvas, const sk_sp<SkSurface> input,
sk_sp<SkSurface> BlurFilter::generate(SkCanvas* canvas, const sk_sp<SkSurface> input,
                                      const uint32_t blurRadius, SkRect rect) const {
                                      const uint32_t blurRadius, SkRect rect) const {
    ATRACE_CALL();

    // Kawase is an approximation of Gaussian, but it behaves differently from it.
    // Kawase is an approximation of Gaussian, but it behaves differently from it.
    // A radius transformation is required for approximating them, and also to introduce
    // A radius transformation is required for approximating them, and also to introduce
    // non-integer steps, necessary to smoothly interpolate large radii.
    // non-integer steps, necessary to smoothly interpolate large radii.
@@ -126,7 +126,11 @@ sk_sp<SkSurface> BlurFilter::generate(SkCanvas* canvas, const sk_sp<SkSurface> i
        }
        }
        lastDrawTarget = readSurface;
        lastDrawTarget = readSurface;
    }
    }

    {
        ATRACE_NAME("Flush Offscreen Surfaces");
        lastDrawTarget->flushAndSubmit();
        lastDrawTarget->flushAndSubmit();
    }
    return lastDrawTarget;
    return lastDrawTarget;
}
}