Loading core/java/android/app/Activity.java +45 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. */ Loading Loading @@ -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(); } Loading core/java/org/codeaurora/Performance.java +139 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ package org.codeaurora; import android.util.Log; import android.view.MotionEvent; import android.util.DisplayMetrics; public class Performance { Loading Loading @@ -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); Loading core/res/res/values/config.xml +10 −0 Original line number Diff line number Diff line Loading @@ -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> core/res/res/values/symbols.xml +9 −0 Original line number Diff line number Diff line Loading @@ -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> Loading
core/java/android/app/Activity.java +45 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. */ Loading Loading @@ -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(); } Loading
core/java/org/codeaurora/Performance.java +139 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ package org.codeaurora; import android.util.Log; import android.view.MotionEvent; import android.util.DisplayMetrics; public class Performance { Loading Loading @@ -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); Loading
core/res/res/values/config.xml +10 −0 Original line number Diff line number Diff line Loading @@ -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>
core/res/res/values/symbols.xml +9 −0 Original line number Diff line number Diff line Loading @@ -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>