hle: kernel: KMemoryManager: Add CalculateManagementOverheadSize.
This commit is contained in:
		| @@ -173,4 +173,16 @@ ResultCode KMemoryManager::Free(KPageLinkedList& page_list, std::size_t num_page | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
|  | ||||
| std::size_t KMemoryManager::Impl::CalculateManagementOverheadSize(std::size_t region_size) { | ||||
|     const std::size_t ref_count_size = (region_size / PageSize) * sizeof(u16); | ||||
|     const std::size_t optimize_map_size = | ||||
|         (Common::AlignUp((region_size / PageSize), Common::BitSize<u64>()) / | ||||
|          Common::BitSize<u64>()) * | ||||
|         sizeof(u64); | ||||
|     const std::size_t manager_meta_size = | ||||
|         Common::AlignUp(optimize_map_size + ref_count_size, PageSize); | ||||
|     const std::size_t page_heap_size = KPageHeap::CalculateManagementOverheadSize(region_size); | ||||
|     return manager_meta_size + page_heap_size; | ||||
| } | ||||
|  | ||||
| } // namespace Kernel | ||||
|   | ||||
| @@ -60,6 +60,10 @@ public: | ||||
|     static constexpr std::size_t MaxManagerCount = 10; | ||||
|  | ||||
| public: | ||||
|     static std::size_t CalculateManagementOverheadSize(std::size_t region_size) { | ||||
|         return Impl::CalculateManagementOverheadSize(region_size); | ||||
|     } | ||||
|  | ||||
|     static constexpr u32 EncodeOption(Pool pool, Direction dir) { | ||||
|         return (static_cast<u32>(pool) << static_cast<u32>(Pool::Shift)) | | ||||
|                (static_cast<u32>(dir) << static_cast<u32>(Direction::Shift)); | ||||
| @@ -89,6 +93,16 @@ private: | ||||
|         KPageHeap heap; | ||||
|         Pool pool{}; | ||||
|  | ||||
|     public: | ||||
|         static std::size_t CalculateManagementOverheadSize(std::size_t region_size); | ||||
|  | ||||
|         static constexpr std::size_t CalculateOptimizedProcessOverheadSize( | ||||
|             std::size_t region_size) { | ||||
|             return (Common::AlignUp((region_size / PageSize), Common::BitSize<u64>()) / | ||||
|                     Common::BitSize<u64>()) * | ||||
|                    sizeof(u64); | ||||
|         } | ||||
|  | ||||
|     public: | ||||
|         Impl() = default; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei