mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-30 18:24:15 +01:00 
			
		
		
		
	core: hle: kernel: Add KDynamicResourceManager.
This commit is contained in:
		
							parent
							
								
									9ec5f75f43
								
							
						
					
					
						commit
						d02ccfb15d
					
				| @ -191,6 +191,7 @@ add_library(core STATIC | ||||
|     hle/kernel/k_condition_variable.cpp | ||||
|     hle/kernel/k_condition_variable.h | ||||
|     hle/kernel/k_dynamic_page_manager.h | ||||
|     hle/kernel/k_dynamic_resource_manager.h | ||||
|     hle/kernel/k_dynamic_slab_heap.h | ||||
|     hle/kernel/k_event.cpp | ||||
|     hle/kernel/k_event.h | ||||
|  | ||||
							
								
								
									
										58
									
								
								src/core/hle/kernel/k_dynamic_resource_manager.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/core/hle/kernel/k_dynamic_resource_manager.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | ||||
| // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
 | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "common/common_funcs.h" | ||||
| #include "core/hle/kernel/k_dynamic_slab_heap.h" | ||||
| #include "core/hle/kernel/k_memory_block.h" | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
| template <typename T, bool ClearNode = false> | ||||
| class KDynamicResourceManager { | ||||
|     YUZU_NON_COPYABLE(KDynamicResourceManager); | ||||
|     YUZU_NON_MOVEABLE(KDynamicResourceManager); | ||||
| 
 | ||||
| public: | ||||
|     using DynamicSlabType = KDynamicSlabHeap<T, ClearNode>; | ||||
| 
 | ||||
| public: | ||||
|     constexpr KDynamicResourceManager() = default; | ||||
| 
 | ||||
|     constexpr size_t GetSize() const { | ||||
|         return m_slab_heap->GetSize(); | ||||
|     } | ||||
|     constexpr size_t GetUsed() const { | ||||
|         return m_slab_heap->GetUsed(); | ||||
|     } | ||||
|     constexpr size_t GetPeak() const { | ||||
|         return m_slab_heap->GetPeak(); | ||||
|     } | ||||
|     constexpr size_t GetCount() const { | ||||
|         return m_slab_heap->GetCount(); | ||||
|     } | ||||
| 
 | ||||
|     void Initialize(KDynamicPageManager* page_allocator, DynamicSlabType* slab_heap) { | ||||
|         m_page_allocator = page_allocator; | ||||
|         m_slab_heap = slab_heap; | ||||
|     } | ||||
| 
 | ||||
|     T* Allocate() const { | ||||
|         return m_slab_heap->Allocate(m_page_allocator); | ||||
|     } | ||||
| 
 | ||||
|     void Free(T* t) const { | ||||
|         m_slab_heap->Free(t); | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     KDynamicPageManager* m_page_allocator{}; | ||||
|     DynamicSlabType* m_slab_heap{}; | ||||
| }; | ||||
| 
 | ||||
| class KMemoryBlockSlabManager : public KDynamicResourceManager<KMemoryBlock> {}; | ||||
| 
 | ||||
| using KMemoryBlockSlabHeap = typename KMemoryBlockSlabManager::DynamicSlabType; | ||||
| 
 | ||||
| } // namespace Kernel
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user