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::PRODUCER_SURFACE_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 
203     virtual int32_t SetVirtualScreenRefreshRate(ScreenId id, uint32_t maxRefreshRate, uint32_t& actualRefreshRate) = 0;
204 
205     virtual void SetEqualVsyncPeriod(ScreenId id, bool isEqualVsyncPeriod) = 0;
206 
207     /* only used for mock tests */
208     virtual void MockHdiScreenConnected(std::unique_ptr<impl::RSScreen>& rsScreen) = 0;
209 
210     virtual bool IsAllScreensPowerOff() const = 0;
211 
212     // used to skip render frame or render only one frame when screen power is off.
213     virtual void MarkPowerOffNeedProcessOneFrame() = 0;
214 
215     virtual void ResetPowerOffNeedProcessOneFrame() = 0;
216 
217     virtual bool GetPowerOffNeedProcessOneFrame() const = 0;
218 
219     virtual bool IsScreenPowerOff(ScreenId id) const = 0;
220 
221     virtual void DisablePowerOffRenderControl(ScreenId id) = 0;
222 
223     virtual int GetDisableRenderControlScreensCount() const = 0;
224 
225 #ifdef USE_VIDEO_PROCESSING_ENGINE
226     virtual float GetScreenBrightnessNits(ScreenId id) const = 0;
227 #endif
228 
229 #ifdef RS_SUBSCRIBE_SENSOR_ENABLE
230     virtual void HandlePostureData(const SensorEvent * const event) = 0;
231 #endif
232     virtual void ForceRefreshOneFrameIfNoRNV() = 0;
233 
234     virtual void ClearFrameBufferIfNeed() = 0;
235 
236     virtual int32_t SetScreenConstraint(ScreenId id, uint64_t timestamp, ScreenConstraintType type) = 0;
237 
238     virtual bool GetDisplayPropertyForHardCursor(uint32_t screenId) = 0;
239 };
240 
241 sptr<RSScreenManager> CreateOrGetScreenManager();
242 
243 namespace impl {
244 struct ScreenHotPlugEvent {
245     std::shared_ptr<HdiOutput> output;
246     bool connected = false;
247 };
248 
249 enum class FoldState : uint32_t {
250     UNKNOW,
251     FOLDED,
252     EXPAND
253 };
254 
255 class RSScreenManager : public OHOS::Rosen::RSScreenManager {
256 public:
257     static sptr<OHOS::Rosen::RSScreenManager> GetInstance() noexcept;
258 
259     // noncopyable
260     RSScreenManager(const RSScreenManager &) = delete;
261     RSScreenManager &operator=(const RSScreenManager &) = delete;
262 
263     bool Init() noexcept override;
264 
GetDefaultScreenId()265     ScreenId GetDefaultScreenId() const override
266     {
267         return defaultScreenId_;
268     }
269 
270     std::vector<ScreenId> GetAllScreenIds() const override;
271 
272     void SetDefaultScreenId(ScreenId id) override;
273 
274     void SetScreenMirror(ScreenId id, ScreenId toMirror) override;
275 
276     ScreenId CreateVirtualScreen(
277         const std::string &name,
278         uint32_t width,
279         uint32_t height,
280         sptr<Surface> surface,
281         ScreenId mirrorId,
282         int32_t flags,
283         std::vector<uint64_t> whiteList) override;
284 
285     int32_t SetVirtualScreenBlackList(ScreenId id, const std::vector<uint64_t>& blackList) override;
286 
287     int32_t AddVirtualScreenBlackList(ScreenId id, const std::vector<uint64_t>& blackList) override;
288 
289     int32_t RemoveVirtualScreenBlackList(ScreenId id, const std::vector<uint64_t>& blackList) override;
290 
291     int32_t SetVirtualScreenSecurityExemptionList(
292         ScreenId id, const std::vector<uint64_t>& securityExemptionList) override;
293 
294     const std::vector<uint64_t> GetVirtualScreenSecurityExemptionList(ScreenId id) const override;
295 
296     int32_t SetCastScreenEnableSkipWindow(ScreenId id, bool enable) override;
297 
298     void GetCastScreenBlackList(std::unordered_set<uint64_t>& screenBlackList) override;
299 
300     bool GetCastScreenEnableSkipWindow(ScreenId id) override;
301 
302     std::unordered_set<uint64_t> GetVirtualScreenBlackList(ScreenId id) override;
303 
304     int32_t SetVirtualScreenSurface(ScreenId id, sptr<Surface> surface) override;
305 
306     bool GetAndResetVirtualSurfaceUpdateFlag(ScreenId id) const override;
307 
308     void RemoveVirtualScreen(ScreenId id) override;
309 
310     void SetScreenActiveMode(ScreenId id, uint32_t modeId) override;
311 
312     int32_t SetRogScreenResolution(ScreenId id, uint32_t width, uint32_t height) override;
313 
314     int32_t SetVirtualScreenResolution(ScreenId id, uint32_t width, uint32_t height) override;
315 
316     void SetScreenPowerStatus(ScreenId id, ScreenPowerStatus status) override;
317 
318     bool SetVirtualMirrorScreenCanvasRotation(ScreenId id, bool canvasRotation) override;
319 
320     bool SetVirtualMirrorScreenScaleMode(ScreenId id, ScreenScaleMode ScaleMode) override;
321 
322     void GetVirtualScreenResolution(ScreenId id, RSVirtualScreenResolution& virtualScreenResolution) const override;
323 
324     void GetScreenActiveMode(ScreenId id, RSScreenModeInfo& screenModeInfo) const override;
325 
326     std::vector<RSScreenModeInfo> GetScreenSupportedModes(ScreenId id) const override;
327 
328     RSScreenCapability GetScreenCapability(ScreenId id) const override;
329 
330     ScreenPowerStatus GetScreenPowerStatus(ScreenId id) const override;
331 
332     ScreenRotation GetScreenCorrection(ScreenId id) const override;
333 
334     RSScreenData GetScreenData(ScreenId id) const  override;
335 
336     ScreenInfo QueryDefaultScreenInfo() const override;
337 
338     ScreenInfo QueryScreenInfo(ScreenId id) const override;
339 
340     sptr<Surface> GetProducerSurface(ScreenId id) const override;
341 
342     bool GetCanvasRotation(ScreenId id) const override;
343 
344     ScreenScaleMode GetScaleMode(ScreenId id) const override;
345 
346     std::shared_ptr<HdiOutput> GetOutput(ScreenId id) const override;
347 
348     int32_t AddScreenChangeCallback(const sptr<RSIScreenChangeCallback> &callback) override;
349 
350     void RemoveScreenChangeCallback(const sptr<RSIScreenChangeCallback> &callback) override;
351 
352     void ProcessScreenHotPlugEvents() override;
353 
354     bool TrySimpleProcessHotPlugEvents() override;
355 
356     void DisplayDump(std::string& dumpString) override;
357 
358     void SurfaceDump(std::string& dumpString) override;
359 
360     void FpsDump(std::string& dumpString, std::string& arg) override;
361 
362     void ClearFpsDump(std::string& dumpString, std::string& arg) override;
363 
364     void HitchsDump(std::string& dumpString, std::string& arg) override;
365 
366     int32_t ResizeVirtualScreen(ScreenId id, uint32_t width, uint32_t height) override;
367 
368     int32_t GetScreenBacklight(ScreenId id) const override;
369 
370     void SetScreenBacklight(ScreenId id, uint32_t level) override;
371 
372     int32_t GetScreenSupportedColorGamuts(ScreenId id, std::vector<ScreenColorGamut>& mode) const override;
373 
374     int32_t GetScreenSupportedMetaDataKeys(ScreenId id, std::vector<ScreenHDRMetadataKey>& keys) const override;
375 
376     int32_t GetScreenColorGamut(ScreenId id, ScreenColorGamut& mode) const override;
377 
378     uint32_t GetActualScreensNum() const override;
379 
380     int32_t SetScreenColorGamut(ScreenId id, int32_t modeIdx) override;
381 
382     int32_t SetScreenGamutMap(ScreenId id, ScreenGamutMap mode) override;
383 
384     int32_t SetScreenCorrection(ScreenId id, ScreenRotation screenRotation) override;
385 
386     int32_t GetScreenGamutMap(ScreenId id, ScreenGamutMap& mode) const override;
387 
388     int32_t GetScreenHDRCapability(ScreenId id, RSScreenHDRCapability& screenHdrCapability) const override;
389 
390     int32_t GetScreenType(ScreenId id, RSScreenType& type) const override;
391 
392     int32_t SetScreenSkipFrameInterval(ScreenId id, uint32_t skipFrameInterval) override;
393 
394     int32_t GetPixelFormat(ScreenId id, GraphicPixelFormat& pixelFormat) const override;
395 
396     int32_t SetPixelFormat(ScreenId id, GraphicPixelFormat pixelFormat) override;
397 
398     int32_t GetScreenSupportedHDRFormats(ScreenId id, std::vector<ScreenHDRFormat>& hdrFormats) const override;
399 
400     int32_t GetScreenHDRFormat(ScreenId id, ScreenHDRFormat& hdrFormat) const override;
401 
402     int32_t SetScreenHDRFormat(ScreenId id, int32_t modeIdx) override;
403 
404     int32_t GetScreenSupportedColorSpaces(
405         ScreenId id, std::vector<GraphicCM_ColorSpaceType>& colorSpaces) const override;
406 
407     int32_t GetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType& colorSpace) const override;
408 
409     int32_t SetScreenColorSpace(ScreenId id, GraphicCM_ColorSpaceType colorSpace) override;
410 
411     ScreenId GetActiveScreenId() override;
412 
413     int32_t SetVirtualScreenRefreshRate(ScreenId id, uint32_t maxRefreshRate, uint32_t& actualRefreshRate) override;
414 
415     void SetEqualVsyncPeriod(ScreenId id, bool isEqualVsyncPeriod) override;
416 
417     /* only used for mock tests */
MockHdiScreenConnected(std::unique_ptr<impl::RSScreen> & rsScreen)418     void MockHdiScreenConnected(std::unique_ptr<impl::RSScreen>& rsScreen) override
419     {
420         if (rsScreen == nullptr) {
421             return;
422         }
423         screens_[rsScreen->Id()] = std::move(rsScreen);
424     }
425 
426     bool IsAllScreensPowerOff() const override;
427 
428     // used to skip render frame or render only one frame when screen power is off.
429     void MarkPowerOffNeedProcessOneFrame() override;
430 
431     void ResetPowerOffNeedProcessOneFrame() override;
432 
433     bool GetPowerOffNeedProcessOneFrame() const override;
434 
435     bool IsScreenPowerOff(ScreenId id) const override;
436 
437     void DisablePowerOffRenderControl(ScreenId id) override;
438 
439     int GetDisableRenderControlScreensCount() const override;
440 
441 #ifdef USE_VIDEO_PROCESSING_ENGINE
442     float GetScreenBrightnessNits(ScreenId id) const override;
443 #endif
444 
445 #ifdef RS_SUBSCRIBE_SENSOR_ENABLE
446     void HandlePostureData(const SensorEvent * const event) override;
447 #endif
448     void ForceRefreshOneFrameIfNoRNV() override;
449 
450     void ClearFrameBufferIfNeed() override;
451 
452     int32_t SetScreenConstraint(ScreenId id, uint64_t timestamp, ScreenConstraintType type) override;
453 
454     bool GetDisplayPropertyForHardCursor(uint32_t screenId) override;
455 
456 private:
457     RSScreenManager();
458     ~RSScreenManager() noexcept override;
459 
460     static void OnHotPlug(std::shared_ptr<HdiOutput> &output, bool connected, void *data);
461     void OnHotPlugEvent(std::shared_ptr<HdiOutput> &output, bool connected);
462     static void OnRefresh(ScreenId id, void *data);
463     void OnRefreshEvent(ScreenId id);
464     static void OnHwcDead(void *data);
465     void OnHwcDeadEvent();
466     static void OnScreenVBlankIdle(uint32_t devId, uint64_t ns, void *data);
467     void OnScreenVBlankIdleEvent(uint32_t devId, uint64_t ns);
468     void CleanAndReinit();
469     void ProcessScreenConnectedLocked(std::shared_ptr<HdiOutput> &output);
470     void AddScreenToHgm(std::shared_ptr<HdiOutput> &output);
471     void ProcessScreenDisConnectedLocked(std::shared_ptr<HdiOutput> &output);
472     void RemoveScreenFromHgm(std::shared_ptr<HdiOutput> &output);
473     void HandleDefaultScreenDisConnectedLocked();
474     void ForceRefreshOneFrame() const;
475     std::vector<ScreenHotPlugEvent> pendingHotPlugEvents_;
476 
477     void GetVirtualScreenResolutionLocked(ScreenId id, RSVirtualScreenResolution& virtualScreenResolution) const;
478     void GetScreenActiveModeLocked(ScreenId id, RSScreenModeInfo& screenModeInfo) const;
479     std::vector<RSScreenModeInfo> GetScreenSupportedModesLocked(ScreenId id) const;
480     RSScreenCapability GetScreenCapabilityLocked(ScreenId id) const;
481     ScreenPowerStatus GetScreenPowerStatusLocked(ScreenId id) const;
482     ScreenRotation GetScreenCorrectionLocked(ScreenId id) const;
483     int32_t GetScreenBacklightLocked(ScreenId id) const;
484 
485     void SetCastScreenBlackList(std::unordered_set<uint64_t>& screenBlackList);
486     void RemoveVirtualScreenLocked(ScreenId id);
487     ScreenId GenerateVirtualScreenIdLocked();
488     void ReuseVirtualScreenIdLocked(ScreenId id);
489 
490     int32_t GetScreenSupportedColorGamutsLocked(ScreenId id, std::vector<ScreenColorGamut>& mode) const;
491     int32_t GetScreenSupportedMetaDataKeysLocked(ScreenId id, std::vector<ScreenHDRMetadataKey>& keys) const;
492     int32_t GetScreenColorGamutLocked(ScreenId id, ScreenColorGamut& mode) const;
493     int32_t SetScreenColorGamutLocked(ScreenId id, int32_t modeIdx);
494     int32_t SetScreenGamutMapLocked(ScreenId id, ScreenGamutMap mode);
495     int32_t SetScreenCorrectionLocked(ScreenId id, ScreenRotation screenRotation);
496     int32_t GetScreenGamutMapLocked(ScreenId id, ScreenGamutMap& mode) const;
497     int32_t GetScreenHDRCapabilityLocked(ScreenId id, RSScreenHDRCapability& screenHdrCapability) const;
498     int32_t GetScreenTypeLocked(ScreenId id, RSScreenType& type) const;
499     int32_t SetScreenSkipFrameIntervalLocked(ScreenId id, uint32_t skipFrameInterval);
500     int32_t GetPixelFormatLocked(ScreenId id, GraphicPixelFormat& pixelFormat) const;
501     int32_t SetPixelFormatLocked(ScreenId id, GraphicPixelFormat pixelFormat);
502     int32_t GetScreenSupportedHDRFormatsLocked(ScreenId id, std::vector<ScreenHDRFormat>& hdrFormats) const;
503     int32_t GetScreenHDRFormatLocked(ScreenId id, ScreenHDRFormat& hdrFormat) const;
504     int32_t SetScreenHDRFormatLocked(ScreenId id, int32_t modeIdx);
505     int32_t GetScreenSupportedColorSpacesLocked(ScreenId id, std::vector<GraphicCM_ColorSpaceType>& colorSpaces) const;
506     int32_t GetScreenColorSpaceLocked(ScreenId id, GraphicCM_ColorSpaceType& colorSpace) const;
507     int32_t SetScreenColorSpaceLocked(ScreenId id, GraphicCM_ColorSpaceType colorSpace);
508     ScreenInfo QueryScreenInfoLocked(ScreenId id) const;
509 
510 #ifdef RS_SUBSCRIBE_SENSOR_ENABLE
511     void RegisterSensorCallback();
512     void UnRegisterSensorCallback();
513     void HandleSensorData(float angle);
514     FoldState TransferAngleToScreenState(float angle);
515 #endif
516 
517     void RegSetScreenVsyncEnabledCallbackForMainThread(ScreenId vsyncEnabledScreenId);
518     void RegSetScreenVsyncEnabledCallbackForHardwareThread(ScreenId vsyncEnabledScreenId);
519 
520     mutable std::mutex mutex_;
521     mutable std::mutex blackListMutex_;
522     HdiBackend *composer_ = nullptr;
523     ScreenId defaultScreenId_ = INVALID_SCREEN_ID;
524     std::map<ScreenId, std::shared_ptr<OHOS::Rosen::RSScreen>> screens_;
525     std::queue<ScreenId> freeVirtualScreenIds_;
526     uint32_t virtualScreenCount_ = 0;
527     uint32_t currentVirtualScreenNum_ = 0;
528     std::vector<sptr<RSIScreenChangeCallback>> screenChangeCallbacks_;
529     bool mipiCheckInFirstHotPlugEvent_ = false;
530     bool isHwcDead_ = false;
531     std::vector<ScreenId> connectedIds_;
532     std::unordered_map<ScreenId, ScreenRotation> screenCorrection_;
533     std::unordered_map<ScreenId, uint32_t> screenPowerStatus_;
534     std::unordered_map<ScreenId, uint32_t> screenBacklight_;
535     std::unordered_set<uint64_t> castScreenBlackLists_ = {};
536 
537     static std::once_flag createFlag_;
538     static sptr<OHOS::Rosen::RSScreenManager> instance_;
539 
540     uint64_t frameId_ = 0;
541     std::atomic<bool> powerOffNeedProcessOneFrame_ = false;
542     std::unordered_set<ScreenId> disableRenderControlScreens_ = {};
543 
544 #ifdef RS_SUBSCRIBE_SENSOR_ENABLE
545     SensorUser user;
546     bool isFoldScreenFlag_ = false;
547     ScreenId innerScreenId_ = 0;
548     ScreenId externalScreenId_ = INVALID_SCREEN_ID;
549     ScreenId activeScreenId_ = 0;
550     bool isFirstTimeToGetActiveScreenId_ = true;
551     bool isPostureSensorDataHandled_ = false;
552     std::condition_variable activeScreenIdAssignedCV_;
553     mutable std::mutex activeScreenIdAssignedMutex_;
554 #endif
555 };
556 } // namespace impl
557 } // namespace Rosen
558 } // namespace OHOS
559 #endif // RS_SCREEN_MANAGER
560