diff options
| author | 2016-04-14 19:34:53 -0700 | |
|---|---|---|
| committer | 2016-04-20 09:57:11 -0700 | |
| commit | 43e38de2530fecbbdea81c52d0fde90333432356 (patch) | |
| tree | 351cebfd4217c9b3defd461a5debf0d9d0e77182 | |
| parent | 8dd32a56f74b896b21895ec75d58fa415caa2c70 (diff) | |
window: Adds a Sustained Performance Mode window flag.
Adds setSustainedPerformanceMode(boolean) API for applications to set
the mode for a given window. The mode will be disabled automatically when the
window is no longer in focus.
Bug: 28150358
Change-Id: Ibe8bc564eeaaccbcaad5c4f792cda16da931dffd
Signed-off-by: Ruchi Kandoi <kandoiruchi@google.com>
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | api/system-current.txt | 1 | ||||
| -rw-r--r-- | api/test-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/os/PowerManagerInternal.java | 8 | ||||
| -rw-r--r-- | core/java/android/view/Window.java | 9 | ||||
| -rw-r--r-- | core/java/android/view/WindowManager.java | 7 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowSurfacePlacer.java | 17 |
7 files changed, 41 insertions, 3 deletions
diff --git a/api/current.txt b/api/current.txt index 5df8750fcb7c..fd5740f1cdf7 100644 --- a/api/current.txt +++ b/api/current.txt @@ -43627,6 +43627,7 @@ package android.view { method public void setSharedElementsUseOverlay(boolean); method public void setSoftInputMode(int); method public abstract void setStatusBarColor(int); + method public void setSustainedPerformanceMode(boolean); method public abstract void setTitle(java.lang.CharSequence); method public abstract deprecated void setTitleColor(int); method public void setTransitionBackgroundFadeDuration(long); diff --git a/api/system-current.txt b/api/system-current.txt index acb699d26a05..f482af1ef0fa 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -46573,6 +46573,7 @@ package android.view { method public void setSharedElementsUseOverlay(boolean); method public void setSoftInputMode(int); method public abstract void setStatusBarColor(int); + method public void setSustainedPerformanceMode(boolean); method public abstract void setTitle(java.lang.CharSequence); method public abstract deprecated void setTitleColor(int); method public void setTransitionBackgroundFadeDuration(long); diff --git a/api/test-current.txt b/api/test-current.txt index e4b11bd2d4b5..ff7431d0e32d 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -43704,6 +43704,7 @@ package android.view { method public void setSharedElementsUseOverlay(boolean); method public void setSoftInputMode(int); method public abstract void setStatusBarColor(int); + method public void setSustainedPerformanceMode(boolean); method public abstract void setTitle(java.lang.CharSequence); method public abstract deprecated void setTitleColor(int); method public void setTransitionBackgroundFadeDuration(long); diff --git a/core/java/android/os/PowerManagerInternal.java b/core/java/android/os/PowerManagerInternal.java index 9801e1bef2c2..b3cf710094e0 100644 --- a/core/java/android/os/PowerManagerInternal.java +++ b/core/java/android/os/PowerManagerInternal.java @@ -55,12 +55,16 @@ public abstract class PowerManagerInternal { /** - * Power hint: The user is interacting with the device. The corresponding data field must be + * Power hint: + * Interaction: The user is interacting with the device. The corresponding data field must be * the expected duration of the fling, or 0 if unknown. * - * This must be kept in sync with the values in hardware/libhardware/include/hardware/power.h + * Sustained Performance Mode: Enable/Disables Sustained Performance Mode. + * + * These must be kept in sync with the values in hardware/libhardware/include/hardware/power.h */ public static final int POWER_HINT_INTERACTION = 2; + public static final int POWER_HINT_SUSTAINED_PERFORMANCE_MODE = 6; public static String wakefulnessToString(int wakefulness) { switch (wakefulness) { diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java index 2f3f0bfa9612..51356578fd9b 100644 --- a/core/java/android/view/Window.java +++ b/core/java/android/view/Window.java @@ -1177,6 +1177,15 @@ public abstract class Window { return false; } + /* Sets the Sustained Performance requirement for the calling window. + * @param enable disables or enables the mode. + */ + public void setSustainedPerformanceMode(boolean enable) { + setPrivateFlags(enable + ? WindowManager.LayoutParams.PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE : 0, + WindowManager.LayoutParams.PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE); + } + private boolean isOutOfBounds(Context context, MotionEvent event) { final int x = (int) event.getX(); final int y = (int) event.getY(); diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 89e146b3fed8..54e9942db4d0 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -1247,6 +1247,13 @@ public interface WindowManager extends ViewManager { public static final int PRIVATE_FLAG_FORCE_DRAW_STATUS_BAR_BACKGROUND = 0x00020000; /** + * Flag to indicate that this window needs Sustained Performance Mode if + * the device supports it. + * @hide + */ + public static final int PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE = 0x00020000; + + /** * Control flags that are private to the platform. * @hide */ diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index 1e6c585da12d..928fcc03255a 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -8,6 +8,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION; +import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; import static android.view.WindowManager.LayoutParams.TYPE_DREAM; @@ -128,6 +129,9 @@ class WindowSurfacePlacer { private boolean mTraversalScheduled; private int mDeferDepth = 0; + private boolean mSustainedPerformanceModeEnabled = false; + private boolean mSustainedPerformanceModeCurrent = false; + private static final class LayerAndToken { public int layer; public AppWindowToken token; @@ -288,7 +292,7 @@ class WindowSurfacePlacer { mButtonBrightness = -1; mUserActivityTimeout = -1; mObscureApplicationContentOnSecondaryDisplays = false; - + mSustainedPerformanceModeCurrent = false; mService.mTransactionSequence++; final DisplayContent defaultDisplay = mService.getDefaultDisplayContentLocked(); @@ -487,6 +491,13 @@ class WindowSurfacePlacer { mUserActivityTimeout); } + if (mSustainedPerformanceModeCurrent != mSustainedPerformanceModeEnabled) { + mSustainedPerformanceModeEnabled = mSustainedPerformanceModeCurrent; + mService.mPowerManagerInternal.powerHint( + mService.mPowerManagerInternal.POWER_HINT_SUSTAINED_PERFORMANCE_MODE, + (mSustainedPerformanceModeEnabled ? 1 : 0)); + } + if (mService.mTurnOnScreen) { if (mService.mAllowTheaterModeWakeFromLayout || Settings.Global.getInt(mService.mContext.getContentResolver(), @@ -1409,6 +1420,7 @@ class WindowSurfacePlacer { final LayoutParams attrs = w.mAttrs; final int attrFlags = attrs.flags; final boolean canBeSeen = w.isDisplayedLw(); + final int privateflags = attrs.privateFlags; if (canBeSeen && w.isObscuringFullscreen(dispInfo)) { // This window completely covers everything behind it, @@ -1469,6 +1481,9 @@ class WindowSurfacePlacer { && w.mAttrs.preferredDisplayModeId != 0) { mPreferredModeId = w.mAttrs.preferredDisplayModeId; } + if ((privateflags & PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE) != 0) { + mSustainedPerformanceModeCurrent = true; + } } } } |