diff --git a/src/controller/src/rocprofvis_controller_trace.h b/src/controller/src/rocprofvis_controller_trace.h index 92a20fc2..2ebbb4c7 100644 --- a/src/controller/src/rocprofvis_controller_trace.h +++ b/src/controller/src/rocprofvis_controller_trace.h @@ -39,7 +39,6 @@ class Trace : public Handle rocprofvis_db_progress_percent_t progress_percent, rocprofvis_db_status_t status, rocprofvis_db_status_message_t message, void* user_data); - }; } // namespace Controller diff --git a/src/controller/src/system/rocprofvis_controller_trace_system.cpp b/src/controller/src/system/rocprofvis_controller_trace_system.cpp index 3a985c19..393ca79e 100644 --- a/src/controller/src/system/rocprofvis_controller_trace_system.cpp +++ b/src/controller/src/system/rocprofvis_controller_trace_system.cpp @@ -34,6 +34,7 @@ #include #include #include +#include namespace RocProfVis { @@ -441,20 +442,7 @@ rocprofvis_result_t SystemTrace::LoadRocpd(char const* const filename) { Track* track = new Track(type, track_id, dm_track_handle, this); { - std::string dm_track_name = - rocprofvis_dm_get_property_as_charptr( - dm_track_handle, - kRPVDMTrackCategoryEnumCharPtr, 0); - dm_track_name += ":"; - dm_track_name += - rocprofvis_dm_get_property_as_charptr( - dm_track_handle, - kRPVDMTrackMainProcessNameCharPtr, 0); - dm_track_name += ":"; - dm_track_name += - rocprofvis_dm_get_property_as_charptr( - dm_track_handle, - kRPVDMTrackSubProcessNameCharPtr, 0); + std::string dm_track_name = GetTrackName(dm_track_handle, dm_track_type); track->SetString(kRPVControllerTrackName, 0, dm_track_name.c_str()); @@ -1836,6 +1824,64 @@ rocprofvis_result_t SystemTrace::LoadRocpd(char const* const filename) { return result; } +std::string +SystemTrace::GetTrackName(rocprofvis_dm_track_t track_handle, uint64_t track_type) +{ + std::string track_name; + switch(track_type) + { + case kRocProfVisDmPmcTrack: + { + track_name += rocprofvis_dm_get_property_as_charptr( + track_handle, kRPVDMTrackSubProcessNameCharPtr, 0); + break; + } + case kRocProfVisDmKernelDispatchTrack: [[fallthrough]]; + case kRocProfVisDmMemoryAllocationTrack: [[fallthrough]]; + case kRocProfVisDmMemoryCopyTrack: + { + track_name += rocprofvis_dm_get_property_as_charptr( + track_handle, kRPVDMTrackCategoryEnumCharPtr, 0); + track_name += ":"; + track_name += rocprofvis_dm_get_property_as_charptr( + track_handle, kRPVDMTrackSubProcessNameCharPtr, 0); + break; + } + case kRocProfVisDmRegionMainTrack: + { + track_name += rocprofvis_dm_get_property_as_charptr( + track_handle, kRPVDMTrackSubProcessNameCharPtr, 0); + break; + } + case kRocProfVisDmRegionSampleTrack: + { + track_name += "Sampled "; + std::string str(rocprofvis_dm_get_property_as_charptr( + track_handle, kRPVDMTrackSubProcessNameCharPtr, 0)); + std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c) { + return static_cast(std::tolower(c)); + }); + track_name += str; + + break; + } + default: + { + track_name += rocprofvis_dm_get_property_as_charptr( + track_handle, kRPVDMTrackCategoryEnumCharPtr, 0); + track_name += ":"; + track_name += rocprofvis_dm_get_property_as_charptr( + track_handle, kRPVDMTrackMainProcessNameCharPtr, 0); + track_name += ":"; + track_name += rocprofvis_dm_get_property_as_charptr( + track_handle, kRPVDMTrackSubProcessNameCharPtr, 0); + break; + } + } + + return track_name; +} + rocprofvis_result_t SystemTrace::Load(char const* const filename, RocProfVis::Controller::Future& future) { assert (filename && strlen(filename)); diff --git a/src/controller/src/system/rocprofvis_controller_trace_system.h b/src/controller/src/system/rocprofvis_controller_trace_system.h index d300e6f2..1440c35e 100644 --- a/src/controller/src/system/rocprofvis_controller_trace_system.h +++ b/src/controller/src/system/rocprofvis_controller_trace_system.h @@ -90,6 +90,8 @@ class SystemTrace : public Trace MemoryManager* GetMemoryManager(); private: + std::string GetTrackName(rocprofvis_dm_track_t track_handle, uint64_t track_type); + std::vector m_tracks; std::vector m_nodes; Timeline* m_timeline; diff --git a/src/model/src/database/rocprofvis_db_rocprof.cpp b/src/model/src/database/rocprofvis_db_rocprof.cpp index af2eb308..4d9f4e81 100644 --- a/src/model/src/database/rocprofvis_db_rocprof.cpp +++ b/src/model/src/database/rocprofvis_db_rocprof.cpp @@ -462,8 +462,6 @@ rocprofvis_dm_result_t RocprofDatabase::ReadTraceMetadata(Future* future) ShowProgress(5, "Indexing tables", kRPVDbBusy, future); CreateIndexes(); - - ShowProgress(10, "Load Information Tables", kRPVDbBusy, future); LoadInformationTables(future); diff --git a/src/model/src/database/rocprofvis_db_sqlite.cpp b/src/model/src/database/rocprofvis_db_sqlite.cpp index c90a3035..81982a13 100644 --- a/src/model/src/database/rocprofvis_db_sqlite.cpp +++ b/src/model/src/database/rocprofvis_db_sqlite.cpp @@ -676,7 +676,7 @@ rocprofvis_dm_result_t SqliteDatabase::ExecuteSQLQuery(DbInstance* db_instance, std::string guid_str = GuidAt(db_instance->GuidIndex()); ReplaceAllSubstrings(query_str, "%GUID%", guid_str); query = query_str.c_str(); - int rc = Sqlite3Exec(conn, query, params->callback, params); + int rc = Sqlite3Exec(conn, query, params->callback, params); if(rc != SQLITE_OK) { if (rc == SQLITE_ABORT) diff --git a/src/view/src/rocprofvis_flame_track_item.cpp b/src/view/src/rocprofvis_flame_track_item.cpp index 6aafe7b3..9a28f2d9 100644 --- a/src/view/src/rocprofvis_flame_track_item.cpp +++ b/src/view/src/rocprofvis_flame_track_item.cpp @@ -72,27 +72,6 @@ FlameTrackItem::FlameTrackItem(DataProvider& dp, this->HandleTimelineSelectionChanged(e); }; - // Check if thread is main thread. - const TrackInfo* track_info = m_data_provider.DataModel().GetTimeline().GetTrack(m_id); - - if(track_info != nullptr) - { - if(track_info->topology.type == TrackInfo::Topology::InstrumentedThread) - { - const ThreadInfo* thread_info = - m_data_provider.DataModel().GetTopology().GetInstrumentedThread(track_info->topology.id); - if(thread_info->tid == track_info->topology.process_id) - { - m_show_pill_label = true; - m_pill_label = "MAIN"; - } - } - } - else - { - spdlog::error("TrackItem: Invalid track id {}", m_id); - } - // Subscribe to timeline selection changed event m_timeline_event_selection_changed_token = EventManager::GetInstance()->Subscribe( static_cast(RocEvents::kTimelineEventSelectionChanged), diff --git a/src/view/src/rocprofvis_timeline_view.cpp b/src/view/src/rocprofvis_timeline_view.cpp index a5afa215..5114d8b0 100644 --- a/src/view/src/rocprofvis_timeline_view.cpp +++ b/src/view/src/rocprofvis_timeline_view.cpp @@ -428,17 +428,17 @@ TimelineView::Update() if(m_data_provider.SetGraphIndex(m_reorder_request.track_id, m_reorder_request.new_index)) { - std::vector m_graphs_reordered; + std::vector graphs_reordered; TimelineModel& tlm = m_data_provider.DataModel().GetTimeline(); - m_graphs_reordered.resize(tlm.GetTrackCount()); + graphs_reordered.resize(tlm.GetTrackCount()); for(TrackGraph& graph : *m_graphs) { const TrackInfo* metadata = tlm.GetTrack(graph.chart->GetID()); ROCPROFVIS_ASSERT(metadata); - m_graphs_reordered[metadata->index] = std::move(graph); + graphs_reordered[metadata->index] = std::move(graph); } - *m_graphs = std::move(m_graphs_reordered); + *m_graphs = std::move(graphs_reordered); } } // Rebuild the positioning map. diff --git a/src/view/src/rocprofvis_track_item.cpp b/src/view/src/rocprofvis_track_item.cpp index 2a3e2eca..06f13d9d 100644 --- a/src/view/src/rocprofvis_track_item.cpp +++ b/src/view/src/rocprofvis_track_item.cpp @@ -47,6 +47,24 @@ TrackItem::TrackItem(DataProvider& dp, uint64_t id, std::string name, { m_track_height = m_track_project_settings.Height(); } + + const TrackInfo* track_info = + m_data_provider.DataModel().GetTimeline().GetTrack(m_id); + if(IsItMainThreadTrack(track_info)) + { + m_meta_area_label = m_data_provider.DataModel() + .GetTopology() + .GetProcess(track_info->topology.process_id) + ->command + + ": " + m_name; + + m_show_pill_label = true; + m_pill_label = "MAIN"; + } + else + { + m_meta_area_label = m_name; + } } bool @@ -263,7 +281,7 @@ TrackItem::RenderMetaArea() ImGui::PushFont(large_font); - ImGui::TextUnformatted(m_name.c_str()); + ImGui::TextUnformatted(m_meta_area_label.c_str()); ImGui::PopFont(); @@ -321,8 +339,7 @@ TrackItem::RenderPillLabel(ImVec2 container_size) } ImGui::PushFont(m_settings.GetFontManager().GetFont(FontType::kSmall)); - const char* main_label = "MAIN"; - ImVec2 text_size = ImGui::CalcTextSize(main_label); + ImVec2 text_size = ImGui::CalcTextSize(m_pill_label.c_str()); float padding_x = 8.0f; float padding_y = 2.0f; ImVec2 pillbox_size(text_size.x + 2 * padding_x, text_size.y + 2 * padding_y); @@ -338,7 +355,7 @@ TrackItem::RenderPillLabel(ImVec2 container_size) ImVec2 text_pos = pillbox_pos + ImVec2(padding_x, padding_y); ImGui::SetCursorPos(text_pos); - ImGui::TextUnformatted(main_label); + ImGui::TextUnformatted(m_pill_label.c_str()); ImGui::PopFont(); } @@ -471,6 +488,29 @@ TrackItem::FetchHelper() } } +bool +TrackItem::IsItMainThreadTrack(const TrackInfo* track_info) +{ + if(track_info != nullptr) + { + if(track_info->topology.type == TrackInfo::Topology::InstrumentedThread) + { + const ThreadInfo* thread_info = + m_data_provider.DataModel().GetTopology().GetInstrumentedThread( + track_info->topology.id); + if(thread_info->tid == track_info->topology.process_id) + { + return true; + } + } + } + else + { + spdlog::error("TrackItem: Invalid track id {}", m_id); + } + return false; +} + bool TrackItem::HandleTrackDataChanged(uint64_t request_id, uint64_t response_code) { diff --git a/src/view/src/rocprofvis_track_item.h b/src/view/src/rocprofvis_track_item.h index 1513988e..4f2a6010 100644 --- a/src/view/src/rocprofvis_track_item.h +++ b/src/view/src/rocprofvis_track_item.h @@ -93,6 +93,7 @@ class TrackItem virtual bool ExtractPointsFromData() = 0; void FetchHelper(); + bool IsItMainThreadTrack(const TrackInfo* track_info); uint64_t m_id; float m_track_height; @@ -121,6 +122,7 @@ class TrackItem static float s_metadata_width; bool m_show_pill_label; std::string m_pill_label; + std::string m_meta_area_label; private: TrackProjectSettings m_track_project_settings; diff --git a/src/view/src/rocprofvis_track_topology.cpp b/src/view/src/rocprofvis_track_topology.cpp index 39ba587c..dbd9814a 100644 --- a/src/view/src/rocprofvis_track_topology.cpp +++ b/src/view/src/rocprofvis_track_topology.cpp @@ -145,7 +145,8 @@ TrackTopology::UpdateTopology() InfoTable::Cell{ process_info->environment, false } } } }; m_topology.nodes[i].processes[j].header = - "[" + std::to_string(process_info->id) + "]"; + process_info->command + + " (" + std::to_string(process_info->id) + ")"; const std::vector& queue_ids = process_info->queue_ids; m_topology.nodes[i].processes[j].queues.resize(queue_ids.size()); m_topology.nodes[i].processes[j].queue_header = @@ -266,7 +267,7 @@ TrackTopology::UpdateTopology() m_topology.nodes[i].processes[j].sampled_threads.resize( sampled_thread_ids.size()); m_topology.nodes[i].processes[j].sampled_thread_header = - "Sample Threads (" + + "Sampled Threads (" + std::to_string(sampled_thread_ids.size()) + ")"; for(int k = 0; k < sampled_thread_ids.size(); k++) {