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

Commit 2f1b2812 authored by zfu's avatar zfu Committed by Linux Build Service Account
Browse files

Set animation scale values for specific activity.

Reducing animation scale values for some specific activity can improve
performance. This is no impact for UE. There is whitelist.xml to
maintain the
activities which have no impact when animation scale values are changed.

Change-Id: I1b02f05fc287b587201a1e533bf870b889c07b04
CRs-Fixed: 1036319
parent 283001ed
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -106,10 +106,16 @@ public class ActivityTrigger
        native_at_stopActivity(activity);
    }

    /** &hide */
    public float animationScalesCheck(String activity, int scaleType) {
        return native_at_animationScalesCheck(activity, scaleType);
    }

    private native int native_at_startActivity(String activity, int flags);
    private native void native_at_resumeActivity(String activity);
    private native void native_at_pauseActivity(String activity);
    private native void native_at_stopActivity(String activity);
    private native void native_at_deinit();
    private native void native_at_startProcessActivity(String process, int pid);
    private native float native_at_animationScalesCheck(String activity, int scaleType);
}
 No newline at end of file
+31 −3
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ typedef struct dlLibHandler {
    void (*resumeActivity)(const char *);
    void (*pauseActivity)(const char *);
    void (*stopActivity)(const char *);
    void (*animationScalesCheck)(const char *, int, float *);
    void (*init)(void);
    void (*deinit)(void);
    void (*startProcessActivity)(const char *, int);
@@ -67,9 +68,9 @@ typedef struct dlLibHandler {
 * library -both handlers for Start and Resume events.
 */
static dlLibHandler mDlLibHandlers[] = {
    {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
     "ro.vendor.at_library"},
    {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
     "ro.vendor.gt_library"},
};

@@ -142,6 +143,12 @@ com_android_internal_app_ActivityTrigger_native_at_init()
                errored = true;
            }
        }
        if (!errored) {
            *(void **) (&mDlLibHandlers[i].animationScalesCheck) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_animationScalesCheck");
            if ((rc = dlerror()) != NULL) {
                errored = true;
            }
        }

        if (errored) {
            mDlLibHandlers[i].startActivity  = NULL;
@@ -149,6 +156,7 @@ com_android_internal_app_ActivityTrigger_native_at_init()
            mDlLibHandlers[i].pauseActivity  = NULL;
            mDlLibHandlers[i].stopActivity = NULL;
            mDlLibHandlers[i].startProcessActivity = NULL;
            mDlLibHandlers[i].animationScalesCheck = NULL;
            if (mDlLibHandlers[i].dlhandle) {
                dlclose(mDlLibHandlers[i].dlhandle);
                mDlLibHandlers[i].dlhandle = NULL;
@@ -172,6 +180,7 @@ com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject c
            mDlLibHandlers[i].pauseActivity  = NULL;
            mDlLibHandlers[i].stopActivity = NULL;
            mDlLibHandlers[i].startProcessActivity = NULL;
            mDlLibHandlers[i].animationScalesCheck = NULL;

            *(void **) (&mDlLibHandlers[i].deinit) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_deinit");
            if (mDlLibHandlers[i].deinit) {
@@ -258,6 +267,24 @@ com_android_internal_app_ActivityTrigger_native_at_stopActivity(JNIEnv *env, job
        }
    }
}

static jfloat
com_android_internal_app_ActivityTrigger_native_at_animationScalesCheck(JNIEnv *env, jobject clazz, jstring activity, jint scaleType)
{
    int type = scaleType;
    float scaleValue = -1.0f;
    size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers);
    for (size_t i = 0; i < numlibs; i++) {
        if (mDlLibHandlers[i].animationScalesCheck && activity) {
            const char *actStr = env->GetStringUTFChars(activity, NULL);
            if (actStr) {
                (*mDlLibHandlers[i].animationScalesCheck)(actStr, type, &scaleValue);
                env->ReleaseStringUTFChars(activity, actStr);
            }
        }
    }
    return scaleValue;
}
// ----------------------------------------------------------------------------

