Skip to content
Snippets Groups Projects
Commit 1d38d6e3 authored by Radovan Červený's avatar Radovan Červený
Browse files

implemented ostream operators for measurement structs and types

parent f1129bc0
No related branches found
No related tags found
1 merge request!14BP_cervera3 - new measurements
Showing
with 167 additions and 58 deletions
...@@ -44,31 +44,14 @@ void MeasurementEngine::reset_measurements ( ) { ...@@ -44,31 +44,14 @@ void MeasurementEngine::reset_measurements ( ) {
frame_idx_stack.push_back ( 0 ); frame_idx_stack.push_back ( 0 );
} }
   
MeasurementResults MeasurementEngine::get_results ( ) const {
return MeasurementResults ( frames );
}
void MeasurementEngine::memory_hint ( MemoryHint mh ) { void MeasurementEngine::memory_hint ( MemoryHint mh ) {
if ( ( frame_idx_stack.size ( ) == 0 ) || ( frames[frame_idx_stack.back ( )].type == measurements::Type::ROOT ) ) return; if ( ( frame_idx_stack.size ( ) == 0 ) || ( frames[frame_idx_stack.back ( )].type == measurements::Type::ROOT ) ) return;
   
MemoryDataFrame::hint ( frame_idx_stack.back ( ), frames, std::move ( mh ) ); MemoryDataFrame::hint ( frame_idx_stack.back ( ), frames, std::move ( mh ) );
} }
   
void MeasurementEngine::print_as_list ( std::ostream & os, unsigned idx ) {
MeasurementFrame & frame = frames[idx];
if ( frame.type != measurements::Type::ROOT ) {
os << std::make_tuple ( frame.name, frame.type, frame.parent_idx, frame.time.to_string ( ), frame.memory.to_string ( ) );
if ( idx != frames.size ( ) - 1 )
os << ", ";
}
for ( unsigned sub_idx : frame.sub_idxs )
print_as_list ( os, sub_idx );
}
void MeasurementEngine::print_as_list ( std::ostream & os ) {
print_as_list ( os, 0 );
}
void MeasurementEngine::print_as_tree ( std::ostream & ) {
}
} }
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
#ifndef MEASUREMENT_ENGINE_HPP_ #ifndef MEASUREMENT_ENGINE_HPP_
#define MEASUREMENT_ENGINE_HPP_ #define MEASUREMENT_ENGINE_HPP_
   
#include <ostream>
#include "MeasurementTypes.hpp" #include "MeasurementTypes.hpp"
#include "MeasurementFrames.hpp" #include "MeasurementFrames.hpp"
#include "MeasurementResults.hpp"
   
