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