diff options
| author | lizzie <lizzie@eden-emu.dev> | 2025-11-27 15:31:34 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-11-27 15:31:34 +0100 |
| commit | 1efef853529074adc4c7c1b43bcd3288e4b43004 (patch) | |
| tree | 47a7ba410e2752d0a744063dbe73c707e4d77596 /src/core/memory.cpp | |
| parent | ea0e5d630c571bef0f02e6ef2d2058e14faf2ec3 (diff) | |
Partial revert "[common] remove HeapTracker (#3001)" (#3107)
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3107
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src/core/memory.cpp')
| -rw-r--r-- | src/core/memory.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 6ce6836146..bbd4c60a68 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -15,6 +15,7 @@ #include "common/assert.h" #include "common/atomic_ops.h" #include "common/common_types.h" +#include "common/heap_tracker.h" #include "common/logging/log.h" #include "common/page_table.h" #include "common/scope_exit.h" @@ -58,7 +59,13 @@ struct Memory::Impl { } else { current_page_table->fastmem_arena = nullptr; } + +#ifdef __ANDROID__ + heap_tracker.emplace(system.DeviceMemory().buffer); + buffer = std::addressof(*heap_tracker); +#else buffer = std::addressof(system.DeviceMemory().buffer); +#endif } void MapMemoryRegion(Common::PageTable& page_table, Common::ProcessAddress base, u64 size, @@ -1016,7 +1023,12 @@ struct Memory::Impl { std::array<Common::ScratchBuffer<u32>, Core::Hardware::NUM_CPU_CORES> scratch_buffers{}; std::span<Core::GPUDirtyMemoryManager> gpu_dirty_managers; std::mutex sys_core_guard; +#ifdef __ANDROID__ + std::optional<Common::HeapTracker> heap_tracker; + Common::HeapTracker* buffer{}; +#else Common::HostMemory* buffer{}; +#endif }; Memory::Memory(Core::System& system_) : system{system_} { @@ -1217,11 +1229,22 @@ bool Memory::InvalidateNCE(Common::ProcessAddress vaddr, size_t size) { if (rasterizer) { impl->InvalidateGPUMemory(ptr, size); } + +#ifdef __ANDROID__ + if (!rasterizer && mapped) { + impl->buffer->DeferredMapSeparateHeap(GetInteger(vaddr)); + } +#endif + return mapped && ptr != nullptr; } bool Memory::InvalidateSeparateHeap(void* fault_address) { +#ifdef __ANDROID__ + return impl->buffer->DeferredMapSeparateHeap(static_cast<u8*>(fault_address)); +#else return false; +#endif } } // namespace Core::Memory |