namespace measurements { namespace measurements {
   
...@@ -17,20 +17,14 @@ class MeasurementEngine { ...@@ -17,20 +17,14 @@ class MeasurementEngine {
   
MeasurementEngine ( ); MeasurementEngine ( );
   
void print_as_list ( std::ostream &, unsigned );
public: public:
void push_measurement_frame ( measurements::stealth_string, measurements::Type ); void push_measurement_frame ( measurements::stealth_string, measurements::Type );
void pop_measurement_frame ( ); void pop_measurement_frame ( );
void reset_measurements ( ); void reset_measurements ( );
MeasurementResults get_results ( ) const;
   
void memory_hint ( MemoryHint ); void memory_hint ( MemoryHint );
   
void print_as_list ( std::ostream & );
void print_as_tree ( std::ostream & );
// void print_as_xml ( std::ostream & );
static MeasurementEngine INSTANCE; static MeasurementEngine INSTANCE;
}; };
   
......
/*
* Author: Radovan Cerveny
*/
#include <sstream>
#include "MeasurementFrames.hpp"
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 ( ) {
}
std::ostream & operator <<( std::ostream & os, const MeasurementFrame & frame ) {
std::stringstream ss;
ss << "(TIME: " << frame.time << "), (MEM: " << frame.memory << ")";
os << std::make_tuple ( frame.name, frame.type, frame.parent_idx, frame.sub_idxs, ss.str ( ) );
return os;
}
}
...@@ -29,29 +29,25 @@ struct MemoryDataFrame { ...@@ -29,29 +29,25 @@ struct MemoryDataFrame {
   
size_t current_heap_usage; size_t current_heap_usage;
   
std::string to_string ( );
// void to_xml ( );
static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
static void hint ( unsigned, measurements::stealth_vector < MeasurementFrame > &, MemoryHint ); static void hint ( unsigned, measurements::stealth_vector < MeasurementFrame > &, MemoryHint );
}; };
   
std::ostream & operator <<( std::ostream &, const MemoryDataFrame & );
struct TimeDataFrame { struct TimeDataFrame {
std::chrono::time_point < std::chrono::high_resolution_clock > start; std::chrono::time_point < std::chrono::high_resolution_clock > start;
   
std::chrono::microseconds duration; std::chrono::microseconds duration;
std::chrono::microseconds real_duration; std::chrono::microseconds real_duration;
   
std::string to_string ( );
// void to_xml ( );
static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
}; };
   
std::ostream & operator <<( std::ostream &, const TimeDataFrame & );
struct MeasurementFrame { struct MeasurementFrame {
measurements::stealth_string name; measurements::stealth_string name;
measurements::Type type; measurements::Type type;
...@@ -62,9 +58,10 @@ struct MeasurementFrame { ...@@ -62,9 +58,10 @@ struct MeasurementFrame {
TimeDataFrame time; TimeDataFrame time;
MemoryDataFrame memory; MemoryDataFrame memory;
   
MeasurementFrame ( measurements::stealth_string name, measurements::Type type, unsigned parent_idx ) : name ( std::move ( name ) ), type ( type ), parent_idx ( parent_idx ), time ( ), memory ( ) { } MeasurementFrame ( measurements::stealth_string, measurements::Type, unsigned );
}; };
   
std::ostream & operator <<( std::ostream &, const MeasurementFrame & );
} }
   
#endif /* MEASUREMENT_FRAME_HPP_ */ #endif /* MEASUREMENT_FRAME_HPP_ */
/*
* Author: Radovan Cerveny
*/
#include "MeasurementResults.hpp"
namespace measurements {
MeasurementResults::MeasurementResults ( const measurements::stealth_vector < MeasurementFrame > & frames ) : frames ( frames ) {
}
void MeasurementResults::print_as_list ( std::ostream & os, unsigned idx ) const {
const MeasurementFrame & frame = frames[idx];
if ( frame.type != measurements::Type::ROOT ) {
os << frame;
if ( idx != frames.size ( ) - 1 )
os << ", ";
}
for ( unsigned sub_idx : frame.sub_idxs )
print_as_list ( os, sub_idx );
}
void MeasurementResults::print_as_tree ( std::ostream &, unsigned ) const {
}
std::ostream & operator <<( std::ostream & os, const MeasurementResults & mr ) {
mr.print_as_list ( os, 0 );
return os;
}
}
/*
* Author: Radovan Cerveny
*/
#ifndef MEASUREMENT_RESULTS_HPP_
#define MEASUREMENT_RESULTS_HPP_
#include <ostream>
#include "MeasurementTypes.hpp"
#include "MeasurementFrames.hpp"
namespace measurements {
struct MeasurementResults {
measurements::stealth_vector < MeasurementFrame > frames;
MeasurementResults ( const measurements::stealth_vector < MeasurementFrame > & );
void print_as_list ( std::ostream &, unsigned ) const;
void print_as_tree ( std::ostream &, unsigned ) const;
};
std::ostream & operator <<( std::ostream &, const MeasurementResults & );
}
#endif /* MEASUREMENT_RESULTS_HPP_ */
/*
* Author: Radovan Cerveny
*/
#include "MeasurementTypes.hpp"
namespace measurements {
std::ostream & operator <<( std::ostream & os, Type t ) {
switch ( t ) {
case Type::ROOT:
os << "ROOT";
break;
case Type::OVERALL:
os << "OVERALL";
break;
case Type::INIT:
os << "INIT";
break;
case Type::FINALIZE:
os << "FINALIZE";
break;
case Type::MAIN:
os << "MAIN";
break;
case Type::AUXILIARY:
os << "AUXILIARY";
break;
}
return os;
}
}
...@@ -11,10 +11,12 @@ ...@@ -11,10 +11,12 @@
   
namespace measurements { namespace measurements {
   
enum Type { enum class Type : unsigned {
ROOT = 0, OVERALL = 1, INIT = 2, FINALIZE = 4, MAIN = 8, AUXILIARY = 16 ROOT = 1, OVERALL = 2, INIT = 4, FINALIZE = 8, MAIN = 16, AUXILIARY = 32
}; };
   
std::ostream & operator <<( std::ostream & os, Type t );
template < typename T, typename ... Args > template < typename T, typename ... Args >
std::unique_ptr < T > make_unique ( Args && ... args ) { std::unique_ptr < T > make_unique ( Args && ... args ) {
return std::unique_ptr < T > ( new T ( std::forward < Args > ( args ) ... ) ); return std::unique_ptr < T > ( new T ( std::forward < Args > ( args ) ... ) );
...@@ -43,6 +45,23 @@ using stealth_string = std::basic_string < char, std::char_traits < char >, stea ...@@ -43,6 +45,23 @@ using stealth_string = std::basic_string < char, std::char_traits < char >, stea
   
template < typename T > template < typename T >
using stealth_vector = std::vector < T, stealth_allocator < T > >; using stealth_vector = std::vector < T, stealth_allocator < T > >;
template < typename T >
std::ostream & operator <<( std::ostream & os, const stealth_vector < T > & vec ) {
os << "[";
bool first = true;
for ( const T & elem : vec ) {
if ( !first ) os << ", ";
first = false;
os << elem;
}
return os << "]";
}
} }
   
#endif /* MEASUREMENT_TYPES_HPP_ */ #endif /* MEASUREMENT_TYPES_HPP_ */
...@@ -52,11 +52,9 @@ void MemoryDataFrame::hint ( unsigned frame_idx, measurements::stealth_vector < ...@@ -52,11 +52,9 @@ void MemoryDataFrame::hint ( unsigned frame_idx, measurements::stealth_vector <
} }
} }
   
std::string MemoryDataFrame::to_string ( ) { std::ostream & operator <<( std::ostream & os, const MemoryDataFrame & mdf ) {
std::stringstream ss; os << mdf.start_heap_usage << "shu, " << mdf.end_heap_usage << "ehu, " << mdf.high_watermark << "hw";
return os;
ss << start_heap_usage << "shu, " << end_heap_usage << "ehu, " << high_watermark << "hw";
return ss.str ( );
} }
   
} }
...@@ -26,11 +26,9 @@ void TimeDataFrame::update ( unsigned frame_idx, measurements::stealth_vector < ...@@ -26,11 +26,9 @@ void TimeDataFrame::update ( unsigned frame_idx, measurements::stealth_vector <
parent_frame.time.real_duration -= current_frame.time.duration; parent_frame.time.real_duration -= current_frame.time.duration;
} }
   
