Merge branch 'readonly-p4-donut' into donut
This commit is contained in:
committed by
The Android Open Source Project
commit
05d24afb61
@@ -496,8 +496,10 @@ class PowerManagerService extends IPowerManager.Stub implements LocalPowerManage
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void acquireWakeLock(int flags, IBinder lock, String tag) {
|
public void acquireWakeLock(int flags, IBinder lock, String tag) {
|
||||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.WAKE_LOCK, null);
|
|
||||||
int uid = Binder.getCallingUid();
|
int uid = Binder.getCallingUid();
|
||||||
|
if (uid != Process.myUid()) {
|
||||||
|
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.WAKE_LOCK, null);
|
||||||
|
}
|
||||||
long ident = Binder.clearCallingIdentity();
|
long ident = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
synchronized (mLocks) {
|
synchronized (mLocks) {
|
||||||
@@ -554,14 +556,14 @@ class PowerManagerService extends IPowerManager.Stub implements LocalPowerManage
|
|||||||
// by the current state so we never turn it more on than
|
// by the current state so we never turn it more on than
|
||||||
// it already is.
|
// it already is.
|
||||||
if ((wl.flags & PowerManager.ACQUIRE_CAUSES_WAKEUP) != 0) {
|
if ((wl.flags & PowerManager.ACQUIRE_CAUSES_WAKEUP) != 0) {
|
||||||
reactivateWakeLocksLocked();
|
int oldWakeLockState = mWakeLockState;
|
||||||
|
mWakeLockState = mLocks.reactivateScreenLocksLocked();
|
||||||
if (mSpew) {
|
if (mSpew) {
|
||||||
Log.d(TAG, "wakeup here mUserState=0x" + Integer.toHexString(mUserState)
|
Log.d(TAG, "wakeup here mUserState=0x" + Integer.toHexString(mUserState)
|
||||||
+ " mLocks.gatherState()=0x"
|
+ " mWakeLockState=0x"
|
||||||
+ Integer.toHexString(mLocks.gatherState())
|
+ Integer.toHexString(mWakeLockState)
|
||||||
+ " mWakeLockState=0x" + Integer.toHexString(mWakeLockState));
|
+ " previous wakeLockState=0x" + Integer.toHexString(oldWakeLockState));
|
||||||
}
|
}
|
||||||
mWakeLockState = mLocks.gatherState();
|
|
||||||
} else {
|
} else {
|
||||||
if (mSpew) {
|
if (mSpew) {
|
||||||
Log.d(TAG, "here mUserState=0x" + Integer.toHexString(mUserState)
|
Log.d(TAG, "here mUserState=0x" + Integer.toHexString(mUserState)
|
||||||
@@ -598,7 +600,10 @@ class PowerManagerService extends IPowerManager.Stub implements LocalPowerManage
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void releaseWakeLock(IBinder lock) {
|
public void releaseWakeLock(IBinder lock) {
|
||||||
|
int uid = Binder.getCallingUid();
|
||||||
|
if (uid != Process.myUid()) {
|
||||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.WAKE_LOCK, null);
|
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.WAKE_LOCK, null);
|
||||||
|
}
|
||||||
|
|
||||||
synchronized (mLocks) {
|
synchronized (mLocks) {
|
||||||
releaseWakeLockLocked(lock, false);
|
releaseWakeLockLocked(lock, false);
|
||||||
@@ -653,17 +658,6 @@ class PowerManagerService extends IPowerManager.Stub implements LocalPowerManage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reactivateWakeLocksLocked()
|
|
||||||
{
|
|
||||||
int N = mLocks.size();
|
|
||||||
for (int i=0; i<N; i++) {
|
|
||||||
WakeLock wl = mLocks.get(i);
|
|
||||||
if (isScreenLock(wl.flags)) {
|
|
||||||
mLocks.get(i).activated = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class PokeLock implements IBinder.DeathRecipient
|
private class PokeLock implements IBinder.DeathRecipient
|
||||||
{
|
{
|
||||||
PokeLock(int p, IBinder b, String t) {
|
PokeLock(int p, IBinder b, String t) {
|
||||||
@@ -1752,8 +1746,7 @@ class PowerManagerService extends IPowerManager.Stub implements LocalPowerManage
|
|||||||
Binder.restoreCallingIdentity(ident);
|
Binder.restoreCallingIdentity(ident);
|
||||||
}
|
}
|
||||||
|
|
||||||
reactivateWakeLocksLocked();
|
mWakeLockState = mLocks.reactivateScreenLocksLocked();
|
||||||
mWakeLockState = mLocks.gatherState();
|
|
||||||
setPowerState(mUserState | mWakeLockState, noChangeLights, true);
|
setPowerState(mUserState | mWakeLockState, noChangeLights, true);
|
||||||
setTimeoutLocked(time, SCREEN_BRIGHT);
|
setTimeoutLocked(time, SCREEN_BRIGHT);
|
||||||
}
|
}
|
||||||
@@ -1944,6 +1937,20 @@ class PowerManagerService extends IPowerManager.Stub implements LocalPowerManage
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int reactivateScreenLocksLocked()
|
||||||
|
{
|
||||||
|
int result = 0;
|
||||||
|
int N = this.size();
|
||||||
|
for (int i=0; i<N; i++) {
|
||||||
|
WakeLock wl = this.get(i);
|
||||||
|
if (isScreenLock(wl.flags)) {
|
||||||
|
wl.activated = true;
|
||||||
|
result |= wl.minState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPolicy(WindowManagerPolicy p) {
|
void setPolicy(WindowManagerPolicy p) {
|
||||||
|
|||||||
@@ -179,6 +179,25 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
|
|||||||
static final int UPDATE_FOCUS_PLACING_SURFACES = 2;
|
static final int UPDATE_FOCUS_PLACING_SURFACES = 2;
|
||||||
static final int UPDATE_FOCUS_WILL_PLACE_SURFACES = 3;
|
static final int UPDATE_FOCUS_WILL_PLACE_SURFACES = 3;
|
||||||
|
|
||||||
|
/** The minimum time between dispatching touch events. */
|
||||||
|
int mMinWaitTimeBetweenTouchEvents = 1000 / 35;
|
||||||
|
|
||||||
|
// Last touch event time
|
||||||
|
long mLastTouchEventTime = 0;
|
||||||
|
|
||||||
|
// Last touch event type
|
||||||
|
int mLastTouchEventType = OTHER_EVENT;
|
||||||
|
|
||||||
|
// Time to wait before calling useractivity again. This saves CPU usage
|
||||||
|
// when we get a flood of touch events.
|
||||||
|
static final int MIN_TIME_BETWEEN_USERACTIVITIES = 1000;
|
||||||
|
|
||||||
|
// Last time we call user activity
|
||||||
|
long mLastUserActivityCallTime = 0;
|
||||||
|
|
||||||
|
// Last time we updated battery stats
|
||||||
|
long mLastBatteryStatsCallTime = 0;
|
||||||
|
|
||||||
private static final String SYSTEM_SECURE = "ro.secure";
|
private static final String SYSTEM_SECURE = "ro.secure";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3694,9 +3713,20 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
|
|||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
|
|
||||||
private final void wakeupIfNeeded(WindowState targetWin, int eventType) {
|
private final void wakeupIfNeeded(WindowState targetWin, int eventType) {
|
||||||
if (targetWin == null ||
|
long curTime = SystemClock.uptimeMillis();
|
||||||
targetWin.mAttrs.type != WindowManager.LayoutParams.TYPE_KEYGUARD) {
|
|
||||||
mPowerManager.userActivity(SystemClock.uptimeMillis(), false, eventType);
|
if (eventType == LONG_TOUCH_EVENT || eventType == CHEEK_EVENT) {
|
||||||
|
if (mLastTouchEventType == eventType &&
|
||||||
|
(curTime - mLastUserActivityCallTime) < MIN_TIME_BETWEEN_USERACTIVITIES) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mLastUserActivityCallTime = curTime;
|
||||||
|
mLastTouchEventType = eventType;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetWin == null
|
||||||
|
|| targetWin.mAttrs.type != WindowManager.LayoutParams.TYPE_KEYGUARD) {
|
||||||
|
mPowerManager.userActivity(curTime, false, eventType, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3764,7 +3794,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
|
|||||||
// events in such a way, since this means the user is moving the
|
// events in such a way, since this means the user is moving the
|
||||||
// pointer without actually pressing down. All other cases should
|
// pointer without actually pressing down. All other cases should
|
||||||
// be atypical, so let's log them.
|
// be atypical, so let's log them.
|
||||||
if (ev.getAction() != MotionEvent.ACTION_MOVE) {
|
if (action != MotionEvent.ACTION_MOVE) {
|
||||||
Log.w(TAG, "No window to dispatch pointer action " + ev.getAction());
|
Log.w(TAG, "No window to dispatch pointer action " + ev.getAction());
|
||||||
}
|
}
|
||||||
if (qev != null) {
|
if (qev != null) {
|
||||||
@@ -3852,6 +3882,38 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
|
|||||||
}
|
}
|
||||||
} //end if target
|
} //end if target
|
||||||
|
|
||||||
|
// TODO remove once we settle on a value or make it app specific
|
||||||
|
if (action == MotionEvent.ACTION_DOWN) {
|
||||||
|
int max_events_per_sec = 35;
|
||||||
|
try {
|
||||||
|
max_events_per_sec = Integer.parseInt(SystemProperties
|
||||||
|
.get("windowsmgr.max_events_per_sec"));
|
||||||
|
if (max_events_per_sec < 1) {
|
||||||
|
max_events_per_sec = 35;
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
}
|
||||||
|
mMinWaitTimeBetweenTouchEvents = 1000 / max_events_per_sec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Throttle events to minimize CPU usage when there's a flood of events
|
||||||
|
* e.g. constant contact with the screen
|
||||||
|
*/
|
||||||
|
if (action == MotionEvent.ACTION_MOVE) {
|
||||||
|
long nextEventTime = mLastTouchEventTime + mMinWaitTimeBetweenTouchEvents;
|
||||||
|
long now = SystemClock.uptimeMillis();
|
||||||
|
if (now < nextEventTime) {
|
||||||
|
try {
|
||||||
|
Thread.sleep(nextEventTime - now);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
|
mLastTouchEventTime = nextEventTime;
|
||||||
|
} else {
|
||||||
|
mLastTouchEventTime = now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
synchronized(mWindowMap) {
|
synchronized(mWindowMap) {
|
||||||
if (qev != null && action == MotionEvent.ACTION_MOVE) {
|
if (qev != null && action == MotionEvent.ACTION_MOVE) {
|
||||||
mKeyWaiter.bindTargetWindowLocked(target,
|
mKeyWaiter.bindTargetWindowLocked(target,
|
||||||
@@ -4928,7 +4990,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
|
|||||||
}
|
}
|
||||||
if ((actions & WindowManagerPolicy.ACTION_POKE_USER_ACTIVITY) != 0) {
|
if ((actions & WindowManagerPolicy.ACTION_POKE_USER_ACTIVITY) != 0) {
|
||||||
mPowerManager.userActivity(event.when, false,
|
mPowerManager.userActivity(event.when, false,
|
||||||
LocalPowerManager.BUTTON_EVENT);
|
LocalPowerManager.BUTTON_EVENT, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((actions & WindowManagerPolicy.ACTION_PASS_TO_USER) != 0) {
|
if ((actions & WindowManagerPolicy.ACTION_PASS_TO_USER) != 0) {
|
||||||
@@ -5088,11 +5150,17 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
|
|||||||
eventType = LocalPowerManager.OTHER_EVENT;
|
eventType = LocalPowerManager.OTHER_EVENT;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
long now = SystemClock.uptimeMillis();
|
||||||
|
|
||||||
|
if ((now - mLastBatteryStatsCallTime)
|
||||||
|
>= MIN_TIME_BETWEEN_USERACTIVITIES) {
|
||||||
|
mLastBatteryStatsCallTime = now;
|
||||||
mBatteryStats.noteInputEvent();
|
mBatteryStats.noteInputEvent();
|
||||||
|
}
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
// Ignore
|
// Ignore
|
||||||
}
|
}
|
||||||
mPowerManager.userActivity(curTime, false, eventType);
|
mPowerManager.userActivity(curTime, false, eventType, false);
|
||||||
switch (ev.classType) {
|
switch (ev.classType) {
|
||||||
case RawInputEvent.CLASS_KEYBOARD:
|
case RawInputEvent.CLASS_KEYBOARD:
|
||||||
KeyEvent ke = (KeyEvent)ev.event;
|
KeyEvent ke = (KeyEvent)ev.event;
|
||||||
|
|||||||
Reference in New Issue
Block a user