#ifndef EMULATOR_SRC_GRAPHICS_HOST_GPU_PAGEMANAGER_H_ #define EMULATOR_SRC_GRAPHICS_HOST_GPU_PAGEMANAGER_H_ #include "common/common.h" #include "graphics/host_gpu/regionDefinitions.h" #include namespace Libs::Graphics { enum class PageFaultAccess { Read, Write, Execute, Unknown }; class PageManager final { public: PageManager(); // The owner must stop all PageManager callers before destruction. ~PageManager(); KYTY_CLASS_NO_COPY(PageManager); [[nodiscard]] uint64_t GetPageSize() const; template void UpdatePageWatchers(uint64_t vaddr, uint64_t size); template void UpdatePageWatchersForRegion(uint64_t base_addr, RegionBits& mask); void OnGpuMap(uint64_t vaddr, uint64_t size); void OnGpuUnmap(uint64_t vaddr, uint64_t size); private: struct Impl; std::unique_ptr m_impl; }; } // namespace Libs::Graphics #endif // EMULATOR_SRC_GRAPHICS_HOST_GPU_PAGEMANAGER_H_