blob: b472047bd6d871e782c22aa04eca48900b1da83f [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
221 void hideLayer(uint32_t id) {
222 setFlags(id, layer_state_t::eLayerHidden, layer_state_t::eLayerHidden);
223 }
224
225 void showLayer(uint32_t id) { setFlags(id, layer_state_t::eLayerHidden, 0); }
226
227 void setColor(uint32_t id, half3 rgb = half3(1._hf, 1._hf, 1._hf)) {
228 std::vector<TransactionState> transactions;
229 transactions.emplace_back();
230 transactions.back().states.push_back({});
231 transactions.back().states.front().state.what = layer_state_t::eColorChanged;
232 transactions.back().states.front().state.color.rgb = rgb;
233 transactions.back().states.front().layerId = id;
234 mLifecycleManager.applyTransactions(transactions);
235 }
236
237 void setLayerStack(uint32_t id, int32_t layerStack) {
238 std::vector<TransactionState> transactions;
239 transactions.emplace_back();
240 transactions.back().states.push_back({});
241
242 transactions.back().states.front().state.what = layer_state_t::eLayerStackChanged;
243 transactions.back().states.front().layerId = id;
244 transactions.back().states.front().state.layerStack = ui::LayerStack::fromValue(layerStack);
245 mLifecycleManager.applyTransactions(transactions);
246 }
247
248 void setTouchableRegion(uint32_t id, Region region) {
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::eInputInfoChanged;
254 transactions.back().states.front().layerId = id;
255 transactions.back().states.front().state.windowInfoHandle =
256 sp<gui::WindowInfoHandle>::make();
257 auto inputInfo = transactions.back().states.front().state.windowInfoHandle->editInfo();
258 inputInfo->touchableRegion = region;
259 inputInfo->token = sp<BBinder>::make();
260 mLifecycleManager.applyTransactions(transactions);
261 }
262
263 void setInputInfo(uint32_t id, std::function<void(gui::WindowInfo&)> configureInput) {
264 std::vector<TransactionState> transactions;
265 transactions.emplace_back();
266 transactions.back().states.push_back({});
267
268 transactions.back().states.front().state.what = layer_state_t::eInputInfoChanged;
269 transactions.back().states.front().layerId = id;
270 transactions.back().states.front().state.windowInfoHandle =
271 sp<gui::WindowInfoHandle>::make();
272 auto inputInfo = transactions.back().states.front().state.windowInfoHandle->editInfo();
273 if (!inputInfo->token) {
274 inputInfo->token = sp<BBinder>::make();
275 }
276 configureInput(*inputInfo);
277
278 mLifecycleManager.applyTransactions(transactions);
279 }
280
281 void setTouchableRegionCrop(uint32_t id, Region region, uint32_t touchCropId,
282 bool replaceTouchableRegionWithCrop) {
283 std::vector<TransactionState> transactions;
284 transactions.emplace_back();
285 transactions.back().states.push_back({});
286
287 transactions.back().states.front().state.what = layer_state_t::eInputInfoChanged;
288 transactions.back().states.front().layerId = id;
289 transactions.back().states.front().state.windowInfoHandle =
290 sp<gui::WindowInfoHandle>::make();
291 auto inputInfo = transactions.back().states.front().state.windowInfoHandle->editInfo();
292 inputInfo->touchableRegion = region;
293 inputInfo->replaceTouchableRegionWithCrop = replaceTouchableRegionWithCrop;
294 transactions.back().states.front().touchCropId = touchCropId;
295
296 inputInfo->token = sp<BBinder>::make();
297 mLifecycleManager.applyTransactions(transactions);
298 }
299
300 void setBackgroundBlurRadius(uint32_t id, uint32_t backgroundBlurRadius) {
301 std::vector<TransactionState> transactions;
302 transactions.emplace_back();
303 transactions.back().states.push_back({});
304
305 transactions.back().states.front().state.what = layer_state_t::eBackgroundBlurRadiusChanged;
306 transactions.back().states.front().layerId = id;
307 transactions.back().states.front().state.backgroundBlurRadius = backgroundBlurRadius;
308 mLifecycleManager.applyTransactions(transactions);
309 }
310
311 void setFrameRateSelectionPriority(uint32_t id, int32_t priority) {
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::eFrameRateSelectionPriority;
317 transactions.back().states.front().layerId = id;
318 transactions.back().states.front().state.frameRateSelectionPriority = priority;
319 mLifecycleManager.applyTransactions(transactions);
320 }
321
322 void setFrameRate(uint32_t id, float frameRate, int8_t compatibility,
323 int8_t changeFrameRateStrategy) {
324 std::vector<TransactionState> transactions;
325 transactions.emplace_back();
326 transactions.back().states.push_back({});
327
328 transactions.back().states.front().state.what = layer_state_t::eFrameRateChanged;
329 transactions.back().states.front().layerId = id;
330 transactions.back().states.front().state.frameRate = frameRate;
331 transactions.back().states.front().state.frameRateCompatibility = compatibility;
332 transactions.back().states.front().state.changeFrameRateStrategy = changeFrameRateStrategy;
333 mLifecycleManager.applyTransactions(transactions);
334 }
335
Vishnu Nair5c61a012024-08-05 21:14:39 -0700336 void setFrameRate(uint32_t id, Layer::FrameRate framerate) {
337 std::vector<TransactionState> transactions;
338 transactions.emplace_back();
339 transactions.back().states.push_back({});
340
341 transactions.back().states.front().state.what = layer_state_t::eFrameRateChanged;
342 transactions.back().states.front().layerId = id;
343 transactions.back().states.front().state.frameRate = framerate.vote.rate.getValue();
344 transactions.back().states.front().state.frameRateCompatibility = 0;
345 transactions.back().states.front().state.changeFrameRateStrategy = 0;
346 mLifecycleManager.applyTransactions(transactions);
347 }
348
Vishnu Nair532d6452024-07-14 22:05:12 -0700349 void setFrameRateCategory(uint32_t id, int8_t frameRateCategory) {
350 std::vector<TransactionState> transactions;
351 transactions.emplace_back();
352 transactions.back().states.push_back({});
353
354 transactions.back().states.front().state.what = layer_state_t::eFrameRateCategoryChanged;
355 transactions.back().states.front().layerId = id;
356 transactions.back().states.front().state.frameRateCategory = frameRateCategory;
357 mLifecycleManager.applyTransactions(transactions);
358 }
359
360 void setFrameRateSelectionStrategy(uint32_t id, int8_t strategy) {
361 std::vector<TransactionState> transactions;
362 transactions.emplace_back();
363 transactions.back().states.push_back({});
364
365 transactions.back().states.front().state.what =
366 layer_state_t::eFrameRateSelectionStrategyChanged;
367 transactions.back().states.front().layerId = id;
368 transactions.back().states.front().state.frameRateSelectionStrategy = strategy;
369 mLifecycleManager.applyTransactions(transactions);
370 }
371
372 void setDefaultFrameRateCompatibility(uint32_t id, int8_t defaultFrameRateCompatibility) {
373 std::vector<TransactionState> transactions;
374 transactions.emplace_back();
375 transactions.back().states.push_back({});
376
377 transactions.back().states.front().state.what =
378 layer_state_t::eDefaultFrameRateCompatibilityChanged;
379 transactions.back().states.front().layerId = id;
380 transactions.back().states.front().state.defaultFrameRateCompatibility =
381 defaultFrameRateCompatibility;
382 mLifecycleManager.applyTransactions(transactions);
383 }
384
385 void setRoundedCorners(uint32_t id, float radius) {
386 std::vector<TransactionState> transactions;
387 transactions.emplace_back();
388 transactions.back().states.push_back({});
389
390 transactions.back().states.front().state.what = layer_state_t::eCornerRadiusChanged;
391 transactions.back().states.front().layerId = id;
392 transactions.back().states.front().state.cornerRadius = radius;
393 mLifecycleManager.applyTransactions(transactions);
394 }
395
396 void setBuffer(uint32_t id, std::shared_ptr<renderengine::ExternalTexture> texture) {
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::eBufferChanged;
402 transactions.back().states.front().layerId = id;
403 transactions.back().states.front().externalTexture = texture;
404 transactions.back().states.front().state.bufferData =
405 std::make_shared<fake::BufferData>(texture->getId(), texture->getWidth(),
406 texture->getHeight(), texture->getPixelFormat(),
407 texture->getUsage());
408 mLifecycleManager.applyTransactions(transactions);
409 }
410
411 void setBuffer(uint32_t id) {
412 static uint64_t sBufferId = 1;
413 setBuffer(id,
414 std::make_shared<renderengine::mock::
415 FakeExternalTexture>(1U /*width*/, 1U /*height*/,
416 sBufferId++,
417 HAL_PIXEL_FORMAT_RGBA_8888,
418 GRALLOC_USAGE_PROTECTED /*usage*/));
419 }
420
Vishnu Nair5c61a012024-08-05 21:14:39 -0700421 void setFrontBuffer(uint32_t id) {
422 static uint64_t sBufferId = 1;
423 setBuffer(id,
424 std::make_shared<renderengine::mock::FakeExternalTexture>(
425 1U /*width*/, 1U /*height*/, sBufferId++, HAL_PIXEL_FORMAT_RGBA_8888,
426 GRALLOC_USAGE_PROTECTED | AHARDWAREBUFFER_USAGE_FRONT_BUFFER /*usage*/));
427 }
428
Vishnu Nair532d6452024-07-14 22:05:12 -0700429 void setBufferCrop(uint32_t id, const Rect& bufferCrop) {
430 std::vector<TransactionState> transactions;
431 transactions.emplace_back();
432 transactions.back().states.push_back({});
433
434 transactions.back().states.front().state.what = layer_state_t::eBufferCropChanged;
435 transactions.back().states.front().layerId = id;
436 transactions.back().states.front().state.bufferCrop = bufferCrop;
437 mLifecycleManager.applyTransactions(transactions);
438 }
439
440 void setDamageRegion(uint32_t id, const Region& damageRegion) {
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::eSurfaceDamageRegionChanged;
446 transactions.back().states.front().layerId = id;
447 transactions.back().states.front().state.surfaceDamageRegion = damageRegion;
448 mLifecycleManager.applyTransactions(transactions);
449 }
450
451 void setDataspace(uint32_t id, ui::Dataspace dataspace) {
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::eDataspaceChanged;
457 transactions.back().states.front().layerId = id;
458 transactions.back().states.front().state.dataspace = dataspace;
459 mLifecycleManager.applyTransactions(transactions);
460 }
461
462 void setMatrix(uint32_t id, float dsdx, float dtdx, float dtdy, float dsdy) {
463 layer_state_t::matrix22_t matrix{dsdx, dtdx, dtdy, dsdy};
464
465 std::vector<TransactionState> transactions;
466 transactions.emplace_back();
467 transactions.back().states.push_back({});
468
469 transactions.back().states.front().state.what = layer_state_t::eMatrixChanged;
470 transactions.back().states.front().layerId = id;
471 transactions.back().states.front().state.matrix = matrix;
472 mLifecycleManager.applyTransactions(transactions);
473 }
474
475 void setShadowRadius(uint32_t id, float shadowRadius) {
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::eShadowRadiusChanged;
481 transactions.back().states.front().layerId = id;
482 transactions.back().states.front().state.shadowRadius = shadowRadius;
483 mLifecycleManager.applyTransactions(transactions);
484 }
485
486 void setTrustedOverlay(uint32_t id, gui::TrustedOverlay trustedOverlay) {
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::eTrustedOverlayChanged;
492 transactions.back().states.front().layerId = id;
493 transactions.back().states.front().state.trustedOverlay = trustedOverlay;
494 mLifecycleManager.applyTransactions(transactions);
495 }
496
497 void setDropInputMode(uint32_t id, gui::DropInputMode dropInputMode) {
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::eDropInputModeChanged;
503 transactions.back().states.front().layerId = id;
504 transactions.back().states.front().state.dropInputMode = dropInputMode;
505 mLifecycleManager.applyTransactions(transactions);
506 }
507
Vishnu Nair39a74a92024-07-29 19:01:50 +0000508 void setGameMode(uint32_t id, gui::GameMode gameMode) {
509 std::vector<TransactionState> transactions;
510 transactions.emplace_back();
511 transactions.back().states.push_back({});
512 transactions.back().states.front().state.what = layer_state_t::eMetadataChanged;
513 transactions.back().states.front().state.metadata = LayerMetadata();
514 transactions.back().states.front().state.metadata.setInt32(METADATA_GAME_MODE,
515 static_cast<int32_t>(gameMode));
516 transactions.back().states.front().layerId = id;
517 mLifecycleManager.applyTransactions(transactions);
518 }
519
Marzia Favaroa7632662024-05-24 16:42:54 +0000520 void setEdgeExtensionEffect(uint32_t id, int edge) {
521 std::vector<TransactionState> transactions;
522 transactions.emplace_back();
523 transactions.back().states.push_back({});
524
525 transactions.back().states.front().layerId = id;
526 transactions.back().states.front().state.what |= layer_state_t::eEdgeExtensionChanged;
527 transactions.back().states.front().state.edgeExtensionParameters =
528 gui::EdgeExtensionParameters();
529 transactions.back().states.front().state.edgeExtensionParameters.extendLeft = edge & LEFT;
530 transactions.back().states.front().state.edgeExtensionParameters.extendRight = edge & RIGHT;
531 transactions.back().states.front().state.edgeExtensionParameters.extendTop = edge & TOP;
532 transactions.back().states.front().state.edgeExtensionParameters.extendBottom =
533 edge & BOTTOM;
534 mLifecycleManager.applyTransactions(transactions);
535 }
536
Vishnu Nair532d6452024-07-14 22:05:12 -0700537private:
538 LayerLifecycleManager& mLifecycleManager;
539};
540
541} // namespace android::surfaceflinger::frontend