From 4a795dce29c41f9fef0a051b7a42119d2d967901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radovan=20=C4=8Cerven=C3=BD?= <radovan.cerveny@gmail.com> Date: Mon, 1 Feb 2016 20:14:56 +0100 Subject: [PATCH] memory hint structure and interface for memory tracking --- .../src/measurements/MeasurementEngine.cpp | 4 +++ .../src/measurements/MeasurementEngine.hpp | 4 ++- ...urementFrame.hpp => MeasurementFrames.hpp} | 25 +++++++++++++------ .../src/measurements/MemoryDataFrame.cpp | 8 ++++-- alib2algo/src/measurements/TimeDataFrame.cpp | 2 +- alib2algo/src/measurements/measurements.hpp | 4 +++ 6 files changed, 36 insertions(+), 11 deletions(-) rename alib2algo/src/measurements/{MeasurementFrame.hpp => MeasurementFrames.hpp} (86%) diff --git a/alib2algo/src/measurements/MeasurementEngine.cpp b/alib2algo/src/measurements/MeasurementEngine.cpp index 8b837ab78c..9b9dd2f53a 100644 --- a/alib2algo/src/measurements/MeasurementEngine.cpp +++ b/alib2algo/src/measurements/MeasurementEngine.cpp @@ -37,6 +37,10 @@ void MeasurementEngine::pop_measurement_frame ( ) { MemoryDataFrame::update ( current_idx, frames ); } +void MeasurementEngine::memory_hint ( MemoryHint 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]; diff --git a/alib2algo/src/measurements/MeasurementEngine.hpp b/alib2algo/src/measurements/MeasurementEngine.hpp index 3ba730e679..69590f048f 100644 --- a/alib2algo/src/measurements/MeasurementEngine.hpp +++ b/alib2algo/src/measurements/MeasurementEngine.hpp @@ -7,7 +7,7 @@ #include <ostream> #include "MeasurementTypes.hpp" -#include "MeasurementFrame.hpp" +#include "MeasurementFrames.hpp" namespace measurements { @@ -23,6 +23,8 @@ public: void push_measurement_frame ( std::string, measurements::Type ); void pop_measurement_frame ( ); + void memory_hint ( MemoryHint ); + void print_as_list ( std::ostream & ); void print_as_tree ( std::ostream & ); diff --git a/alib2algo/src/measurements/MeasurementFrame.hpp b/alib2algo/src/measurements/MeasurementFrames.hpp similarity index 86% rename from alib2algo/src/measurements/MeasurementFrame.hpp rename to alib2algo/src/measurements/MeasurementFrames.hpp index 20b9e2c21f..d66eac39d1 100644 --- a/alib2algo/src/measurements/MeasurementFrame.hpp +++ b/alib2algo/src/measurements/MeasurementFrames.hpp @@ -6,28 +6,39 @@ #define MEASUREMENT_FRAME_HPP_ #include <chrono> +#include <sstream> #include "MeasurementTypes.hpp" namespace measurements { struct MeasurementFrame; -struct TimeDataFrame { - std::chrono::time_point < std::chrono::high_resolution_clock > start; +struct MemoryHint { + enum class Type { + NEW, DELETE + }; - std::chrono::microseconds duration; - std::chrono::microseconds real_duration; + Type type; + size_t size; +}; + +struct MemoryDataFrame { + unsigned current_heap_usage; + unsigned high_watermark; std::string to_string ( ); // void to_xml ( ); static void init ( unsigned, std::vector < MeasurementFrame > & ); static void update ( unsigned, std::vector < MeasurementFrame > & ); + static void hint ( unsigned, std::vector < MeasurementFrame > &, MemoryHint ); }; -struct MemoryDataFrame { - unsigned current_heap_usage; - unsigned high_watermark; +struct TimeDataFrame { + std::chrono::time_point < std::chrono::high_resolution_clock > start; + + std::chrono::microseconds duration; + std::chrono::microseconds real_duration; std::string to_string ( ); // void to_xml ( ); diff --git a/alib2algo/src/measurements/MemoryDataFrame.cpp b/alib2algo/src/measurements/MemoryDataFrame.cpp index 3c5ba5d8cc..cded19e229 100644 --- a/alib2algo/src/measurements/MemoryDataFrame.cpp +++ b/alib2algo/src/measurements/MemoryDataFrame.cpp @@ -2,8 +2,7 @@ * Author: Radovan Cerveny */ -#include <sstream> -#include "MeasurementFrame.hpp" +#include "MeasurementFrames.hpp" using namespace std::chrono; @@ -19,6 +18,11 @@ void MemoryDataFrame::update ( unsigned frame_idx, std::vector < MeasurementFram MeasurementFrame & parent_frame = frames[current_frame.parent_idx]; } +void MemoryDataFrame::hint ( unsigned frame_idx, std::vector < MeasurementFrame > & frames, MemoryHint hint ) { + MeasurementFrame & current_frame = frames[frame_idx]; + frame_idx = hint.size = 0; +} + std::string MemoryDataFrame::to_string ( ) { std::stringstream ss; diff --git a/alib2algo/src/measurements/TimeDataFrame.cpp b/alib2algo/src/measurements/TimeDataFrame.cpp index a7e1c438df..209c6b665e 100644 --- a/alib2algo/src/measurements/TimeDataFrame.cpp +++ b/alib2algo/src/measurements/TimeDataFrame.cpp @@ -3,7 +3,7 @@ */ #include <sstream> -#include "MeasurementFrame.hpp" +#include "MeasurementFrames.hpp" using namespace std::chrono; diff --git a/alib2algo/src/measurements/measurements.hpp b/alib2algo/src/measurements/measurements.hpp index f21cdef6cb..ccd80db859 100644 --- a/alib2algo/src/measurements/measurements.hpp +++ b/alib2algo/src/measurements/measurements.hpp @@ -17,6 +17,10 @@ void end ( ) { MeasurementEngine::INSTANCE.pop_measurement_frame ( ); } +void memory_hint ( MemoryHint mh ) { + MeasurementEngine::INSTANCE.memory_hint ( std::move ( mh ) ); +} + void print_as_list ( std::ostream & os ) { MeasurementEngine::INSTANCE.print_as_list ( os ); } -- GitLab