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