/* * Copyright (C) 2018-2021 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "shared/source/os_interface/os_time.h" namespace NEO { static int PerfTicks = 0; class MockDeviceTime : public DeviceTime { bool getCpuGpuTime(TimeStampData *pGpuCpuTime, OSTime *osTime) override { pGpuCpuTime->GPUTimeStamp = ++PerfTicks; pGpuCpuTime->CPUTimeinNS = PerfTicks; return true; } double getDynamicDeviceTimerResolution(HardwareInfo const &hwInfo) const override { return OSTime::getDeviceTimerResolution(hwInfo); } uint64_t getDynamicDeviceTimerClock(HardwareInfo const &hwInfo) const override { return static_cast(1000000000.0 / OSTime::getDeviceTimerResolution(hwInfo)); } }; class MockOSTime : public OSTime { public: MockOSTime() { this->deviceTime = std::make_unique(); } bool getCpuTime(uint64_t *timeStamp) override { *timeStamp = ++PerfTicks; return true; }; double getHostTimerResolution() const override { return 0; } uint64_t getCpuRawTimestamp() override { return 0; } static std::unique_ptr create() { return std::unique_ptr(new MockOSTime()); } }; class MockDeviceTimeWithConstTimestamp : public DeviceTime { public: static constexpr uint64_t CPU_TIME_IN_NS = 1u; static constexpr uint64_t GPU_TIMESTAMP = 2u; bool getCpuGpuTime(TimeStampData *pGpuCpuTime, OSTime *osTime) override { pGpuCpuTime->GPUTimeStamp = GPU_TIMESTAMP; pGpuCpuTime->CPUTimeinNS = CPU_TIME_IN_NS; return true; } double getDynamicDeviceTimerResolution(HardwareInfo const &hwInfo) const override { return 1.0; } uint64_t getDynamicDeviceTimerClock(HardwareInfo const &hwInfo) const override { return static_cast(1000000000.0 / OSTime::getDeviceTimerResolution(hwInfo)); } }; class MockOSTimeWithConstTimestamp : public OSTime { public: MockOSTimeWithConstTimestamp() { this->deviceTime = std::make_unique(); } bool getCpuTime(uint64_t *timeStamp) override { *timeStamp = MockDeviceTimeWithConstTimestamp::CPU_TIME_IN_NS; return true; } double getHostTimerResolution() const override { return 0; } uint64_t getCpuRawTimestamp() override { return 0; } }; } // namespace NEO