No longer wait for a Tick signal to record events

This commit is contained in:
Greg Fitzgerald
2018-05-09 08:15:49 -06:00
parent 1d4d0272ca
commit bfbee988d0

View File

@ -8,7 +8,6 @@
use entry::{create_entry_mut, Entry}; use entry::{create_entry_mut, Entry};
use event::Event; use event::Event;
use hash::{hash, Hash}; use hash::{hash, Hash};
use std::mem;
use std::sync::mpsc::{Receiver, SyncSender, TryRecvError}; use std::sync::mpsc::{Receiver, SyncSender, TryRecvError};
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
@ -28,7 +27,6 @@ pub struct Recorder {
sender: SyncSender<Entry>, sender: SyncSender<Entry>,
receiver: Receiver<Signal>, receiver: Receiver<Signal>,
last_hash: Hash, last_hash: Hash,
events: Vec<Event>,
num_hashes: u64, num_hashes: u64,
num_ticks: u64, num_ticks: u64,
} }
@ -39,7 +37,6 @@ impl Recorder {
receiver, receiver,
sender, sender,
last_hash, last_hash,
events: vec![],
num_hashes: 0, num_hashes: 0,
num_ticks: 0, num_ticks: 0,
} }
@ -50,8 +47,7 @@ impl Recorder {
self.num_hashes += 1; self.num_hashes += 1;
} }
pub fn record_entry(&mut self) -> Result<(), ExitReason> { pub fn record_entry(&mut self, events: Vec<Event>) -> Result<(), ExitReason> {
let events = mem::replace(&mut self.events, vec![]);
let entry = create_entry_mut(&mut self.last_hash, &mut self.num_hashes, events); let entry = create_entry_mut(&mut self.last_hash, &mut self.num_hashes, events);
self.sender self.sender
.send(entry) .send(entry)
@ -67,7 +63,7 @@ impl Recorder {
loop { loop {
if let Some(ms) = ms_per_tick { if let Some(ms) = ms_per_tick {
if epoch.elapsed() > Duration::from_millis((self.num_ticks + 1) * ms) { if epoch.elapsed() > Duration::from_millis((self.num_ticks + 1) * ms) {
self.record_entry()?; self.record_entry(vec![])?;
self.num_ticks += 1; self.num_ticks += 1;
} }
} }
@ -75,11 +71,10 @@ impl Recorder {
match self.receiver.try_recv() { match self.receiver.try_recv() {
Ok(signal) => match signal { Ok(signal) => match signal {
Signal::Tick => { Signal::Tick => {
self.record_entry()?; self.record_entry(vec![])?;
} }
Signal::Events(events) => { Signal::Events(events) => {
self.events.extend(events); self.record_entry(events)?;
self.record_entry()?;
} }
}, },
Err(TryRecvError::Empty) => return Ok(()), Err(TryRecvError::Empty) => return Ok(()),