• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "transaction/rs_render_service_client.h"
17 
18 #include "backend/rs_surface_ohos_gl.h"
19 #include "backend/rs_surface_ohos_raster.h"
20 #ifdef RS_ENABLE_VK
21 #include "backend/rs_surface_ohos_vulkan.h"
22 #endif
23 
24 #include "command/rs_command.h"
25 #include "command/rs_node_showing_command.h"
26 #include "ipc_callbacks/rs_surface_occlusion_change_callback_stub.h"
27 #include "ipc_callbacks/screen_change_callback_stub.h"
28 #include "ipc_callbacks/surface_capture_callback_stub.h"
29 #include "ipc_callbacks/buffer_available_callback_stub.h"
30 #include "ipc_callbacks/buffer_clear_callback_stub.h"
31 #include "ipc_callbacks/hgm_config_change_callback_stub.h"
32 #include "ipc_callbacks/rs_occlusion_change_callback_stub.h"
33 #include "platform/common/rs_log.h"
34 #include "platform/common/rs_system_properties.h"
35 #ifdef NEW_RENDER_CONTEXT
36 #include "render_backend/rs_surface_factory.h"
37 #endif
38 #include "rs_render_service_connect_hub.h"
39 #include "rs_surface_ohos.h"
40 #include "vsync_iconnection_token.h"
41 
42 namespace OHOS {
43 namespace Rosen {
CreateRenderServiceClient()44 std::shared_ptr<RSIRenderClient> RSIRenderClient::CreateRenderServiceClient()
45 {
46     static std::shared_ptr<RSIRenderClient> client = std::make_shared<RSRenderServiceClient>();
47     return client;
48 }
49 
CommitTransaction(std::unique_ptr<RSTransactionData> & transactionData)50 void RSRenderServiceClient::CommitTransaction(std::unique_ptr<RSTransactionData>& transactionData)
51 {
52     auto renderService = RSRenderServiceConnectHub::GetRenderService();
53     if (renderService != nullptr) {
54         renderService->CommitTransaction(transactionData);
55     }
56 }
57 
ExecuteSynchronousTask(const std::shared_ptr<RSSyncTask> & task)58 void RSRenderServiceClient::ExecuteSynchronousTask(const std::shared_ptr<RSSyncTask>& task)
59 {
60     if (task == nullptr) {
61         return;
62     }
63 
64     auto renderService = RSRenderServiceConnectHub::GetRenderService();
65     if (renderService != nullptr) {
66         renderService->ExecuteSynchronousTask(task);
67     }
68 }
69 
GetUniRenderEnabled()70 bool RSRenderServiceClient::GetUniRenderEnabled()
71 {
72     auto renderService = RSRenderServiceConnectHub::GetRenderService();
73     if (renderService == nullptr) {
74         return false;
75     }
76     return renderService->GetUniRenderEnabled();
77 }
78 
GetMemoryGraphic(int pid)79 MemoryGraphic RSRenderServiceClient::GetMemoryGraphic(int pid)
80 {
81     auto renderService = RSRenderServiceConnectHub::GetRenderService();
82     if (renderService == nullptr) {
83         return MemoryGraphic {};
84     }
85     return renderService->GetMemoryGraphic(pid);
86 }
87 
GetMemoryGraphics()88 std::vector<MemoryGraphic> RSRenderServiceClient::GetMemoryGraphics()
89 {
90     auto renderService = RSRenderServiceConnectHub::GetRenderService();
91     if (renderService == nullptr) {
92         return {};
93     }
94     return renderService->GetMemoryGraphics();
95 }
96 
GetTotalAppMemSize(float & cpuMemSize,float & gpuMemSize)97 bool RSRenderServiceClient::GetTotalAppMemSize(float& cpuMemSize, float& gpuMemSize)
98 {
99     auto renderService = RSRenderServiceConnectHub::GetRenderService();
100     if (renderService == nullptr) {
101         return false;
102     }
103     return renderService->GetTotalAppMemSize(cpuMemSize, gpuMemSize);
104 }
105 
CreateNode(const RSSurfaceRenderNodeConfig & config)106 bool RSRenderServiceClient::CreateNode(const RSSurfaceRenderNodeConfig& config)
107 {
108     auto renderService = RSRenderServiceConnectHub::GetRenderService();
109     if (renderService == nullptr) {
110         return false;
111     }
112     return renderService->CreateNode(config);
113 }
114 
115 #ifdef NEW_RENDER_CONTEXT
CreateNodeAndSurface(const RSSurfaceRenderNodeConfig & config)116 std::shared_ptr<RSRenderSurface> RSRenderServiceClient::CreateNodeAndSurface(const RSSurfaceRenderNodeConfig& config)
117 #else
118 std::shared_ptr<RSSurface> RSRenderServiceClient::CreateNodeAndSurface(const RSSurfaceRenderNodeConfig& config)
119 #endif
120 {
121     auto renderService = RSRenderServiceConnectHub::GetRenderService();
122     if (renderService == nullptr) {
123         return nullptr;
124     }
125     sptr<Surface> surface = renderService->CreateNodeAndSurface(config);
126     return CreateRSSurface(surface);
127 }
128 
129 #if defined(NEW_RENDER_CONTEXT)
CreateRSSurface(const sptr<Surface> & surface)130 std::shared_ptr<RSRenderSurface> RSRenderServiceClient::CreateRSSurface(const sptr<Surface> &surface)
131 {
132     std::shared_ptr<RSRenderSurface> producer = RSSurfaceFactory::CreateRSSurface(PlatformName::OHOS, surface);
133     return producer;
134 }
135 #else
CreateRSSurface(const sptr<Surface> & surface)136 std::shared_ptr<RSSurface> RSRenderServiceClient::CreateRSSurface(const sptr<Surface> &surface)
137 {
138 #if defined (ACE_ENABLE_VK)
139     if (RSSystemProperties::GetGpuApiType() == GpuApiType::VULKAN ||
140         RSSystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
141         return std::make_shared<RSSurfaceOhosVulkan>(surface); // GPU render
142     }
143 #endif
144 
145 #if defined (ACE_ENABLE_GL)
146     if (RSSystemProperties::GetGpuApiType() == Rosen::GpuApiType::OPENGL) {
147         return std::make_shared<RSSurfaceOhosGl>(surface); // GPU render
148     }
149 #endif
150     return std::make_shared<RSSurfaceOhosRaster>(surface); // CPU render
151 }
152 #endif
153 
CreateVSyncReceiver(const std::string & name,const std::shared_ptr<OHOS::AppExecFwk::EventHandler> & looper,uint64_t id)154 std::shared_ptr<VSyncReceiver> RSRenderServiceClient::CreateVSyncReceiver(
155     const std::string& name,
156     const std::shared_ptr<OHOS::AppExecFwk::EventHandler> &looper,
157     uint64_t id)
158 {
159     ROSEN_LOGD("RSRenderServiceClient::CreateVSyncReceiver Start");
160     auto renderService = RSRenderServiceConnectHub::GetRenderService();
161     if (renderService == nullptr) {
162         return nullptr;
163     }
164     sptr<VSyncIConnectionToken> token = new IRemoteStub<VSyncIConnectionToken>();
165     sptr<IVSyncConnection> conn = renderService->CreateVSyncConnection(name, token, id);
166     if (conn == nullptr) {
167         ROSEN_LOGE("RSRenderServiceClient::CreateVSyncReceiver Failed");
168         return nullptr;
169     }
170     return std::make_shared<VSyncReceiver>(conn, token->AsObject(), looper, name);
171 }
172 
TriggerSurfaceCaptureCallback(NodeId id,Media::PixelMap * pixelmap)173 void RSRenderServiceClient::TriggerSurfaceCaptureCallback(NodeId id, Media::PixelMap* pixelmap)
174 {
175     ROSEN_LOGD("RSRenderServiceClient::Into TriggerSurfaceCaptureCallback nodeId:[%{public}" PRIu64 "]", id);
176     std::vector<std::shared_ptr<SurfaceCaptureCallback>> callbackVector;
177     {
178         std::lock_guard<std::mutex> lock(mutex_);
179         auto iter = surfaceCaptureCbMap_.find(id);
180         if (iter != surfaceCaptureCbMap_.end()) {
181             callbackVector = iter->second;
182             surfaceCaptureCbMap_.erase(iter);
183         }
184     }
185     if (callbackVector.empty()) {
186         ROSEN_LOGE("RSRenderServiceClient::TriggerSurfaceCaptureCallback: callbackVector is empty!");
187         return;
188     }
189     for (decltype(callbackVector.size()) i = 0; i < callbackVector.size(); ++i) {
190         if (callbackVector[i] == nullptr) {
191             ROSEN_LOGE("RSRenderServiceClient::TriggerSurfaceCaptureCallback: callback is nullptr!");
192             continue;
193         }
194         Media::PixelMap* pixelmapCopyRelease = nullptr;
195         if (i != callbackVector.size() - 1) {
196             if (pixelmap != nullptr) {
197                 Media::InitializationOptions options;
198                 std::unique_ptr<Media::PixelMap> pixelmapCopy = Media::PixelMap::Create(*pixelmap, options);
199                 pixelmapCopyRelease = pixelmapCopy.release();
200             }
201         } else {
202             pixelmapCopyRelease = pixelmap;
203         }
204         std::shared_ptr<Media::PixelMap> surfaceCapture(pixelmapCopyRelease);
205         callbackVector[i]->OnSurfaceCapture(surfaceCapture);
206     }
207 }
208 
209 class SurfaceCaptureCallbackDirector : public RSSurfaceCaptureCallbackStub
210 {
211 public:
SurfaceCaptureCallbackDirector(RSRenderServiceClient * client)212     explicit SurfaceCaptureCallbackDirector(RSRenderServiceClient* client) : client_(client) {}
~SurfaceCaptureCallbackDirector()213     ~SurfaceCaptureCallbackDirector() override {};
OnSurfaceCapture(NodeId id,Media::PixelMap * pixelmap)214     void OnSurfaceCapture(NodeId id, Media::PixelMap* pixelmap) override
215     {
216         client_->TriggerSurfaceCaptureCallback(id, pixelmap);
217     };
218 
219 private:
220     RSRenderServiceClient* client_;
221 };
222 
TakeSurfaceCapture(NodeId id,std::shared_ptr<SurfaceCaptureCallback> callback,float scaleX,float scaleY,SurfaceCaptureType surfaceCaptureType)223 bool RSRenderServiceClient::TakeSurfaceCapture(NodeId id, std::shared_ptr<SurfaceCaptureCallback> callback,
224     float scaleX, float scaleY, SurfaceCaptureType surfaceCaptureType)
225 {
226     auto renderService = RSRenderServiceConnectHub::GetRenderService();
227     if (renderService == nullptr) {
228         ROSEN_LOGE("RSRenderServiceClient::TakeSurfaceCapture renderService == nullptr!");
229         return false;
230     }
231     if (callback == nullptr) {
232         ROSEN_LOGE("RSRenderServiceClient::TakeSurfaceCapture callback == nullptr!");
233         return false;
234     }
235     {
236         std::lock_guard<std::mutex> lock(mutex_);
237         auto iter = surfaceCaptureCbMap_.find(id);
238         if (iter != surfaceCaptureCbMap_.end()) {
239             ROSEN_LOGW("RSRenderServiceClient::TakeSurfaceCapture surfaceCaptureCbMap_.count(id) != 0");
240             iter->second.emplace_back(callback);
241             return true;
242         }
243         std::vector<std::shared_ptr<SurfaceCaptureCallback>> callbackVector = {callback};
244         surfaceCaptureCbMap_.emplace(id, callbackVector);
245     }
246 
247     if (surfaceCaptureCbDirector_ == nullptr) {
248         surfaceCaptureCbDirector_ = new SurfaceCaptureCallbackDirector(this);
249     }
250     renderService->TakeSurfaceCapture(id, surfaceCaptureCbDirector_, scaleX, scaleY, surfaceCaptureType);
251     return true;
252 }
253 
SetFocusAppInfo(int32_t pid,int32_t uid,const std::string & bundleName,const std::string & abilityName,uint64_t focusNodeId)254 int32_t RSRenderServiceClient::SetFocusAppInfo(
255     int32_t pid, int32_t uid, const std::string &bundleName, const std::string &abilityName, uint64_t focusNodeId)
256 {
257     auto renderService = RSRenderServiceConnectHub::GetRenderService();
258     if (renderService == nullptr) {
259         return RENDER_SERVICE_NULL;
260     }
261 
262     return renderService->SetFocusAppInfo(pid, uid, bundleName, abilityName, focusNodeId);
263 }
264 
GetDefaultScreenId()265 ScreenId RSRenderServiceClient::GetDefaultScreenId()
266 {
267     auto renderService = RSRenderServiceConnectHub::GetRenderService();
268     if (renderService == nullptr) {
269         return INVALID_SCREEN_ID;
270     }
271 
272     return renderService->GetDefaultScreenId();
273 }
274 
GetActiveScreenId()275 ScreenId RSRenderServiceClient::GetActiveScreenId()
276 {
277     auto renderService = RSRenderServiceConnectHub::GetRenderService();
278     if (renderService == nullptr) {
279         return INVALID_SCREEN_ID;
280     }
281 
282     return renderService->GetActiveScreenId();
283 }
284 
GetAllScreenIds()285 std::vector<ScreenId> RSRenderServiceClient::GetAllScreenIds()
286 {
287     auto renderService = RSRenderServiceConnectHub::GetRenderService();
288     if (renderService == nullptr) {
289         return std::vector<ScreenId>();
290     }
291 
292     return renderService->GetAllScreenIds();
293 }
294 
CreateVirtualScreen(const std::string & name,uint32_t width,uint32_t height,sptr<Surface> surface,ScreenId mirrorId,int32_t flags,std::vector<NodeId> filteredAppVector)295 ScreenId RSRenderServiceClient::CreateVirtualScreen(
296     const std::string &name,
297     uint32_t width,
298     uint32_t height,
299     sptr<Surface> surface,
300     ScreenId mirrorId,
301     int32_t flags,
302     std::vector<NodeId> filteredAppVector)
303 {
304     auto renderService = RSRenderServiceConnectHub::GetRenderService();
305     if (renderService == nullptr) {
306         return INVALID_SCREEN_ID;
307     }
308 
309     return renderService->CreateVirtualScreen(name, width, height, surface, mirrorId, flags, filteredAppVector);
310 }
311 
SetVirtualScreenSurface(ScreenId id,sptr<Surface> surface)312 int32_t RSRenderServiceClient::SetVirtualScreenSurface(ScreenId id, sptr<Surface> surface)
313 {
314     auto renderService = RSRenderServiceConnectHub::GetRenderService();
315     if (renderService == nullptr) {
316         return RENDER_SERVICE_NULL;
317     }
318 
319     return renderService->SetVirtualScreenSurface(id, surface);
320 }
321 
RemoveVirtualScreen(ScreenId id)322 void RSRenderServiceClient::RemoveVirtualScreen(ScreenId id)
323 {
324     auto renderService = RSRenderServiceConnectHub::GetRenderService();
325     if (renderService == nullptr) {
326         return;
327     }
328 
329     renderService->RemoveVirtualScreen(id);
330 }
331 
332 class CustomScreenChangeCallback : public RSScreenChangeCallbackStub
333 {
334 public:
CustomScreenChangeCallback(const ScreenChangeCallback & callback)335     explicit CustomScreenChangeCallback(const ScreenChangeCallback &callback) : cb_(callback) {}
~CustomScreenChangeCallback()336     ~CustomScreenChangeCallback() override {};
337 
OnScreenChanged(ScreenId id,ScreenEvent event)338     void OnScreenChanged(ScreenId id, ScreenEvent event) override
339     {
340         if (cb_ != nullptr) {
341             cb_(id, event);
342         }
343     }
344 
345 private:
346     ScreenChangeCallback cb_;
347 };
348 
SetScreenChangeCallback(const ScreenChangeCallback & callback)349 int32_t RSRenderServiceClient::SetScreenChangeCallback(const ScreenChangeCallback &callback)
350 {
351     auto renderService = RSRenderServiceConnectHub::GetRenderService();
352     if (renderService == nullptr) {
353         return RENDER_SERVICE_NULL;
354     }
355 
356     screenChangeCb_ = new CustomScreenChangeCallback(callback);
357     return renderService->SetScreenChangeCallback(screenChangeCb_);
358 }
359 
SetScreenActiveMode(ScreenId id,uint32_t modeId)360 void RSRenderServiceClient::SetScreenActiveMode(ScreenId id, uint32_t modeId)
361 {
362     auto renderService = RSRenderServiceConnectHub::GetRenderService();
363     if (renderService == nullptr) {
364         return;
365     }
366 
367     renderService->SetScreenActiveMode(id, modeId);
368 }
369 
SetScreenRefreshRate(ScreenId id,int32_t sceneId,int32_t rate)370 void RSRenderServiceClient::SetScreenRefreshRate(ScreenId id, int32_t sceneId, int32_t rate)
371 {
372     auto renderService = RSRenderServiceConnectHub::GetRenderService();
373     if (renderService == nullptr) {
374         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
375         return;
376     }
377 
378     renderService->SetScreenRefreshRate(id, sceneId, rate);
379 }
380 
SetRefreshRateMode(int32_t refreshRateMode)381 void RSRenderServiceClient::SetRefreshRateMode(int32_t refreshRateMode)
382 {
383     auto renderService = RSRenderServiceConnectHub::GetRenderService();
384     if (renderService == nullptr) {
385         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
386         return;
387     }
388 
389     renderService->SetRefreshRateMode(refreshRateMode);
390 }
391 
SyncFrameRateRange(const FrameRateRange & range)392 void RSRenderServiceClient::SyncFrameRateRange(const FrameRateRange& range)
393 {
394     auto renderService = RSRenderServiceConnectHub::GetRenderService();
395     if (renderService == nullptr) {
396         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
397         return;
398     }
399 
400     return renderService->SyncFrameRateRange(range);
401 }
402 
GetScreenCurrentRefreshRate(ScreenId id)403 uint32_t RSRenderServiceClient::GetScreenCurrentRefreshRate(ScreenId id)
404 {
405     auto renderService = RSRenderServiceConnectHub::GetRenderService();
406     if (renderService == nullptr) {
407         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
408         return RENDER_SERVICE_NULL;
409     }
410 
411     return renderService->GetScreenCurrentRefreshRate(id);
412 }
413 
GetCurrentRefreshRateMode()414 int32_t RSRenderServiceClient::GetCurrentRefreshRateMode()
415 {
416     auto renderService = RSRenderServiceConnectHub::GetRenderService();
417     if (renderService == nullptr) {
418         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
419         return RENDER_SERVICE_NULL;
420     }
421 
422     return renderService->GetCurrentRefreshRateMode();
423 }
424 
GetScreenSupportedRefreshRates(ScreenId id)425 std::vector<int32_t> RSRenderServiceClient::GetScreenSupportedRefreshRates(ScreenId id)
426 {
427     auto renderService = RSRenderServiceConnectHub::GetRenderService();
428     if (renderService == nullptr) {
429         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
430         return {};
431     }
432 
433     return renderService->GetScreenSupportedRefreshRates(id);
434 }
435 
GetShowRefreshRateEnabled()436 bool RSRenderServiceClient::GetShowRefreshRateEnabled()
437 {
438     auto renderService = RSRenderServiceConnectHub::GetRenderService();
439     if (renderService == nullptr) {
440         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
441         return false;
442     }
443 
444     return renderService->GetShowRefreshRateEnabled();
445 }
446 
SetShowRefreshRateEnabled(bool enable)447 void RSRenderServiceClient::SetShowRefreshRateEnabled(bool enable)
448 {
449     auto renderService = RSRenderServiceConnectHub::GetRenderService();
450     if (renderService == nullptr) {
451         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
452         return;
453     }
454 
455     return renderService->SetShowRefreshRateEnabled(enable);
456 }
457 
SetVirtualScreenResolution(ScreenId id,uint32_t width,uint32_t height)458 int32_t RSRenderServiceClient::SetVirtualScreenResolution(ScreenId id, uint32_t width, uint32_t height)
459 {
460     auto renderService = RSRenderServiceConnectHub::GetRenderService();
461     if (renderService == nullptr) {
462         ROSEN_LOGE("RSRenderServiceClient::SetVirtualScreenResolution renderService == nullptr!");
463         return RENDER_SERVICE_NULL;
464     }
465 
466     return renderService->SetVirtualScreenResolution(id, width, height);
467 }
468 
GetVirtualScreenResolution(ScreenId id)469 RSVirtualScreenResolution RSRenderServiceClient::GetVirtualScreenResolution(ScreenId id)
470 {
471     auto renderService = RSRenderServiceConnectHub::GetRenderService();
472     if (renderService == nullptr) {
473         return RSVirtualScreenResolution {}; // return empty RSVirtualScreenResolution.
474     }
475 
476     return renderService->GetVirtualScreenResolution(id);
477 }
478 
SetScreenPowerStatus(ScreenId id,ScreenPowerStatus status)479 void RSRenderServiceClient::SetScreenPowerStatus(ScreenId id, ScreenPowerStatus status)
480 {
481     auto renderService = RSRenderServiceConnectHub::GetRenderService();
482     if (renderService == nullptr) {
483         return;
484     }
485 
486     renderService->SetScreenPowerStatus(id, status);
487 }
488 
GetScreenActiveMode(ScreenId id)489 RSScreenModeInfo RSRenderServiceClient::GetScreenActiveMode(ScreenId id)
490 {
491     auto renderService = RSRenderServiceConnectHub::GetRenderService();
492     if (renderService == nullptr) {
493         return RSScreenModeInfo {}; // return empty RSScreenModeInfo.
494     }
495 
496     return renderService->GetScreenActiveMode(id);
497 }
498 
GetScreenSupportedModes(ScreenId id)499 std::vector<RSScreenModeInfo> RSRenderServiceClient::GetScreenSupportedModes(ScreenId id)
500 {
501     auto renderService = RSRenderServiceConnectHub::GetRenderService();
502     if (renderService == nullptr) {
503         return {};
504     }
505 
506     return renderService->GetScreenSupportedModes(id);
507 }
508 
GetScreenCapability(ScreenId id)509 RSScreenCapability RSRenderServiceClient::GetScreenCapability(ScreenId id)
510 {
511     auto renderService = RSRenderServiceConnectHub::GetRenderService();
512     if (renderService == nullptr) {
513         return RSScreenCapability {};
514     }
515 
516     return renderService->GetScreenCapability(id);
517 }
518 
GetScreenPowerStatus(ScreenId id)519 ScreenPowerStatus RSRenderServiceClient::GetScreenPowerStatus(ScreenId id)
520 {
521     auto renderService = RSRenderServiceConnectHub::GetRenderService();
522     if (renderService == nullptr) {
523         return ScreenPowerStatus::INVALID_POWER_STATUS;
524     }
525 
526     return renderService->GetScreenPowerStatus(id);
527 }
528 
GetScreenData(ScreenId id)529 RSScreenData RSRenderServiceClient::GetScreenData(ScreenId id)
530 {
531     auto renderService = RSRenderServiceConnectHub::GetRenderService();
532     if (renderService == nullptr) {
533         return RSScreenData {};
534     }
535 
536     return renderService->GetScreenData(id);
537 }
538 
GetScreenBacklight(ScreenId id)539 int32_t RSRenderServiceClient::GetScreenBacklight(ScreenId id)
540 {
541     auto renderService = RSRenderServiceConnectHub::GetRenderService();
542     if (renderService == nullptr) {
543         return INVALID_BACKLIGHT_VALUE;
544     }
545 
546     return renderService->GetScreenBacklight(id);
547 }
548 
SetScreenBacklight(ScreenId id,uint32_t level)549 void RSRenderServiceClient::SetScreenBacklight(ScreenId id, uint32_t level)
550 {
551     auto renderService = RSRenderServiceConnectHub::GetRenderService();
552     if (renderService == nullptr) {
553         return;
554     }
555 
556     renderService->SetScreenBacklight(id, level);
557 }
558 
559 class CustomBufferAvailableCallback : public RSBufferAvailableCallbackStub
560 {
561 public:
CustomBufferAvailableCallback(const BufferAvailableCallback & callback)562     explicit CustomBufferAvailableCallback(const BufferAvailableCallback &callback) : cb_(callback) {}
~CustomBufferAvailableCallback()563     ~CustomBufferAvailableCallback() override {};
564 
OnBufferAvailable()565     void OnBufferAvailable() override
566     {
567         if (cb_ != nullptr) {
568             cb_();
569         }
570     }
571 
572 private:
573     BufferAvailableCallback cb_;
574 };
575 
576 class CustomBufferClearCallback : public RSBufferClearCallbackStub
577 {
578 public:
CustomBufferClearCallback(const BufferClearCallback & callback)579     explicit CustomBufferClearCallback(const BufferClearCallback &callback) : cb_(callback) {}
~CustomBufferClearCallback()580     ~CustomBufferClearCallback() override {};
581 
OnBufferClear()582     void OnBufferClear() override
583     {
584         if (cb_ != nullptr) {
585             cb_();
586         }
587     }
588 
589 private:
590     BufferClearCallback cb_;
591 };
592 
RegisterBufferAvailableListener(NodeId id,const BufferAvailableCallback & callback,bool isFromRenderThread)593 bool RSRenderServiceClient::RegisterBufferAvailableListener(
594     NodeId id, const BufferAvailableCallback &callback, bool isFromRenderThread)
595 {
596     auto renderService = RSRenderServiceConnectHub::GetRenderService();
597     if (renderService == nullptr) {
598         return false;
599     }
600 
601     auto iter = isFromRenderThread ? bufferAvailableCbRTMap_.find(id) : bufferAvailableCbUIMap_.find(id);
602     if (isFromRenderThread && iter != bufferAvailableCbRTMap_.end()) {
603         ROSEN_LOGW("RSRenderServiceClient::RegisterBufferAvailableListener "
604                    "Node %{public}" PRIu64 " already, bufferAvailableCbRTMap_", iter->first);
605     }
606 
607     if (!isFromRenderThread && iter != bufferAvailableCbUIMap_.end()) {
608         ROSEN_LOGW("RSRenderServiceClient::RegisterBufferAvailableListener "
609                    "Node %{public}" PRIu64 " already, bufferAvailableCbUIMap_", iter->first);
610         bufferAvailableCbUIMap_.erase(iter);
611     }
612 
613     sptr<RSIBufferAvailableCallback> bufferAvailableCb = new CustomBufferAvailableCallback(callback);
614     renderService->RegisterBufferAvailableListener(id, bufferAvailableCb, isFromRenderThread);
615     if (isFromRenderThread) {
616         bufferAvailableCbRTMap_.emplace(id, bufferAvailableCb);
617     } else {
618         std::lock_guard<std::mutex> lock(mapMutex_);
619         bufferAvailableCbUIMap_.emplace(id, bufferAvailableCb);
620     }
621     return true;
622 }
623 
RegisterBufferClearListener(NodeId id,const BufferClearCallback & callback)624 bool RSRenderServiceClient::RegisterBufferClearListener(NodeId id, const BufferClearCallback& callback)
625 {
626     auto renderService = RSRenderServiceConnectHub::GetRenderService();
627     if (renderService == nullptr) {
628         return false;
629     }
630     sptr<RSIBufferClearCallback> bufferClearCb = new CustomBufferClearCallback(callback);
631     renderService->RegisterBufferClearListener(id, bufferClearCb);
632     return true;
633 }
634 
635 
UnregisterBufferAvailableListener(NodeId id)636 bool RSRenderServiceClient::UnregisterBufferAvailableListener(NodeId id)
637 {
638     auto iter = bufferAvailableCbRTMap_.find(id);
639     if (iter != bufferAvailableCbRTMap_.end()) {
640         bufferAvailableCbRTMap_.erase(iter);
641     } else {
642         ROSEN_LOGD("RSRenderServiceClient::UnregisterBufferAvailableListener "
643                    "Node %{public}" PRIu64 " has not registered RT callback", id);
644     }
645     std::lock_guard<std::mutex> lock(mapMutex_);
646     iter = bufferAvailableCbUIMap_.find(id);
647     if (iter != bufferAvailableCbUIMap_.end()) {
648         bufferAvailableCbUIMap_.erase(iter);
649     } else {
650         ROSEN_LOGD("RSRenderServiceClient::UnregisterBufferAvailableListener "
651                    "Node %{public}" PRIu64 " has not registered UI callback", id);
652     }
653     return true;
654 }
655 
GetScreenSupportedColorGamuts(ScreenId id,std::vector<ScreenColorGamut> & mode)656 int32_t RSRenderServiceClient::GetScreenSupportedColorGamuts(ScreenId id, std::vector<ScreenColorGamut>& mode)
657 {
658     auto renderService = RSRenderServiceConnectHub::GetRenderService();
659     if (renderService == nullptr) {
660         return RENDER_SERVICE_NULL;
661     }
662     return renderService->GetScreenSupportedColorGamuts(id, mode);
663 }
664 
GetScreenSupportedMetaDataKeys(ScreenId id,std::vector<ScreenHDRMetadataKey> & keys)665 int32_t RSRenderServiceClient::GetScreenSupportedMetaDataKeys(ScreenId id, std::vector<ScreenHDRMetadataKey>& keys)
666 {
667     auto renderService = RSRenderServiceConnectHub::GetRenderService();
668     if (renderService == nullptr) {
669         ROSEN_LOGE("RSRenderServiceClient::RequestRotation renderService == nullptr!");
670         return RENDER_SERVICE_NULL;
671     }
672     return renderService->GetScreenSupportedMetaDataKeys(id, keys);
673 }
674 
GetScreenColorGamut(ScreenId id,ScreenColorGamut & mode)675 int32_t RSRenderServiceClient::GetScreenColorGamut(ScreenId id, ScreenColorGamut& mode)
676 {
677     auto renderService = RSRenderServiceConnectHub::GetRenderService();
678     if (renderService == nullptr) {
679         return RENDER_SERVICE_NULL;
680     }
681     return renderService->GetScreenColorGamut(id, mode);
682 }
683 
SetScreenColorGamut(ScreenId id,int32_t modeIdx)684 int32_t RSRenderServiceClient::SetScreenColorGamut(ScreenId id, int32_t modeIdx)
685 {
686     auto renderService = RSRenderServiceConnectHub::GetRenderService();
687     if (renderService == nullptr) {
688         return RENDER_SERVICE_NULL;
689     }
690     return renderService->SetScreenColorGamut(id, modeIdx);
691 }
692 
SetScreenGamutMap(ScreenId id,ScreenGamutMap mode)693 int32_t RSRenderServiceClient::SetScreenGamutMap(ScreenId id, ScreenGamutMap mode)
694 {
695     auto renderService = RSRenderServiceConnectHub::GetRenderService();
696     if (renderService == nullptr) {
697         return RENDER_SERVICE_NULL;
698     }
699     return renderService->SetScreenGamutMap(id, mode);
700 }
701 
SetScreenCorrection(ScreenId id,ScreenRotation screenRotation)702 int32_t RSRenderServiceClient::SetScreenCorrection(ScreenId id, ScreenRotation screenRotation)
703 {
704     auto renderService = RSRenderServiceConnectHub::GetRenderService();
705     if (renderService == nullptr) {
706         return RENDER_SERVICE_NULL;
707     }
708     return renderService->SetScreenCorrection(id, screenRotation);
709 }
710 
SetVirtualMirrorScreenCanvasRotation(ScreenId id,bool canvasRotation)711 bool RSRenderServiceClient::SetVirtualMirrorScreenCanvasRotation(ScreenId id, bool canvasRotation)
712 {
713     auto renderService = RSRenderServiceConnectHub::GetRenderService();
714     if (renderService == nullptr) {
715         ROSEN_LOGE("RSRenderServiceClient::SetVirtualMirrorScreenCanvasRotation: renderService is nullptr");
716         return false;
717     }
718     return renderService->SetVirtualMirrorScreenCanvasRotation(id, canvasRotation);
719 }
720 
GetScreenGamutMap(ScreenId id,ScreenGamutMap & mode)721 int32_t RSRenderServiceClient::GetScreenGamutMap(ScreenId id, ScreenGamutMap& mode)
722 {
723     auto renderService = RSRenderServiceConnectHub::GetRenderService();
724     if (renderService == nullptr) {
725         return RENDER_SERVICE_NULL;
726     }
727     return renderService->GetScreenGamutMap(id, mode);
728 }
729 
GetScreenHDRCapability(ScreenId id,RSScreenHDRCapability & screenHdrCapability)730 int32_t RSRenderServiceClient::GetScreenHDRCapability(ScreenId id, RSScreenHDRCapability& screenHdrCapability)
731 {
732     auto renderService = RSRenderServiceConnectHub::GetRenderService();
733     if (renderService == nullptr) {
734         ROSEN_LOGE("RSRenderServiceClient::GetScreenHDRCapability renderService == nullptr!");
735         return RENDER_SERVICE_NULL;
736     }
737     return renderService->GetScreenHDRCapability(id, screenHdrCapability);
738 }
739 
GetPixelFormat(ScreenId id,GraphicPixelFormat & pixelFormat)740 int32_t RSRenderServiceClient::GetPixelFormat(ScreenId id, GraphicPixelFormat& pixelFormat)
741 {
742     auto renderService = RSRenderServiceConnectHub::GetRenderService();
743     if (renderService == nullptr) {
744         ROSEN_LOGE("RSRenderServiceClient::GetPixelFormat renderService == nullptr!");
745         return RENDER_SERVICE_NULL;
746     }
747     return renderService->GetPixelFormat(id, pixelFormat);
748 }
749 
SetPixelFormat(ScreenId id,GraphicPixelFormat pixelFormat)750 int32_t RSRenderServiceClient::SetPixelFormat(ScreenId id, GraphicPixelFormat pixelFormat)
751 {
752     auto renderService = RSRenderServiceConnectHub::GetRenderService();
753     if (renderService == nullptr) {
754         ROSEN_LOGE("RSRenderServiceClient::SetPixelFormat renderService == nullptr!");
755         return RENDER_SERVICE_NULL;
756     }
757     return renderService->SetPixelFormat(id, pixelFormat);
758 }
759 
GetScreenSupportedHDRFormats(ScreenId id,std::vector<ScreenHDRFormat> & hdrFormats)760 int32_t RSRenderServiceClient::GetScreenSupportedHDRFormats(ScreenId id, std::vector<ScreenHDRFormat>& hdrFormats)
761 {
762     auto renderService = RSRenderServiceConnectHub::GetRenderService();
763     if (renderService == nullptr) {
764         return RENDER_SERVICE_NULL;
765     }
766     return renderService->GetScreenSupportedHDRFormats(id, hdrFormats);
767 }
768 
GetScreenHDRFormat(ScreenId id,ScreenHDRFormat & hdrFormat)769 int32_t RSRenderServiceClient::GetScreenHDRFormat(ScreenId id, ScreenHDRFormat& hdrFormat)
770 {
771     auto renderService = RSRenderServiceConnectHub::GetRenderService();
772     if (renderService == nullptr) {
773         return RENDER_SERVICE_NULL;
774     }
775     return renderService->GetScreenHDRFormat(id, hdrFormat);
776 }
777 
SetScreenHDRFormat(ScreenId id,int32_t modeIdx)778 int32_t RSRenderServiceClient::SetScreenHDRFormat(ScreenId id, int32_t modeIdx)
779 {
780     auto renderService = RSRenderServiceConnectHub::GetRenderService();
781     if (renderService == nullptr) {
782         return RENDER_SERVICE_NULL;
783     }
784     return renderService->SetScreenHDRFormat(id, modeIdx);
785 }
786 
GetScreenSupportedColorSpaces(ScreenId id,std::vector<GraphicCM_ColorSpaceType> & colorSpaces)787 int32_t RSRenderServiceClient::GetScreenSupportedColorSpaces(
788     ScreenId id, std::vector<GraphicCM_ColorSpaceType>& colorSpaces)
789 {
790     auto renderService = RSRenderServiceConnectHub::GetRenderService();
791     if (renderService == nullptr) {
792         return RENDER_SERVICE_NULL;
793     }
794     return renderService->GetScreenSupportedColorSpaces(id, colorSpaces);
795 }
796 
GetScreenColorSpace(ScreenId id,GraphicCM_ColorSpaceType & colorSpace)797 int32_t RSRenderServiceClient::GetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType& colorSpace)
798 {
799     auto renderService = RSRenderServiceConnectHub::GetRenderService();
800     if (renderService == nullptr) {
801         return RENDER_SERVICE_NULL;
802     }
803     return renderService->GetScreenColorSpace(id, colorSpace);
804 }
805 
SetScreenColorSpace(ScreenId id,GraphicCM_ColorSpaceType colorSpace)806 int32_t RSRenderServiceClient::SetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType colorSpace)
807 {
808     auto renderService = RSRenderServiceConnectHub::GetRenderService();
809     if (renderService == nullptr) {
810         return RENDER_SERVICE_NULL;
811     }
812     return renderService->SetScreenColorSpace(id, colorSpace);
813 }
814 
GetScreenType(ScreenId id,RSScreenType & screenType)815 int32_t RSRenderServiceClient::GetScreenType(ScreenId id, RSScreenType& screenType)
816 {
817     auto renderService = RSRenderServiceConnectHub::GetRenderService();
818     if (renderService == nullptr) {
819         ROSEN_LOGE("RSRenderServiceClient::GetScreenType renderService == nullptr!");
820         return RENDER_SERVICE_NULL;
821     }
822     return renderService->GetScreenType(id, screenType);
823 }
824 
825 #ifndef USE_ROSEN_DRAWING
GetBitmap(NodeId id,SkBitmap & bitmap)826 bool RSRenderServiceClient::GetBitmap(NodeId id, SkBitmap& bitmap)
827 #else
828 bool RSRenderServiceClient::GetBitmap(NodeId id, Drawing::Bitmap& bitmap)
829 #endif
830 {
831     auto renderService = RSRenderServiceConnectHub::GetRenderService();
832     if (renderService == nullptr) {
833         ROSEN_LOGE("RSRenderServiceClient::GetBitmap renderService == nullptr!");
834         return false;
835     }
836     return renderService->GetBitmap(id, bitmap);
837 }
838 
839 #ifndef USE_ROSEN_DRAWING
GetPixelmap(NodeId id,std::shared_ptr<Media::PixelMap> pixelmap,const SkRect * rect,std::shared_ptr<DrawCmdList> drawCmdList)840 bool RSRenderServiceClient::GetPixelmap(NodeId id, std::shared_ptr<Media::PixelMap> pixelmap,
841     const SkRect* rect, std::shared_ptr<DrawCmdList> drawCmdList)
842 #else
843 bool RSRenderServiceClient::GetPixelmap(NodeId id, std::shared_ptr<Media::PixelMap> pixelmap,
844     const Drawing::Rect* rect, std::shared_ptr<Drawing::DrawCmdList> drawCmdList)
845 #endif
846 {
847     auto renderService = RSRenderServiceConnectHub::GetRenderService();
848     if (renderService == nullptr) {
849         ROSEN_LOGE("RSRenderServiceClient::GetPixelmap: renderService is nullptr");
850         return false;
851     }
852     return renderService->GetPixelmap(id, pixelmap, rect, drawCmdList);
853 }
854 
SetScreenSkipFrameInterval(ScreenId id,uint32_t skipFrameInterval)855 int32_t RSRenderServiceClient::SetScreenSkipFrameInterval(ScreenId id, uint32_t skipFrameInterval)
856 {
857     auto renderService = RSRenderServiceConnectHub::GetRenderService();
858     if (renderService == nullptr) {
859         return RENDER_SERVICE_NULL;
860     }
861     return renderService->SetScreenSkipFrameInterval(id, skipFrameInterval);
862 }
863 
864 class CustomOcclusionChangeCallback : public RSOcclusionChangeCallbackStub
865 {
866 public:
CustomOcclusionChangeCallback(const OcclusionChangeCallback & callback)867     explicit CustomOcclusionChangeCallback(const OcclusionChangeCallback &callback) : cb_(callback) {}
~CustomOcclusionChangeCallback()868     ~CustomOcclusionChangeCallback() override {};
869 
OnOcclusionVisibleChanged(std::shared_ptr<RSOcclusionData> occlusionData)870     void OnOcclusionVisibleChanged(std::shared_ptr<RSOcclusionData> occlusionData) override
871     {
872         if (cb_ != nullptr) {
873             cb_(occlusionData);
874         }
875     }
876 
877 private:
878     OcclusionChangeCallback cb_;
879 };
880 
RegisterOcclusionChangeCallback(const OcclusionChangeCallback & callback)881 int32_t RSRenderServiceClient::RegisterOcclusionChangeCallback(const OcclusionChangeCallback& callback)
882 {
883     auto renderService = RSRenderServiceConnectHub::GetRenderService();
884     if (renderService == nullptr) {
885         ROSEN_LOGE("RSRenderServiceClient::RegisterOcclusionChangeCallback renderService == nullptr!");
886         return RENDER_SERVICE_NULL;
887     }
888     sptr<CustomOcclusionChangeCallback> cb = new CustomOcclusionChangeCallback(callback);
889     return renderService->RegisterOcclusionChangeCallback(cb);
890 }
891 
892 class CustomSurfaceOcclusionChangeCallback : public RSSurfaceOcclusionChangeCallbackStub
893 {
894 public:
CustomSurfaceOcclusionChangeCallback(const SurfaceOcclusionChangeCallback & callback)895     explicit CustomSurfaceOcclusionChangeCallback(const SurfaceOcclusionChangeCallback &callback) : cb_(callback) {}
~CustomSurfaceOcclusionChangeCallback()896     ~CustomSurfaceOcclusionChangeCallback() override {};
897 
OnSurfaceOcclusionVisibleChanged(float visibleAreaRatio)898     void OnSurfaceOcclusionVisibleChanged(float visibleAreaRatio) override
899     {
900         if (cb_ != nullptr) {
901             cb_(visibleAreaRatio);
902         }
903     }
904 
905 private:
906     SurfaceOcclusionChangeCallback cb_;
907 };
908 
RegisterSurfaceOcclusionChangeCallback(NodeId id,const SurfaceOcclusionChangeCallback & callback,std::vector<float> & partitionPoints)909 int32_t RSRenderServiceClient::RegisterSurfaceOcclusionChangeCallback(
910     NodeId id, const SurfaceOcclusionChangeCallback& callback, std::vector<float>& partitionPoints)
911 {
912     auto renderService = RSRenderServiceConnectHub::GetRenderService();
913     if (renderService == nullptr) {
914         ROSEN_LOGE("RSRenderServiceClient::RegisterSurfaceOcclusionChangeCallback renderService == nullptr!");
915         return RENDER_SERVICE_NULL;
916     }
917     sptr<CustomSurfaceOcclusionChangeCallback> cb = new CustomSurfaceOcclusionChangeCallback(callback);
918     return renderService->RegisterSurfaceOcclusionChangeCallback(id, cb, partitionPoints);
919 }
920 
UnRegisterSurfaceOcclusionChangeCallback(NodeId id)921 int32_t RSRenderServiceClient::UnRegisterSurfaceOcclusionChangeCallback(NodeId id)
922 {
923     auto renderService = RSRenderServiceConnectHub::GetRenderService();
924     if (renderService == nullptr) {
925         ROSEN_LOGE("RSRenderServiceClient::UnRegisterSurfaceOcclusionChangeCallback renderService == nullptr!");
926         return RENDER_SERVICE_NULL;
927     }
928     return renderService->UnRegisterSurfaceOcclusionChangeCallback(id);
929 }
930 
931 class CustomHgmConfigChangeCallback : public RSHgmConfigChangeCallbackStub
932 {
933 public:
CustomHgmConfigChangeCallback(const HgmConfigChangeCallback & callback)934     explicit CustomHgmConfigChangeCallback(const HgmConfigChangeCallback& callback) : cb_(callback) {}
~CustomHgmConfigChangeCallback()935     ~CustomHgmConfigChangeCallback() override {};
936 
OnHgmConfigChanged(std::shared_ptr<RSHgmConfigData> configData)937     void OnHgmConfigChanged(std::shared_ptr<RSHgmConfigData> configData) override
938     {
939         if (cb_ != nullptr) {
940             cb_(configData);
941         }
942     }
943 
OnHgmRefreshRateModeChanged(int32_t refreshRateMode)944     void OnHgmRefreshRateModeChanged(int32_t refreshRateMode) override
945     {
946     }
947 
948 private:
949     HgmConfigChangeCallback cb_;
950 };
951 
RegisterHgmConfigChangeCallback(const HgmConfigChangeCallback & callback)952 int32_t RSRenderServiceClient::RegisterHgmConfigChangeCallback(const HgmConfigChangeCallback& callback)
953 {
954     auto renderService = RSRenderServiceConnectHub::GetRenderService();
955     if (renderService == nullptr) {
956         ROSEN_LOGE("RSRenderServiceClient::RegisterHgmConfigChangeCallback renderService == nullptr!");
957         return RENDER_SERVICE_NULL;
958     }
959     sptr<CustomHgmConfigChangeCallback> cb = new CustomHgmConfigChangeCallback(callback);
960     return renderService->RegisterHgmConfigChangeCallback(cb);
961 }
962 
963 class CustomHgmRefreshRateModeChangeCallback : public RSHgmConfigChangeCallbackStub
964 {
965 public:
CustomHgmRefreshRateModeChangeCallback(const HgmRefreshRateModeChangeCallback & callback)966     explicit CustomHgmRefreshRateModeChangeCallback(const HgmRefreshRateModeChangeCallback& callback) : cb_(callback) {}
~CustomHgmRefreshRateModeChangeCallback()967     ~CustomHgmRefreshRateModeChangeCallback() override {};
968 
OnHgmRefreshRateModeChanged(int32_t refreshRateMode)969     void OnHgmRefreshRateModeChanged(int32_t refreshRateMode) override
970     {
971         if (cb_ != nullptr) {
972             cb_(refreshRateMode);
973         }
974     }
975 
OnHgmConfigChanged(std::shared_ptr<RSHgmConfigData> configData)976     void OnHgmConfigChanged(std::shared_ptr<RSHgmConfigData> configData) override
977     {
978     }
979 
980 private:
981     HgmRefreshRateModeChangeCallback cb_;
982 };
983 
RegisterHgmRefreshRateModeChangeCallback(const HgmRefreshRateModeChangeCallback & callback)984 int32_t RSRenderServiceClient::RegisterHgmRefreshRateModeChangeCallback(
985     const HgmRefreshRateModeChangeCallback& callback)
986 {
987     auto renderService = RSRenderServiceConnectHub::GetRenderService();
988     if (renderService == nullptr) {
989         ROSEN_LOGE("RSRenderServiceClient::RegisterHgmRefreshRateModeChangeCallback renderService == nullptr!");
990         return RENDER_SERVICE_NULL;
991     }
992     sptr<CustomHgmRefreshRateModeChangeCallback> cb = new CustomHgmRefreshRateModeChangeCallback(callback);
993     return renderService->RegisterHgmRefreshRateModeChangeCallback(cb);
994 }
995 
SetAppWindowNum(uint32_t num)996 void RSRenderServiceClient::SetAppWindowNum(uint32_t num)
997 {
998     auto renderService = RSRenderServiceConnectHub::GetRenderService();
999     if (renderService != nullptr) {
1000         renderService->SetAppWindowNum(num);
1001     }
1002 }
1003 
SetSystemAnimatedScenes(SystemAnimatedScenes systemAnimatedScenes)1004 bool RSRenderServiceClient::SetSystemAnimatedScenes(SystemAnimatedScenes systemAnimatedScenes)
1005 {
1006     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1007     if (renderService == nullptr) {
1008         ROSEN_LOGE("RSRenderServiceClient::SetSystemAnimatedScenes renderService == nullptr!");
1009         return false;
1010     }
1011     return renderService->SetSystemAnimatedScenes(systemAnimatedScenes);
1012 }
1013 
ShowWatermark(const std::shared_ptr<Media::PixelMap> & watermarkImg,bool isShow)1014 void RSRenderServiceClient::ShowWatermark(const std::shared_ptr<Media::PixelMap> &watermarkImg, bool isShow)
1015 {
1016     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1017     if (renderService != nullptr) {
1018         renderService->ShowWatermark(watermarkImg, isShow);
1019     }
1020 }
1021 
ResizeVirtualScreen(ScreenId id,uint32_t width,uint32_t height)1022 int32_t RSRenderServiceClient::ResizeVirtualScreen(ScreenId id, uint32_t width, uint32_t height)
1023 {
1024     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1025     if (renderService == nullptr) {
1026         ROSEN_LOGE("RSRenderServiceClient::ResizeVirtualScreen renderService == nullptr!");
1027         return RENDER_SERVICE_NULL;
1028     }
1029 
1030     return renderService->ResizeVirtualScreen(id, width, height);
1031 }
1032 
ReportJankStats()1033 void RSRenderServiceClient::ReportJankStats()
1034 {
1035     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1036     if (renderService != nullptr) {
1037         renderService->ReportJankStats();
1038     }
1039 }
1040 
ReportEventResponse(DataBaseRs info)1041 void RSRenderServiceClient::ReportEventResponse(DataBaseRs info)
1042 {
1043     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1044     if (renderService != nullptr) {
1045         renderService->ReportEventResponse(info);
1046     }
1047 }
1048 
ReportEventComplete(DataBaseRs info)1049 void RSRenderServiceClient::ReportEventComplete(DataBaseRs info)
1050 {
1051     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1052     if (renderService != nullptr) {
1053         renderService->ReportEventComplete(info);
1054     }
1055 }
1056 
ReportEventJankFrame(DataBaseRs info)1057 void RSRenderServiceClient::ReportEventJankFrame(DataBaseRs info)
1058 {
1059     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1060     if (renderService != nullptr) {
1061         renderService->ReportEventJankFrame(info);
1062     }
1063 }
1064 
ReportGameStateData(GameStateData info)1065 void RSRenderServiceClient::ReportGameStateData(GameStateData info)
1066 {
1067     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1068     if (renderService != nullptr) {
1069         renderService->ReportGameStateData(info);
1070     }
1071 }
1072 
SetHardwareEnabled(NodeId id,bool isEnabled,SelfDrawingNodeType selfDrawingType)1073 void RSRenderServiceClient::SetHardwareEnabled(NodeId id, bool isEnabled, SelfDrawingNodeType selfDrawingType)
1074 {
1075     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1076     if (renderService != nullptr) {
1077         renderService->SetHardwareEnabled(id, isEnabled, selfDrawingType);
1078     }
1079 }
1080 
NotifyLightFactorStatus(bool isSafe)1081 void RSRenderServiceClient::NotifyLightFactorStatus(bool isSafe)
1082 {
1083     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1084     if (renderService != nullptr) {
1085         renderService->NotifyLightFactorStatus(isSafe);
1086     }
1087 }
1088 
NotifyPackageEvent(uint32_t listSize,const std::vector<std::string> & packageList)1089 void RSRenderServiceClient::NotifyPackageEvent(uint32_t listSize, const std::vector<std::string>& packageList)
1090 {
1091     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1092     if (renderService != nullptr) {
1093         renderService->NotifyPackageEvent(listSize, packageList);
1094     }
1095 }
1096 
NotifyRefreshRateEvent(const EventInfo & eventInfo)1097 void RSRenderServiceClient::NotifyRefreshRateEvent(const EventInfo& eventInfo)
1098 {
1099     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1100     if (renderService != nullptr) {
1101         renderService->NotifyRefreshRateEvent(eventInfo);
1102     }
1103 }
1104 
NotifyTouchEvent(int32_t touchStatus)1105 void RSRenderServiceClient::NotifyTouchEvent(int32_t touchStatus)
1106 {
1107     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1108     if (renderService != nullptr) {
1109         renderService->NotifyTouchEvent(touchStatus);
1110     }
1111 }
1112 
SetCacheEnabledForRotation(bool isEnabled)1113 void RSRenderServiceClient::SetCacheEnabledForRotation(bool isEnabled)
1114 {
1115     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1116     if (renderService != nullptr) {
1117         renderService->SetCacheEnabledForRotation(isEnabled);
1118     }
1119 }
1120 
SetOnRemoteDiedCallback(const OnRemoteDiedCallback & callback)1121 void RSRenderServiceClient::SetOnRemoteDiedCallback(const OnRemoteDiedCallback& callback)
1122 {
1123     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1124     if (renderService != nullptr) {
1125         renderService->SetOnRemoteDiedCallback(callback);
1126     }
1127 }
1128 
1129 #ifdef TP_FEATURE_ENABLE
SetTpFeatureConfig(int32_t feature,const char * config)1130 void RSRenderServiceClient::SetTpFeatureConfig(int32_t feature, const char* config)
1131 {
1132     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1133     if (renderService == nullptr) {
1134         return;
1135     }
1136     renderService->SetTpFeatureConfig(feature, config);
1137 }
1138 #endif
1139 
SetVirtualScreenUsingStatus(bool isVirtualScreenUsingStatus)1140 void RSRenderServiceClient::SetVirtualScreenUsingStatus(bool isVirtualScreenUsingStatus)
1141 {
1142     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1143     if (renderService != nullptr) {
1144         renderService->SetVirtualScreenUsingStatus(isVirtualScreenUsingStatus);
1145     }
1146 }
1147 } // namespace Rosen
1148 } // namespace OHOS
1149