diff --git a/src/core/roctracer.cpp b/src/core/roctracer.cpp
index 891b005e2b..8bc5ea295e 100644
--- a/src/core/roctracer.cpp
+++ b/src/core/roctracer.cpp
@@ -719,11 +719,25 @@ PUBLIC_API roctracer_status_t roctracer_op_code(
switch (domain) {
case ACTIVITY_DOMAIN_HSA_API: {
*op = roctracer::hsa_support::GetApiCode(str);
+ if (*op == HSA_API_ID_NUMBER) {
+ EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "Invalid API name \"" << str << "\", domain ID(" << domain << ")");
+ }
if (kind != NULL) *kind = 0;
break;
}
case ACTIVITY_DOMAIN_KFD_API: {
*op = roctracer::kfd_support::GetApiCode(str);
+ if (*op == KFD_API_ID_NUMBER) {
+ EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "Invalid API name \"" << str << "\", domain ID(" << domain << ")");
+ }
+ if (kind != NULL) *kind = 0;
+ break;
+ }
+ case ACTIVITY_DOMAIN_HIP_API: {
+ *op = hipApiIdByName(str);
+ if (*op == HIP_API_ID_NUMBER) {
+ EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "Invalid API name \"" << str << "\", domain ID(" << domain << ")");
+ }
if (kind != NULL) *kind = 0;
break;
}
diff --git a/test/run.sh b/test/run.sh
index e8d8909523..9a7ffc7490 100755
--- a/test/run.sh
+++ b/test/run.sh
@@ -134,6 +134,11 @@ export ROCTRACER_DOMAIN="hip"
eval_test "tool period test" "ROCP_CTRL_RATE=10:100000:1000000 ./test/MatrixTranspose" MatrixTranspose_hip_period_trace
eval_test "tool flushing test" "ROCP_FLUSH_RATE=100000 ./test/MatrixTranspose" MatrixTranspose_hip_flush_trace
+#API records filtering
+echo "" > input.xml
+export ROCP_INPUT=input.xml
+eval_test "tool HIP test input" ./test/MatrixTranspose hip_input_trace
+
# HSA test
export ROCTRACER_DOMAIN="hsa"
# test trace
diff --git a/test/tool/tracer_tool.cpp b/test/tool/tracer_tool.cpp
index 218652e98a..cc5367d1ae 100644
--- a/test/tool/tracer_tool.cpp
+++ b/test/tool/tracer_tool.cpp
@@ -112,6 +112,7 @@ bool trace_pcs = false;
// API trace vector
std::vector hsa_api_vec;
std::vector kfd_api_vec;
+std::vector hip_api_vec;
LOADER_INSTANTIATE();
TRACE_BUFFER_INSTANTIATE();
@@ -921,6 +922,7 @@ void tool_load() {
found = true;
trace_hip_api = true;
trace_hip_activity = true;
+ hip_api_vec = api_vec;
}
if (name == "KFD") {
found = true;
@@ -1091,9 +1093,19 @@ extern "C" PUBLIC_API bool OnLoad(HsaApiTable* table, uint64_t runtime_version,
// Enable tracing
if (trace_hip_api) {
hip_api_file_handle = open_output_file(output_prefix, "hip_api_trace.txt");
- ROCTRACER_CALL(roctracer_enable_domain_callback(ACTIVITY_DOMAIN_HIP_API, hip_api_callback, NULL));
+ if (hip_api_vec.size() != 0) {
+ for (unsigned i = 0; i < hip_api_vec.size(); ++i) {
+ uint32_t cid = HIP_API_ID_NUMBER;
+ const char* api = hip_api_vec[i].c_str();
+ ROCTRACER_CALL(roctracer_op_code(ACTIVITY_DOMAIN_HIP_API, api, &cid, NULL));
+ ROCTRACER_CALL(roctracer_enable_op_callback(ACTIVITY_DOMAIN_HIP_API, cid, hip_api_callback, NULL));
+ printf(" %s", api);
+ }
+ }
+ else {
+ ROCTRACER_CALL(roctracer_enable_domain_callback(ACTIVITY_DOMAIN_HIP_API, hip_api_callback, NULL));
+ }
ROCTRACER_CALL(roctracer_disable_op_callback(ACTIVITY_DOMAIN_HIP_API, HIP_API_ID_hipModuleUnload));
-
if (is_stats_opt) {
const char* path = NULL;
FILE* f = open_output_file(output_prefix, "hip_api_stats.csv", &path);