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