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

Commit f058bd35 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "PerfLock for Chrome drag"

parents 8f11cbc0 55b52f4a
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -101,6 +101,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.HashMap;
import org.codeaurora.Performance;

/**
 * An activity is a single, focused thing that the user can do.  Almost all
@@ -662,7 +663,15 @@ public class Activity extends ContextThemeWrapper
        Window.Callback, KeyEvent.Callback,
        OnCreateContextMenuListener, ComponentCallbacks2,
        Window.OnWindowDismissedCallback {

    private static Performance mPerf = null;
    private static int mDragBoostPossible = -1;
    private static int mPerfLockDuration = -1;
    private static int mAsCpuBoost = -1;
    private static int mAsSchedBoost = -1;
    private static int mAsPcDisblBoost = -1;
    private static final String TAG = "Activity";

    private static final boolean DEBUG_LIFECYCLE = false;

    /** Standard activity result: operation canceled. */
@@ -2733,6 +2742,42 @@ public class Activity extends ContextThemeWrapper
     * @return boolean Return true if this event was consumed.
     */
    public boolean dispatchTouchEvent(MotionEvent ev) {
        String currentActivity = getPackageName();
        if(mDragBoostPossible == -1)
        {
            mDragBoostPossible = 0;
            String[] activityList = getResources().getStringArray(
                com.android.internal.R.array.boost_activityList);
            if(activityList != null){
                for (String match : activityList) {
                    if (currentActivity.indexOf(match) != -1){
                        mDragBoostPossible = 1;
                        break;
                    }
                }
            }
        }
        if (mDragBoostPossible == 1)
        {
            if (mPerf == null){
                mPerf = new Performance();
            }
            if(mPerfLockDuration == -1){
                mPerfLockDuration = getResources().getInteger(
                    com.android.internal.R.integer.ascrollboost_timeout);
                mAsCpuBoost = getResources().getInteger(
                    com.android.internal.R.integer.ascrollboost_cpuboost);
                mAsSchedBoost = getResources().getInteger(
                    com.android.internal.R.integer.ascrollboost_schedboost);
                mAsPcDisblBoost = getResources().getInteger(
                    com.android.internal.R.integer.ascrollboost_pcdisbl);
            }
            mPerf.perfLockAcquireTouch(ev,
                getResources().getDisplayMetrics(),
                mPerfLockDuration,
                mAsSchedBoost, mAsCpuBoost, mAsPcDisblBoost);
        }

        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            onUserInteraction();
        }
+139 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@
package org.codeaurora;

import android.util.Log;
import android.view.MotionEvent;
import android.util.DisplayMetrics;

