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