Skip to content

Commit e834196

Browse files
Merge pull request #66 from intel-innersource/feature/ft-fps-update
Updated fps calculations to operate on frame times.
2 parents b135f9c + 99270bb commit e834196

File tree

2 files changed

+21
-26
lines changed

2 files changed

+21
-26
lines changed

IntelPresentMon/PresentMonMiddleware/ConcreteMiddleware.cpp

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,32 +1130,24 @@ static void ReportMetrics(
11301130
break;
11311131
case PM_METRIC_PRESENTED_FPS:
11321132
{
1133-
std::vector<double> presented_fps(swapChain.mCPUBusy.size());
1133+
std::vector<double> presented_fts(swapChain.mCPUBusy.size());
11341134
for (size_t i = 0; i < swapChain.mCPUBusy.size(); ++i) {
1135-
presented_fps[i] = (swapChain.mCPUBusy[i] + swapChain.mCPUWait[i]) == 0. ? 0. :
1136-
1000.0 / (swapChain.mCPUBusy[i] + swapChain.mCPUWait[i]);
1135+
presented_fts[i] = swapChain.mCPUBusy[i] + swapChain.mCPUWait[i];
11371136
}
1138-
output = CalculateStatistic(presented_fps, element.stat);
1137+
output = CalculateStatistic(presented_fts, element.stat, true);
1138+
output = output == 0 ? 0 : 1000.0 / output;
11391139
break;
11401140
}
11411141
case PM_METRIC_APPLICATION_FPS:
11421142
{
1143-
std::vector<double> application_fps(swapChain.mAppDisplayedTime.size());
1144-
for (size_t i = 0; i < swapChain.mAppDisplayedTime.size(); ++i) {
1145-
application_fps[i] = swapChain.mAppDisplayedTime[i] == 0. ? 0. :
1146-
1000.0 / swapChain.mAppDisplayedTime[i];
1147-
}
1148-
output = CalculateStatistic(application_fps, element.stat);
1143+
output = CalculateStatistic(swapChain.mAppDisplayedTime, element.stat, true);
1144+
output = output == 0 ? 0 : 1000.0 / output;
11491145
break;
11501146
}
11511147
case PM_METRIC_DISPLAYED_FPS:
11521148
{
1153-
std::vector<double> displayed_fps(swapChain.mDisplayedTime.size());
1154-
for (size_t i = 0; i < swapChain.mDisplayedTime.size(); ++i) {
1155-
displayed_fps[i] = swapChain.mDisplayedTime[i] == 0. ? 0. :
1156-
1000.0 / swapChain.mDisplayedTime[i];
1157-
}
1158-
output = CalculateStatistic(displayed_fps, element.stat);
1149+
output = CalculateStatistic(swapChain.mDisplayedTime, element.stat, true);
1150+
output = output == 0 ? 0 : 1000.0 / output;
11591151
break;
11601152
}
11611153
case PM_METRIC_DROPPED_FRAMES:
@@ -1191,7 +1183,7 @@ static void ReportMetrics(
11911183
return;
11921184
}
11931185

1194-
double ConcreteMiddleware::CalculateStatistic(std::vector<double>& inData, PM_STAT stat) const
1186+
double ConcreteMiddleware::CalculateStatistic(std::vector<double>& inData, PM_STAT stat, bool invert) const
11951187
{
11961188
if (inData.size() == 1) {
11971189
return inData[0];
@@ -1209,12 +1201,12 @@ static void ReportMetrics(
12091201
}
12101202
return sum / inData.size();
12111203
}
1212-
case PM_STAT_PERCENTILE_99: return CalculatePercentile(inData, 0.99);
1213-
case PM_STAT_PERCENTILE_95: return CalculatePercentile(inData, 0.95);
1214-
case PM_STAT_PERCENTILE_90: return CalculatePercentile(inData, 0.90);
1215-
case PM_STAT_PERCENTILE_01: return CalculatePercentile(inData, 0.01);
1216-
case PM_STAT_PERCENTILE_05: return CalculatePercentile(inData, 0.05);
1217-
case PM_STAT_PERCENTILE_10: return CalculatePercentile(inData, 0.10);
1204+
case PM_STAT_PERCENTILE_99: return CalculatePercentile(inData, 0.99, invert);
1205+
case PM_STAT_PERCENTILE_95: return CalculatePercentile(inData, 0.95, invert);
1206+
case PM_STAT_PERCENTILE_90: return CalculatePercentile(inData, 0.90, invert);
1207+
case PM_STAT_PERCENTILE_01: return CalculatePercentile(inData, 0.01, invert);
1208+
case PM_STAT_PERCENTILE_05: return CalculatePercentile(inData, 0.05, invert);
1209+
case PM_STAT_PERCENTILE_10: return CalculatePercentile(inData, 0.10, invert);
12181210
case PM_STAT_MAX:
12191211
{
12201212
double max = inData[0];
@@ -1265,8 +1257,11 @@ static void ReportMetrics(
12651257
}
12661258

12671259
// Calculate percentile using linear interpolation between the closet ranks
1268-
double ConcreteMiddleware::CalculatePercentile(std::vector<double>& inData, double percentile) const
1260+
double ConcreteMiddleware::CalculatePercentile(std::vector<double>& inData, double percentile, bool invert) const
12691261
{
1262+
if (invert) {
1263+
percentile = 1.0 - percentile;
1264+
}
12701265
percentile = std::min(std::max(percentile, 0.), 1.);
12711266

12721267
double integral_part_as_double;

IntelPresentMon/PresentMonMiddleware/ConcreteMiddleware.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ namespace pmon::mid
112112

113113
void CalculateFpsMetric(fpsSwapChainData& swapChain, const PM_QUERY_ELEMENT& element, uint8_t* pBlob, LARGE_INTEGER qpcFrequency);
114114
void CalculateGpuCpuMetric(std::unordered_map<PM_METRIC, MetricInfo>& metricInfo, const PM_QUERY_ELEMENT& element, uint8_t* pBlob);
115-
double CalculateStatistic(std::vector<double>& inData, PM_STAT stat) const;
116-
double CalculatePercentile(std::vector<double>& inData, double percentile) const;
115+
double CalculateStatistic(std::vector<double>& inData, PM_STAT stat, bool invert = false) const;
116+
double CalculatePercentile(std::vector<double>& inData, double percentile, bool invert) const;
117117
bool GetGpuMetricData(size_t telemetry_item_bit, PresentMonPowerTelemetryInfo& power_telemetry_info, std::unordered_map<PM_METRIC, MetricInfo>& metricInfo);
118118
bool GetCpuMetricData(size_t telemetryBit, CpuTelemetryInfo& cpuTelemetry, std::unordered_map<PM_METRIC, MetricInfo>& metricInfo);
119119
void GetStaticCpuMetrics();

0 commit comments

Comments
 (0)