diff --git a/alib2algo/src/measurements/MeasurementEngine.hpp b/alib2algo/src/measurements/MeasurementEngine.hpp index 465134ef214c2c9feea1d7dd068d4dc0669324e2..85961b7eca5d1aab6dbafdff3390221549880975 100644 --- a/alib2algo/src/measurements/MeasurementEngine.hpp +++ b/alib2algo/src/measurements/MeasurementEngine.hpp @@ -5,11 +5,13 @@ #ifndef MEASUREMENT_ENGINE_HPP_ #define MEASUREMENT_ENGINE_HPP_ +#include "MeasurementTypes.hpp" + namespace measurements { class MeasurementEngine { public: - virtual void push_measurement_frame ( std::string, unsigned ) = 0; + virtual void push_measurement_frame ( std::string, measurements::Type ) = 0; virtual void pop_measurement_frame ( ) = 0; virtual void get_results ( ) = 0; virtual ~MeasurementEngine ( ) = default; diff --git a/alib2algo/src/measurements/MeasurementTypes.hpp b/alib2algo/src/measurements/MeasurementTypes.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a1332e8665cc276196570aac2a526035282a5e76 --- /dev/null +++ b/alib2algo/src/measurements/MeasurementTypes.hpp @@ -0,0 +1,16 @@ +/* + * Author: Radovan Cerveny + */ + +#ifndef MEASUREMENT_TYPES_HPP_ +#define MEASUREMENT_TYPES_HPP_ + +namespace measurements { + +enum Type { + OVERALL = 1, INIT = 2, FINALIZE = 4, MAIN = 8, AUXILIARY = 16 +}; + +} + +#endif /* MEASUREMENT_TYPES_HPP_ */ diff --git a/alib2algo/src/measurements/Measurements.cpp b/alib2algo/src/measurements/Measurements.cpp index a79021958f9c0d38a1f672077d48d6b6c2039a89..c0cdd8012ee1d589772f0bcf4ee57f725e815a5f 100644 --- a/alib2algo/src/measurements/Measurements.cpp +++ b/alib2algo/src/measurements/Measurements.cpp @@ -2,6 +2,7 @@ * Author: Radovan Cerveny */ +#include "MeasurementTypes.hpp" #include "Measurements.hpp" #include "TimeMeasurementEngine.hpp" @@ -26,7 +27,7 @@ Measurements::~Measurements ( ) { * creates new block on top of the measurements stack * @param block_name */ -void Measurements::start ( std::string block_name, unsigned type ) { +void Measurements::start ( std::string block_name, measurements::Type type ) { for ( auto me : INSTANCE.measurement_engines ) me->push_measurement_frame ( block_name, type ); } diff --git a/alib2algo/src/measurements/Measurements.hpp b/alib2algo/src/measurements/Measurements.hpp index 38e35dbccb69a59bac49f7913bfb7fa71be46c2e..05b3761ededc56d8e2fbfb022b4dd4427c13274a 100644 --- a/alib2algo/src/measurements/Measurements.hpp +++ b/alib2algo/src/measurements/Measurements.hpp @@ -7,8 +7,10 @@ #include <string> #include <vector> +#include "MeasurementTypes.hpp" #include "MeasurementEngine.hpp" + namespace measurements { class Measurements { @@ -22,7 +24,7 @@ private: static Measurements INSTANCE; public: - static void start ( std::string, unsigned ); + static void start ( std::string, measurements::Type ); static void end ( ); static void print ( ); }; diff --git a/alib2algo/src/measurements/TimeMeasurementEngine.cpp b/alib2algo/src/measurements/TimeMeasurementEngine.cpp index 19bded5ad90ea4723a90e550c41988d3d7ee44bf..212db55b33570408b9f19e4dd97a9defa26ea3b2 100644 --- a/alib2algo/src/measurements/TimeMeasurementEngine.cpp +++ b/alib2algo/src/measurements/TimeMeasurementEngine.cpp @@ -9,8 +9,8 @@ using namespace std::chrono; namespace measurements { -void TimeMeasurementEngine::push_measurement_frame ( std::string frame_name, unsigned frame_type ) { - TimeMeasurementFrame tmf = { std::move ( frame_name ), frame_type, std::vector < unsigned > ( ), system_clock::now ( ), microseconds ( 0 ), microseconds ( 0 ) }; +void TimeMeasurementEngine::push_measurement_frame ( std::string frame_name, measurements::Type frame_type ) { + TimeMeasurementFrame tmf = { std::move ( frame_name ), frame_type, std::vector < unsigned > ( ), high_resolution_clock::now ( ), microseconds ( 0 ), microseconds ( 0 ) }; frames.emplace_back ( std::move ( tmf ) ); } @@ -20,7 +20,7 @@ void TimeMeasurementEngine::pop_measurement_frame ( ) { frames.pop_back ( ); - current_frame.duration = duration_cast < microseconds > ( system_clock::now ( ) - current_frame.start ); + current_frame.duration = duration_cast < microseconds > ( high_resolution_clock::now ( ) - current_frame.start ); current_frame.real_duration += current_frame.duration; unsigned idx = results.size ( ); @@ -38,6 +38,7 @@ void TimeMeasurementEngine::get_results ( ) { for ( auto frame : results ) { std::cout << frame.frame_name << std::endl; std::cout << frame.duration << ' ' << frame.real_duration << std::endl; + for ( unsigned idx : frame.sub_frames ) std::cout << idx << ' '; diff --git a/alib2algo/src/measurements/TimeMeasurementEngine.hpp b/alib2algo/src/measurements/TimeMeasurementEngine.hpp index 0d3dd585af7210a6651274209035ffd2fc4009c6..f15e9bda1c7be670eeb2b930c43ed2bc10b13889 100644 --- a/alib2algo/src/measurements/TimeMeasurementEngine.hpp +++ b/alib2algo/src/measurements/TimeMeasurementEngine.hpp @@ -14,12 +14,12 @@ namespace measurements { struct TimeMeasurementFrame { std::string frame_name; - unsigned frame_type; + measurements::Type frame_type; std::vector < unsigned > sub_frames; - std::chrono::time_point < std::chrono::system_clock > start; - std::chrono::microseconds duration; - std::chrono::microseconds real_duration; + std::chrono::time_point < std::chrono::high_resolution_clock > start; + std::chrono::microseconds duration; + std::chrono::microseconds real_duration; }; class TimeMeasurementEngine : public MeasurementEngine { @@ -28,7 +28,7 @@ private: std::vector < TimeMeasurementFrame > results; public: - void push_measurement_frame ( std::string, unsigned ); + void push_measurement_frame ( std::string, measurements::Type ); void pop_measurement_frame ( ); void get_results ( ); }; diff --git a/alib2algo/test-src/measurements/MeasurementsTest.cpp b/alib2algo/test-src/measurements/MeasurementsTest.cpp index b19efe1ed29fe281918fa1494d414844e57dbb90..6bbc1c540d8107462d92c9a5c2935deb8c2190f9 100644 --- a/alib2algo/test-src/measurements/MeasurementsTest.cpp +++ b/alib2algo/test-src/measurements/MeasurementsTest.cpp @@ -13,16 +13,28 @@ void MeasurementsTest::tearDown ( ) { } void MeasurementsTest::testMeasurements ( ) { - - measurements::Measurements::start ( "test", 0 ); - std::this_thread::sleep_for ( std::chrono::milliseconds ( 100 ) ); - - measurements::Measurements::start ( "test2", 0 ); + measurements::Measurements::start ( "global", measurements::Type::OVERALL ); + measurements::Measurements::start ( "init", measurements::Type::INIT ); std::this_thread::sleep_for ( std::chrono::milliseconds ( 100 ) ); measurements::Measurements::end ( ); - - std::this_thread::sleep_for ( std::chrono::milliseconds ( 50 ) ); + measurements::Measurements::start ( "main", measurements::Type::MAIN ); + std::this_thread::sleep_for ( std::chrono::milliseconds ( 20 ) ); + measurements::Measurements::start ( "aux", measurements::Type::AUXILIARY ); + std::this_thread::sleep_for ( std::chrono::milliseconds ( 40 ) ); + measurements::Measurements::end ( ); + std::this_thread::sleep_for ( std::chrono::milliseconds ( 80 ) ); + measurements::Measurements::start ( "aux", measurements::Type::AUXILIARY ); + std::this_thread::sleep_for ( std::chrono::milliseconds ( 40 ) ); + measurements::Measurements::end ( ); + std::this_thread::sleep_for ( std::chrono::milliseconds ( 80 ) ); + measurements::Measurements::end ( ); + measurements::Measurements::start ( "fin", measurements::Type::FINALIZE ); + std::this_thread::sleep_for ( std::chrono::milliseconds ( 30 ) ); + measurements::Measurements::start ( "aux", measurements::Type::AUXILIARY ); + std::this_thread::sleep_for ( std::chrono::milliseconds ( 40 ) ); + measurements::Measurements::end ( ); + std::this_thread::sleep_for ( std::chrono::milliseconds ( 80 ) ); + measurements::Measurements::end ( ); measurements::Measurements::end ( ); - measurements::Measurements::print ( ); }