@@ -1010,12 +1010,12 @@ HWTEST2_F(MetricIpSamplingCalcOpMultiDevTest, WhenReadingMetricGroupTimeCalculat
10101010 metricGroupCalcProps.pNext = nullptr ;
10111011 metricGroupCalcProps.isTimeFilterSupported = true ;
10121012
1013- zet_metric_group_properties_t properties{ };
1014- properties .pNext = &metricGroupCalcProps;
1013+ zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr };
1014+ metricGroupProperties .pNext = &metricGroupCalcProps;
10151015
1016- EXPECT_EQ (zetMetricGroupGetProperties (metricGroups[0 ], &properties ), ZE_RESULT_SUCCESS);
1017- EXPECT_EQ (strcmp (properties .description , " EU stall sampling" ), 0 );
1018- EXPECT_EQ (strcmp (properties .name , " EuStallSampling" ), 0 );
1016+ EXPECT_EQ (zetMetricGroupGetProperties (metricGroups[0 ], &metricGroupProperties ), ZE_RESULT_SUCCESS);
1017+ EXPECT_EQ (strcmp (metricGroupProperties .description , " EU stall sampling" ), 0 );
1018+ EXPECT_EQ (strcmp (metricGroupProperties .name , " EuStallSampling" ), 0 );
10191019 EXPECT_EQ (metricGroupCalcProps.isTimeFilterSupported , false );
10201020 }
10211021}
@@ -1229,5 +1229,103 @@ HWTEST2_F(MetricIpSamplingCalcOpMultiDevTest, GivenMultipleScopesWhenAllAreUnsup
12291229 delete mockMetricScope3;
12301230}
12311231
1232+ HWTEST2_F (MetricIpSamplingCalcOpMultiDevTest, GivenRootDeviceCreatingCalcOpWithOnlyMetricsHandlesOnlyThoseMetricsAreInResultReport, EustallSupportedPlatforms) {
1233+
1234+ EXPECT_EQ (ZE_RESULT_SUCCESS, testDevices[0 ]->getMetricDeviceContext ().enableMetricApi ());
1235+ auto rootDevice = testDevices[0 ];
1236+
1237+ uint32_t metricGroupCount = 1 ;
1238+ zet_metric_group_handle_t metricGroupHandle = nullptr ;
1239+
1240+ ASSERT_EQ (zetMetricGroupGet (rootDevice->toHandle (), &metricGroupCount, &metricGroupHandle), ZE_RESULT_SUCCESS);
1241+ EXPECT_EQ (metricGroupCount, 1u );
1242+ ASSERT_NE (metricGroupHandle, nullptr );
1243+
1244+ uint32_t metricCount = 0 ;
1245+ EXPECT_EQ (zetMetricGet (metricGroupHandle, &metricCount, nullptr ), ZE_RESULT_SUCCESS);
1246+ EXPECT_EQ (metricCount, 10u );
1247+ std::vector<zet_metric_handle_t > phMetrics (metricCount);
1248+ EXPECT_EQ (zetMetricGet (metricGroupHandle, &metricCount, phMetrics.data ()), ZE_RESULT_SUCCESS);
1249+
1250+ std::vector<zet_metric_handle_t > metricsToCalculate;
1251+
1252+ // Select only odd index metrics. According to expectedMetricNamesInReport there are:
1253+ // "Active", "PipeStall" "DistStall", "SyncStall", "OtherStall"
1254+ for (uint32_t i = 0 ; i < metricCount; i++) {
1255+ if (i % 2 ) {
1256+ metricsToCalculate.push_back (phMetrics[i]);
1257+ }
1258+ }
1259+
1260+ uint32_t metricsToCalculateCount = static_cast <uint32_t >(metricsToCalculate.size ());
1261+ EXPECT_EQ (metricsToCalculateCount, 5u );
1262+
1263+ calculationDesc.metricGroupCount = 0 ;
1264+ calculationDesc.phMetricGroups = nullptr ;
1265+ calculationDesc.metricCount = metricsToCalculateCount;
1266+ calculationDesc.phMetrics = metricsToCalculate.data ();
1267+
1268+ zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
1269+
1270+ EXPECT_EQ (ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationCreateExp (context->toHandle (),
1271+ rootDevice->toHandle (), &calculationDesc,
1272+ &hCalculationOperation));
1273+ uint32_t metricsInReportCount = 0 ;
1274+ EXPECT_EQ (ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationGetReportFormatExp (hCalculationOperation, &metricsInReportCount, nullptr , nullptr ));
1275+ EXPECT_EQ (metricsInReportCount, 5u );
1276+ std::vector<zet_metric_handle_t > metricsInReport (metricsInReportCount);
1277+ std::vector<zet_intel_metric_scope_exp_handle_t > metricScopesInReport (metricsInReportCount);
1278+
1279+ EXPECT_EQ (ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationGetReportFormatExp (hCalculationOperation, &metricsInReportCount,
1280+ metricsInReport.data (), metricScopesInReport.data ()));
1281+
1282+ EXPECT_EQ (metricsInReportCount, 5u );
1283+ // Expect only odd index metrics in the result report
1284+ zet_metric_properties_t ipSamplingMetricProperties = {};
1285+ for (uint32_t i = 0 ; i < metricsInReportCount; i++) {
1286+ EXPECT_EQ (ZE_RESULT_SUCCESS, zetMetricGetProperties (metricsInReport[i], &ipSamplingMetricProperties));
1287+ EXPECT_EQ (strcmp (ipSamplingMetricProperties.name , expectedMetricNamesInReport[i * 2 + 1 ].c_str ()), 0 );
1288+ EXPECT_EQ (static_cast <MockMetricScope *>(MetricScope::fromHandle (metricScopesInReport[i])), hMockScope);
1289+ }
1290+
1291+ // Raw data for a single read with different data for sub-device 0 and 1
1292+ size_t rawDataSize = sizeof (IpSamplingMultiDevDataHeader) + rawReportsBytesSize + sizeof (IpSamplingMultiDevDataHeader) + rawReportsBytesSize;
1293+ std::vector<uint8_t > rawDataWithHeader (rawDataSize);
1294+ // sub device index 0
1295+ MockRawDataHelper::addMultiSubDevHeader (rawDataWithHeader.data (), rawDataWithHeader.size (), reinterpret_cast <uint8_t *>(rawReports.data ()), rawReportsBytesSize, 0 );
1296+ // sub device index 1
1297+ MockRawDataHelper::addMultiSubDevHeader (rawDataWithHeader.data () + rawReportsBytesSize + sizeof (IpSamplingMultiDevDataHeader),
1298+ rawDataWithHeader.size () - (rawReportsBytesSize + sizeof (IpSamplingMultiDevDataHeader)),
1299+ reinterpret_cast <uint8_t *>(rawReports.data ()), rawReportsBytesSize, 1 );
1300+
1301+ uint32_t totalMetricReportCount = 0 ;
1302+ bool final = true ;
1303+ size_t usedSize = 0 ;
1304+ EXPECT_EQ (ZE_RESULT_SUCCESS, zetIntelMetricCalculateValuesExp (rawDataSize, reinterpret_cast <uint8_t *>(rawDataWithHeader.data ()),
1305+ hCalculationOperation,
1306+ final , &usedSize,
1307+ &totalMetricReportCount, nullptr ));
1308+
1309+ EXPECT_EQ (totalMetricReportCount, 3U ); // three IPs in rawReports
1310+ EXPECT_EQ (usedSize, 0U ); // query only, no data processed
1311+
1312+ std::vector<zet_intel_metric_result_exp_t > metricResults (totalMetricReportCount * metricsInReportCount);
1313+ EXPECT_EQ (ZE_RESULT_SUCCESS, zetIntelMetricCalculateValuesExp (rawDataSize, reinterpret_cast <uint8_t *>(rawDataWithHeader.data ()),
1314+ hCalculationOperation,
1315+ final , &usedSize,
1316+ &totalMetricReportCount, metricResults.data ()));
1317+ EXPECT_EQ (totalMetricReportCount, 3U );
1318+ EXPECT_EQ (usedSize, rawDataSize);
1319+
1320+ for (uint32_t i = 0 ; i < totalMetricReportCount; i++) {
1321+ for (uint32_t j = 0 ; j < metricsInReportCount; j++) {
1322+ uint32_t resultIndex = i * metricsInReportCount + j;
1323+ EXPECT_TRUE (metricResults[resultIndex].value .ui64 == expectedMetricValuesOddMetrics[resultIndex].value .ui64 );
1324+ }
1325+ }
1326+
1327+ EXPECT_EQ (ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationDestroyExp (hCalculationOperation));
1328+ }
1329+
12321330} // namespace ult
12331331} // namespace L0
0 commit comments