• 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 #include "surface_type.h"
18 #include "rs_trace.h"
19 #include "surface_utils.h"
20 #ifdef RS_ENABLE_GL
21 #include "backend/rs_surface_ohos_gl.h"
22 #endif
23 #include "backend/rs_surface_ohos_raster.h"
24 #ifdef RS_ENABLE_VK
25 #include "backend/rs_surface_ohos_vulkan.h"
26 #endif
27 #ifdef USE_VIDEO_PROCESSING_ENGINE
28 #include "display_engine/rs_vpe_manager.h"
29 #endif
30 #include "command/rs_command.h"
31 #include "command/rs_node_showing_command.h"
32 #include "common/rs_xcollie.h"
33 #include "ipc_callbacks/pointer_render/pointer_luminance_callback_stub.h"
34 #include "ipc_callbacks/rs_surface_occlusion_change_callback_stub.h"
35 #include "ipc_callbacks/screen_change_callback_stub.h"
36 #include "ipc_callbacks/screen_switching_notify_callback_stub.h"
37 #include "ipc_callbacks/surface_capture_callback_stub.h"
38 #include "ipc_callbacks/buffer_available_callback_stub.h"
39 #include "ipc_callbacks/buffer_clear_callback_stub.h"
40 #include "ipc_callbacks/hgm_config_change_callback_stub.h"
41 #include "ipc_callbacks/rs_first_frame_commit_callback_stub.h"
42 #include "ipc_callbacks/rs_occlusion_change_callback_stub.h"
43 #include "ipc_callbacks/rs_self_drawing_node_rect_change_callback_stub.h"
44 #include "ipc_callbacks/rs_surface_buffer_callback_stub.h"
45 #include "ipc_callbacks/rs_transaction_data_callback_stub.h"
46 #include "ipc_callbacks/rs_frame_rate_linker_expected_fps_update_callback_stub.h"
47 #include "ipc_callbacks/rs_uiextension_callback_stub.h"
48 #include "platform/common/rs_log.h"
49 #include "platform/common/rs_system_properties.h"
50 #include "render/rs_typeface_cache.h"
51 #include "rs_render_service_connect_hub.h"
52 #include "rs_surface_ohos.h"
53 #include "vsync_iconnection_token.h"
54 
55 namespace OHOS {
56 namespace Rosen {
57 std::shared_ptr<RSIRenderClient> RSIRenderClient::client_ = nullptr;
58 
CreateRenderServiceClient()59 std::shared_ptr<RSIRenderClient> RSIRenderClient::CreateRenderServiceClient()
60 {
61     static std::once_flag once_flag;
62     std::call_once(once_flag, []() { client_ = std::make_shared<RSRenderServiceClient>(); });
63     return client_;
64 }
65 
CommitTransaction(std::unique_ptr<RSTransactionData> & transactionData)66 void RSRenderServiceClient::CommitTransaction(std::unique_ptr<RSTransactionData>& transactionData)
67 {
68     auto renderService = RSRenderServiceConnectHub::GetRenderService();
69     if (renderService != nullptr) {
70         renderService->CommitTransaction(transactionData);
71     } else {
72         RS_LOGE_LIMIT(__func__, __line__, "RSRenderServiceClient::CommitTransaction failed, renderService is nullptr");
73     }
74 }
75 
ExecuteSynchronousTask(const std::shared_ptr<RSSyncTask> & task)76 void RSRenderServiceClient::ExecuteSynchronousTask(const std::shared_ptr<RSSyncTask>& task)
77 {
78     if (task == nullptr) {
79         return;
80     }
81 
82     auto renderService = RSRenderServiceConnectHub::GetRenderService();
83     if (renderService != nullptr) {
84         renderService->ExecuteSynchronousTask(task);
85     }
86 }
87 
GetUniRenderEnabled()88 bool RSRenderServiceClient::GetUniRenderEnabled()
89 {
90     auto renderService = RSRenderServiceConnectHub::GetRenderService();
91     if (renderService == nullptr) {
92         return false;
93     }
94     bool enable;
95     return renderService->GetUniRenderEnabled(enable) == ERR_OK && enable;
96 }
97 
GetMemoryGraphic(int pid)98 MemoryGraphic RSRenderServiceClient::GetMemoryGraphic(int pid)
99 {
100     auto renderService = RSRenderServiceConnectHub::GetRenderService();
101     if (renderService == nullptr) {
102         return MemoryGraphic {};
103     }
104     MemoryGraphic memoryGraphic;
105     renderService->GetMemoryGraphic(pid, memoryGraphic);
106     return memoryGraphic;
107 }
108 
GetMemoryGraphics()109 std::vector<MemoryGraphic> RSRenderServiceClient::GetMemoryGraphics()
110 {
111     auto renderService = RSRenderServiceConnectHub::GetRenderService();
112     if (renderService == nullptr) {
113         return {};
114     }
115     std::vector<MemoryGraphic> memoryGraphics;
116     renderService->GetMemoryGraphics(memoryGraphics);
117     return memoryGraphics;
118 }
119 
GetTotalAppMemSize(float & cpuMemSize,float & gpuMemSize)120 bool RSRenderServiceClient::GetTotalAppMemSize(float& cpuMemSize, float& gpuMemSize)
121 {
122     auto renderService = RSRenderServiceConnectHub::GetRenderService();
123     if (renderService == nullptr) {
124         return false;
125     }
126     return renderService->GetTotalAppMemSize(cpuMemSize, gpuMemSize) == ERR_OK;
127 }
128 
CreateNode(const RSDisplayNodeConfig & displayNodeConfig,NodeId nodeId)129 bool RSRenderServiceClient::CreateNode(const RSDisplayNodeConfig& displayNodeConfig, NodeId nodeId)
130 {
131     auto renderService = RSRenderServiceConnectHub::GetRenderService();
132     if (renderService == nullptr) {
133         return false;
134     }
135     bool success;
136     renderService->CreateNode(displayNodeConfig, nodeId, success);
137     return success;
138 }
139 
CreateNode(const RSSurfaceRenderNodeConfig & config)140 bool RSRenderServiceClient::CreateNode(const RSSurfaceRenderNodeConfig& config)
141 {
142     auto renderService = RSRenderServiceConnectHub::GetRenderService();
143     if (renderService == nullptr) {
144         return false;
145     }
146     bool success;
147     renderService->CreateNode(config, success);
148     return success;
149 }
150 
CreateNodeAndSurface(const RSSurfaceRenderNodeConfig & config,bool unobscured)151 std::shared_ptr<RSSurface> RSRenderServiceClient::CreateNodeAndSurface(const RSSurfaceRenderNodeConfig& config,
152     bool unobscured)
153 {
154     auto renderService = RSRenderServiceConnectHub::GetRenderService();
155     if (renderService == nullptr) {
156         return nullptr;
157     }
158 
159     sptr<Surface> surface = nullptr;
160     ErrCode err = renderService->CreateNodeAndSurface(config, surface, unobscured);
161     if ((err != ERR_OK) || (surface == nullptr)) {
162         ROSEN_LOGE("RSRenderServiceClient::CreateNodeAndSurface surface is nullptr.");
163         return nullptr;
164     }
165 #ifdef USE_VIDEO_PROCESSING_ENGINE
166     surface = RSVpeManager::GetInstance().CheckAndGetSurface(surface, config);
167     if (surface == nullptr) {
168         ROSEN_LOGE("RSVpeManager::CheckAndGetSurface surface is nullptr.");
169         return nullptr;
170     }
171 #endif
172     return CreateRSSurface(surface);
173 }
174 
CreateRSSurface(const sptr<Surface> & surface)175 std::shared_ptr<RSSurface> RSRenderServiceClient::CreateRSSurface(const sptr<Surface> &surface)
176 {
177 #if defined (RS_ENABLE_VK)
178     if (RSSystemProperties::IsUseVulkan()) {
179         return std::make_shared<RSSurfaceOhosVulkan>(surface); // GPU render
180     }
181 #endif
182 
183 #if defined (RS_ENABLE_GL)
184     if (RSSystemProperties::GetGpuApiType() == Rosen::GpuApiType::OPENGL) {
185         return std::make_shared<RSSurfaceOhosGl>(surface); // GPU render
186     }
187 #endif
188     return std::make_shared<RSSurfaceOhosRaster>(surface); // CPU render
189 }
190 
CreateVSyncReceiver(const std::string & name,const std::shared_ptr<OHOS::AppExecFwk::EventHandler> & looper,uint64_t id,NodeId windowNodeId,bool fromXcomponent)191 std::shared_ptr<VSyncReceiver> RSRenderServiceClient::CreateVSyncReceiver(
192     const std::string& name,
193     const std::shared_ptr<OHOS::AppExecFwk::EventHandler> &looper,
194     uint64_t id,
195     NodeId windowNodeId,
196     bool fromXcomponent)
197 {
198     ROSEN_LOGD("RSRenderServiceClient::CreateVSyncReceiver Start");
199     auto renderService = RSRenderServiceConnectHub::GetRenderService();
200     if (renderService == nullptr) {
201         return nullptr;
202     }
203     sptr<VSyncIConnectionToken> token = new IRemoteStub<VSyncIConnectionToken>();
204     sptr<IVSyncConnection> conn = nullptr;
205     VSyncConnParam vsyncConnParam = {id, windowNodeId, fromXcomponent};
206     renderService->CreateVSyncConnection(conn, name, token, vsyncConnParam);
207     if (conn == nullptr) {
208         ROSEN_LOGE("RSRenderServiceClient::CreateVSyncReceiver Failed");
209         return nullptr;
210     }
211     return std::make_shared<VSyncReceiver>(conn, token->AsObject(), looper, name);
212 }
213 
GetPixelMapByProcessId(std::vector<PixelMapInfo> & pixelMapInfoVector,pid_t pid)214 int32_t RSRenderServiceClient::GetPixelMapByProcessId(std::vector<PixelMapInfo>& pixelMapInfoVector, pid_t pid)
215 {
216     auto renderService = RSRenderServiceConnectHub::GetRenderService();
217     if (renderService == nullptr) {
218         return RENDER_SERVICE_NULL;
219     }
220     int32_t repCode;
221     renderService->GetPixelMapByProcessId(pixelMapInfoVector, pid, repCode);
222     return repCode;
223 }
224 
CreatePixelMapFromSurfaceId(uint64_t surfaceId,const Rect & srcRect)225 std::shared_ptr<Media::PixelMap> RSRenderServiceClient::CreatePixelMapFromSurfaceId(uint64_t surfaceId,
226     const Rect &srcRect)
227 {
228     auto renderService = RSRenderServiceConnectHub::GetRenderService();
229     if (renderService == nullptr) {
230         return nullptr;
231     }
232     sptr<Surface> surface = SurfaceUtils::GetInstance()->GetSurface(surfaceId);
233     if (surface == nullptr) {
234         return nullptr;
235     }
236     std::shared_ptr<Media::PixelMap> pixelMap = nullptr;
237     return renderService->CreatePixelMapFromSurface(surface, srcRect, pixelMap) == ERR_OK ? pixelMap : nullptr;
238 }
239 
TriggerSurfaceCaptureCallback(NodeId id,const RSSurfaceCaptureConfig & captureConfig,std::shared_ptr<Media::PixelMap> pixelmap,std::shared_ptr<Media::PixelMap> pixelmapHDR)240 void RSRenderServiceClient::TriggerSurfaceCaptureCallback(NodeId id, const RSSurfaceCaptureConfig& captureConfig,
241     std::shared_ptr<Media::PixelMap> pixelmap, std::shared_ptr<Media::PixelMap> pixelmapHDR)
242 {
243     ROSEN_LOGD("RSRenderServiceClient::Into TriggerSurfaceCaptureCallback nodeId:[%{public}" PRIu64 "]", id);
244     std::vector<std::shared_ptr<SurfaceCaptureCallback>> callbackVector;
245     {
246         std::lock_guard<std::mutex> lock(mutex_);
247         auto iter = surfaceCaptureCbMap_.find({ id, captureConfig });
248         if (iter != surfaceCaptureCbMap_.end()) {
249             callbackVector = iter->second;
250             surfaceCaptureCbMap_.erase(iter);
251         }
252     }
253     if (callbackVector.empty()) {
254         ROSEN_LOGE("RSRenderServiceClient::TriggerSurfaceCaptureCallback: callbackVector is empty!");
255         return;
256     }
257     for (decltype(callbackVector.size()) i = 0; i < callbackVector.size(); ++i) {
258         if (callbackVector[i] == nullptr) {
259             ROSEN_LOGE("RSRenderServiceClient::TriggerSurfaceCaptureCallback: callback is nullptr!");
260             continue;
261         }
262         std::shared_ptr<Media::PixelMap> surfaceCapture = pixelmap;
263         std::shared_ptr<Media::PixelMap> surfaceCaptureHDR = pixelmapHDR;
264         if (i != callbackVector.size() - 1) {
265             if (pixelmap != nullptr) {
266                 Media::InitializationOptions options;
267                 std::unique_ptr<Media::PixelMap> pixelmapCopy = Media::PixelMap::Create(*pixelmap, options);
268                 surfaceCapture = std::move(pixelmapCopy);
269             }
270             if (pixelmapHDR != nullptr) {
271                 Media::InitializationOptions options;
272                 std::unique_ptr<Media::PixelMap> pixelmapCopyHDR = Media::PixelMap::Create(*pixelmapHDR, options);
273                 surfaceCaptureHDR = std::move(pixelmapCopyHDR);
274             }
275         }
276         if (surfaceCapture) {
277             surfaceCapture->SetMemoryName("RSSurfaceCaptureForCallback");
278         }
279         if (surfaceCaptureHDR) {
280             surfaceCaptureHDR->SetMemoryName("RSSurfaceCaptureForCallbackHDR");
281         }
282         if (captureConfig.isHdrCapture) {
283             callbackVector[i]->OnSurfaceCaptureHDR(surfaceCapture, surfaceCaptureHDR);
284         } else {
285             callbackVector[i]->OnSurfaceCapture(surfaceCapture);
286         }
287     }
288 }
289 
290 class SurfaceCaptureCallbackDirector : public RSSurfaceCaptureCallbackStub
291 {
292 public:
SurfaceCaptureCallbackDirector(RSRenderServiceClient * client)293     explicit SurfaceCaptureCallbackDirector(RSRenderServiceClient* client) : client_(client) {}
~SurfaceCaptureCallbackDirector()294     ~SurfaceCaptureCallbackDirector() override {};
OnSurfaceCapture(NodeId id,const RSSurfaceCaptureConfig & captureConfig,Media::PixelMap * pixelmap,Media::PixelMap * pixelmapHDR=nullptr)295     void OnSurfaceCapture(NodeId id, const RSSurfaceCaptureConfig& captureConfig, Media::PixelMap* pixelmap,
296         Media::PixelMap* pixelmapHDR = nullptr) override
297     {
298         std::shared_ptr<Media::PixelMap> surfaceCapture(pixelmap);
299         std::shared_ptr<Media::PixelMap> surfaceCaptureHDR(pixelmapHDR);
300         client_->TriggerSurfaceCaptureCallback(id, captureConfig, surfaceCapture, surfaceCaptureHDR);
301     };
302 
303 private:
304     RSRenderServiceClient* client_;
305 };
306 
TakeSurfaceCapture(NodeId id,std::shared_ptr<SurfaceCaptureCallback> callback,const RSSurfaceCaptureConfig & captureConfig,const RSSurfaceCaptureBlurParam & blurParam,const Drawing::Rect & specifiedAreaRect)307 bool RSRenderServiceClient::TakeSurfaceCapture(NodeId id, std::shared_ptr<SurfaceCaptureCallback> callback,
308     const RSSurfaceCaptureConfig& captureConfig, const RSSurfaceCaptureBlurParam& blurParam,
309     const Drawing::Rect& specifiedAreaRect)
310 {
311     auto renderService = RSRenderServiceConnectHub::GetRenderService();
312     if (renderService == nullptr) {
313         ROSEN_LOGE("RSRenderServiceClient::TakeSurfaceCapture renderService == nullptr!");
314         return false;
315     }
316     if (callback == nullptr) {
317         ROSEN_LOGE("RSRenderServiceClient::TakeSurfaceCapture callback == nullptr!");
318         return false;
319     }
320     {
321         std::lock_guard<std::mutex> lock(mutex_);
322         auto iter = surfaceCaptureCbMap_.find({ id, captureConfig });
323         if (iter != surfaceCaptureCbMap_.end()) {
324             ROSEN_LOGD("RSRenderServiceClient::TakeSurfaceCapture surfaceCaptureCbMap_.count(id) != 0");
325             iter->second.emplace_back(callback);
326             return true;
327         }
328         std::vector<std::shared_ptr<SurfaceCaptureCallback>> callbackVector = {callback};
329         surfaceCaptureCbMap_.emplace(std::make_pair(id, captureConfig), callbackVector);
330     }
331 
332     if (surfaceCaptureCbDirector_ == nullptr) {
333         surfaceCaptureCbDirector_ = new SurfaceCaptureCallbackDirector(this);
334     }
335     renderService->TakeSurfaceCapture(id, surfaceCaptureCbDirector_, captureConfig, blurParam, specifiedAreaRect);
336     return true;
337 }
338 
TakeSurfaceCaptureSoloNode(NodeId id,const RSSurfaceCaptureConfig & captureConfig)339 std::vector<std::pair<NodeId, std::shared_ptr<Media::PixelMap>>> RSRenderServiceClient::TakeSurfaceCaptureSoloNode(
340     NodeId id, const RSSurfaceCaptureConfig& captureConfig)
341 {
342     auto renderService = RSRenderServiceConnectHub::GetRenderService();
343     std::vector<std::pair<NodeId, std::shared_ptr<Media::PixelMap>>> pixelMapIdPairVector;
344     if (renderService == nullptr) {
345         ROSEN_LOGE("RSRenderServiceClient::TakeSurfaceCaptureSoloNode renderService == nullptr!");
346         return pixelMapIdPairVector;
347     }
348     pixelMapIdPairVector = renderService->TakeSurfaceCaptureSoloNode(id, captureConfig);
349     return pixelMapIdPairVector;
350 }
351 
TakeSelfSurfaceCapture(NodeId id,std::shared_ptr<SurfaceCaptureCallback> callback,const RSSurfaceCaptureConfig & captureConfig)352 bool RSRenderServiceClient::TakeSelfSurfaceCapture(NodeId id, std::shared_ptr<SurfaceCaptureCallback> callback,
353     const RSSurfaceCaptureConfig& captureConfig)
354 {
355     auto renderService = RSRenderServiceConnectHub::GetRenderService();
356     if (renderService == nullptr) {
357         ROSEN_LOGE("RSRenderServiceClient::TakeSelfSurfaceCapture renderService == nullptr!");
358         return false;
359     }
360     if (callback == nullptr) {
361         ROSEN_LOGE("RSRenderServiceClient::TakeSelfSurfaceCapture callback == nullptr!");
362         return false;
363     }
364     {
365         std::lock_guard<std::mutex> lock(mutex_);
366         auto iter = surfaceCaptureCbMap_.find({ id, captureConfig });
367         if (iter != surfaceCaptureCbMap_.end()) {
368             ROSEN_LOGD("RSRenderServiceClient::TakeSelfSurfaceCapture surfaceCaptureCbMap_.count(id) != 0");
369             iter->second.emplace_back(callback);
370             return true;
371         }
372         std::vector<std::shared_ptr<SurfaceCaptureCallback>> callbackVector = {callback};
373         surfaceCaptureCbMap_.emplace(std::make_pair(id, captureConfig), callbackVector);
374     }
375 
376     if (surfaceCaptureCbDirector_ == nullptr) {
377         surfaceCaptureCbDirector_ = new SurfaceCaptureCallbackDirector(this);
378     }
379     renderService->TakeSelfSurfaceCapture(id, surfaceCaptureCbDirector_, captureConfig);
380     return true;
381 }
382 
SetWindowFreezeImmediately(NodeId id,bool isFreeze,std::shared_ptr<SurfaceCaptureCallback> callback,const RSSurfaceCaptureConfig & captureConfig,const RSSurfaceCaptureBlurParam & blurParam)383 bool RSRenderServiceClient::SetWindowFreezeImmediately(NodeId id, bool isFreeze,
384     std::shared_ptr<SurfaceCaptureCallback> callback, const RSSurfaceCaptureConfig& captureConfig,
385     const RSSurfaceCaptureBlurParam& blurParam)
386 {
387     auto renderService = RSRenderServiceConnectHub::GetRenderService();
388     if (renderService == nullptr) {
389         ROSEN_LOGE("RSRenderServiceClient::SetWindowFreezeImmediately renderService == nullptr!");
390         return false;
391     }
392     if (!isFreeze) {
393         renderService->SetWindowFreezeImmediately(id, isFreeze, nullptr, captureConfig, blurParam);
394         return true;
395     }
396     if (callback == nullptr) {
397         ROSEN_LOGE("RSRenderServiceClient::SetWindowFreezeImmediately callback == nullptr!");
398         return false;
399     }
400     {
401         std::lock_guard<std::mutex> lock(mutex_);
402         auto iter = surfaceCaptureCbMap_.find({ id, captureConfig });
403         if (iter != surfaceCaptureCbMap_.end()) {
404             ROSEN_LOGD("RSRenderServiceClient::SetWindowFreezeImmediately surfaceCaptureCbMap_.count(id) != 0");
405             iter->second.emplace_back(callback);
406             return true;
407         }
408         std::vector<std::shared_ptr<SurfaceCaptureCallback>> callbackVector = {callback};
409         surfaceCaptureCbMap_.emplace(std::make_pair(id, captureConfig), callbackVector);
410     }
411 
412     if (surfaceCaptureCbDirector_ == nullptr) {
413         surfaceCaptureCbDirector_ = new SurfaceCaptureCallbackDirector(this);
414     }
415     renderService->SetWindowFreezeImmediately(id, isFreeze, surfaceCaptureCbDirector_, captureConfig, blurParam);
416     return true;
417 }
418 
TaskSurfaceCaptureWithAllWindows(NodeId id,std::shared_ptr<SurfaceCaptureCallback> callback,const RSSurfaceCaptureConfig & captureConfig,bool checkDrmAndSurfaceLock)419 bool RSRenderServiceClient::TaskSurfaceCaptureWithAllWindows(NodeId id,
420     std::shared_ptr<SurfaceCaptureCallback> callback, const RSSurfaceCaptureConfig& captureConfig,
421     bool checkDrmAndSurfaceLock)
422 {
423     auto renderService = RSRenderServiceConnectHub::GetRenderService();
424     if (renderService == nullptr) {
425         ROSEN_LOGE("%{public}s renderService == nullptr!", __func__);
426         return false;
427     }
428     if (callback == nullptr) {
429         ROSEN_LOGE("%{public}s callback == nullptr!", __func__);
430         return false;
431     }
432     std::pair<NodeId, RSSurfaceCaptureConfig> key = std::make_pair(id, captureConfig);
433     {
434         std::lock_guard<std::mutex> lock(mutex_);
435         auto iter = surfaceCaptureCbMap_.find(key);
436         if (iter != surfaceCaptureCbMap_.end()) {
437             ROSEN_LOGD("%{public}s surfaceCaptureCbMap_.count(id) != 0", __func__);
438             iter->second.emplace_back(callback);
439             return true;
440         }
441         std::vector<std::shared_ptr<SurfaceCaptureCallback>> callbackVector = { callback };
442         surfaceCaptureCbMap_.emplace(key, callbackVector);
443 
444         if (surfaceCaptureCbDirector_ == nullptr) {
445             surfaceCaptureCbDirector_ = new SurfaceCaptureCallbackDirector(this);
446         }
447     }
448 
449     auto ret = renderService->TaskSurfaceCaptureWithAllWindows(
450         id, surfaceCaptureCbDirector_, captureConfig, checkDrmAndSurfaceLock);
451     if (ret != ERR_OK) {
452         ROSEN_LOGE("%{public}s fail, ret[%{public}d]", __func__, ret);
453         std::lock_guard<std::mutex> lock(mutex_);
454         surfaceCaptureCbMap_.erase(key);
455         return false;
456     }
457     return true;
458 }
459 
FreezeScreen(NodeId id,bool isFreeze)460 bool RSRenderServiceClient::FreezeScreen(NodeId id, bool isFreeze)
461 {
462     auto renderService = RSRenderServiceConnectHub::GetRenderService();
463     if (renderService == nullptr) {
464         ROSEN_LOGE("%{public}s renderService == nullptr!", __func__);
465         return false;
466     }
467     renderService->FreezeScreen(id, isFreeze);
468     return true;
469 }
470 
TakeUICaptureInRange(NodeId id,std::shared_ptr<SurfaceCaptureCallback> callback,const RSSurfaceCaptureConfig & captureConfig)471 bool RSRenderServiceClient::TakeUICaptureInRange(
472     NodeId id, std::shared_ptr<SurfaceCaptureCallback> callback, const RSSurfaceCaptureConfig& captureConfig)
473 {
474     auto renderService = RSRenderServiceConnectHub::GetRenderService();
475     if (renderService == nullptr) {
476         ROSEN_LOGE("RSRenderServiceClient::TakeUICaptureInRange renderService == nullptr!");
477         return false;
478     }
479     if (callback == nullptr) {
480         ROSEN_LOGE("RSRenderServiceClient::TakeUICaptureInRange callback == nullptr!");
481         return false;
482     }
483     {
484         std::lock_guard<std::mutex> lock(mutex_);
485         auto iter = surfaceCaptureCbMap_.find({ id, captureConfig });
486         if (iter != surfaceCaptureCbMap_.end()) {
487             ROSEN_LOGD("RSRenderServiceClient::TakeUICaptureInRange surfaceCaptureCbMap_.count(id) != 0");
488             iter->second.emplace_back(callback);
489             return true;
490         }
491         std::vector<std::shared_ptr<SurfaceCaptureCallback>> callbackVector = {callback};
492         surfaceCaptureCbMap_.emplace(std::make_pair(id, captureConfig), callbackVector);
493     }
494 
495     std::lock_guard<std::mutex> lock(surfaceCaptureCbDirectorMutex_);
496     if (surfaceCaptureCbDirector_ == nullptr) {
497         surfaceCaptureCbDirector_ = new SurfaceCaptureCallbackDirector(this);
498     }
499     renderService->TakeUICaptureInRange(id, surfaceCaptureCbDirector_, captureConfig);
500     return true;
501 }
502 
SetHwcNodeBounds(int64_t rsNodeId,float positionX,float positionY,float positionZ,float positionW)503 bool RSRenderServiceClient::SetHwcNodeBounds(int64_t rsNodeId, float positionX, float positionY,
504     float positionZ, float positionW)
505 {
506     auto renderService = RSRenderServiceConnectHub::GetRenderService();
507     if (renderService == nullptr) {
508         RS_LOGE("RSRenderServiceClient::SetHwcNodeBounds renderService is null!");
509         return false;
510     }
511     renderService->SetHwcNodeBounds(rsNodeId, positionX, positionY, positionZ, positionW);
512     return true;
513 }
514 
SetFocusAppInfo(const FocusAppInfo & info)515 int32_t RSRenderServiceClient::SetFocusAppInfo(const FocusAppInfo& info)
516 {
517     auto renderService = RSRenderServiceConnectHub::GetRenderService();
518     if (renderService == nullptr) {
519         return RENDER_SERVICE_NULL;
520     }
521     int32_t repCode;
522     renderService->SetFocusAppInfo(info, repCode);
523     return repCode;
524 }
525 
GetDefaultScreenId()526 ScreenId RSRenderServiceClient::GetDefaultScreenId()
527 {
528     auto renderService = RSRenderServiceConnectHub::GetRenderService();
529     if (renderService == nullptr) {
530         return INVALID_SCREEN_ID;
531     }
532 
533     ScreenId screenId{INVALID_SCREEN_ID};
534     renderService->GetDefaultScreenId(screenId);
535     return screenId;
536 }
537 
GetActiveScreenId()538 ScreenId RSRenderServiceClient::GetActiveScreenId()
539 {
540     auto renderService = RSRenderServiceConnectHub::GetRenderService();
541     if (renderService == nullptr) {
542         return INVALID_SCREEN_ID;
543     }
544 
545     ScreenId screenId{INVALID_SCREEN_ID};
546     renderService->GetActiveScreenId(screenId);
547     return screenId;
548 }
549 
GetAllScreenIds()550 std::vector<ScreenId> RSRenderServiceClient::GetAllScreenIds()
551 {
552     auto renderService = RSRenderServiceConnectHub::GetRenderService();
553     if (renderService == nullptr) {
554         return std::vector<ScreenId>();
555     }
556 
557     return renderService->GetAllScreenIds();
558 }
559 
CreateVirtualScreen(const std::string & name,uint32_t width,uint32_t height,sptr<Surface> surface,ScreenId mirrorId,int32_t flags,std::vector<NodeId> whiteList)560 ScreenId RSRenderServiceClient::CreateVirtualScreen(
561     const std::string &name,
562     uint32_t width,
563     uint32_t height,
564     sptr<Surface> surface,
565     ScreenId mirrorId,
566     int32_t flags,
567     std::vector<NodeId> whiteList)
568 {
569     auto renderService = RSRenderServiceConnectHub::GetRenderService();
570     if (renderService == nullptr) {
571         RS_LOGE("RSRenderServiceClient::%{public}s renderService is null!", __func__);
572         return INVALID_SCREEN_ID;
573     }
574 
575     return renderService->CreateVirtualScreen(name, width, height, surface, mirrorId, flags, whiteList);
576 }
577 
SetVirtualScreenBlackList(ScreenId id,std::vector<NodeId> & blackListVector)578 int32_t RSRenderServiceClient::SetVirtualScreenBlackList(ScreenId id, std::vector<NodeId>& blackListVector)
579 {
580     auto renderService = RSRenderServiceConnectHub::GetRenderService();
581     if (renderService == nullptr) {
582         RS_LOGE("RSRenderServiceClient::%{public}s renderService is null!", __func__);
583         return RENDER_SERVICE_NULL;
584     }
585 
586     return renderService->SetVirtualScreenBlackList(id, blackListVector);
587 }
588 
SetVirtualScreenTypeBlackList(ScreenId id,std::vector<NodeType> & typeBlackListVector)589 int32_t RSRenderServiceClient::SetVirtualScreenTypeBlackList(ScreenId id, std::vector<NodeType>& typeBlackListVector)
590 {
591     auto renderService = RSRenderServiceConnectHub::GetRenderService();
592     if (renderService == nullptr) {
593         return RENDER_SERVICE_NULL;
594     }
595     int32_t repCode;
596     renderService->SetVirtualScreenTypeBlackList(id, typeBlackListVector, repCode);
597     return repCode;
598 }
599 
AddVirtualScreenBlackList(ScreenId id,std::vector<NodeId> & blackListVector)600 int32_t RSRenderServiceClient::AddVirtualScreenBlackList(ScreenId id, std::vector<NodeId>& blackListVector)
601 {
602     auto renderService = RSRenderServiceConnectHub::GetRenderService();
603     if (renderService == nullptr) {
604         RS_LOGE("RSRenderServiceClient::%{public}s renderService is null!", __func__);
605         return RENDER_SERVICE_NULL;
606     }
607     int32_t repCode;
608     renderService->AddVirtualScreenBlackList(id, blackListVector, repCode);
609     return repCode;
610 }
611 
RemoveVirtualScreenBlackList(ScreenId id,std::vector<NodeId> & blackListVector)612 int32_t RSRenderServiceClient::RemoveVirtualScreenBlackList(ScreenId id, std::vector<NodeId>& blackListVector)
613 {
614     auto renderService = RSRenderServiceConnectHub::GetRenderService();
615     if (renderService == nullptr) {
616         RS_LOGE("RSRenderServiceClient::%{public}s renderService is null!", __func__);
617         return RENDER_SERVICE_NULL;
618     }
619     int32_t repCode;
620     renderService->RemoveVirtualScreenBlackList(id, blackListVector, repCode);
621     return repCode;
622 }
623 
SetWatermark(const std::string & name,std::shared_ptr<Media::PixelMap> watermark)624 bool RSRenderServiceClient::SetWatermark(const std::string& name, std::shared_ptr<Media::PixelMap> watermark)
625 {
626     auto renderService = RSRenderServiceConnectHub::GetRenderService();
627     if (renderService == nullptr) {
628         return false;
629     }
630     bool success;
631     renderService->SetWatermark(name, watermark, success);
632     return success;
633 }
634 
SetVirtualScreenSecurityExemptionList(ScreenId id,const std::vector<NodeId> & securityExemptionList)635 int32_t RSRenderServiceClient::SetVirtualScreenSecurityExemptionList(
636     ScreenId id,
637     const std::vector<NodeId>& securityExemptionList)
638 {
639     auto renderService = RSRenderServiceConnectHub::GetRenderService();
640     if (renderService == nullptr) {
641         return RENDER_SERVICE_NULL;
642     }
643 
644     return renderService->SetVirtualScreenSecurityExemptionList(id, securityExemptionList);
645 }
646 
SetScreenSecurityMask(ScreenId id,std::shared_ptr<Media::PixelMap> securityMask)647 int32_t RSRenderServiceClient::SetScreenSecurityMask(ScreenId id,
648     std::shared_ptr<Media::PixelMap> securityMask)
649 {
650     auto renderService = RSRenderServiceConnectHub::GetRenderService();
651     if (renderService == nullptr) {
652         return RENDER_SERVICE_NULL;
653     }
654 
655     return renderService->SetScreenSecurityMask(id, std::move(securityMask));
656 }
657 
SetMirrorScreenVisibleRect(ScreenId id,const Rect & mainScreenRect,bool supportRotation)658 int32_t RSRenderServiceClient::SetMirrorScreenVisibleRect(ScreenId id, const Rect& mainScreenRect, bool supportRotation)
659 {
660     auto renderService = RSRenderServiceConnectHub::GetRenderService();
661     if (renderService == nullptr) {
662         return RENDER_SERVICE_NULL;
663     }
664 
665     return renderService->SetMirrorScreenVisibleRect(id, mainScreenRect, supportRotation);
666 }
667 
SetCastScreenEnableSkipWindow(ScreenId id,bool enable)668 int32_t RSRenderServiceClient::SetCastScreenEnableSkipWindow(ScreenId id, bool enable)
669 {
670     auto renderService = RSRenderServiceConnectHub::GetRenderService();
671     if (renderService == nullptr) {
672         return RENDER_SERVICE_NULL;
673     }
674 
675     return renderService->SetCastScreenEnableSkipWindow(id, enable);
676 }
677 
SetVirtualScreenSurface(ScreenId id,sptr<Surface> surface)678 int32_t RSRenderServiceClient::SetVirtualScreenSurface(ScreenId id, sptr<Surface> surface)
679 {
680     auto renderService = RSRenderServiceConnectHub::GetRenderService();
681     if (renderService == nullptr) {
682         return RENDER_SERVICE_NULL;
683     }
684 
685     return renderService->SetVirtualScreenSurface(id, surface);
686 }
687 
RemoveVirtualScreen(ScreenId id)688 void RSRenderServiceClient::RemoveVirtualScreen(ScreenId id)
689 {
690     auto renderService = RSRenderServiceConnectHub::GetRenderService();
691     if (renderService == nullptr) {
692         return;
693     }
694 
695     renderService->RemoveVirtualScreen(id);
696 }
697 
698 #ifdef OHOS_BUILD_ENABLE_MAGICCURSOR
SetPointerColorInversionConfig(float darkBuffer,float brightBuffer,int64_t interval,int32_t rangeSize)699 int32_t RSRenderServiceClient::SetPointerColorInversionConfig(float darkBuffer, float brightBuffer,
700     int64_t interval, int32_t rangeSize)
701 {
702     auto renderService = RSRenderServiceConnectHub::GetRenderService();
703     if (renderService == nullptr) {
704         return RENDER_SERVICE_NULL;
705     }
706 
707     return renderService->SetPointerColorInversionConfig(darkBuffer, brightBuffer, interval, rangeSize);
708 }
709 
SetPointerColorInversionEnabled(bool enable)710 int32_t RSRenderServiceClient::SetPointerColorInversionEnabled(bool enable)
711 {
712     auto renderService = RSRenderServiceConnectHub::GetRenderService();
713     if (renderService == nullptr) {
714         return RENDER_SERVICE_NULL;
715     }
716 
717     return renderService->SetPointerColorInversionEnabled(enable);
718 }
719 
720 class CustomPointerLuminanceChangeCallback : public RSPointerLuminanceChangeCallbackStub
721 {
722 public:
CustomPointerLuminanceChangeCallback(const PointerLuminanceChangeCallback & callback)723     explicit CustomPointerLuminanceChangeCallback(const PointerLuminanceChangeCallback &callback) : cb_(callback) {}
~CustomPointerLuminanceChangeCallback()724     ~CustomPointerLuminanceChangeCallback() override {};
725 
OnPointerLuminanceChanged(int32_t brightness)726     void OnPointerLuminanceChanged(int32_t brightness) override
727     {
728         if (cb_ != nullptr) {
729             cb_(brightness);
730         }
731     }
732 
733 private:
734     PointerLuminanceChangeCallback cb_;
735 };
736 
RegisterPointerLuminanceChangeCallback(const PointerLuminanceChangeCallback & callback)737 int32_t RSRenderServiceClient::RegisterPointerLuminanceChangeCallback(const PointerLuminanceChangeCallback &callback)
738 {
739     auto renderService = RSRenderServiceConnectHub::GetRenderService();
740     if (renderService == nullptr) {
741         return RENDER_SERVICE_NULL;
742     }
743 
744     sptr<RSIPointerLuminanceChangeCallback> cb = new CustomPointerLuminanceChangeCallback(callback);
745     return renderService->RegisterPointerLuminanceChangeCallback(cb);
746 }
747 
UnRegisterPointerLuminanceChangeCallback()748 int32_t RSRenderServiceClient::UnRegisterPointerLuminanceChangeCallback()
749 {
750     auto renderService = RSRenderServiceConnectHub::GetRenderService();
751     if (renderService == nullptr) {
752         return RENDER_SERVICE_NULL;
753     }
754     return renderService->UnRegisterPointerLuminanceChangeCallback();
755 }
756 #endif
757 
758 class CustomScreenChangeCallback : public RSScreenChangeCallbackStub
759 {
760 public:
CustomScreenChangeCallback(const ScreenChangeCallback & callback)761     explicit CustomScreenChangeCallback(const ScreenChangeCallback &callback) : cb_(callback) {}
~CustomScreenChangeCallback()762     ~CustomScreenChangeCallback() override {};
763 
OnScreenChanged(ScreenId id,ScreenEvent event,ScreenChangeReason reason)764     void OnScreenChanged(ScreenId id, ScreenEvent event,
765         ScreenChangeReason reason) override
766     {
767         if (cb_ != nullptr) {
768             cb_(id, event, reason);
769         }
770     }
771 
772 private:
773     ScreenChangeCallback cb_;
774 };
775 
SetScreenChangeCallback(const ScreenChangeCallback & callback)776 int32_t RSRenderServiceClient::SetScreenChangeCallback(const ScreenChangeCallback &callback)
777 {
778     auto renderService = RSRenderServiceConnectHub::GetRenderService();
779     if (renderService == nullptr) {
780         ROSEN_LOGE("RSRenderServiceClient::%{public}s renderService is null", __func__);
781         return RENDER_SERVICE_NULL;
782     }
783 
784     screenChangeCb_ = new CustomScreenChangeCallback(callback);
785     return renderService->SetScreenChangeCallback(screenChangeCb_);
786 }
787 
788 class CustomScreenSwitchingNotifyCallback : public RSScreenSwitchingNotifyCallbackStub
789 {
790 public:
CustomScreenSwitchingNotifyCallback(const ScreenSwitchingNotifyCallback & callback)791     explicit CustomScreenSwitchingNotifyCallback(const ScreenSwitchingNotifyCallback &callback) : cb_(callback) {}
~CustomScreenSwitchingNotifyCallback()792     ~CustomScreenSwitchingNotifyCallback() override {};
793 
OnScreenSwitchingNotify(bool status)794     void OnScreenSwitchingNotify(bool status) override
795     {
796         if (cb_ != nullptr) {
797             cb_(status);
798         }
799     }
800 
801 private:
802     ScreenSwitchingNotifyCallback cb_;
803 };
804 
SetScreenSwitchingNotifyCallback(const ScreenSwitchingNotifyCallback & callback)805 int32_t RSRenderServiceClient::SetScreenSwitchingNotifyCallback(const ScreenSwitchingNotifyCallback &callback)
806 {
807     auto renderService = RSRenderServiceConnectHub::GetRenderService();
808     if (renderService == nullptr) {
809         ROSEN_LOGE("RSRenderServiceClient::%{public}s renderService is null", __func__);
810         return RENDER_SERVICE_NULL;
811     }
812 
813     sptr<CustomScreenSwitchingNotifyCallback> cb = nullptr;
814     if (callback) {
815         cb = new CustomScreenSwitchingNotifyCallback(callback);
816     }
817 
818     return renderService->SetScreenSwitchingNotifyCallback(cb);
819 }
820 
SetScreenActiveMode(ScreenId id,uint32_t modeId)821 void RSRenderServiceClient::SetScreenActiveMode(ScreenId id, uint32_t modeId)
822 {
823     auto renderService = RSRenderServiceConnectHub::GetRenderService();
824     if (renderService == nullptr) {
825         return;
826     }
827 
828     renderService->SetScreenActiveMode(id, modeId);
829 }
830 
SetScreenRefreshRate(ScreenId id,int32_t sceneId,int32_t rate)831 void RSRenderServiceClient::SetScreenRefreshRate(ScreenId id, int32_t sceneId, int32_t rate)
832 {
833     auto renderService = RSRenderServiceConnectHub::GetRenderService();
834     if (renderService == nullptr) {
835         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
836         return;
837     }
838 
839     renderService->SetScreenRefreshRate(id, sceneId, rate);
840 }
841 
SetRefreshRateMode(int32_t refreshRateMode)842 void RSRenderServiceClient::SetRefreshRateMode(int32_t refreshRateMode)
843 {
844     auto renderService = RSRenderServiceConnectHub::GetRenderService();
845     if (renderService == nullptr) {
846         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
847         return;
848     }
849 
850     renderService->SetRefreshRateMode(refreshRateMode);
851 }
852 
SyncFrameRateRange(FrameRateLinkerId id,const FrameRateRange & range,int32_t animatorExpectedFrameRate)853 void RSRenderServiceClient::SyncFrameRateRange(FrameRateLinkerId id,
854     const FrameRateRange& range, int32_t animatorExpectedFrameRate)
855 {
856     auto renderService = RSRenderServiceConnectHub::GetRenderService();
857     if (renderService == nullptr) {
858         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
859         return;
860     }
861 
862     return renderService->SyncFrameRateRange(id, range, animatorExpectedFrameRate);
863 }
864 
UnregisterFrameRateLinker(FrameRateLinkerId id)865 void RSRenderServiceClient::UnregisterFrameRateLinker(FrameRateLinkerId id)
866 {
867     auto renderService = RSRenderServiceConnectHub::GetRenderService();
868     if (renderService == nullptr) {
869         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
870         return;
871     }
872     renderService->UnregisterFrameRateLinker(id);
873 }
874 
GetScreenCurrentRefreshRate(ScreenId id)875 uint32_t RSRenderServiceClient::GetScreenCurrentRefreshRate(ScreenId id)
876 {
877     auto renderService = RSRenderServiceConnectHub::GetRenderService();
878     if (renderService == nullptr) {
879         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
880         return RENDER_SERVICE_NULL;
881     }
882 
883     return renderService->GetScreenCurrentRefreshRate(id);
884 }
885 
GetCurrentRefreshRateMode()886 int32_t RSRenderServiceClient::GetCurrentRefreshRateMode()
887 {
888     auto renderService = RSRenderServiceConnectHub::GetRenderService();
889     if (renderService == nullptr) {
890         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
891         return RENDER_SERVICE_NULL;
892     }
893 
894     return renderService->GetCurrentRefreshRateMode();
895 }
896 
GetScreenSupportedRefreshRates(ScreenId id)897 std::vector<int32_t> RSRenderServiceClient::GetScreenSupportedRefreshRates(ScreenId id)
898 {
899     auto renderService = RSRenderServiceConnectHub::GetRenderService();
900     if (renderService == nullptr) {
901         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
902         return {};
903     }
904 
905     return renderService->GetScreenSupportedRefreshRates(id);
906 }
907 
GetShowRefreshRateEnabled()908 bool RSRenderServiceClient::GetShowRefreshRateEnabled()
909 {
910     auto renderService = RSRenderServiceConnectHub::GetRenderService();
911     if (renderService == nullptr) {
912         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
913         return false;
914     }
915 
916     bool enable = false;
917     renderService->GetShowRefreshRateEnabled(enable);
918     return enable;
919 }
920 
GetRefreshInfo(pid_t pid)921 std::string RSRenderServiceClient::GetRefreshInfo(pid_t pid)
922 {
923     auto renderService = RSRenderServiceConnectHub::GetRenderService();
924     if (renderService == nullptr) {
925         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
926         return "";
927     }
928     std::string enable;
929     renderService->GetRefreshInfo(pid, enable);
930     return enable;
931 }
932 
GetRefreshInfoToSP(NodeId id)933 std::string RSRenderServiceClient::GetRefreshInfoToSP(NodeId id)
934 {
935     auto renderService = RSRenderServiceConnectHub::GetRenderService();
936     if (renderService == nullptr) {
937         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
938         return "";
939     }
940     std::string enable;
941     renderService->GetRefreshInfoToSP(id, enable);
942     return enable;
943 }
944 
SetShowRefreshRateEnabled(bool enabled,int32_t type)945 void RSRenderServiceClient::SetShowRefreshRateEnabled(bool enabled, int32_t type)
946 {
947     auto renderService = RSRenderServiceConnectHub::GetRenderService();
948     if (renderService == nullptr) {
949         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
950         return;
951     }
952 
953     return renderService->SetShowRefreshRateEnabled(enabled, type);
954 }
955 
GetRealtimeRefreshRate(ScreenId id)956 uint32_t RSRenderServiceClient::GetRealtimeRefreshRate(ScreenId id)
957 {
958     auto renderService = RSRenderServiceConnectHub::GetRenderService();
959     if (renderService == nullptr) {
960         ROSEN_LOGW("RSRenderServiceClient renderService == nullptr!");
961         return RENDER_SERVICE_NULL;
962     }
963 
964     return renderService->GetRealtimeRefreshRate(id);
965 }
966 
SetPhysicalScreenResolution(ScreenId id,uint32_t width,uint32_t height)967 int32_t RSRenderServiceClient::SetPhysicalScreenResolution(ScreenId id, uint32_t width, uint32_t height)
968 {
969     auto renderService = RSRenderServiceConnectHub::GetRenderService();
970     if (renderService == nullptr) {
971         ROSEN_LOGE("%{public}s: render service is null", __func__);
972         return RENDER_SERVICE_NULL;
973     }
974 
975     return renderService->SetPhysicalScreenResolution(id, width, height);
976 }
977 
SetVirtualScreenResolution(ScreenId id,uint32_t width,uint32_t height)978 int32_t RSRenderServiceClient::SetVirtualScreenResolution(ScreenId id, uint32_t width, uint32_t height)
979 {
980     auto renderService = RSRenderServiceConnectHub::GetRenderService();
981     if (renderService == nullptr) {
982         ROSEN_LOGE("RSRenderServiceClient::SetVirtualScreenResolution renderService == nullptr!");
983         return RENDER_SERVICE_NULL;
984     }
985 
986     return renderService->SetVirtualScreenResolution(id, width, height);
987 }
988 
GetVirtualScreenResolution(ScreenId id)989 RSVirtualScreenResolution RSRenderServiceClient::GetVirtualScreenResolution(ScreenId id)
990 {
991     auto renderService = RSRenderServiceConnectHub::GetRenderService();
992     if (renderService == nullptr) {
993         return RSVirtualScreenResolution {}; // return empty RSVirtualScreenResolution.
994     }
995 
996     return renderService->GetVirtualScreenResolution(id);
997 }
998 
MarkPowerOffNeedProcessOneFrame()999 void RSRenderServiceClient::MarkPowerOffNeedProcessOneFrame()
1000 {
1001     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1002     if (renderService == nullptr) {
1003         return;
1004     }
1005 
1006     renderService->MarkPowerOffNeedProcessOneFrame();
1007 }
1008 
RepaintEverything()1009 void RSRenderServiceClient::RepaintEverything()
1010 {
1011     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1012     if (renderService == nullptr) {
1013         ROSEN_LOGE("RepaintEverything renderService is null, return");
1014         return;
1015     }
1016 
1017     renderService->RepaintEverything();
1018 }
1019 
ForceRefreshOneFrameWithNextVSync()1020 void RSRenderServiceClient::ForceRefreshOneFrameWithNextVSync()
1021 {
1022     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1023     if (renderService == nullptr) {
1024         ROSEN_LOGE("ForceRefreshOneFrameWithNextVSync renderService is nullptr, return");
1025         return;
1026     }
1027 
1028     renderService->ForceRefreshOneFrameWithNextVSync();
1029 }
1030 
DisablePowerOffRenderControl(ScreenId id)1031 void RSRenderServiceClient::DisablePowerOffRenderControl(ScreenId id)
1032 {
1033     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1034     if (renderService == nullptr) {
1035         return;
1036     }
1037 
1038     renderService->DisablePowerOffRenderControl(id);
1039 }
1040 
SetScreenPowerStatus(ScreenId id,ScreenPowerStatus status)1041 void RSRenderServiceClient::SetScreenPowerStatus(ScreenId id, ScreenPowerStatus status)
1042 {
1043     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1044     if (renderService == nullptr) {
1045         ROSEN_LOGE("RSRenderServiceClient::%{public}s renderService is nullptr", __func__);
1046         return;
1047     }
1048 
1049     renderService->SetScreenPowerStatus(id, status);
1050 }
1051 
GetScreenActiveMode(ScreenId id)1052 RSScreenModeInfo RSRenderServiceClient::GetScreenActiveMode(ScreenId id)
1053 {
1054     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1055     if (renderService == nullptr) {
1056         return RSScreenModeInfo {}; // return empty RSScreenModeInfo.
1057     }
1058 
1059     RSScreenModeInfo screenModeInfo;
1060     renderService->GetScreenActiveMode(id, screenModeInfo);
1061     return screenModeInfo;
1062 }
1063 
GetScreenSupportedModes(ScreenId id)1064 std::vector<RSScreenModeInfo> RSRenderServiceClient::GetScreenSupportedModes(ScreenId id)
1065 {
1066     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1067     if (renderService == nullptr) {
1068         return {};
1069     }
1070 
1071     return renderService->GetScreenSupportedModes(id);
1072 }
1073 
GetScreenCapability(ScreenId id)1074 RSScreenCapability RSRenderServiceClient::GetScreenCapability(ScreenId id)
1075 {
1076     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1077     if (renderService == nullptr) {
1078         return RSScreenCapability {};
1079     }
1080 
1081     return renderService->GetScreenCapability(id);
1082 }
1083 
GetScreenPowerStatus(ScreenId id)1084 ScreenPowerStatus RSRenderServiceClient::GetScreenPowerStatus(ScreenId id)
1085 {
1086     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1087     if (renderService == nullptr) {
1088         return ScreenPowerStatus::INVALID_POWER_STATUS;
1089     }
1090     uint32_t status {static_cast<int32_t>(ScreenPowerStatus::INVALID_POWER_STATUS)};
1091     renderService->GetScreenPowerStatus(id, status);
1092     return static_cast<ScreenPowerStatus>(status);
1093 }
1094 
GetScreenData(ScreenId id)1095 RSScreenData RSRenderServiceClient::GetScreenData(ScreenId id)
1096 {
1097     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1098     if (renderService == nullptr) {
1099         return RSScreenData {};
1100     }
1101 
1102     return renderService->GetScreenData(id);
1103 }
1104 
GetScreenBacklight(ScreenId id)1105 int32_t RSRenderServiceClient::GetScreenBacklight(ScreenId id)
1106 {
1107     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1108     if (renderService == nullptr) {
1109         ROSEN_LOGE("RSRenderServiceClient::%{public}s renderService is nullptr", __func__);
1110         return INVALID_BACKLIGHT_VALUE;
1111     }
1112     int32_t backLightLevel = INVALID_BACKLIGHT_VALUE;
1113     renderService->GetScreenBacklight(id, backLightLevel);
1114     return backLightLevel;
1115 }
1116 
SetScreenBacklight(ScreenId id,uint32_t level)1117 void RSRenderServiceClient::SetScreenBacklight(ScreenId id, uint32_t level)
1118 {
1119     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1120     if (renderService == nullptr) {
1121         ROSEN_LOGE("RSRenderServiceClient::%{public}s renderService is nullptr", __func__);
1122         return;
1123     }
1124 
1125     renderService->SetScreenBacklight(id, level);
1126 }
1127 
1128 class CustomBufferAvailableCallback : public RSBufferAvailableCallbackStub
1129 {
1130 public:
CustomBufferAvailableCallback(const BufferAvailableCallback & callback)1131     explicit CustomBufferAvailableCallback(const BufferAvailableCallback &callback) : cb_(callback) {}
~CustomBufferAvailableCallback()1132     ~CustomBufferAvailableCallback() override {};
1133 
OnBufferAvailable()1134     void OnBufferAvailable() override
1135     {
1136         if (cb_ != nullptr) {
1137             cb_();
1138         }
1139     }
1140 
1141 private:
1142     BufferAvailableCallback cb_;
1143 };
1144 
1145 class CustomBufferClearCallback : public RSBufferClearCallbackStub
1146 {
1147 public:
CustomBufferClearCallback(const BufferClearCallback & callback)1148     explicit CustomBufferClearCallback(const BufferClearCallback &callback) : cb_(callback) {}
~CustomBufferClearCallback()1149     ~CustomBufferClearCallback() override {};
1150 
OnBufferClear()1151     void OnBufferClear() override
1152     {
1153         if (cb_ != nullptr) {
1154             cb_();
1155         }
1156     }
1157 
1158 private:
1159     BufferClearCallback cb_;
1160 };
1161 
RegisterBufferAvailableListener(NodeId id,const BufferAvailableCallback & callback,bool isFromRenderThread)1162 bool RSRenderServiceClient::RegisterBufferAvailableListener(
1163     NodeId id, const BufferAvailableCallback &callback, bool isFromRenderThread)
1164 {
1165     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1166     if (renderService == nullptr) {
1167         return false;
1168     }
1169     std::lock_guard<std::mutex> lock(mapMutex_);
1170     auto iter = isFromRenderThread ? bufferAvailableCbRTMap_.find(id) : bufferAvailableCbUIMap_.find(id);
1171     if (isFromRenderThread && iter != bufferAvailableCbRTMap_.end()) {
1172         ROSEN_LOGW("RSRenderServiceClient::RegisterBufferAvailableListener "
1173                    "Node %{public}" PRIu64 " already, bufferAvailableCbRTMap_", iter->first);
1174     }
1175 
1176     if (!isFromRenderThread && iter != bufferAvailableCbUIMap_.end()) {
1177         ROSEN_LOGW("RSRenderServiceClient::RegisterBufferAvailableListener "
1178                    "Node %{public}" PRIu64 " already, bufferAvailableCbUIMap_", iter->first);
1179         bufferAvailableCbUIMap_.erase(iter);
1180     }
1181 
1182     sptr<RSIBufferAvailableCallback> bufferAvailableCb = new CustomBufferAvailableCallback(callback);
1183     renderService->RegisterBufferAvailableListener(id, bufferAvailableCb, isFromRenderThread);
1184     if (isFromRenderThread) {
1185         bufferAvailableCbRTMap_.emplace(id, bufferAvailableCb);
1186     } else {
1187         bufferAvailableCbUIMap_.emplace(id, bufferAvailableCb);
1188     }
1189     return true;
1190 }
1191 
RegisterBufferClearListener(NodeId id,const BufferClearCallback & callback)1192 bool RSRenderServiceClient::RegisterBufferClearListener(NodeId id, const BufferClearCallback& callback)
1193 {
1194     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1195     if (renderService == nullptr) {
1196         return false;
1197     }
1198     sptr<RSIBufferClearCallback> bufferClearCb = new CustomBufferClearCallback(callback);
1199     renderService->RegisterBufferClearListener(id, bufferClearCb);
1200     return true;
1201 }
1202 
1203 
UnregisterBufferAvailableListener(NodeId id)1204 bool RSRenderServiceClient::UnregisterBufferAvailableListener(NodeId id)
1205 {
1206     std::lock_guard<std::mutex> lock(mapMutex_);
1207     auto iter = bufferAvailableCbRTMap_.find(id);
1208     if (iter != bufferAvailableCbRTMap_.end()) {
1209         bufferAvailableCbRTMap_.erase(iter);
1210     } else {
1211         ROSEN_LOGD("RSRenderServiceClient::UnregisterBufferAvailableListener "
1212                    "Node %{public}" PRIu64 " has not registered RT callback", id);
1213     }
1214     iter = bufferAvailableCbUIMap_.find(id);
1215     if (iter != bufferAvailableCbUIMap_.end()) {
1216         bufferAvailableCbUIMap_.erase(iter);
1217     } else {
1218         ROSEN_LOGD("RSRenderServiceClient::UnregisterBufferAvailableListener "
1219                    "Node %{public}" PRIu64 " has not registered UI callback", id);
1220     }
1221     return true;
1222 }
1223 
GetScreenSupportedColorGamuts(ScreenId id,std::vector<ScreenColorGamut> & mode)1224 int32_t RSRenderServiceClient::GetScreenSupportedColorGamuts(ScreenId id, std::vector<ScreenColorGamut>& mode)
1225 {
1226     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1227     if (renderService == nullptr) {
1228         return RENDER_SERVICE_NULL;
1229     }
1230     return renderService->GetScreenSupportedColorGamuts(id, mode);
1231 }
1232 
GetScreenSupportedMetaDataKeys(ScreenId id,std::vector<ScreenHDRMetadataKey> & keys)1233 int32_t RSRenderServiceClient::GetScreenSupportedMetaDataKeys(ScreenId id, std::vector<ScreenHDRMetadataKey>& keys)
1234 {
1235     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1236     if (renderService == nullptr) {
1237         ROSEN_LOGE("RSRenderServiceClient::RequestRotation renderService == nullptr!");
1238         return RENDER_SERVICE_NULL;
1239     }
1240     return renderService->GetScreenSupportedMetaDataKeys(id, keys);
1241 }
1242 
GetScreenColorGamut(ScreenId id,ScreenColorGamut & mode)1243 int32_t RSRenderServiceClient::GetScreenColorGamut(ScreenId id, ScreenColorGamut& mode)
1244 {
1245     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1246     if (renderService == nullptr) {
1247         return RENDER_SERVICE_NULL;
1248     }
1249     return renderService->GetScreenColorGamut(id, mode);
1250 }
1251 
SetScreenColorGamut(ScreenId id,int32_t modeIdx)1252 int32_t RSRenderServiceClient::SetScreenColorGamut(ScreenId id, int32_t modeIdx)
1253 {
1254     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1255     if (renderService == nullptr) {
1256         return RENDER_SERVICE_NULL;
1257     }
1258     return renderService->SetScreenColorGamut(id, modeIdx);
1259 }
1260 
SetScreenGamutMap(ScreenId id,ScreenGamutMap mode)1261 int32_t RSRenderServiceClient::SetScreenGamutMap(ScreenId id, ScreenGamutMap mode)
1262 {
1263     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1264     if (renderService == nullptr) {
1265         return RENDER_SERVICE_NULL;
1266     }
1267     return renderService->SetScreenGamutMap(id, mode);
1268 }
1269 
SetScreenCorrection(ScreenId id,ScreenRotation screenRotation)1270 int32_t RSRenderServiceClient::SetScreenCorrection(ScreenId id, ScreenRotation screenRotation)
1271 {
1272     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1273     if (renderService == nullptr) {
1274         return RENDER_SERVICE_NULL;
1275     }
1276     return renderService->SetScreenCorrection(id, screenRotation);
1277 }
1278 
SetVirtualMirrorScreenCanvasRotation(ScreenId id,bool canvasRotation)1279 bool RSRenderServiceClient::SetVirtualMirrorScreenCanvasRotation(ScreenId id, bool canvasRotation)
1280 {
1281     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1282     if (renderService == nullptr) {
1283         ROSEN_LOGE("RSRenderServiceClient::SetVirtualMirrorScreenCanvasRotation: renderService is nullptr");
1284         return false;
1285     }
1286     return renderService->SetVirtualMirrorScreenCanvasRotation(id, canvasRotation);
1287 }
1288 
SetVirtualScreenAutoRotation(ScreenId id,bool isAutoRotation)1289 int32_t RSRenderServiceClient::SetVirtualScreenAutoRotation(ScreenId id, bool isAutoRotation)
1290 {
1291     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1292     if (renderService == nullptr) {
1293         ROSEN_LOGE("RSRenderServiceClient::SetVirtualScreenAutoRotation: renderService is nullptr");
1294         return RENDER_SERVICE_NULL;
1295     }
1296     return renderService->SetVirtualScreenAutoRotation(id, isAutoRotation);
1297 }
1298 
SetVirtualMirrorScreenScaleMode(ScreenId id,ScreenScaleMode scaleMode)1299 bool RSRenderServiceClient::SetVirtualMirrorScreenScaleMode(ScreenId id, ScreenScaleMode scaleMode)
1300 {
1301     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1302     if (renderService == nullptr) {
1303         ROSEN_LOGE("RSRenderServiceClient::SetVirtualMirrorScreenScaleMode: renderService is nullptr");
1304         return false;
1305     }
1306     return renderService->SetVirtualMirrorScreenScaleMode(id, scaleMode);
1307 }
1308 
SetGlobalDarkColorMode(bool isDark)1309 bool RSRenderServiceClient::SetGlobalDarkColorMode(bool isDark)
1310 {
1311     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1312     if (renderService == nullptr) {
1313         ROSEN_LOGE("RSRenderServiceClient::SetGlobalDarkColorMode: renderService is nullptr");
1314         return false;
1315     }
1316     return renderService->SetGlobalDarkColorMode(isDark) == ERR_OK;
1317 }
1318 
GetScreenGamutMap(ScreenId id,ScreenGamutMap & mode)1319 int32_t RSRenderServiceClient::GetScreenGamutMap(ScreenId id, ScreenGamutMap& mode)
1320 {
1321     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1322     if (renderService == nullptr) {
1323         return RENDER_SERVICE_NULL;
1324     }
1325     return renderService->GetScreenGamutMap(id, mode);
1326 }
1327 
GetScreenHDRCapability(ScreenId id,RSScreenHDRCapability & screenHdrCapability)1328 int32_t RSRenderServiceClient::GetScreenHDRCapability(ScreenId id, RSScreenHDRCapability& screenHdrCapability)
1329 {
1330     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1331     if (renderService == nullptr) {
1332         ROSEN_LOGE("RSRenderServiceClient::GetScreenHDRCapability renderService == nullptr!");
1333         return RENDER_SERVICE_NULL;
1334     }
1335     return renderService->GetScreenHDRCapability(id, screenHdrCapability);
1336 }
1337 
GetPixelFormat(ScreenId id,GraphicPixelFormat & pixelFormat)1338 int32_t RSRenderServiceClient::GetPixelFormat(ScreenId id, GraphicPixelFormat& pixelFormat)
1339 {
1340     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1341     if (renderService == nullptr) {
1342         ROSEN_LOGE("RSRenderServiceClient::GetPixelFormat renderService == nullptr!");
1343         return RENDER_SERVICE_NULL;
1344     }
1345     int32_t resCode = SUCCESS;
1346     renderService->GetPixelFormat(id, pixelFormat, resCode);
1347     return resCode;
1348 }
1349 
SetPixelFormat(ScreenId id,GraphicPixelFormat pixelFormat)1350 int32_t RSRenderServiceClient::SetPixelFormat(ScreenId id, GraphicPixelFormat pixelFormat)
1351 {
1352     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1353     if (renderService == nullptr) {
1354         ROSEN_LOGE("RSRenderServiceClient::SetPixelFormat renderService == nullptr!");
1355         return RENDER_SERVICE_NULL;
1356     }
1357     int32_t resCode = SUCCESS;
1358     renderService->SetPixelFormat(id, pixelFormat, resCode);
1359     return resCode;
1360 }
1361 
GetScreenSupportedHDRFormats(ScreenId id,std::vector<ScreenHDRFormat> & hdrFormats)1362 int32_t RSRenderServiceClient::GetScreenSupportedHDRFormats(ScreenId id, std::vector<ScreenHDRFormat>& hdrFormats)
1363 {
1364     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1365     if (renderService == nullptr) {
1366         return RENDER_SERVICE_NULL;
1367     }
1368     int32_t resCode = SUCCESS;
1369     renderService->GetScreenSupportedHDRFormats(id, hdrFormats, resCode);
1370     return resCode;
1371 }
1372 
GetScreenHDRFormat(ScreenId id,ScreenHDRFormat & hdrFormat)1373 int32_t RSRenderServiceClient::GetScreenHDRFormat(ScreenId id, ScreenHDRFormat& hdrFormat)
1374 {
1375     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1376     if (renderService == nullptr) {
1377         return RENDER_SERVICE_NULL;
1378     }
1379     int32_t resCode = SUCCESS;
1380     renderService->GetScreenHDRFormat(id, hdrFormat, resCode);
1381     return resCode;
1382 }
1383 
SetScreenHDRFormat(ScreenId id,int32_t modeIdx)1384 int32_t RSRenderServiceClient::SetScreenHDRFormat(ScreenId id, int32_t modeIdx)
1385 {
1386     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1387     if (renderService == nullptr) {
1388         return RENDER_SERVICE_NULL;
1389     }
1390     int32_t resCode = SUCCESS;
1391     renderService->SetScreenHDRFormat(id, modeIdx, resCode);
1392     return resCode;
1393 }
1394 
GetScreenHDRStatus(ScreenId id,HdrStatus & hdrStatus)1395 int32_t RSRenderServiceClient::GetScreenHDRStatus(ScreenId id, HdrStatus& hdrStatus)
1396 {
1397     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1398     if (renderService == nullptr) {
1399         return RENDER_SERVICE_NULL;
1400     }
1401     int32_t resCode = SUCCESS;
1402     auto err = renderService->GetScreenHDRStatus(id, hdrStatus, resCode);
1403     if (err != ERR_OK) {
1404         ROSEN_LOGE("RSRenderServiceClient::GetScreenHDRStatus err(%{public}d)!", err);
1405         resCode = err;
1406     }
1407     return resCode;
1408 }
1409 
GetScreenSupportedColorSpaces(ScreenId id,std::vector<GraphicCM_ColorSpaceType> & colorSpaces)1410 int32_t RSRenderServiceClient::GetScreenSupportedColorSpaces(
1411     ScreenId id, std::vector<GraphicCM_ColorSpaceType>& colorSpaces)
1412 {
1413     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1414     if (renderService == nullptr) {
1415         return RENDER_SERVICE_NULL;
1416     }
1417     int32_t resCode = SUCCESS;
1418     renderService->GetScreenSupportedColorSpaces(id, colorSpaces, resCode);
1419     return resCode;
1420 }
1421 
GetScreenColorSpace(ScreenId id,GraphicCM_ColorSpaceType & colorSpace)1422 int32_t RSRenderServiceClient::GetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType& colorSpace)
1423 {
1424     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1425     if (renderService == nullptr) {
1426         return RENDER_SERVICE_NULL;
1427     }
1428     int32_t resCode = SUCCESS;
1429     renderService->GetScreenColorSpace(id, colorSpace, resCode);
1430     return resCode;
1431 }
1432 
SetScreenColorSpace(ScreenId id,GraphicCM_ColorSpaceType colorSpace)1433 int32_t RSRenderServiceClient::SetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType colorSpace)
1434 {
1435     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1436     if (renderService == nullptr) {
1437         return RENDER_SERVICE_NULL;
1438     }
1439     int32_t resCode = SUCCESS;
1440     renderService->SetScreenColorSpace(id, colorSpace, resCode);
1441     return resCode;
1442 }
1443 
GetScreenType(ScreenId id,RSScreenType & screenType)1444 int32_t RSRenderServiceClient::GetScreenType(ScreenId id, RSScreenType& screenType)
1445 {
1446     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1447     if (renderService == nullptr) {
1448         ROSEN_LOGE("RSRenderServiceClient::GetScreenType renderService == nullptr!");
1449         return RENDER_SERVICE_NULL;
1450     }
1451     return renderService->GetScreenType(id, screenType);
1452 }
1453 
GetBitmap(NodeId id,Drawing::Bitmap & bitmap)1454 bool RSRenderServiceClient::GetBitmap(NodeId id, Drawing::Bitmap& bitmap)
1455 {
1456     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1457     if (renderService == nullptr) {
1458         ROSEN_LOGE("RSRenderServiceClient::GetBitmap renderService == nullptr!");
1459         return false;
1460     }
1461     bool success;
1462     renderService->GetBitmap(id, bitmap, success);
1463     return success;
1464 }
1465 
GetPixelmap(NodeId id,std::shared_ptr<Media::PixelMap> pixelmap,const Drawing::Rect * rect,std::shared_ptr<Drawing::DrawCmdList> drawCmdList)1466 bool RSRenderServiceClient::GetPixelmap(NodeId id, std::shared_ptr<Media::PixelMap> pixelmap,
1467     const Drawing::Rect* rect, std::shared_ptr<Drawing::DrawCmdList> drawCmdList)
1468 {
1469     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1470     if (renderService == nullptr) {
1471         ROSEN_LOGE("RSRenderServiceClient::GetPixelmap: renderService is nullptr");
1472         return false;
1473     }
1474     bool success;
1475     renderService->GetPixelmap(id, pixelmap, rect, drawCmdList, success);
1476     return success;
1477 }
1478 
RegisterTypeface(std::shared_ptr<Drawing::Typeface> & typeface)1479 bool RSRenderServiceClient::RegisterTypeface(std::shared_ptr<Drawing::Typeface>& typeface)
1480 {
1481     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1482     if (renderService == nullptr) {
1483         ROSEN_LOGE("RSRenderServiceClient::RegisterTypeface: renderService is nullptr");
1484         return false;
1485     }
1486     uint64_t globalUniqueId = RSTypefaceCache::GenGlobalUniqueId(typeface->GetUniqueID());
1487     ROSEN_LOGD("RSRenderServiceClient::RegisterTypeface: pid[%{public}d] register typface[%{public}u]",
1488         RSTypefaceCache::GetTypefacePid(globalUniqueId), RSTypefaceCache::GetTypefaceId(globalUniqueId));
1489     // timer: 3s
1490     OHOS::Rosen::RSXCollie registerTypefaceXCollie("registerTypefaceXCollie_" + typeface->GetFamilyName(), 3);
1491     return renderService->RegisterTypeface(globalUniqueId, typeface);
1492 }
1493 
UnRegisterTypeface(std::shared_ptr<Drawing::Typeface> & typeface)1494 bool RSRenderServiceClient::UnRegisterTypeface(std::shared_ptr<Drawing::Typeface>& typeface)
1495 {
1496     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1497     if (renderService == nullptr) {
1498         ROSEN_LOGE("RSRenderServiceClient::UnRegisterTypeface: renderService is nullptr");
1499         return false;
1500     }
1501     uint64_t globalUniqueId = RSTypefaceCache::GenGlobalUniqueId(typeface->GetUniqueID());
1502     ROSEN_LOGD("RSRenderServiceClient::UnRegisterTypeface: pid[%{public}d] unregister typface[%{public}u]",
1503         RSTypefaceCache::GetTypefacePid(globalUniqueId), RSTypefaceCache::GetTypefaceId(globalUniqueId));
1504     return renderService->UnRegisterTypeface(globalUniqueId);
1505 }
1506 
GetDisplayIdentificationData(ScreenId id,uint8_t & outPort,std::vector<uint8_t> & edidData)1507 int32_t RSRenderServiceClient::GetDisplayIdentificationData(ScreenId id, uint8_t& outPort,
1508     std::vector<uint8_t>& edidData)
1509 {
1510     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1511     if (renderService == nullptr) {
1512         return RENDER_SERVICE_NULL;
1513     }
1514     return renderService->GetDisplayIdentificationData(id, outPort, edidData);
1515 }
1516 
SetScreenSkipFrameInterval(ScreenId id,uint32_t skipFrameInterval)1517 int32_t RSRenderServiceClient::SetScreenSkipFrameInterval(ScreenId id, uint32_t skipFrameInterval)
1518 {
1519     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1520     if (renderService == nullptr) {
1521         return RENDER_SERVICE_NULL;
1522     }
1523     int32_t statusCode = SUCCESS;
1524     renderService->SetScreenSkipFrameInterval(id, skipFrameInterval, statusCode);
1525     return statusCode;
1526 }
1527 
SetVirtualScreenRefreshRate(ScreenId id,uint32_t maxRefreshRate,uint32_t & actualRefreshRate)1528 int32_t RSRenderServiceClient::SetVirtualScreenRefreshRate(
1529     ScreenId id, uint32_t maxRefreshRate, uint32_t& actualRefreshRate)
1530 {
1531     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1532     int32_t resCode = RENDER_SERVICE_NULL;
1533     if (renderService == nullptr) {
1534         return RENDER_SERVICE_NULL;
1535     }
1536     renderService->SetVirtualScreenRefreshRate(id, maxRefreshRate, actualRefreshRate, resCode);
1537     return resCode;
1538 }
1539 
SetScreenActiveRect(ScreenId id,const Rect & activeRect)1540 uint32_t RSRenderServiceClient::SetScreenActiveRect(ScreenId id, const Rect& activeRect)
1541 {
1542     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1543     if (renderService == nullptr) {
1544         return RENDER_SERVICE_NULL;
1545     }
1546     uint32_t repCode;
1547     return renderService->SetScreenActiveRect(id, activeRect, repCode);
1548     return repCode;
1549 }
1550 
SetScreenOffset(ScreenId id,int32_t offSetX,int32_t offSetY)1551 void RSRenderServiceClient::SetScreenOffset(ScreenId id, int32_t offSetX, int32_t offSetY)
1552 {
1553     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1554     if (renderService == nullptr) {
1555         return;
1556     }
1557     renderService->SetScreenOffset(id, offSetX, offSetY);
1558 }
1559 
SetScreenFrameGravity(ScreenId id,int32_t gravity)1560 void RSRenderServiceClient::SetScreenFrameGravity(ScreenId id, int32_t gravity)
1561 {
1562     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1563     if (renderService == nullptr) {
1564         return;
1565     }
1566     renderService->SetScreenFrameGravity(id, gravity);
1567 }
1568 
1569 class CustomOcclusionChangeCallback : public RSOcclusionChangeCallbackStub
1570 {
1571 public:
CustomOcclusionChangeCallback(const OcclusionChangeCallback & callback)1572     explicit CustomOcclusionChangeCallback(const OcclusionChangeCallback &callback) : cb_(callback) {}
~CustomOcclusionChangeCallback()1573     ~CustomOcclusionChangeCallback() override {};
1574 
OnOcclusionVisibleChanged(std::shared_ptr<RSOcclusionData> occlusionData)1575     void OnOcclusionVisibleChanged(std::shared_ptr<RSOcclusionData> occlusionData) override
1576     {
1577         if (cb_ != nullptr) {
1578             cb_(occlusionData);
1579         }
1580     }
1581 
1582 private:
1583     OcclusionChangeCallback cb_;
1584 };
1585 
RegisterOcclusionChangeCallback(const OcclusionChangeCallback & callback)1586 int32_t RSRenderServiceClient::RegisterOcclusionChangeCallback(const OcclusionChangeCallback& callback)
1587 {
1588     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1589     if (renderService == nullptr) {
1590         ROSEN_LOGE("RSRenderServiceClient::RegisterOcclusionChangeCallback renderService == nullptr!");
1591         return RENDER_SERVICE_NULL;
1592     }
1593     sptr<CustomOcclusionChangeCallback> cb = new CustomOcclusionChangeCallback(callback);
1594     int32_t repCode;
1595     renderService->RegisterOcclusionChangeCallback(cb, repCode);
1596     return repCode;
1597 }
1598 
1599 class CustomSurfaceOcclusionChangeCallback : public RSSurfaceOcclusionChangeCallbackStub
1600 {
1601 public:
CustomSurfaceOcclusionChangeCallback(const SurfaceOcclusionChangeCallback & callback)1602     explicit CustomSurfaceOcclusionChangeCallback(const SurfaceOcclusionChangeCallback &callback) : cb_(callback) {}
~CustomSurfaceOcclusionChangeCallback()1603     ~CustomSurfaceOcclusionChangeCallback() override {};
1604 
OnSurfaceOcclusionVisibleChanged(float visibleAreaRatio)1605     void OnSurfaceOcclusionVisibleChanged(float visibleAreaRatio) override
1606     {
1607         if (cb_ != nullptr) {
1608             cb_(visibleAreaRatio);
1609         }
1610     }
1611 
1612 private:
1613     SurfaceOcclusionChangeCallback cb_;
1614 };
1615 
RegisterSurfaceOcclusionChangeCallback(NodeId id,const SurfaceOcclusionChangeCallback & callback,std::vector<float> & partitionPoints)1616 int32_t RSRenderServiceClient::RegisterSurfaceOcclusionChangeCallback(
1617     NodeId id, const SurfaceOcclusionChangeCallback& callback, std::vector<float>& partitionPoints)
1618 {
1619     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1620     if (renderService == nullptr) {
1621         ROSEN_LOGE("RSRenderServiceClient::RegisterSurfaceOcclusionChangeCallback renderService == nullptr!");
1622         return RENDER_SERVICE_NULL;
1623     }
1624     sptr<CustomSurfaceOcclusionChangeCallback> cb = new CustomSurfaceOcclusionChangeCallback(callback);
1625     return renderService->RegisterSurfaceOcclusionChangeCallback(id, cb, partitionPoints);
1626 }
1627 
UnRegisterSurfaceOcclusionChangeCallback(NodeId id)1628 int32_t RSRenderServiceClient::UnRegisterSurfaceOcclusionChangeCallback(NodeId id)
1629 {
1630     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1631     if (renderService == nullptr) {
1632         ROSEN_LOGE("RSRenderServiceClient::UnRegisterSurfaceOcclusionChangeCallback renderService == nullptr!");
1633         return RENDER_SERVICE_NULL;
1634     }
1635     return renderService->UnRegisterSurfaceOcclusionChangeCallback(id);
1636 }
1637 
1638 class CustomHgmConfigChangeCallback : public RSHgmConfigChangeCallbackStub
1639 {
1640 public:
CustomHgmConfigChangeCallback(const HgmConfigChangeCallback & callback)1641     explicit CustomHgmConfigChangeCallback(const HgmConfigChangeCallback& callback) : cb_(callback) {}
~CustomHgmConfigChangeCallback()1642     ~CustomHgmConfigChangeCallback() override {};
1643 
OnHgmConfigChanged(std::shared_ptr<RSHgmConfigData> configData)1644     void OnHgmConfigChanged(std::shared_ptr<RSHgmConfigData> configData) override
1645     {
1646         if (cb_ != nullptr) {
1647             cb_(configData);
1648         }
1649     }
1650 
OnHgmRefreshRateModeChanged(int32_t refreshRateMode)1651     void OnHgmRefreshRateModeChanged(int32_t refreshRateMode) override
1652     {
1653     }
1654 
OnHgmRefreshRateUpdate(int32_t refreshRate)1655     void OnHgmRefreshRateUpdate(int32_t refreshRate) override
1656     {
1657     }
1658 private:
1659     HgmConfigChangeCallback cb_;
1660 };
1661 
RegisterHgmConfigChangeCallback(const HgmConfigChangeCallback & callback)1662 int32_t RSRenderServiceClient::RegisterHgmConfigChangeCallback(const HgmConfigChangeCallback& callback)
1663 {
1664     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1665     if (renderService == nullptr) {
1666         ROSEN_LOGE("RSRenderServiceClient::RegisterHgmConfigChangeCallback renderService == nullptr!");
1667         return RENDER_SERVICE_NULL;
1668     }
1669     sptr<CustomHgmConfigChangeCallback> cb = new CustomHgmConfigChangeCallback(callback);
1670     return renderService->RegisterHgmConfigChangeCallback(cb);
1671 }
1672 
1673 class CustomHgmRefreshRateModeChangeCallback : public RSHgmConfigChangeCallbackStub
1674 {
1675 public:
CustomHgmRefreshRateModeChangeCallback(const HgmRefreshRateModeChangeCallback & callback)1676     explicit CustomHgmRefreshRateModeChangeCallback(const HgmRefreshRateModeChangeCallback& callback) : cb_(callback) {}
~CustomHgmRefreshRateModeChangeCallback()1677     ~CustomHgmRefreshRateModeChangeCallback() override {};
1678 
OnHgmRefreshRateModeChanged(int32_t refreshRateMode)1679     void OnHgmRefreshRateModeChanged(int32_t refreshRateMode) override
1680     {
1681         if (cb_ != nullptr) {
1682             cb_(refreshRateMode);
1683         }
1684     }
1685 
OnHgmConfigChanged(std::shared_ptr<RSHgmConfigData> configData)1686     void OnHgmConfigChanged(std::shared_ptr<RSHgmConfigData> configData) override
1687     {
1688     }
1689 
OnHgmRefreshRateUpdate(int32_t refreshRate)1690     void OnHgmRefreshRateUpdate(int32_t refreshRate) override
1691     {
1692     }
1693 private:
1694     HgmRefreshRateModeChangeCallback cb_;
1695 };
1696 
RegisterHgmRefreshRateModeChangeCallback(const HgmRefreshRateModeChangeCallback & callback)1697 int32_t RSRenderServiceClient::RegisterHgmRefreshRateModeChangeCallback(
1698     const HgmRefreshRateModeChangeCallback& callback)
1699 {
1700     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1701     if (renderService == nullptr) {
1702         ROSEN_LOGE("RSRenderServiceClient::RegisterHgmRefreshRateModeChangeCallback renderService == nullptr!");
1703         return RENDER_SERVICE_NULL;
1704     }
1705     sptr<CustomHgmRefreshRateModeChangeCallback> cb = new CustomHgmRefreshRateModeChangeCallback(callback);
1706     return renderService->RegisterHgmRefreshRateModeChangeCallback(cb);
1707 }
1708 
1709 class CustomHgmRefreshRateUpdateCallback : public RSHgmConfigChangeCallbackStub
1710 {
1711 public:
CustomHgmRefreshRateUpdateCallback(const HgmRefreshRateModeChangeCallback & callback)1712     explicit CustomHgmRefreshRateUpdateCallback(const HgmRefreshRateModeChangeCallback& callback) : cb_(callback) {}
~CustomHgmRefreshRateUpdateCallback()1713     ~CustomHgmRefreshRateUpdateCallback() override {};
1714 
OnHgmRefreshRateModeChanged(int32_t refreshRateMode)1715     void OnHgmRefreshRateModeChanged(int32_t refreshRateMode) override
1716     {
1717     }
1718 
OnHgmConfigChanged(std::shared_ptr<RSHgmConfigData> configData)1719     void OnHgmConfigChanged(std::shared_ptr<RSHgmConfigData> configData) override
1720     {
1721     }
1722 
OnHgmRefreshRateUpdate(int32_t refreshRate)1723     void OnHgmRefreshRateUpdate(int32_t refreshRate) override
1724     {
1725         ROSEN_LOGD("CustomHgmRefreshRateUpdateCallback::OnHgmRefreshRateUpdate called");
1726         if (cb_ != nullptr) {
1727             cb_(refreshRate);
1728         }
1729     }
1730 
1731 private:
1732     HgmRefreshRateUpdateCallback cb_;
1733 };
1734 
RegisterHgmRefreshRateUpdateCallback(const HgmRefreshRateUpdateCallback & callback)1735 int32_t RSRenderServiceClient::RegisterHgmRefreshRateUpdateCallback(
1736     const HgmRefreshRateUpdateCallback& callback)
1737 {
1738     sptr<CustomHgmRefreshRateUpdateCallback> cb = nullptr;
1739     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1740     if (renderService == nullptr) {
1741         ROSEN_LOGE("RSRenderServiceClient::RegisterHgmRefreshRateUpdateCallback renderService == nullptr!");
1742         return RENDER_SERVICE_NULL;
1743     }
1744 
1745     if (callback) {
1746         cb = new CustomHgmRefreshRateUpdateCallback(callback);
1747     }
1748 
1749     ROSEN_LOGD("RSRenderServiceClient::RegisterHgmRefreshRateUpdateCallback called");
1750     return renderService->RegisterHgmRefreshRateUpdateCallback(cb);
1751 }
1752 
1753 class CustomFirstFrameCommitCallback : public RSFirstFrameCommitCallbackStub
1754 {
1755 public:
CustomFirstFrameCommitCallback(const FirstFrameCommitCallback & callback)1756     explicit CustomFirstFrameCommitCallback(const FirstFrameCommitCallback& callback) : cb_(callback) {}
~CustomFirstFrameCommitCallback()1757     ~CustomFirstFrameCommitCallback() override {};
1758 
OnFirstFrameCommit(uint64_t screenId,int64_t timestamp)1759     void OnFirstFrameCommit(uint64_t screenId, int64_t timestamp) override
1760     {
1761         ROSEN_LOGD("CustomFirstFrameCommitCallback::OnFirstFrameCommit called");
1762         if (cb_ != nullptr) {
1763             cb_(screenId, timestamp);
1764         }
1765     }
1766 
1767 private:
1768     FirstFrameCommitCallback cb_;
1769 };
1770 
RegisterFirstFrameCommitCallback(const FirstFrameCommitCallback & callback)1771 int32_t RSRenderServiceClient::RegisterFirstFrameCommitCallback(
1772     const FirstFrameCommitCallback& callback)
1773 {
1774     sptr<CustomFirstFrameCommitCallback> cb = nullptr;
1775     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1776     if (renderService == nullptr) {
1777         ROSEN_LOGE("RSRenderServiceClient::RegisterFirstFrameCommitCallback renderService == nullptr!");
1778         return RENDER_SERVICE_NULL;
1779     }
1780 
1781     if (callback) {
1782         cb = new CustomFirstFrameCommitCallback(callback);
1783     }
1784 
1785     ROSEN_LOGD("RSRenderServiceClient::RegisterFirstFrameCommitCallback called");
1786     return renderService->RegisterFirstFrameCommitCallback(cb);
1787 }
1788 
1789 class CustomFrameRateLinkerExpectedFpsUpdateCallback : public RSFrameRateLinkerExpectedFpsUpdateCallbackStub
1790 {
1791 public:
CustomFrameRateLinkerExpectedFpsUpdateCallback(const FrameRateLinkerExpectedFpsUpdateCallback & callback)1792     explicit CustomFrameRateLinkerExpectedFpsUpdateCallback(
1793         const FrameRateLinkerExpectedFpsUpdateCallback& callback) : cb_(callback) {}
~CustomFrameRateLinkerExpectedFpsUpdateCallback()1794     ~CustomFrameRateLinkerExpectedFpsUpdateCallback() override {};
1795 
OnFrameRateLinkerExpectedFpsUpdate(pid_t dstPid,const std::string & xcomponentId,int32_t expectedFps)1796     void OnFrameRateLinkerExpectedFpsUpdate(pid_t dstPid, const std::string& xcomponentId, int32_t expectedFps) override
1797     {
1798         ROSEN_LOGD("CustomFrameRateLinkerExpectedFpsUpdateCallback::OnFrameRateLinkerExpectedFpsUpdate called,"
1799             " pid=%{public}d, fps=%{public}d", dstPid, expectedFps);
1800         if (cb_ != nullptr) {
1801             cb_(dstPid, xcomponentId, expectedFps);
1802         }
1803     }
1804 
1805 private:
1806     FrameRateLinkerExpectedFpsUpdateCallback cb_;
1807 };
1808 
RegisterFrameRateLinkerExpectedFpsUpdateCallback(int32_t dstPid,const FrameRateLinkerExpectedFpsUpdateCallback & callback)1809 int32_t RSRenderServiceClient::RegisterFrameRateLinkerExpectedFpsUpdateCallback(
1810     int32_t dstPid, const FrameRateLinkerExpectedFpsUpdateCallback& callback)
1811 {
1812     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1813     if (renderService == nullptr) {
1814         ROSEN_LOGE("RSRenderServiceClient::RegisterFrameRateLinkerExpectedFpsUpdateCallback renderService == nullptr");
1815         return RENDER_SERVICE_NULL;
1816     }
1817 
1818     sptr<CustomFrameRateLinkerExpectedFpsUpdateCallback> cb = nullptr;
1819     if (callback) {
1820         cb = new CustomFrameRateLinkerExpectedFpsUpdateCallback(callback);
1821     }
1822 
1823     ROSEN_LOGD("RSRenderServiceClient::RegisterFrameRateLinkerExpectedFpsUpdateCallback called");
1824     return renderService->RegisterFrameRateLinkerExpectedFpsUpdateCallback(dstPid, cb);
1825 }
1826 
SetAppWindowNum(uint32_t num)1827 void RSRenderServiceClient::SetAppWindowNum(uint32_t num)
1828 {
1829     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1830     if (renderService != nullptr) {
1831         renderService->SetAppWindowNum(num);
1832     }
1833 }
1834 
SetSystemAnimatedScenes(SystemAnimatedScenes systemAnimatedScenes,bool isRegularAnimation)1835 bool RSRenderServiceClient::SetSystemAnimatedScenes(SystemAnimatedScenes systemAnimatedScenes, bool isRegularAnimation)
1836 {
1837     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1838     if (renderService == nullptr) {
1839         ROSEN_LOGE("RSRenderServiceClient::SetSystemAnimatedScenes renderService == nullptr!");
1840         return false;
1841     }
1842     bool success;
1843     renderService->SetSystemAnimatedScenes(systemAnimatedScenes, isRegularAnimation, success);
1844     return success;
1845 }
1846 
ShowWatermark(const std::shared_ptr<Media::PixelMap> & watermarkImg,bool isShow)1847 void RSRenderServiceClient::ShowWatermark(const std::shared_ptr<Media::PixelMap> &watermarkImg, bool isShow)
1848 {
1849     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1850     if (renderService != nullptr) {
1851         renderService->ShowWatermark(watermarkImg, isShow);
1852     }
1853 }
1854 
ResizeVirtualScreen(ScreenId id,uint32_t width,uint32_t height)1855 int32_t RSRenderServiceClient::ResizeVirtualScreen(ScreenId id, uint32_t width, uint32_t height)
1856 {
1857     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1858     if (renderService == nullptr) {
1859         ROSEN_LOGE("RSRenderServiceClient::ResizeVirtualScreen renderService == nullptr!");
1860         return RENDER_SERVICE_NULL;
1861     }
1862 
1863     ROSEN_LOGI("RSRenderServiceClient::ResizeVirtualScreen, width:%{public}u, height:%{public}u", width, height);
1864     return renderService->ResizeVirtualScreen(id, width, height);
1865 }
1866 
ReportJankStats()1867 void RSRenderServiceClient::ReportJankStats()
1868 {
1869     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1870     if (renderService != nullptr) {
1871         renderService->ReportJankStats();
1872     }
1873 }
1874 
ReportEventResponse(DataBaseRs info)1875 void RSRenderServiceClient::ReportEventResponse(DataBaseRs info)
1876 {
1877     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1878     if (renderService != nullptr) {
1879         renderService->ReportEventResponse(info);
1880     }
1881 }
1882 
ReportEventComplete(DataBaseRs info)1883 void RSRenderServiceClient::ReportEventComplete(DataBaseRs info)
1884 {
1885     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1886     if (renderService != nullptr) {
1887         renderService->ReportEventComplete(info);
1888     }
1889 }
1890 
ReportEventJankFrame(DataBaseRs info)1891 void RSRenderServiceClient::ReportEventJankFrame(DataBaseRs info)
1892 {
1893     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1894     if (renderService != nullptr) {
1895         renderService->ReportEventJankFrame(info);
1896     }
1897 }
1898 
ReportRsSceneJankStart(AppInfo info)1899 void RSRenderServiceClient::ReportRsSceneJankStart(AppInfo info)
1900 {
1901     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1902     if (renderService != nullptr) {
1903         renderService->ReportRsSceneJankStart(info);
1904     }
1905 }
1906 
ReportRsSceneJankEnd(AppInfo info)1907 void RSRenderServiceClient::ReportRsSceneJankEnd(AppInfo info)
1908 {
1909     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1910     if (renderService != nullptr) {
1911         renderService->ReportRsSceneJankEnd(info);
1912     }
1913 }
1914 
ReportGameStateData(GameStateData info)1915 void RSRenderServiceClient::ReportGameStateData(GameStateData info)
1916 {
1917     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1918     if (renderService != nullptr) {
1919         renderService->ReportGameStateData(info);
1920     }
1921 }
1922 
SetHardwareEnabled(NodeId id,bool isEnabled,SelfDrawingNodeType selfDrawingType,bool dynamicHardwareEnable)1923 void RSRenderServiceClient::SetHardwareEnabled(NodeId id, bool isEnabled, SelfDrawingNodeType selfDrawingType,
1924     bool dynamicHardwareEnable)
1925 {
1926     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1927     if (renderService != nullptr) {
1928         renderService->SetHardwareEnabled(id, isEnabled, selfDrawingType, dynamicHardwareEnable);
1929     }
1930 }
1931 
SetHidePrivacyContent(NodeId id,bool needHidePrivacyContent)1932 uint32_t RSRenderServiceClient::SetHidePrivacyContent(NodeId id, bool needHidePrivacyContent)
1933 {
1934     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1935     if (renderService != nullptr) {
1936         uint32_t resCode;
1937         renderService->SetHidePrivacyContent(id, needHidePrivacyContent, resCode);
1938         return resCode;
1939     }
1940     return static_cast<uint32_t>(RSInterfaceErrorCode::UNKNOWN_ERROR);
1941 }
1942 
NotifyLightFactorStatus(int32_t lightFactorStatus)1943 void RSRenderServiceClient::NotifyLightFactorStatus(int32_t lightFactorStatus)
1944 {
1945     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1946     if (renderService != nullptr) {
1947         renderService->NotifyLightFactorStatus(lightFactorStatus);
1948     }
1949 }
1950 
NotifyPackageEvent(uint32_t listSize,const std::vector<std::string> & packageList)1951 void RSRenderServiceClient::NotifyPackageEvent(uint32_t listSize, const std::vector<std::string>& packageList)
1952 {
1953     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1954     if (renderService != nullptr) {
1955         renderService->NotifyPackageEvent(listSize, packageList);
1956     }
1957 }
1958 
NotifyAppStrategyConfigChangeEvent(const std::string & pkgName,uint32_t listSize,const std::vector<std::pair<std::string,std::string>> & newConfig)1959 void RSRenderServiceClient::NotifyAppStrategyConfigChangeEvent(const std::string& pkgName, uint32_t listSize,
1960     const std::vector<std::pair<std::string, std::string>>& newConfig)
1961 {
1962     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1963     if (renderService != nullptr) {
1964         renderService->NotifyAppStrategyConfigChangeEvent(pkgName, listSize, newConfig);
1965     }
1966 }
1967 
NotifyRefreshRateEvent(const EventInfo & eventInfo)1968 void RSRenderServiceClient::NotifyRefreshRateEvent(const EventInfo& eventInfo)
1969 {
1970     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1971     if (renderService != nullptr) {
1972         renderService->NotifyRefreshRateEvent(eventInfo);
1973     }
1974 }
1975 
SetWindowExpectedRefreshRate(const std::unordered_map<uint64_t,EventInfo> & eventInfos)1976 void RSRenderServiceClient::SetWindowExpectedRefreshRate(const std::unordered_map<uint64_t, EventInfo>& eventInfos)
1977 {
1978     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1979     if (renderService != nullptr) {
1980         renderService->SetWindowExpectedRefreshRate(eventInfos);
1981     }
1982 }
1983 
SetWindowExpectedRefreshRate(const std::unordered_map<std::string,EventInfo> & eventInfos)1984 void RSRenderServiceClient::SetWindowExpectedRefreshRate(const std::unordered_map<std::string, EventInfo>& eventInfos)
1985 {
1986     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1987     if (renderService != nullptr) {
1988         renderService->SetWindowExpectedRefreshRate(eventInfos);
1989     }
1990 }
1991 
NotifySoftVsyncRateDiscountEvent(uint32_t pid,const std::string & name,uint32_t rateDiscount)1992 bool RSRenderServiceClient::NotifySoftVsyncRateDiscountEvent(uint32_t pid,
1993     const std::string &name, uint32_t rateDiscount)
1994 {
1995     auto renderService = RSRenderServiceConnectHub::GetRenderService();
1996     if (renderService != nullptr) {
1997         return renderService->NotifySoftVsyncRateDiscountEvent(pid, name, rateDiscount);
1998     }
1999     return false;
2000 }
2001 
NotifyHgmConfigEvent(const std::string & eventName,bool state)2002 void RSRenderServiceClient::NotifyHgmConfigEvent(const std::string &eventName, bool state)
2003 {
2004     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2005     if (renderService != nullptr) {
2006         renderService->NotifyHgmConfigEvent(eventName, state);
2007     }
2008 }
2009 
NotifyXComponentExpectedFrameRate(const std::string & id,int32_t expectedFrameRate)2010 void RSRenderServiceClient::NotifyXComponentExpectedFrameRate(const std::string& id, int32_t expectedFrameRate)
2011 {
2012     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2013     if (renderService != nullptr) {
2014         renderService->NotifyXComponentExpectedFrameRate(id, expectedFrameRate);
2015     }
2016 }
2017 
NotifyTouchEvent(int32_t touchStatus,int32_t touchCnt)2018 void RSRenderServiceClient::NotifyTouchEvent(int32_t touchStatus, int32_t touchCnt)
2019 {
2020     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2021     if (renderService != nullptr) {
2022         renderService->NotifyTouchEvent(touchStatus, touchCnt);
2023     }
2024 }
2025 
NotifyDynamicModeEvent(bool enableDynamicMode)2026 void RSRenderServiceClient::NotifyDynamicModeEvent(bool enableDynamicMode)
2027 {
2028     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2029     if (renderService != nullptr) {
2030         renderService->NotifyDynamicModeEvent(enableDynamicMode);
2031     }
2032 }
2033 
SetCacheEnabledForRotation(bool isEnabled)2034 void RSRenderServiceClient::SetCacheEnabledForRotation(bool isEnabled)
2035 {
2036     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2037     if (renderService != nullptr) {
2038         renderService->SetCacheEnabledForRotation(isEnabled);
2039     }
2040 }
2041 
SetOnRemoteDiedCallback(const OnRemoteDiedCallback & callback)2042 void RSRenderServiceClient::SetOnRemoteDiedCallback(const OnRemoteDiedCallback& callback)
2043 {
2044     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2045     if (renderService != nullptr) {
2046         renderService->SetOnRemoteDiedCallback(callback);
2047     }
2048 }
2049 
GetActiveDirtyRegionInfo()2050 std::vector<ActiveDirtyRegionInfo> RSRenderServiceClient::GetActiveDirtyRegionInfo()
2051 {
2052     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2053     if (renderService == nullptr) {
2054         return {};
2055     }
2056     return renderService->GetActiveDirtyRegionInfo();
2057 }
2058 
GetGlobalDirtyRegionInfo()2059 GlobalDirtyRegionInfo RSRenderServiceClient::GetGlobalDirtyRegionInfo()
2060 {
2061     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2062     if (renderService == nullptr) {
2063         return GlobalDirtyRegionInfo {};
2064     }
2065     return renderService->GetGlobalDirtyRegionInfo();
2066 }
2067 
GetLayerComposeInfo()2068 LayerComposeInfo RSRenderServiceClient::GetLayerComposeInfo()
2069 {
2070     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2071     if (renderService == nullptr) {
2072         return LayerComposeInfo {};
2073     }
2074     return renderService->GetLayerComposeInfo();
2075 }
2076 
GetHwcDisabledReasonInfo()2077 HwcDisabledReasonInfos RSRenderServiceClient::GetHwcDisabledReasonInfo()
2078 {
2079     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2080     if (renderService == nullptr) {
2081         return {};
2082     }
2083     return renderService->GetHwcDisabledReasonInfo();
2084 }
2085 
GetHdrOnDuration()2086 int64_t RSRenderServiceClient::GetHdrOnDuration()
2087 {
2088     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2089     if (renderService == nullptr) {
2090         return 0;
2091     }
2092     int64_t hdrOnDuration = 0;
2093     auto ret = renderService->GetHdrOnDuration(hdrOnDuration);
2094     if (ret != ERR_OK) {
2095         ROSEN_LOGE("Failed to get HdrOnDuration, ret=%{public}d", ret);
2096     }
2097     return hdrOnDuration;
2098 }
2099 
SetVmaCacheStatus(bool flag)2100 void RSRenderServiceClient::SetVmaCacheStatus(bool flag)
2101 {
2102     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2103     if (renderService == nullptr) {
2104         return;
2105     }
2106     renderService->SetVmaCacheStatus(flag);
2107 }
2108 
2109 #ifdef TP_FEATURE_ENABLE
SetTpFeatureConfig(int32_t feature,const char * config,TpFeatureConfigType tpFeatureConfigType)2110 void RSRenderServiceClient::SetTpFeatureConfig(int32_t feature, const char* config,
2111     TpFeatureConfigType tpFeatureConfigType)
2112 {
2113     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2114     if (renderService == nullptr) {
2115         return;
2116     }
2117     renderService->SetTpFeatureConfig(feature, config, tpFeatureConfigType);
2118 }
2119 #endif
2120 
SetVirtualScreenUsingStatus(bool isVirtualScreenUsingStatus)2121 void RSRenderServiceClient::SetVirtualScreenUsingStatus(bool isVirtualScreenUsingStatus)
2122 {
2123     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2124     if (renderService != nullptr) {
2125         renderService->SetVirtualScreenUsingStatus(isVirtualScreenUsingStatus);
2126     }
2127 }
2128 
SetCurtainScreenUsingStatus(bool isCurtainScreenOn)2129 void RSRenderServiceClient::SetCurtainScreenUsingStatus(bool isCurtainScreenOn)
2130 {
2131     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2132     if (renderService != nullptr) {
2133         renderService->SetCurtainScreenUsingStatus(isCurtainScreenOn);
2134     }
2135 }
2136 
DropFrameByPid(const std::vector<int32_t> pidList)2137 void RSRenderServiceClient::DropFrameByPid(const std::vector<int32_t> pidList)
2138 {
2139     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2140     if (renderService != nullptr) {
2141         renderService->DropFrameByPid(pidList);
2142     }
2143 }
2144 
2145 class CustomUIExtensionCallback : public RSUIExtensionCallbackStub
2146 {
2147 public:
CustomUIExtensionCallback(const UIExtensionCallback & callback)2148     explicit CustomUIExtensionCallback(const UIExtensionCallback &callback) : cb_(callback) {}
~CustomUIExtensionCallback()2149     ~CustomUIExtensionCallback() override {};
2150 
OnUIExtension(std::shared_ptr<RSUIExtensionData> uiExtensionData,uint64_t userId)2151     void OnUIExtension(std::shared_ptr<RSUIExtensionData> uiExtensionData, uint64_t userId) override
2152     {
2153         if (cb_ != nullptr) {
2154             cb_(uiExtensionData, userId);
2155         }
2156     }
2157 
2158 private:
2159     UIExtensionCallback cb_;
2160 };
2161 
RegisterUIExtensionCallback(uint64_t userId,const UIExtensionCallback & callback,bool unobscured)2162 int32_t RSRenderServiceClient::RegisterUIExtensionCallback(uint64_t userId, const UIExtensionCallback& callback,
2163     bool unobscured)
2164 {
2165     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2166     if (renderService == nullptr) {
2167         ROSEN_LOGE("RSRenderServiceClient::RegisterUIExtensionCallback renderService == nullptr!");
2168         return RENDER_SERVICE_NULL;
2169     }
2170     sptr<CustomUIExtensionCallback> cb = new CustomUIExtensionCallback(callback);
2171     return renderService->RegisterUIExtensionCallback(userId, cb, unobscured);
2172 }
2173 
SetAncoForceDoDirect(bool direct)2174 bool RSRenderServiceClient::SetAncoForceDoDirect(bool direct)
2175 {
2176     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2177     if (renderService != nullptr) {
2178         bool res;
2179         renderService->SetAncoForceDoDirect(direct, res);
2180         return res;
2181     }
2182     ROSEN_LOGE("RSRenderServiceClient::SetAncoForceDoDirect renderService is null");
2183     return false;
2184 }
2185 
SetVirtualScreenStatus(ScreenId id,VirtualScreenStatus screenStatus)2186 bool RSRenderServiceClient::SetVirtualScreenStatus(ScreenId id, VirtualScreenStatus screenStatus)
2187 {
2188     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2189     bool success = false;
2190     if (renderService != nullptr) {
2191         renderService->SetVirtualScreenStatus(id, screenStatus, success);
2192     }
2193     return success;
2194 }
2195 
SetFreeMultiWindowStatus(bool enable)2196 void RSRenderServiceClient::SetFreeMultiWindowStatus(bool enable)
2197 {
2198     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2199     if (renderService == nullptr) {
2200         ROSEN_LOGE("RSRenderServiceClient::SetFreeMultiWindowStatus renderService == nullptr!");
2201         return;
2202     }
2203     renderService->SetFreeMultiWindowStatus(enable);
2204 }
2205 
2206 class SurfaceBufferCallbackDirector : public RSSurfaceBufferCallbackStub {
2207 public:
SurfaceBufferCallbackDirector(RSRenderServiceClient * client)2208     explicit SurfaceBufferCallbackDirector(RSRenderServiceClient* client) : client_(client) {}
2209     ~SurfaceBufferCallbackDirector() noexcept override = default;
OnFinish(const FinishCallbackRet & ret)2210     void OnFinish(const FinishCallbackRet& ret) override
2211     {
2212         client_->TriggerOnFinish(ret);
2213     }
2214 
OnAfterAcquireBuffer(const AfterAcquireBufferRet & ret)2215     void OnAfterAcquireBuffer(const AfterAcquireBufferRet& ret) override
2216     {
2217         client_->TriggerOnAfterAcquireBuffer(ret);
2218     }
2219 
2220 private:
2221     RSRenderServiceClient* client_;
2222 };
2223 
RegisterSurfaceBufferCallback(pid_t pid,uint64_t uid,std::shared_ptr<SurfaceBufferCallback> callback)2224 bool RSRenderServiceClient::RegisterSurfaceBufferCallback(
2225     pid_t pid, uint64_t uid, std::shared_ptr<SurfaceBufferCallback> callback)
2226 {
2227     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2228     if (renderService == nullptr) {
2229         ROSEN_LOGE("RSRenderServiceClient::RegisterSurfaceBufferCallback renderService == nullptr!");
2230         return false;
2231     }
2232     if (callback == nullptr) {
2233         ROSEN_LOGE("RSRenderServiceClient::RegisterSurfaceBufferCallback callback == nullptr!");
2234         return false;
2235     }
2236     {
2237         std::unique_lock<std::shared_mutex> lock { surfaceBufferCallbackMutex_ };
2238         if (surfaceBufferCallbacks_.find(uid) == std::end(surfaceBufferCallbacks_)) {
2239             surfaceBufferCallbacks_.emplace(uid, callback);
2240         } else {
2241             ROSEN_LOGE("RSRenderServiceClient::RegisterSurfaceBufferCallback callback exists"
2242                 " in uid %{public}s", std::to_string(uid).c_str());
2243             return false;
2244         }
2245         if (surfaceBufferCbDirector_ == nullptr) {
2246             surfaceBufferCbDirector_ = new SurfaceBufferCallbackDirector(this);
2247         }
2248     }
2249     renderService->RegisterSurfaceBufferCallback(pid, uid, surfaceBufferCbDirector_);
2250     return true;
2251 }
2252 
UnregisterSurfaceBufferCallback(pid_t pid,uint64_t uid)2253 bool RSRenderServiceClient::UnregisterSurfaceBufferCallback(pid_t pid, uint64_t uid)
2254 {
2255     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2256     if (renderService == nullptr) {
2257         ROSEN_LOGE("RSRenderServiceClient::UnregisterSurfaceBufferCallback renderService == nullptr!");
2258         return false;
2259     }
2260     {
2261         std::unique_lock<std::shared_mutex> lock { surfaceBufferCallbackMutex_ };
2262         auto iter = surfaceBufferCallbacks_.find(uid);
2263         if (iter == std::end(surfaceBufferCallbacks_)) {
2264             ROSEN_LOGE("RSRenderServiceClient::UnregisterSurfaceBufferCallback invaild uid.");
2265             return false;
2266         }
2267         surfaceBufferCallbacks_.erase(iter);
2268     }
2269     renderService->UnregisterSurfaceBufferCallback(pid, uid);
2270     return true;
2271 }
2272 
TriggerOnFinish(const FinishCallbackRet & ret) const2273 void RSRenderServiceClient::TriggerOnFinish(const FinishCallbackRet& ret) const
2274 {
2275     std::shared_ptr<SurfaceBufferCallback> callback = nullptr;
2276     {
2277         std::shared_lock<std::shared_mutex> lock { surfaceBufferCallbackMutex_ };
2278         if (auto iter = surfaceBufferCallbacks_.find(ret.uid); iter != std::cend(surfaceBufferCallbacks_)) {
2279             callback = iter->second;
2280         }
2281     }
2282     if (!callback) {
2283         ROSEN_LOGD("RSRenderServiceClient::TriggerOnFinish callback is null");
2284         return;
2285     }
2286     callback->OnFinish(ret);
2287 }
2288 
TriggerOnAfterAcquireBuffer(const AfterAcquireBufferRet & ret) const2289 void RSRenderServiceClient::TriggerOnAfterAcquireBuffer(const AfterAcquireBufferRet& ret) const
2290 {
2291     std::shared_ptr<SurfaceBufferCallback> callback = nullptr;
2292     {
2293         std::shared_lock<std::shared_mutex> lock { surfaceBufferCallbackMutex_ };
2294         if (auto iter = surfaceBufferCallbacks_.find(ret.uid); iter != std::cend(surfaceBufferCallbacks_)) {
2295             callback = iter->second;
2296         }
2297     }
2298     if (callback) {
2299         callback->OnAfterAcquireBuffer(ret);
2300     }
2301 }
2302 
SetLayerTopForHWC(NodeId nodeId,bool isTop,uint32_t zOrder)2303 void RSRenderServiceClient::SetLayerTopForHWC(NodeId nodeId, bool isTop, uint32_t zOrder)
2304 {
2305     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2306     if (renderService != nullptr) {
2307         renderService->SetLayerTopForHWC(nodeId, isTop, zOrder);
2308     }
2309 }
2310 
SetLayerTop(const std::string & nodeIdStr,bool isTop)2311 void RSRenderServiceClient::SetLayerTop(const std::string &nodeIdStr, bool isTop)
2312 {
2313     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2314     if (renderService != nullptr) {
2315         renderService->SetLayerTop(nodeIdStr, isTop);
2316     }
2317 }
2318 
SetForceRefresh(const std::string & nodeIdStr,bool isForceRefresh)2319 void RSRenderServiceClient::SetForceRefresh(const std::string &nodeIdStr, bool isForceRefresh)
2320 {
2321     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2322     if (renderService != nullptr) {
2323         renderService->SetForceRefresh(nodeIdStr, isForceRefresh);
2324     }
2325 }
2326 
2327 class TransactionDataCallbackDirector : public RSTransactionDataCallbackStub {
2328 public:
TransactionDataCallbackDirector(RSRenderServiceClient * client)2329     explicit TransactionDataCallbackDirector(RSRenderServiceClient* client) : client_(client) {}
2330     ~TransactionDataCallbackDirector() noexcept override = default;
OnAfterProcess(uint64_t token,uint64_t timeStamp)2331     void OnAfterProcess(uint64_t token, uint64_t timeStamp) override
2332     {
2333         RS_LOGD("OnAfterProcess: TriggerTransactionDataCallbackAndErase, timeStamp: %{public}"
2334             PRIu64 " token: %{public}" PRIu64, timeStamp, token);
2335         client_->TriggerTransactionDataCallbackAndErase(token, timeStamp);
2336     }
2337 
2338 private:
2339     RSRenderServiceClient* client_;
2340 };
2341 
RegisterTransactionDataCallback(uint64_t token,uint64_t timeStamp,std::function<void ()> callback)2342 bool RSRenderServiceClient::RegisterTransactionDataCallback(uint64_t token, uint64_t timeStamp,
2343     std::function<void()> callback)
2344 {
2345     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2346     if (renderService == nullptr) {
2347         ROSEN_LOGE("RSRenderServiceClient::RegisterTransactionDataCallback renderService == nullptr!");
2348         return false;
2349     }
2350     if (callback == nullptr) {
2351         ROSEN_LOGE("RSRenderServiceClient::RegisterTransactionDataCallback callback == nullptr!");
2352         return false;
2353     }
2354     {
2355         std::lock_guard<std::mutex> lock{ transactionDataCallbackMutex_ };
2356         if (transactionDataCallbacks_.find(std::make_pair(token, timeStamp)) == std::end(transactionDataCallbacks_)) {
2357             transactionDataCallbacks_.emplace(std::make_pair(token, timeStamp), callback);
2358         } else {
2359             ROSEN_LOGE("RSRenderServiceClient::RegisterTransactionDataCallback callback exists"
2360                 " in timeStamp %{public}s", std::to_string(timeStamp).c_str());
2361             return false;
2362         }
2363         if (transactionDataCbDirector_ == nullptr) {
2364             transactionDataCbDirector_ = new TransactionDataCallbackDirector(this);
2365         }
2366     }
2367     RS_LOGD("RSRenderServiceClient::RegisterTransactionDataCallback, timeStamp: %{public}"
2368         PRIu64 " token: %{public}" PRIu64, timeStamp, token);
2369     renderService->RegisterTransactionDataCallback(token, timeStamp, transactionDataCbDirector_);
2370     return true;
2371 }
2372 
TriggerTransactionDataCallbackAndErase(uint64_t token,uint64_t timeStamp)2373 void RSRenderServiceClient::TriggerTransactionDataCallbackAndErase(uint64_t token, uint64_t timeStamp)
2374 {
2375     std::function<void()> callback = nullptr;
2376     {
2377         std::lock_guard<std::mutex> lock{ transactionDataCallbackMutex_ };
2378         auto iter = transactionDataCallbacks_.find(std::make_pair(token, timeStamp));
2379         if (iter != std::end(transactionDataCallbacks_)) {
2380             callback = iter->second;
2381             transactionDataCallbacks_.erase(iter);
2382         }
2383     }
2384     if (callback) {
2385         RS_LOGD("TriggerTransactionDataCallbackAndErase: invoke callback, timeStamp: %{public}"
2386             PRIu64 " token: %{public}" PRIu64, timeStamp, token);
2387         std::invoke(callback);
2388     }
2389 }
2390 
SetColorFollow(const std::string & nodeIdStr,bool isColorFollow)2391 void RSRenderServiceClient::SetColorFollow(const std::string &nodeIdStr, bool isColorFollow)
2392 {
2393     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2394     if (renderService != nullptr) {
2395         renderService->SetColorFollow(nodeIdStr, isColorFollow);
2396     }
2397 }
2398 
NotifyScreenSwitched()2399 void RSRenderServiceClient::NotifyScreenSwitched()
2400 {
2401     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2402     if (renderService == nullptr) {
2403         ROSEN_LOGE("RSRenderServiceClient::%{public}s renderService is nullptr", __func__);
2404         return;
2405     }
2406     renderService->NotifyScreenSwitched();
2407 }
2408 
SetWindowContainer(NodeId nodeId,bool value)2409 void RSRenderServiceClient::SetWindowContainer(NodeId nodeId, bool value)
2410 {
2411     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2412     if (renderService != nullptr) {
2413         renderService->SetWindowContainer(nodeId, value);
2414     }
2415 }
2416 
2417 class CustomSelfDrawingNodeRectChangeCallback : public RSSelfDrawingNodeRectChangeCallbackStub
2418 {
2419 public:
CustomSelfDrawingNodeRectChangeCallback(const SelfDrawingNodeRectChangeCallback & callback)2420     explicit CustomSelfDrawingNodeRectChangeCallback(const SelfDrawingNodeRectChangeCallback& callback) : cb_(callback)
2421     {}
~CustomSelfDrawingNodeRectChangeCallback()2422     ~CustomSelfDrawingNodeRectChangeCallback() override {};
2423 
OnSelfDrawingNodeRectChange(std::shared_ptr<RSSelfDrawingNodeRectData> rectData)2424     void OnSelfDrawingNodeRectChange(std::shared_ptr<RSSelfDrawingNodeRectData> rectData) override
2425     {
2426         if (cb_ != nullptr) {
2427             cb_(rectData);
2428         }
2429     }
2430 
2431 private:
2432     SelfDrawingNodeRectChangeCallback cb_;
2433 };
2434 
RegisterSelfDrawingNodeRectChangeCallback(const RectConstraint & constraint,const SelfDrawingNodeRectChangeCallback & callback)2435 int32_t RSRenderServiceClient::RegisterSelfDrawingNodeRectChangeCallback(
2436     const RectConstraint& constraint, const SelfDrawingNodeRectChangeCallback& callback)
2437 {
2438     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2439     if (renderService == nullptr) {
2440         ROSEN_LOGE("RSRenderServiceClient::RegisterSelfDrawingNodeRectChangeCallback renderService == nullptr");
2441         return RENDER_SERVICE_NULL;
2442     }
2443 
2444     sptr<CustomSelfDrawingNodeRectChangeCallback> cb = nullptr;
2445     if (callback) {
2446         cb = new CustomSelfDrawingNodeRectChangeCallback(callback);
2447     }
2448 
2449     return renderService->RegisterSelfDrawingNodeRectChangeCallback(constraint, cb);
2450 }
2451 
UnRegisterSelfDrawingNodeRectChangeCallback()2452 int32_t RSRenderServiceClient::UnRegisterSelfDrawingNodeRectChangeCallback()
2453 {
2454     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2455     if (renderService == nullptr) {
2456         ROSEN_LOGE("RSRenderServiceClient::UnRegisterSelfDrawingNodeRectChangeCallback renderService == nullptr");
2457         return RENDER_SERVICE_NULL;
2458     }
2459     return renderService->UnRegisterSelfDrawingNodeRectChangeCallback();
2460 }
2461 
2462 #ifdef RS_ENABLE_OVERLAY_DISPLAY
SetOverlayDisplayMode(int32_t mode)2463 int32_t RSRenderServiceClient::SetOverlayDisplayMode(int32_t mode)
2464 {
2465     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2466     if (renderService == nullptr) {
2467         return RENDER_SERVICE_NULL;
2468     }
2469     return renderService->SetOverlayDisplayMode(mode);
2470 }
2471 #endif
2472 
NotifyPageName(const std::string & packageName,const std::string & pageName,bool isEnter)2473 void RSRenderServiceClient::NotifyPageName(const std::string &packageName,
2474     const std::string &pageName, bool isEnter)
2475 {
2476     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2477     if (renderService == nullptr) {
2478         ROSEN_LOGE("RSRenderServiceClient::NotifyPageName renderService == nullptr!");
2479         return;
2480     }
2481     renderService->NotifyPageName(packageName, pageName, isEnter);
2482 }
2483 
GetHighContrastTextState()2484 bool RSRenderServiceClient::GetHighContrastTextState()
2485 {
2486     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2487     if (renderService != nullptr) {
2488         return renderService->GetHighContrastTextState();
2489     }
2490     return false;
2491 }
2492 
SetBehindWindowFilterEnabled(bool enabled)2493 bool RSRenderServiceClient::SetBehindWindowFilterEnabled(bool enabled)
2494 {
2495     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2496     if (!renderService) {
2497         return false;
2498     }
2499     auto ret = renderService->SetBehindWindowFilterEnabled(enabled);
2500     if (ret != ERR_OK) {
2501         ROSEN_LOGE("RSRenderServiceClient::SetBehindWindowFilterEnabled fail, ret[%{public}d]", ret);
2502         return false;
2503     }
2504     return true;
2505 }
2506 
GetBehindWindowFilterEnabled(bool & enabled)2507 bool RSRenderServiceClient::GetBehindWindowFilterEnabled(bool& enabled)
2508 {
2509     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2510     if (!renderService) {
2511         return false;
2512     }
2513     auto ret = renderService->GetBehindWindowFilterEnabled(enabled);
2514     if (ret != ERR_OK) {
2515         ROSEN_LOGE("RSRenderServiceClient::GetBehindWindowFilterEnabled fail, ret[%{public}d]", ret);
2516         return false;
2517     }
2518     return true;
2519 }
2520 
GetPidGpuMemoryInMB(pid_t pid,float & gpuMemInMB)2521 int32_t RSRenderServiceClient::GetPidGpuMemoryInMB(pid_t pid, float &gpuMemInMB)
2522 {
2523     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2524     if (!renderService) {
2525         return ERR_INVALID_DATA;
2526     }
2527     auto ret = renderService->GetPidGpuMemoryInMB(pid, gpuMemInMB);
2528     if (ret != ERR_OK) {
2529         ROSEN_LOGE("RSRenderServiceClient::GetPidGpuMemoryInMB fail, ret[%{public}d]", ret);
2530     }
2531     return ret;
2532 }
ProfilerServiceOpenFile(const HrpServiceDirInfo & dirInfo,const std::string & fileName,int32_t flags,int & fd)2533 RetCodeHrpService RSRenderServiceClient::ProfilerServiceOpenFile(const HrpServiceDirInfo& dirInfo,
2534     const std::string& fileName, int32_t flags, int& fd)
2535 {
2536     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2537     if (renderService == nullptr) {
2538         return RET_HRP_SERVICE_ERR_UNKNOWN;
2539     }
2540 
2541     if (!HrpServiceValidDirOrFileName(fileName)
2542         || !HrpServiceValidDirOrFileName(dirInfo.subDir) || !HrpServiceValidDirOrFileName(dirInfo.subDir2)) {
2543         return RET_HRP_SERVICE_ERR_INVALID_PARAM;
2544     }
2545     fd = -1;
2546     return renderService->ProfilerServiceOpenFile(dirInfo, fileName, flags, fd);
2547 }
2548 
ProfilerServicePopulateFiles(const HrpServiceDirInfo & dirInfo,uint32_t firstFileIndex,std::vector<HrpServiceFileInfo> & outFiles)2549 RetCodeHrpService RSRenderServiceClient::ProfilerServicePopulateFiles(const HrpServiceDirInfo& dirInfo,
2550     uint32_t firstFileIndex, std::vector<HrpServiceFileInfo>& outFiles)
2551 {
2552     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2553     if (renderService == nullptr) {
2554         return RET_HRP_SERVICE_ERR_UNKNOWN;
2555     }
2556     if (!HrpServiceValidDirOrFileName(dirInfo.subDir) || !HrpServiceValidDirOrFileName(dirInfo.subDir2)) {
2557         return RET_HRP_SERVICE_ERR_INVALID_PARAM;
2558     }
2559     return renderService->ProfilerServicePopulateFiles(dirInfo, firstFileIndex, outFiles);
2560 }
2561 
ProfilerIsSecureScreen()2562 bool RSRenderServiceClient::ProfilerIsSecureScreen()
2563 {
2564     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2565     if (renderService != nullptr) {
2566         return renderService->ProfilerIsSecureScreen();
2567     }
2568     return false;
2569 }
2570 
ClearUifirstCache(NodeId id)2571 void RSRenderServiceClient::ClearUifirstCache(NodeId id)
2572 {
2573     auto renderService = RSRenderServiceConnectHub::GetRenderService();
2574     if (!renderService) {
2575         return;
2576     }
2577     renderService->ClearUifirstCache(id);
2578 }
2579 } // namespace Rosen
2580 } // namespace OHOS
2581