Skip to content

Commit 7b17f96

Browse files
authored
Fix static object issues in rocprofiler tool init (#636)
1 parent 2929a36 commit 7b17f96

File tree

1 file changed

+25
-22
lines changed

1 file changed

+25
-22
lines changed

src/services/rocprofiler/RocProfiler.cpp

+25-22
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ class RocProfilerService
9393
std::map<uint64_t, std::string> m_kernel_info;
9494
std::mutex m_kernel_info_mutex;
9595

96+
std::map<uint64_t, const rocprofiler_agent_t*> agent_info_map;
97+
9698
Channel m_channel;
9799

98100
static RocProfilerService* s_instance;
@@ -103,8 +105,6 @@ class RocProfilerService
103105

104106
static rocprofiler_buffer_id_t activity_buf;
105107

106-
static std::map<uint64_t, const rocprofiler_agent_t*> s_agents;
107-
108108
void create_attributes(Caliper* c)
109109
{
110110
Attribute subs_attr = c->get_attribute("subscription_event");
@@ -211,7 +211,7 @@ class RocProfilerService
211211

212212
const char* kernel_name = s_instance->get_kernel_name(record->dispatch_info.kernel_id);
213213

214-
uint64_t agent = s_agents.at(record->dispatch_info.agent_id.handle)->logical_node_id;
214+
uint64_t agent = s_instance->agent_info_map.at(record->dispatch_info.agent_id.handle)->logical_node_id;
215215

216216
const Variant data[] = {
217217
Variant(CALI_TYPE_STRING, activity_name, len),
@@ -250,8 +250,8 @@ class RocProfilerService
250250
&len
251251
));
252252

253-
uint64_t src_agent = s_agents.at(record->src_agent_id.handle)->logical_node_id;
254-
uint64_t dst_agent = s_agents.at(record->dst_agent_id.handle)->logical_node_id;
253+
uint64_t src_agent = s_instance->agent_info_map.at(record->src_agent_id.handle)->logical_node_id;
254+
uint64_t dst_agent = s_instance->agent_info_map.at(record->dst_agent_id.handle)->logical_node_id;
255255

256256
const Variant data[] = {
257257
Variant(CALI_TYPE_STRING, activity_name, len),
@@ -378,6 +378,26 @@ class RocProfilerService
378378
m_enable_snapshot_timestamps = config.get("enable_snapshot_timestamps").to_bool();
379379

380380
create_attributes(c);
381+
382+
// initialize rocprofiler agents
383+
//
384+
385+
rocprofiler_query_available_agents_cb_t iterate_agents =
386+
[](rocprofiler_agent_version_t, const void** agents_arr, size_t num_agents, void* usr) {
387+
for (size_t i = 0; i < num_agents; ++i) {
388+
const auto* agent_v = static_cast<const rocprofiler_agent_v0_t*>(agents_arr[i]);
389+
RocProfilerService* instance = static_cast<RocProfilerService*>(usr);
390+
instance->agent_info_map.emplace(agent_v->id.handle, agent_v);
391+
}
392+
return ROCPROFILER_STATUS_SUCCESS;
393+
};
394+
395+
ROCPROFILER_CALL(rocprofiler_query_available_agents(
396+
ROCPROFILER_AGENT_INFO_VERSION_0,
397+
iterate_agents,
398+
sizeof(rocprofiler_agent_t),
399+
this
400+
));
381401
}
382402

383403
public:
@@ -455,21 +475,6 @@ class RocProfilerService
455475
nullptr
456476
));
457477

458-
rocprofiler_query_available_agents_cb_t iterate_agents =
459-
[](rocprofiler_agent_version_t, const void** agents_arr, size_t num_agents, void*) {
460-
for (size_t i = 0; i < num_agents; ++i) {
461-
const auto* agent_v = static_cast<const rocprofiler_agent_v0_t*>(agents_arr[i]);
462-
s_agents.emplace(agent_v->id.handle, agent_v);
463-
}
464-
return ROCPROFILER_STATUS_SUCCESS;
465-
};
466-
467-
ROCPROFILER_CALL(rocprofiler_query_available_agents(
468-
ROCPROFILER_AGENT_INFO_VERSION_0,
469-
iterate_agents,
470-
sizeof(rocprofiler_agent_t),
471-
nullptr
472-
));
473478
// auto client_thread = rocprofiler_callback_thread_t{};
474479
// ROCPROFILER_CALL(
475480
// rocprofiler_create_callback_thread(&client_thread));
@@ -535,8 +540,6 @@ rocprofiler_context_id_t RocProfilerService::rocprofiler_ctx = {};
535540

536541
rocprofiler_buffer_id_t RocProfilerService::activity_buf = {};
537542

538-
std::map<uint64_t, const rocprofiler_agent_t*> RocProfilerService::s_agents;
539-
540543
const char* RocProfilerService::s_spec = R"json(
541544
{
542545
"name": "rocprofiler",

0 commit comments

Comments
 (0)