1 /* 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> 28 #include <Layer.h> // needed for framerate 29 30 namespace android::surfaceflinger::frontend { 31 32 class LayerLifecycleManagerHelper { 33 public: LayerLifecycleManagerHelper(LayerLifecycleManager & layerLifecycleManager)34 LayerLifecycleManagerHelper(LayerLifecycleManager& layerLifecycleManager) 35 : mLifecycleManager(layerLifecycleManager) {} 36 ~LayerLifecycleManagerHelper() = default; 37 createArgs(uint32_t id,bool canBeRoot,uint32_t parentId,uint32_t layerIdToMirror)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 createDisplayMirrorArgs(uint32_t id,ui::LayerStack layerStackToMirror)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 rootLayer(uint32_t id)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 childLayer(uint32_t id,uint32_t parentId)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 setZTransaction(uint32_t id,int32_t z)69 static std::vector<QueuedTransactionState> setZTransaction(uint32_t id, int32_t z) { 70 std::vector<QueuedTransactionState> 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 createRootLayer(uint32_t id)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 createRootLayerWithUid(uint32_t id,gui::Uid uid)88 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 createDisplayMirrorLayer(uint32_t id,ui::LayerStack layerStack)97 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 createLayer(uint32_t id,uint32_t parentId)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 reparentLayerTransaction(uint32_t id,uint32_t newParentId)112 std::vector<QueuedTransactionState> reparentLayerTransaction(uint32_t id, 113 uint32_t newParentId) { 114 std::vector<QueuedTransactionState> transactions; 115 transactions.emplace_back(); 116 transactions.back().states.push_back({}); 117 transactions.back().states.front().parentId = newParentId; 118 transactions.back().states.front().state.what = layer_state_t::eReparent; 119 transactions.back().states.front().relativeParentId = UNASSIGNED_LAYER_ID; 120 transactions.back().states.front().layerId = id; 121 return transactions; 122 } 123 reparentLayer(uint32_t id,uint32_t newParentId)124 void reparentLayer(uint32_t id, uint32_t newParentId) { 125 mLifecycleManager.applyTransactions(reparentLayerTransaction(id, newParentId)); 126 } 127 relativeLayerTransaction(uint32_t id,uint32_t relativeParentId)128 std::vector<QueuedTransactionState> relativeLayerTransaction(uint32_t id, 129 uint32_t relativeParentId) { 130 std::vector<QueuedTransactionState> transactions; 131 transactions.emplace_back(); 132 transactions.back().states.push_back({}); 133 transactions.back().states.front().relativeParentId = relativeParentId; 134 transactions.back().states.front().state.what = layer_state_t::eRelativeLayerChanged; 135 transactions.back().states.front().layerId = id; 136 return transactions; 137 } 138 reparentRelativeLayer(uint32_t id,uint32_t relativeParentId)139 void reparentRelativeLayer(uint32_t id, uint32_t relativeParentId) { 140 mLifecycleManager.applyTransactions(relativeLayerTransaction(id, relativeParentId)); 141 } 142 removeRelativeZ(uint32_t id)143 void removeRelativeZ(uint32_t id) { 144 std::vector<QueuedTransactionState> transactions; 145 transactions.emplace_back(); 146 transactions.back().states.push_back({}); 147 transactions.back().states.front().state.what = layer_state_t::eLayerChanged; 148 transactions.back().states.front().layerId = id; 149 mLifecycleManager.applyTransactions(transactions); 150 } 151 setPosition(uint32_t id,float x,float y)152 void setPosition(uint32_t id, float x, float y) { 153 std::vector<QueuedTransactionState> transactions; 154 transactions.emplace_back(); 155 transactions.back().states.push_back({}); 156 transactions.back().states.front().state.what = layer_state_t::ePositionChanged; 157 transactions.back().states.front().state.x = x; 158 transactions.back().states.front().state.y = y; 159 transactions.back().states.front().layerId = id; 160 mLifecycleManager.applyTransactions(transactions); 161 } 162 mirrorLayer(uint32_t id,uint32_t parentId,uint32_t layerIdToMirror)163 void mirrorLayer(uint32_t id, uint32_t parentId, uint32_t layerIdToMirror) { 164 std::vector<std::unique_ptr<RequestedLayerState>> layers; 165 layers.emplace_back(std::make_unique<RequestedLayerState>( 166 createArgs(/*id=*/id, /*canBeRoot=*/false, /*parent=*/parentId, 167 /*mirror=*/layerIdToMirror))); 168 mLifecycleManager.addLayers(std::move(layers)); 169 } 170 updateBackgroundColor(uint32_t id,half alpha)171 void updateBackgroundColor(uint32_t id, half alpha) { 172 std::vector<QueuedTransactionState> transactions; 173 transactions.emplace_back(); 174 transactions.back().states.push_back({}); 175 transactions.back().states.front().state.what = layer_state_t::eBackgroundColorChanged; 176 transactions.back().states.front().state.bgColor.a = alpha; 177 transactions.back().states.front().layerId = id; 178 mLifecycleManager.applyTransactions(transactions); 179 } 180 destroyLayerHandle(uint32_t id)181 void destroyLayerHandle(uint32_t id) { mLifecycleManager.onHandlesDestroyed({{id, "test"}}); } 182 setZ(uint32_t id,int32_t z)183 void setZ(uint32_t id, int32_t z) { 184 mLifecycleManager.applyTransactions(setZTransaction(id, z)); 185 } 186 setCrop(uint32_t id,const FloatRect & crop)187 void setCrop(uint32_t id, const FloatRect& crop) { 188 std::vector<QueuedTransactionState> transactions; 189 transactions.emplace_back(); 190 transactions.back().states.push_back({}); 191 192 transactions.back().states.front().state.what = layer_state_t::eCropChanged; 193 transactions.back().states.front().layerId = id; 194 transactions.back().states.front().state.crop = crop; 195 mLifecycleManager.applyTransactions(transactions); 196 } 197 setCrop(uint32_t id,const Rect & crop)198 void setCrop(uint32_t id, const Rect& crop) { setCrop(id, crop.toFloatRect()); } 199 setFlags(uint32_t id,uint32_t mask,uint32_t flags)200 void setFlags(uint32_t id, uint32_t mask, uint32_t flags) { 201 std::vector<QueuedTransactionState> transactions; 202 transactions.emplace_back(); 203 transactions.back().states.push_back({}); 204 205 transactions.back().states.front().state.what = layer_state_t::eFlagsChanged; 206 transactions.back().states.front().state.flags = flags; 207 transactions.back().states.front().state.mask = mask; 208 transactions.back().states.front().layerId = id; 209 mLifecycleManager.applyTransactions(transactions); 210 } 211 setAlpha(uint32_t id,float alpha)212 void setAlpha(uint32_t id, float alpha) { 213 std::vector<QueuedTransactionState> transactions; 214 transactions.emplace_back(); 215 transactions.back().states.push_back({}); 216 217 transactions.back().states.front().state.what = layer_state_t::eAlphaChanged; 218 transactions.back().states.front().layerId = id; 219 transactions.back().states.front().state.color.a = static_cast<half>(alpha); 220 mLifecycleManager.applyTransactions(transactions); 221 } 222 setAutoRefresh(uint32_t id,bool autoRefresh)223 void setAutoRefresh(uint32_t id, bool autoRefresh) { 224 std::vector<QueuedTransactionState> transactions; 225 transactions.emplace_back(); 226 transactions.back().states.push_back({}); 227 228 transactions.back().states.front().state.what = layer_state_t::eAutoRefreshChanged; 229 transactions.back().states.front().layerId = id; 230 transactions.back().states.front().state.autoRefresh = autoRefresh; 231 mLifecycleManager.applyTransactions(transactions); 232 } 233 hideLayer(uint32_t id)234 void hideLayer(uint32_t id) { 235 setFlags(id, layer_state_t::eLayerHidden, layer_state_t::eLayerHidden); 236 } 237 showLayer(uint32_t id)238 void showLayer(uint32_t id) { setFlags(id, layer_state_t::eLayerHidden, 0); } 239 240 void setColor(uint32_t id, half3 rgb = half3(1._hf, 1._hf, 1._hf)) { 241 std::vector<QueuedTransactionState> transactions; 242 transactions.emplace_back(); 243 transactions.back().states.push_back({}); 244 transactions.back().states.front().state.what = layer_state_t::eColorChanged; 245 transactions.back().states.front().state.color.rgb = rgb; 246 transactions.back().states.front().layerId = id; 247 mLifecycleManager.applyTransactions(transactions); 248 } 249 setLayerStack(uint32_t id,int32_t layerStack)250 void setLayerStack(uint32_t id, int32_t layerStack) { 251 std::vector<QueuedTransactionState> transactions; 252 transactions.emplace_back(); 253 transactions.back().states.push_back({}); 254 255 transactions.back().states.front().state.what = layer_state_t::eLayerStackChanged; 256 transactions.back().states.front().layerId = id; 257 transactions.back().states.front().state.layerStack = ui::LayerStack::fromValue(layerStack); 258 mLifecycleManager.applyTransactions(transactions); 259 } 260 setTouchableRegion(uint32_t id,Region region)261 void setTouchableRegion(uint32_t id, Region region) { 262 std::vector<QueuedTransactionState> transactions; 263 transactions.emplace_back(); 264 transactions.back().states.push_back({}); 265 266 transactions.back().states.front().state.what = layer_state_t::eInputInfoChanged; 267 transactions.back().states.front().layerId = id; 268 auto inputInfo = transactions.back().states.front().state.editWindowInfo(); 269 *inputInfo = {}; 270 inputInfo->touchableRegion = region; 271 inputInfo->token = sp<BBinder>::make(); 272 mLifecycleManager.applyTransactions(transactions); 273 } 274 setInputInfo(uint32_t id,std::function<void (gui::WindowInfo &)> configureInput)275 void setInputInfo(uint32_t id, std::function<void(gui::WindowInfo&)> configureInput) { 276 std::vector<QueuedTransactionState> transactions; 277 transactions.emplace_back(); 278 transactions.back().states.push_back({}); 279 280 transactions.back().states.front().state.what = layer_state_t::eInputInfoChanged; 281 transactions.back().states.front().layerId = id; 282 auto inputInfo = transactions.back().states.front().state.editWindowInfo(); 283 *inputInfo = {}; 284 if (!inputInfo->token) { 285 inputInfo->token = sp<BBinder>::make(); 286 } 287 configureInput(*inputInfo); 288 289 mLifecycleManager.applyTransactions(transactions); 290 } 291 setTouchableRegionCrop(uint32_t id,Region region,uint32_t touchCropId,bool replaceTouchableRegionWithCrop)292 void setTouchableRegionCrop(uint32_t id, Region region, uint32_t touchCropId, 293 bool replaceTouchableRegionWithCrop) { 294 std::vector<QueuedTransactionState> 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 auto inputInfo = transactions.back().states.front().state.editWindowInfo(); 301 *inputInfo = {}; 302 inputInfo->touchableRegion = region; 303 inputInfo->replaceTouchableRegionWithCrop = replaceTouchableRegionWithCrop; 304 transactions.back().states.front().touchCropId = touchCropId; 305 306 inputInfo->token = sp<BBinder>::make(); 307 mLifecycleManager.applyTransactions(transactions); 308 } 309 setBackgroundBlurRadius(uint32_t id,uint32_t backgroundBlurRadius)310 void setBackgroundBlurRadius(uint32_t id, uint32_t backgroundBlurRadius) { 311 std::vector<QueuedTransactionState> transactions; 312 transactions.emplace_back(); 313 transactions.back().states.push_back({}); 314 315 transactions.back().states.front().state.what = layer_state_t::eBackgroundBlurRadiusChanged; 316 transactions.back().states.front().layerId = id; 317 transactions.back().states.front().state.backgroundBlurRadius = backgroundBlurRadius; 318 mLifecycleManager.applyTransactions(transactions); 319 } 320 setFrameRateSelectionPriority(uint32_t id,int32_t priority)321 void setFrameRateSelectionPriority(uint32_t id, int32_t priority) { 322 std::vector<QueuedTransactionState> transactions; 323 transactions.emplace_back(); 324 transactions.back().states.push_back({}); 325 326 transactions.back().states.front().state.what = layer_state_t::eFrameRateSelectionPriority; 327 transactions.back().states.front().layerId = id; 328 transactions.back().states.front().state.frameRateSelectionPriority = priority; 329 mLifecycleManager.applyTransactions(transactions); 330 } 331 setFrameRate(uint32_t id,float frameRate,int8_t compatibility,int8_t changeFrameRateStrategy)332 void setFrameRate(uint32_t id, float frameRate, int8_t compatibility, 333 int8_t changeFrameRateStrategy) { 334 std::vector<QueuedTransactionState> transactions; 335 transactions.emplace_back(); 336 transactions.back().states.push_back({}); 337 338 transactions.back().states.front().state.what = layer_state_t::eFrameRateChanged; 339 transactions.back().states.front().layerId = id; 340 transactions.back().states.front().state.frameRate = frameRate; 341 transactions.back().states.front().state.frameRateCompatibility = compatibility; 342 transactions.back().states.front().state.changeFrameRateStrategy = changeFrameRateStrategy; 343 mLifecycleManager.applyTransactions(transactions); 344 } 345 setFrameRate(uint32_t id,Layer::FrameRate framerate)346 void setFrameRate(uint32_t id, Layer::FrameRate framerate) { 347 std::vector<QueuedTransactionState> transactions; 348 transactions.emplace_back(); 349 transactions.back().states.push_back({}); 350 351 transactions.back().states.front().state.what = layer_state_t::eFrameRateChanged; 352 transactions.back().states.front().layerId = id; 353 transactions.back().states.front().state.frameRate = framerate.vote.rate.getValue(); 354 transactions.back().states.front().state.frameRateCompatibility = 0; 355 transactions.back().states.front().state.changeFrameRateStrategy = 0; 356 mLifecycleManager.applyTransactions(transactions); 357 } 358 setFrameRateCategory(uint32_t id,int8_t frameRateCategory)359 void setFrameRateCategory(uint32_t id, int8_t frameRateCategory) { 360 std::vector<QueuedTransactionState> transactions; 361 transactions.emplace_back(); 362 transactions.back().states.push_back({}); 363 364 transactions.back().states.front().state.what = layer_state_t::eFrameRateCategoryChanged; 365 transactions.back().states.front().layerId = id; 366 transactions.back().states.front().state.frameRateCategory = frameRateCategory; 367 mLifecycleManager.applyTransactions(transactions); 368 } 369 setFrameRateSelectionStrategy(uint32_t id,int8_t strategy)370 void setFrameRateSelectionStrategy(uint32_t id, int8_t strategy) { 371 std::vector<QueuedTransactionState> transactions; 372 transactions.emplace_back(); 373 transactions.back().states.push_back({}); 374 375 transactions.back().states.front().state.what = 376 layer_state_t::eFrameRateSelectionStrategyChanged; 377 transactions.back().states.front().layerId = id; 378 transactions.back().states.front().state.frameRateSelectionStrategy = strategy; 379 mLifecycleManager.applyTransactions(transactions); 380 } 381 setDefaultFrameRateCompatibility(uint32_t id,int8_t defaultFrameRateCompatibility)382 void setDefaultFrameRateCompatibility(uint32_t id, int8_t defaultFrameRateCompatibility) { 383 std::vector<QueuedTransactionState> transactions; 384 transactions.emplace_back(); 385 transactions.back().states.push_back({}); 386 387 transactions.back().states.front().state.what = 388 layer_state_t::eDefaultFrameRateCompatibilityChanged; 389 transactions.back().states.front().layerId = id; 390 transactions.back().states.front().state.defaultFrameRateCompatibility = 391 defaultFrameRateCompatibility; 392 mLifecycleManager.applyTransactions(transactions); 393 } 394 setRoundedCorners(uint32_t id,float radius)395 void setRoundedCorners(uint32_t id, float radius) { 396 std::vector<QueuedTransactionState> transactions; 397 transactions.emplace_back(); 398 transactions.back().states.push_back({}); 399 400 transactions.back().states.front().state.what = layer_state_t::eCornerRadiusChanged; 401 transactions.back().states.front().layerId = id; 402 transactions.back().states.front().state.cornerRadius = radius; 403 mLifecycleManager.applyTransactions(transactions); 404 } 405 setBuffer(uint32_t id,std::shared_ptr<renderengine::ExternalTexture> texture)406 void setBuffer(uint32_t id, std::shared_ptr<renderengine::ExternalTexture> texture) { 407 std::vector<QueuedTransactionState> transactions; 408 transactions.emplace_back(); 409 transactions.back().states.push_back({}); 410 411 transactions.back().states.front().state.what = layer_state_t::eBufferChanged; 412 transactions.back().states.front().layerId = id; 413 transactions.back().states.front().externalTexture = texture; 414 transactions.back().states.front().state.bufferData = 415 std::make_shared<fake::BufferData>(texture->getId(), texture->getWidth(), 416 texture->getHeight(), texture->getPixelFormat(), 417 texture->getUsage()); 418 mLifecycleManager.applyTransactions(transactions); 419 } 420 setBuffer(uint32_t id)421 void setBuffer(uint32_t id) { 422 static uint64_t sBufferId = 1; 423 setBuffer(id, 424 std::make_shared<renderengine::mock:: 425 FakeExternalTexture>(1U /*width*/, 1U /*height*/, 426 sBufferId++, 427 HAL_PIXEL_FORMAT_RGBA_8888, 428 GRALLOC_USAGE_PROTECTED /*usage*/)); 429 } 430 setFrontBuffer(uint32_t id)431 void setFrontBuffer(uint32_t id) { 432 static uint64_t sBufferId = 1; 433 setBuffer(id, 434 std::make_shared<renderengine::mock::FakeExternalTexture>( 435 1U /*width*/, 1U /*height*/, sBufferId++, HAL_PIXEL_FORMAT_RGBA_8888, 436 GRALLOC_USAGE_PROTECTED | AHARDWAREBUFFER_USAGE_FRONT_BUFFER /*usage*/)); 437 } 438 setBufferCrop(uint32_t id,const Rect & bufferCrop)439 void setBufferCrop(uint32_t id, const Rect& bufferCrop) { 440 std::vector<QueuedTransactionState> transactions; 441 transactions.emplace_back(); 442 transactions.back().states.push_back({}); 443 444 transactions.back().states.front().state.what = layer_state_t::eBufferCropChanged; 445 transactions.back().states.front().layerId = id; 446 transactions.back().states.front().state.bufferCrop = bufferCrop; 447 mLifecycleManager.applyTransactions(transactions); 448 } 449 setDamageRegion(uint32_t id,const Region & damageRegion)450 void setDamageRegion(uint32_t id, const Region& damageRegion) { 451 std::vector<QueuedTransactionState> transactions; 452 transactions.emplace_back(); 453 transactions.back().states.push_back({}); 454 455 transactions.back().states.front().layerId = id; 456 transactions.back().states.front().state.updateSurfaceDamageRegion(damageRegion); 457 mLifecycleManager.applyTransactions(transactions); 458 } 459 setDataspace(uint32_t id,ui::Dataspace dataspace)460 void setDataspace(uint32_t id, ui::Dataspace dataspace) { 461 std::vector<QueuedTransactionState> transactions; 462 transactions.emplace_back(); 463 transactions.back().states.push_back({}); 464 465 transactions.back().states.front().state.what = layer_state_t::eDataspaceChanged; 466 transactions.back().states.front().layerId = id; 467 transactions.back().states.front().state.dataspace = dataspace; 468 mLifecycleManager.applyTransactions(transactions); 469 } 470 setMatrix(uint32_t id,float dsdx,float dtdx,float dtdy,float dsdy)471 void setMatrix(uint32_t id, float dsdx, float dtdx, float dtdy, float dsdy) { 472 layer_state_t::matrix22_t matrix{dsdx, dtdx, dtdy, dsdy}; 473 474 std::vector<QueuedTransactionState> transactions; 475 transactions.emplace_back(); 476 transactions.back().states.push_back({}); 477 478 transactions.back().states.front().state.what = layer_state_t::eMatrixChanged; 479 transactions.back().states.front().layerId = id; 480 transactions.back().states.front().state.matrix = matrix; 481 mLifecycleManager.applyTransactions(transactions); 482 } 483 setClientDrawnCornerRadius(uint32_t id,float clientDrawnCornerRadius)484 void setClientDrawnCornerRadius(uint32_t id, float clientDrawnCornerRadius) { 485 std::vector<QueuedTransactionState> transactions; 486 transactions.emplace_back(); 487 transactions.back().states.push_back({}); 488 489 transactions.back().states.front().state.what = 490 layer_state_t::eClientDrawnCornerRadiusChanged; 491 transactions.back().states.front().layerId = id; 492 transactions.back().states.front().state.clientDrawnCornerRadius = clientDrawnCornerRadius; 493 mLifecycleManager.applyTransactions(transactions); 494 } 495 setShadowRadius(uint32_t id,float shadowRadius)496 void setShadowRadius(uint32_t id, float shadowRadius) { 497 std::vector<QueuedTransactionState> transactions; 498 transactions.emplace_back(); 499 transactions.back().states.push_back({}); 500 501 transactions.back().states.front().state.what = layer_state_t::eShadowRadiusChanged; 502 transactions.back().states.front().layerId = id; 503 transactions.back().states.front().state.shadowRadius = shadowRadius; 504 mLifecycleManager.applyTransactions(transactions); 505 } 506 setBorderSettings(uint32_t id,gui::BorderSettings settings)507 void setBorderSettings(uint32_t id, gui::BorderSettings settings) { 508 std::vector<QueuedTransactionState> transactions; 509 transactions.emplace_back(); 510 transactions.back().states.push_back({}); 511 512 transactions.back().states.front().state.what = layer_state_t::eBorderSettingsChanged; 513 transactions.back().states.front().layerId = id; 514 transactions.back().states.front().state.borderSettings = settings; 515 mLifecycleManager.applyTransactions(transactions); 516 } 517 setTrustedOverlay(uint32_t id,gui::TrustedOverlay trustedOverlay)518 void setTrustedOverlay(uint32_t id, gui::TrustedOverlay trustedOverlay) { 519 std::vector<QueuedTransactionState> transactions; 520 transactions.emplace_back(); 521 transactions.back().states.push_back({}); 522 523 transactions.back().states.front().state.what = layer_state_t::eTrustedOverlayChanged; 524 transactions.back().states.front().layerId = id; 525 transactions.back().states.front().state.trustedOverlay = trustedOverlay; 526 mLifecycleManager.applyTransactions(transactions); 527 } 528 setDropInputMode(uint32_t id,gui::DropInputMode dropInputMode)529 void setDropInputMode(uint32_t id, gui::DropInputMode dropInputMode) { 530 std::vector<QueuedTransactionState> transactions; 531 transactions.emplace_back(); 532 transactions.back().states.push_back({}); 533 534 transactions.back().states.front().state.what = layer_state_t::eDropInputModeChanged; 535 transactions.back().states.front().layerId = id; 536 transactions.back().states.front().state.dropInputMode = dropInputMode; 537 mLifecycleManager.applyTransactions(transactions); 538 } 539 setGameMode(uint32_t id,gui::GameMode gameMode)540 void setGameMode(uint32_t id, gui::GameMode gameMode) { 541 std::vector<QueuedTransactionState> transactions; 542 transactions.emplace_back(); 543 transactions.back().states.push_back({}); 544 transactions.back().states.front().state.what = layer_state_t::eMetadataChanged; 545 transactions.back().states.front().state.metadata = LayerMetadata(); 546 transactions.back().states.front().state.metadata.setInt32(METADATA_GAME_MODE, 547 static_cast<int32_t>(gameMode)); 548 transactions.back().states.front().layerId = id; 549 mLifecycleManager.applyTransactions(transactions); 550 } 551 setEdgeExtensionEffect(uint32_t id,int edge)552 void setEdgeExtensionEffect(uint32_t id, int edge) { 553 std::vector<QueuedTransactionState> transactions; 554 transactions.emplace_back(); 555 transactions.back().states.push_back({}); 556 557 transactions.back().states.front().layerId = id; 558 transactions.back().states.front().state.what |= layer_state_t::eEdgeExtensionChanged; 559 transactions.back().states.front().state.edgeExtensionParameters = 560 gui::EdgeExtensionParameters(); 561 transactions.back().states.front().state.edgeExtensionParameters.extendLeft = edge & LEFT; 562 transactions.back().states.front().state.edgeExtensionParameters.extendRight = edge & RIGHT; 563 transactions.back().states.front().state.edgeExtensionParameters.extendTop = edge & TOP; 564 transactions.back().states.front().state.edgeExtensionParameters.extendBottom = 565 edge & BOTTOM; 566 mLifecycleManager.applyTransactions(transactions); 567 } 568 569 private: 570 LayerLifecycleManager& mLifecycleManager; 571 }; 572 573 } // namespace android::surfaceflinger::frontend 574