blob: d2cbf88aac58d3023e1a8e88ab40f2b0a9c7c3f6 [file] [log] [blame]
Robert Carr3b716242016-08-16 16:02:21 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.server.wm;
18
19import android.graphics.Rect;
20import android.graphics.Region;
21import android.os.IBinder;
22import android.os.Parcel;
Dianne Hackborn5c3296a2017-12-13 17:52:26 -080023import android.os.StrictMode;
Robert Carr3b716242016-08-16 16:02:21 -070024import android.util.Slog;
25import android.view.SurfaceControl;
26
27import java.io.FileDescriptor;
28import java.io.FileOutputStream;
29import java.io.DataOutputStream;
30
31// A surface control subclass which logs events to a FD in binary format.
32// This can be used in our CTS tests to enable a pattern similar to mocking
33// the surface control.
34//
35// See cts/hostsidetests/../../SurfaceTraceReceiver.java for parsing side.
Andrii Kulian283acd22017-08-03 04:03:51 -070036class RemoteSurfaceTrace extends SurfaceControlWithBackground {
Robert Carr3b716242016-08-16 16:02:21 -070037 static final String TAG = "RemoteSurfaceTrace";
38
39 final FileDescriptor mWriteFd;
40 final DataOutputStream mOut;
41
42 final WindowManagerService mService;
43 final WindowState mWindow;
44
Andrii Kulian283acd22017-08-03 04:03:51 -070045 RemoteSurfaceTrace(FileDescriptor fd, SurfaceControlWithBackground wrapped,
46 WindowState window) {
Robert Carr3b716242016-08-16 16:02:21 -070047 super(wrapped);
48
49 mWriteFd = fd;
50 mOut = new DataOutputStream(new FileOutputStream(fd, false));
51
52 mWindow = window;
53 mService = mWindow.mService;
54 }
55
56 @Override
57 public void setAlpha(float alpha) {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -080058 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
59 try {
60 writeFloatEvent("Alpha", alpha);
61 } finally {
62 StrictMode.setThreadPolicy(oldPolicy);
63 }
Robert Carr3b716242016-08-16 16:02:21 -070064 super.setAlpha(alpha);
65 }
66
67 @Override
68 public void setLayer(int zorder) {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -080069 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
70 try {
71 writeIntEvent("Layer", zorder);
72 } finally {
73 StrictMode.setThreadPolicy(oldPolicy);
74 }
Robert Carr3b716242016-08-16 16:02:21 -070075 super.setLayer(zorder);
76 }
77
78 @Override
79 public void setPosition(float x, float y) {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -080080 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
81 try {
82 writeFloatEvent("Position", x, y);
83 } finally {
84 StrictMode.setThreadPolicy(oldPolicy);
85 }
Robert Carr3b716242016-08-16 16:02:21 -070086 super.setPosition(x, y);
87 }
88
89 @Override
90 public void setGeometryAppliesWithResize() {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -080091 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
92 try {
93 writeEvent("GeometryAppliesWithResize");
94 } finally {
95 StrictMode.setThreadPolicy(oldPolicy);
96 }
Robert Carr3b716242016-08-16 16:02:21 -070097 super.setGeometryAppliesWithResize();
98 }
99
100 @Override
101 public void setSize(int w, int h) {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -0800102 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
103 try {
104 writeIntEvent("Size", w, h);
105 } finally {
106 StrictMode.setThreadPolicy(oldPolicy);
107 }
Robert Carr3b716242016-08-16 16:02:21 -0700108 super.setSize(w, h);
109 }
110
111 @Override
112 public void setWindowCrop(Rect crop) {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -0800113 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
114 try {
115 writeRectEvent("Crop", crop);
116 } finally {
117 StrictMode.setThreadPolicy(oldPolicy);
118 }
Robert Carr3b716242016-08-16 16:02:21 -0700119 super.setWindowCrop(crop);
120 }
121
122 @Override
123 public void setFinalCrop(Rect crop) {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -0800124 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
125 try {
126 writeRectEvent("FinalCrop", crop);
127 } finally {
128 StrictMode.setThreadPolicy(oldPolicy);
129 }
Robert Carr3b716242016-08-16 16:02:21 -0700130 super.setFinalCrop(crop);
131 }
132
133 @Override
134 public void setLayerStack(int layerStack) {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -0800135 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
136 try {
137 writeIntEvent("LayerStack", layerStack);
138 } finally {
139 StrictMode.setThreadPolicy(oldPolicy);
140 }
Robert Carr3b716242016-08-16 16:02:21 -0700141 super.setLayerStack(layerStack);
142 }
143
144 @Override
145 public void setMatrix(float dsdx, float dtdx, float dsdy, float dtdy) {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -0800146 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
147 try {
148 writeFloatEvent("Matrix", dsdx, dtdx, dsdy, dtdy);
149 } finally {
150 StrictMode.setThreadPolicy(oldPolicy);
151 }
Robert Carr3b716242016-08-16 16:02:21 -0700152 super.setMatrix(dsdx, dtdx, dsdy, dtdy);
153 }
154
155 @Override
156 public void hide() {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -0800157 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
158 try {
159 writeEvent("Hide");
160 } finally {
161 StrictMode.setThreadPolicy(oldPolicy);
162 }
Robert Carr3b716242016-08-16 16:02:21 -0700163 super.hide();
164 }
165
166 @Override
167 public void show() {
Dianne Hackborn5c3296a2017-12-13 17:52:26 -0800168 final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
169 try {
170 writeEvent("Show");
171 } finally {
172 StrictMode.setThreadPolicy(oldPolicy);
173 }
Robert Carr3b716242016-08-16 16:02:21 -0700174 super.show();
175 }
176
177 private void writeEvent(String tag) {
178 try {
179 mOut.writeUTF(tag);
180 mOut.writeUTF(mWindow.getWindowTag().toString());
Robert Carrb9411082016-09-15 12:51:46 -0700181 writeSigil();
Robert Carr3b716242016-08-16 16:02:21 -0700182 } catch (Exception e) {
Robert Carr68e5c9e2016-09-14 10:50:09 -0700183 RemoteEventTrace.logException(e);
Robert Carr3b716242016-08-16 16:02:21 -0700184 mService.disableSurfaceTrace();
185 }
186 }
187
188 private void writeIntEvent(String tag, int... values) {
189 try {
190 mOut.writeUTF(tag);
191 mOut.writeUTF(mWindow.getWindowTag().toString());
192 for (int value: values) {
193 mOut.writeInt(value);
194 }
Robert Carrb9411082016-09-15 12:51:46 -0700195 writeSigil();
Robert Carr3b716242016-08-16 16:02:21 -0700196 } catch (Exception e) {
Robert Carr68e5c9e2016-09-14 10:50:09 -0700197 RemoteEventTrace.logException(e);
Robert Carr3b716242016-08-16 16:02:21 -0700198 mService.disableSurfaceTrace();
199 }
200 }
201
202 private void writeFloatEvent(String tag, float... values) {
203 try {
204 mOut.writeUTF(tag);
205 mOut.writeUTF(mWindow.getWindowTag().toString());
206 for (float value: values) {
207 mOut.writeFloat(value);
208 }
Robert Carrb9411082016-09-15 12:51:46 -0700209 writeSigil();
Robert Carr3b716242016-08-16 16:02:21 -0700210 } catch (Exception e) {
Robert Carr68e5c9e2016-09-14 10:50:09 -0700211 RemoteEventTrace.logException(e);
Robert Carr3b716242016-08-16 16:02:21 -0700212 mService.disableSurfaceTrace();
213 }
214 }
215
216 private void writeRectEvent(String tag, Rect value) {
Robert Carr68e5c9e2016-09-14 10:50:09 -0700217 writeFloatEvent(tag, value.left, value.top, value.right, value.bottom);
Robert Carr3b716242016-08-16 16:02:21 -0700218 }
Robert Carrb9411082016-09-15 12:51:46 -0700219
220 private void writeSigil() throws Exception {
221 mOut.write(RemoteEventTrace.sigil, 0, 4);
222 }
Robert Carr3b716242016-08-16 16:02:21 -0700223}