From 6c7e798d861d3caf06d86ca25b9333016d559844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 4 May 2020 21:09:31 +0200 Subject: [PATCH] DebugTools: moving average over a year worth of frames isn't useful. That would generate 32 GB of data. I think the technology isn't ready for this yet, so I think capping the frame count (and everything else) at 32 bits is enough. --- src/Magnum/DebugTools/FrameProfiler.cpp | 28 +++++++-------- src/Magnum/DebugTools/FrameProfiler.h | 46 ++++++++++++------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/Magnum/DebugTools/FrameProfiler.cpp b/src/Magnum/DebugTools/FrameProfiler.cpp index 91763ea70..e7b9d7b69 100644 --- a/src/Magnum/DebugTools/FrameProfiler.cpp +++ b/src/Magnum/DebugTools/FrameProfiler.cpp @@ -57,11 +57,11 @@ FrameProfiler::Measurement::Measurement(const std::string& name, const Units uni FrameProfiler::FrameProfiler() noexcept = default; -FrameProfiler::FrameProfiler(Containers::Array&& measurements, std::size_t maxFrameCount) noexcept { +FrameProfiler::FrameProfiler(Containers::Array&& measurements, UnsignedInt maxFrameCount) noexcept { setup(std::move(measurements), maxFrameCount); } -FrameProfiler::FrameProfiler(const std::initializer_list measurements, const std::size_t maxFrameCount): FrameProfiler{Containers::array(measurements), maxFrameCount} {} +FrameProfiler::FrameProfiler(const std::initializer_list measurements, const UnsignedInt maxFrameCount): FrameProfiler{Containers::array(measurements), maxFrameCount} {} FrameProfiler::FrameProfiler(FrameProfiler&& other) noexcept: _enabled{other._enabled}, @@ -105,7 +105,7 @@ FrameProfiler& FrameProfiler::operator=(FrameProfiler&& other) noexcept { return *this; } -void FrameProfiler::setup(Containers::Array&& measurements, const std::size_t maxFrameCount) { +void FrameProfiler::setup(Containers::Array&& measurements, const UnsignedInt maxFrameCount) { CORRADE_ASSERT(maxFrameCount >= 1, "DebugTools::FrameProfiler::setup(): max frame count can't be zero", ); _maxFrameCount = maxFrameCount; @@ -127,7 +127,7 @@ void FrameProfiler::setup(Containers::Array&& measurements, const s enable(); } -void FrameProfiler::setup(const std::initializer_list measurements, const std::size_t maxFrameCount) { +void FrameProfiler::setup(const std::initializer_list measurements, const UnsignedInt maxFrameCount) { setup(Containers::array(measurements), maxFrameCount); } @@ -171,7 +171,7 @@ void FrameProfiler::beginFrame() { } /* For delay = 1 returns _currentData */ -std::size_t FrameProfiler::delayedCurrentData(UnsignedInt delay) const { +UnsignedInt FrameProfiler::delayedCurrentData(UnsignedInt delay) const { CORRADE_INTERNAL_ASSERT(delay >= 1); /* The delayed frame is current or before current */ @@ -253,25 +253,25 @@ void FrameProfiler::endFrame() { _currentData = (_currentData + 1) % _maxFrameCount; } -std::string FrameProfiler::measurementName(const std::size_t id) const { +std::string FrameProfiler::measurementName(const UnsignedInt id) const { CORRADE_ASSERT(id < _measurements.size(), "DebugTools::FrameProfiler::measurementName(): index" << id << "out of range for" << _measurements.size() << "measurements", {}); return _measurements[id]._name; } -FrameProfiler::Units FrameProfiler::measurementUnits(const std::size_t id) const { +FrameProfiler::Units FrameProfiler::measurementUnits(const UnsignedInt id) const { CORRADE_ASSERT(id < _measurements.size(), "DebugTools::FrameProfiler::measurementUnits(): index" << id << "out of range for" << _measurements.size() << "measurements", {}); return _measurements[id]._units; } -UnsignedInt FrameProfiler::measurementDelay(const std::size_t id) const { +UnsignedInt FrameProfiler::measurementDelay(const UnsignedInt id) const { CORRADE_ASSERT(id < _measurements.size(), "DebugTools::FrameProfiler::measurementDelay(): index" << id << "out of range for" << _measurements.size() << "measurements", {}); return Math::max(_measurements[id]._delay, 1u); } -bool FrameProfiler::isMeasurementAvailable(const std::size_t id) const { +bool FrameProfiler::isMeasurementAvailable(const UnsignedInt id) const { CORRADE_ASSERT(id < _measurements.size(), "DebugTools::FrameProfiler::measurementDelay(): index" << id << "out of range for" << _measurements.size() << "measurements", {}); return _measuredFrameCount >= Math::max(_measurements[id]._delay, 1u); @@ -282,7 +282,7 @@ Double FrameProfiler::measurementDataInternal(const Measurement& measurement) co Math::min(_measuredFrameCount - Math::max(measurement._delay, 1u) + 1, _maxFrameCount); } -Double FrameProfiler::measurementMean(const std::size_t id) const { +Double FrameProfiler::measurementMean(const UnsignedInt id) const { CORRADE_ASSERT(id < _measurements.size(), "DebugTools::FrameProfiler::measurementMean(): index" << id << "out of range for" << _measurements.size() << "measurements", {}); CORRADE_ASSERT(_measuredFrameCount >= Math::max(_measurements[id]._delay, 1u), "DebugTools::FrameProfiler::measurementMean(): measurement data available after" << Math::max(_measurements[id]._delay, 1u) - _measuredFrameCount << "more frames", {}); @@ -391,13 +391,13 @@ std::string FrameProfiler::statistics() const { return out.str(); } -void FrameProfiler::printStatistics(const std::size_t frequency) const { +void FrameProfiler::printStatistics(const UnsignedInt frequency) const { Debug::Flags flags; if(!Debug::isTty()) flags |= Debug::Flag::DisableColors; printStatistics(Debug{flags}, frequency); } -void FrameProfiler::printStatistics(Debug& out, const std::size_t frequency) const { +void FrameProfiler::printStatistics(Debug& out, const UnsignedInt frequency) const { if(!isEnabled() || _measuredFrameCount % frequency != 0) return; /* If on a TTY and we printed at least something already, scroll back up to @@ -455,7 +455,7 @@ struct GLFrameProfiler::State { GLFrameProfiler::GLFrameProfiler(): _state{Containers::InPlaceInit} {} -GLFrameProfiler::GLFrameProfiler(const Values values, const std::size_t maxFrameCount): GLFrameProfiler{} +GLFrameProfiler::GLFrameProfiler(const Values values, const UnsignedInt maxFrameCount): GLFrameProfiler{} { setup(values, maxFrameCount); } @@ -466,7 +466,7 @@ GLFrameProfiler& GLFrameProfiler::operator=(GLFrameProfiler&&) noexcept = defaul GLFrameProfiler::~GLFrameProfiler() = default; -void GLFrameProfiler::setup(const Values values, const std::size_t maxFrameCount) { +void GLFrameProfiler::setup(const Values values, const UnsignedInt maxFrameCount) { UnsignedShort index = 0; Containers::Array measurements; if(values & Value::FrameTime) { diff --git a/src/Magnum/DebugTools/FrameProfiler.h b/src/Magnum/DebugTools/FrameProfiler.h index 89e6de975..ffd932b28 100644 --- a/src/Magnum/DebugTools/FrameProfiler.h +++ b/src/Magnum/DebugTools/FrameProfiler.h @@ -178,10 +178,10 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * Equivalent to default-constructing an instance and calling * @ref setup() afterwards. */ - explicit FrameProfiler(Containers::Array&& measurements, std::size_t maxFrameCount) noexcept; + explicit FrameProfiler(Containers::Array&& measurements, UnsignedInt maxFrameCount) noexcept; /** @overload */ - explicit FrameProfiler(std::initializer_list measurements, std::size_t maxFrameCount); + explicit FrameProfiler(std::initializer_list measurements, UnsignedInt maxFrameCount); /** @brief Copying is not allowed */ FrameProfiler(const FrameProfiler&) = delete; @@ -205,10 +205,10 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * existing measurements with @p measurements and reset * @ref measuredFrameCount() back to @cpp 0 @ce. */ - void setup(Containers::Array&& measurements, std::size_t maxFrameCount); + void setup(Containers::Array&& measurements, UnsignedInt maxFrameCount); /** @overload */ - void setup(std::initializer_list measurements, std::size_t maxFrameCount); + void setup(std::initializer_list measurements, UnsignedInt maxFrameCount); /** @brief Whether the profiling is enabled */ bool isEnabled() const { return _enabled; } @@ -264,7 +264,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * calculated only from @ref measuredFrameCount(). Always at least * @cpp 1 @ce. */ - std::size_t maxFrameCount() const { return _maxFrameCount; } + UnsignedInt maxFrameCount() const { return _maxFrameCount; } /** * @brief Count of measured frames @@ -274,7 +274,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * average over last @ref maxFrameCount() frames only. Actual data * availability depends on @ref measurementDelay(). */ - std::size_t measuredFrameCount() const { return _measuredFrameCount; } + UnsignedInt measuredFrameCount() const { return _measuredFrameCount; } /** * @brief Measurement count @@ -282,7 +282,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * Count of @ref Measurement instances passed to @ref setup(). If * @ref setup() was not called yet, returns @cpp 0 @ce. */ - std::size_t measurementCount() const { return _measurements.size(); } + UnsignedInt measurementCount() const { return _measurements.size(); } /** * @brief Measurement name @@ -291,7 +291,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * passed to @ref setup(). Expects that @p id is less than * @ref measurementCount(). */ - std::string measurementName(std::size_t id) const; + std::string measurementName(UnsignedInt id) const; /** * @brief Measurement units @@ -300,7 +300,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * passed to @ref setup(). Expects that @p id is less than * @ref measurementCount(). */ - Units measurementUnits(std::size_t id) const; + Units measurementUnits(UnsignedInt id) const; /** * @brief Measurement delay @@ -311,7 +311,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * measurement in the list passed to @ref setup(). Expects that @p id * is less than @ref measurementCount(). */ - UnsignedInt measurementDelay(std::size_t id) const; + UnsignedInt measurementDelay(UnsignedInt id) const; /** * @brief Whether given measurement is available @@ -322,7 +322,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * passed to @ref setup(). Expects that @p id is less than * @ref measurementCount(). */ - bool isMeasurementAvailable(std::size_t id) const; + bool isMeasurementAvailable(UnsignedInt id) const; /** * @brief Measurement mean @@ -337,7 +337,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * @ref measurementCount() and that the measurement is available. * @see @ref isMeasurementAvailable() */ - Double measurementMean(std::size_t id) const; + Double measurementMean(UnsignedInt id) const; /** * @brief Overview of all measurements @@ -359,27 +359,27 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { * @see @ref isMeasurementAvailable(), @ref isEnabled() * @ref Corrade::Utility::Debug::isTty() */ - void printStatistics(std::size_t frequency) const; + void printStatistics(UnsignedInt frequency) const; /** * @brief Print an overview of all measurements to given output at given rate * - * Compared to @ref printStatistics(std::size_t) const prints to given + * Compared to @ref printStatistics(UnsignedInt) const prints to given * @p out (which can be also @ref Corrade::Utility::Warning or * @ref Corrade::Utility::Error) and uses it to decide whether the * output is a TTY and whether to print colors. * @see @ref Corrade::Utility::Debug::isTty(), * @ref Corrade::Utility::Debug::Flag::DisableColors */ - void printStatistics(Debug& out, std::size_t frequency) const; + void printStatistics(Debug& out, UnsignedInt frequency) const; /** @overload */ - void printStatistics(Debug&& out, std::size_t frequency) const { + void printStatistics(Debug&& out, UnsignedInt frequency) const { printStatistics(out, frequency); } private: - std::size_t delayedCurrentData(UnsignedInt delay) const; + UnsignedInt delayedCurrentData(UnsignedInt delay) const; Double measurementDataInternal(const Measurement& measurement) const; void printStatisticsInternal(Debug& out) const; @@ -389,7 +389,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT FrameProfiler { asserts get disabled */ bool _beginFrameCalled{}; #endif - std::size_t _currentData{}, _maxFrameCount{1}, _measuredFrameCount{}; + UnsignedInt _currentData{}, _maxFrameCount{1}, _measuredFrameCount{}; Containers::Array _measurements; Containers::Array _data; }; @@ -500,7 +500,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT GLFrameProfiler: public FrameProfiler { /** * @brief Measured value * - * @see @ref Values, @ref GLFrameProfiler(Values, std::size_t), + * @see @ref Values, @ref GLFrameProfiler(Values, UnsignedInt), * @ref setup() */ enum class Value: UnsignedShort { @@ -560,7 +560,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT GLFrameProfiler: public FrameProfiler { /** * @brief Measured values * - * @see @ref GLFrameProfiler(Values, std::size_t), @ref setup() + * @see @ref GLFrameProfiler(Values, UnsignedInt), @ref setup() */ typedef Containers::EnumSet Values; @@ -577,7 +577,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT GLFrameProfiler: public FrameProfiler { * Equivalent to default-constructing an instance and calling * @ref setup() afterwards. */ - explicit GLFrameProfiler(Values values, std::size_t maxFrameCount); + explicit GLFrameProfiler(Values values, UnsignedInt maxFrameCount); /** @brief Copying is not allowed */ GLFrameProfiler(const GLFrameProfiler&) = delete; @@ -603,13 +603,13 @@ class MAGNUM_DEBUGTOOLS_EXPORT GLFrameProfiler: public FrameProfiler { * existing measurements with @p measurements and reset * @ref measuredFrameCount() back to @cpp 0 @ce. */ - void setup(Values values, std::size_t maxFrameCount); + void setup(Values values, UnsignedInt maxFrameCount); /** * @brief Measured values * * Corresponds to the @p values parameter passed to - * @ref GLFrameProfiler(Values, std::size_t) or @ref setup(). + * @ref GLFrameProfiler(Values, UnsignedInt) or @ref setup(). */ Values values() const;