1 /* 2 * Copyright (c) 2021-2022 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 FOUNDATION_DMSERVER_DISPLAY_MANAGER_SERVICE_H 17 #define FOUNDATION_DMSERVER_DISPLAY_MANAGER_SERVICE_H 18 19 #include <map> 20 #include <mutex> 21 22 #include <system_ability.h> 23 #include <surface.h> 24 #include <ui/rs_display_node.h> 25 26 #include "atomic_map.h" 27 #include "dm_common.h" 28 #include "display_dumper.h" 29 #include "screen.h" 30 #include "abstract_display.h" 31 #include "abstract_display_controller.h" 32 #include "abstract_screen_controller.h" 33 #include "display_change_listener.h" 34 #include "display_cutout_controller.h" 35 #include "display_manager_stub.h" 36 #include "display_power_controller.h" 37 #include "singleton_delegator.h" 38 #include "window_info_queried_listener.h" 39 40 namespace OHOS::Rosen { 41 class DisplayManagerService : public SystemAbility, public DisplayManagerStub { 42 DECLARE_SYSTEM_ABILITY(DisplayManagerService); 43 WM_DECLARE_SINGLE_INSTANCE_BASE(DisplayManagerService); 44 45 public: 46 int Dump(int fd, const std::vector<std::u16string>& args) override; 47 void OnStart() override; 48 void OnStop() override; 49 ScreenId CreateVirtualScreen(VirtualScreenOption option, 50 const sptr<IRemoteObject>& displayManagerAgent) override; 51 DMError DestroyVirtualScreen(ScreenId screenId) override; 52 DMError SetVirtualScreenSurface(ScreenId screenId, sptr<IBufferProducer> surface) override; 53 DMError IsScreenRotationLocked(bool& isLocked) override; 54 DMError SetScreenRotationLocked(bool isLocked) override; 55 56 sptr<DisplayInfo> GetDefaultDisplayInfo() override; 57 sptr<DisplayInfo> GetDisplayInfoById(DisplayId displayId) override; 58 sptr<DisplayInfo> GetDisplayInfoByScreen(ScreenId screenId) override; 59 sptr<CutoutInfo> GetCutoutInfo(DisplayId displayId) override; 60 DMError SetOrientation(ScreenId screenId, Orientation orientation) override; 61 DMError SetOrientationFromWindow(ScreenId screenId, Orientation orientation, bool withAnimation); 62 bool SetRotationFromWindow(ScreenId screenId, Rotation targetRotation, bool withAnimation); 63 void SetGravitySensorSubscriptionEnabled(); 64 std::shared_ptr<Media::PixelMap> GetDisplaySnapshot(DisplayId displayId, DmErrorCode* errorCode) override; 65 DMError HasPrivateWindow(DisplayId id, bool& hasPrivateWindow) override; 66 // colorspace, gamut 67 DMError GetScreenSupportedColorGamuts(ScreenId screenId, std::vector<ScreenColorGamut>& colorGamuts) override; 68 DMError GetScreenColorGamut(ScreenId screenId, ScreenColorGamut& colorGamut) override; 69 DMError SetScreenColorGamut(ScreenId screenId, int32_t colorGamutIdx) override; 70 DMError GetScreenGamutMap(ScreenId screenId, ScreenGamutMap& gamutMap) override; 71 DMError SetScreenGamutMap(ScreenId screenId, ScreenGamutMap gamutMap) override; 72 DMError SetScreenColorTransform(ScreenId screenId) override; 73 74 DMError RegisterDisplayManagerAgent(const sptr<IDisplayManagerAgent>& displayManagerAgent, 75 DisplayManagerAgentType type) override; 76 DMError UnregisterDisplayManagerAgent(const sptr<IDisplayManagerAgent>& displayManagerAgent, 77 DisplayManagerAgentType type) override; 78 bool WakeUpBegin(PowerStateChangeReason reason) override; 79 bool WakeUpEnd() override; 80 bool SuspendBegin(PowerStateChangeReason reason) override; 81 bool SuspendEnd() override; 82 bool SetScreenPowerForAll(ScreenPowerState state, PowerStateChangeReason reason) override; 83 ScreenPowerState GetScreenPower(ScreenId dmsScreenId) override; 84 bool SetDisplayState(DisplayState state) override; 85 void UpdateRSTree(DisplayId displayId, DisplayId parentDisplayId, std::shared_ptr<RSSurfaceNode>& surfaceNode, 86 bool isAdd, bool isMultiDisplay); 87 DMError AddSurfaceNodeToDisplay(DisplayId displayId, 88 std::shared_ptr<RSSurfaceNode>& surfaceNode, bool onTop = true) override; 89 DMError RemoveSurfaceNodeFromDisplay(DisplayId displayId, std::shared_ptr<RSSurfaceNode>& surfaceNode) override; 90 DisplayState GetDisplayState(DisplayId displayId) override; 91 void NotifyDisplayEvent(DisplayEvent event) override; 92 bool SetFreeze(std::vector<DisplayId> displayIds, bool isFreeze) override; 93 94 DMError MakeMirror(ScreenId mainScreenId, std::vector<ScreenId> mirrorScreenIds, ScreenId& screenGroupId) override; 95 DMError MakeExpand(std::vector<ScreenId> screenId, std::vector<Point> startPoints, 96 ScreenId& screenGroupId) override; 97 DMError StopMirror(const std::vector<ScreenId>& mirrorScreenIds) override; 98 DMError StopExpand(const std::vector<ScreenId>& expandScreenIds) override; 99 void RemoveVirtualScreenFromGroup(std::vector<ScreenId> screens) override; 100 sptr<ScreenInfo> GetScreenInfoById(ScreenId screenId) override; 101 sptr<ScreenGroupInfo> GetScreenGroupInfoById(ScreenId screenId) override; 102 ScreenId GetScreenGroupIdByScreenId(ScreenId screenId); 103 DMError GetAllScreenInfos(std::vector<sptr<ScreenInfo>>& screenInfos) override; 104 105 std::vector<DisplayId> GetAllDisplayIds() override; 106 DMError SetScreenActiveMode(ScreenId screenId, uint32_t modeId) override; 107 DMError SetVirtualPixelRatio(ScreenId screenId, float virtualPixelRatio) override; 108 void RegisterDisplayChangeListener(sptr<IDisplayChangeListener> listener); 109 void RegisterWindowInfoQueriedListener(const sptr<IWindowInfoQueriedListener>& listener); 110 void NotifyPrivateWindowStateChanged(bool hasPrivate); 111 112 private: 113 DisplayManagerService(); 114 ~DisplayManagerService() = default; 115 bool Init(); 116 void NotifyDisplayStateChange(DisplayId defaultDisplayId, sptr<DisplayInfo> displayInfo, 117 const std::map<DisplayId, sptr<DisplayInfo>>& displayInfoMap, DisplayStateChangeType type); 118 void NotifyScreenshot(DisplayId displayId); 119 ScreenId GetScreenIdByDisplayId(DisplayId displayId) const; 120 void ConfigureDisplayManagerService(); 121 void ConfigureWaterfallDisplayCompressionParams(); 122 123 std::recursive_mutex mutex_; 124 static inline SingletonDelegator<DisplayManagerService> delegator_; 125 sptr<AbstractDisplayController> abstractDisplayController_; 126 sptr<AbstractScreenController> abstractScreenController_; 127 sptr<DisplayPowerController> displayPowerController_; 128 sptr<DisplayCutoutController> displayCutoutController_; 129 sptr<IDisplayChangeListener> displayChangeListener_; 130 sptr<IWindowInfoQueriedListener> windowInfoQueriedListener_; 131 sptr<DisplayDumper> displayDumper_; 132 AtomicMap<ScreenId, uint32_t> accessTokenIdMaps_; 133 bool isAutoRotationOpen_; 134 }; 135 } // namespace OHOS::Rosen 136 137 #endif // FOUNDATION_DMSERVER_DISPLAY_MANAGER_SERVICE_H