1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00
This commit is contained in:
Grégoire Roussel 2024-08-09 01:28:10 +02:00
parent 09ac6b0946
commit 2e684723e8

View File

@ -17,12 +17,14 @@
using namespace std::chrono_literals; using namespace std::chrono_literals;
bool orderImportTimelineEvents(tracy::Worker::ImportEventTimeline const& a, tracy::Worker::ImportEventTimeline const& b) bool orderImportTimelineEvents( tracy::Worker::ImportEventTimeline const& a,
tracy::Worker::ImportEventTimeline const& b )
{ {
return a.timestamp < b.timestamp; return a.timestamp < b.timestamp;
} }
bool orderImportMessageEvents(tracy::Worker::ImportEventMessages const& a, tracy::Worker::ImportEventMessages const& b) bool orderImportMessageEvents( tracy::Worker::ImportEventMessages const& a,
tracy::Worker::ImportEventMessages const& b )
{ {
return a.timestamp < b.timestamp; return a.timestamp < b.timestamp;
} }
@ -101,22 +103,16 @@ struct ExportedWorker
} }
// sort timeline and messages events // sort timeline and messages events
std::inplace_merge(out.timeline.begin(), std::inplace_merge( out.timeline.begin(), out.timeline.begin() + eventsSortedSoFar, out.timeline.end(),
out.timeline.begin() + eventsSortedSoFar,
out.timeline.end(),
orderImportTimelineEvents ); orderImportTimelineEvents );
eventsSortedSoFar += exported.timeline.size(); eventsSortedSoFar += exported.timeline.size();
std::inplace_merge(out.messages.begin(), std::inplace_merge( out.messages.begin(), out.messages.begin() + messagesSortedSoFar, out.messages.end(),
out.messages.begin() + messagesSortedSoFar,
out.messages.end(),
orderImportMessageEvents ); orderImportMessageEvents );
messagesSortedSoFar += exported.messages.size(); messagesSortedSoFar += exported.messages.size();
} }
return out; return out;
} }
static std::optional<ExportedWorker> fromTracyFile( std::string const& filepath, bool exportPlots ) static std::optional<ExportedWorker> fromTracyFile( std::string const& filepath, bool exportPlots )
{ {
std::unique_ptr<tracy::FileRead> sourceFile{ tracy::FileRead::Open( ( filepath.c_str() ) ) }; std::unique_ptr<tracy::FileRead> sourceFile{ tracy::FileRead::Open( ( filepath.c_str() ) ) };
@ -127,8 +123,7 @@ struct ExportedWorker
} }
std::cout << "reading " << filepath << std::endl; std::cout << "reading " << filepath << std::endl;
tracy::Worker worker{*sourceFile, tracy::Worker worker{ *sourceFile, tracy::EventType::All,
tracy::EventType::All,
true, // otherwise source zones are empty true, // otherwise source zones are empty
false }; false };
while( !worker.AreSourceLocationZonesReady() ) while( !worker.AreSourceLocationZonesReady() )
@ -229,7 +224,6 @@ struct ExportedWorker
} }
}; };
[[noreturn]] void Usage() [[noreturn]] void Usage()
{ {
printf( "Usage: merge [-fp] -o output.tracy input1.tracy [input2.tracy]...\n\n" ); printf( "Usage: merge [-fp] -o output.tracy input1.tracy [input2.tracy]...\n\n" );
@ -318,8 +312,8 @@ int main(int argc, char* argv[])
} }
std::vector<ExportedWorker const*> exportRefs; std::vector<ExportedWorker const*> exportRefs;
std::transform( std::transform( exports.cbegin(), exports.cend(), std::back_inserter( exportRefs ),
exports.cbegin(), exports.cend(), std::back_inserter(exportRefs), [](ExportedWorker const& ex) { return &ex; }); []( ExportedWorker const& ex ) { return &ex; } );
auto mergedImport = ExportedWorker::merge( exportRefs ); auto mergedImport = ExportedWorker::merge( exportRefs );
@ -331,12 +325,8 @@ int main(int argc, char* argv[])
fprintf( stderr, "Cannot open output file!\n" ); fprintf( stderr, "Cannot open output file!\n" );
exit( 1 ); exit( 1 );
} }
tracy::Worker outputWorker(mergedImport.name.c_str(), tracy::Worker outputWorker( mergedImport.name.c_str(), mergedImport.process.c_str(), mergedImport.timeline,
mergedImport.process.c_str(), mergedImport.messages, mergedImport.plots, mergedImport.threadNames );
mergedImport.timeline,
mergedImport.messages,
mergedImport.plots,
mergedImport.threadNames);
outputWorker.Write( *outputFileWrite, false ); outputWorker.Write( *outputFileWrite, false );
outputFileWrite->Finish(); outputFileWrite->Finish();
} }