forked from suyu/suyu
core: hle: kernel: Add KDynamicResourceManager.
This commit is contained in:
parent
9ec5f75f43
commit
d02ccfb15d
2 changed files with 59 additions and 0 deletions
|
@ -191,6 +191,7 @@ add_library(core STATIC
|
||||||
hle/kernel/k_condition_variable.cpp
|
hle/kernel/k_condition_variable.cpp
|
||||||
hle/kernel/k_condition_variable.h
|
hle/kernel/k_condition_variable.h
|
||||||
hle/kernel/k_dynamic_page_manager.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_dynamic_slab_heap.h
|
||||||
hle/kernel/k_event.cpp
|
hle/kernel/k_event.cpp
|
||||||
hle/kernel/k_event.h
|
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 a new issue