fix: zeDeviceGetGlobalTimestamp to use submisison

Related-To: GSD-10253, GSD-9467, GSD-9381, NEO-11908

When EnableGlobalTimestampViaSubmission is set then
zeDeviceGetGlobalTimestamp uses immediate cmd submission
method to get GPU time.

Signed-off-by: Chandio, Bibrak Qamar <bibrak.qamar.chandio@intel.com>
This commit is contained in:
Chandio, Bibrak Qamar
2024-11-27 21:28:50 +00:00
committed by Compute-Runtime-Automation
parent ad881e3f2e
commit ab2e831a4a
25 changed files with 513 additions and 110 deletions

View File

@@ -17,7 +17,7 @@ class MockDeviceTimeDrm : public DeviceTimeDrm {
using DeviceTimeDrm::DeviceTimeDrm;
using DeviceTimeDrm::pDrm;
bool getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *osTime) override {
TimeQueryStatus getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *osTime) override {
getGpuCpuTimeImplCalled++;
if (callBaseGetGpuCpuTimeImpl) {
return DeviceTimeDrm::getGpuCpuTimeImpl(pGpuCpuTime, osTime);
@@ -34,7 +34,7 @@ class MockDeviceTimeDrm : public DeviceTimeDrm {
}
bool callBaseGetGpuCpuTimeImpl = true;
bool getGpuCpuTimeImplResult = true;
TimeQueryStatus getGpuCpuTimeImplResult = TimeQueryStatus::success;
TimeStampData gpuCpuTimeValue{};
uint32_t getGpuCpuTimeImplCalled = 0;

View File

@@ -16,7 +16,7 @@ constexpr uint64_t convertToNs = 100;
class MockDeviceTime : public DeviceTime {
public:
~MockDeviceTime() override = default;
bool getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *osTime) override {
TimeQueryStatus getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *osTime) override {
if (gpuTimeStampResult) {
pGpuCpuTime->gpuTimeStamp = *gpuTimeStampResult;
} else {
@@ -27,7 +27,7 @@ class MockDeviceTime : public DeviceTime {
} else {
pGpuCpuTime->cpuTimeinNS = perfTicks * convertToNs;
}
return true;
return TimeQueryStatus::success;
}
double getDynamicDeviceTimerResolution() const override {
@@ -75,10 +75,10 @@ class MockDeviceTimeWithConstTimestamp : public DeviceTime {
static constexpr uint64_t cpuTimeInNs = 1u;
static constexpr uint64_t gpuTimestamp = 2u;
bool getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *osTime) override {
TimeQueryStatus getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *osTime) override {
pGpuCpuTime->gpuTimeStamp = gpuTimestamp;
pGpuCpuTime->cpuTimeinNS = cpuTimeInNs;
return true;
return TimeQueryStatus::success;
}
double getDynamicDeviceTimerResolution() const override {

View File

@@ -632,6 +632,7 @@ ExperimentalUSMAllocationReuseVersion = -1
ForceNonWalkerSplitMemoryCopy = -1
FinalizerInputType = 0
FinalizerLibraryName = unk
EnableGlobalTimestampViaSubmission = 0
DirectSubmissionSwitchSemaphoreMode = -1
DisableProgrammableMetricsSupport = 0
OverrideTimestampWidth = -1

View File

@@ -105,8 +105,8 @@ TEST(RootDeviceEnvironment, whenCreatingRootDeviceEnvironmentThenCreateOsAgnosti
EXPECT_EQ(0u, rootDeviceEnvironment->osTime->getCpuRawTimestamp());
TimeStampData tsData{1, 2};
EXPECT_TRUE(rootDeviceEnvironment->osTime->getGpuCpuTime(&tsData));
EXPECT_EQ(0u, tsData.cpuTimeinNS);
TimeQueryStatus error = rootDeviceEnvironment->osTime->getGpuCpuTime(&tsData);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(0u, tsData.gpuTimeStamp);
EXPECT_EQ(profilingTimerResolution, rootDeviceEnvironment->osTime->getDynamicDeviceTimerResolution());

View File

@@ -67,6 +67,13 @@ TEST_F(DrmTimeTest, WhenGettingCpuTimeThenSucceeds) {
EXPECT_NE(0ULL, time);
}
TEST_F(DrmTimeTest, WhenGettingCpuTimeHostThenSucceeds) {
uint64_t time = 0;
auto error = osTime->getCpuTimeHost(&time);
EXPECT_FALSE(error);
EXPECT_NE(0ULL, time);
}
TEST_F(DrmTimeTest, GivenFalseTimeFuncWhenGettingCpuTimeThenFails) {
uint64_t time = 0;
osTime->setGetTimeFunc(getTimeFuncFalse);
@@ -79,12 +86,12 @@ TEST_F(DrmTimeTest, WhenGettingGpuCpuTimeThenSucceeds) {
TimeStampData gpuCpuTime02 = {0, 0};
auto pDrm = new DrmMockTime(mockFd, *executionEnvironment.rootDeviceEnvironments[0]);
osTime->updateDrm(pDrm);
auto error = osTime->getGpuCpuTime(&gpuCpuTime01);
EXPECT_TRUE(error);
TimeQueryStatus error = osTime->getGpuCpuTime(&gpuCpuTime01);
EXPECT_TRUE(error == TimeQueryStatus::success);
EXPECT_NE(0ULL, gpuCpuTime01.cpuTimeinNS);
EXPECT_NE(0ULL, gpuCpuTime01.gpuTimeStamp);
error = osTime->getGpuCpuTime(&gpuCpuTime02);
EXPECT_TRUE(error);
EXPECT_TRUE(error == TimeQueryStatus::success);
EXPECT_NE(0ULL, gpuCpuTime02.cpuTimeinNS);
EXPECT_NE(0ULL, gpuCpuTime02.gpuTimeStamp);
EXPECT_GT(gpuCpuTime02.gpuTimeStamp, gpuCpuTime01.gpuTimeStamp);
@@ -96,12 +103,12 @@ TEST_F(DrmTimeTest, GivenDrmWhenGettingGpuCpuTimeThenSucceeds) {
TimeStampData gpuCpuTime02 = {0, 0};
auto pDrm = new DrmMockTime(mockFd, *executionEnvironment.rootDeviceEnvironments[0]);
osTime->updateDrm(pDrm);
auto error = osTime->getGpuCpuTime(&gpuCpuTime01);
EXPECT_TRUE(error);
TimeQueryStatus error = osTime->getGpuCpuTime(&gpuCpuTime01);
EXPECT_TRUE(error == TimeQueryStatus::success);
EXPECT_NE(0ULL, gpuCpuTime01.cpuTimeinNS);
EXPECT_NE(0ULL, gpuCpuTime01.gpuTimeStamp);
error = osTime->getGpuCpuTime(&gpuCpuTime02);
EXPECT_TRUE(error);
EXPECT_TRUE(error == TimeQueryStatus::success);
EXPECT_NE(0ULL, gpuCpuTime02.cpuTimeinNS);
EXPECT_NE(0ULL, gpuCpuTime02.gpuTimeStamp);
EXPECT_GT(gpuCpuTime02.gpuTimeStamp, gpuCpuTime01.gpuTimeStamp);
@@ -112,9 +119,30 @@ TEST_F(DrmTimeTest, givenGetGpuCpuTimeWhenItIsUnavailableThenReturnFalse) {
TimeStampData gpuCpuTime = {0, 0};
deviceTime->callBaseGetGpuCpuTimeImpl = false;
deviceTime->getGpuCpuTimeImplResult = false;
auto error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_FALSE(error);
deviceTime->getGpuCpuTimeImplResult = TimeQueryStatus::deviceLost;
TimeQueryStatus error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::deviceLost);
}
class DrmMockFailCustom : public DrmMockFail {
public:
using Drm::getErrno;
using DrmMockFail::DrmMockFail;
int getErrno() override {
return EOPNOTSUPP;
}
};
TEST_F(DrmTimeTest, givenGetGpuCpuTimeWhenItIsUnavailableThenReturnUnsupportedFeature) {
TimeStampData gpuCpuTime = {0, 0};
auto pDrm = new DrmMockFailCustom(*executionEnvironment.rootDeviceEnvironments[0]);
osTime->updateDrm(pDrm);
deviceTime->callBaseGetGpuCpuTimeImpl = true;
TimeQueryStatus error = deviceTime->getGpuCpuTimeImpl(&gpuCpuTime, osTime.get());
EXPECT_EQ(error, TimeQueryStatus::unsupportedFeature);
}
TEST_F(DrmTimeTest, given36BitGpuTimeStampWhenGpuTimeStampOverflowThenGpuTimeDoesNotDecrease) {
@@ -122,29 +150,35 @@ TEST_F(DrmTimeTest, given36BitGpuTimeStampWhenGpuTimeStampOverflowThenGpuTimeDoe
deviceTime->callBaseGetGpuCpuTimeImpl = false;
deviceTime->gpuCpuTimeValue = {100ull, 100ull};
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
TimeQueryStatus error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(100ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 200ll;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(200ull, gpuCpuTime.gpuTimeStamp);
osTime->maxGpuTimeStamp = 1ull << 36;
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 10ull; // read below initial value
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(osTime->maxGpuTimeStamp + 10ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 30ull; // second read below initial value
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(osTime->maxGpuTimeStamp + 30ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 110ull;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(osTime->maxGpuTimeStamp + 110ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 70ull; // second overflow
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(2ull * osTime->maxGpuTimeStamp + 70ull, gpuCpuTime.gpuTimeStamp);
}
@@ -153,29 +187,35 @@ TEST_F(DrmTimeTest, given64BitGpuTimeStampWhenGpuTimeStampOverflowThenOverflowsA
deviceTime->callBaseGetGpuCpuTimeImpl = false;
deviceTime->gpuCpuTimeValue = {100ull, 100ull};
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
TimeQueryStatus error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(100ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 200ull;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(200ull, gpuCpuTime.gpuTimeStamp);
osTime->maxGpuTimeStamp = 0ull;
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 10ull; // read below initial value
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(10ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 30ull;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(30ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 110ull;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(110ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 70ull;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(70ull, gpuCpuTime.gpuTimeStamp);
}
@@ -183,8 +223,8 @@ TEST_F(DrmTimeTest, GivenInvalidDrmWhenGettingGpuCpuTimeThenFails) {
TimeStampData gpuCpuTime01 = {0, 0};
auto pDrm = new DrmMockFail(*executionEnvironment.rootDeviceEnvironments[0]);
osTime->updateDrm(pDrm);
auto error = osTime->getGpuCpuTime(&gpuCpuTime01);
EXPECT_FALSE(error);
TimeQueryStatus error = osTime->getGpuCpuTime(&gpuCpuTime01);
EXPECT_FALSE(error != TimeQueryStatus::deviceLost);
}
TEST_F(DrmTimeTest, GivenInvalidFuncTimeWhenGettingGpuCpuTimeCpuThenFails) {
@@ -192,8 +232,8 @@ TEST_F(DrmTimeTest, GivenInvalidFuncTimeWhenGettingGpuCpuTimeCpuThenFails) {
auto pDrm = new DrmMockTime(mockFd, *executionEnvironment.rootDeviceEnvironments[0]);
osTime->setGetTimeFunc(getTimeFuncFalse);
osTime->updateDrm(pDrm);
auto error = osTime->getGpuCpuTime(&gpuCpuTime01);
EXPECT_FALSE(error);
TimeQueryStatus error = osTime->getGpuCpuTime(&gpuCpuTime01);
EXPECT_FALSE(error != TimeQueryStatus::deviceLost);
}
TEST_F(DrmTimeTest, givenGpuTimestampResolutionQueryWhenIoctlFailsThenDefaultResolutionIsReturned) {

View File

@@ -29,7 +29,7 @@ BOOL WINAPI queryPerformanceCounterMock(
class MockDeviceTimeWin : public MockDeviceTime {
public:
bool getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *osTime) override {
TimeQueryStatus getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *osTime) override {
getGpuCpuTimeImplCalled++;
*pGpuCpuTime = gpuCpuTimeValue;
return getGpuCpuTimeImplResult;
@@ -39,7 +39,7 @@ class MockDeviceTimeWin : public MockDeviceTime {
return deviceTimerResolution;
}
bool getGpuCpuTimeImplResult = true;
TimeQueryStatus getGpuCpuTimeImplResult = TimeQueryStatus::success;
TimeStampData gpuCpuTimeValue{};
uint32_t getGpuCpuTimeImplCalled = 0;
double deviceTimerResolution = 1;
@@ -70,29 +70,30 @@ TEST_F(OSTimeWinTest, given36BitGpuTimeStampWhenGpuTimeStampOverflowThenGpuTimeD
TimeStampData gpuCpuTime = {0ull, 0ull};
deviceTime->gpuCpuTimeValue = {100ull, 100ull};
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
TimeQueryStatus error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(100ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 200ll;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(200ull, gpuCpuTime.gpuTimeStamp);
osTime->maxGpuTimeStamp = 1ull << 36;
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 10ull; // read below initial value
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(osTime->maxGpuTimeStamp + 10ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 30ull; // second read below initial value
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(osTime->maxGpuTimeStamp + 30ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 110ull;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(osTime->maxGpuTimeStamp + 110ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 70ull; // second overflow
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(2ull * osTime->maxGpuTimeStamp + 70ull, gpuCpuTime.gpuTimeStamp);
}
@@ -104,29 +105,35 @@ TEST_F(OSTimeWinTest, given64BitGpuTimeStampWhenGpuTimeStampOverflowThenOverflow
TimeStampData gpuCpuTime = {0ull, 0ull};
deviceTime->gpuCpuTimeValue = {100ull, 100ull};
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
TimeQueryStatus error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(100ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 200ull;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(200ull, gpuCpuTime.gpuTimeStamp);
osTime->maxGpuTimeStamp = 0ull;
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 10ull; // read below initial value
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(10ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 30ull;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(30ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 110ull;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(110ull, gpuCpuTime.gpuTimeStamp);
deviceTime->gpuCpuTimeValue.gpuTimeStamp = 70ull;
EXPECT_TRUE(osTime->getGpuCpuTime(&gpuCpuTime));
error = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_EQ(error, TimeQueryStatus::success);
EXPECT_EQ(70ull, gpuCpuTime.gpuTimeStamp);
}
@@ -163,6 +170,13 @@ TEST_F(OSTimeWinTest, givenHighValueOfCpuTimestampWhenItIsObtainedThenItHasPrope
EXPECT_EQ(expectedTimestamp, timeStamp);
}
TEST_F(OSTimeWinTest, WhenGettingCpuTimeHostThenSucceeds) {
uint64_t time = 0;
auto error = osTime->getCpuTimeHost(&time);
EXPECT_FALSE(error);
EXPECT_NE(0ULL, time);
}
TEST(OSTimeWinTests, givenNoOSInterfaceWhenGetCpuTimeThenReturnsSuccess) {
uint64_t time = 0;
auto osTime(OSTime::create(nullptr));
@@ -175,7 +189,7 @@ TEST(OSTimeWinTests, givenNoOSInterfaceWhenGetGpuCpuTimeThenReturnsSuccess) {
TimeStampData gpuCpuTime = {};
auto osTime(OSTime::create(nullptr));
auto success = osTime->getGpuCpuTime(&gpuCpuTime);
EXPECT_TRUE(success);
EXPECT_EQ(success, TimeQueryStatus::success);
EXPECT_EQ(0u, gpuCpuTime.cpuTimeinNS);
EXPECT_EQ(0u, gpuCpuTime.gpuTimeStamp);
}
@@ -191,12 +205,12 @@ TEST(OSTimeWinTests, givenOSInterfaceWhenGetGpuCpuTimeThenReturnsSuccess) {
wddm->init();
auto osTime = OSTime::create(rootDeviceEnvironment.osInterface.get());
osTime->setDeviceTimerResolution();
auto success = osTime->getGpuCpuTime(&gpuCpuTime01);
EXPECT_TRUE(success);
TimeQueryStatus success = osTime->getGpuCpuTime(&gpuCpuTime01);
EXPECT_EQ(success, TimeQueryStatus::success);
EXPECT_NE(0u, gpuCpuTime01.cpuTimeinNS);
EXPECT_NE(0u, gpuCpuTime01.gpuTimeStamp);
success = osTime->getGpuCpuTime(&gpuCpuTime02);
EXPECT_TRUE(success);
EXPECT_EQ(success, TimeQueryStatus::success);
EXPECT_NE(0u, gpuCpuTime02.cpuTimeinNS);
EXPECT_NE(0u, gpuCpuTime02.gpuTimeStamp);
EXPECT_GT(gpuCpuTime02.gpuTimeStamp, gpuCpuTime01.gpuTimeStamp);
@@ -296,8 +310,8 @@ TEST_F(OSTimeWinTest, whenGetGpuCpuTimeFailedThenReturnFalse) {
TimeStampData gpuCpuTime;
auto deviceTime = new MockDeviceTimeWin();
osTime->deviceTime.reset(deviceTime);
deviceTime->getGpuCpuTimeImplResult = false;
EXPECT_FALSE(osTime->getGpuCpuTime(&gpuCpuTime));
deviceTime->getGpuCpuTimeImplResult = TimeQueryStatus::deviceLost;
EXPECT_EQ(osTime->getGpuCpuTime(&gpuCpuTime), TimeQueryStatus::deviceLost);
}
TEST_F(OSTimeWinTest, whenGettingMaxGpuTimeStampValueAfterFlagSetThenCallToKmd) {