mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-10 10:41:50 +00:00
refactor after review
This commit is contained in:
parent
7e694d452a
commit
d38f579ec3
@ -133,28 +133,37 @@ int main( int argc, char** argv )
|
||||
printf( "\33[2KParsing...\r" );
|
||||
fflush( stdout );
|
||||
|
||||
struct PidTid {
|
||||
// encode a pair of "real pid, real tid" from a trace into a
|
||||
// pseudo thread ID living in the single namespace of Tracy threads.
|
||||
struct PidTidEncoder {
|
||||
uint64_t tid;
|
||||
uint64_t pid;
|
||||
uint64_t both; // fake thread id, unique within Tracy
|
||||
uint64_t pseudo_tid; // fake thread id, unique within Tracy
|
||||
};
|
||||
|
||||
std::vector<PidTid> tids;
|
||||
std::vector<PidTidEncoder> tid_encoders;
|
||||
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 getPseudoTid = [&](json& val) -> uint64_t {
|
||||
uint64_t pid = 0;
|
||||
if ( val.contains( "pid" ) ) {
|
||||
pid = val["pid"].get<uint64_t>();
|
||||
}
|
||||
|
||||
const auto real_tid = val["tid"].get<uint64_t>();
|
||||
|
||||
for ( auto &pair : tid_encoders) {
|
||||
if ( pair.pid == pid && pair.tid == real_tid ) {
|
||||
return pair.pseudo_tid;
|
||||
}
|
||||
}
|
||||
|
||||
const auto result = tids.size();
|
||||
tids.emplace_back(PidTid {.tid=tid, .pid=pid, .both=result});
|
||||
return result;
|
||||
const auto pseudo_tid = tid_encoders.size();
|
||||
tid_encoders.emplace_back(PidTidEncoder {real_tid, pid, pseudo_tid});
|
||||
return pseudo_tid;
|
||||
};
|
||||
|
||||
if( j.is_object() && j.contains( "traceEvents" ) )
|
||||
@ -185,15 +194,10 @@ 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 {
|
||||
getTid(pid, v["tid"].get<uint64_t>()),
|
||||
getPseudoTid(v),
|
||||
uint64_t( v["ts"].get<double>() * 1000. ),
|
||||
v["name"].get<std::string>(),
|
||||
std::move(zoneText),
|
||||
@ -203,7 +207,7 @@ int main( int argc, char** argv )
|
||||
else if( type == "E" )
|
||||
{
|
||||
timeline.emplace_back( tracy::Worker::ImportEventTimeline {
|
||||
getTid(pid, v["tid"].get<uint64_t>()),
|
||||
getPseudoTid(v),
|
||||
uint64_t( v["ts"].get<double>() * 1000. ),
|
||||
"",
|
||||
std::move(zoneText),
|
||||
@ -212,7 +216,7 @@ int main( int argc, char** argv )
|
||||
}
|
||||
else if( type == "X" )
|
||||
{
|
||||
const auto tid = getTid(pid, v["tid"].get<uint64_t>());
|
||||
const auto tid = getPseudoTid(v);
|
||||
const auto ts0 = uint64_t( v["ts"].get<double>() * 1000. );
|
||||
const auto ts1 = ts0 + uint64_t( v["dur"].get<double>() * 1000. );
|
||||
const auto name = v["name"].get<std::string>();
|
||||
@ -222,7 +226,7 @@ int main( int argc, char** argv )
|
||||
else if( type == "i" || type == "I" )
|
||||
{
|
||||
messages.emplace_back( tracy::Worker::ImportEventMessages {
|
||||
getTid(pid, v["tid"].get<uint64_t>()),
|
||||
getPseudoTid(v),
|
||||
uint64_t( v["ts"].get<double>() * 1000. ),
|
||||
v["name"].get<std::string>()
|
||||
} );
|
||||
@ -269,7 +273,7 @@ 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"))
|
||||
{
|
||||
const auto tid = getTid(pid, v["tid"].get<uint64_t>());
|
||||
const auto tid = getPseudoTid(v);
|
||||
threadNames[tid] = v["args"]["name"].get<std::string>();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user