Loading core/java/android/view/Surface.java +18 −0 Original line number Diff line number Diff line Loading @@ -266,6 +266,8 @@ public class Surface implements Parcelable { IBinder displayToken, int orientation, Rect layerStackRect, Rect displayRect); private static native boolean nativeGetDisplayInfo( IBinder displayToken, PhysicalDisplayInfo outInfo); private static native void nativeBlankDisplay(IBinder displayToken); private static native void nativeUnblankDisplay(IBinder displayToken); private native void nativeCopyFrom(Surface other); private native void nativeTransferFrom(Surface other); Loading Loading @@ -638,6 +640,22 @@ public class Surface implements Parcelable { return nativeGetDisplayInfo(displayToken, outInfo); } /** @hide */ public static void blankDisplay(IBinder displayToken) { if (displayToken == null) { throw new IllegalArgumentException("displayToken must not be null"); } nativeBlankDisplay(displayToken); } /** @hide */ public static void unblankDisplay(IBinder displayToken) { if (displayToken == null) { throw new IllegalArgumentException("displayToken must not be null"); } nativeUnblankDisplay(displayToken); } /** * Copy another surface to this one. This surface now holds a reference * to the same data as the original surface, and is -not- the owner. Loading core/jni/android_view_Surface.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ #include <android_runtime/android_view_SurfaceSession.h> #include <android_runtime/android_graphics_SurfaceTexture.h> #include <utils/misc.h> #include <utils/Log.h> #include <ScopedUtfChars.h> Loading Loading @@ -710,6 +711,22 @@ static jboolean nativeGetDisplayInfo(JNIEnv* env, jclass clazz, return JNI_TRUE; } static void nativeBlankDisplay(JNIEnv* env, jclass clazz, jobject tokenObj) { sp<IBinder> token(ibinderForJavaObject(env, tokenObj)); if (token == NULL) return; ALOGD_IF_SLOW(100, "Excessive delay in blankDisplay() while turning screen off"); SurfaceComposerClient::blankDisplay(token); } static void nativeUnblankDisplay(JNIEnv* env, jclass clazz, jobject tokenObj) { sp<IBinder> token(ibinderForJavaObject(env, tokenObj)); if (token == NULL) return; ALOGD_IF_SLOW(100, "Excessive delay in unblankDisplay() while turning screen on"); SurfaceComposerClient::unblankDisplay(token); } // ---------------------------------------------------------------------------- static void nativeCopyFrom(JNIEnv* env, jobject surfaceObj, jobject otherObj) { Loading Loading @@ -832,6 +849,10 @@ static JNINativeMethod gSurfaceMethods[] = { (void*)nativeSetDisplayProjection }, {"nativeGetDisplayInfo", "(Landroid/os/IBinder;Landroid/view/Surface$PhysicalDisplayInfo;)Z", (void*)nativeGetDisplayInfo }, {"nativeBlankDisplay", "(Landroid/os/IBinder;)V", (void*)nativeBlankDisplay }, {"nativeUnblankDisplay", "(Landroid/os/IBinder;)V", (void*)nativeUnblankDisplay }, {"nativeCopyFrom", "(Landroid/view/Surface;)V", (void*)nativeCopyFrom }, {"nativeTransferFrom", "(Landroid/view/Surface;)V", Loading services/java/com/android/server/display/DisplayDevice.java +12 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,18 @@ abstract class DisplayDevice { public void performTraversalInTransactionLocked() { } /** * Blanks the display, if supported. */ public void blankLocked() { } /** * Unblanks the display, if supported. */ public void unblankLocked() { } /** * Sets the display layer stack while in a transaction. */ Loading services/java/com/android/server/display/DisplayManagerService.java +62 −5 Original line number Diff line number Diff line Loading @@ -103,6 +103,10 @@ public final class DisplayManagerService extends IDisplayManager.Stub { private static final int MSG_REQUEST_TRAVERSAL = 4; private static final int MSG_UPDATE_VIEWPORT = 5; private static final int DISPLAY_BLANK_STATE_UNKNOWN = 0; private static final int DISPLAY_BLANK_STATE_BLANKED = 1; private static final int DISPLAY_BLANK_STATE_UNBLANKED = 2; private final Context mContext; private final boolean mHeadless; private final DisplayManagerHandler mHandler; Loading Loading @@ -141,6 +145,9 @@ public final class DisplayManagerService extends IDisplayManager.Stub { new SparseArray<LogicalDisplay>(); private int mNextNonDefaultDisplayId = Display.DEFAULT_DISPLAY + 1; // Set to true if all displays have been blanked by the power manager. private int mAllDisplayBlankStateFromPowerManager; // Set to true when there are pending display changes that have yet to be applied // to the surface flinger state. private boolean mPendingTraversal; Loading Loading @@ -285,6 +292,40 @@ public final class DisplayManagerService extends IDisplayManager.Stub { } } /** * Called by the power manager to blank all displays. */ public void blankAllDisplaysFromPowerManager() { synchronized (mSyncRoot) { if (mAllDisplayBlankStateFromPowerManager != DISPLAY_BLANK_STATE_BLANKED) { mAllDisplayBlankStateFromPowerManager = DISPLAY_BLANK_STATE_BLANKED; final int count = mDisplayDevices.size(); for (int i = 0; i < count; i++) { DisplayDevice device = mDisplayDevices.get(i); device.blankLocked(); } } } } /** * Called by the power manager to unblank all displays. */ public void unblankAllDisplaysFromPowerManager() { synchronized (mSyncRoot) { if (mAllDisplayBlankStateFromPowerManager != DISPLAY_BLANK_STATE_UNBLANKED) { mAllDisplayBlankStateFromPowerManager = DISPLAY_BLANK_STATE_UNBLANKED; final int count = mDisplayDevices.size(); for (int i = 0; i < count; i++) { DisplayDevice device = mDisplayDevices.get(i); device.unblankLocked(); } } } } /** * Returns information about the specified logical display. * Loading Loading @@ -528,6 +569,17 @@ public final class DisplayManagerService extends IDisplayManager.Stub { mDisplayDevices.add(device); addLogicalDisplayLocked(device); scheduleTraversalLocked(false); // Blank or unblank the display immediately to match the state requested // by the power manager (if known). switch (mAllDisplayBlankStateFromPowerManager) { case DISPLAY_BLANK_STATE_BLANKED: device.blankLocked(); break; case DISPLAY_BLANK_STATE_UNBLANKED: device.unblankLocked(); break; } } } Loading Loading @@ -788,9 +840,18 @@ public final class DisplayManagerService extends IDisplayManager.Stub { } pw.println("DISPLAY MANAGER (dumpsys display)"); pw.println(" mHeadless=" + mHeadless); synchronized (mSyncRoot) { pw.println(" mHeadless=" + mHeadless); pw.println(" mOnlyCode=" + mOnlyCore); pw.println(" mSafeMode=" + mSafeMode); pw.println(" mPendingTraversal=" + mPendingTraversal); pw.println(" mAllDisplayBlankStateFromPowerManager=" + mAllDisplayBlankStateFromPowerManager); pw.println(" mNextNonDefaultDisplayId=" + mNextNonDefaultDisplayId); pw.println(" mDefaultViewport=" + mDefaultViewport); pw.println(" mExternalTouchViewport=" + mExternalTouchViewport); IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " "); ipw.increaseIndent(); Loading @@ -817,10 +878,6 @@ public final class DisplayManagerService extends IDisplayManager.Stub { pw.println(" Display " + displayId + ":"); display.dumpLocked(ipw); } pw.println(); pw.println("Default viewport: " + mDefaultViewport); pw.println("External touch viewport: " + mExternalTouchViewport); } } Loading services/java/com/android/server/display/LocalDisplayAdapter.java +14 −0 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { private DisplayDeviceInfo mInfo; private boolean mHavePendingChanges; private boolean mBlanked; public LocalDisplayDevice(IBinder displayToken, int builtInDisplayId, PhysicalDisplayInfo phys) { Loading Loading @@ -149,11 +150,24 @@ final class LocalDisplayAdapter extends DisplayAdapter { return mInfo; } @Override public void blankLocked() { mBlanked = true; Surface.blankDisplay(getDisplayTokenLocked()); } @Override public void unblankLocked() { mBlanked = false; Surface.unblankDisplay(getDisplayTokenLocked()); } @Override public void dumpLocked(PrintWriter pw) { super.dumpLocked(pw); pw.println("mBuiltInDisplayId=" + mBuiltInDisplayId); pw.println("mPhys=" + mPhys); pw.println("mBlanked=" + mBlanked); } } Loading Loading
core/java/android/view/Surface.java +18 −0 Original line number Diff line number Diff line Loading @@ -266,6 +266,8 @@ public class Surface implements Parcelable { IBinder displayToken, int orientation, Rect layerStackRect, Rect displayRect); private static native boolean nativeGetDisplayInfo( IBinder displayToken, PhysicalDisplayInfo outInfo); private static native void nativeBlankDisplay(IBinder displayToken); private static native void nativeUnblankDisplay(IBinder displayToken); private native void nativeCopyFrom(Surface other); private native void nativeTransferFrom(Surface other); Loading Loading @@ -638,6 +640,22 @@ public class Surface implements Parcelable { return nativeGetDisplayInfo(displayToken, outInfo); } /** @hide */ public static void blankDisplay(IBinder displayToken) { if (displayToken == null) { throw new IllegalArgumentException("displayToken must not be null"); } nativeBlankDisplay(displayToken); } /** @hide */ public static void unblankDisplay(IBinder displayToken) { if (displayToken == null) { throw new IllegalArgumentException("displayToken must not be null"); } nativeUnblankDisplay(displayToken); } /** * Copy another surface to this one. This surface now holds a reference * to the same data as the original surface, and is -not- the owner. Loading
core/jni/android_view_Surface.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ #include <android_runtime/android_view_SurfaceSession.h> #include <android_runtime/android_graphics_SurfaceTexture.h> #include <utils/misc.h> #include <utils/Log.h> #include <ScopedUtfChars.h> Loading Loading @@ -710,6 +711,22 @@ static jboolean nativeGetDisplayInfo(JNIEnv* env, jclass clazz, return JNI_TRUE; } static void nativeBlankDisplay(JNIEnv* env, jclass clazz, jobject tokenObj) { sp<IBinder> token(ibinderForJavaObject(env, tokenObj)); if (token == NULL) return; ALOGD_IF_SLOW(100, "Excessive delay in blankDisplay() while turning screen off"); SurfaceComposerClient::blankDisplay(token); } static void nativeUnblankDisplay(JNIEnv* env, jclass clazz, jobject tokenObj) { sp<IBinder> token(ibinderForJavaObject(env, tokenObj)); if (token == NULL) return; ALOGD_IF_SLOW(100, "Excessive delay in unblankDisplay() while turning screen on"); SurfaceComposerClient::unblankDisplay(token); } // ---------------------------------------------------------------------------- static void nativeCopyFrom(JNIEnv* env, jobject surfaceObj, jobject otherObj) { Loading Loading @@ -832,6 +849,10 @@ static JNINativeMethod gSurfaceMethods[] = { (void*)nativeSetDisplayProjection }, {"nativeGetDisplayInfo", "(Landroid/os/IBinder;Landroid/view/Surface$PhysicalDisplayInfo;)Z", (void*)nativeGetDisplayInfo }, {"nativeBlankDisplay", "(Landroid/os/IBinder;)V", (void*)nativeBlankDisplay }, {"nativeUnblankDisplay", "(Landroid/os/IBinder;)V", (void*)nativeUnblankDisplay }, {"nativeCopyFrom", "(Landroid/view/Surface;)V", (void*)nativeCopyFrom }, {"nativeTransferFrom", "(Landroid/view/Surface;)V", Loading
services/java/com/android/server/display/DisplayDevice.java +12 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,18 @@ abstract class DisplayDevice { public void performTraversalInTransactionLocked() { } /** * Blanks the display, if supported. */ public void blankLocked() { } /** * Unblanks the display, if supported. */ public void unblankLocked() { } /** * Sets the display layer stack while in a transaction. */ Loading
services/java/com/android/server/display/DisplayManagerService.java +62 −5 Original line number Diff line number Diff line Loading @@ -103,6 +103,10 @@ public final class DisplayManagerService extends IDisplayManager.Stub { private static final int MSG_REQUEST_TRAVERSAL = 4; private static final int MSG_UPDATE_VIEWPORT = 5; private static final int DISPLAY_BLANK_STATE_UNKNOWN = 0; private static final int DISPLAY_BLANK_STATE_BLANKED = 1; private static final int DISPLAY_BLANK_STATE_UNBLANKED = 2; private final Context mContext; private final boolean mHeadless; private final DisplayManagerHandler mHandler; Loading Loading @@ -141,6 +145,9 @@ public final class DisplayManagerService extends IDisplayManager.Stub { new SparseArray<LogicalDisplay>(); private int mNextNonDefaultDisplayId = Display.DEFAULT_DISPLAY + 1; // Set to true if all displays have been blanked by the power manager. private int mAllDisplayBlankStateFromPowerManager; // Set to true when there are pending display changes that have yet to be applied // to the surface flinger state. private boolean mPendingTraversal; Loading Loading @@ -285,6 +292,40 @@ public final class DisplayManagerService extends IDisplayManager.Stub { } } /** * Called by the power manager to blank all displays. */ public void blankAllDisplaysFromPowerManager() { synchronized (mSyncRoot) { if (mAllDisplayBlankStateFromPowerManager != DISPLAY_BLANK_STATE_BLANKED) { mAllDisplayBlankStateFromPowerManager = DISPLAY_BLANK_STATE_BLANKED; final int count = mDisplayDevices.size(); for (int i = 0; i < count; i++) { DisplayDevice device = mDisplayDevices.get(i); device.blankLocked(); } } } } /** * Called by the power manager to unblank all displays. */ public void unblankAllDisplaysFromPowerManager() { synchronized (mSyncRoot) { if (mAllDisplayBlankStateFromPowerManager != DISPLAY_BLANK_STATE_UNBLANKED) { mAllDisplayBlankStateFromPowerManager = DISPLAY_BLANK_STATE_UNBLANKED; final int count = mDisplayDevices.size(); for (int i = 0; i < count; i++) { DisplayDevice device = mDisplayDevices.get(i); device.unblankLocked(); } } } } /** * Returns information about the specified logical display. * Loading Loading @@ -528,6 +569,17 @@ public final class DisplayManagerService extends IDisplayManager.Stub { mDisplayDevices.add(device); addLogicalDisplayLocked(device); scheduleTraversalLocked(false); // Blank or unblank the display immediately to match the state requested // by the power manager (if known). switch (mAllDisplayBlankStateFromPowerManager) { case DISPLAY_BLANK_STATE_BLANKED: device.blankLocked(); break; case DISPLAY_BLANK_STATE_UNBLANKED: device.unblankLocked(); break; } } } Loading Loading @@ -788,9 +840,18 @@ public final class DisplayManagerService extends IDisplayManager.Stub { } pw.println("DISPLAY MANAGER (dumpsys display)"); pw.println(" mHeadless=" + mHeadless); synchronized (mSyncRoot) { pw.println(" mHeadless=" + mHeadless); pw.println(" mOnlyCode=" + mOnlyCore); pw.println(" mSafeMode=" + mSafeMode); pw.println(" mPendingTraversal=" + mPendingTraversal); pw.println(" mAllDisplayBlankStateFromPowerManager=" + mAllDisplayBlankStateFromPowerManager); pw.println(" mNextNonDefaultDisplayId=" + mNextNonDefaultDisplayId); pw.println(" mDefaultViewport=" + mDefaultViewport); pw.println(" mExternalTouchViewport=" + mExternalTouchViewport); IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " "); ipw.increaseIndent(); Loading @@ -817,10 +878,6 @@ public final class DisplayManagerService extends IDisplayManager.Stub { pw.println(" Display " + displayId + ":"); display.dumpLocked(ipw); } pw.println(); pw.println("Default viewport: " + mDefaultViewport); pw.println("External touch viewport: " + mExternalTouchViewport); } } Loading
services/java/com/android/server/display/LocalDisplayAdapter.java +14 −0 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { private DisplayDeviceInfo mInfo; private boolean mHavePendingChanges; private boolean mBlanked; public LocalDisplayDevice(IBinder displayToken, int builtInDisplayId, PhysicalDisplayInfo phys) { Loading Loading @@ -149,11 +150,24 @@ final class LocalDisplayAdapter extends DisplayAdapter { return mInfo; } @Override public void blankLocked() { mBlanked = true; Surface.blankDisplay(getDisplayTokenLocked()); } @Override public void unblankLocked() { mBlanked = false; Surface.unblankDisplay(getDisplayTokenLocked()); } @Override public void dumpLocked(PrintWriter pw) { super.dumpLocked(pw); pw.println("mBuiltInDisplayId=" + mBuiltInDisplayId); pw.println("mPhys=" + mPhys); pw.println("mBlanked=" + mBlanked); } } Loading