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_TRANSACTION_RS_IRENDER_SERVICE_CONNECTION_H
17 #define ROSEN_RENDER_SERVICE_BASE_TRANSACTION_RS_IRENDER_SERVICE_CONNECTION_H
18 
19 #include <iremote_broker.h>
20 #include <string>
21 #include <surface.h>
22 
23 #include "command/rs_command.h"
24 #include "command/rs_node_showing_command.h"
25 #include "ipc_callbacks/buffer_available_callback.h"
26 #include "ipc_callbacks/buffer_clear_callback.h"
27 #include "ipc_callbacks/iapplication_agent.h"
28 #include "ipc_callbacks/rs_isurface_occlusion_change_callback.h"
29 #include "ipc_callbacks/rs_surface_buffer_callback.h"
30 #include "ipc_callbacks/rs_iframe_rate_linker_expected_fps_update_callback.h"
31 #include "ipc_callbacks/screen_change_callback.h"
32 #include "ipc_callbacks/surface_capture_callback.h"
33 #include "memory/rs_memory_graphic.h"
34 #include "screen_manager/rs_screen_capability.h"
35 #include "screen_manager/rs_screen_data.h"
36 #include "screen_manager/rs_screen_hdr_capability.h"
37 #include "screen_manager/rs_screen_mode_info.h"
38 #include "screen_manager/screen_types.h"
39 #include "screen_manager/rs_virtual_screen_resolution.h"
40 #include "transaction/rs_transaction_data.h"
41 #include "transaction/rs_render_service_client.h"
42 #include "ivsync_connection.h"
43 #include "ipc_callbacks/rs_ihgm_config_change_callback.h"
44 #include "ipc_callbacks/rs_iocclusion_change_callback.h"
45 #include "ipc_callbacks/rs_iuiextension_callback.h"
46 #include "vsync_iconnection_token.h"
47 
48 namespace OHOS {
49 namespace Rosen {
50 
51 class RSIRenderServiceConnection : public IRemoteBroker {
52 public:
53     DECLARE_INTERFACE_DESCRIPTOR(u"ohos.rosen.RenderServiceConnection");
54 
55     RSIRenderServiceConnection() = default;
56     virtual ~RSIRenderServiceConnection() noexcept = default;
57 
58     virtual void CommitTransaction(std::unique_ptr<RSTransactionData>& transactionData) = 0;
59     virtual void ExecuteSynchronousTask(const std::shared_ptr<RSSyncTask>& task) = 0;
60 
61     virtual bool GetUniRenderEnabled() = 0;
62 
63     virtual bool CreateNode(const RSSurfaceRenderNodeConfig& config) = 0;
64     virtual bool CreateNode(const RSDisplayNodeConfig& displayNodeConfig, NodeId nodeId) = 0;
65     virtual sptr<Surface> CreateNodeAndSurface(const RSSurfaceRenderNodeConfig& config) = 0;
66 
67     virtual sptr<IVSyncConnection> CreateVSyncConnection(const std::string& name,
68                                                          const sptr<VSyncIConnectionToken>& token = nullptr,
69                                                          uint64_t id = 0,
70                                                          NodeId windowNodeId = 0,
71                                                          bool fromXcomponent = false) = 0;
72 
73     virtual std::shared_ptr<Media::PixelMap> CreatePixelMapFromSurface(sptr<Surface> surface,
74         const Rect &srcRect) = 0;
75 
76     virtual int32_t SetFocusAppInfo(
77         int32_t pid, int32_t uid, const std::string &bundleName, const std::string &abilityName,
78         uint64_t focusNodeId) = 0;
79 
80     virtual ScreenId GetDefaultScreenId() = 0;
81 
82     virtual ScreenId GetActiveScreenId() = 0;
83 
84     virtual std::vector<ScreenId> GetAllScreenIds() = 0;
85 
86     // mirrorId: decide which screen id to mirror, INVALID_SCREEN_ID means do not mirror any screen.
87     virtual ScreenId CreateVirtualScreen(
88         const std::string &name,
89         uint32_t width,
90         uint32_t height,
91         sptr<Surface> surface,
92         ScreenId mirrorId = 0,
93         int32_t flags = 0,
94         std::vector<NodeId> whiteList = {}) = 0;
95 
96     virtual int32_t SetVirtualScreenBlackList(ScreenId id, std::vector<NodeId>& blackListVector) = 0;
97 
98     virtual int32_t AddVirtualScreenBlackList(ScreenId id, std::vector<NodeId>& blackListVector) = 0;
99 
100     virtual int32_t RemoveVirtualScreenBlackList(ScreenId id, std::vector<NodeId>& blackListVector) = 0;
101 
102     virtual int32_t SetVirtualScreenSecurityExemptionList(
103         ScreenId id, const std::vector<NodeId>& securityExemptionList) = 0;
104 
105     virtual int32_t SetCastScreenEnableSkipWindow(ScreenId id, bool enable) = 0;
106 
107     virtual int32_t SetVirtualScreenSurface(ScreenId id, sptr<Surface> surface) = 0;
108 
109     virtual void RemoveVirtualScreen(ScreenId id) = 0;
110 
111     virtual int32_t SetScreenChangeCallback(sptr<RSIScreenChangeCallback> callback) = 0;
112 
113     virtual void SetScreenActiveMode(ScreenId id, uint32_t modeId) = 0;
114 
115     virtual void SetScreenRefreshRate(ScreenId id, int32_t sceneId, int32_t rate) = 0;
116 
117     virtual void SetRefreshRateMode(int32_t refreshRateMode) = 0;
118 
119     virtual void SyncFrameRateRange(FrameRateLinkerId id, const FrameRateRange& range,
120         int32_t animatorExpectedFrameRate) = 0;
121 
122     virtual void UnregisterFrameRateLinker(FrameRateLinkerId id) = 0;
123 
124     virtual uint32_t GetScreenCurrentRefreshRate(ScreenId id) = 0;
125 
126     virtual int32_t GetCurrentRefreshRateMode() = 0;
127 
128     virtual std::vector<int32_t> GetScreenSupportedRefreshRates(ScreenId id) = 0;
129 
130     virtual bool GetShowRefreshRateEnabled() = 0;
131 
132     virtual void SetShowRefreshRateEnabled(bool enable) = 0;
133 
134     virtual std::string GetRefreshInfo(pid_t pid) = 0;
135 
136     virtual int32_t SetVirtualScreenResolution(ScreenId id, uint32_t width, uint32_t height) = 0;
137 
138     virtual void MarkPowerOffNeedProcessOneFrame() = 0;
139 
140     virtual void DisablePowerOffRenderControl(ScreenId id) = 0;
141 
142     virtual void SetScreenPowerStatus(ScreenId id, ScreenPowerStatus status) = 0;
143 
144     virtual void TakeSurfaceCapture(NodeId id, sptr<RSISurfaceCaptureCallback> callback,
145         const RSSurfaceCaptureConfig& captureConfig,
146         RSSurfaceCapturePermissions permissions = RSSurfaceCapturePermissions()) = 0;
147 
148     virtual void SetWindowFreezeImmediately(NodeId id, bool isFreeze, sptr<RSISurfaceCaptureCallback> callback,
149         const RSSurfaceCaptureConfig& captureConfig) = 0;
150 
151     virtual void RegisterApplicationAgent(uint32_t pid, sptr<IApplicationAgent> app) = 0;
152 
153     virtual RSVirtualScreenResolution GetVirtualScreenResolution(ScreenId id) = 0;
154 
155     virtual RSScreenModeInfo GetScreenActiveMode(ScreenId id) = 0;
156 
157     virtual std::vector<RSScreenModeInfo> GetScreenSupportedModes(ScreenId id) = 0;
158 
159     virtual RSScreenCapability GetScreenCapability(ScreenId id) = 0;
160 
161     virtual ScreenPowerStatus GetScreenPowerStatus(ScreenId id) = 0;
162 
163     virtual RSScreenData GetScreenData(ScreenId id) = 0;
164 
165     virtual MemoryGraphic GetMemoryGraphic(int pid) = 0;
166 
167     virtual bool GetTotalAppMemSize(float& cpuMemSize, float& gpuMemSize) = 0;
168 
169     virtual std::vector<MemoryGraphic> GetMemoryGraphics() = 0;
170 
171     virtual int32_t GetScreenBacklight(ScreenId id) = 0;
172 
173     virtual void SetScreenBacklight(ScreenId id, uint32_t level) = 0;
174 
175     virtual void RegisterBufferAvailableListener(
176         NodeId id, sptr<RSIBufferAvailableCallback> callback, bool isFromRenderThread) = 0;
177 
178     virtual void RegisterBufferClearListener(
179         NodeId id, sptr<RSIBufferClearCallback> callback) = 0;
180 
181     virtual int32_t GetScreenSupportedColorGamuts(ScreenId id, std::vector<ScreenColorGamut>& mode) = 0;
182 
183     virtual int32_t GetScreenSupportedMetaDataKeys(ScreenId id, std::vector<ScreenHDRMetadataKey>& keys) = 0;
184 
185     virtual int32_t GetScreenColorGamut(ScreenId id, ScreenColorGamut& mode) = 0;
186 
187     virtual int32_t SetScreenColorGamut(ScreenId id, int32_t modeIdx) = 0;
188 
189     virtual int32_t SetScreenGamutMap(ScreenId id, ScreenGamutMap mode) = 0;
190 
191     virtual int32_t SetScreenCorrection(ScreenId id, ScreenRotation screenRotation) = 0;
192 
193     virtual bool SetVirtualMirrorScreenCanvasRotation(ScreenId id, bool canvasRotation) = 0;
194 
195     virtual bool SetVirtualMirrorScreenScaleMode(ScreenId id, ScreenScaleMode scaleMode) = 0;
196 
197     virtual bool SetGlobalDarkColorMode(bool isDark) = 0;
198 
199     virtual int32_t GetScreenGamutMap(ScreenId id, ScreenGamutMap& mode) = 0;
200 
201     virtual int32_t GetScreenHDRCapability(ScreenId id, RSScreenHDRCapability& screenHdrCapability) = 0;
202 
203     virtual int32_t GetPixelFormat(ScreenId id, GraphicPixelFormat& pixelFormat) = 0;
204 
205     virtual int32_t SetPixelFormat(ScreenId id, GraphicPixelFormat pixelFormat) = 0;
206 
207     virtual int32_t GetScreenSupportedHDRFormats(ScreenId id, std::vector<ScreenHDRFormat>& hdrFormats) = 0;
208 
209     virtual int32_t GetScreenHDRFormat(ScreenId id, ScreenHDRFormat& hdrFormat) = 0;
210 
211     virtual int32_t SetScreenHDRFormat(ScreenId id, int32_t modeIdx) = 0;
212 
213     virtual int32_t GetScreenSupportedColorSpaces(ScreenId id, std::vector<GraphicCM_ColorSpaceType>& colorSpaces) = 0;
214 
215     virtual int32_t GetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType& colorSpace) = 0;
216 
217     virtual int32_t SetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType colorSpace) = 0;
218 
219     virtual int32_t GetScreenType(ScreenId id, RSScreenType& screenType) = 0;
220 
221     virtual bool GetBitmap(NodeId id, Drawing::Bitmap& bitmap) = 0;
222     virtual bool GetPixelmap(NodeId id, std::shared_ptr<Media::PixelMap> pixelmap,
223         const Drawing::Rect* rect, std::shared_ptr<Drawing::DrawCmdList> drawCmdList) = 0;
224     virtual bool RegisterTypeface(uint64_t globalUniqueId, std::shared_ptr<Drawing::Typeface>& typeface) = 0;
225     virtual bool UnRegisterTypeface(uint64_t globalUniqueId) = 0;
226 
227     virtual int32_t SetScreenSkipFrameInterval(ScreenId id, uint32_t skipFrameInterval) = 0;
228 
229     virtual int32_t SetVirtualScreenRefreshRate(ScreenId id, uint32_t maxRefreshRate, uint32_t& actualRefreshRate) = 0;
230 
231     virtual int32_t RegisterOcclusionChangeCallback(sptr<RSIOcclusionChangeCallback> callback) = 0;
232 
233     virtual int32_t RegisterSurfaceOcclusionChangeCallback(
234         NodeId id, sptr<RSISurfaceOcclusionChangeCallback> callback, std::vector<float>& partitionPoints) = 0;
235 
236     virtual int32_t UnRegisterSurfaceOcclusionChangeCallback(NodeId id) = 0;
237 
238     virtual int32_t RegisterHgmConfigChangeCallback(sptr<RSIHgmConfigChangeCallback> callback) = 0;
239 
240     virtual int32_t RegisterHgmRefreshRateModeChangeCallback(sptr<RSIHgmConfigChangeCallback> callback) = 0;
241 
242     virtual void SetAppWindowNum(uint32_t num) = 0;
243 
244     virtual int32_t RegisterHgmRefreshRateUpdateCallback(sptr<RSIHgmConfigChangeCallback> callback) = 0;
245 
246     virtual int32_t RegisterFrameRateLinkerExpectedFpsUpdateCallback(int32_t pid,
247         sptr<RSIFrameRateLinkerExpectedFpsUpdateCallback> callback) = 0;
248 
249     virtual bool SetSystemAnimatedScenes(SystemAnimatedScenes systemAnimatedScenes) = 0;
250 
251     virtual void ShowWatermark(const std::shared_ptr<Media::PixelMap> &watermarkImg, bool isShow) = 0;
252 
253     virtual int32_t ResizeVirtualScreen(ScreenId id, uint32_t width, uint32_t height) = 0;
254 
255     virtual void ReportJankStats() = 0;
256 
257     virtual void NotifyLightFactorStatus(bool isSafe) = 0;
258 
259     virtual void NotifyPackageEvent(uint32_t listSize, const std::vector<std::string>& packageList) = 0;
260 
261     virtual void NotifyRefreshRateEvent(const EventInfo& eventInfo) = 0;
262 
263     virtual void NotifyTouchEvent(int32_t touchStatus, int32_t touchCnt) = 0;
264 
265     virtual void NotifyDynamicModeEvent(bool enableDynamicMode) = 0;
266 
267     virtual void ReportEventResponse(DataBaseRs info) = 0;
268 
269     virtual void ReportEventComplete(DataBaseRs info) = 0;
270 
271     virtual void ReportEventJankFrame(DataBaseRs info) = 0;
272 
273     virtual void ReportGameStateData(GameStateData info) = 0;
274 
275     virtual void SetHardwareEnabled(NodeId id, bool isEnabled, SelfDrawingNodeType selfDrawingType,
276         bool dynamicHardwareEnable) = 0;
277 
278     virtual uint32_t SetHidePrivacyContent(NodeId id, bool needHidePrivacyContent) = 0;
279 
280     virtual void SetCacheEnabledForRotation(bool isEnabled) = 0;
281 
282     virtual void SetOnRemoteDiedCallback(const OnRemoteDiedCallback& callback) = 0;
283 
284     virtual void RunOnRemoteDiedCallback() = 0;
285 
286     virtual void SetVirtualScreenUsingStatus(bool isVirtualScreenUsingStatus) = 0;
287 
288     virtual void SetCurtainScreenUsingStatus(bool isCurtainScreenOn) = 0;
289 
290     virtual void DropFrameByPid(const std::vector<int32_t> pidList) = 0;
291 
292     virtual std::vector<ActiveDirtyRegionInfo> GetActiveDirtyRegionInfo() = 0;
293 
294     virtual GlobalDirtyRegionInfo GetGlobalDirtyRegionInfo() = 0;
295 
296     virtual LayerComposeInfo GetLayerComposeInfo() = 0;
297 
298     virtual HwcDisabledReasonInfos GetHwcDisabledReasonInfo() = 0;
299 
300     virtual void SetVmaCacheStatus(bool flag) = 0;
301 
302     virtual int32_t RegisterUIExtensionCallback(uint64_t userId, sptr<RSIUIExtensionCallback> callback) = 0;
303 
304     virtual bool SetAncoForceDoDirect(bool direct) = 0;
305 
306     virtual void SetLayerTop(const std::string &nodeIdStr, bool isTop) = 0;
307 #ifdef TP_FEATURE_ENABLE
308     virtual void SetTpFeatureConfig(int32_t feature, const char* config, TpFeatureConfigType tpFeatureConfigType) = 0;
309 #endif
310 
311     virtual void RegisterSurfaceBufferCallback(pid_t pid, uint64_t uid,
312         sptr<RSISurfaceBufferCallback> callback) = 0;
313 
314     virtual void UnregisterSurfaceBufferCallback(pid_t pid, uint64_t uid) = 0;
315 };
316 } // namespace Rosen
317 } // namespace OHOS
318 
319 #endif // ROSEN_RENDER_SERVICE_BASE_TRANSACTION_RS_IRENDER_SERVICE_CONNECTION_H
320