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