blob: 97946205ba9f49994281fa29ac223e853d11b252 [file] [log] [blame]
Vishnu Nair532d6452024-07-14 22:05:12 -07001/*
2 * Copyright 2024 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
17#pragma once
18
19#include <gui/fake/BufferData.h>
20#include <renderengine/mock/FakeExternalTexture.h>
21#include <ui/ShadowSettings.h>
22
23#include <Client.h> // temporarily needed for LayerCreationArgs
24#include <FrontEnd/LayerCreationArgs.h>
25#include <FrontEnd/LayerHierarchy.h>
26#include <FrontEnd/LayerLifecycleManager.h>
27#include <FrontEnd/LayerSnapshotBuilder.h>
Vishnu Nair5c61a012024-08-05 21:14:39 -070028#include <Layer.h> // needed for framerate
Vishnu Nair532d6452024-07-14 22:05:12 -070029
30namespace android::surfaceflinger::frontend {
31
32class LayerLifecycleManagerHelper {
33public:
34 LayerLifecycleManagerHelper(LayerLifecycleManager& layerLifecycleManager)
35 : mLifecycleManager(layerLifecycleManager) {}
36 ~LayerLifecycleManagerHelper() = default;
37
38 static LayerCreationArgs createArgs(uint32_t id, bool canBeRoot, uint32_t parentId,
39 uint32_t layerIdToMirror) {
40 LayerCreationArgs args(std::make_optional(id));
41 args.name = "testlayer";
42 args.addToRoot = canBeRoot;
43 args.parentId = parentId;
44 args.layerIdToMirror = layerIdToMirror;
45 return args;
46 }
47
48 static LayerCreationArgs createDisplayMirrorArgs(uint32_t id,
49 ui::LayerStack layerStackToMirror) {
50 LayerCreationArgs args(std::make_optional(id));
51 args.name = "testlayer";
52 args.addToRoot = true;
53 args.layerStackToMirror = layerStackToMirror;
54 return args;
55 }
56
57 static std::unique_ptr<RequestedLayerState> rootLayer(uint32_t id) {
58 return std::make_unique<RequestedLayerState>(createArgs(/*id=*/id, /*canBeRoot=*/true,
59 /*parent=*/UNASSIGNED_LAYER_ID,
60 /*mirror=*/UNASSIGNED_LAYER_ID));
61 }
62
63 static std::unique_ptr<RequestedLayerState> childLayer(uint32_t id, uint32_t parentId) {
64 return std::make_unique<RequestedLayerState>(createArgs(/*id=*/id, /*canBeRoot=*/false,
65 parentId,
66 /*mirror=*/UNASSIGNED_LAYER_ID));
67 }
68
69 static std::vector<TransactionState> setZTransaction(uint32_t id, int32_t z) {
70 std::vector<TransactionState> transactions;
71 transactions.emplace_back();
72 transactions.back().states.push_back({});
73
74 transactions.back().states.front().state.what = layer_state_t::eLayerChanged;
75 transactions.back().states.front().layerId = id;
76 transactions.back().states.front().state.z = z;
77 return transactions;
78 }
79
80 void createRootLayer(uint32_t id) {
81 std::vector<std::unique_ptr<RequestedLayerState>> layers;
82 layers.emplace_back(std::make_unique<RequestedLayerState>(
83 createArgs(/*id=*/id, /*canBeRoot=*/true, /*parent=*/UNASSIGNED_LAYER_ID,
84 /*mirror=*/UNASSIGNED_LAYER_ID)));
85 mLifecycleManager.addLayers(std::move(layers));
86 }
87
Vishnu Nair5c61a012024-08-05 21:14:39 -070088 void createRootLayerWithUid(uint32_t id, gui::Uid uid) {
89 std::vector<std::unique_ptr<RequestedLayerState>> layers;
90 auto args = createArgs(/*id=*/id, /*canBeRoot=*/true, /*parent=*/UNASSIGNED_LAYER_ID,
91 /*mirror=*/UNASSIGNED_LAYER_ID);
92 args.ownerUid = uid.val();
93 layers.emplace_back(std::make_unique<RequestedLayerState>(args));
94 mLifecycleManager.addLayers(std::move(layers));
95 }
96
Vishnu Nair532d6452024-07-14 22:05:12 -070097 void createDisplayMirrorLayer(uint32_t id, ui::LayerStack layerStack) {
98 std::vector<std::unique_ptr<RequestedLayerState>> layers;
99 layers.emplace_back(std::make_unique<RequestedLayerState>(
100 createDisplayMirrorArgs(/*id=*/id, layerStack)));
101 mLifecycleManager.addLayers(std::move(layers));
102 }
103
104 void createLayer(uint32_t id, uint32_t parentId) {
105 std::vector<std::unique_ptr<RequestedLayerState>> layers;
106 layers.emplace_back(std::make_unique<RequestedLayerState>(
107 createArgs(/*id=*/id, /*canBeRoot=*/false, /*parent=*/parentId,
108 /*mirror=*/UNASSIGNED_LAYER_ID)));
109 mLifecycleManager.addLayers(std::move(layers));
110 }
111
112 std::vector<TransactionState> reparentLayerTransaction(uint32_t id, uint32_t newParentId) {
113 std::vector<TransactionState> transactions;
114 transactions.emplace_back();
115 transactions.back().states.push_back({});
116 transactions.back().states.front().parentId = newParentId;
117 transactions.back().states.front().state.what = layer_state_t::eReparent;
118 transactions.back().states.front().relativeParentId = UNASSIGNED_LAYER_ID;
119 transactions.back().states.front().layerId = id;
120 return transactions;
121 }
122
123 void reparentLayer(uint32_t id, uint32_t newParentId) {
124 mLifecycleManager.applyTransactions(reparentLayerTransaction(id, newParentId));
125 }
126
127 std::vector<TransactionState> relativeLayerTransaction(uint32_t id, uint32_t relativeParentId) {
128 std::vector<TransactionState> transactions;
129 transactions.emplace_back();
130 transactions.back().states.push_back({});
131 transactions.back().states.front().relativeParentId = relativeParentId;
132 transactions.back().states.front().state.what = layer_state_t::eRelativeLayerChanged;
133 transactions.back().states.front().layerId = id;
134 return transactions;
135 }
136
137 void reparentRelativeLayer(uint32_t id, uint32_t relativeParentId) {
138 mLifecycleManager.applyTransactions(relativeLayerTransaction(id, relativeParentId));
139 }
140
141 void removeRelativeZ(uint32_t id) {
142 std::vector<TransactionState> transactions;
143 transactions.emplace_back();
144 transactions.back().states.push_back({});
145 transactions.back().states.front().state.what = layer_state_t::eLayerChanged;
146 transactions.back().states.front().layerId = id;
147 mLifecycleManager.applyTransactions(transactions);
148 }
149
150 void setPosition(uint32_t id, float x, float y) {
151 std::vector<TransactionState> transactions;
152 transactions.emplace_back();
153 transactions.back().states.push_back({});
154 transactions.back().states.front().state.what = layer_state_t::ePositionChanged;
155 transactions.back().states.front().state.x = x;
156 transactions.back().states.front().state.y = y;
157 transactions.back().states.front().layerId = id;
158 mLifecycleManager.applyTransactions(transactions);
159 }
160
161 void mirrorLayer(uint32_t id, uint32_t parentId, uint32_t layerIdToMirror) {
162 std::vector<std::unique_ptr<RequestedLayerState>> layers;
163 layers.emplace_back(std::make_unique<RequestedLayerState>(
164 createArgs(/*id=*/id, /*canBeRoot=*/false, /*parent=*/parentId,
165 /*mirror=*/layerIdToMirror)));
166 mLifecycleManager.addLayers(std::move(layers));
167 }
168
169 void updateBackgroundColor(uint32_t id, half alpha) {
170 std::vector<TransactionState> transactions;
171 transactions.emplace_back();
172 transactions.back().states.push_back({});
173 transactions.back().states.front().state.what = layer_state_t::eBackgroundColorChanged;
174 transactions.back().states.front().state.bgColor.a = alpha;
175 transactions.back().states.front().layerId = id;
176 mLifecycleManager.applyTransactions(transactions);
177 }
178
179 void destroyLayerHandle(uint32_t id) { mLifecycleManager.onHandlesDestroyed({{id, "test"}}); }
180
181 void setZ(uint32_t id, int32_t z) {
182 mLifecycleManager.applyTransactions(setZTransaction(id, z));
183 }
184
Vishnu Naira9123c82024-10-03 03:56:44 +0000185 void setCrop(uint32_t id, const FloatRect& crop) {
Vishnu Nair532d6452024-07-14 22:05:12 -0700186 std::vector<TransactionState> transactions;
187 transactions.emplace_back();
188 transactions.back().states.push_back({});
189
190 transactions.back().states.front().state.what = layer_state_t::eCropChanged;
191 transactions.back().states.front().layerId = id;
192 transactions.back().states.front().state.crop = crop;
193 mLifecycleManager.applyTransactions(transactions);
194 }
195
Vishnu Naira9123c82024-10-03 03:56:44 +0000196 void setCrop(uint32_t id, const Rect& crop) { setCrop(id, crop.toFloatRect()); }
197
Vishnu Nair532d6452024-07-14 22:05:12 -0700198 void setFlags(uint32_t id, uint32_t mask, uint32_t flags) {
199 std::vector<TransactionState> transactions;
200 transactions.emplace_back();
201 transactions.back().states.push_back({});
202
203 transactions.back().states.front().state.what = layer_state_t::eFlagsChanged;
204 transactions.back().states.front().state.flags = flags;
205 transactions.back().states.front().state.mask = mask;
206 transactions.back().states.front().layerId = id;
207 mLifecycleManager.applyTransactions(transactions);
208 }
209
210 void setAlpha(uint32_t id, float alpha) {
211 std::vector<TransactionState> transactions;
212 transactions.emplace_back();
213 transactions.back().states.push_back({});
214
215 transactions.back().states.front().state.what = layer_state_t::eAlphaChanged;
216 transactions.back().states.front().layerId = id;
217 transactions.back().states.front().state.color.a = static_cast<half>(alpha);
218 mLifecycleManager.applyTransactions(transactions);
219 }
220
Vishnu Naira4b3a102024-11-05 05:26:38 +0000221 void setAutoRefresh(uint32_t id, bool autoRefresh) {
222 std::vector<TransactionState> transactions;
223 transactions.emplace_back();
224 transactions.back().states.push_back({});
225
226 transactions.back().states.front().state.what = layer_state_t::eAutoRefreshChanged;
227 transactions.back().states.front().layerId = id;
228 transactions.back().states.front().state.autoRefresh = autoRefresh;
229 mLifecycleManager.applyTransactions(transactions);
230 }
231
Vishnu Nair532d6452024-07-14 22:05:12 -0700232 void hideLayer(uint32_t id) {
233 setFlags(id, layer_state_t::eLayerHidden, layer_state_t::eLayerHidden);
234 }
235
236 void showLayer(uint32_t id) { setFlags(id, layer_state_t::eLayerHidden, 0); }
237
238 void setColor(uint32_t id, half3 rgb = half3(1._hf, 1._hf, 1._hf)) {
239 std::vector<TransactionState> transactions;
240 transactions.emplace_back();
241 transactions.back().states.push_back({});
242 transactions.back().states.front().state.what = layer_state_t::eColorChanged;
243 transactions.back().states.front().state.color.rgb = rgb;
244 transactions.back().states.front().layerId = id;
245 mLifecycleManager.applyTransactions(transactions);
246 }
247
248 void setLayerStack(uint32_t id, int32_t layerStack) {
249 std::vector<TransactionState> transactions;
250 transactions.emplace_back();
251 transactions.back().states.push_back({});
252
253 transactions.back().states.front().state.what = layer_state_t::eLayerStackChanged;
254 transactions.back().states.front().layerId = id;
255 transactions.back().states.front().state.layerStack = ui::LayerStack::fromValue(layerStack);
256 mLifecycleManager.applyTransactions(transactions);
257 }
258
259 void setTouchableRegion(uint32_t id, Region region) {
260 std::vector<TransactionState> transactions;
261 transactions.emplace_back();
262 transactions.back().states.push_back({});
263
264 transactions.back().states.front().state.what = layer_state_t::eInputInfoChanged;
265 transactions.back().states.front().layerId = id;
266 transactions.back().states.front().state.windowInfoHandle =
267 sp<gui::WindowInfoHandle>::make();
268 auto inputInfo = transactions.back().states.front().state.windowInfoHandle->editInfo();
269 inputInfo->touchableRegion = region;
270 inputInfo->token = sp<BBinder>::make();
271 mLifecycleManager.applyTransactions(transactions);
272 }
273
274 void setInputInfo(uint32_t id, std::function<void(gui::WindowInfo&)> configureInput) {
275 std::vector<TransactionState> transactions;
276 transactions.emplace_back();
277 transactions.back().states.push_back({});
278
279 transactions.back().states.front().state.what = layer_state_t::eInputInfoChanged;
280 transactions.back().states.front().layerId = id;
281 transactions.back().states.front().state.windowInfoHandle =
282 sp<gui::WindowInfoHandle>::make();
283 auto inputInfo = transactions.back().states.front().state.windowInfoHandle->editInfo();
284 if (!inputInfo->token) {
285 inputInfo->token = sp<BBinder>::make();
286 }
287 configureInput(*inputInfo);
288
289 mLifecycleManager.applyTransactions(transactions);
290 }
291
292 void setTouchableRegionCrop(uint32_t id, Region region, uint32_t touchCropId,
293 bool replaceTouchableRegionWithCrop) {
294 std::vector<TransactionState> transactions;
295 transactions.emplace_back();
296 transactions.back().states.push_back({});
297
298 transactions.back().states.front().state.what = layer_state_t::eInputInfoChanged;
299 transactions.back().states.front().layerId = id;
300 transactions.back().states.front().state.windowInfoHandle =
301 sp<gui::WindowInfoHandle>::make();
302 auto inputInfo = transactions.back().states.front().state.windowInfoHandle->editInfo();
303 inputInfo->touchableRegion = region;
304 inputInfo->replaceTouchableRegionWithCrop = replaceTouchableRegionWithCrop;
305 transactions.back().states.front().touchCropId = touchCropId;
306
307 inputInfo->token = sp<BBinder>::make();
308 mLifecycleManager.applyTransactions(transactions);
309 }
310
311 void setBackgroundBlurRadius(uint32_t id, uint32_t backgroundBlurRadius) {
312 std::vector<TransactionState> transactions;
313 transactions.emplace_back();
314 transactions.back().states.push_back({});
315
316 transactions.back().states.front().state.what = layer_state_t::eBackgroundBlurRadiusChanged;
317 transactions.back().states.front().layerId = id;
318 transactions.back().states.front().state.backgroundBlurRadius = backgroundBlurRadius;
319 mLifecycleManager.applyTransactions(transactions);
320 }
321
322 void setFrameRateSelectionPriority(uint32_t id, int32_t priority) {
323 std::vector<TransactionState> transactions;
324 transactions.emplace_back();
325 transactions.back().states.push_back({});
326
327 transactions.back().states.front().state.what = layer_state_t::eFrameRateSelectionPriority;
328 transactions.back().states.front().layerId = id;
329 transactions.back().states.front().state.frameRateSelectionPriority = priority;
330 mLifecycleManager.applyTransactions(transactions);
331 }
332
333 void setFrameRate(uint32_t id, float frameRate, int8_t compatibility,
334 int8_t changeFrameRateStrategy) {
335 std::vector<TransactionState> transactions;
336 transactions.emplace_back();
337 transactions.back().states.push_back({});
338
339 transactions.back().states.front().state.what = layer_state_t::eFrameRateChanged;
340 transactions.back().states.front().layerId = id;
341 transactions.back().states.front().state.frameRate = frameRate;
342 transactions.back().states.front().state.frameRateCompatibility = compatibility;
343 transactions.back().states.front().state.changeFrameRateStrategy = changeFrameRateStrategy;
344 mLifecycleManager.applyTransactions(transactions);
345 }
346
Vishnu Nair5c61a012024-08-05 21:14:39 -0700347 void setFrameRate(uint32_t id, Layer::FrameRate framerate) {
348 std::vector<TransactionState> transactions;
349 transactions.emplace_back();
350 transactions.back().states.push_back({});
351
352 transactions.back().states.front().state.what = layer_state_t::eFrameRateChanged;
353 transactions.back().states.front().layerId = id;
354 transactions.back().states.front().state.frameRate = framerate.vote.rate.getValue();
355 transactions.back().states.front().state.frameRateCompatibility = 0;
356 transactions.back().states.front().state.changeFrameRateStrategy = 0;
357 mLifecycleManager.applyTransactions(transactions);
358 }
359
Vishnu Nair532d6452024-07-14 22:05:12 -0700360 void setFrameRateCategory(uint32_t id, int8_t frameRateCategory) {
361 std::vector<TransactionState> transactions;
362 transactions.emplace_back();
363 transactions.back().states.push_back({});
364
365 transactions.back().states.front().state.what = layer_state_t::eFrameRateCategoryChanged;
366 transactions.back().states.front().layerId = id;
367 transactions.back().states.front().state.frameRateCategory = frameRateCategory;
368 mLifecycleManager.applyTransactions(transactions);
369 }
370
371 void setFrameRateSelectionStrategy(uint32_t id, int8_t strategy) {
372 std::vector<TransactionState> transactions;
373 transactions.emplace_back();
374 transactions.back().states.push_back({});
375
376 transactions.back().states.front().state.what =
377 layer_state_t::eFrameRateSelectionStrategyChanged;
378 transactions.back().states.front().layerId = id;
379 transactions.back().states.front().state.frameRateSelectionStrategy = strategy;
380 mLifecycleManager.applyTransactions(transactions);
381 }
382
383 void setDefaultFrameRateCompatibility(uint32_t id, int8_t defaultFrameRateCompatibility) {
384 std::vector<TransactionState> transactions;
385 transactions.emplace_back();
386 transactions.back().states.push_back({});
387
388 transactions.back().states.front().state.what =
389 layer_state_t::eDefaultFrameRateCompatibilityChanged;
390 transactions.back().states.front().layerId = id;
391 transactions.back().states.front().state.defaultFrameRateCompatibility =
392 defaultFrameRateCompatibility;
393 mLifecycleManager.applyTransactions(transactions);
394 }
395
396 void setRoundedCorners(uint32_t id, float radius) {
397 std::vector<TransactionState> transactions;
398 transactions.emplace_back();
399 transactions.back().states.push_back({});
400
401 transactions.back().states.front().state.what = layer_state_t::eCornerRadiusChanged;
402 transactions.back().states.front().layerId = id;
403 transactions.back().states.front().state.cornerRadius = radius;
404 mLifecycleManager.applyTransactions(transactions);
405 }
406
407 void setBuffer(uint32_t id, std::shared_ptr<renderengine::ExternalTexture> texture) {
408 std::vector<TransactionState> transactions;
409 transactions.emplace_back();
410 transactions.back().states.push_back({});
411
412 transactions.back().states.front().state.what = layer_state_t::eBufferChanged;
413 transactions.back().states.front().layerId = id;
414 transactions.back().states.front().externalTexture = texture;
415 transactions.back().states.front().state.bufferData =
416 std::make_shared<fake::BufferData>(texture->getId(), texture->getWidth(),
417 texture->getHeight(), texture->getPixelFormat(),
418 texture->getUsage());
419 mLifecycleManager.applyTransactions(transactions);
420 }
421
422 void setBuffer(uint32_t id) {
423 static uint64_t sBufferId = 1;
424 setBuffer(id,
425 std::make_shared<renderengine::mock::
426 FakeExternalTexture>(1U /*width*/, 1U /*height*/,
427 sBufferId++,
428 HAL_PIXEL_FORMAT_RGBA_8888,
429 GRALLOC_USAGE_PROTECTED /*usage*/));
430 }
431
Vishnu Nair5c61a012024-08-05 21:14:39 -0700432 void setFrontBuffer(uint32_t id) {
433 static uint64_t sBufferId = 1;
434 setBuffer(id,
435 std::make_shared<renderengine::mock::FakeExternalTexture>(
436 1U /*width*/, 1U /*height*/, sBufferId++, HAL_PIXEL_FORMAT_RGBA_8888,
437 GRALLOC_USAGE_PROTECTED | AHARDWAREBUFFER_USAGE_FRONT_BUFFER /*usage*/));
438 }
439
Vishnu Nair532d6452024-07-14 22:05:12 -0700440 void setBufferCrop(uint32_t id, const Rect& bufferCrop) {
441 std::vector<TransactionState> transactions;
442 transactions.emplace_back();
443 transactions.back().states.push_back({});
444
445 transactions.back().states.front().state.what = layer_state_t::eBufferCropChanged;
446 transactions.back().states.front().layerId = id;
447 transactions.back().states.front().state.bufferCrop = bufferCrop;
448 mLifecycleManager.applyTransactions(transactions);
449 }
450
451 void setDamageRegion(uint32_t id, const Region& damageRegion) {
452 std::vector<TransactionState> transactions;
453 transactions.emplace_back();
454 transactions.back().states.push_back({});
455
456 transactions.back().states.front().state.what = layer_state_t::eSurfaceDamageRegionChanged;
457 transactions.back().states.front().layerId = id;
458 transactions.back().states.front().state.surfaceDamageRegion = damageRegion;
459 mLifecycleManager.applyTransactions(transactions);
460 }
461
462 void setDataspace(uint32_t id, ui::Dataspace dataspace) {
463 std::vector<TransactionState> transactions;
464 transactions.emplace_back();
465 transactions.back().states.push_back({});
466
467 transactions.back().states.front().state.what = layer_state_t::eDataspaceChanged;
468 transactions.back().states.front().layerId = id;
469 transactions.back().states.front().state.dataspace = dataspace;
470 mLifecycleManager.applyTransactions(transactions);
471 }
472
473 void setMatrix(uint32_t id, float dsdx, float dtdx, float dtdy, float dsdy) {
474 layer_state_t::matrix22_t matrix{dsdx, dtdx, dtdy, dsdy};
475
476 std::vector<TransactionState> transactions;
477 transactions.emplace_back();
478 transactions.back().states.push_back({});
479
480 transactions.back().states.front().state.what = layer_state_t::eMatrixChanged;
481 transactions.back().states.front().layerId = id;
482 transactions.back().states.front().state.matrix = matrix;
483 mLifecycleManager.applyTransactions(transactions);
484 }
485
486 void setShadowRadius(uint32_t id, float shadowRadius) {
487 std::vector<TransactionState> transactions;
488 transactions.emplace_back();
489 transactions.back().states.push_back({});
490
491 transactions.back().states.front().state.what = layer_state_t::eShadowRadiusChanged;
492 transactions.back().states.front().layerId = id;
493 transactions.back().states.front().state.shadowRadius = shadowRadius;
494 mLifecycleManager.applyTransactions(transactions);
495 }
496
497 void setTrustedOverlay(uint32_t id, gui::TrustedOverlay trustedOverlay) {
498 std::vector<TransactionState> transactions;
499 transactions.emplace_back();
500 transactions.back().states.push_back({});
501
502 transactions.back().states.front().state.what = layer_state_t::eTrustedOverlayChanged;
503 transactions.back().states.front().layerId = id;
504 transactions.back().states.front().state.trustedOverlay = trustedOverlay;
505 mLifecycleManager.applyTransactions(transactions);
506 }
507
508 void setDropInputMode(uint32_t id, gui::DropInputMode dropInputMode) {
509 std::vector<TransactionState> transactions;
510 transactions.emplace_back();
511 transactions.back().states.push_back({});
512
513 transactions.back().states.front().state.what = layer_state_t::eDropInputModeChanged;
514 transactions.back().states.front().layerId = id;
515 transactions.back().states.front().state.dropInputMode = dropInputMode;
516 mLifecycleManager.applyTransactions(transactions);
517 }
518
Vishnu Nair39a74a92024-07-29 19:01:50 +0000519 void setGameMode(uint32_t id, gui::GameMode gameMode) {
520 std::vector<TransactionState> transactions;
521 transactions.emplace_back();
522 transactions.back().states.push_back({});
523 transactions.back().states.front().state.what = layer_state_t::eMetadataChanged;
524 transactions.back().states.front().state.metadata = LayerMetadata();
525 transactions.back().states.front().state.metadata.setInt32(METADATA_GAME_MODE,
526 static_cast<int32_t>(gameMode));
527 transactions.back().states.front().layerId = id;
528 mLifecycleManager.applyTransactions(transactions);
529 }
530
Marzia Favaroa7632662024-05-24 16:42:54 +0000531 void setEdgeExtensionEffect(uint32_t id, int edge) {
532 std::vector<TransactionState> transactions;
533 transactions.emplace_back();
534 transactions.back().states.push_back({});
535
536 transactions.back().states.front().layerId = id;
537 transactions.back().states.front().state.what |= layer_state_t::eEdgeExtensionChanged;
538 transactions.back().states.front().state.edgeExtensionParameters =
539 gui::EdgeExtensionParameters();
540 transactions.back().states.front().state.edgeExtensionParameters.extendLeft = edge & LEFT;
541 transactions.back().states.front().state.edgeExtensionParameters.extendRight = edge & RIGHT;
542 transactions.back().states.front().state.edgeExtensionParameters.extendTop = edge & TOP;
543 transactions.back().states.front().state.edgeExtensionParameters.extendBottom =
544 edge & BOTTOM;
545 mLifecycleManager.applyTransactions(transactions);
546 }
547
Vishnu Nair532d6452024-07-14 22:05:12 -0700548private:
549 LayerLifecycleManager& mLifecycleManager;
550};
551
552} // namespace android::surfaceflinger::frontend