mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 15:39:02 -05:00 
			
		
		
		
	Services: Vi shouldn't be responsible for creating nvflinger.
It is now created during Service initialization and passed to all the services that need it.
This commit is contained in:
		| @@ -165,6 +165,10 @@ void AddNamedPort(std::string name, SharedPtr<ClientPort> port) { | ||||
|  | ||||
| /// Initialize ServiceManager | ||||
| void Init() { | ||||
|     // NVFlinger needs to be accessed by several services like Vi and AppletOE so we instantiate it | ||||
|     // here and pass it into the respective InstallInterfaces functions. | ||||
|     auto nv_flinger = std::make_shared<NVFlinger::NVFlinger>(); | ||||
|  | ||||
|     SM::g_service_manager = std::make_shared<SM::ServiceManager>(); | ||||
|     SM::ServiceManager::InstallInterfaces(SM::g_service_manager); | ||||
|  | ||||
| @@ -180,7 +184,7 @@ void Init() { | ||||
|     PCTL::InstallInterfaces(*SM::g_service_manager); | ||||
|     Sockets::InstallInterfaces(*SM::g_service_manager); | ||||
|     Time::InstallInterfaces(*SM::g_service_manager); | ||||
|     VI::InstallInterfaces(*SM::g_service_manager); | ||||
|     VI::InstallInterfaces(*SM::g_service_manager, nv_flinger); | ||||
|     Set::InstallInterfaces(*SM::g_service_manager); | ||||
|  | ||||
|     LOG_DEBUG(Service, "initialized OK"); | ||||
|   | ||||
| @@ -753,8 +753,9 @@ IApplicationDisplayService::IApplicationDisplayService( | ||||
|     RegisterHandlers(functions); | ||||
| } | ||||
|  | ||||
| void InstallInterfaces(SM::ServiceManager& service_manager) { | ||||
|     std::make_shared<VI_M>()->InstallAsService(service_manager); | ||||
| void InstallInterfaces(SM::ServiceManager& service_manager, | ||||
|                        std::shared_ptr<NVFlinger::NVFlinger> nv_flinger) { | ||||
|     std::make_shared<VI_M>(nv_flinger)->InstallAsService(service_manager); | ||||
| } | ||||
|  | ||||
| } // namespace VI | ||||
|   | ||||
| @@ -39,7 +39,8 @@ private: | ||||
| }; | ||||
|  | ||||
| /// Registers all VI services with the specified service manager. | ||||
| void InstallInterfaces(SM::ServiceManager& service_manager); | ||||
| void InstallInterfaces(SM::ServiceManager& service_manager, | ||||
|                        std::shared_ptr<NVFlinger::NVFlinger> nv_flinger); | ||||
|  | ||||
| } // namespace VI | ||||
| } // namespace Service | ||||
|   | ||||
| @@ -17,13 +17,13 @@ void VI_M::GetDisplayService(Kernel::HLERequestContext& ctx) { | ||||
|     rb.PushIpcInterface<IApplicationDisplayService>(nv_flinger); | ||||
| } | ||||
|  | ||||
| VI_M::VI_M() : ServiceFramework("vi:m") { | ||||
| VI_M::VI_M(std::shared_ptr<NVFlinger::NVFlinger> nv_flinger) | ||||
|     : ServiceFramework("vi:m"), nv_flinger(std::move(nv_flinger)) { | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {2, &VI_M::GetDisplayService, "GetDisplayService"}, | ||||
|         {3, nullptr, "GetDisplayServiceWithProxyNameExchange"}, | ||||
|     }; | ||||
|     RegisterHandlers(functions); | ||||
|     nv_flinger = std::make_shared<NVFlinger::NVFlinger>(); | ||||
| } | ||||
|  | ||||
| } // namespace VI | ||||
|   | ||||
| @@ -16,7 +16,7 @@ namespace VI { | ||||
|  | ||||
| class VI_M final : public ServiceFramework<VI_M> { | ||||
| public: | ||||
|     VI_M(); | ||||
|     VI_M(std::shared_ptr<NVFlinger::NVFlinger> nv_flinger); | ||||
|     ~VI_M() = default; | ||||
|  | ||||
| private: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Subv
					Subv