@@ -103,6 +103,10 @@ public final class DisplayManagerService extends IDisplayManager.Stub {
103103 private static final int MSG_REQUEST_TRAVERSAL = 4 ;
104104 private static final int MSG_UPDATE_VIEWPORT = 5 ;
105105
106+ private static final int DISPLAY_BLANK_STATE_UNKNOWN = 0 ;
107+ private static final int DISPLAY_BLANK_STATE_BLANKED = 1 ;
108+ private static final int DISPLAY_BLANK_STATE_UNBLANKED = 2 ;
109+
106110 private final Context mContext ;
107111 private final boolean mHeadless ;
108112 private final DisplayManagerHandler mHandler ;
@@ -141,6 +145,9 @@ public final class DisplayManagerService extends IDisplayManager.Stub {
141145 new SparseArray <LogicalDisplay >();
142146 private int mNextNonDefaultDisplayId = Display .DEFAULT_DISPLAY + 1 ;
143147
148+ // Set to true if all displays have been blanked by the power manager.
149+ private int mAllDisplayBlankStateFromPowerManager ;
150+
144151 // Set to true when there are pending display changes that have yet to be applied
145152 // to the surface flinger state.
146153 private boolean mPendingTraversal ;
@@ -285,6 +292,40 @@ public void performTraversalInTransactionFromWindowManager() {
285292 }
286293 }
287294
295+ /**
296+ * Called by the power manager to blank all displays.
297+ */
298+ public void blankAllDisplaysFromPowerManager () {
299+ synchronized (mSyncRoot ) {
300+ if (mAllDisplayBlankStateFromPowerManager != DISPLAY_BLANK_STATE_BLANKED ) {
301+ mAllDisplayBlankStateFromPowerManager = DISPLAY_BLANK_STATE_BLANKED ;
302+
303+ final int count = mDisplayDevices .size ();
304+ for (int i = 0 ; i < count ; i ++) {
305+ DisplayDevice device = mDisplayDevices .get (i );
306+ device .blankLocked ();
307+ }
308+ }
309+ }
310+ }
311+
312+ /**
313+ * Called by the power manager to unblank all displays.
314+ */
315+ public void unblankAllDisplaysFromPowerManager () {
316+ synchronized (mSyncRoot ) {
317+ if (mAllDisplayBlankStateFromPowerManager != DISPLAY_BLANK_STATE_UNBLANKED ) {
318+ mAllDisplayBlankStateFromPowerManager = DISPLAY_BLANK_STATE_UNBLANKED ;
319+
320+ final int count = mDisplayDevices .size ();
321+ for (int i = 0 ; i < count ; i ++) {
322+ DisplayDevice device = mDisplayDevices .get (i );
323+ device .unblankLocked ();
324+ }
325+ }
326+ }
327+ }
328+
288329 /**
289330 * Returns information about the specified logical display.
290331 *
@@ -528,6 +569,17 @@ private void handleDisplayDeviceAdded(DisplayDevice device) {
528569 mDisplayDevices .add (device );
529570 addLogicalDisplayLocked (device );
530571 scheduleTraversalLocked (false );
572+
573+ // Blank or unblank the display immediately to match the state requested
574+ // by the power manager (if known).
575+ switch (mAllDisplayBlankStateFromPowerManager ) {
576+ case DISPLAY_BLANK_STATE_BLANKED :
577+ device .blankLocked ();
578+ break ;
579+ case DISPLAY_BLANK_STATE_UNBLANKED :
580+ device .unblankLocked ();
581+ break ;
582+ }
531583 }
532584 }
533585
@@ -788,9 +840,18 @@ public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
788840 }
789841
790842 pw .println ("DISPLAY MANAGER (dumpsys display)" );
791- pw .println (" mHeadless=" + mHeadless );
792843
793844 synchronized (mSyncRoot ) {
845+ pw .println (" mHeadless=" + mHeadless );
846+ pw .println (" mOnlyCode=" + mOnlyCore );
847+ pw .println (" mSafeMode=" + mSafeMode );
848+ pw .println (" mPendingTraversal=" + mPendingTraversal );
849+ pw .println (" mAllDisplayBlankStateFromPowerManager="
850+ + mAllDisplayBlankStateFromPowerManager );
851+ pw .println (" mNextNonDefaultDisplayId=" + mNextNonDefaultDisplayId );
852+ pw .println (" mDefaultViewport=" + mDefaultViewport );
853+ pw .println (" mExternalTouchViewport=" + mExternalTouchViewport );
854+
794855 IndentingPrintWriter ipw = new IndentingPrintWriter (pw , " " );
795856 ipw .increaseIndent ();
796857
@@ -817,10 +878,6 @@ public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
817878 pw .println (" Display " + displayId + ":" );
818879 display .dumpLocked (ipw );
819880 }
820-
821- pw .println ();
822- pw .println ("Default viewport: " + mDefaultViewport );
823- pw .println ("External touch viewport: " + mExternalTouchViewport );
824881 }
825882 }
826883
0 commit comments