@@ -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;
0 commit comments