#ifndef _QUEUE_LENGTH_POLICY_H
#define _QUEUE_LENGTH_POLICY_H 1
+#include <stddef.h>
+#include <stdint.h>
+
#include <atomic>
+#include <chrono>
+#include <deque>
+#include <set>
#include <string>
#include <utility>
#include <vector>
void clear() {
history.clear();
orders.clear();
+ expected_timestamp = std::chrono::steady_clock::time_point::min();
}
void frame_arrived(std::chrono::steady_clock::time_point now, int64_t frame_duration, size_t dropped_frames);
std::chrono::steady_clock::time_point get_expected_next_frame() const { return expected_timestamp; }
std::deque<std::multiset<double>::iterator> history;
std::chrono::steady_clock::time_point expected_timestamp = std::chrono::steady_clock::time_point::min();
+ int64_t last_duration = 0;
// Metrics. There are no direct summaries for jitter, since we already have latency summaries.
std::atomic<int64_t> metric_input_underestimated_jitter_frames{0};
// Call after picking out a frame, so 0 means starvation.
// Note that the policy has no memory; everything is given in as parameters.
void update_policy(std::chrono::steady_clock::time_point now,
- std::chrono::steady_clock::time_point expected_next_frame,
+ std::chrono::steady_clock::time_point expected_next_input_frame,
int64_t input_frame_duration,
int64_t master_frame_duration,
double max_input_card_jitter_seconds,