| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 1 | /* | 
|  | 2 | * Copyright 2022 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 <aidl/android/hardware/graphics/composer3/Composition.h> | 
|  | 20 | #include <ftl/flags.h> | 
|  | 21 | #include <gui/LayerState.h> | 
|  | 22 | #include <renderengine/ExternalTexture.h> | 
| Vishnu Nair | cfb2d25 | 2023-01-19 04:44:02 +0000 | [diff] [blame] | 23 | #include "Scheduler/LayerInfo.h" | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 24 |  | 
|  | 25 | #include "LayerCreationArgs.h" | 
|  | 26 | #include "TransactionState.h" | 
|  | 27 |  | 
|  | 28 | namespace android::surfaceflinger::frontend { | 
|  | 29 |  | 
|  | 30 | // Stores client requested states for a layer. | 
|  | 31 | // This struct does not store any other states or states pertaining to | 
|  | 32 | // other layers. Links to other layers that are part of the client | 
|  | 33 | // requested state such as parent are translated to layer id so | 
|  | 34 | // we can avoid extending the lifetime of layer handles. | 
|  | 35 | struct RequestedLayerState : layer_state_t { | 
|  | 36 | // Changes in state after merging with new state. This includes additional state | 
|  | 37 | // changes found in layer_state_t::what. | 
|  | 38 | enum class Changes : uint32_t { | 
|  | 39 | Created = 1u << 0, | 
|  | 40 | Destroyed = 1u << 1, | 
|  | 41 | Hierarchy = 1u << 2, | 
|  | 42 | Geometry = 1u << 3, | 
|  | 43 | Content = 1u << 4, | 
|  | 44 | Input = 1u << 5, | 
|  | 45 | Z = 1u << 6, | 
|  | 46 | Mirror = 1u << 7, | 
|  | 47 | Parent = 1u << 8, | 
|  | 48 | RelativeParent = 1u << 9, | 
|  | 49 | Metadata = 1u << 10, | 
|  | 50 | Visibility = 1u << 11, | 
| Vishnu Nair | 8fc721b | 2022-12-22 20:06:32 +0000 | [diff] [blame] | 51 | AffectsChildren = 1u << 12, | 
| Vishnu Nair | cfb2d25 | 2023-01-19 04:44:02 +0000 | [diff] [blame] | 52 | FrameRate = 1u << 13, | 
|  | 53 | VisibleRegion = 1u << 14, | 
|  | 54 | Buffer = 1u << 15, | 
| Vishnu Nair | d47bcee | 2023-02-24 18:08:51 +0000 | [diff] [blame] | 55 | SidebandStream = 1u << 16, | 
| Vishnu Nair | ef68d6d | 2023-02-28 06:18:27 +0000 | [diff] [blame] | 56 | Animation = 1u << 17, | 
| Vishnu Nair | a02943f | 2023-06-03 13:44:46 -0700 | [diff] [blame] | 57 | BufferSize = 1u << 18, | 
|  | 58 | GameMode = 1u << 19, | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 59 | }; | 
|  | 60 | static Rect reduce(const Rect& win, const Region& exclude); | 
|  | 61 | RequestedLayerState(const LayerCreationArgs&); | 
|  | 62 | void merge(const ResolvedComposerState&); | 
| Vishnu Nair | d47bcee | 2023-02-24 18:08:51 +0000 | [diff] [blame] | 63 | void clearChanges(); | 
|  | 64 |  | 
| Vishnu Nair | 8fc721b | 2022-12-22 20:06:32 +0000 | [diff] [blame] | 65 | // Currently we only care about the primary display | 
|  | 66 | ui::Transform getTransform(uint32_t displayRotationFlags) const; | 
|  | 67 | ui::Size getUnrotatedBufferSize(uint32_t displayRotationFlags) const; | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 68 | bool canBeDestroyed() const; | 
|  | 69 | bool isRoot() const; | 
|  | 70 | bool isHiddenByPolicy() const; | 
|  | 71 | half4 getColor() const; | 
| Vishnu Nair | 8fc721b | 2022-12-22 20:06:32 +0000 | [diff] [blame] | 72 | Rect getBufferSize(uint32_t displayRotationFlags) const; | 
|  | 73 | Rect getCroppedBufferSize(const Rect& bufferSize) const; | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 74 | Rect getBufferCrop() const; | 
|  | 75 | std::string getDebugString() const; | 
|  | 76 | std::string getDebugStringShort() const; | 
|  | 77 | aidl::android::hardware::graphics::composer3::Composition getCompositionType() const; | 
| Vishnu Nair | 04f8969 | 2022-11-16 23:21:05 +0000 | [diff] [blame] | 78 | bool hasValidRelativeParent() const; | 
| Vishnu Nair | 8fc721b | 2022-12-22 20:06:32 +0000 | [diff] [blame] | 79 | bool hasInputInfo() const; | 
| Vishnu Nair | 80a5a70 | 2023-02-11 01:21:51 +0000 | [diff] [blame] | 80 | bool hasBlur() const; | 
| Vishnu Nair | d47bcee | 2023-02-24 18:08:51 +0000 | [diff] [blame] | 81 | bool hasFrameUpdate() const; | 
|  | 82 | bool hasReadyFrame() const; | 
|  | 83 | bool hasSidebandStreamFrame() const; | 
| Vishnu Nair | 7ee4f46 | 2023-04-19 09:54:09 -0700 | [diff] [blame] | 84 | bool willReleaseBufferOnLatch() const; | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 85 |  | 
|  | 86 | // Layer serial number.  This gives layers an explicit ordering, so we | 
|  | 87 | // have a stable sort order when their layer stack and Z-order are | 
|  | 88 | // the same. | 
|  | 89 | const uint32_t id; | 
|  | 90 | const std::string name; | 
| Vishnu Nair | 04f8969 | 2022-11-16 23:21:05 +0000 | [diff] [blame] | 91 | bool canBeRoot = false; | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 92 | const uint32_t layerCreationFlags; | 
|  | 93 | const uint32_t textureName; | 
|  | 94 | // The owner of the layer. If created from a non system process, it will be the calling uid. | 
|  | 95 | // If created from a system process, the value can be passed in. | 
| Vishnu Nair | a02943f | 2023-06-03 13:44:46 -0700 | [diff] [blame] | 96 | const gui::Uid ownerUid; | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 97 | // The owner pid of the layer. If created from a non system process, it will be the calling pid. | 
|  | 98 | // If created from a system process, the value can be passed in. | 
| Vishnu Nair | a02943f | 2023-06-03 13:44:46 -0700 | [diff] [blame] | 99 | const gui::Pid ownerPid; | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 100 | bool dataspaceRequested; | 
|  | 101 | bool hasColorTransform; | 
|  | 102 | bool premultipliedAlpha{true}; | 
|  | 103 | // This layer can be a cursor on some displays. | 
|  | 104 | bool potentialCursor{false}; | 
|  | 105 | bool protectedByApp{false}; // application requires protected path to external sink | 
|  | 106 | ui::Transform requestedTransform; | 
|  | 107 | std::shared_ptr<FenceTime> acquireFenceTime; | 
|  | 108 | std::shared_ptr<renderengine::ExternalTexture> externalTexture; | 
| Vishnu Nair | cfb2d25 | 2023-01-19 04:44:02 +0000 | [diff] [blame] | 109 | gui::GameMode gameMode; | 
|  | 110 | scheduler::LayerInfo::FrameRate requestedFrameRate; | 
| Vishnu Nair | 1391de2 | 2023-03-05 19:56:14 -0800 | [diff] [blame] | 111 | uint32_t parentId = UNASSIGNED_LAYER_ID; | 
|  | 112 | uint32_t relativeParentId = UNASSIGNED_LAYER_ID; | 
| Vishnu Nair | a9c4376 | 2023-01-27 19:10:25 +0000 | [diff] [blame] | 113 | uint32_t layerIdToMirror = UNASSIGNED_LAYER_ID; | 
| Vishnu Nair | 1391de2 | 2023-03-05 19:56:14 -0800 | [diff] [blame] | 114 | ui::LayerStack layerStackToMirror = ui::INVALID_LAYER_STACK; | 
|  | 115 | uint32_t touchCropId = UNASSIGNED_LAYER_ID; | 
|  | 116 | uint32_t bgColorLayerId = UNASSIGNED_LAYER_ID; | 
| Vishnu Nair | 6322121 | 2023-04-06 15:17:37 -0700 | [diff] [blame] | 117 | uint64_t barrierFrameNumber = 0; | 
|  | 118 | uint32_t barrierProducerId = 0; | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 119 |  | 
|  | 120 | // book keeping states | 
|  | 121 | bool handleAlive = true; | 
|  | 122 | bool isRelativeOf = false; | 
| Vishnu Nair | a9c4376 | 2023-01-27 19:10:25 +0000 | [diff] [blame] | 123 | std::vector<uint32_t> mirrorIds{}; | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 124 | ftl::Flags<RequestedLayerState::Changes> changes; | 
| Vishnu Nair | d47bcee | 2023-02-24 18:08:51 +0000 | [diff] [blame] | 125 | bool bgColorLayer = false; | 
| Vishnu Nair | dc4d31b | 2022-11-17 03:20:58 +0000 | [diff] [blame] | 126 | }; | 
|  | 127 |  | 
|  | 128 | } // namespace android::surfaceflinger::frontend |