Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Cruanes <simon.cruanes.2007@m4x.org>2021-05-07 03:47:03 +0300
committerSimon Cruanes <simon.cruanes.2007@m4x.org>2021-05-07 03:47:03 +0300
commitb71c9c12c4a9b72159e755beb45dafebf58bdff1 (patch)
tree944b9087bb8463ab54fd896f9565f57d7db073c2 /import-chrome
parentf03b677ffa0fd96fcf859c32e79b740fac7dd59e (diff)
map {tid,pid} from catapult into a virtual tid
Diffstat (limited to 'import-chrome')
-rw-r--r--import-chrome/src/import-chrome.cpp33
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>();
}
}
}