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

Commit 6de4ca65 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 14aadb0c
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,8 +75,11 @@ public class OverScroller {
    public OverScroller(Context context, Interpolator interpolator, boolean flywheel) {
        mInterpolator = interpolator;
        mFlywheel = flywheel;

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

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

    /**
@@ -373,6 +379,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);
    }
@@ -443,6 +450,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;
@@ -83,6 +84,8 @@ public class Scroller {
    // A context-specific coefficient adjusted to physical values.
    private float mPhysicalCoeff;

    private final PowerManager mPm;

    static {
        float x_min = 0.0f;
        float y_min = 0.0f;
@@ -156,6 +159,7 @@ public class Scroller {
        mFlywheel = flywheel;

        mPhysicalCoeff = computeDeceleration(0.84f); // look and feel tuning
        mPm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    }

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

    /**
+10 −0
Original line number Diff line number Diff line
@@ -22,6 +22,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.am.ActivityManagerService.PendingActivityLaunch;
import com.android.server.power.PowerManagerService;

import android.app.Activity;
import android.app.ActivityManager;
@@ -53,6 +54,7 @@ import android.os.Message;
import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
@@ -310,6 +312,8 @@ final class ActivityStack {

    private static final ActivityTrigger mActivityTrigger;

    private final PowerManagerService mPm;

    static {
        if (SystemProperties.QCOM_HARDWARE) {
            mActivityTrigger = new ActivityTrigger();
@@ -430,6 +434,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);
    }

@@ -1416,6 +1421,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);

@@ -2476,6 +2484,8 @@ final class ActivityStack {

        int err = ActivityManager.START_SUCCESS;

        mPm.cpuBoost(1500000);

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