summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorMichael Lentine <mlentine@google.com>2015-09-25 10:55:26 -0700
committerMichael Lentine <mlentine@google.com>2015-10-13 14:35:18 -0700
commitd73854dbfde6e034ae0a6d12c52930c5284a08bb (patch)
tree11edcb800718dce53e22fbb7723ebae35fdc63a5 /services
parent31fe464d50bcd4360ac004d44d6938eac762d78d (diff)
downloadframeworks_base-d73854dbfde6e034ae0a6d12c52930c5284a08bb.zip
frameworks_base-d73854dbfde6e034ae0a6d12c52930c5284a08bb.tar.gz
frameworks_base-d73854dbfde6e034ae0a6d12c52930c5284a08bb.tar.bz2
Remove ColorFade resouces when screen off.
This will not destroy the surface but will free up everything else used by ColorFade when the screen is turned off. When it is turned on the surface is dismissed. Bug: 24371570 Change-Id: Iba455cdf225a68b320896f8b35d1e873e694b1e3
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/display/ColorFade.java37
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java2
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerState.java9
3 files changed, 39 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java
index bb4dbc3..835ba17 100644
--- a/services/core/java/com/android/server/display/ColorFade.java
+++ b/services/core/java/com/android/server/display/ColorFade.java
@@ -74,6 +74,7 @@ final class ColorFade {
// Set to true when the animation context has been fully prepared.
private boolean mPrepared;
+ private boolean mCreatedResources;
private int mMode;
private final DisplayManagerInternal mDisplayManagerInternal;
@@ -169,6 +170,7 @@ final class ColorFade {
}
// Done.
+ mCreatedResources = true;
mPrepared = true;
// Dejanking optimization.
@@ -313,18 +315,17 @@ final class ColorFade {
}
/**
- * Dismisses the color fade animation surface and cleans up.
+ * Dismisses the color fade animation resources.
*
- * To prevent stray photons from leaking out after the color fade has been
- * turned off, it is a good idea to defer dismissing the animation until the
- * color fade has been turned back on fully.
+ * This function destroys the resources that are created for the color fade
+ * animation but does not clean up the surface.
*/
- public void dismiss() {
+ public void dismissResources() {
if (DEBUG) {
- Slog.d(TAG, "dismiss");
+ Slog.d(TAG, "dismissResources");
}
- if (mPrepared) {
+ if (mCreatedResources) {
attachEglContext();
try {
destroyScreenshotTexture();
@@ -334,8 +335,28 @@ final class ColorFade {
} finally {
detachEglContext();
}
- destroySurface();
+ // This is being called with no active context so shouldn't be
+ // needed but is safer to not change for now.
GLES20.glFlush();
+ mCreatedResources = false;
+ }
+ }
+
+ /**
+ * Dismisses the color fade animation surface and cleans up.
+ *
+ * To prevent stray photons from leaking out after the color fade has been
+ * turned off, it is a good idea to defer dismissing the animation until the
+ * color fade has been turned back on fully.
+ */
+ public void dismiss() {
+ if (DEBUG) {
+ Slog.d(TAG, "dismiss");
+ }
+
+ if (mPrepared) {
+ dismissResources();
+ destroySurface();
mPrepared = false;
}
}
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 452378f..7b49530 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -837,6 +837,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (mPendingScreenOff && target != Display.STATE_OFF) {
setScreenState(Display.STATE_OFF);
mPendingScreenOff = false;
+ mPowerState.dismissColorFadeResources();
}
if (target == Display.STATE_ON) {
@@ -910,6 +911,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// A black surface is already hiding the contents of the screen.
setScreenState(Display.STATE_OFF);
mPendingScreenOff = false;
+ mPowerState.dismissColorFadeResources();
} else if (performScreenOffTransition
&& mPowerState.prepareColorFade(mContext,
mColorFadeFadesConfig ?
diff --git a/services/core/java/com/android/server/display/DisplayPowerState.java b/services/core/java/com/android/server/display/DisplayPowerState.java
index 2eabd32..9862516 100644
--- a/services/core/java/com/android/server/display/DisplayPowerState.java
+++ b/services/core/java/com/android/server/display/DisplayPowerState.java
@@ -187,7 +187,7 @@ final class DisplayPowerState {
}
/**
- * Dismisses the electron beam surface.
+ * Dismisses the color fade surface.
*/
public void dismissColorFade() {
mColorFade.dismiss();
@@ -195,6 +195,13 @@ final class DisplayPowerState {
mColorFadeReady = true;
}
+ /**
+ * Dismisses the color fade resources.
+ */
+ public void dismissColorFadeResources() {
+ mColorFade.dismissResources();
+ }
+
/**
* Sets the level of the electron beam steering current.
*