• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef RS_SCREEN_MANAGER
17 #define RS_SCREEN_MANAGER
18 
19 #include <cstdint>
20 #include <memory>
21 #include <mutex>
22 #include <queue>
23 #include <unordered_map>
24 #include <unordered_set>
25 #include <future>
26 
27 #include <hdi_backend.h>
28 #include <ipc_callbacks/screen_change_callback.h>
29 #include <refbase.h>
30 #include <screen_manager/rs_screen_props.h>
31 #include <screen_manager/rs_screen_mode_info.h>
32 #include <screen_manager/rs_screen_capability.h>
33 #include <screen_manager/rs_screen_data.h>
34 #include <screen_manager/rs_screen_hdr_capability.h>
35 #include <screen_manager/screen_types.h>
36 #include <screen_manager/rs_virtual_screen_resolution.h>
37 #include <screen_manager/rs_screen_info.h>
38 #include <surface.h>
39 #include <surface_type.h>
40 #ifdef RS_SUBSCRIBE_SENSOR_ENABLE
41 #include "sensor_agent.h"
42 #include "sensor_agent_type.h"
43 #endif
44 #include "rs_screen.h"
45 
46 namespace OHOS {
47 namespace Rosen {
48 class RSScreenManager : public RefBase {
49 public:
50     RSScreenManager() = default;
51     virtual ~RSScreenManager() noexcept = default;
52 
53     virtual bool Init() noexcept = 0;
54 
55     // get default/primary screen id.
56     virtual ScreenId GetDefaultScreenId() const = 0;
57 
58     virtual std::vector<ScreenId> GetAllScreenIds() const = 0;
59 
60     virtual void SetDefaultScreenId(ScreenId id) = 0;
61 
62     virtual void SetScreenMirror(ScreenId id, ScreenId toMirror) = 0;
63 
64     virtual ScreenId CreateVirtualScreen(
65         const std::string &name,
66         uint32_t width,
67         uint32_t height,
68         sptr<Surface> surface,
69         ScreenId mirrorId = 0,
70         int flags = 0,
71         std::vector<uint64_t> whiteList = {}) = 0;
72 
73     virtual int32_t SetVirtualScreenBlackList(ScreenId id, const std::vector<uint64_t>& blackList) = 0;
74 
75     virtual int32_t AddVirtualScreenBlackList(ScreenId id, const std::vector<uint64_t>& blackList) = 0;
76 
77     virtual int32_t RemoveVirtualScreenBlackList(ScreenId id, const std::vector<uint64_t>& blackList) = 0;
78 
79     virtual int32_t SetVirtualScreenSecurityExemptionList(
80         ScreenId id, const std::vector<uint64_t>& securityExemptionList) = 0;
81 
82     virtual const std::vector<uint64_t> GetVirtualScreenSecurityExemptionList(ScreenId id) const = 0;
83 
84     virtual int32_t SetCastScreenEnableSkipWindow(ScreenId id, bool enable) = 0;
85 
86     virtual void GetCastScreenBlackList(std::unordered_set<uint64_t>& screenBlackList) = 0;
87 
88     virtual bool GetCastScreenEnableSkipWindow(ScreenId id) = 0;
89 
90     virtual std::unordered_set<uint64_t> GetVirtualScreenBlackList(ScreenId id) = 0;
91 
92     virtual int32_t SetVirtualScreenSurface(ScreenId id, sptr<Surface> surface) = 0;
93 
94     virtual bool GetAndResetVirtualSurfaceUpdateFlag(ScreenId id) const = 0;
95 
96     virtual void RemoveVirtualScreen(ScreenId id) = 0;
97 
98     virtual void SetScreenActiveMode(ScreenId id, uint32_t modeId) = 0;
99 
100     virtual int32_t SetRogScreenResolution(ScreenId id, uint32_t width, uint32_t height) = 0;
101 
102     virtual int32_t SetVirtualScreenResolution(ScreenId id, uint32_t width, uint32_t height) = 0;
103 
104     virtual void SetScreenPowerStatus(ScreenId id, ScreenPowerStatus status) = 0;
105 
106     virtual bool SetVirtualMirrorScreenCanvasRotation(ScreenId id, bool canvasRotation) = 0;
107 
108     virtual bool SetVirtualMirrorScreenScaleMode(ScreenId id, ScreenScaleMode ScaleMode) = 0;
109 
110     virtual int32_t SetScreenCorrection(ScreenId id, ScreenRotation screenRotation) = 0;
111 
112     virtual void GetVirtualScreenResolution(ScreenId id, RSVirtualScreenResolution& virtualScreenResolution) const = 0;
113 
114     virtual void GetScreenActiveMode(ScreenId id, RSScreenModeInfo& screenModeInfo) const = 0;
115 
116     virtual std::vector<RSScreenModeInfo> GetScreenSupportedModes(ScreenId id) const = 0;
117 
118     virtual RSScreenCapability GetScreenCapability(ScreenId id) const = 0;
119 
120     virtual ScreenPowerStatus GetScreenPowerStatus(ScreenId id) const = 0;
121 
122     virtual ScreenRotation GetScreenCorrection(ScreenId id) const = 0;
123 
124     virtual RSScreenData GetScreenData(ScreenId id) const = 0;
125 
126     virtual ScreenInfo QueryDefaultScreenInfo() const = 0;
127 
128     virtual ScreenInfo QueryScreenInfo(ScreenId id) const = 0;
129 
130     // Can only be called after QueryScreenState and the state is ScreenState::SOFTWARE_OUTPUT_ENABLE;
131     virtual sptr<Surface> GetProducerSurface(ScreenId id) const = 0;
132 
133     virtual bool GetCanvasRotation(ScreenId id) const = 0;
134 
135     virtual ScreenScaleMode GetScaleMode(ScreenId id) const = 0;
136 
137     // Can only be called after QueryScreenState and the state is ScreenState::HDI_OUTPUT_ENABLE;
138     virtual std::shared_ptr<HdiOutput> GetOutput(ScreenId id) const = 0;
139 
140     virtual int32_t AddScreenChangeCallback(const sptr<RSIScreenChangeCallback> &callback) = 0;
141 
142     virtual void RemoveScreenChangeCallback(const sptr<RSIScreenChangeCallback> &callback) = 0;
143 
144     virtual void ProcessScreenHotPlugEvents() = 0;
145 
146     virtual bool TrySimpleProcessHotPlugEvents() = 0;
147 
148     virtual void DisplayDump(std::string& dumpString) = 0;
149 
150     virtual void SurfaceDump(std::string& dumpString) = 0;
151 
152     virtual void FpsDump(std::string& dumpString, std::string& arg) = 0;
153 
154     virtual void ClearFpsDump(std::string& dumpString, std::string& arg) = 0;
155 
156     virtual void HitchsDump(std::string& dumpString, std::string& arg) = 0;
157 
158     virtual int32_t ResizeVirtualScreen(ScreenId id, uint32_t width, uint32_t height) = 0;
159 
160     virtual int32_t GetScreenBacklight(ScreenId id) const = 0;
161 
162     virtual void SetScreenBacklight(ScreenId id, uint32_t level) = 0;
163 
164     virtual int32_t GetScreenSupportedColorGamuts(ScreenId id, std::vector<ScreenColorGamut>& mode) const = 0;
165 
166     virtual int32_t GetScreenSupportedMetaDataKeys(ScreenId id, std::vector<ScreenHDRMetadataKey>& keys) const = 0;
167 
168     virtual int32_t GetScreenColorGamut(ScreenId id, ScreenColorGamut& mode) const = 0;
169 
170     virtual int32_t SetScreenColorGamut(ScreenId id, int32_t modeIdx) = 0;
171 
172     virtual int32_t SetScreenGamutMap(ScreenId id, ScreenGamutMap mode) = 0;
173 
174     virtual int32_t GetScreenGamutMap(ScreenId id, ScreenGamutMap& mode) const = 0;
175 
176     virtual int32_t GetScreenHDRCapability(ScreenId id, RSScreenHDRCapability& screenHdrCapability) const = 0;
177 
178     virtual int32_t GetScreenType(ScreenId id, RSScreenType& type) const = 0;
179 
180     virtual int32_t SetScreenSkipFrameInterval(ScreenId id, uint32_t skipFrameInterval) = 0;
181 
182     virtual int32_t GetPixelFormat(ScreenId id, GraphicPixelFormat& pixelFormat) const = 0;
183 
184     virtual int32_t SetPixelFormat(ScreenId id, GraphicPixelFormat pixelFormat) = 0;
185 
186     virtual int32_t GetScreenSupportedHDRFormats(ScreenId id, std::vector<ScreenHDRFormat>& hdrFormats) const = 0;
187 
188     virtual int32_t GetScreenHDRFormat(ScreenId id, ScreenHDRFormat& hdrFormat) const = 0;
189 
190     virtual int32_t SetScreenHDRFormat(ScreenId id, int32_t modeIdx) = 0;
191 
192     virtual int32_t GetScreenSupportedColorSpaces(
193         ScreenId id, std::vector<GraphicCM_ColorSpaceType>& colorSpaces) const = 0;
194 
195     virtual int32_t GetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType& colorSpace) const = 0;
196 
197     virtual uint32_t GetActualScreensNum() const = 0;
198 
199     virtual int32_t SetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType colorSpace) = 0;
200 
201     virtual ScreenId GetActiveScreenId() = 0;
202     /* only used for mock tests */
203     virtual void MockHdiScreenConnected(std::unique_ptr<impl::RSScreen>& rsScreen) = 0;
204 
205     virtual bool IsAllScreensPowerOff() const = 0;
206 
207     // used to skip render frame or render only one frame when screen power is off.
208     virtual void MarkPowerOffNeedProcessOneFrame() = 0;
209 
210     virtual void ResetPowerOffNeedProcessOneFrame() = 0;
211 
212     virtual bool GetPowerOffNeedProcessOneFrame() const = 0;
213 
214     virtual bool IsScreenPowerOff(ScreenId id) const = 0;
215 
216     virtual void DisablePowerOffRenderControl(ScreenId id) = 0;
217 
218     virtual int GetDisableRenderControlScreensCount() const = 0;
219 
220 #ifdef USE_VIDEO_PROCESSING_ENGINE
221     virtual float GetScreenBrightnessNits(ScreenId id) const = 0;
222 #endif
223 
224 #ifdef RS_SUBSCRIBE_SENSOR_ENABLE
225     virtual void HandlePostureData(const SensorEvent * const event) = 0;
226 #endif
227     virtual void ForceRefreshOneFrameIfNoRNV() = 0;
228 
229     virtual void ClearFrameBufferIfNeed() = 0;
230 
231     virtual int32_t SetScreenConstraint(ScreenId id, uint64_t timestamp, ScreenConstraintType type) = 0;
232 };
233 
234 sptr<RSScreenManager> CreateOrGetScreenManager();
235 
236 namespace impl {
237 struct ScreenHotPlugEvent {
238     std::shared_ptr<HdiOutput> output;
239     bool connected = false;
240 };
241 
242 enum class FoldState : uint32_t {
243     UNKNOW,
244     FOLDED,
245     EXPAND
246 };
247 
248 class RSScreenManager : public OHOS::Rosen::RSScreenManager {
249 public:
250     static sptr<OHOS::Rosen::RSScreenManager> GetInstance() noexcept;
251 
252     // noncopyable
253     RSScreenManager(const RSScreenManager &) = delete;
254     RSScreenManager &operator=(const RSScreenManager &) = delete;
255 
256     bool Init() noexcept override;
257 
GetDefaultScreenId()258     ScreenId GetDefaultScreenId() const override
259     {
260         return defaultScreenId_;
261     }
262 
263     std::vector<ScreenId> GetAllScreenIds() const override;
264 
265     void SetDefaultScreenId(ScreenId id) override;
266 
267     void SetScreenMirror(ScreenId id, ScreenId toMirror) override;
268 
269     ScreenId CreateVirtualScreen(
270         const std::string &name,
271         uint32_t width,
272         uint32_t height,
273         sptr<Surface> surface,
274         ScreenId mirrorId,
275         int32_t flags,
276         std::vector<uint64_t> whiteList) override;
277 
278     int32_t SetVirtualScreenBlackList(ScreenId id, const std::vector<uint64_t>& blackList) override;
279 
280     int32_t AddVirtualScreenBlackList(ScreenId id, const std::vector<uint64_t>& blackList) override;
281 
282     int32_t RemoveVirtualScreenBlackList(ScreenId id, const std::vector<uint64_t>& blackList) override;
283 
284     int32_t SetVirtualScreenSecurityExemptionList(
285         ScreenId id, const std::vector<uint64_t>& securityExemptionList) override;
286 
287     const std::vector<uint64_t> GetVirtualScreenSecurityExemptionList(ScreenId id) const override;
288 
289     int32_t SetCastScreenEnableSkipWindow(ScreenId id, bool enable) override;
290 
291     void GetCastScreenBlackList(std::unordered_set<uint64_t>& screenBlackList) override;
292 
293     bool GetCastScreenEnableSkipWindow(ScreenId id) override;
294 
295     std::unordered_set<uint64_t> GetVirtualScreenBlackList(ScreenId id) override;
296 
297     int32_t SetVirtualScreenSurface(ScreenId id, sptr<Surface> surface) override;
298 
299     bool GetAndResetVirtualSurfaceUpdateFlag(ScreenId id) const override;
300 
301     void RemoveVirtualScreen(ScreenId id) override;
302 
303     void SetScreenActiveMode(ScreenId id, uint32_t modeId) override;
304 
305     int32_t SetRogScreenResolution(ScreenId id, uint32_t width, uint32_t height) override;
306 
307     int32_t SetVirtualScreenResolution(ScreenId id, uint32_t width, uint32_t height) override;
308 
309     void SetScreenPowerStatus(ScreenId id, ScreenPowerStatus status) override;
310 
311     bool SetVirtualMirrorScreenCanvasRotation(ScreenId id, bool canvasRotation) override;
312 
313     bool SetVirtualMirrorScreenScaleMode(ScreenId id, ScreenScaleMode ScaleMode) override;
314 
315     void GetVirtualScreenResolution(ScreenId id, RSVirtualScreenResolution& virtualScreenResolution) const override;
316 
317     void GetScreenActiveMode(ScreenId id, RSScreenModeInfo& screenModeInfo) const override;
318 
319     std::vector<RSScreenModeInfo> GetScreenSupportedModes(ScreenId id) const override;
320 
321     RSScreenCapability GetScreenCapability(ScreenId id) const override;
322 
323     ScreenPowerStatus GetScreenPowerStatus(ScreenId id) const override;
324 
325     ScreenRotation GetScreenCorrection(ScreenId id) const override;
326 
327     RSScreenData GetScreenData(ScreenId id) const  override;
328 
329     ScreenInfo QueryDefaultScreenInfo() const override;
330 
331     ScreenInfo QueryScreenInfo(ScreenId id) const override;
332 
333     sptr<Surface> GetProducerSurface(ScreenId id) const override;
334 
335     bool GetCanvasRotation(ScreenId id) const override;
336 
337     ScreenScaleMode GetScaleMode(ScreenId id) const override;
338 
339     std::shared_ptr<HdiOutput> GetOutput(ScreenId id) const override;
340 
341     int32_t AddScreenChangeCallback(const sptr<RSIScreenChangeCallback> &callback) override;
342 
343     void RemoveScreenChangeCallback(const sptr<RSIScreenChangeCallback> &callback) override;
344 
345     void ProcessScreenHotPlugEvents() override;
346 
347     bool TrySimpleProcessHotPlugEvents() override;
348 
349     void DisplayDump(std::string& dumpString) override;
350 
351     void SurfaceDump(std::string& dumpString) override;
352 
353     void FpsDump(std::string& dumpString, std::string& arg) override;
354 
355     void ClearFpsDump(std::string& dumpString, std::string& arg) override;
356 
357     void HitchsDump(std::string& dumpString, std::string& arg) override;
358 
359     int32_t ResizeVirtualScreen(ScreenId id, uint32_t width, uint32_t height) override;
360 
361     int32_t GetScreenBacklight(ScreenId id) const override;
362 
363     void SetScreenBacklight(ScreenId id, uint32_t level) override;
364 
365     int32_t GetScreenSupportedColorGamuts(ScreenId id, std::vector<ScreenColorGamut>& mode) const override;
366 
367     int32_t GetScreenSupportedMetaDataKeys(ScreenId id, std::vector<ScreenHDRMetadataKey>& keys) const override;
368 
369     int32_t GetScreenColorGamut(ScreenId id, ScreenColorGamut& mode) const override;
370 
371     uint32_t GetActualScreensNum() const override;
372 
373     int32_t SetScreenColorGamut(ScreenId id, int32_t modeIdx) override;
374 
375     int32_t SetScreenGamutMap(ScreenId id, ScreenGamutMap mode) override;
376 
377     int32_t SetScreenCorrection(ScreenId id, ScreenRotation screenRotation) override;
378 
379     int32_t GetScreenGamutMap(ScreenId id, ScreenGamutMap& mode) const override;
380 
381     int32_t GetScreenHDRCapability(ScreenId id, RSScreenHDRCapability& screenHdrCapability) const override;
382 
383     int32_t GetScreenType(ScreenId id, RSScreenType& type) const override;
384 
385     int32_t SetScreenSkipFrameInterval(ScreenId id, uint32_t skipFrameInterval) override;
386 
387     int32_t GetPixelFormat(ScreenId id, GraphicPixelFormat& pixelFormat) const override;
388 
389     int32_t SetPixelFormat(ScreenId id, GraphicPixelFormat pixelFormat) override;
390 
391     int32_t GetScreenSupportedHDRFormats(ScreenId id, std::vector<ScreenHDRFormat>& hdrFormats) const override;
392 
393     int32_t GetScreenHDRFormat(ScreenId id, ScreenHDRFormat& hdrFormat) const override;
394 
395     int32_t SetScreenHDRFormat(ScreenId id, int32_t modeIdx) override;
396 
397     int32_t GetScreenSupportedColorSpaces(
398         ScreenId id, std::vector<GraphicCM_ColorSpaceType>& colorSpaces) const override;
399 
400     int32_t GetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType& colorSpace) const override;
401 
402     int32_t SetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType colorSpace) override;
403 
404     ScreenId GetActiveScreenId() override;
405 
406     /* only used for mock tests */
MockHdiScreenConnected(std::unique_ptr<impl::RSScreen> & rsScreen)407     void MockHdiScreenConnected(std::unique_ptr<impl::RSScreen>& rsScreen) override
408     {
409         if (rsScreen == nullptr) {
410             return;
411         }
412         screens_[rsScreen->Id()] = std::move(rsScreen);
413     }
414 
415     bool IsAllScreensPowerOff() const override;
416 
417     // used to skip render frame or render only one frame when screen power is off.
418     void MarkPowerOffNeedProcessOneFrame() override;
419 
420     void ResetPowerOffNeedProcessOneFrame() override;
421 
422     bool GetPowerOffNeedProcessOneFrame() const override;
423 
424     bool IsScreenPowerOff(ScreenId id) const override;
425 
426     void DisablePowerOffRenderControl(ScreenId id) override;
427 
428     int GetDisableRenderControlScreensCount() const override;
429 
430 #ifdef USE_VIDEO_PROCESSING_ENGINE
431     float GetScreenBrightnessNits(ScreenId id) const override;
432 #endif
433 
434 #ifdef RS_SUBSCRIBE_SENSOR_ENABLE
435     void HandlePostureData(const SensorEvent * const event) override;
436 #endif
437     void ForceRefreshOneFrameIfNoRNV() override;
438 
439     void ClearFrameBufferIfNeed() override;
440 
441     int32_t SetScreenConstraint(ScreenId id, uint64_t timestamp, ScreenConstraintType type) override;
442 
443 private:
444     RSScreenManager();
445     ~RSScreenManager() noexcept override;
446 
447     static void OnHotPlug(std::shared_ptr<HdiOutput> &output, bool connected, void *data);
448     void OnHotPlugEvent(std::shared_ptr<HdiOutput> &output, bool connected);
449     static void OnRefresh(ScreenId id, void *data);
450     void OnRefreshEvent(ScreenId id);
451     static void OnHwcDead(void *data);
452     void OnHwcDeadEvent();
453     static void OnScreenVBlankIdle(uint32_t devId, uint64_t ns, void *data);
454     void OnScreenVBlankIdleEvent(uint32_t devId, uint64_t ns);
455     void CleanAndReinit();
456     void ProcessScreenConnectedLocked(std::shared_ptr<HdiOutput> &output);
457     void AddScreenToHgm(std::shared_ptr<HdiOutput> &output);
458     void ProcessScreenDisConnectedLocked(std::shared_ptr<HdiOutput> &output);
459     void RemoveScreenFromHgm(std::shared_ptr<HdiOutput> &output);
460     void HandleDefaultScreenDisConnectedLocked();
461     void ForceRefreshOneFrame() const;
462     std::vector<ScreenHotPlugEvent> pendingHotPlugEvents_;
463 
464     void GetVirtualScreenResolutionLocked(ScreenId id, RSVirtualScreenResolution& virtualScreenResolution) const;
465     void GetScreenActiveModeLocked(ScreenId id, RSScreenModeInfo& screenModeInfo) const;
466     std::vector<RSScreenModeInfo> GetScreenSupportedModesLocked(ScreenId id) const;
467     RSScreenCapability GetScreenCapabilityLocked(ScreenId id) const;
468     ScreenPowerStatus GetScreenPowerStatusLocked(ScreenId id) const;
469     ScreenRotation GetScreenCorrectionLocked(ScreenId id) const;
470     int32_t GetScreenBacklightLocked(ScreenId id) const;
471 
472     void SetCastScreenBlackList(std::unordered_set<uint64_t>& screenBlackList);
473     void RemoveVirtualScreenLocked(ScreenId id);
474     ScreenId GenerateVirtualScreenIdLocked();
475     void ReuseVirtualScreenIdLocked(ScreenId id);
476 
477     int32_t GetScreenSupportedColorGamutsLocked(ScreenId id, std::vector<ScreenColorGamut>& mode) const;
478     int32_t GetScreenSupportedMetaDataKeysLocked(ScreenId id, std::vector<ScreenHDRMetadataKey>& keys) const;
479     int32_t GetScreenColorGamutLocked(ScreenId id, ScreenColorGamut& mode) const;
480     int32_t SetScreenColorGamutLocked(ScreenId id, int32_t modeIdx);
481     int32_t SetScreenGamutMapLocked(ScreenId id, ScreenGamutMap mode);
482     int32_t SetScreenCorrectionLocked(ScreenId id, ScreenRotation screenRotation);
483     int32_t GetScreenGamutMapLocked(ScreenId id, ScreenGamutMap& mode) const;
484     int32_t GetScreenHDRCapabilityLocked(ScreenId id, RSScreenHDRCapability& screenHdrCapability) const;
485     int32_t GetScreenTypeLocked(ScreenId id, RSScreenType& type) const;
486     int32_t SetScreenSkipFrameIntervalLocked(ScreenId id, uint32_t skipFrameInterval);
487     int32_t GetPixelFormatLocked(ScreenId id, GraphicPixelFormat& pixelFormat) const;
488     int32_t SetPixelFormatLocked(ScreenId id, GraphicPixelFormat pixelFormat);
489     int32_t GetScreenSupportedHDRFormatsLocked(ScreenId id, std::vector<ScreenHDRFormat>& hdrFormats) const;
490     int32_t GetScreenHDRFormatLocked(ScreenId id, ScreenHDRFormat& hdrFormat) const;
491     int32_t SetScreenHDRFormatLocked(ScreenId id, int32_t modeIdx);
492     int32_t GetScreenSupportedColorSpacesLocked(ScreenId id, std::vector<GraphicCM_ColorSpaceType>& colorSpaces) const;
493     int32_t GetScreenColorSpaceLocked(ScreenId id, GraphicCM_ColorSpaceType& colorSpace) const;
494     int32_t SetScreenColorSpaceLocked(ScreenId id, GraphicCM_ColorSpaceType colorSpace);
495     ScreenInfo QueryScreenInfoLocked(ScreenId id) const;
496 
497 #ifdef RS_SUBSCRIBE_SENSOR_ENABLE
498     void RegisterSensorCallback();
499     void UnRegisterSensorCallback();
500     void HandleSensorData(float angle);
501     FoldState TransferAngleToScreenState(float angle);
502 #endif
503 
504     mutable std::mutex mutex_;
505     mutable std::mutex blackListMutex_;
506     HdiBackend *composer_ = nullptr;
507     ScreenId defaultScreenId_ = INVALID_SCREEN_ID;
508     std::map<ScreenId, std::shared_ptr<OHOS::Rosen::RSScreen>> screens_;
509     std::queue<ScreenId> freeVirtualScreenIds_;
510     uint32_t virtualScreenCount_ = 0;
511     uint32_t currentVirtualScreenNum_ = 0;
512     std::vector<sptr<RSIScreenChangeCallback>> screenChangeCallbacks_;
513     bool mipiCheckInFirstHotPlugEvent_ = false;
514     bool isHwcDead_ = false;
515     std::vector<ScreenId> connectedIds_;
516     std::unordered_map<ScreenId, ScreenRotation> screenCorrection_;
517     std::unordered_map<ScreenId, uint32_t> screenPowerStatus_;
518     std::unordered_map<ScreenId, uint32_t> screenBacklight_;
519     std::unordered_set<uint64_t> castScreenBlackLists_ = {};
520 
521     static std::once_flag createFlag_;
522     static sptr<OHOS::Rosen::RSScreenManager> instance_;
523 
524     uint64_t frameId_ = 0;
525     std::atomic<bool> powerOffNeedProcessOneFrame_ = false;
526     std::unordered_set<ScreenId> disableRenderControlScreens_ = {};
527 
528 #ifdef RS_SUBSCRIBE_SENSOR_ENABLE
529     SensorUser user;
530     bool isFoldScreenFlag_ = false;
531     ScreenId innerScreenId_ = 0;
532     ScreenId externalScreenId_ = INVALID_SCREEN_ID;
533     ScreenId activeScreenId_ = 0;
534     bool isFirstTimeToGetActiveScreenId_ = true;
535     bool isPostureSensorDataHandled_ = false;
536     std::condition_variable activeScreenIdAssignedCV_;
537     mutable std::mutex activeScreenIdAssignedMutex_;
538 #endif
539 };
540 } // namespace impl
541 } // namespace Rosen
542 } // namespace OHOS
543 #endif // RS_SCREEN_MANAGER
544