From f2aae448eb0da3d5d1d20bb4d50e7e8bb6b2e76f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radovan=20=C4=8Cerven=C3=BD?= <radovan.cerveny@gmail.com> Date: Tue, 2 Feb 2016 17:37:57 +0100 Subject: [PATCH] introduced type alias for stl containers to avoid memory tracking polution --- alib2algo/src/measurements/MeasurementEngine.cpp | 7 ++++--- alib2algo/src/measurements/MeasurementEngine.hpp | 2 +- alib2algo/src/measurements/MeasurementFrames.hpp | 11 ++++++----- alib2algo/src/measurements/MeasurementTypes.hpp | 6 ++++++ alib2algo/src/measurements/measurements.hpp | 2 +- alib2algo/test-src/measurements/MeasurementsTest.cpp | 10 ++++++---- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/alib2algo/src/measurements/MeasurementEngine.cpp b/alib2algo/src/measurements/MeasurementEngine.cpp index c33e023013..444de100d6 100644 --- a/alib2algo/src/measurements/MeasurementEngine.cpp +++ b/alib2algo/src/measurements/MeasurementEngine.cpp @@ -12,7 +12,7 @@ MeasurementEngine::MeasurementEngine ( ) { reset_measurements ( ); } -void MeasurementEngine::push_measurement_frame ( std::string frame_name, measurements::Type frame_type ) { +void MeasurementEngine::push_measurement_frame ( measurements::stealth_string frame_name, measurements::Type frame_type ) { unsigned parent_idx = frame_idx_stack.back ( ); frames.emplace_back ( std::move ( frame_name ), frame_type, parent_idx ); @@ -20,6 +20,7 @@ void MeasurementEngine::push_measurement_frame ( std::string frame_name, measure unsigned current_idx = frames.size ( ) - 1; frames[parent_idx].sub_idxs.push_back ( current_idx ); + frame_idx_stack.push_back ( current_idx ); TimeDataFrame::init ( current_idx, frames ); @@ -39,7 +40,7 @@ void MeasurementEngine::reset_measurements ( ) { frames.clear ( ); frame_idx_stack.clear ( ); - frames.emplace_back ( std::move ( "Root" ), measurements::Type::ROOT, 0 ); + frames.emplace_back ( "Root", measurements::Type::ROOT, 0 ); frame_idx_stack.push_back ( 0 ); } @@ -53,7 +54,7 @@ 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.sub_idxs, frame.time.to_string ( ), frame.memory.to_string ( ) ); + 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 << ", "; diff --git a/alib2algo/src/measurements/MeasurementEngine.hpp b/alib2algo/src/measurements/MeasurementEngine.hpp index f45419bda9..5f9cb5067a 100644 --- a/alib2algo/src/measurements/MeasurementEngine.hpp +++ b/alib2algo/src/measurements/MeasurementEngine.hpp @@ -20,7 +20,7 @@ class MeasurementEngine { void print_as_list ( std::ostream &, unsigned ); public: - void push_measurement_frame ( std::string, measurements::Type ); + void push_measurement_frame ( measurements::stealth_string, measurements::Type ); void pop_measurement_frame ( ); void reset_measurements ( ); diff --git a/alib2algo/src/measurements/MeasurementFrames.hpp b/alib2algo/src/measurements/MeasurementFrames.hpp index 1d02d63341..6de3fa3d2a 100644 --- a/alib2algo/src/measurements/MeasurementFrames.hpp +++ b/alib2algo/src/measurements/MeasurementFrames.hpp @@ -53,15 +53,16 @@ struct TimeDataFrame { }; struct MeasurementFrame { - std::string name; - measurements::Type type; - unsigned parent_idx; - std::vector < unsigned > sub_idxs; + measurements::stealth_string name; + measurements::Type type; + unsigned parent_idx; + + measurements::stealth_vector < unsigned > sub_idxs; TimeDataFrame time; MemoryDataFrame memory; - MeasurementFrame ( std::string && name, measurements::Type type, unsigned parent_idx ) : name ( name ), type ( type ), parent_idx ( parent_idx ) { } + MeasurementFrame ( measurements::stealth_string name, measurements::Type type, unsigned parent_idx ) : name ( std::move ( name ) ), type ( type ), parent_idx ( parent_idx ), time ( ), memory ( ) { } }; } diff --git a/alib2algo/src/measurements/MeasurementTypes.hpp b/alib2algo/src/measurements/MeasurementTypes.hpp index d5f2cfecd8..2cadf27159 100644 --- a/alib2algo/src/measurements/MeasurementTypes.hpp +++ b/alib2algo/src/measurements/MeasurementTypes.hpp @@ -6,6 +6,7 @@ #define MEASUREMENT_TYPES_HPP_ #include <memory> +#include <vector> #include "MeasurementNew.hpp" namespace measurements { @@ -35,8 +36,13 @@ public: template < typename U > struct rebind { using other = stealth_allocator < U >; }; + }; +using stealth_string = std::basic_string < char, std::char_traits < char >, stealth_allocator < char > >; + +template < typename T > +using stealth_vector = std::vector < T, stealth_allocator < T > >; } #endif /* MEASUREMENT_TYPES_HPP_ */ diff --git a/alib2algo/src/measurements/measurements.hpp b/alib2algo/src/measurements/measurements.hpp index 47c7cba0e1..6d5c162820 100644 --- a/alib2algo/src/measurements/measurements.hpp +++ b/alib2algo/src/measurements/measurements.hpp @@ -9,7 +9,7 @@ namespace measurements { -void start ( std::string name, measurements::Type type ) { +void start ( measurements::stealth_string name, measurements::Type type ) { MeasurementEngine::INSTANCE.push_measurement_frame ( std::move ( name ), type ); } diff --git a/alib2algo/test-src/measurements/MeasurementsTest.cpp b/alib2algo/test-src/measurements/MeasurementsTest.cpp index 5a93d292f9..28a7d9ca62 100644 --- a/alib2algo/test-src/measurements/MeasurementsTest.cpp +++ b/alib2algo/test-src/measurements/MeasurementsTest.cpp @@ -45,15 +45,17 @@ void MeasurementsTest::testTimeMeasurements ( ) { void MeasurementsTest::testMemoryMeasurements ( ) { measurements::start ( "chunk1", measurements::Type::MAIN ); + int * baz = new int[500]; + delete[] baz; measurements::end ( ); measurements::start ( "chunk2", measurements::Type::MAIN ); - int * foo = new int[500]; + int * foo = new int[1000]; measurements::start ( "chunk21", measurements::Type::MAIN ); - int * bar = new int[500]; + int * bar = new int[2000]; measurements::end ( ); - delete foo; - delete bar; + delete[] foo; + delete[] bar; measurements::end ( ); measurements::print_as_list ( std::cout ); -- GitLab