-
Notifications
You must be signed in to change notification settings - Fork 0
/
Buffer.py
49 lines (40 loc) · 1.51 KB
/
Buffer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from BittideFrame import BittideFrame
from collections import deque
class Buffer:
def __init__(self, size, initialOcc, localNode, remoteNode, server):
self.size = size
self.live = False
self.running = False
self.dataq = deque(maxlen=size)
self.initialOcc = initialOcc
self.server = server
self.localNode = localNode
self.latency_sum = 0.0
self.last_latency = 0
self.remoteNode = remoteNode
for i in range(initialOcc):
self.dataq.appendleft(BittideFrame(sender_timestamp=-1,sender_phys_time=-1, signals=[]))
def getId(self):
return (self.localNode, self.remoteNode)
def receive(self, frame : BittideFrame):
self.live = True
if self.running:
self.dataq.appendleft(frame)
def pop(self) -> BittideFrame:
if self.running:
if len(self.dataq) != 0:
return self.dataq.pop()
else:
return None
else: return BittideFrame(sender_timestamp=-1, sender_phys_time=-1,signals=[])
def peek_newest_timestamp(self) -> int:
return self.dataq[0].sender_timestamp
def add_latency_measurement(self, latency):
self.last_latency = latency
self.latency_sum += latency
def get_initial_occupancy(self):
return self.initialOcc
def get_occupancy(self):
return len(self.dataq)
def get_occupancy_as_percent(self):
return 100 * self.get_occupancy() / self.size