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

Commit 9272f216 authored by Nader Jawad's avatar Nader Jawad
Browse files

Updated StretchEffect types

Added additional shader stretch effect type
to distinguish between shader based stretches that
are configured in HWUI as well as those that
are configured in both HWUI and SurfaceFlinger

Bug: 184297961
Test: manual
Change-Id: Ie1083cef7cbaf4f877783d67d429af7f5edd0a3c
parent 8ed00dc5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ float Properties::defaultSdrWhitePoint = 200.f;
bool Properties::useHintManager = true;
int Properties::targetCpuTimePercentage = 70;

StretchEffectBehavior Properties::stretchEffectBehavior = StretchEffectBehavior::Shader;
StretchEffectBehavior Properties::stretchEffectBehavior = StretchEffectBehavior::ShaderHWUI;

bool Properties::load() {
    bool prevDebugLayersUpdates = debugLayersUpdates;
+3 −2
Original line number Diff line number Diff line
@@ -200,8 +200,9 @@ enum class OverdrawColorSet { Default = 0, Deuteranomaly };
enum class RenderPipelineType { SkiaGL, SkiaVulkan, NotInitialized = 128 };

enum class StretchEffectBehavior {
    Shader,
    LinearScale,
    ShaderHWUI, // Stretch shader in HWUI only, matrix scale in SF
    Shader, // Stretch shader in both HWUI and SF
    LinearScale // Linear stretch everywhere
};

/**
+26 −23
Original line number Diff line number Diff line
@@ -573,8 +573,9 @@ static void android_view_RenderNode_requestPositionUpdates(JNIEnv* env, jobject,
            const RenderProperties& props = node.properties();

            uirenderer::Rect bounds(props.getWidth(), props.getHeight());
            if (Properties::stretchEffectBehavior == StretchEffectBehavior::Shader &&
                info.stretchEffectCount) {
            bool useStretchShader = Properties::stretchEffectBehavior !=
                StretchEffectBehavior::LinearScale;
            if (useStretchShader && info.stretchEffectCount) {
                handleStretchEffect(info, bounds);
            }

@@ -679,6 +680,7 @@ static void android_view_RenderNode_requestPositionUpdates(JNIEnv* env, jobject,
            stretchTargetBounds(*effect, result.width, result.height,
                                childRelativeBounds,targetBounds);

            if (Properties::stretchEffectBehavior == StretchEffectBehavior::Shader) {
                JNIEnv* env = jnienv();

                jobject localref = env->NewLocalRef(mWeakRef);
@@ -704,6 +706,7 @@ static void android_view_RenderNode_requestPositionUpdates(JNIEnv* env, jobject,
#endif
                env->DeleteLocalRef(localref);
            }
        }

        void doUpdatePositionAsync(jlong frameNumber, jint left, jint top,
                jint right, jint bottom) {
+2 −2
Original line number Diff line number Diff line
@@ -172,7 +172,7 @@ void RenderNodeDrawable::forceDraw(SkCanvas* canvas) const {
}

static bool stretchNeedsLayer(const LayerProperties& properties) {
    return Properties::stretchEffectBehavior == StretchEffectBehavior::Shader &&
    return Properties::stretchEffectBehavior != StretchEffectBehavior::LinearScale &&
           !properties.getStretchEffect().isEmpty();
}

@@ -253,7 +253,7 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const {

            const StretchEffect& stretch = properties.layerProperties().getStretchEffect();
            if (stretch.isEmpty() ||
                Properties::stretchEffectBehavior != StretchEffectBehavior::Shader) {
                Properties::stretchEffectBehavior == StretchEffectBehavior::LinearScale) {
                // If we don't have any stretch effects, issue the filtered
                // canvas draw calls to make sure we still punch a hole
                // with the same canvas transformation + clip into the target