Update zesPowerGetEnergyCounter to return 64BitEnergyCounter in micro joules
Signed-off-by: sairamud <sairam.udaya.janardhana.muttavarapu@intel.com>
This commit is contained in:
parent
a3b3f3e86e
commit
0d6ad522cb
|
@ -65,19 +65,16 @@ ze_result_t WddmPowerImp::getPropertiesExt(zes_power_ext_properties_t *pExtPoper
|
|||
}
|
||||
|
||||
ze_result_t WddmPowerImp::getEnergyCounter(zes_power_energy_counter_t *pEnergy) {
|
||||
uint32_t energyUnits = 0;
|
||||
uint64_t energyCounter64Bit = 0;
|
||||
uint32_t timestampFrequency = 0;
|
||||
uint64_t valueTimeStamp = 0;
|
||||
std::vector<KmdSysman::RequestProperty> vRequests = {};
|
||||
std::vector<KmdSysman::ResponseProperty> vResponses = {};
|
||||
KmdSysman::RequestProperty request = {};
|
||||
|
||||
request.commandId = KmdSysman::Command::Get;
|
||||
request.componentId = KmdSysman::Component::PowerComponent;
|
||||
|
||||
request.requestId = KmdSysman::Requests::Power::EnergyCounterUnits;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Power::CurrentEnergyCounter;
|
||||
request.requestId = KmdSysman::Requests::Power::CurrentEnergyCounter64Bit;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.commandId = KmdSysman::Command::Get;
|
||||
|
@ -92,22 +89,13 @@ ze_result_t WddmPowerImp::getEnergyCounter(zes_power_energy_counter_t *pEnergy)
|
|||
}
|
||||
|
||||
if (vResponses[0].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&energyUnits, sizeof(uint32_t), vResponses[0].dataBuffer, sizeof(uint32_t));
|
||||
memcpy_s(&energyCounter64Bit, sizeof(uint64_t), vResponses[0].dataBuffer, sizeof(uint64_t));
|
||||
pEnergy->energy = energyCounter64Bit;
|
||||
memcpy_s(&valueTimeStamp, sizeof(uint64_t), (vResponses[0].dataBuffer + sizeof(uint64_t)), sizeof(uint64_t));
|
||||
}
|
||||
|
||||
uint32_t valueCounter = 0;
|
||||
uint64_t valueTimeStamp = 0;
|
||||
if (vResponses[1].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&valueCounter, sizeof(uint32_t), vResponses[1].dataBuffer, sizeof(uint32_t));
|
||||
uint32_t conversionUnit = (1 << energyUnits);
|
||||
double valueConverted = static_cast<double>(valueCounter) / static_cast<double>(conversionUnit);
|
||||
valueConverted *= static_cast<double>(convertJouleToMicroJoule);
|
||||
pEnergy->energy = static_cast<uint64_t>(valueConverted);
|
||||
memcpy_s(&valueTimeStamp, sizeof(uint64_t), (vResponses[1].dataBuffer + sizeof(uint32_t)), sizeof(uint64_t));
|
||||
}
|
||||
|
||||
if (vResponses[2].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(×tampFrequency, sizeof(uint32_t), vResponses[2].dataBuffer, sizeof(uint32_t));
|
||||
memcpy_s(×tampFrequency, sizeof(uint32_t), vResponses[1].dataBuffer, sizeof(uint32_t));
|
||||
double timeFactor = 1.0 / static_cast<double>(timestampFrequency);
|
||||
timeFactor = static_cast<double>(valueTimeStamp) * timeFactor;
|
||||
timeFactor *= static_cast<double>(microFacor);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
* Copyright (C) 2020-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
@ -128,6 +128,7 @@ enum Power {
|
|||
CurrentEnergyThreshold,
|
||||
DisableEnergyThreshold,
|
||||
CurrentEnergyCounter,
|
||||
CurrentEnergyCounter64Bit,
|
||||
|
||||
MaxPowerRequests,
|
||||
};
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
* Copyright (C) 2020-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
@ -33,7 +33,7 @@ struct Mock<PowerKmdSysManager> : public PowerKmdSysManager {
|
|||
uint32_t mockEnergyCounter = 3231121;
|
||||
uint32_t mockTimeStamp = 1123412412;
|
||||
uint32_t mockEnergyUnit = 14;
|
||||
|
||||
uint64_t mockEnergyCounter64Bit = 32323232323232;
|
||||
uint32_t mockFrequencyTimeStamp = 38400000;
|
||||
|
||||
void getActivityProperty(KmdSysman::GfxSysmanReqHeaderIn *pRequest, KmdSysman::GfxSysmanReqHeaderOut *pResponse) {
|
||||
|
@ -145,6 +145,14 @@ struct Mock<PowerKmdSysManager> : public PowerKmdSysManager {
|
|||
pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess;
|
||||
pResponse->outDataSize = sizeof(uint32_t);
|
||||
} break;
|
||||
case KmdSysman::Requests::Power::CurrentEnergyCounter64Bit: {
|
||||
uint64_t *pValueCounter = reinterpret_cast<uint64_t *>(pBuffer);
|
||||
uint64_t *pValueTS = reinterpret_cast<uint64_t *>(pBuffer + sizeof(uint64_t));
|
||||
*pValueCounter = mockEnergyCounter64Bit;
|
||||
*pValueTS = mockTimeStamp;
|
||||
pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess;
|
||||
pResponse->outDataSize = sizeof(uint64_t) + sizeof(uint64_t);
|
||||
} break;
|
||||
default: {
|
||||
pResponse->outDataSize = 0;
|
||||
pResponse->outReturnCode = KmdSysman::KmdSysmanFail;
|
||||
|
|
|
@ -154,12 +154,8 @@ TEST_F(SysmanDevicePowerFixture, GivenValidPowerHandleWhenGettingPowerEnergyCoun
|
|||
|
||||
ze_result_t result = zesPowerGetEnergyCounter(handle, &energyCounter);
|
||||
|
||||
uint32_t conversionUnit = (1 << pKmdSysManager->mockEnergyUnit);
|
||||
double valueConverted = static_cast<double>(pKmdSysManager->mockEnergyCounter) / static_cast<double>(conversionUnit);
|
||||
valueConverted *= static_cast<double>(convertJouleToMicroJoule);
|
||||
uint64_t mockEnergytoMicroJoules = static_cast<uint64_t>(valueConverted);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
EXPECT_EQ(energyCounter.energy, mockEnergytoMicroJoules);
|
||||
EXPECT_EQ(energyCounter.energy, pKmdSysManager->mockEnergyCounter64Bit);
|
||||
EXPECT_EQ(energyCounter.timestamp, convertTStoMicroSec(pKmdSysManager->mockTimeStamp, pKmdSysManager->mockFrequencyTimeStamp));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue