summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2012-03-08 10:47:02 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-03-08 10:47:02 -0800
commit250069bf6bf3d7e2ef85c49e0cd100e80c3c8b7d (patch)
tree5dbcb720953c2462948ea42160fc5cef0d1b4556 /core
parentcd40f4a062d73088462eaca6c3e778440c1ccdd8 (diff)
parent7e4e561bc717a6eea4e0d06ec4173ad27420425f (diff)
downloadframeworks_base-250069bf6bf3d7e2ef85c49e0cd100e80c3c8b7d.zip
frameworks_base-250069bf6bf3d7e2ef85c49e0cd100e80c3c8b7d.tar.gz
frameworks_base-250069bf6bf3d7e2ef85c49e0cd100e80c3c8b7d.tar.bz2
Merge "Ignore draw requests when the display is off"
Diffstat (limited to 'core')
-rw-r--r--core/java/android/view/IWindow.aidl1
-rw-r--r--core/java/android/view/View.java2
-rw-r--r--core/java/android/view/ViewRootImpl.java38
-rw-r--r--core/java/com/android/internal/view/BaseIWindow.java3
4 files changed, 42 insertions, 2 deletions
diff --git a/core/java/android/view/IWindow.aidl b/core/java/android/view/IWindow.aidl
index 715fa7b..acb1387 100644
--- a/core/java/android/view/IWindow.aidl
+++ b/core/java/android/view/IWindow.aidl
@@ -49,6 +49,7 @@ oneway interface IWindow {
boolean reportDraw, in Configuration newConfig);
void dispatchAppVisibility(boolean visible);
void dispatchGetNewSurface();
+ void dispatchScreenStatus(boolean on);
/**
* Tell the window that it is either gaining or losing focus. Keep it up
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 9457067..ac0e17c 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -14871,6 +14871,8 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
boolean mHardwareAccelerationRequested;
HardwareRenderer mHardwareRenderer;
+ boolean mScreenOn;
+
/**
* Scale factor used by the compatibility mode
*/
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 80d4c53..7fd05c3 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -46,6 +46,7 @@ import android.os.LatencyTimer;
import android.os.Looper;
import android.os.Message;
import android.os.ParcelFileDescriptor;
+import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -390,6 +391,9 @@ public final class ViewRootImpl implements ViewParent,
mProfileRendering = Boolean.parseBoolean(
SystemProperties.get(PROPERTY_PROFILE_RENDERING, "false"));
mChoreographer = Choreographer.getInstance();
+
+ PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+ mAttachInfo.mScreenOn = powerManager.isScreenOn();
}
/**
@@ -757,6 +761,16 @@ public final class ViewRootImpl implements ViewParent,
scheduleTraversals();
}
+ void handleScreenStatusChange(boolean on) {
+ if (on != mAttachInfo.mScreenOn) {
+ mAttachInfo.mScreenOn = on;
+ if (on) {
+ mFullRedrawNeeded = true;
+ scheduleTraversals();
+ }
+ }
+ }
+
/**
* {@inheritDoc}
*/
@@ -1886,6 +1900,8 @@ public final class ViewRootImpl implements ViewParent,
}
private void performDraw() {
+ if (!mAttachInfo.mScreenOn) return;
+
final long drawStartTime;
if (ViewDebug.DEBUG_LATENCY) {
drawStartTime = System.nanoTime();
@@ -2018,8 +2034,7 @@ public final class ViewRootImpl implements ViewParent,
}
if (!dirty.isEmpty() || mIsAnimating) {
- if (mAttachInfo.mHardwareRenderer != null
- && mAttachInfo.mHardwareRenderer.isEnabled()) {
+ if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) {
// Draw with hardware renderer.
mIsAnimating = false;
mHardwareYOffset = yoff;
@@ -2485,6 +2500,7 @@ public final class ViewRootImpl implements ViewParent,
private final static int MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_VIEW_ID = 21;
private final static int MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_TEXT = 22;
private final static int MSG_PROCESS_INPUT_EVENTS = 23;
+ private final static int MSG_DISPATCH_SCREEN_STATUS = 24;
final class ViewRootHandler extends Handler {
@Override
@@ -2741,6 +2757,11 @@ public final class ViewRootImpl implements ViewParent,
.findAccessibilityNodeInfosByTextUiThread(msg);
}
} break;
+ case MSG_DISPATCH_SCREEN_STATUS: {
+ if (mView != null) {
+ handleScreenStatusChange(msg.arg1 == 1);
+ }
+ } break;
}
}
}
@@ -4121,6 +4142,12 @@ public final class ViewRootImpl implements ViewParent,
mHandler.sendMessage(msg);
}
+ public void dispatchScreenStatusChange(boolean on) {
+ Message msg = mHandler.obtainMessage(MSG_DISPATCH_SCREEN_STATUS);
+ msg.arg1 = on ? 1 : 0;
+ mHandler.sendMessage(msg);
+ }
+
public void dispatchGetNewSurface() {
Message msg = mHandler.obtainMessage(MSG_DISPATCH_GET_NEW_SURFACE);
mHandler.sendMessage(msg);
@@ -4322,6 +4349,13 @@ public final class ViewRootImpl implements ViewParent,
}
}
+ public void dispatchScreenStatus(boolean on) {
+ final ViewRootImpl viewAncestor = mViewAncestor.get();
+ if (viewAncestor != null) {
+ viewAncestor.dispatchScreenStatusChange(on);
+ }
+ }
+
public void dispatchGetNewSurface() {
final ViewRootImpl viewAncestor = mViewAncestor.get();
if (viewAncestor != null) {
diff --git a/core/java/com/android/internal/view/BaseIWindow.java b/core/java/com/android/internal/view/BaseIWindow.java
index b227700..e695f8e 100644
--- a/core/java/com/android/internal/view/BaseIWindow.java
+++ b/core/java/com/android/internal/view/BaseIWindow.java
@@ -49,6 +49,9 @@ public class BaseIWindow extends IWindow.Stub {
public void dispatchGetNewSurface() {
}
+ public void dispatchScreenStatus(boolean on) {
+ }
+
public void windowFocusChanged(boolean hasFocus, boolean touchEnabled) {
}