diff --git a/alib2algo/src/measurements/MeasurementFrame.cpp b/alib2algo/src/measurements/MeasurementFrame.cpp index 248034122f81850f19d1e19f3df196768f1a8d12..042ed6b06ee58a7a3aea3010165ed20d143f5535 100644 --- a/alib2algo/src/measurements/MeasurementFrame.cpp +++ b/alib2algo/src/measurements/MeasurementFrame.cpp @@ -10,22 +10,26 @@ namespace measurements { MeasurementFrame::MeasurementFrame ( measurements::stealth_string name, measurements::Type type, unsigned parent_idx ) : name ( std::move ( name ) ), type ( type ), parent_idx ( parent_idx ), time ( ), memory ( ) { } -void MeasurementFrame::to_xml_tokens ( std::deque < sax::Token > & tokens, const measurements::stealth_vector < MeasurementFrame > & frames ) const { +void MeasurementFrame::xml_tokens ( std::deque < sax::Token > & tokens, unsigned idx, const measurements::stealth_vector < MeasurementFrame > & frames ) { + const MeasurementFrame & frame = frames[idx]; + tokens.emplace_back ( "MeasurementFrame", sax::Token::TokenType::START_ELEMENT ); tokens.emplace_back ( "Name", sax::Token::TokenType::START_ELEMENT ); - tokens.emplace_back ( measurements::to_string ( name ), sax::Token::TokenType::CHARACTER ); + tokens.emplace_back ( measurements::to_string ( frame.name ), sax::Token::TokenType::CHARACTER ); tokens.emplace_back ( "Name", sax::Token::TokenType::END_ELEMENT ); tokens.emplace_back ( "Type", sax::Token::TokenType::START_ELEMENT ); - tokens.emplace_back ( measurements::to_string ( type ), sax::Token::TokenType::CHARACTER ); + tokens.emplace_back ( measurements::to_string ( frame.type ), sax::Token::TokenType::CHARACTER ); tokens.emplace_back ( "Type", sax::Token::TokenType::END_ELEMENT ); - time.to_xml_tokens ( tokens ); - memory.to_xml_tokens ( tokens ); + if ( frame.type != measurements::Type::ROOT ) { + TimeDataFrame::xml_tokens ( tokens, idx, frames ); + MemoryDataFrame::xml_tokens ( tokens, idx, frames ); + } tokens.emplace_back ( "SubFrames", sax::Token::TokenType::START_ELEMENT ); - for ( unsigned sub_idx : sub_idxs ) - frames[sub_idx].to_xml_tokens ( tokens, frames ); + for ( unsigned sub_idx : frame.sub_idxs ) + xml_tokens ( tokens, sub_idx, frames ); tokens.emplace_back ( "SubFrames", sax::Token::TokenType::END_ELEMENT ); diff --git a/alib2algo/src/measurements/MeasurementFrames.hpp b/alib2algo/src/measurements/MeasurementFrames.hpp index 9112432a894f9aff3ec999b0a4bcfde81f2cc108..40c869fe1eb44f1273fa24fc3e649dcaa0931ee1 100644 --- a/alib2algo/src/measurements/MeasurementFrames.hpp +++ b/alib2algo/src/measurements/MeasurementFrames.hpp @@ -31,11 +31,10 @@ struct MemoryDataFrame { size_t current_heap_usage; - void to_xml_tokens ( std::deque < sax::Token > & ) const; - static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); static void hint ( unsigned, measurements::stealth_vector < MeasurementFrame > &, MemoryHint ); + static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & ); }; std::ostream & operator <<( std::ostream &, const MemoryDataFrame & ); @@ -46,10 +45,9 @@ struct TimeDataFrame { std::chrono::microseconds duration; std::chrono::microseconds real_duration; - void to_xml_tokens ( std::deque < sax::Token > & ) const; - static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); + static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & ); }; std::ostream & operator <<( std::ostream &, const TimeDataFrame & ); @@ -64,9 +62,8 @@ struct MeasurementFrame { TimeDataFrame time; MemoryDataFrame memory; - void to_xml_tokens ( std::deque < sax::Token > &, const measurements::stealth_vector < MeasurementFrame > & ) const; - MeasurementFrame ( measurements::stealth_string, measurements::Type, unsigned ); + static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & ); }; std::ostream & operator <<( std::ostream &, const MeasurementFrame & ); diff --git a/alib2algo/src/measurements/MeasurementResults.cpp b/alib2algo/src/measurements/MeasurementResults.cpp index 347538dea7158485212978f94cdf6cc8e405d563..01ea0d03e5c8fe2710506ec94b5cc5705abc261f 100644 --- a/alib2algo/src/measurements/MeasurementResults.cpp +++ b/alib2algo/src/measurements/MeasurementResults.cpp @@ -8,14 +8,13 @@ namespace measurements { MeasurementResults::MeasurementResults ( const measurements::stealth_vector < MeasurementFrame > & frames ) : frames ( frames ) { } -std::deque < sax::Token > MeasurementResults::to_xml_tokens ( ) const { +std::deque < sax::Token > MeasurementResults::xml_tokens ( ) const { std::deque < sax::Token > tokens; tokens.emplace_back ( "MeasurementResults", sax::Token::TokenType::START_ELEMENT ); - for(unsigned sub_idx : frames[0].sub_idxs) { - frames[sub_idx].to_xml_tokens ( tokens, frames ); - } + MeasurementFrame::xml_tokens ( tokens, 0, frames ); + tokens.emplace_back ( "MeasurementResults", sax::Token::TokenType::END_ELEMENT ); return tokens; } diff --git a/alib2algo/src/measurements/MeasurementResults.hpp b/alib2algo/src/measurements/MeasurementResults.hpp index ef38fcc1936d195149d612aa1bf328cc07fb3911..4a7dd5f4509402e9b929e92017264591ad8de909 100644 --- a/alib2algo/src/measurements/MeasurementResults.hpp +++ b/alib2algo/src/measurements/MeasurementResults.hpp @@ -20,7 +20,7 @@ struct MeasurementResults { void print_as_list ( std::ostream & ) const; void print_as_tree ( std::ostream & ) const; - std::deque < sax::Token > to_xml_tokens ( ) const; + std::deque < sax::Token > xml_tokens ( ) const; private: void print_as_list ( std::ostream &, unsigned ) const; diff --git a/alib2algo/src/measurements/MemoryDataFrame.cpp b/alib2algo/src/measurements/MemoryDataFrame.cpp index 5a0659dce2e9b865ccd3cdedac845bcba481f921..b15685a496995421dc8b198710a1b74542529d00 100644 --- a/alib2algo/src/measurements/MemoryDataFrame.cpp +++ b/alib2algo/src/measurements/MemoryDataFrame.cpp @@ -52,16 +52,18 @@ void MemoryDataFrame::hint ( unsigned frame_idx, measurements::stealth_vector < } } -void MemoryDataFrame::to_xml_tokens ( std::deque < sax::Token > & tokens ) const { +void MemoryDataFrame::xml_tokens ( std::deque < sax::Token > & tokens, unsigned idx, const measurements::stealth_vector < MeasurementFrame > & frames ) { + const MemoryDataFrame & frame = frames[idx].memory; + tokens.emplace_back ( "MemoryData", sax::Token::TokenType::START_ELEMENT ); tokens.emplace_back ( "StartHeapUsage", sax::Token::TokenType::START_ELEMENT ); - tokens.emplace_back ( std::to_string ( start_heap_usage ), sax::Token::TokenType::CHARACTER ); + tokens.emplace_back ( std::to_string ( frame.start_heap_usage ), sax::Token::TokenType::CHARACTER ); tokens.emplace_back ( "StartHeapUsage", sax::Token::TokenType::END_ELEMENT ); tokens.emplace_back ( "EndHeapUsage", sax::Token::TokenType::START_ELEMENT ); - tokens.emplace_back ( std::to_string ( end_heap_usage ), sax::Token::TokenType::CHARACTER ); + tokens.emplace_back ( std::to_string ( frame.end_heap_usage ), sax::Token::TokenType::CHARACTER ); tokens.emplace_back ( "EndHeapUsage", sax::Token::TokenType::END_ELEMENT ); tokens.emplace_back ( "HighWatermark", sax::Token::TokenType::START_ELEMENT ); - tokens.emplace_back ( std::to_string ( high_watermark ), sax::Token::TokenType::CHARACTER ); + tokens.emplace_back ( std::to_string ( frame.high_watermark ), sax::Token::TokenType::CHARACTER ); tokens.emplace_back ( "HighWatermark", sax::Token::TokenType::END_ELEMENT ); tokens.emplace_back ( "MemoryData", sax::Token::TokenType::END_ELEMENT ); } diff --git a/alib2algo/src/measurements/TimeDataFrame.cpp b/alib2algo/src/measurements/TimeDataFrame.cpp index cc448d34ef335c1ef5d9d9c1585d8e26a14aaa52..6965d96b760fee294c26460e9162661d092ab2af 100644 --- a/alib2algo/src/measurements/TimeDataFrame.cpp +++ b/alib2algo/src/measurements/TimeDataFrame.cpp @@ -26,13 +26,15 @@ void TimeDataFrame::update ( unsigned frame_idx, measurements::stealth_vector < parent_frame.time.real_duration -= current_frame.time.duration; } -void TimeDataFrame::to_xml_tokens ( std::deque < sax::Token > & tokens ) const { +void TimeDataFrame::xml_tokens ( std::deque < sax::Token > & tokens, unsigned idx, const measurements::stealth_vector < MeasurementFrame > & frames ) { + const TimeDataFrame & frame = frames[idx].time; + tokens.emplace_back ( "TimeData", sax::Token::TokenType::START_ELEMENT ); tokens.emplace_back ( "Duration", sax::Token::TokenType::START_ELEMENT ); - tokens.emplace_back ( std::to_string ( duration.count ( ) ), sax::Token::TokenType::CHARACTER ); + tokens.emplace_back ( std::to_string ( frame.duration.count ( ) ), sax::Token::TokenType::CHARACTER ); tokens.emplace_back ( "Duration", sax::Token::TokenType::END_ELEMENT ); tokens.emplace_back ( "RealDuration", sax::Token::TokenType::START_ELEMENT ); - tokens.emplace_back ( std::to_string ( real_duration.count ( ) ), sax::Token::TokenType::CHARACTER ); + tokens.emplace_back ( std::to_string ( frame.real_duration.count ( ) ), sax::Token::TokenType::CHARACTER ); tokens.emplace_back ( "RealDuration", sax::Token::TokenType::END_ELEMENT ); tokens.emplace_back ( "TimeData", sax::Token::TokenType::END_ELEMENT ); } diff --git a/alib2algo/test-src/measurements/MeasurementsTest.cpp b/alib2algo/test-src/measurements/MeasurementsTest.cpp index b9e805c9a061607d80e0c135b84da1709f929575..9bc30fc45ea4951ca9eb5090c3117e7d52d3cc55 100644 --- a/alib2algo/test-src/measurements/MeasurementsTest.cpp +++ b/alib2algo/test-src/measurements/MeasurementsTest.cpp @@ -60,7 +60,7 @@ void MeasurementsTest::testTimeMeasurements ( ) { std::cout << measurements::results ( ) << std::endl; - sax::SaxComposeInterface::printStdout ( measurements::results ( ).to_xml_tokens ( ) ); + sax::SaxComposeInterface::printStdout ( measurements::results ( ).xml_tokens ( ) ); } void MeasurementsTest::testMemoryMeasurements ( ) { @@ -82,5 +82,5 @@ void MeasurementsTest::testMemoryMeasurements ( ) { std::cout << measurements::results ( ) << std::endl; - sax::SaxComposeInterface::printStdout ( measurements::results ( ).to_xml_tokens ( ) ); + sax::SaxComposeInterface::printStdout ( measurements::results ( ).xml_tokens ( ) ); }