diff --git a/level_zero/tools/source/sysman/engine/linux/os_engine_imp_prelim.cpp b/level_zero/tools/source/sysman/engine/linux/os_engine_imp_prelim.cpp index 179782b2ae..23d9e1f2c1 100644 --- a/level_zero/tools/source/sysman/engine/linux/os_engine_imp_prelim.cpp +++ b/level_zero/tools/source/sysman/engine/linux/os_engine_imp_prelim.cpp @@ -60,8 +60,7 @@ static ze_result_t readBusynessFromGroupFd(PmuInterface *pPmuInterface, std::pai } // In data[], First u64 is "active time", And second u64 is "timestamp". Both in ticks pStats->activeTime = data[2]; - pStats->timestamp = data[3]; - + pStats->timestamp = data[3] ? data[3] : SysmanDevice::getSysmanTimestamp(); return ZE_RESULT_SUCCESS; } diff --git a/level_zero/tools/test/unit_tests/sources/sysman/engine/linux/mock_engine_prelim.h b/level_zero/tools/test/unit_tests/sources/sysman/engine/linux/mock_engine_prelim.h index c276e9aaba..4aab273e9b 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/engine/linux/mock_engine_prelim.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/engine/linux/mock_engine_prelim.h @@ -19,7 +19,6 @@ using namespace NEO; namespace L0 { namespace ult { constexpr int64_t mockPmuFd = 10; -constexpr uint64_t mockTimestamp = 87654321; constexpr uint64_t mockActiveTime = 987654321; constexpr uint16_t invalidEngineClass = UINT16_MAX; const std::string deviceDir("device"); @@ -107,6 +106,7 @@ struct MockEnginePmuInterfaceImpPrelim : public PmuInterfaceImp { bool mockPerfEventOpenRead = false; int32_t mockErrorNumber = -ENOSPC; int32_t mockPerfEventOpenFailAtCount = 1; + uint64_t mockTimestamp = 87654321; int64_t perfEventOpen(perf_event_attr *attr, pid_t pid, int cpu, int groupFd, uint64_t flags) override { diff --git a/level_zero/tools/test/unit_tests/sources/sysman/engine/linux/test_zes_engine_prelim.cpp b/level_zero/tools/test/unit_tests/sources/sysman/engine/linux/test_zes_engine_prelim.cpp index a6bafec089..386e19b13d 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/engine/linux/test_zes_engine_prelim.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/engine/linux/test_zes_engine_prelim.cpp @@ -237,7 +237,7 @@ TEST_F(ZesEngineFixturePrelim, GivenValidEngineHandleAndIntegratedDeviceWhenCall ASSERT_NE(nullptr, handle); EXPECT_EQ(ZE_RESULT_SUCCESS, zesEngineGetActivity(handle, &stats)); EXPECT_EQ(mockActiveTime, stats.activeTime); - EXPECT_EQ(mockTimestamp, stats.timestamp); + EXPECT_EQ(pPmuInterface->mockTimestamp, stats.timestamp); } } @@ -253,7 +253,7 @@ TEST_F(ZesEngineFixturePrelim, GivenValidEngineHandleAndDiscreteDeviceWhenCallin ASSERT_NE(nullptr, handle); EXPECT_EQ(ZE_RESULT_SUCCESS, zesEngineGetActivity(handle, &stats)); EXPECT_EQ(mockActiveTime, stats.activeTime); - EXPECT_EQ(mockTimestamp, stats.timestamp); + EXPECT_EQ(pPmuInterface->mockTimestamp, stats.timestamp); } } @@ -277,7 +277,7 @@ TEST_F(ZesEngineFixturePrelim, GivenValidEngineHandleAndDiscreteDeviceWhenCallin EXPECT_EQ(ZE_RESULT_SUCCESS, zesEngineGetActivityExt(handle, &count, engineStats.data())); for (auto &stat : engineStats) { EXPECT_EQ(mockActiveTime, stat.activeTime); - EXPECT_EQ(mockTimestamp, stat.timestamp); + EXPECT_EQ(pPmuInterface->mockTimestamp, stat.timestamp); } } } @@ -304,7 +304,7 @@ TEST_F(ZesEngineFixturePrelim, GivenValidEngineHandleAndDiscreteDeviceWhenCallin EXPECT_EQ(ZE_RESULT_SUCCESS, zesEngineGetActivityExt(handle, &count, engineStats.data())); for (auto &stat : engineStats) { EXPECT_EQ(mockActiveTime, stat.activeTime); - EXPECT_EQ(mockTimestamp, stat.timestamp); + EXPECT_EQ(pPmuInterface->mockTimestamp, stat.timestamp); } } } @@ -494,6 +494,20 @@ TEST_F(ZesEngineFixturePrelim, GivenValidEngineHandleWhenCallingZesEngineGetActi } } +TEST_F(ZesEngineFixturePrelim, GivenValidEngineHandleAndPmuTimeStampIsZeroWhenCallingZesEngineGetActivityThenVerifyValidTimeStampIsReturned) { + zes_engine_stats_t stats = {}; + auto handles = getEngineHandles(handleComponentCount); + EXPECT_EQ(handleComponentCount, handles.size()); + pPmuInterface->mockTimestamp = 0u; + + for (auto handle : handles) { + ASSERT_NE(nullptr, handle); + EXPECT_EQ(ZE_RESULT_SUCCESS, zesEngineGetActivity(handle, &stats)); + EXPECT_EQ(mockActiveTime, stats.activeTime); + EXPECT_GT(stats.timestamp, 0u); + } +} + TEST_F(ZesEngineFixturePrelim, GivenValidEngineHandleWhenCallingZesEngineGetActivityAndperfEventOpenFailsThenVerifyEngineGetActivityReturnsFailure) { pPmuInterface->mockPerfEventOpenRead = true;