1 /* 2 * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_SURFACE_NODE_COMMAND_H 17 #define ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_SURFACE_NODE_COMMAND_H 18 19 #include "command/rs_command_templates.h" 20 #include "common/rs_macros.h" 21 #include "common/rs_vector4.h" 22 #include "platform/common/rs_surface_ext.h" 23 #include "surface_type.h" 24 25 #include "utils/matrix.h" 26 #include "utils/rect.h" 27 28 namespace OHOS { 29 namespace Rosen { 30 31 //Each command HAVE TO have UNIQUE ID in ALL HISTORY 32 //If a command is not used and you want to delete it, 33 //just COMMENT it - and never use this value anymore 34 enum RSSurfaceNodeCommandType : uint16_t { 35 SURFACE_NODE_CREATE = 0, 36 SURFACE_NODE_CREATE_WITH_CONFIG = 1, 37 SURFACE_NODE_SET_CONTEXT_MATRIX = 2, 38 SURFACE_NODE_SET_CONTEXT_ALPHA = 3, 39 SURFACE_NODE_SET_CONTEXT_CLIP_REGION = 4, 40 SURFACE_NODE_SET_SECURITY_LAYER = 5, 41 SURFACE_NODE_SET_SKIP_LAYER = 6, 42 SURFACE_NODE_SET_SNAPSHOT_SKIP_LAYER = 7, 43 SURFACE_NODE_SET_FINGERPRINT = 8, 44 SURFACE_NODE_SET_COLOR_SPACE = 9, 45 SURFACE_NODE_UPDATE_SURFACE_SIZE = 10, 46 SURFACE_NODE_CONNECT_TO_NODE_IN_RENDER_SERVICE = 11, 47 SURFACE_NODE_SET_CALLBACK_FOR_RENDER_THREAD = 12, 48 SURFACE_NODE_SET_CONTEXT_BOUNDS = 13, 49 SURFACE_NODE_SET_ABILITY_BG_ALPHA = 14, 50 SURFACE_NODE_SET_IS_NOTIFY_BUFFER_AVAILABLE = 15, 51 SURFACE_NODE_SET_SURFACE_NODE_TYPE = 16, 52 SURFACE_NODE_SET_CONTAINER_WINDOW = 17, 53 SURFACE_NODE_SET_ANIMATION_FINISHED = 18, 54 SURFACE_NODE_MARK_UIHIDDEN = 19, 55 SURFACE_NODE_SET_IS_TEXTURE_EXPORT_NODE = 20, 56 SURFACE_NODE_ATTACH_TO_DISPLAY = 21, 57 SURFACE_NODE_DETACH_TO_DISPLAY = 22, 58 SURFACE_NODE_SET_FORCE_HARDWARE_AND_FIX_ROTATION = 23, 59 SURFACE_NODE_SET_BOOT_ANIMATION = 24, 60 SURFACE_NODE_SET_GLOBAL_POSITION_ENABLED = 25, 61 SURFACE_NODE_SET_FOREGROUND = 26, 62 SURFACE_NODE_SET_SURFACE_ID = 27, 63 SURFACE_NODE_SET_CLONED_NODE_ID = 28, 64 SURFACE_NODE_SET_FORCE_UIFIRST = 29, 65 SURFACE_NODE_SET_ANCO_FLAGS = 30, 66 SURFACE_NODE_SET_HDR_PRESENT = 31, 67 SURFACE_NODE_SET_SKIP_DRAW = 32, 68 SURFACE_NODE_SET_WATERMARK_ENABLED = 33, 69 SURFACE_NODE_SET_ABILITY_STATE = 34, 70 SURFACE_NODE_SET_LEASH_PERSISTENT_ID = 35, 71 SURFACE_NODE_SET_API_COMPATIBLE_VERSION = 36, 72 SURFACE_NODE_SET_HARDWARE_ENABLE_HINT = 37, 73 SURFACE_NODE_ATTACH_TO_WINDOW_CONTAINER = 38, 74 SURFACE_NODE_DETACH_FROM_WINDOW_CONTAINER = 39, 75 SURFACE_NODE_SET_SOURCE_VIRTUAL_DISPLAY_ID = 40, 76 SURFACE_NODE_CREATE_SURFACE_EXT = 41, 77 SURFACE_NODE_SET_FRAME_GRAVITY_NEW_VERSION_ENABLED = 42, 78 SURFACE_NODE_SET_REGION_TO_BE_MAGNIFIED = 43, 79 SURFACE_NODE_SET_ANCO_SRC_CROP = 44, 80 }; 81 82 class RSB_EXPORT SurfaceNodeCommandHelper { 83 public: 84 static void Create(RSContext& context, NodeId nodeId, 85 RSSurfaceNodeType surfaceNodeType = RSSurfaceNodeType::DEFAULT, bool isTextureExportNode = false); 86 static void CreateWithConfig( 87 RSContext& context, NodeId nodeId, std::string name, uint8_t type, enum SurfaceWindowType surfaceWindowType); 88 static std::shared_ptr<RSSurfaceRenderNode> CreateWithConfigInRS( 89 const RSSurfaceRenderNodeConfig& config, RSContext& context, bool unobscured = false); 90 static void SetContextMatrix(RSContext& context, NodeId nodeId, const std::optional<Drawing::Matrix>& matrix); 91 static void SetContextAlpha(RSContext& context, NodeId nodeId, float alpha); 92 static void SetContextClipRegion(RSContext& context, NodeId nodeId, const std::optional<Drawing::Rect>& clipRect); 93 static void SetSecurityLayer(RSContext& context, NodeId nodeId, bool isSecurityLayer); 94 static void SetLeashPersistentId(RSContext& context, NodeId nodeId, uint64_t leashPersistentId); 95 static void SetSkipLayer(RSContext& context, NodeId nodeId, bool isSkipLayer); 96 static void SetSnapshotSkipLayer(RSContext& context, NodeId nodeId, bool isSnapshotSkipLayer); 97 static void SetFingerprint(RSContext& context, NodeId nodeId, bool hasFingerprint); 98 static void SetColorSpace(RSContext& context, NodeId nodeId, GraphicColorGamut colorSpace); 99 static void UpdateSurfaceDefaultSize(RSContext& context, NodeId nodeId, float width, float height); 100 static void ConnectToNodeInRenderService(RSContext& context, NodeId id); 101 static void SetCallbackForRenderThreadRefresh(RSContext& context, NodeId id, bool isRefresh); 102 static void SetContextBounds(RSContext& context, NodeId id, Vector4f bounds); 103 static void SetIsTextureExportNode(RSContext& context, NodeId id, bool isTextureExportNode); 104 static void SetAbilityBGAlpha(RSContext& context, NodeId id, uint8_t alpha); 105 static void SetIsNotifyUIBufferAvailable(RSContext& context, NodeId nodeId, bool available); 106 static void MarkUIHidden(RSContext& context, NodeId nodeId, bool isHidden); 107 static void SetSurfaceNodeType(RSContext& context, NodeId nodeId, uint8_t surfaceNodeType); 108 static void SetContainerWindow(RSContext& context, NodeId nodeId, bool hasContainerWindow, RRect rrect); 109 static void SetAnimationFinished(RSContext& context, NodeId nodeId); 110 static void AttachToDisplay(RSContext& context, NodeId nodeId, uint64_t screenId); 111 static void DetachToDisplay(RSContext& context, NodeId nodeId, uint64_t screenId); 112 static void SetBootAnimation(RSContext& context, NodeId nodeId, bool isBootAnimation); 113 static void SetGlobalPositionEnabled(RSContext& context, NodeId nodeId, bool isEnabled); 114 static void SetForceHardwareAndFixRotation(RSContext& context, NodeId nodeId, bool flag); 115 #ifdef USE_SURFACE_TEXTURE 116 static void CreateSurfaceExt(RSContext& context, NodeId id, const std::shared_ptr<RSSurfaceTexture>& surfaceExt); 117 #endif 118 static void SetForeground(RSContext& context, NodeId nodeId, bool isForeground); 119 static void SetSurfaceId(RSContext& context, NodeId nodeId, SurfaceId surfaceId); 120 static void SetClonedNodeInfo(RSContext& context, NodeId nodeId, NodeId cloneNodeId, bool needOffscreen); 121 static void SetForceUIFirst(RSContext& context, NodeId nodeId, bool forceUIFirst); 122 static void SetAncoFlags(RSContext& context, NodeId nodeId, uint32_t flags); 123 static void SetHDRPresent(RSContext& context, NodeId nodeId, bool hdrPresent); 124 static void SetSkipDraw(RSContext& context, NodeId nodeId, bool skip); 125 static void SetWatermarkEnabled(RSContext& context, NodeId nodeId, const std::string& name, bool isEnabled); 126 static void SetAbilityState(RSContext& context, NodeId nodeId, RSSurfaceNodeAbilityState abilityState); 127 static void SetApiCompatibleVersion(RSContext& context, NodeId nodeId, uint32_t apiCompatibleVersion); 128 static void SetHardwareEnableHint(RSContext& context, NodeId nodeId, bool enable); 129 static void SetRegionToBeMagnified(RSContext& context, NodeId nodeId, const Vector4<int>& regionToBeMagnified); 130 static void SetSourceVirtualDisplayId(RSContext& context, NodeId nodeId, ScreenId screenId); 131 static void AttachToWindowContainer(RSContext& context, NodeId nodeId, ScreenId screenId); 132 static void DetachFromWindowContainer(RSContext& context, NodeId nodeId, ScreenId screenId); 133 static void SetFrameGravityNewVersionEnabled(RSContext& context, NodeId nodeId, bool isEnabled); 134 static void SetAncoSrcCrop(RSContext& context, NodeId nodeId, const Rect& srcCrop); 135 }; 136 137 ADD_COMMAND(RSSurfaceNodeCreate, 138 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_CREATE, 139 SurfaceNodeCommandHelper::Create, NodeId, RSSurfaceNodeType, bool)) 140 ADD_COMMAND(RSSurfaceNodeCreateWithConfig, 141 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_CREATE_WITH_CONFIG, 142 SurfaceNodeCommandHelper::CreateWithConfig, NodeId, std::string, uint8_t, enum SurfaceWindowType)) 143 ADD_COMMAND(RSSurfaceNodeSetContextMatrix, 144 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_MATRIX, 145 SurfaceNodeCommandHelper::SetContextMatrix, NodeId, std::optional<Drawing::Matrix>)) 146 ADD_COMMAND(RSSurfaceNodeSetContextAlpha, 147 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_ALPHA, 148 SurfaceNodeCommandHelper::SetContextAlpha, NodeId, float)) 149 ADD_COMMAND(RSSurfaceNodeSetContextClipRegion, 150 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_CLIP_REGION, 151 SurfaceNodeCommandHelper::SetContextClipRegion, NodeId, std::optional<Drawing::Rect>)) 152 ADD_COMMAND(RSSurfaceNodeSetHardwareAndFixRotation, 153 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_FORCE_HARDWARE_AND_FIX_ROTATION, 154 SurfaceNodeCommandHelper::SetForceHardwareAndFixRotation, NodeId, bool)) 155 ADD_COMMAND(RSSurfaceNodeSetBootAnimation, 156 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_BOOT_ANIMATION, 157 SurfaceNodeCommandHelper::SetBootAnimation, NodeId, bool)) 158 ADD_COMMAND(RSSurfaceNodeSetGlobalPositionEnabled, 159 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_GLOBAL_POSITION_ENABLED, 160 SurfaceNodeCommandHelper::SetGlobalPositionEnabled, NodeId, bool)) 161 ADD_COMMAND(RSSurfaceNodeSetSecurityLayer, 162 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_SECURITY_LAYER, 163 SurfaceNodeCommandHelper::SetSecurityLayer, NodeId, bool)) 164 ADD_COMMAND(RSSurfaceNodeSetSkipLayer, 165 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_SKIP_LAYER, 166 SurfaceNodeCommandHelper::SetSkipLayer, NodeId, bool)) 167 ADD_COMMAND(RSSurfaceNodeSetSnapshotSkipLayer, 168 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_SNAPSHOT_SKIP_LAYER, 169 SurfaceNodeCommandHelper::SetSnapshotSkipLayer, NodeId, bool)) 170 ADD_COMMAND(RSSurfaceNodeSetFingerprint, 171 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_FINGERPRINT, 172 SurfaceNodeCommandHelper::SetFingerprint, NodeId, bool)) 173 ADD_COMMAND(RSSurfaceNodeUpdateSurfaceDefaultSize, 174 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_UPDATE_SURFACE_SIZE, 175 SurfaceNodeCommandHelper::UpdateSurfaceDefaultSize, NodeId, float, float)) 176 ADD_COMMAND(RSSurfaceNodeConnectToNodeInRenderService, 177 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_CONNECT_TO_NODE_IN_RENDER_SERVICE, 178 SurfaceNodeCommandHelper::ConnectToNodeInRenderService, NodeId)) 179 ADD_COMMAND(RSSurfaceNodeSetCallbackForRenderThreadRefresh, 180 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CALLBACK_FOR_RENDER_THREAD, 181 SurfaceNodeCommandHelper::SetCallbackForRenderThreadRefresh, NodeId, bool)) 182 ADD_COMMAND(RSSurfaceNodeSetBounds, 183 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_BOUNDS, 184 SurfaceNodeCommandHelper::SetContextBounds, NodeId, Vector4f)) 185 ADD_COMMAND(RSSurfaceNodeSetAbilityBGAlpha, 186 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_ABILITY_BG_ALPHA, 187 SurfaceNodeCommandHelper::SetAbilityBGAlpha, NodeId, uint8_t)) 188 ADD_COMMAND(RSSurfaceNodeSetIsNotifyUIBufferAvailable, 189 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_IS_NOTIFY_BUFFER_AVAILABLE, 190 SurfaceNodeCommandHelper::SetIsNotifyUIBufferAvailable, NodeId, bool)) 191 ADD_COMMAND(RSSurfaceNodeMarkUIHidden, 192 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_MARK_UIHIDDEN, 193 SurfaceNodeCommandHelper::MarkUIHidden, NodeId, bool)) 194 ADD_COMMAND(RSSurfaceNodeSetIsTextureExportNode, 195 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_IS_TEXTURE_EXPORT_NODE, 196 SurfaceNodeCommandHelper::SetIsTextureExportNode, NodeId, bool)) 197 ADD_COMMAND(RSSurfaceNodeSetSurfaceNodeType, 198 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_SURFACE_NODE_TYPE, 199 SurfaceNodeCommandHelper::SetSurfaceNodeType, NodeId, uint8_t)) 200 ADD_COMMAND(RSSurfaceNodeSetContainerWindow, 201 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CONTAINER_WINDOW, 202 SurfaceNodeCommandHelper::SetContainerWindow, NodeId, bool, RRect)) 203 ADD_COMMAND(RSSurfaceNodeSetAnimationFinished, 204 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_ANIMATION_FINISHED, 205 SurfaceNodeCommandHelper::SetAnimationFinished, NodeId)) 206 ADD_COMMAND(RSSurfaceNodeAttachToDisplay, 207 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_ATTACH_TO_DISPLAY, 208 SurfaceNodeCommandHelper::AttachToDisplay, NodeId, uint64_t)) 209 ADD_COMMAND(RSSurfaceNodeDetachToDisplay, 210 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_DETACH_TO_DISPLAY, 211 SurfaceNodeCommandHelper::DetachToDisplay, NodeId, uint64_t)) 212 ADD_COMMAND(RSSurfaceNodeSetColorSpace, 213 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_COLOR_SPACE, 214 SurfaceNodeCommandHelper::SetColorSpace, NodeId, GraphicColorGamut)) 215 ADD_COMMAND(RSurfaceNodeSetSurfaceId, 216 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_SURFACE_ID, 217 SurfaceNodeCommandHelper::SetSurfaceId, NodeId, SurfaceId)) 218 ADD_COMMAND(RSurfaceNodeSetLeashPersistentId, 219 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_LEASH_PERSISTENT_ID, 220 SurfaceNodeCommandHelper::SetLeashPersistentId, NodeId, LeashPersistentId)) 221 222 #ifdef USE_SURFACE_TEXTURE 223 ADD_COMMAND(RSSurfaceNodeCreateSurfaceExt, 224 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_CREATE_SURFACE_EXT, 225 SurfaceNodeCommandHelper::CreateSurfaceExt, NodeId, std::shared_ptr<RSSurfaceTexture>)) 226 #endif 227 ADD_COMMAND(RSSurfaceNodeSetForeground, 228 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_FOREGROUND, 229 SurfaceNodeCommandHelper::SetForeground, NodeId, bool)) 230 ADD_COMMAND(RSSurfaceNodeSetClonedNodeId, 231 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_CLONED_NODE_ID, 232 SurfaceNodeCommandHelper::SetClonedNodeInfo, NodeId, NodeId, bool)) 233 ADD_COMMAND(RSSurfaceNodeSetForceUIFirst, 234 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_FORCE_UIFIRST, 235 SurfaceNodeCommandHelper::SetForceUIFirst, NodeId, bool)) 236 ADD_COMMAND(RSSurfaceNodeSetAncoFlags, 237 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_ANCO_FLAGS, 238 SurfaceNodeCommandHelper::SetAncoFlags, NodeId, uint32_t)) 239 ADD_COMMAND(RSSurfaceNodeSetHDRPresent, 240 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_HDR_PRESENT, 241 SurfaceNodeCommandHelper::SetHDRPresent, NodeId, bool)) 242 ADD_COMMAND(RSSurfaceNodeSetSkipDraw, 243 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_SKIP_DRAW, 244 SurfaceNodeCommandHelper::SetSkipDraw, NodeId, bool)) 245 ADD_COMMAND(RSSurfaceNodeSetRegionToBeMagnified, 246 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_REGION_TO_BE_MAGNIFIED, 247 SurfaceNodeCommandHelper::SetRegionToBeMagnified, NodeId, Vector4<int>)) 248 ADD_COMMAND(RSSurfaceNodeSetWatermarkEnabled, 249 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_WATERMARK_ENABLED, 250 SurfaceNodeCommandHelper::SetWatermarkEnabled, NodeId, std::string, bool)) 251 ADD_COMMAND(RSSurfaceNodeSetAbilityState, 252 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_ABILITY_STATE, 253 SurfaceNodeCommandHelper::SetAbilityState, NodeId, RSSurfaceNodeAbilityState)) 254 ADD_COMMAND( 255 RSSurfaceNodeSetApiCompatibleVersion, ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_API_COMPATIBLE_VERSION, 256 SurfaceNodeCommandHelper::SetApiCompatibleVersion, NodeId, uint32_t)) 257 ADD_COMMAND(RSSurfaceNodeSetHardwareEnableHint, 258 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_HARDWARE_ENABLE_HINT, 259 SurfaceNodeCommandHelper::SetHardwareEnableHint, NodeId, bool)) 260 ADD_COMMAND(RSSurfaceNodeAttachToWindowContainer, 261 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_ATTACH_TO_WINDOW_CONTAINER, 262 SurfaceNodeCommandHelper::AttachToWindowContainer, NodeId, ScreenId)) 263 ADD_COMMAND(RSSurfaceNodeDetachFromWindowContainer, 264 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_DETACH_FROM_WINDOW_CONTAINER, 265 SurfaceNodeCommandHelper::DetachFromWindowContainer, NodeId, ScreenId)) 266 ADD_COMMAND(RSSurfaceNodeSetSourceVirtualDisplayId, 267 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_SOURCE_VIRTUAL_DISPLAY_ID, 268 SurfaceNodeCommandHelper::SetSourceVirtualDisplayId, NodeId, ScreenId)) 269 ADD_COMMAND(RSSurfaceNodeSetFrameGravityNewVersionEnabled, 270 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_FRAME_GRAVITY_NEW_VERSION_ENABLED, 271 SurfaceNodeCommandHelper::SetFrameGravityNewVersionEnabled, NodeId, bool)) 272 ADD_COMMAND(RSSurfaceNodeSetAncoSrcCrop, 273 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_ANCO_SRC_CROP, 274 SurfaceNodeCommandHelper::SetAncoSrcCrop, NodeId, Rect)) 275 } // namespace Rosen 276 } // namespace OHOS 277 #endif // ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_SURFACE_NODE_COMMAND_H 278