std::string TimeDataFrame::to_string ( ) { std::ostream & operator <<( std::ostream & os, const TimeDataFrame & tdf ) {
std::stringstream ss; os << tdf.duration << ", " << tdf.real_duration;
return os;
ss << duration << ", " << real_duration;
return ss.str ( );
} }
   
} }
...@@ -21,12 +21,12 @@ void reset ( ) { ...@@ -21,12 +21,12 @@ void reset ( ) {
MeasurementEngine::INSTANCE.reset_measurements ( ); MeasurementEngine::INSTANCE.reset_measurements ( );
} }
   
void memory_hint ( MemoryHint mh ) { MeasurementResults results ( ) {
MeasurementEngine::INSTANCE.memory_hint ( std::move ( mh ) ); return MeasurementEngine::INSTANCE.get_results ( );
} }
   
void print_as_list ( std::ostream & os ) { void memory_hint ( MemoryHint mh ) {
MeasurementEngine::INSTANCE.print_as_list ( os ); MeasurementEngine::INSTANCE.memory_hint ( std::move ( mh ) );
} }
   
} }
......
...@@ -38,8 +38,7 @@ void MeasurementsTest::testTimeMeasurements ( ) { ...@@ -38,8 +38,7 @@ void MeasurementsTest::testTimeMeasurements ( ) {
measurements::end ( ); measurements::end ( );
measurements::end ( ); measurements::end ( );
   
measurements::print_as_list ( std::cout ); std::cout << measurements::results() << std::endl;
std::cout << std::endl;
} }
   
void MeasurementsTest::testMemoryMeasurements ( ) { void MeasurementsTest::testMemoryMeasurements ( ) {
...@@ -58,7 +57,6 @@ void MeasurementsTest::testMemoryMeasurements ( ) { ...@@ -58,7 +57,6 @@ void MeasurementsTest::testMemoryMeasurements ( ) {
delete[] bar; delete[] bar;
measurements::end ( ); measurements::end ( );
   
measurements::print_as_list ( std::cout ); std::cout << measurements::results() << std::endl;
std::cout << std::endl;
} }
   
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment