/* * Copyright (C) 2019-2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "shared/source/memory_manager/memory_operations_handler.h" #include "shared/source/utilities/spinlock.h" #include "aubstream/aub_manager.h" #include #include namespace NEO { class AubMemoryOperationsHandler : public MemoryOperationsHandler { public: AubMemoryOperationsHandler(aub_stream::AubManager *aubManager); ~AubMemoryOperationsHandler() override = default; MemoryOperationsStatus makeResident(Device *device, ArrayRef gfxAllocations) override; MemoryOperationsStatus evict(Device *device, GraphicsAllocation &gfxAllocation) override; MemoryOperationsStatus isResident(Device *device, GraphicsAllocation &gfxAllocation) override; MemoryOperationsStatus makeResidentWithinOsContext(OsContext *osContext, ArrayRef gfxAllocations, bool evictable) override; MemoryOperationsStatus evictWithinOsContext(OsContext *osContext, GraphicsAllocation &gfxAllocation) override; void setAubManager(aub_stream::AubManager *aubManager); protected: [[nodiscard]] MOCKABLE_VIRTUAL std::unique_lock acquireLock(SpinLock &lock) { return std::unique_lock{lock}; } aub_stream::AubManager *aubManager = nullptr; std::vector residentAllocations; SpinLock resourcesLock; }; } // namespace NEO