7#ifndef KRITA_KIS_SCALAR_TRACKER_H
8#define KRITA_KIS_SCALAR_TRACKER_H
11#include <kritaglobal_export.h>
14#include <QElapsedTimer>
17#include <boost/heap/fibonacci_heap.hpp>
19#include <boost/accumulators/accumulators.hpp>
20#include <boost/accumulators/statistics/stats.hpp>
21#include <boost/accumulators/statistics/rolling_mean.hpp>
22#include <boost/accumulators/statistics/rolling_variance.hpp>
40 throw std::runtime_error(
"no values to get max of");
68 m_acc(
boost::accumulators::tag::rolling_window::window_size = windowSize)
87 QString s =
format(boost::accumulators::rolling_mean(
m_acc),
88 boost::accumulators::rolling_variance(
m_acc),
101 virtual void print(
const QString &message) {
102 qInfo() << qUtf8Printable(message);
111 virtual QString
format(qint64 mean, qint64 variance, qint64 max) {
112 return QString(
"%1: mean %2 ms, var %3, max %4 ms").arg(
m_name).arg(mean).arg(variance).arg(max);
125 typedef boost::accumulators::stats<
126 boost::accumulators::tag::lazy_rolling_mean,
127 boost::accumulators::tag::rolling_variance>
stats;
129 boost::accumulators::accumulator_set<T, stats>
m_acc;
150 virtual void push(qint64 timestamp)
override;
float value(const T *src, size_t ch)
virtual qint64 currentTimestamp() const =0
QQueue< typename heap_type::handle_type > m_samples
boost::heap::fibonacci_heap< T > heap_type
KisRollingMax(int windowSize)
virtual void print(const QString &message)
KisScalarTracker(const QString &name, int windowSize=500)
boost::accumulators::accumulator_set< T, stats > m_acc
virtual ~KisScalarTracker()
boost::accumulators::stats< boost::accumulators::tag::lazy_rolling_mean, boost::accumulators::tag::rolling_variance > stats
QElapsedTimer m_printTimer
virtual void push(T value)
virtual QString format(qint64 mean, qint64 variance, qint64 max)