forked from eden-emu/eden
		
	hle: nvflinger: Add implementation for HosBinderDriverServer service.
This commit is contained in:
		
							parent
							
								
									56284bff6c
								
							
						
					
					
						commit
						a87812c6a1
					
				
					 3 changed files with 75 additions and 0 deletions
				
			
		|  | @ -553,6 +553,8 @@ add_library(core STATIC | ||||||
|     hle/service/nvflinger/consumer_listener.h |     hle/service/nvflinger/consumer_listener.h | ||||||
|     hle/service/nvflinger/graphic_buffer_producer.cpp |     hle/service/nvflinger/graphic_buffer_producer.cpp | ||||||
|     hle/service/nvflinger/graphic_buffer_producer.h |     hle/service/nvflinger/graphic_buffer_producer.h | ||||||
|  |     hle/service/nvflinger/hos_binder_driver_server.cpp | ||||||
|  |     hle/service/nvflinger/hos_binder_driver_server.h | ||||||
|     hle/service/nvflinger/nvflinger.cpp |     hle/service/nvflinger/nvflinger.cpp | ||||||
|     hle/service/nvflinger/nvflinger.h |     hle/service/nvflinger/nvflinger.h | ||||||
|     hle/service/nvflinger/parcel.h |     hle/service/nvflinger/parcel.h | ||||||
|  |  | ||||||
							
								
								
									
										36
									
								
								src/core/hle/service/nvflinger/hos_binder_driver_server.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/core/hle/service/nvflinger/hos_binder_driver_server.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | ||||||
|  | // SPDX-License-Identifier: GPL-3.0-or-later
 | ||||||
|  | // Copyright 2021 yuzu Emulator Project
 | ||||||
|  | 
 | ||||||
|  | #include <mutex> | ||||||
|  | 
 | ||||||
|  | #include "common/common_types.h" | ||||||
|  | #include "core/hle/service/nvflinger/hos_binder_driver_server.h" | ||||||
|  | 
 | ||||||
|  | namespace Service::NVFlinger { | ||||||
|  | 
 | ||||||
|  | HosBinderDriverServer::HosBinderDriverServer(Core::System& system_) | ||||||
|  |     : service_context(system_, "HosBinderDriverServer") {} | ||||||
|  | 
 | ||||||
|  | HosBinderDriverServer::~HosBinderDriverServer() {} | ||||||
|  | 
 | ||||||
|  | u64 HosBinderDriverServer::RegisterProducer(std::unique_ptr<android::IBinder>&& binder) { | ||||||
|  |     std::lock_guard lk{lock}; | ||||||
|  | 
 | ||||||
|  |     last_id++; | ||||||
|  | 
 | ||||||
|  |     producers[last_id] = std::move(binder); | ||||||
|  | 
 | ||||||
|  |     return last_id; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | android::IBinder* HosBinderDriverServer::TryGetProducer(u64 id) { | ||||||
|  |     std::lock_guard lk{lock}; | ||||||
|  | 
 | ||||||
|  |     if (auto search = producers.find(id); search != producers.end()) { | ||||||
|  |         return search->second.get(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return {}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } // namespace Service::NVFlinger
 | ||||||
							
								
								
									
										37
									
								
								src/core/hle/service/nvflinger/hos_binder_driver_server.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/core/hle/service/nvflinger/hos_binder_driver_server.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | ||||||
|  | // SPDX-License-Identifier: GPL-3.0-or-later
 | ||||||
|  | // Copyright 2021 yuzu Emulator Project
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <memory> | ||||||
|  | #include <mutex> | ||||||
|  | #include <unordered_map> | ||||||
|  | 
 | ||||||
|  | #include "common/common_types.h" | ||||||
|  | #include "core/hle/service/kernel_helpers.h" | ||||||
|  | #include "core/hle/service/nvflinger/binder.h" | ||||||
|  | 
 | ||||||
|  | namespace Core { | ||||||
|  | class System; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | namespace Service::NVFlinger { | ||||||
|  | 
 | ||||||
|  | class HosBinderDriverServer final { | ||||||
|  | public: | ||||||
|  |     explicit HosBinderDriverServer(Core::System& system_); | ||||||
|  |     ~HosBinderDriverServer(); | ||||||
|  | 
 | ||||||
|  |     u64 RegisterProducer(std::unique_ptr<android::IBinder>&& binder); | ||||||
|  | 
 | ||||||
|  |     android::IBinder* TryGetProducer(u64 id); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     KernelHelpers::ServiceContext service_context; | ||||||
|  | 
 | ||||||
|  |     std::unordered_map<u64, std::unique_ptr<android::IBinder>> producers; | ||||||
|  |     std::mutex lock; | ||||||
|  |     u64 last_id{}; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } // namespace Service::NVFlinger
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bunnei
						bunnei