blob: 62f7c2351e1315465cb397babbcaba09ffbfdea5 [file] [log] [blame]
The Android Open Source Projectedbf3b62009-03-04 03:31:441/*
2 * Copyright (C) 2008 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
Vishnu Nair217d8e62018-09-12 23:34:4917#define LOG_TAG "LayerState"
18
Garfield Tan8a3083e2018-12-03 21:21:0719#include <inttypes.h>
20
The Android Open Source Projectedbf3b62009-03-04 03:31:4421#include <utils/Errors.h>
Mathias Agopianc5b2c0b2009-05-20 02:08:1022#include <binder/Parcel.h>
Mathias Agopian90ac7992012-02-26 02:48:3523#include <gui/ISurfaceComposerClient.h>
Andy McFadden2adaf042012-12-18 17:49:4524#include <gui/IGraphicBufferProducer.h>
Robert Carr4cdc58f2017-08-23 21:22:2025#include <gui/LayerState.h>
The Android Open Source Projectedbf3b62009-03-04 03:31:4426
Steven Thomas62a4cf82020-01-31 20:04:0327#include <cmath>
28
The Android Open Source Projectedbf3b62009-03-04 03:31:4429namespace android {
30
31status_t layer_state_t::write(Parcel& output) const
32{
chaviw308ddba2020-08-11 23:23:5133 SAFE_PARCEL(output.writeStrongBinder, surface);
34 SAFE_PARCEL(output.writeUint64, what);
35 SAFE_PARCEL(output.writeFloat, x);
36 SAFE_PARCEL(output.writeFloat, y);
37 SAFE_PARCEL(output.writeInt32, z);
38 SAFE_PARCEL(output.writeUint32, w);
39 SAFE_PARCEL(output.writeUint32, h);
40 SAFE_PARCEL(output.writeUint32, layerStack);
41 SAFE_PARCEL(output.writeFloat, alpha);
42 SAFE_PARCEL(output.writeUint32, flags);
43 SAFE_PARCEL(output.writeUint32, mask);
44 SAFE_PARCEL(matrix.write, output);
45 SAFE_PARCEL(output.write, crop_legacy);
46 SAFE_PARCEL(output.writeStrongBinder, barrierHandle_legacy);
47 SAFE_PARCEL(output.writeStrongBinder, reparentHandle);
48 SAFE_PARCEL(output.writeUint64, frameNumber_legacy);
49 SAFE_PARCEL(output.writeInt32, overrideScalingMode);
50 SAFE_PARCEL(output.writeStrongBinder, IInterface::asBinder(barrierGbp_legacy));
51 SAFE_PARCEL(output.writeStrongBinder, relativeLayerHandle);
52 SAFE_PARCEL(output.writeStrongBinder, parentHandleForChild);
53 SAFE_PARCEL(output.writeFloat, color.r);
54 SAFE_PARCEL(output.writeFloat, color.g);
55 SAFE_PARCEL(output.writeFloat, color.b);
Robert Carr2c358bf2018-08-08 22:58:1556#ifndef NO_INPUT
chaviw308ddba2020-08-11 23:23:5157 SAFE_PARCEL(inputHandle->writeToParcel, &output);
Robert Carr2c358bf2018-08-08 22:58:1558#endif
chaviw308ddba2020-08-11 23:23:5159 SAFE_PARCEL(output.write, transparentRegion);
60 SAFE_PARCEL(output.writeUint32, transform);
61 SAFE_PARCEL(output.writeBool, transformToDisplayInverse);
62 SAFE_PARCEL(output.write, crop);
63 SAFE_PARCEL(output.write, orientedDisplaySpaceRect);
64
Marissa Wall61c58622018-07-18 17:12:2065 if (buffer) {
chaviw308ddba2020-08-11 23:23:5166 SAFE_PARCEL(output.writeBool, true);
67 SAFE_PARCEL(output.write, *buffer);
Marissa Wall61c58622018-07-18 17:12:2068 } else {
chaviw308ddba2020-08-11 23:23:5169 SAFE_PARCEL(output.writeBool, false);
Marissa Wall61c58622018-07-18 17:12:2070 }
chaviw308ddba2020-08-11 23:23:5171
Marissa Wall61c58622018-07-18 17:12:2072 if (acquireFence) {
chaviw308ddba2020-08-11 23:23:5173 SAFE_PARCEL(output.writeBool, true);
74 SAFE_PARCEL(output.write, *acquireFence);
Marissa Wall61c58622018-07-18 17:12:2075 } else {
chaviw308ddba2020-08-11 23:23:5176 SAFE_PARCEL(output.writeBool, false);
Marissa Wall61c58622018-07-18 17:12:2077 }
chaviw308ddba2020-08-11 23:23:5178
79 SAFE_PARCEL(output.writeUint32, static_cast<uint32_t>(dataspace));
80 SAFE_PARCEL(output.write, hdrMetadata);
81 SAFE_PARCEL(output.write, surfaceDamageRegion);
82 SAFE_PARCEL(output.writeInt32, api);
83
Marissa Wall61c58622018-07-18 17:12:2084 if (sidebandStream) {
chaviw308ddba2020-08-11 23:23:5185 SAFE_PARCEL(output.writeBool, true);
86 SAFE_PARCEL(output.writeNativeHandle, sidebandStream->handle());
Marissa Wall61c58622018-07-18 17:12:2087 } else {
chaviw308ddba2020-08-11 23:23:5188 SAFE_PARCEL(output.writeBool, false);
Marissa Wall61c58622018-07-18 17:12:2089 }
90
chaviw308ddba2020-08-11 23:23:5191 SAFE_PARCEL(output.write, colorTransform.asArray(), 16 * sizeof(float));
92 SAFE_PARCEL(output.writeFloat, cornerRadius);
93 SAFE_PARCEL(output.writeUint32, backgroundBlurRadius);
94 SAFE_PARCEL(output.writeStrongBinder, cachedBuffer.token.promote());
95 SAFE_PARCEL(output.writeUint64, cachedBuffer.id);
96 SAFE_PARCEL(output.writeParcelable, metadata);
97 SAFE_PARCEL(output.writeFloat, bgColorAlpha);
98 SAFE_PARCEL(output.writeUint32, static_cast<uint32_t>(bgColorDataspace));
99 SAFE_PARCEL(output.writeBool, colorSpaceAgnostic);
100 SAFE_PARCEL(output.writeVectorSize, listeners);
Valerie Hau9dab9732019-08-20 16:29:25101
102 for (auto listener : listeners) {
chaviw308ddba2020-08-11 23:23:51103 SAFE_PARCEL(output.writeStrongBinder, listener.transactionCompletedListener);
104 SAFE_PARCEL(output.writeInt64Vector, listener.callbackIds);
Valerie Hau9dab9732019-08-20 16:29:25105 }
chaviw308ddba2020-08-11 23:23:51106 SAFE_PARCEL(output.writeFloat, shadowRadius);
107 SAFE_PARCEL(output.writeInt32, frameRateSelectionPriority);
108 SAFE_PARCEL(output.writeFloat, frameRate);
109 SAFE_PARCEL(output.writeByte, frameRateCompatibility);
110 SAFE_PARCEL(output.writeUint32, fixedTransformHint);
Mathias Agopianac9fa422013-02-12 00:40:36111 return NO_ERROR;
The Android Open Source Projectedbf3b62009-03-04 03:31:44112}
113
114status_t layer_state_t::read(const Parcel& input)
115{
chaviw308ddba2020-08-11 23:23:51116 SAFE_PARCEL(input.readNullableStrongBinder, &surface);
117 SAFE_PARCEL(input.readUint64, &what);
118 SAFE_PARCEL(input.readFloat, &x);
119 SAFE_PARCEL(input.readFloat, &y);
120 SAFE_PARCEL(input.readInt32, &z);
121 SAFE_PARCEL(input.readUint32, &w);
122 SAFE_PARCEL(input.readUint32, &h);
123 SAFE_PARCEL(input.readUint32, &layerStack);
124 SAFE_PARCEL(input.readFloat, &alpha);
Robert Carr2c358bf2018-08-08 22:58:15125
chaviw308ddba2020-08-11 23:23:51126 uint32_t tmpUint32 = 0;
127 SAFE_PARCEL(input.readUint32, &tmpUint32);
128 flags = static_cast<uint8_t>(tmpUint32);
129
130 SAFE_PARCEL(input.readUint32, &tmpUint32);
131 mask = static_cast<uint8_t>(tmpUint32);
132
133 SAFE_PARCEL(matrix.read, input);
134 SAFE_PARCEL(input.read, crop_legacy);
135 SAFE_PARCEL(input.readNullableStrongBinder, &barrierHandle_legacy);
136 SAFE_PARCEL(input.readNullableStrongBinder, &reparentHandle);
137 SAFE_PARCEL(input.readUint64, &frameNumber_legacy);
138 SAFE_PARCEL(input.readInt32, &overrideScalingMode);
139
140 sp<IBinder> tmpBinder;
141 SAFE_PARCEL(input.readNullableStrongBinder, &tmpBinder);
142 barrierGbp_legacy = interface_cast<IGraphicBufferProducer>(tmpBinder);
143
144 float tmpFloat = 0;
145 SAFE_PARCEL(input.readNullableStrongBinder, &relativeLayerHandle);
146 SAFE_PARCEL(input.readNullableStrongBinder, &parentHandleForChild);
147 SAFE_PARCEL(input.readFloat, &tmpFloat);
148 color.r = tmpFloat;
149 SAFE_PARCEL(input.readFloat, &tmpFloat);
150 color.g = tmpFloat;
151 SAFE_PARCEL(input.readFloat, &tmpFloat);
152 color.b = tmpFloat;
Robert Carr2c358bf2018-08-08 22:58:15153#ifndef NO_INPUT
chaviw308ddba2020-08-11 23:23:51154 SAFE_PARCEL(inputHandle->readFromParcel, &input);
Robert Carr2c358bf2018-08-08 22:58:15155#endif
156
chaviw308ddba2020-08-11 23:23:51157 SAFE_PARCEL(input.read, transparentRegion);
158 SAFE_PARCEL(input.readUint32, &transform);
159 SAFE_PARCEL(input.readBool, &transformToDisplayInverse);
160 SAFE_PARCEL(input.read, crop);
161 SAFE_PARCEL(input.read, orientedDisplaySpaceRect);
162
163 bool tmpBool = false;
164 SAFE_PARCEL(input.readBool, &tmpBool);
165 if (tmpBool) {
166 buffer = new GraphicBuffer();
167 SAFE_PARCEL(input.read, *buffer);
Marissa Wall61c58622018-07-18 17:12:20168 }
chaviw308ddba2020-08-11 23:23:51169
170 SAFE_PARCEL(input.readBool, &tmpBool);
171 if (tmpBool) {
172 acquireFence = new Fence();
173 SAFE_PARCEL(input.read, *acquireFence);
Marissa Wall61c58622018-07-18 17:12:20174 }
chaviw308ddba2020-08-11 23:23:51175
176 SAFE_PARCEL(input.readUint32, &tmpUint32);
177 dataspace = static_cast<ui::Dataspace>(tmpUint32);
178
179 SAFE_PARCEL(input.read, hdrMetadata);
180 SAFE_PARCEL(input.read, surfaceDamageRegion);
181 SAFE_PARCEL(input.readInt32, &api);
182 SAFE_PARCEL(input.readBool, &tmpBool);
183 if (tmpBool) {
Marissa Wall61c58622018-07-18 17:12:20184 sidebandStream = NativeHandle::create(input.readNativeHandle(), true);
185 }
186
chaviw308ddba2020-08-11 23:23:51187 SAFE_PARCEL(input.read, &colorTransform, 16 * sizeof(float));
188 SAFE_PARCEL(input.readFloat, &cornerRadius);
189 SAFE_PARCEL(input.readUint32, &backgroundBlurRadius);
190 SAFE_PARCEL(input.readNullableStrongBinder, &tmpBinder);
191 cachedBuffer.token = tmpBinder;
192 SAFE_PARCEL(input.readUint64, &cachedBuffer.id);
193 SAFE_PARCEL(input.readParcelable, &metadata);
Marissa Wallebc2c052019-01-17 03:16:55194
chaviw308ddba2020-08-11 23:23:51195 SAFE_PARCEL(input.readFloat, &bgColorAlpha);
196 SAFE_PARCEL(input.readUint32, &tmpUint32);
197 bgColorDataspace = static_cast<ui::Dataspace>(tmpUint32);
198 SAFE_PARCEL(input.readBool, &colorSpaceAgnostic);
Valerie Haued54efa2019-01-12 04:03:14199
chaviw308ddba2020-08-11 23:23:51200 int32_t numListeners = 0;
201 SAFE_PARCEL_READ_SIZE(input.readInt32, &numListeners, input.dataSize());
Valerie Hau9dab9732019-08-20 16:29:25202 listeners.clear();
203 for (int i = 0; i < numListeners; i++) {
chaviw308ddba2020-08-11 23:23:51204 sp<IBinder> listener;
Valerie Hau9dab9732019-08-20 16:29:25205 std::vector<CallbackId> callbackIds;
chaviw308ddba2020-08-11 23:23:51206 SAFE_PARCEL(input.readNullableStrongBinder, &listener);
207 SAFE_PARCEL(input.readInt64Vector, &callbackIds);
Valerie Hau9dab9732019-08-20 16:29:25208 listeners.emplace_back(listener, callbackIds);
209 }
chaviw308ddba2020-08-11 23:23:51210 SAFE_PARCEL(input.readFloat, &shadowRadius);
211 SAFE_PARCEL(input.readInt32, &frameRateSelectionPriority);
212 SAFE_PARCEL(input.readFloat, &frameRate);
213 SAFE_PARCEL(input.readByte, &frameRateCompatibility);
214 SAFE_PARCEL(input.readUint32, &tmpUint32);
215 fixedTransformHint = static_cast<ui::Transform::RotationFlags>(tmpUint32);
The Android Open Source Projectedbf3b62009-03-04 03:31:44216 return NO_ERROR;
217}
218
Mathias Agopian698c0872011-06-29 02:09:31219status_t ComposerState::write(Parcel& output) const {
Mathias Agopian698c0872011-06-29 02:09:31220 return state.write(output);
221}
222
223status_t ComposerState::read(const Parcel& input) {
Mathias Agopian698c0872011-06-29 02:09:31224 return state.read(input);
225}
226
Marin Shalamanov6ad317c2020-07-29 21:34:07227DisplayState::DisplayState()
228 : what(0),
229 layerStack(0),
230 layerStackSpaceRect(Rect::EMPTY_RECT),
231 orientedDisplaySpaceRect(Rect::EMPTY_RECT),
232 width(0),
233 height(0) {}
Pablo Ceballos60d69222015-08-07 21:47:20234
Mathias Agopian8b33f032012-07-25 03:43:54235status_t DisplayState::write(Parcel& output) const {
chaviw308ddba2020-08-11 23:23:51236 SAFE_PARCEL(output.writeStrongBinder, token);
237 SAFE_PARCEL(output.writeStrongBinder, IInterface::asBinder(surface));
238 SAFE_PARCEL(output.writeUint32, what);
239 SAFE_PARCEL(output.writeUint32, layerStack);
240 SAFE_PARCEL(output.writeUint32, toRotationInt(orientation));
241 SAFE_PARCEL(output.write, layerStackSpaceRect);
242 SAFE_PARCEL(output.write, orientedDisplaySpaceRect);
243 SAFE_PARCEL(output.writeUint32, width);
244 SAFE_PARCEL(output.writeUint32, height);
Mathias Agopian8b33f032012-07-25 03:43:54245 return NO_ERROR;
246}
247
248status_t DisplayState::read(const Parcel& input) {
chaviw308ddba2020-08-11 23:23:51249 SAFE_PARCEL(input.readStrongBinder, &token);
250 sp<IBinder> tmpBinder;
251 SAFE_PARCEL(input.readNullableStrongBinder, &tmpBinder);
252 surface = interface_cast<IGraphicBufferProducer>(tmpBinder);
253
254 SAFE_PARCEL(input.readUint32, &what);
255 SAFE_PARCEL(input.readUint32, &layerStack);
256 uint32_t tmpUint = 0;
257 SAFE_PARCEL(input.readUint32, &tmpUint);
258 orientation = ui::toRotation(tmpUint);
259
260 SAFE_PARCEL(input.read, layerStackSpaceRect);
261 SAFE_PARCEL(input.read, orientedDisplaySpaceRect);
262 SAFE_PARCEL(input.readUint32, &width);
263 SAFE_PARCEL(input.readUint32, &height);
Mathias Agopian8b33f032012-07-25 03:43:54264 return NO_ERROR;
265}
266
Robert Carr2c5f6d22017-09-26 19:30:35267void DisplayState::merge(const DisplayState& other) {
268 if (other.what & eSurfaceChanged) {
269 what |= eSurfaceChanged;
270 surface = other.surface;
271 }
272 if (other.what & eLayerStackChanged) {
273 what |= eLayerStackChanged;
274 layerStack = other.layerStack;
275 }
276 if (other.what & eDisplayProjectionChanged) {
277 what |= eDisplayProjectionChanged;
278 orientation = other.orientation;
Marin Shalamanov6ad317c2020-07-29 21:34:07279 layerStackSpaceRect = other.layerStackSpaceRect;
280 orientedDisplaySpaceRect = other.orientedDisplaySpaceRect;
Robert Carr2c5f6d22017-09-26 19:30:35281 }
282 if (other.what & eDisplaySizeChanged) {
283 what |= eDisplaySizeChanged;
284 width = other.width;
285 height = other.height;
286 }
287}
288
289void layer_state_t::merge(const layer_state_t& other) {
290 if (other.what & ePositionChanged) {
291 what |= ePositionChanged;
292 x = other.x;
293 y = other.y;
294 }
295 if (other.what & eLayerChanged) {
296 what |= eLayerChanged;
chaviw32377582019-05-13 18:15:19297 what &= ~eRelativeLayerChanged;
Robert Carr2c5f6d22017-09-26 19:30:35298 z = other.z;
299 }
300 if (other.what & eSizeChanged) {
301 what |= eSizeChanged;
302 w = other.w;
303 h = other.h;
304 }
305 if (other.what & eAlphaChanged) {
306 what |= eAlphaChanged;
307 alpha = other.alpha;
308 }
309 if (other.what & eMatrixChanged) {
310 what |= eMatrixChanged;
311 matrix = other.matrix;
312 }
313 if (other.what & eTransparentRegionChanged) {
314 what |= eTransparentRegionChanged;
315 transparentRegion = other.transparentRegion;
316 }
317 if (other.what & eFlagsChanged) {
318 what |= eFlagsChanged;
Vishnu Nair996bc422019-07-16 21:15:33319 flags &= ~other.mask;
320 flags |= (other.flags & other.mask);
321 mask |= other.mask;
Robert Carr2c5f6d22017-09-26 19:30:35322 }
323 if (other.what & eLayerStackChanged) {
324 what |= eLayerStackChanged;
325 layerStack = other.layerStack;
326 }
Marissa Wallf58c14b2018-07-24 17:50:43327 if (other.what & eCropChanged_legacy) {
328 what |= eCropChanged_legacy;
329 crop_legacy = other.crop_legacy;
Robert Carr2c5f6d22017-09-26 19:30:35330 }
Lucas Dupin1b6531c2018-07-06 00:18:21331 if (other.what & eCornerRadiusChanged) {
332 what |= eCornerRadiusChanged;
333 cornerRadius = other.cornerRadius;
334 }
Lucas Dupin19c8f0e2019-11-26 01:55:44335 if (other.what & eBackgroundBlurRadiusChanged) {
336 what |= eBackgroundBlurRadiusChanged;
337 backgroundBlurRadius = other.backgroundBlurRadius;
338 }
Marissa Wallf58c14b2018-07-24 17:50:43339 if (other.what & eDeferTransaction_legacy) {
340 what |= eDeferTransaction_legacy;
341 barrierHandle_legacy = other.barrierHandle_legacy;
342 barrierGbp_legacy = other.barrierGbp_legacy;
343 frameNumber_legacy = other.frameNumber_legacy;
Robert Carr2c5f6d22017-09-26 19:30:35344 }
Robert Carr2c5f6d22017-09-26 19:30:35345 if (other.what & eOverrideScalingModeChanged) {
346 what |= eOverrideScalingModeChanged;
347 overrideScalingMode = other.overrideScalingMode;
348 }
Robert Carr2c5f6d22017-09-26 19:30:35349 if (other.what & eReparentChildren) {
350 what |= eReparentChildren;
351 reparentHandle = other.reparentHandle;
352 }
353 if (other.what & eDetachChildren) {
354 what |= eDetachChildren;
355 }
356 if (other.what & eRelativeLayerChanged) {
357 what |= eRelativeLayerChanged;
chaviw32377582019-05-13 18:15:19358 what &= ~eLayerChanged;
Robert Carr2c5f6d22017-09-26 19:30:35359 z = other.z;
360 relativeLayerHandle = other.relativeLayerHandle;
361 }
362 if (other.what & eReparent) {
363 what |= eReparent;
364 parentHandleForChild = other.parentHandleForChild;
365 }
chaviwca27f252018-02-07 00:46:39366 if (other.what & eDestroySurface) {
367 what |= eDestroySurface;
368 }
Marissa Wall61c58622018-07-18 17:12:20369 if (other.what & eTransformChanged) {
370 what |= eTransformChanged;
371 transform = other.transform;
372 }
373 if (other.what & eTransformToDisplayInverseChanged) {
374 what |= eTransformToDisplayInverseChanged;
375 transformToDisplayInverse = other.transformToDisplayInverse;
376 }
377 if (other.what & eCropChanged) {
378 what |= eCropChanged;
379 crop = other.crop;
380 }
Marissa Wall861616d2018-10-22 19:52:23381 if (other.what & eFrameChanged) {
382 what |= eFrameChanged;
Marin Shalamanov6ad317c2020-07-29 21:34:07383 orientedDisplaySpaceRect = other.orientedDisplaySpaceRect;
Marissa Wall861616d2018-10-22 19:52:23384 }
Marissa Wall61c58622018-07-18 17:12:20385 if (other.what & eBufferChanged) {
386 what |= eBufferChanged;
387 buffer = other.buffer;
388 }
389 if (other.what & eAcquireFenceChanged) {
390 what |= eAcquireFenceChanged;
391 acquireFence = other.acquireFence;
392 }
393 if (other.what & eDataspaceChanged) {
394 what |= eDataspaceChanged;
395 dataspace = other.dataspace;
396 }
397 if (other.what & eHdrMetadataChanged) {
398 what |= eHdrMetadataChanged;
399 hdrMetadata = other.hdrMetadata;
400 }
401 if (other.what & eSurfaceDamageRegionChanged) {
402 what |= eSurfaceDamageRegionChanged;
403 surfaceDamageRegion = other.surfaceDamageRegion;
404 }
405 if (other.what & eApiChanged) {
406 what |= eApiChanged;
407 api = other.api;
408 }
409 if (other.what & eSidebandStreamChanged) {
410 what |= eSidebandStreamChanged;
411 sidebandStream = other.sidebandStream;
412 }
Peiyong Lind3788632018-09-18 23:01:31413 if (other.what & eColorTransformChanged) {
414 what |= eColorTransformChanged;
415 colorTransform = other.colorTransform;
416 }
Marissa Wall3dad52d2019-03-22 21:03:19417 if (other.what & eHasListenerCallbacksChanged) {
418 what |= eHasListenerCallbacksChanged;
Marissa Wallc837b5e2018-10-12 17:04:44419 }
Robert Carrd314f162018-08-15 20:12:42420
Robert Carr2c358bf2018-08-08 22:58:15421#ifndef NO_INPUT
422 if (other.what & eInputInfoChanged) {
423 what |= eInputInfoChanged;
Chris Ye0783e992020-06-03 04:34:49424 inputHandle = new InputWindowHandle(*other.inputHandle);
Robert Carr2c358bf2018-08-08 22:58:15425 }
426#endif
427
Marissa Wallebc2c052019-01-17 03:16:55428 if (other.what & eCachedBufferChanged) {
429 what |= eCachedBufferChanged;
430 cachedBuffer = other.cachedBuffer;
431 }
Valerie Haudd0b7572019-01-29 22:59:27432 if (other.what & eBackgroundColorChanged) {
433 what |= eBackgroundColorChanged;
434 color = other.color;
435 bgColorAlpha = other.bgColorAlpha;
436 bgColorDataspace = other.bgColorDataspace;
Valerie Haued54efa2019-01-12 04:03:14437 }
Evan Rosky1f6d6d52018-12-06 18:47:26438 if (other.what & eMetadataChanged) {
439 what |= eMetadataChanged;
440 metadata.merge(other.metadata);
441 }
Vishnu Nairc97b8db2019-10-30 01:19:35442 if (other.what & eShadowRadiusChanged) {
443 what |= eShadowRadiusChanged;
444 shadowRadius = other.shadowRadius;
445 }
Ana Krulecc84d09b2019-11-02 22:10:29446 if (other.what & eFrameRateSelectionPriority) {
447 what |= eFrameRateSelectionPriority;
448 frameRateSelectionPriority = other.frameRateSelectionPriority;
449 }
Steven Thomas3172e202020-01-07 03:25:30450 if (other.what & eFrameRateChanged) {
451 what |= eFrameRateChanged;
452 frameRate = other.frameRate;
Steven Thomas62a4cf82020-01-31 20:04:03453 frameRateCompatibility = other.frameRateCompatibility;
Steven Thomas3172e202020-01-07 03:25:30454 }
Vishnu Nair6213bd92020-05-09 00:42:25455 if (other.what & eFixedTransformHintChanged) {
456 what |= eFixedTransformHintChanged;
457 fixedTransformHint = other.fixedTransformHint;
458 }
Vishnu Nair217d8e62018-09-12 23:34:49459 if ((other.what & what) != other.what) {
460 ALOGE("Unmerged SurfaceComposer Transaction properties. LayerState::merge needs updating? "
Garfield Tan8a3083e2018-12-03 21:21:07461 "other.what=0x%" PRIu64 " what=0x%" PRIu64,
Vishnu Nair217d8e62018-09-12 23:34:49462 other.what, what);
Robert Carrd314f162018-08-15 20:12:42463 }
Robert Carr2c5f6d22017-09-26 19:30:35464}
Mathias Agopian8b33f032012-07-25 03:43:54465
chaviw308ddba2020-08-11 23:23:51466status_t layer_state_t::matrix22_t::write(Parcel& output) const {
467 SAFE_PARCEL(output.writeFloat, dsdx);
468 SAFE_PARCEL(output.writeFloat, dtdx);
469 SAFE_PARCEL(output.writeFloat, dtdy);
470 SAFE_PARCEL(output.writeFloat, dsdy);
471 return NO_ERROR;
472}
473
474status_t layer_state_t::matrix22_t::read(const Parcel& input) {
475 SAFE_PARCEL(input.readFloat, &dsdx);
476 SAFE_PARCEL(input.readFloat, &dtdx);
477 SAFE_PARCEL(input.readFloat, &dtdy);
478 SAFE_PARCEL(input.readFloat, &dsdy);
479 return NO_ERROR;
480}
481
chaviw273171b2018-12-26 19:46:30482// ------------------------------- InputWindowCommands ----------------------------------------
483
Vishnu Naire798b472020-07-23 20:52:21484bool InputWindowCommands::merge(const InputWindowCommands& other) {
485 bool changes = false;
486#ifndef NO_INPUT
487 changes |= !other.focusRequests.empty();
488 focusRequests.insert(focusRequests.end(), std::make_move_iterator(other.focusRequests.begin()),
489 std::make_move_iterator(other.focusRequests.end()));
490#endif
491 changes |= other.syncInputWindows && !syncInputWindows;
chaviwa911b102019-02-14 18:18:33492 syncInputWindows |= other.syncInputWindows;
Vishnu Naire798b472020-07-23 20:52:21493 return changes;
chaviw273171b2018-12-26 19:46:30494}
495
496void InputWindowCommands::clear() {
Vishnu Naire798b472020-07-23 20:52:21497#ifndef NO_INPUT
498 focusRequests.clear();
499#endif
chaviwa911b102019-02-14 18:18:33500 syncInputWindows = false;
chaviw273171b2018-12-26 19:46:30501}
502
chaviw308ddba2020-08-11 23:23:51503status_t InputWindowCommands::write(Parcel& output) const {
Vishnu Naire798b472020-07-23 20:52:21504#ifndef NO_INPUT
chaviw308ddba2020-08-11 23:23:51505 SAFE_PARCEL(output.writeParcelableVector, focusRequests);
Vishnu Naire798b472020-07-23 20:52:21506#endif
chaviw308ddba2020-08-11 23:23:51507 SAFE_PARCEL(output.writeBool, syncInputWindows);
508 return NO_ERROR;
chaviw273171b2018-12-26 19:46:30509}
510
chaviw308ddba2020-08-11 23:23:51511status_t InputWindowCommands::read(const Parcel& input) {
Vishnu Naire798b472020-07-23 20:52:21512#ifndef NO_INPUT
chaviw308ddba2020-08-11 23:23:51513 SAFE_PARCEL(input.readParcelableVector, &focusRequests);
Vishnu Naire798b472020-07-23 20:52:21514#endif
chaviw308ddba2020-08-11 23:23:51515 SAFE_PARCEL(input.readBool, &syncInputWindows);
516 return NO_ERROR;
chaviw273171b2018-12-26 19:46:30517}
518
Steven Thomas62a4cf82020-01-31 20:04:03519bool ValidateFrameRate(float frameRate, int8_t compatibility, const char* inFunctionName) {
520 const char* functionName = inFunctionName != nullptr ? inFunctionName : "call";
521 int floatClassification = std::fpclassify(frameRate);
522 if (frameRate < 0 || floatClassification == FP_INFINITE || floatClassification == FP_NAN) {
523 ALOGE("%s failed - invalid frame rate %f", functionName, frameRate);
524 return false;
525 }
526
527 if (compatibility != ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_DEFAULT &&
528 compatibility != ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_FIXED_SOURCE) {
529 ALOGE("%s failed - invalid compatibility value %d", functionName, compatibility);
530 return false;
531 }
532
533 return true;
534}
535
chaviw618c42d2020-07-24 22:25:08536// ----------------------------------------------------------------------------
537
538status_t CaptureArgs::write(Parcel& output) const {
chaviw308ddba2020-08-11 23:23:51539 SAFE_PARCEL(output.writeInt32, static_cast<int32_t>(pixelFormat));
540 SAFE_PARCEL(output.write, sourceCrop);
541 SAFE_PARCEL(output.writeFloat, frameScale);
542 SAFE_PARCEL(output.writeBool, captureSecureLayers);
543 SAFE_PARCEL(output.writeInt32, uid);
544 return NO_ERROR;
chaviw618c42d2020-07-24 22:25:08545}
546
547status_t CaptureArgs::read(const Parcel& input) {
George Burgess IV4d7aceb2020-07-30 17:01:56548 int32_t format = 0;
chaviw308ddba2020-08-11 23:23:51549 SAFE_PARCEL(input.readInt32, &format);
chaviw618c42d2020-07-24 22:25:08550 pixelFormat = static_cast<ui::PixelFormat>(format);
chaviw308ddba2020-08-11 23:23:51551 SAFE_PARCEL(input.read, sourceCrop);
552 SAFE_PARCEL(input.readFloat, &frameScale);
553 SAFE_PARCEL(input.readBool, &captureSecureLayers);
554 SAFE_PARCEL(input.readInt32, &uid);
555
556 return NO_ERROR;
chaviw618c42d2020-07-24 22:25:08557}
558
559status_t DisplayCaptureArgs::write(Parcel& output) const {
chaviw308ddba2020-08-11 23:23:51560 SAFE_PARCEL(CaptureArgs::write, output);
chaviw618c42d2020-07-24 22:25:08561
chaviw308ddba2020-08-11 23:23:51562 SAFE_PARCEL(output.writeStrongBinder, displayToken);
563 SAFE_PARCEL(output.writeUint32, width);
564 SAFE_PARCEL(output.writeUint32, height);
565 SAFE_PARCEL(output.writeBool, useIdentityTransform);
566 return NO_ERROR;
chaviw618c42d2020-07-24 22:25:08567}
568
569status_t DisplayCaptureArgs::read(const Parcel& input) {
chaviw308ddba2020-08-11 23:23:51570 SAFE_PARCEL(CaptureArgs::read, input);
chaviw618c42d2020-07-24 22:25:08571
chaviw308ddba2020-08-11 23:23:51572 SAFE_PARCEL(input.readStrongBinder, &displayToken);
573 SAFE_PARCEL(input.readUint32, &width);
574 SAFE_PARCEL(input.readUint32, &height);
575 SAFE_PARCEL(input.readBool, &useIdentityTransform);
576 return NO_ERROR;
chaviw618c42d2020-07-24 22:25:08577}
578
579status_t LayerCaptureArgs::write(Parcel& output) const {
chaviw308ddba2020-08-11 23:23:51580 SAFE_PARCEL(CaptureArgs::write, output);
chaviw618c42d2020-07-24 22:25:08581
chaviw308ddba2020-08-11 23:23:51582 SAFE_PARCEL(output.writeStrongBinder, layerHandle);
583 SAFE_PARCEL(output.writeInt32, excludeHandles.size());
chaviw618c42d2020-07-24 22:25:08584 for (auto el : excludeHandles) {
chaviw308ddba2020-08-11 23:23:51585 SAFE_PARCEL(output.writeStrongBinder, el);
chaviw618c42d2020-07-24 22:25:08586 }
chaviw308ddba2020-08-11 23:23:51587 SAFE_PARCEL(output.writeBool, childrenOnly);
588 return NO_ERROR;
chaviw618c42d2020-07-24 22:25:08589}
590
591status_t LayerCaptureArgs::read(const Parcel& input) {
chaviw308ddba2020-08-11 23:23:51592 SAFE_PARCEL(CaptureArgs::read, input);
chaviw618c42d2020-07-24 22:25:08593
chaviw308ddba2020-08-11 23:23:51594 SAFE_PARCEL(input.readStrongBinder, &layerHandle);
chaviw618c42d2020-07-24 22:25:08595
George Burgess IV4d7aceb2020-07-30 17:01:56596 int32_t numExcludeHandles = 0;
chaviw308ddba2020-08-11 23:23:51597 SAFE_PARCEL_READ_SIZE(input.readInt32, &numExcludeHandles, input.dataSize());
chaviw618c42d2020-07-24 22:25:08598 excludeHandles.reserve(numExcludeHandles);
599 for (int i = 0; i < numExcludeHandles; i++) {
600 sp<IBinder> binder;
chaviw308ddba2020-08-11 23:23:51601 SAFE_PARCEL(input.readStrongBinder, &binder);
chaviw618c42d2020-07-24 22:25:08602 excludeHandles.emplace(binder);
603 }
604
chaviw308ddba2020-08-11 23:23:51605 SAFE_PARCEL(input.readBool, &childrenOnly);
606 return NO_ERROR;
chaviw618c42d2020-07-24 22:25:08607}
608
609status_t ScreenCaptureResults::write(Parcel& output) const {
chaviw308ddba2020-08-11 23:23:51610 SAFE_PARCEL(output.write, *buffer);
611 SAFE_PARCEL(output.writeBool, capturedSecureLayers);
612 SAFE_PARCEL(output.writeUint32, static_cast<uint32_t>(capturedDataspace));
613 return NO_ERROR;
chaviw618c42d2020-07-24 22:25:08614}
615
616status_t ScreenCaptureResults::read(const Parcel& input) {
617 buffer = new GraphicBuffer();
chaviw308ddba2020-08-11 23:23:51618 SAFE_PARCEL(input.read, *buffer);
619 SAFE_PARCEL(input.readBool, &capturedSecureLayers);
George Burgess IV4d7aceb2020-07-30 17:01:56620 uint32_t dataspace = 0;
chaviw308ddba2020-08-11 23:23:51621 SAFE_PARCEL(input.readUint32, &dataspace);
chaviw618c42d2020-07-24 22:25:08622 capturedDataspace = static_cast<ui::Dataspace>(dataspace);
chaviw308ddba2020-08-11 23:23:51623 return NO_ERROR;
chaviw618c42d2020-07-24 22:25:08624}
625
The Android Open Source Projectedbf3b62009-03-04 03:31:44626}; // namespace android