public class Performance
{
@@ -91,6 +93,143 @@ public class Performance
        return rc;
    }

    private static boolean isFlingEnabled = false;

    /* Tunables Begin. Can be moved to config.xml */
    /* Division factor */
    private int mDivFact = 6;
    /* Min drag in horizontal,vertical (abs pixels) */
    private int mWDragPix = 12;
    private int mHDragPix = 12;
    /* fling boost duration (msec) */
    private int mFlingBoostDuration = 1500;
    /* Tunables End. */

    class TouchInfo {
        /* Touch start position */
        private int mStartX = 0;
        private int mStartY = 0;

        /* Touch current position */
        private int mCurX = 0;
        private int mCurY = 0;

        /* Width, Height to declare fling */
        private int mMinFlingW = 0;
        private int mMinFlingH = 0;

        /* Width, Height to declare drag */
        private int mMinDragW = 0;
        private int mMinDragH = 0;

        /* Note: All coordinates are density normalized values */
        private void reset() {
            mStartX = mStartY = mCurX = mCurY = 0;
            mMinFlingH = mMinFlingW = mMinDragH = mMinDragW = 0;
            isFlingEnabled = false;
        }
        /* update current x,y coordinates */
        private void setXY(int dx, int dy) {
            mCurX = dx;
            mCurY = dy;
        }
        /* Set fling min width, height */
        private void setFlingWH(int dw, int dh) {
            mMinFlingW = dw;
            mMinFlingH = dh;
        }
        /* Set drag min width, height */
        private void setDragWH(int dw, int dh) {
            mMinDragW = dw;
            mMinDragH = dh;
        }
        private void setStartXY(int dx, int dy) {
            mStartX = mCurX = dx;
            mStartY = mCurY = dy;
        }
    };
    private static TouchInfo mTouchInfo = null;


    /* The following two functions are the PerfLock APIs*/
    /** &hide */
    public int perfLockAcquireTouch(MotionEvent ev, DisplayMetrics metrics, int duration, int... list) {
        int rc = REQUEST_FAILED;
        if (mTouchInfo == null)
            mTouchInfo = new TouchInfo();
        final int actionMasked = ev.getActionMasked();
        final int pointerIndex = ev.getActionIndex();

        final int y = (int) ev.getY(pointerIndex);
        final int x = (int) ev.getX(pointerIndex);

        int dx = (int)((x * 1f)/metrics.density);
        int dy = (int)((y * 1f)/metrics.density);

        boolean ret = true;

        switch (actionMasked) {
            case MotionEvent.ACTION_DOWN: {
                mTouchInfo.reset();
                mTouchInfo.setStartXY(dx, dy);
                mTouchInfo.setFlingWH(
                       (int)((metrics.widthPixels * 1f)/(mDivFact * metrics.density)),
                       (int)((metrics.heightPixels * 1f)/(mDivFact * metrics.density)));
                mTouchInfo.setDragWH((int)(mWDragPix * 1f/metrics.density),
                                     (int)(mHDragPix * 1f/metrics.density));
                return rc;
            }

            case MotionEvent.ACTION_MOVE: {
                int xdiff = dx - mTouchInfo.mCurX;
                int ydiff = dy - mTouchInfo.mCurY;
                if (xdiff < 0) xdiff *= -1;
                if (ydiff < 0) ydiff *= -1;

                mTouchInfo.setXY(dx, dy);
                if ((xdiff > mTouchInfo.mMinDragW) ||
                    (ydiff > mTouchInfo.mMinDragH)){
                    ret = false;
                }

                if (ret == true)
                    return rc;
                break;
            }

            case MotionEvent.ACTION_UP: {
                int xdiff = dx - mTouchInfo.mCurX;
                int ydiff = dy - mTouchInfo.mCurY;
                if (xdiff < 0) xdiff *= -1;
                if (ydiff < 0) ydiff *= -1;
                if ((xdiff > mTouchInfo.mMinDragW) ||
                    (ydiff > mTouchInfo.mMinDragH)){
                    ret = false;
                }

                mTouchInfo.reset();
                if (ret == true){
                    return rc;
                }
                break;
            }

            case MotionEvent.ACTION_CANCEL: {
                mTouchInfo.reset();
                return rc;
            }

            default:
                return rc;
        }

        rc = REQUEST_SUCCEEDED;
        handle = native_perf_lock_acq(handle, duration, list);
        if (handle == 0)
            rc = REQUEST_FAILED;
        return rc;
    }

    /** &hide */
    public int perfLockRelease() {
        return native_perf_lock_rel(handle);
+10 −0
Original line number Diff line number Diff line
@@ -2063,4 +2063,14 @@
   <integer name="animationboost_timeout_param">0</integer>
   <integer name="animationboost_schedboost_param">0</integer>
   <integer name="animationboost_cpuboost_param">0</integer>

   <!-- Activities list for boost -->
   <string-array translatable="false" name="boost_activityList">
   </string-array>

   <!-- Activity scroll boost params -->
   <integer name="ascrollboost_timeout">0</integer>
   <integer name="ascrollboost_schedboost">0</integer>
   <integer name="ascrollboost_cpuboost">0</integer>
   <integer name="ascrollboost_pcdisbl">0</integer>
</resources>
+9 −0
Original line number Diff line number Diff line
@@ -2205,4 +2205,13 @@
  <java-symbol type="integer" name="animationboost_timeout_param" />
  <java-symbol type="integer" name="animationboost_schedboost_param" />
  <java-symbol type="integer" name="animationboost_cpuboost_param" />

  <!-- Activities list for boost -->
  <java-symbol type="array"  name="boost_activityList" />

  <!-- Activity scroll boost params -->
  <java-symbol type="integer" name="ascrollboost_timeout" />
  <java-symbol type="integer" name="ascrollboost_schedboost" />
  <java-symbol type="integer" name="ascrollboost_cpuboost" />
  <java-symbol type="integer" name="ascrollboost_pcdisbl" />
</resources>