diff options
author | Simon Cruanes <simon.cruanes.2007@m4x.org> | 2021-05-07 03:47:03 +0300 |
---|---|---|
committer | Simon Cruanes <simon.cruanes.2007@m4x.org> | 2021-05-07 03:47:03 +0300 |
commit | b71c9c12c4a9b72159e755beb45dafebf58bdff1 (patch) | |
tree | 944b9087bb8463ab54fd896f9565f57d7db073c2 /import-chrome | |
parent | f03b677ffa0fd96fcf859c32e79b740fac7dd59e (diff) |
map {tid,pid} from catapult into a virtual tid
Diffstat (limited to 'import-chrome')
-rw-r--r-- | import-chrome/src/import-chrome.cpp | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/import-chrome/src/import-chrome.cpp b/import-chrome/src/import-chrome.cpp index 74656cba..9c909b38 100644 --- a/import-chrome/src/import-chrome.cpp +++ b/import-chrome/src/import-chrome.cpp @@ -133,11 +133,30 @@ int main( int argc, char** argv ) printf( "\33[2KParsing...\r" ); fflush( stdout ); + struct PidTid { + uint64_t tid; + uint64_t pid; + uint64_t both; // fake thread id, unique within Tracy + }; + + std::vector<PidTid> tids; std::vector<tracy::Worker::ImportEventTimeline> timeline; std::vector<tracy::Worker::ImportEventMessages> messages; std::vector<tracy::Worker::ImportEventPlots> plots; std::unordered_map<uint64_t, std::string> threadNames; + const auto getTid = [&](uint64_t pid, uint64_t tid) -> uint64_t { + for ( auto &pair : tids ) { + if ( pair.pid == pid && pair.tid == tid ) { + return pair.both; + } + } + + const auto result = tids.size(); + tids.emplace_back(PidTid {.tid=tid, .pid=pid, .both=result}); + return result; + }; + if( j.is_object() && j.contains( "traceEvents" ) ) { j = j["traceEvents"]; @@ -162,10 +181,15 @@ int main( int argc, char** argv ) } } + uint64_t pid = 0; + if ( v.contains( "pid" ) ) { + pid = v["pid"].get<uint64_t>(); + } + if( type == "B" ) { timeline.emplace_back( tracy::Worker::ImportEventTimeline { - v["tid"].get<uint64_t>(), + getTid(pid, v["tid"].get<uint64_t>()), uint64_t( v["ts"].get<double>() * 1000. ), v["name"].get<std::string>(), std::move(zoneText), @@ -175,7 +199,7 @@ int main( int argc, char** argv ) else if( type == "E" ) { timeline.emplace_back( tracy::Worker::ImportEventTimeline { - v["tid"].get<uint64_t>(), + getTid(pid, v["tid"].get<uint64_t>()), uint64_t( v["ts"].get<double>() * 1000. ), "", std::move(zoneText), @@ -194,7 +218,7 @@ int main( int argc, char** argv ) else if( type == "i" || type == "I" ) { messages.emplace_back( tracy::Worker::ImportEventMessages { - v["tid"].get<uint64_t>(), + getTid(pid, v["tid"].get<uint64_t>()), uint64_t( v["ts"].get<double>() * 1000. ), v["name"].get<std::string>() } ); @@ -241,7 +265,8 @@ int main( int argc, char** argv ) { if (v.contains("name") && v["name"] == "thread_name" && v.contains("args") && v["args"].is_object() && v["args"].contains("name")) { - threadNames[v["tid"].get<uint64_t>()] = v["args"]["name"].get<std::string>(); + const auto tid = getTid(pid, v["tid"].get<uint64_t>()); + threadNames[tid] = v["args"]["name"].get<std::string>(); } } } |