[Bf-blender-cvs] [0bbf940965e] functions: better timing statistics
Jacques Lucke
noreply at git.blender.org
Sun Jun 30 16:00:35 CEST 2019
Commit: 0bbf940965eae0ceced575946231228bbab1c229
Author: Jacques Lucke
Date: Sun Jun 30 09:49:10 2019 +0200
Branches: functions
https://developer.blender.org/rB0bbf940965eae0ceced575946231228bbab1c229
better timing statistics
===================================================================
M source/blender/blenlib/BLI_timeit.hpp
M source/blender/simulations/bparticles/simulate.cpp
===================================================================
diff --git a/source/blender/blenlib/BLI_timeit.hpp b/source/blender/blenlib/BLI_timeit.hpp
index 7628c83f4a3..9cbaea8369a 100644
--- a/source/blender/blenlib/BLI_timeit.hpp
+++ b/source/blender/blenlib/BLI_timeit.hpp
@@ -31,9 +31,8 @@ class ScopedTimer {
TimePoint m_start;
public:
- ScopedTimer(const char *name = "")
+ ScopedTimer(const char *name = "") : m_name(name)
{
- m_name = name;
m_start = Clock::now();
}
@@ -47,8 +46,59 @@ class ScopedTimer {
}
};
+class ScopedTimerStatistics {
+ private:
+ TimePoint m_start;
+ const char *m_name;
+ Nanoseconds &m_shortest_duration;
+ Nanoseconds &m_timings_sum;
+ uint64_t &m_timings_done;
+
+ public:
+ ScopedTimerStatistics(const char *name,
+ Nanoseconds &shortest_duration,
+ Nanoseconds &timings_sum,
+ uint64_t &timings_done)
+ : m_name(name),
+ m_shortest_duration(shortest_duration),
+ m_timings_sum(timings_sum),
+ m_timings_done(timings_done)
+ {
+ m_start = Clock::now();
+ }
+
+ ~ScopedTimerStatistics()
+ {
+ TimePoint end = Clock::now();
+ Nanoseconds duration = end - m_start;
+ m_timings_sum += duration;
+ m_timings_done++;
+
+ if (duration < m_shortest_duration) {
+ m_shortest_duration = duration;
+ }
+
+ Nanoseconds average_duration = m_timings_sum / m_timings_done;
+
+ std::cout << "Timings stats for '" << m_name << "':\n";
+ std::cout << " Calls: " << m_timings_done << "\n";
+ std::cout << " Average: ";
+ print_duration(average_duration);
+ std::cout << "\n";
+ std::cout << " Shortest: ";
+ print_duration(m_shortest_duration);
+ std::cout << "\n";
+ }
+};
+
} // namespace Timers
}; // namespace BLI
#define SCOPED_TIMER(name) BLI::Timers::ScopedTimer t(name);
+
+#define SCOPED_TIMER_STATS(name) \
+ static uint64_t timings_done = 0; \
+ static BLI::Timers::Nanoseconds shortest_duration = std::chrono::seconds(100); \
+ static BLI::Timers::Nanoseconds timings_sum(0); \
+ BLI::Timers::ScopedTimerStatistics t(name, shortest_duration, timings_sum, timings_done);
diff --git a/source/blender/simulations/bparticles/simulate.cpp b/source/blender/simulations/bparticles/simulate.cpp
index e25de26cef3..f9c1281e792 100644
--- a/source/blender/simulations/bparticles/simulate.cpp
+++ b/source/blender/simulations/bparticles/simulate.cpp
@@ -426,7 +426,7 @@ BLI_NOINLINE static void simulate_block_time_span_cb(void *__restrict userdata,
const int index,
const ParallelRangeTLS *__restrict tls)
{
- SCOPED_TIMER(__func__);
+ SCOPED_TIMER_STATS(__func__);
SimulateTimeSpanData *data = (SimulateTimeSpanData *)userdata;
More information about the Bf-blender-cvs
mailing list