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 enum RSSurfaceNodeCommandType : uint16_t { 32 SURFACE_NODE_CREATE, 33 SURFACE_NODE_CREATE_WITH_CONFIG, 34 SURFACE_NODE_SET_CONTEXT_MATRIX, 35 SURFACE_NODE_SET_CONTEXT_ALPHA, 36 SURFACE_NODE_SET_CONTEXT_CLIP_REGION, 37 SURFACE_NODE_SET_SECURITY_LAYER, 38 SURFACE_NODE_SET_SKIP_LAYER, 39 SURFACE_NODE_SET_SNAPSHOT_SKIP_LAYER, 40 SURFACE_NODE_SET_FINGERPRINT, 41 SURFACE_NODE_SET_COLOR_SPACE, 42 SURFACE_NODE_UPDATE_SURFACE_SIZE, 43 SURFACE_NODE_CONNECT_TO_NODE_IN_RENDER_SERVICE, 44 SURFACE_NODE_SET_CALLBACK_FOR_RENDER_THREAD, 45 SURFACE_NODE_SET_CONTEXT_BOUNDS, 46 SURFACE_NODE_SET_ABILITY_BG_ALPHA, 47 SURFACE_NODE_SET_IS_NOTIFY_BUFFER_AVAILABLE, 48 SURFACE_NODE_SET_SURFACE_NODE_TYPE, 49 SURFACE_NODE_SET_CONTAINER_WINDOW, 50 SURFACE_NODE_SET_ANIMATION_FINISHED, 51 SURFACE_NODE_MARK_UIHIDDEN, 52 SURFACE_NODE_SET_IS_TEXTURE_EXPORT_NODE, 53 SURFACE_NODE_ATTACH_TO_DISPLAY, 54 SURFACE_NODE_DETACH_TO_DISPLAY, 55 SURFACE_NODE_SET_FORCE_HARDWARE_AND_FIX_ROTATION, 56 SURFACE_NODE_SET_BOOT_ANIMATION, 57 SURFACE_NODE_SET_GLOBAL_POSITION_ENABLED, 58 SURFACE_NODE_CREATE_SURFACE_EXT, 59 SURFACE_NODE_SET_FOREGROUND, 60 SURFACE_NODE_SET_SURFACE_ID, 61 SURFACE_NODE_SET_CLONED_NODE_ID, 62 SURFACE_NODE_SET_FORCE_UIFIRST, 63 SURFACE_NODE_SET_ANCO_FLAGS, 64 SURFACE_NODE_SET_HDR_PRESENT, 65 SURFACE_NODE_SET_SKIP_DRAW, 66 SURFACE_NODE_SET_WATERMARK, 67 SURFACE_NODE_SET_WATERMARK_ENABLED, 68 SURFACE_NODE_SET_ABILITY_STATE, 69 SURFACE_NODE_SET_LEASH_PERSISTENT_ID, 70 SURFACE_NODE_SET_API_COMPATIBLE_VERSION, 71 SURFACE_NODE_SET_HARDWARE_ENABLE_HINT, 72 SURFACE_NODE_ATTACH_TO_WINDOW_CONTAINER, 73 SURFACE_NODE_DETACH_FROM_WINDOW_CONTAINER, 74 SURFACE_NODE_SET_SOURCE_VIRTUAL_DISPLAY_ID, 75 }; 76 77 class RSB_EXPORT SurfaceNodeCommandHelper { 78 public: 79 static void Create(RSContext& context, NodeId nodeId, 80 RSSurfaceNodeType surfaceNodeType = RSSurfaceNodeType::DEFAULT, bool isTextureExportNode = false); 81 static void CreateWithConfig( 82 RSContext& context, NodeId nodeId, std::string name, uint8_t type, enum SurfaceWindowType surfaceWindowType); 83 static std::shared_ptr<RSSurfaceRenderNode> CreateWithConfigInRS( 84 const RSSurfaceRenderNodeConfig& config, RSContext& context, bool unobscured = false); 85 static void SetContextMatrix(RSContext& context, NodeId nodeId, const std::optional<Drawing::Matrix>& matrix); 86 static void SetContextAlpha(RSContext& context, NodeId nodeId, float alpha); 87 static void SetContextClipRegion(RSContext& context, NodeId nodeId, const std::optional<Drawing::Rect>& clipRect); 88 static void SetSecurityLayer(RSContext& context, NodeId nodeId, bool isSecurityLayer); 89 static void SetLeashPersistentId(RSContext& context, NodeId nodeId, uint64_t leashPersistentId); 90 static void SetSkipLayer(RSContext& context, NodeId nodeId, bool isSkipLayer); 91 static void SetSnapshotSkipLayer(RSContext& context, NodeId nodeId, bool isSnapshotSkipLayer); 92 static void SetFingerprint(RSContext& context, NodeId nodeId, bool hasFingerprint); 93 static void SetColorSpace(RSContext& context, NodeId nodeId, GraphicColorGamut colorSpace); 94 static void UpdateSurfaceDefaultSize(RSContext& context, NodeId nodeId, float width, float height); 95 static void ConnectToNodeInRenderService(RSContext& context, NodeId id); 96 static void SetCallbackForRenderThreadRefresh(RSContext& context, NodeId id, bool isRefresh); 97 static void SetContextBounds(RSContext& context, NodeId id, Vector4f bounds); 98 static void SetIsTextureExportNode(RSContext& context, NodeId id, bool isTextureExportNode); 99 static void SetAbilityBGAlpha(RSContext& context, NodeId id, uint8_t alpha); 100 static void SetIsNotifyUIBufferAvailable(RSContext& context, NodeId nodeId, bool available); 101 static void MarkUIHidden(RSContext& context, NodeId nodeId, bool isHidden); 102 static void SetSurfaceNodeType(RSContext& context, NodeId nodeId, uint8_t surfaceNodeType); 103 static void SetContainerWindow(RSContext& context, NodeId nodeId, bool hasContainerWindow, RRect rrect); 104 static void SetAnimationFinished(RSContext& context, NodeId nodeId); 105 static void AttachToDisplay(RSContext& context, NodeId nodeId, uint64_t screenId); 106 static void DetachToDisplay(RSContext& context, NodeId nodeId, uint64_t screenId); 107 static void SetBootAnimation(RSContext& context, NodeId nodeId, bool isBootAnimation); 108 static void SetGlobalPositionEnabled(RSContext& context, NodeId nodeId, bool isEnabled); 109 static void SetForceHardwareAndFixRotation(RSContext& context, NodeId nodeId, bool flag); 110 #ifdef USE_SURFACE_TEXTURE 111 static void CreateSurfaceExt(RSContext& context, NodeId id, const std::shared_ptr<RSSurfaceTexture>& surfaceExt); 112 #endif 113 static void SetForeground(RSContext& context, NodeId nodeId, bool isForeground); 114 static void SetSurfaceId(RSContext& context, NodeId nodeId, SurfaceId surfaceId); 115 static void SetClonedNodeId(RSContext& context, NodeId nodeId, NodeId cloneNodeId); 116 static void SetForceUIFirst(RSContext& context, NodeId nodeId, bool forceUIFirst); 117 static void SetAncoFlags(RSContext& context, NodeId nodeId, uint32_t flags); 118 static void SetHDRPresent(RSContext& context, NodeId nodeId, bool hdrPresent); 119 static void SetSkipDraw(RSContext& context, NodeId nodeId, bool skip); 120 static void SetWatermarkEnabled(RSContext& context, NodeId nodeId, const std::string& name, bool isEnabled); 121 static void SetAbilityState(RSContext& context, NodeId nodeId, RSSurfaceNodeAbilityState abilityState); 122 static void SetApiCompatibleVersion(RSContext& context, NodeId nodeId, uint32_t apiCompatibleVersion); 123 static void SetHardwareEnableHint(RSContext& context, NodeId nodeId, bool enable); 124 static void SetSourceVirtualDisplayId(RSContext& context, NodeId nodeId, ScreenId screenId); 125 static void AttachToWindowContainer(RSContext& context, NodeId nodeId, ScreenId screenId); 126 static void DetachFromWindowContainer(RSContext& context, NodeId nodeId, ScreenId screenId); 127 }; 128 129 ADD_COMMAND(RSSurfaceNodeCreate, 130 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_CREATE, 131 SurfaceNodeCommandHelper::Create, NodeId, RSSurfaceNodeType, bool)) 132 ADD_COMMAND(RSSurfaceNodeCreateWithConfig, 133 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_CREATE_WITH_CONFIG, 134 SurfaceNodeCommandHelper::CreateWithConfig, NodeId, std::string, uint8_t, enum SurfaceWindowType)) 135 ADD_COMMAND(RSSurfaceNodeSetContextMatrix, 136 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_MATRIX, 137 SurfaceNodeCommandHelper::SetContextMatrix, NodeId, std::optional<Drawing::Matrix>)) 138 ADD_COMMAND(RSSurfaceNodeSetContextAlpha, 139 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_ALPHA, 140 SurfaceNodeCommandHelper::SetContextAlpha, NodeId, float)) 141 ADD_COMMAND(RSSurfaceNodeSetContextClipRegion, 142 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_CLIP_REGION, 143 SurfaceNodeCommandHelper::SetContextClipRegion, NodeId, std::optional<Drawing::Rect>)) 144 ADD_COMMAND(RSSurfaceNodeSetHardwareAndFixRotation, 145 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_FORCE_HARDWARE_AND_FIX_ROTATION, 146 SurfaceNodeCommandHelper::SetForceHardwareAndFixRotation, NodeId, bool)) 147 ADD_COMMAND(RSSurfaceNodeSetBootAnimation, 148 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_BOOT_ANIMATION, 149 SurfaceNodeCommandHelper::SetBootAnimation, NodeId, bool)) 150 ADD_COMMAND(RSSurfaceNodeSetGlobalPositionEnabled, 151 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_GLOBAL_POSITION_ENABLED, 152 SurfaceNodeCommandHelper::SetGlobalPositionEnabled, NodeId, bool)) 153 ADD_COMMAND(RSSurfaceNodeSetSecurityLayer, 154 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_SECURITY_LAYER, 155 SurfaceNodeCommandHelper::SetSecurityLayer, NodeId, bool)) 156 ADD_COMMAND(RSSurfaceNodeSetSkipLayer, 157 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_SKIP_LAYER, 158 SurfaceNodeCommandHelper::SetSkipLayer, NodeId, bool)) 159 ADD_COMMAND(RSSurfaceNodeSetSnapshotSkipLayer, 160 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_SNAPSHOT_SKIP_LAYER, 161 SurfaceNodeCommandHelper::SetSnapshotSkipLayer, NodeId, bool)) 162 ADD_COMMAND(RSSurfaceNodeSetFingerprint, 163 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_FINGERPRINT, 164 SurfaceNodeCommandHelper::SetFingerprint, NodeId, bool)) 165 ADD_COMMAND(RSSurfaceNodeUpdateSurfaceDefaultSize, 166 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_UPDATE_SURFACE_SIZE, 167 SurfaceNodeCommandHelper::UpdateSurfaceDefaultSize, NodeId, float, float)) 168 ADD_COMMAND(RSSurfaceNodeConnectToNodeInRenderService, 169 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_CONNECT_TO_NODE_IN_RENDER_SERVICE, 170 SurfaceNodeCommandHelper::ConnectToNodeInRenderService, NodeId)) 171 ADD_COMMAND(RSSurfaceNodeSetCallbackForRenderThreadRefresh, 172 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CALLBACK_FOR_RENDER_THREAD, 173 SurfaceNodeCommandHelper::SetCallbackForRenderThreadRefresh, NodeId, bool)) 174 ADD_COMMAND(RSSurfaceNodeSetBounds, 175 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_BOUNDS, 176 SurfaceNodeCommandHelper::SetContextBounds, NodeId, Vector4f)) 177 ADD_COMMAND(RSSurfaceNodeSetAbilityBGAlpha, 178 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_ABILITY_BG_ALPHA, 179 SurfaceNodeCommandHelper::SetAbilityBGAlpha, NodeId, uint8_t)) 180 ADD_COMMAND(RSSurfaceNodeSetIsNotifyUIBufferAvailable, 181 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_IS_NOTIFY_BUFFER_AVAILABLE, 182 SurfaceNodeCommandHelper::SetIsNotifyUIBufferAvailable, NodeId, bool)) 183 ADD_COMMAND(RSSurfaceNodeMarkUIHidden, 184 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_MARK_UIHIDDEN, 185 SurfaceNodeCommandHelper::MarkUIHidden, NodeId, bool)) 186 ADD_COMMAND(RSSurfaceNodeSetIsTextureExportNode, 187 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_IS_TEXTURE_EXPORT_NODE, 188 SurfaceNodeCommandHelper::SetIsTextureExportNode, NodeId, bool)) 189 ADD_COMMAND(RSSurfaceNodeSetSurfaceNodeType, 190 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_SURFACE_NODE_TYPE, 191 SurfaceNodeCommandHelper::SetSurfaceNodeType, NodeId, uint8_t)) 192 ADD_COMMAND(RSSurfaceNodeSetContainerWindow, 193 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_CONTAINER_WINDOW, 194 SurfaceNodeCommandHelper::SetContainerWindow, NodeId, bool, RRect)) 195 ADD_COMMAND(RSSurfaceNodeSetAnimationFinished, 196 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_ANIMATION_FINISHED, 197 SurfaceNodeCommandHelper::SetAnimationFinished, NodeId)) 198 ADD_COMMAND(RSSurfaceNodeAttachToDisplay, 199 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_ATTACH_TO_DISPLAY, 200 SurfaceNodeCommandHelper::AttachToDisplay, NodeId, uint64_t)) 201 ADD_COMMAND(RSSurfaceNodeDetachToDisplay, 202 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_DETACH_TO_DISPLAY, 203 SurfaceNodeCommandHelper::DetachToDisplay, NodeId, uint64_t)) 204 ADD_COMMAND(RSSurfaceNodeSetColorSpace, 205 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_COLOR_SPACE, 206 SurfaceNodeCommandHelper::SetColorSpace, NodeId, GraphicColorGamut)) 207 ADD_COMMAND(RSurfaceNodeSetSurfaceId, 208 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_SURFACE_ID, 209 SurfaceNodeCommandHelper::SetSurfaceId, NodeId, SurfaceId)) 210 ADD_COMMAND(RSurfaceNodeSetLeashPersistentId, 211 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_LEASH_PERSISTENT_ID, 212 SurfaceNodeCommandHelper::SetLeashPersistentId, NodeId, LeashPersistentId)) 213 214 #ifdef USE_SURFACE_TEXTURE 215 ADD_COMMAND(RSSurfaceNodeCreateSurfaceExt, 216 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_CREATE_SURFACE_EXT, 217 SurfaceNodeCommandHelper::CreateSurfaceExt, NodeId, std::shared_ptr<RSSurfaceTexture>)) 218 #endif 219 ADD_COMMAND(RSSurfaceNodeSetForeground, 220 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_FOREGROUND, 221 SurfaceNodeCommandHelper::SetForeground, NodeId, bool)) 222 ADD_COMMAND(RSSurfaceNodeSetClonedNodeId, 223 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_CLONED_NODE_ID, 224 SurfaceNodeCommandHelper::SetClonedNodeId, NodeId, NodeId)) 225 ADD_COMMAND(RSSurfaceNodeSetForceUIFirst, 226 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_FORCE_UIFIRST, 227 SurfaceNodeCommandHelper::SetForceUIFirst, NodeId, bool)) 228 ADD_COMMAND(RSSurfaceNodeSetAncoFlags, 229 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_ANCO_FLAGS, 230 SurfaceNodeCommandHelper::SetAncoFlags, NodeId, uint32_t)) 231 ADD_COMMAND(RSSurfaceNodeSetHDRPresent, 232 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_HDR_PRESENT, 233 SurfaceNodeCommandHelper::SetHDRPresent, NodeId, bool)) 234 ADD_COMMAND(RSSurfaceNodeSetSkipDraw, 235 ARG(PERMISSION_SYSTEM, SURFACE_NODE, SURFACE_NODE_SET_SKIP_DRAW, 236 SurfaceNodeCommandHelper::SetSkipDraw, NodeId, bool)) 237 ADD_COMMAND(RSSurfaceNodeSetWatermarkEnabled, 238 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_WATERMARK_ENABLED, 239 SurfaceNodeCommandHelper::SetWatermarkEnabled, NodeId, std::string, bool)) 240 ADD_COMMAND(RSSurfaceNodeSetAbilityState, 241 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_ABILITY_STATE, 242 SurfaceNodeCommandHelper::SetAbilityState, NodeId, RSSurfaceNodeAbilityState)) 243 ADD_COMMAND( 244 RSSurfaceNodeSetApiCompatibleVersion, ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_API_COMPATIBLE_VERSION, 245 SurfaceNodeCommandHelper::SetApiCompatibleVersion, NodeId, uint32_t)) 246 ADD_COMMAND(RSSurfaceNodeSetHardwareEnableHint, 247 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_HARDWARE_ENABLE_HINT, 248 SurfaceNodeCommandHelper::SetHardwareEnableHint, NodeId, bool)) 249 ADD_COMMAND(RSSurfaceNodeAttachToWindowContainer, 250 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_ATTACH_TO_WINDOW_CONTAINER, 251 SurfaceNodeCommandHelper::AttachToWindowContainer, NodeId, ScreenId)) 252 ADD_COMMAND(RSSurfaceNodeDetachFromWindowContainer, 253 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_DETACH_FROM_WINDOW_CONTAINER, 254 SurfaceNodeCommandHelper::DetachFromWindowContainer, NodeId, ScreenId)) 255 ADD_COMMAND(RSSurfaceNodeSetSourceVirtualDisplayId, 256 ARG(PERMISSION_APP, SURFACE_NODE, SURFACE_NODE_SET_SOURCE_VIRTUAL_DISPLAY_ID, 257 SurfaceNodeCommandHelper::SetSourceVirtualDisplayId, NodeId, ScreenId)) 258 } // namespace Rosen 259 } // namespace OHOS 260 #endif // ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_SURFACE_NODE_COMMAND_H 261