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

Commit e943a896 authored by Steve Kondik's avatar Steve Kondik
Browse files

Add CPU boosting hooks

 * Boost CPU to max during scrolling
 * Boost CPU to max on activity start/resume
 * Inspired by a patch from CodeAuora.

Change-Id: I72f2c2851b01fbceabddead03a4c3a7a0526ca61
parent 1d96fbc4
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.widget;

import android.content.Context;
import android.hardware.SensorManager;
import android.os.PowerManager;
import android.util.FloatMath;
import android.util.Log;
import android.view.ViewConfiguration;
@@ -43,6 +44,8 @@ public class OverScroller {
    private static final int SCROLL_MODE = 0;
    private static final int FLING_MODE = 1;

    private final PowerManager mPm;

    /**
     * Creates an OverScroller with a viscous fluid scroll interpolator and flywheel.
     * @param context
@@ -72,9 +75,12 @@ public class OverScroller {
    public OverScroller(Context context, Interpolator interpolator, boolean flywheel) {
        mInterpolator = interpolator;
        mFlywheel = flywheel;

        mScrollerX = new SplineOverScroller();
        mScrollerY = new SplineOverScroller();

        mPm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);

        SplineOverScroller.initFromContext(context);
    }

@@ -375,6 +381,7 @@ public class OverScroller {
     */
    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
        mMode = SCROLL_MODE;
        mPm.cpuBoost(1500000);
        mScrollerX.startScroll(startX, dx, duration);
        mScrollerY.startScroll(startY, dy, duration);
    }
@@ -445,6 +452,7 @@ public class OverScroller {
            }
        }

        mPm.cpuBoost(1500000);
        mMode = FLING_MODE;
        mScrollerX.fling(startX, velocityX, minX, maxX, overX);
        mScrollerY.fling(startY, velocityY, minY, maxY, overY);
+5 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.widget;
import android.content.Context;
import android.hardware.SensorManager;
import android.os.Build;
import android.os.PowerManager;
import android.util.FloatMath;
import android.view.ViewConfiguration;
import android.view.animation.AnimationUtils;
@@ -72,6 +73,8 @@ public class Scroller {
    private float mDeceleration;
    private final float mPpi;

    private final PowerManager mPm;

    static {
        float x_min = 0.0f;
        for (int i = 0; i <= NB_SAMPLES; i++) {
@@ -129,6 +132,7 @@ public class Scroller {
        mPpi = context.getResources().getDisplayMetrics().density * 160.0f;
        mDeceleration = computeDeceleration(ViewConfiguration.getScrollFriction());
        mFlywheel = flywheel;
        mPm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    }

    /**
@@ -343,6 +347,7 @@ public class Scroller {
        mDeltaX = dx;
        mDeltaY = dy;
        mDurationReciprocal = 1.0f / (float) mDuration;
        mPm.cpuBoost(1500000);
    }

    /**
+11 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;

import com.android.internal.app.HeavyWeightSwitcherActivity;
import com.android.internal.os.BatteryStatsImpl;
import com.android.server.PowerManagerService;
import com.android.server.am.ActivityManagerService.PendingActivityLaunch;

import android.app.Activity;
@@ -54,6 +55,7 @@ import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserId;
@@ -306,6 +308,8 @@ final class ActivityStack {

    private static final ActivityTrigger mActivityTrigger;

    private final PowerManagerService mPm;

    static {
        if (SystemProperties.QCOM_HARDWARE) {
            mActivityTrigger = new ActivityTrigger();
@@ -426,6 +430,7 @@ final class ActivityStack {
            (PowerManager)context.getSystemService(Context.POWER_SERVICE);
        mGoingToSleep = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ActivityManager-Sleep");
        mLaunchingActivity = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ActivityManager-Launch");
        mPm = (PowerManagerService) ServiceManager.getService("power");
        mLaunchingActivity.setReferenceCounted(false);
    }

@@ -1394,6 +1399,9 @@ final class ActivityStack {
    }

    final boolean resumeTopActivityLocked(ActivityRecord prev, Bundle options) {

        mPm.cpuBoost(1500000);

        // Find the first activity that is not finishing.
        ActivityRecord next = topRunningActivityLocked(null);

@@ -2405,6 +2413,8 @@ final class ActivityStack {

        int err = ActivityManager.START_SUCCESS;

        mPm.cpuBoost(1500000);

        ProcessRecord callerApp = null;
        if (caller != null) {
            callerApp = mService.getRecordForAppLocked(caller);