static JNINativeMethod gMethods[] = {
@@ -267,6 +294,7 @@ static JNINativeMethod gMethods[] = {
    {"native_at_stopActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_stopActivity},
    {"native_at_deinit",         "()V",                   (void *)com_android_internal_app_ActivityTrigger_native_at_deinit},
    {"native_at_startProcessActivity", "(Ljava/lang/String;I)V", (void *)com_android_internal_app_ActivityTrigger_native_at_startProcessActivity},
    {"native_at_animationScalesCheck", "(Ljava/lang/String;I)F", (void *)com_android_internal_app_ActivityTrigger_native_at_animationScalesCheck},
};


+41 −4
Original line number Diff line number Diff line
@@ -122,6 +122,7 @@ import android.view.animation.Animation;
import android.view.inputmethod.InputMethodManagerInternal;

import com.android.internal.R;
import com.android.internal.app.ActivityTrigger;
import com.android.internal.app.IAssistScreenshotReceiver;
import com.android.internal.os.IResultReceiver;
import com.android.internal.policy.IShortcutService;
@@ -256,7 +257,10 @@ public class WindowManagerService extends IWindowManager.Stub

    static final boolean PROFILE_ORIENTATION = false;
    static final boolean localLOGV = DEBUG;

    static final boolean mEnableAnimCheck = SystemProperties.getBoolean("persist.animcheck.enable", false);
    static ActivityTrigger mActivityTrigger = new ActivityTrigger();
    static WindowState mFocusingWindow;
    String mFocusingActivity;
    /** How much to multiply the policy's type layer, to reserve room
     * for multiple windows of the same type and Z-ordering adjustment
     * with TYPE_LAYER_OFFSET. */
@@ -1860,6 +1864,7 @@ public class WindowManagerService extends IWindowManager.Stub
        WindowState attachedWindow = null;
        long origId;
        final int type = attrs.type;
        mFocusingActivity = attrs.getTitle().toString();

        synchronized(mWindowMap) {
            if (!mDisplayReady) {
@@ -5549,12 +5554,38 @@ public class WindowManagerService extends IWindowManager.Stub
        ValueAnimator.setDurationScale(scale);
    }

    private float animationScalesCheck (int which) {
        float value = -1.0f;
        if (!mAnimationsDisabled) {
            if (mEnableAnimCheck) {
                if (mFocusingActivity != null) {
                    if (mActivityTrigger == null) {
                        mActivityTrigger = new ActivityTrigger();
                    }
                    if (mActivityTrigger != null) {
                        value = mActivityTrigger.animationScalesCheck(mFocusingActivity, which);
                    }
               }
            }
            if (value == -1.0f) {
                switch (which) {
                    case WINDOW_ANIMATION_SCALE: value = mWindowAnimationScaleSetting; break;
                    case TRANSITION_ANIMATION_SCALE: value = mTransitionAnimationScaleSetting; break;
                    case ANIMATION_DURATION_SCALE: value = mAnimatorDurationScaleSetting; break;
                }
            }
        } else {
            value = 0;
        }
        return value;
    }

    public float getWindowAnimationScaleLocked() {
        return mAnimationsDisabled ? 0 : mWindowAnimationScaleSetting;
        return animationScalesCheck(WINDOW_ANIMATION_SCALE);
    }

    public float getTransitionAnimationScaleLocked() {
        return mAnimationsDisabled ? 0 : mTransitionAnimationScaleSetting;
        return animationScalesCheck(TRANSITION_ANIMATION_SCALE);
    }

    @Override
@@ -5576,7 +5607,7 @@ public class WindowManagerService extends IWindowManager.Stub
    @Override
    public float getCurrentAnimatorScale() {
        synchronized(mWindowMap) {
            return mAnimationsDisabled ? 0 : mAnimatorDurationScaleSetting;
            return animationScalesCheck(ANIMATION_DURATION_SCALE);
        }
    }

@@ -9693,6 +9724,12 @@ public class WindowManagerService extends IWindowManager.Stub
                            // No focus for you!!!
                            if (localLOGV || DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM,
                                    "findFocusedWindow: Reached focused app=" + mFocusedApp);
                            if (mFocusedApp.hasWindowsAlive()) {
                                mFocusingWindow = mFocusedApp.findMainWindow();
                                if (mFocusingWindow != null) {
                                    mFocusingActivity = mFocusingWindow.mAttrs.getTitle().toString();
                                }
                            }
                            return null;
                        }
                    }