aboutsummaryrefslogtreecommitdiff
path: root/src/common/heap_tracker.h
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2025-11-27 03:06:11 +0100
committercrueter <crueter@eden-emu.dev>2025-11-27 03:06:11 +0100
commitea0e5d630c571bef0f02e6ef2d2058e14faf2ec3 (patch)
treeb850b34317999df7801a3cde6e1f3820792993af /src/common/heap_tracker.h
parent9e610ea09843862c4cdf61b43e45cbb48c9271f7 (diff)
[common] remove HeapTracker (#3001)
Should fix a bunch of leaks on Android? - PLEASE CHECK UE4 GAMES Signed-off-by: lizzie lizzie@eden-emu.dev Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3001 Reviewed-by: Maufeat <sahyno1996@gmail.com> Reviewed-by: Caio Oliveira <caiooliveirafarias0@gmail.com> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src/common/heap_tracker.h')
-rw-r--r--src/common/heap_tracker.h98
1 files changed, 0 insertions, 98 deletions
diff --git a/src/common/heap_tracker.h b/src/common/heap_tracker.h
deleted file mode 100644
index ee5b0bf43a..0000000000
--- a/src/common/heap_tracker.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include <atomic>
-#include <mutex>
-#include <set>
-#include <shared_mutex>
-
-#include "common/host_memory.h"
-#include "common/intrusive_red_black_tree.h"
-
-namespace Common {
-
-struct SeparateHeapMap {
- Common::IntrusiveRedBlackTreeNode addr_node{};
- Common::IntrusiveRedBlackTreeNode tick_node{};
- VAddr vaddr{};
- PAddr paddr{};
- size_t size{};
- size_t tick{};
- MemoryPermission perm{};
- bool is_resident{};
-};
-
-struct SeparateHeapMapAddrComparator {
- static constexpr int Compare(const SeparateHeapMap& lhs, const SeparateHeapMap& rhs) {
- if (lhs.vaddr < rhs.vaddr) {
- return -1;
- } else if (lhs.vaddr <= (rhs.vaddr + rhs.size - 1)) {
- return 0;
- } else {
- return 1;
- }
- }
-};
-
-struct SeparateHeapMapTickComparator {
- static constexpr int Compare(const SeparateHeapMap& lhs, const SeparateHeapMap& rhs) {
- if (lhs.tick < rhs.tick) {
- return -1;
- } else if (lhs.tick > rhs.tick) {
- return 1;
- } else {
- return SeparateHeapMapAddrComparator::Compare(lhs, rhs);
- }
- }
-};
-
-class HeapTracker {
-public:
- explicit HeapTracker(Common::HostMemory& buffer);
- ~HeapTracker();
-
- void Map(size_t virtual_offset, size_t host_offset, size_t length, MemoryPermission perm,
- bool is_separate_heap);
- void Unmap(size_t virtual_offset, size_t size, bool is_separate_heap);
- void Protect(size_t virtual_offset, size_t length, MemoryPermission perm);
- u8* VirtualBasePointer() {
- return m_buffer.VirtualBasePointer();
- }
-
- bool DeferredMapSeparateHeap(u8* fault_address);
- bool DeferredMapSeparateHeap(size_t virtual_offset);
-
-private:
- using AddrTreeTraits =
- Common::IntrusiveRedBlackTreeMemberTraitsDeferredAssert<&SeparateHeapMap::addr_node>;
- using AddrTree = AddrTreeTraits::TreeType<SeparateHeapMapAddrComparator>;
-
- using TickTreeTraits =
- Common::IntrusiveRedBlackTreeMemberTraitsDeferredAssert<&SeparateHeapMap::tick_node>;
- using TickTree = TickTreeTraits::TreeType<SeparateHeapMapTickComparator>;
-
- AddrTree m_mappings{};
- TickTree m_resident_mappings{};
-
-private:
- void SplitHeapMap(VAddr offset, size_t size);
- void SplitHeapMapLocked(VAddr offset);
-
- AddrTree::iterator GetNearestHeapMapLocked(VAddr offset);
-
- void RebuildSeparateHeapAddressSpace();
-
-private:
- Common::HostMemory& m_buffer;
- const s64 m_max_resident_map_count;
-
- std::shared_mutex m_rebuild_lock{};
- std::mutex m_lock{};
- s64 m_map_count{};
- s64 m_resident_map_count{};
- size_t m_tick{};
-};
-
-} // namespace Common