Remove unused throttle_util

This commit is contained in:
patrick96 2021-09-21 20:53:01 +02:00 committed by Patrick Ziegler
parent 069036fa5a
commit 0f72a2e0ea
3 changed files with 0 additions and 129 deletions

View File

@ -1,92 +0,0 @@
#pragma once
#include <chrono>
#include <deque>
#include "common.hpp"
#include "components/logger.hpp"
#include "utils/factory.hpp"
POLYBAR_NS
namespace chrono = std::chrono;
namespace throttle_util {
using timewindow = chrono::duration<double, std::milli>;
using timepoint_clock = chrono::high_resolution_clock;
using timepoint = timepoint_clock::time_point;
using queue = std::deque<timepoint>;
using limit = size_t;
namespace strategy {
struct try_once_or_leave_yolo {
bool operator()(queue& q, limit l, timewindow);
};
struct wait_patiently_by_the_door {
bool operator()(queue& q, limit l, timewindow);
};
}
/**
* Throttle events within a set window of time
*
* Example usage:
* \code cpp
* auto t = throttle_util::make_throttler(2, 1s);
* if (t->passthrough())
* ...
* \endcode
*/
class event_throttler {
public:
/**
* Construct throttler
*/
explicit event_throttler(int limit, timewindow timewindow) : m_limit(limit), m_timewindow(timewindow) {}
/**
* Check if event is allowed to pass
* using specified strategy
*/
template <typename Strategy>
bool passthrough(Strategy wait_strategy) {
expire_timestamps();
return wait_strategy(m_queue, m_limit, m_timewindow);
}
/**
* Check if event is allowed to pass
* using default strategy
*/
bool passthrough() {
return passthrough(strategy::try_once_or_leave_yolo{});
}
protected:
/**
* Expire old timestamps
*/
void expire_timestamps() {
auto now = timepoint_clock::now();
while (m_queue.size() > 0) {
if ((now - m_queue.front()) < m_timewindow)
break;
m_queue.pop_front();
}
}
private:
queue m_queue{};
limit m_limit{};
timewindow m_timewindow{};
};
using throttle_t = unique_ptr<event_throttler>;
template <typename... Args>
throttle_t make_throttler(Args&&... args) {
return factory_util::unique<event_throttler>(forward<Args>(args)...);
}
}
POLYBAR_NS_END

View File

@ -115,7 +115,6 @@ if(BUILD_LIBPOLY)
${src_dir}/utils/process.cpp ${src_dir}/utils/process.cpp
${src_dir}/utils/socket.cpp ${src_dir}/utils/socket.cpp
${src_dir}/utils/string.cpp ${src_dir}/utils/string.cpp
${src_dir}/utils/throttle.cpp
${src_dir}/x11/atoms.cpp ${src_dir}/x11/atoms.cpp
${src_dir}/x11/background_manager.cpp ${src_dir}/x11/background_manager.cpp

View File

@ -1,36 +0,0 @@
#include <thread>
#include "utils/throttle.hpp"
POLYBAR_NS
namespace throttle_util {
namespace strategy {
/**
* Only pass events when there are slots available
*/
bool try_once_or_leave_yolo::operator()(queue& q, limit l, timewindow /*unused*/) {
if (q.size() >= l) {
return false;
}
q.emplace_back(timepoint_clock::now());
return true;
}
/**
* If no slots are available, wait the required
* amount of time for a slot to become available
* then let the event pass
*/
bool wait_patiently_by_the_door::operator()(queue& q, limit l, timewindow /*unused*/) {
auto now = timepoint_clock::now();
q.emplace_back(now);
if (q.size() >= l) {
std::this_thread::sleep_for(now - q.front());
}
return true;
}
}
}
POLYBAR_NS_END