1fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown/* 2fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Copyright (C) 2012 The Android Open Source Project 3fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 4fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * you may not use this file except in compliance with the License. 6fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * You may obtain a copy of the License at 7fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 8fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 10fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Unless required by applicable law or agreed to in writing, software 11fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * See the License for the specific language governing permissions and 14fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * limitations under the License. 15fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 16fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 17fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownpackage com.android.server.display; 18fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 194ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownimport android.graphics.Rect; 204ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brownimport android.hardware.display.DisplayViewport; 2164a55af0ac700baecb0877235eb42caac59a3560Jeff Brownimport android.os.IBinder; 224ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownimport android.view.Surface; 233866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopianimport android.view.SurfaceControl; 244ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 254ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownimport java.io.PrintWriter; 2664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 27fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown/** 28fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Represents a physical display device such as the built-in display 29848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * an external monitor, or a WiFi display. 30bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * <p> 314ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Display devices are guarded by the {@link DisplayManagerService.SyncRoot} lock. 32bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * </p> 33fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 344ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownabstract class DisplayDevice { 35bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private final DisplayAdapter mDisplayAdapter; 36bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private final IBinder mDisplayToken; 37361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale private final String mUniqueId; 38bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 394ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown // The display device does not manage these properties itself, they are set by 404ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown // the display manager service. The display device shouldn't really be looking at these. 414ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown private int mCurrentLayerStack = -1; 424ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown private int mCurrentOrientation = -1; 4363f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian private Rect mCurrentLayerStackRect; 4463f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian private Rect mCurrentDisplayRect; 454ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 46cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown // The display device owns its surface, but it should only set it 474ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown // within a transaction from performTraversalInTransactionLocked. 48cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown private Surface mCurrentSurface; 494ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 50361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale public DisplayDevice(DisplayAdapter displayAdapter, IBinder displayToken, String uniqueId) { 51bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mDisplayAdapter = displayAdapter; 52bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mDisplayToken = displayToken; 53361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale mUniqueId = uniqueId; 54bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 55bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 56848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown /** 57bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * Gets the display adapter that owns the display device. 58848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * 59848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * @return The display adapter. 60848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown */ 614ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public final DisplayAdapter getAdapterLocked() { 62bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown return mDisplayAdapter; 63bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 64848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown 65848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown /** 6664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * Gets the Surface Flinger display token for this display. 6764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * 6864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * @return The display token, or null if the display is not being managed 6964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * by Surface Flinger. 7064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown */ 714ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public final IBinder getDisplayTokenLocked() { 72bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown return mDisplayToken; 73bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 7464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 7564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown /** 764ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Gets the name of the display device. 774ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * 784ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * @return The display device name. 794ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 804ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public final String getNameLocked() { 814ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return getDisplayDeviceInfoLocked().name; 824ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 834ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 844ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 85361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale * Returns the unique id of the display device. 86361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale */ 87361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale public final String getUniqueId() { 88361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale return mUniqueId; 89361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale } 90361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale 91361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale /** 92848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * Gets information about the display device. 93848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * 944ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * The information returned should not change between calls unless the display 954ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * adapter sent a {@link DisplayAdapter#DISPLAY_DEVICE_EVENT_CHANGED} event and 964ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * {@link #applyPendingDisplayDeviceInfoChangesLocked()} has been called to apply 974ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * the pending changes. 984ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * 994ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * @return The display device info, which should be treated as immutable by the caller. 1004ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * The display device should allocate a new display device info object whenever 1014ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * the data changes. 1024ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 1034ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public abstract DisplayDeviceInfo getDisplayDeviceInfoLocked(); 1044ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1054ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 1064ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Applies any pending changes to the observable state of the display device 1074ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * if the display adapter sent a {@link DisplayAdapter#DISPLAY_DEVICE_EVENT_CHANGED} event. 1084ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 1094ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public void applyPendingDisplayDeviceInfoChangesLocked() { 1104ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1114ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1124ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 1134ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Gives the display device a chance to update its properties while in a transaction. 1144ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 1154ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public void performTraversalInTransactionLocked() { 1164ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1174ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1184ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 119037c33eae74bee2774897d969d48947f9abe254fJeff Brown * Sets the display state, if supported. 120e75926d6dc49878682631508c996e472d79a8d41Jeff Brown * 121e75926d6dc49878682631508c996e472d79a8d41Jeff Brown * @return A runnable containing work to be deferred until after we have 122e75926d6dc49878682631508c996e472d79a8d41Jeff Brown * exited the critical section, or null if none. 1239e316a1a2a8d734315bbd56a85308f9657a92913Jeff Brown */ 124e75926d6dc49878682631508c996e472d79a8d41Jeff Brown public Runnable requestDisplayStateLocked(int state) { 125e75926d6dc49878682631508c996e472d79a8d41Jeff Brown return null; 1269e316a1a2a8d734315bbd56a85308f9657a92913Jeff Brown } 1279e316a1a2a8d734315bbd56a85308f9657a92913Jeff Brown 1289e316a1a2a8d734315bbd56a85308f9657a92913Jeff Brown /** 1293f145a2f958320766ae9240c7a57debc20d578aaMichael Wright * Sets the refresh rate, if supported. 1303f145a2f958320766ae9240c7a57debc20d578aaMichael Wright */ 1313f145a2f958320766ae9240c7a57debc20d578aaMichael Wright public void requestRefreshRateLocked(float refreshRate) { 1323f145a2f958320766ae9240c7a57debc20d578aaMichael Wright } 1333f145a2f958320766ae9240c7a57debc20d578aaMichael Wright 1343f145a2f958320766ae9240c7a57debc20d578aaMichael Wright /** 1354ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Sets the display layer stack while in a transaction. 1364ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 1374ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public final void setLayerStackInTransactionLocked(int layerStack) { 138cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown if (mCurrentLayerStack != layerStack) { 139cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentLayerStack = layerStack; 1403866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopian SurfaceControl.setDisplayLayerStack(mDisplayToken, layerStack); 1414ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1424ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1434ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1444ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 14563f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * Sets the display projection while in a transaction. 14663f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * 14763f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * @param orientation defines the display's orientation 14863f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * @param layerStackRect defines which area of the window manager coordinate 14963f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * space will be used 15063f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * @param displayRect defines where on the display will layerStackRect be 15163f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * mapped to. displayRect is specified post-orientation, that is 15263f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * it uses the orientation seen by the end-user 1534ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 154cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown public final void setProjectionInTransactionLocked(int orientation, 155cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown Rect layerStackRect, Rect displayRect) { 156cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown if (mCurrentOrientation != orientation 157cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown || mCurrentLayerStackRect == null 158cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown || !mCurrentLayerStackRect.equals(layerStackRect) 159cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown || mCurrentDisplayRect == null 160cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown || !mCurrentDisplayRect.equals(displayRect)) { 161cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentOrientation = orientation; 162d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 163cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown if (mCurrentLayerStackRect == null) { 164cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentLayerStackRect = new Rect(); 165cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown } 166cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentLayerStackRect.set(layerStackRect); 167d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 168cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown if (mCurrentDisplayRect == null) { 169cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentDisplayRect = new Rect(); 170cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown } 171cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentDisplayRect.set(displayRect); 172d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 1733866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopian SurfaceControl.setDisplayProjection(mDisplayToken, 174cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown orientation, layerStackRect, displayRect); 1754ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1764ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1774ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1784ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 179cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * Sets the display surface while in a transaction. 1804ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 181cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown public final void setSurfaceInTransactionLocked(Surface surface) { 182cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown if (mCurrentSurface != surface) { 183cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentSurface = surface; 1843866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopian SurfaceControl.setDisplaySurface(mDisplayToken, surface); 1854ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1864ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1874ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1884ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 189d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown * Populates the specified viewport object with orientation, 190d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown * physical and logical rects based on the display's current projection. 191d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown */ 192d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown public final void populateViewportLocked(DisplayViewport viewport) { 193d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown viewport.orientation = mCurrentOrientation; 194d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 195d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown if (mCurrentLayerStackRect != null) { 196d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown viewport.logicalFrame.set(mCurrentLayerStackRect); 197d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } else { 198d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown viewport.logicalFrame.setEmpty(); 199d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } 200d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 201d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown if (mCurrentDisplayRect != null) { 202d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown viewport.physicalFrame.set(mCurrentDisplayRect); 203d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } else { 204d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown viewport.physicalFrame.setEmpty(); 205d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } 20683d616a9c7b9505153d258511eb5c16b552e268dJeff Brown 20783d616a9c7b9505153d258511eb5c16b552e268dJeff Brown boolean isRotated = (mCurrentOrientation == Surface.ROTATION_90 20883d616a9c7b9505153d258511eb5c16b552e268dJeff Brown || mCurrentOrientation == Surface.ROTATION_270); 20983d616a9c7b9505153d258511eb5c16b552e268dJeff Brown DisplayDeviceInfo info = getDisplayDeviceInfoLocked(); 21083d616a9c7b9505153d258511eb5c16b552e268dJeff Brown viewport.deviceWidth = isRotated ? info.height : info.width; 21183d616a9c7b9505153d258511eb5c16b552e268dJeff Brown viewport.deviceHeight = isRotated ? info.width : info.height; 212d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } 213d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 214d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown /** 2154ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Dumps the local state of the display device. 2164ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Does not need to dump the display device info because that is already dumped elsewhere. 217848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown */ 2184ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public void dumpLocked(PrintWriter pw) { 2194ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown pw.println("mAdapter=" + mDisplayAdapter.getName()); 220361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale pw.println("mUniqueId=" + mUniqueId); 221cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown pw.println("mDisplayToken=" + mDisplayToken); 2224ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown pw.println("mCurrentLayerStack=" + mCurrentLayerStack); 2234ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown pw.println("mCurrentOrientation=" + mCurrentOrientation); 224cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown pw.println("mCurrentLayerStackRect=" + mCurrentLayerStackRect); 225cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown pw.println("mCurrentDisplayRect=" + mCurrentDisplayRect); 226cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown pw.println("mCurrentSurface=" + mCurrentSurface); 227bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 228fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown} 229