diff --git a/alib2measure/src/measurements/MeasurementEngine.cpp b/alib2measure/src/measurements/MeasurementEngine.cpp index 24b4e744f59d1a053cf2772e79815cdd21d33177..0615258d58e40ddff736a34e7971ffb0a47926c2 100644 --- a/alib2measure/src/measurements/MeasurementEngine.cpp +++ b/alib2measure/src/measurements/MeasurementEngine.cpp @@ -60,18 +60,13 @@ MeasurementResults MeasurementEngine::get_results ( ) const { return MeasurementResults ( frames ); } -template < > -void MeasurementEngine::hint ( MemoryHint mh ) { +template < typename Hint > +void MeasurementEngine::hint ( Hint hint ) { 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 ) ); -} - -template < > -void MeasurementEngine::hint ( CounterHint ch ) { - if ( ( frame_idx_stack.size ( ) == 0 ) || ( frames[frame_idx_stack.back ( )].type == measurements::Type::ROOT ) ) return; - - CounterDataFrame::hint ( frame_idx_stack.back ( ), frames, std::move ( ch ) ); + Hint::frame_type::hint ( frame_idx_stack.back ( ), frames, std::move ( hint ) ); } +template void MeasurementEngine::hint < MemoryHint > ( MemoryHint ); +template void MeasurementEngine::hint < CounterHint > ( CounterHint ); } diff --git a/alib2measure/src/measurements/MeasurementEngine.hpp b/alib2measure/src/measurements/MeasurementEngine.hpp index fafe14378722e498b79bda44a5dd35eab54829fb..721e1010609c661950e093c31a2ed7d24ea8bd2f 100644 --- a/alib2measure/src/measurements/MeasurementEngine.hpp +++ b/alib2measure/src/measurements/MeasurementEngine.hpp @@ -6,7 +6,7 @@ #define MEASUREMENT_ENGINE_HPP_ #include "MeasurementTypes.hpp" -#include "MeasurementFrames.hpp" +#include "MeasurementFrame.hpp" #include "MeasurementResults.hpp" namespace measurements { diff --git a/alib2measure/src/measurements/MeasurementFrame.cpp b/alib2measure/src/measurements/MeasurementFrame.cpp index 31198ad79b76c16bd25546c602337fc007cf7ead..31a8d9b1a43b5c84b7d046cb5d61a76aa7d64242 100644 --- a/alib2measure/src/measurements/MeasurementFrame.cpp +++ b/alib2measure/src/measurements/MeasurementFrame.cpp @@ -3,7 +3,7 @@ */ #include <sstream> -#include "MeasurementFrames.hpp" +#include "MeasurementFrame.hpp" namespace measurements { diff --git a/alib2measure/src/measurements/MeasurementFrame.hpp b/alib2measure/src/measurements/MeasurementFrame.hpp new file mode 100644 index 0000000000000000000000000000000000000000..02d423dc24dee54d6388626004c3aadcf260a151 --- /dev/null +++ b/alib2measure/src/measurements/MeasurementFrame.hpp @@ -0,0 +1,37 @@ +/* + * Author: Radovan Cerveny + */ + +#ifndef MEASUREMENT_FRAME_HPP_ +#define MEASUREMENT_FRAME_HPP_ + +#include <chrono> +#include <sstream> +#include <deque> +#include "sax/Token.h" +#include "MeasurementTypes.hpp" +#include "frames/TimeDataFrame.hpp" +#include "frames/MemoryDataFrame.hpp" +#include "frames/CounterDataFrame.hpp" + +namespace measurements { + +struct MeasurementFrame { + measurements::stealth_string name; + measurements::Type type; + unsigned parent_idx; + + measurements::stealth_vector < unsigned > sub_idxs; + + TimeDataFrame time; + MemoryDataFrame memory; + CounterDataFrame counter; + + 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 & ); +} + +#endif /* MEASUREMENT_FRAME_HPP_ */ diff --git a/alib2measure/src/measurements/MeasurementFrames.hpp b/alib2measure/src/measurements/MeasurementFrames.hpp deleted file mode 100644 index ac1d1a7bec17d7ca5b3238d9b0084dc830938506..0000000000000000000000000000000000000000 --- a/alib2measure/src/measurements/MeasurementFrames.hpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Author: Radovan Cerveny - */ - -#ifndef MEASUREMENT_FRAME_HPP_ -#define MEASUREMENT_FRAME_HPP_ - -#include <chrono> -#include <sstream> -#include <deque> -#include "sax/Token.h" -#include "MeasurementTypes.hpp" - -namespace measurements { - -struct MeasurementFrame; - -struct CounterHint { - using value_type = long long int; - enum class Type { - ADD, SUB, INC, DEC - }; - - measurements::stealth_string name; - Type type; - value_type value; -}; - -struct CounterDataFrame { - measurements::stealth_map < measurements::stealth_string, CounterHint::value_type > counters; - measurements::stealth_map < measurements::stealth_string, CounterHint::value_type > real_counters; - - static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); - static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); - static void hint ( unsigned, measurements::stealth_vector < MeasurementFrame > &, CounterHint ); - static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & ); -}; - -std::ostream & operator <<( std::ostream &, const CounterDataFrame & ); - -struct MemoryHint { - enum class Type { - NEW, DELETE - }; - - Type type; - size_t size; -}; - -struct MemoryDataFrame { - size_t start_heap_usage; - size_t end_heap_usage; - size_t high_watermark; - - size_t current_heap_usage; - - 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 & ); - -struct TimeDataFrame { - std::chrono::time_point < std::chrono::high_resolution_clock > start; - - std::chrono::microseconds duration; - std::chrono::microseconds real_duration; - - 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 std::chrono::microseconds & ); -std::ostream & operator <<( std::ostream &, const TimeDataFrame & ); - -struct MeasurementFrame { - measurements::stealth_string name; - measurements::Type type; - unsigned parent_idx; - - measurements::stealth_vector < unsigned > sub_idxs; - - TimeDataFrame time; - MemoryDataFrame memory; - CounterDataFrame counter; - - 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 & ); -} - -#endif /* MEASUREMENT_FRAME_HPP_ */ diff --git a/alib2measure/src/measurements/MeasurementResults.hpp b/alib2measure/src/measurements/MeasurementResults.hpp index 2b8517fb475eef85860d2338706e0c17a2d8e0fc..699e1e019b266c9c6855a5ff739b7ec06b256803 100644 --- a/alib2measure/src/measurements/MeasurementResults.hpp +++ b/alib2measure/src/measurements/MeasurementResults.hpp @@ -8,7 +8,7 @@ #include <ostream> #include "sax/SaxComposeInterface.h" #include "MeasurementTypes.hpp" -#include "MeasurementFrames.hpp" +#include "MeasurementFrame.hpp" namespace measurements { diff --git a/alib2measure/src/measurements/CounterDataFrame.cpp b/alib2measure/src/measurements/frames/CounterDataFrame.cpp similarity index 99% rename from alib2measure/src/measurements/CounterDataFrame.cpp rename to alib2measure/src/measurements/frames/CounterDataFrame.cpp index bc58f63a3a5f890608ed6576acedf282bdceb6bc..9355be32e748d14842b7858c4aeb69489fbcb001 100644 --- a/alib2measure/src/measurements/CounterDataFrame.cpp +++ b/alib2measure/src/measurements/frames/CounterDataFrame.cpp @@ -2,7 +2,7 @@ * Author: Radovan Cerveny */ -#include "MeasurementFrames.hpp" +#include "../MeasurementFrame.hpp" namespace measurements { diff --git a/alib2measure/src/measurements/frames/CounterDataFrame.hpp b/alib2measure/src/measurements/frames/CounterDataFrame.hpp new file mode 100644 index 0000000000000000000000000000000000000000..f2e3bf3b48afc1e24bd3093f0030ffbdd3d351ac --- /dev/null +++ b/alib2measure/src/measurements/frames/CounterDataFrame.hpp @@ -0,0 +1,42 @@ +/* + * Author: Radovan Cerveny + */ + +#ifndef COUNTER_DATA_FRAME_HPP_ +#define COUNTER_DATA_FRAME_HPP_ + +#include <deque> +#include "sax/Token.h" +#include "../MeasurementTypes.hpp" + +namespace measurements { + +struct MeasurementFrame; +struct CounterDataFrame; + +struct CounterHint { + using frame_type = CounterDataFrame; + using value_type = long long int; + enum class Type { + ADD, SUB, INC, DEC + }; + + measurements::stealth_string name; + Type type; + value_type value; +}; + +struct CounterDataFrame { + measurements::stealth_map < measurements::stealth_string, CounterHint::value_type > counters; + measurements::stealth_map < measurements::stealth_string, CounterHint::value_type > real_counters; + + static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); + static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & ); + static void hint ( unsigned, measurements::stealth_vector < MeasurementFrame > &, CounterHint ); + static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & ); +}; + +std::ostream & operator <<( std::ostream &, const CounterDataFrame & ); +} + +#endif /* COUNTER_DATA_FRAME_HPP_ */ diff --git a/alib2measure/src/measurements/MemoryDataFrame.cpp b/alib2measure/src/measurements/frames/MemoryDataFrame.cpp similarity index 98% rename from alib2measure/src/measurements/MemoryDataFrame.cpp rename to alib2measure/src/measurements/frames/MemoryDataFrame.cpp index a30185a0e468b1d973326536c2ef23d98a5b7572..37fe201ce144ac6348c1eb4aff1af5872b82975b 100644 --- a/alib2measure/src/measurements/MemoryDataFrame.cpp +++ b/alib2measure/src/measurements/frames/MemoryDataFrame.cpp @@ -2,7 +2,7 @@ * Author: Radovan Cerveny */ -#include "MeasurementFrames.hpp" +#include "../MeasurementFrame.hpp" namespace measurements { diff --git a/alib2measure/src/measurements/frames/MemoryDataFrame.hpp b/alib2measure/src/measurements/frames/MemoryDataFrame.hpp new file mode 100644 index 0000000000000000000000000000000000000000..91f45516ae10f42b8aa566117316feea1fd0e00e --- /dev/null +++ b/alib2measure/src/measurements/frames/MemoryDataFrame.hpp @@ -0,0 +1,43 @@ +/* + * Author: Radovan Cerveny + */ + +#ifndef MEMORY_DATA_FRAME_HPP_ +#define MEMORY_DATA_FRAME_HPP_ + +#include <deque> +#include "sax/Token.h" +#include "../MeasurementTypes.hpp" + +namespace measurements { + +struct MeasurementFrame; +struct MemoryDataFrame; + +struct MemoryHint { + using frame_type = MemoryDataFrame; + enum class Type { + NEW, DELETE + }; + + Type type; + size_t size; +}; + +struct MemoryDataFrame { + size_t start_heap_usage; + size_t end_heap_usage; + size_t high_watermark; + + size_t current_heap_usage; + + 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 & ); +} + +#endif /* MEMORY_DATA_FRAME_HPP_ */ diff --git a/alib2measure/src/measurements/TimeDataFrame.cpp b/alib2measure/src/measurements/frames/TimeDataFrame.cpp similarity index 98% rename from alib2measure/src/measurements/TimeDataFrame.cpp rename to alib2measure/src/measurements/frames/TimeDataFrame.cpp index 7d39cb51c9bc74f00fe195adf556a4141c1f7479..ea46d9758237be64af9b9251d87d23113d5b838d 100644 --- a/alib2measure/src/measurements/TimeDataFrame.cpp +++ b/alib2measure/src/measurements/frames/TimeDataFrame.cpp @@ -3,7 +3,7 @@ */ #include <sstream> -#include "MeasurementFrames.hpp" +#include "../MeasurementFrame.hpp" using namespace std::chrono; diff --git a/alib2measure/src/measurements/frames/TimeDataFrame.hpp b/alib2measure/src/measurements/frames/TimeDataFrame.hpp new file mode 100644 index 0000000000000000000000000000000000000000..5213c1a10db490f307e5d1fdc843487d1d7b7c1a --- /dev/null +++ b/alib2measure/src/measurements/frames/TimeDataFrame.hpp @@ -0,0 +1,32 @@ +/* + * Author: Radovan Cerveny + */ + +#ifndef TIME_DATA_FRAME_HPP_ +#define TIME_DATA_FRAME_HPP_ + +#include <chrono> +#include <deque> +#include "sax/Token.h" +#include "../MeasurementTypes.hpp" + +namespace measurements { + +struct MeasurementFrame; + +struct TimeDataFrame { + std::chrono::time_point < std::chrono::high_resolution_clock > start; + + std::chrono::microseconds duration; + std::chrono::microseconds real_duration; + + 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 std::chrono::microseconds & ); +std::ostream & operator <<( std::ostream &, const TimeDataFrame & ); +} + +#endif /* TIME_DATA_FRAME_HPP_ */ diff --git a/alib2measure/src/measurements/measurements.cpp b/alib2measure/src/measurements/measurements.cpp index 906abcd1906970870915a2eefbfbe873a0dd65f8..8c3ca967ee055fcbe042807d156edbdcfb0e629b 100644 --- a/alib2measure/src/measurements/measurements.cpp +++ b/alib2measure/src/measurements/measurements.cpp @@ -34,16 +34,6 @@ void hint ( Hint hint ) { MeasurementEngine::INSTANCE.hint ( std::move ( hint ) ); } -template < > -void hint ( MemoryHint hint ) { - if ( MeasurementEngine::OPERATIONAL ) - MeasurementEngine::INSTANCE.hint ( std::move ( hint ) ); -} - -template < > -void hint ( CounterHint hint ) { - if ( MeasurementEngine::OPERATIONAL ) - MeasurementEngine::INSTANCE.hint ( std::move ( hint ) ); -} - +template void hint < MemoryHint > ( MemoryHint ); +template void hint < CounterHint > ( CounterHint ); }