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; 22b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligandimport android.view.Display; 234ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownimport android.view.Surface; 243866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopianimport android.view.SurfaceControl; 254ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 264ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownimport java.io.PrintWriter; 2764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 28fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown/** 29fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Represents a physical display device such as the built-in display 30848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * an external monitor, or a WiFi display. 31bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * <p> 324ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Display devices are guarded by the {@link DisplayManagerService.SyncRoot} lock. 33bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * </p> 34fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 354ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownabstract class DisplayDevice { 36bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private final DisplayAdapter mDisplayAdapter; 37bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private final IBinder mDisplayToken; 38361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale private final String mUniqueId; 39bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 404ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown // The display device does not manage these properties itself, they are set by 414ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown // the display manager service. The display device shouldn't really be looking at these. 424ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown private int mCurrentLayerStack = -1; 434ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown private int mCurrentOrientation = -1; 4463f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian private Rect mCurrentLayerStackRect; 4563f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian private Rect mCurrentDisplayRect; 464ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 47cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown // The display device owns its surface, but it should only set it 484ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown // within a transaction from performTraversalInTransactionLocked. 49cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown private Surface mCurrentSurface; 504ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 5110acf6d3efde60977d2d2e82b90c53d722d9d357Jeff Brown // DEBUG STATE: Last device info which was written to the log, or null if none. 5210acf6d3efde60977d2d2e82b90c53d722d9d357Jeff Brown // Do not use for any other purpose. 5310acf6d3efde60977d2d2e82b90c53d722d9d357Jeff Brown DisplayDeviceInfo mDebugLastLoggedDeviceInfo; 5410acf6d3efde60977d2d2e82b90c53d722d9d357Jeff Brown 55361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale public DisplayDevice(DisplayAdapter displayAdapter, IBinder displayToken, String uniqueId) { 56bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mDisplayAdapter = displayAdapter; 57bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mDisplayToken = displayToken; 58361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale mUniqueId = uniqueId; 59bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 60bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 61848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown /** 62bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * Gets the display adapter that owns the display device. 63848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * 64848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * @return The display adapter. 65848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown */ 664ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public final DisplayAdapter getAdapterLocked() { 67bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown return mDisplayAdapter; 68bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 69848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown 70848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown /** 7164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * Gets the Surface Flinger display token for this display. 7264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * 7364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * @return The display token, or null if the display is not being managed 7464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * by Surface Flinger. 7564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown */ 764ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public final IBinder getDisplayTokenLocked() { 77bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown return mDisplayToken; 78bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 7964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 8064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown /** 814ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Gets the name of the display device. 824ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * 834ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * @return The display device name. 844ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 854ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public final String getNameLocked() { 864ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return getDisplayDeviceInfoLocked().name; 874ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 884ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 894ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 90361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale * Returns the unique id of the display device. 91361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale */ 92361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale public final String getUniqueId() { 93361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale return mUniqueId; 94361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale } 95361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale 96361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale /** 97848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * Gets information about the display device. 98848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * 994ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * The information returned should not change between calls unless the display 1004ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * adapter sent a {@link DisplayAdapter#DISPLAY_DEVICE_EVENT_CHANGED} event and 1014ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * {@link #applyPendingDisplayDeviceInfoChangesLocked()} has been called to apply 1024ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * the pending changes. 1034ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * 1044ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * @return The display device info, which should be treated as immutable by the caller. 1054ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * The display device should allocate a new display device info object whenever 1064ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * the data changes. 1074ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 1084ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public abstract DisplayDeviceInfo getDisplayDeviceInfoLocked(); 1094ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1104ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 1114ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Applies any pending changes to the observable state of the display device 1124ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * if the display adapter sent a {@link DisplayAdapter#DISPLAY_DEVICE_EVENT_CHANGED} event. 1134ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 1144ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public void applyPendingDisplayDeviceInfoChangesLocked() { 1154ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1164ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1174ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 1184ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Gives the display device a chance to update its properties while in a transaction. 1194ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 1204ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public void performTraversalInTransactionLocked() { 1214ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1224ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1234ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 124037c33eae74bee2774897d969d48947f9abe254fJeff Brown * Sets the display state, if supported. 125e75926d6dc49878682631508c996e472d79a8d41Jeff Brown * 1265d6443bf7c087167e47ea39b13e6af09cb43ad97Jeff Brown * @param state The new display state. 1275d6443bf7c087167e47ea39b13e6af09cb43ad97Jeff Brown * @param brightness The new display brightness. 128e75926d6dc49878682631508c996e472d79a8d41Jeff Brown * @return A runnable containing work to be deferred until after we have 129e75926d6dc49878682631508c996e472d79a8d41Jeff Brown * exited the critical section, or null if none. 1309e316a1a2a8d734315bbd56a85308f9657a92913Jeff Brown */ 1315d6443bf7c087167e47ea39b13e6af09cb43ad97Jeff Brown public Runnable requestDisplayStateLocked(int state, int brightness) { 132e75926d6dc49878682631508c996e472d79a8d41Jeff Brown return null; 1339e316a1a2a8d734315bbd56a85308f9657a92913Jeff Brown } 1349e316a1a2a8d734315bbd56a85308f9657a92913Jeff Brown 1359e316a1a2a8d734315bbd56a85308f9657a92913Jeff Brown /** 136b3b9eb3cfc5b3b3609a5d01258315798b38a5cf9P.Y. Laligand * Sets the mode, if supported. 1373f145a2f958320766ae9240c7a57debc20d578aaMichael Wright */ 13858e829f71d2c525309e5bb5a1c02dc64397df221Michael Wright public void requestColorTransformAndModeInTransactionLocked(int colorTransformId, int modeId) { 1393f145a2f958320766ae9240c7a57debc20d578aaMichael Wright } 1403f145a2f958320766ae9240c7a57debc20d578aaMichael Wright 1413f145a2f958320766ae9240c7a57debc20d578aaMichael Wright /** 1424ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Sets the display layer stack while in a transaction. 1434ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 1444ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public final void setLayerStackInTransactionLocked(int layerStack) { 145cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown if (mCurrentLayerStack != layerStack) { 146cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentLayerStack = layerStack; 1473866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopian SurfaceControl.setDisplayLayerStack(mDisplayToken, layerStack); 1484ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1494ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1504ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1514ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 15263f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * Sets the display projection while in a transaction. 15363f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * 15463f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * @param orientation defines the display's orientation 15563f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * @param layerStackRect defines which area of the window manager coordinate 15663f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * space will be used 15763f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * @param displayRect defines where on the display will layerStackRect be 15863f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * mapped to. displayRect is specified post-orientation, that is 15963f1c43fbef157397869475ef30d23e631b88bbeMathias Agopian * it uses the orientation seen by the end-user 1604ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 161cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown public final void setProjectionInTransactionLocked(int orientation, 162cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown Rect layerStackRect, Rect displayRect) { 163cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown if (mCurrentOrientation != orientation 164cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown || mCurrentLayerStackRect == null 165cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown || !mCurrentLayerStackRect.equals(layerStackRect) 166cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown || mCurrentDisplayRect == null 167cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown || !mCurrentDisplayRect.equals(displayRect)) { 168cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentOrientation = orientation; 169d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 170cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown if (mCurrentLayerStackRect == null) { 171cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentLayerStackRect = new Rect(); 172cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown } 173cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentLayerStackRect.set(layerStackRect); 174d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 175cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown if (mCurrentDisplayRect == null) { 176cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentDisplayRect = new Rect(); 177cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown } 178cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentDisplayRect.set(displayRect); 179d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 1803866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopian SurfaceControl.setDisplayProjection(mDisplayToken, 181cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown orientation, layerStackRect, displayRect); 1824ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1834ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1844ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1854ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 186cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown * Sets the display surface while in a transaction. 1874ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 188cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown public final void setSurfaceInTransactionLocked(Surface surface) { 189cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown if (mCurrentSurface != surface) { 190cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown mCurrentSurface = surface; 1913866f0d581ceaa165710feeee9f37fe1b0d7067dMathias Agopian SurfaceControl.setDisplaySurface(mDisplayToken, surface); 1924ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1934ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1944ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 1954ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 196d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown * Populates the specified viewport object with orientation, 197d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown * physical and logical rects based on the display's current projection. 198d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown */ 199d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown public final void populateViewportLocked(DisplayViewport viewport) { 200d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown viewport.orientation = mCurrentOrientation; 201d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 202d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown if (mCurrentLayerStackRect != null) { 203d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown viewport.logicalFrame.set(mCurrentLayerStackRect); 204d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } else { 205d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown viewport.logicalFrame.setEmpty(); 206d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } 207d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 208d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown if (mCurrentDisplayRect != null) { 209d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown viewport.physicalFrame.set(mCurrentDisplayRect); 210d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } else { 211d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown viewport.physicalFrame.setEmpty(); 212d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } 21383d616a9c7b9505153d258511eb5c16b552e268dJeff Brown 21483d616a9c7b9505153d258511eb5c16b552e268dJeff Brown boolean isRotated = (mCurrentOrientation == Surface.ROTATION_90 21583d616a9c7b9505153d258511eb5c16b552e268dJeff Brown || mCurrentOrientation == Surface.ROTATION_270); 21683d616a9c7b9505153d258511eb5c16b552e268dJeff Brown DisplayDeviceInfo info = getDisplayDeviceInfoLocked(); 21783d616a9c7b9505153d258511eb5c16b552e268dJeff Brown viewport.deviceWidth = isRotated ? info.height : info.width; 21883d616a9c7b9505153d258511eb5c16b552e268dJeff Brown viewport.deviceHeight = isRotated ? info.width : info.height; 219d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown } 220d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown 221d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown /** 2224ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Dumps the local state of the display device. 2234ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Does not need to dump the display device info because that is already dumped elsewhere. 224848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown */ 2254ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public void dumpLocked(PrintWriter pw) { 2264ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown pw.println("mAdapter=" + mDisplayAdapter.getName()); 227361ca21acc0831a9f8bbb259bb30218c252a2aa0Wale Ogunwale pw.println("mUniqueId=" + mUniqueId); 228cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown pw.println("mDisplayToken=" + mDisplayToken); 2294ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown pw.println("mCurrentLayerStack=" + mCurrentLayerStack); 2304ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown pw.println("mCurrentOrientation=" + mCurrentOrientation); 231cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown pw.println("mCurrentLayerStackRect=" + mCurrentLayerStackRect); 232cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown pw.println("mCurrentDisplayRect=" + mCurrentDisplayRect); 233cbad976b2a36a0895ca94510d5208a86f66cf596Jeff Brown pw.println("mCurrentSurface=" + mCurrentSurface); 234bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 235fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown} 236