aboutsummaryrefslogtreecommitdiffstats
path: root/src/ttyrec.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ttyrec.rs')
-rw-r--r--src/ttyrec.rs25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/ttyrec.rs b/src/ttyrec.rs
index 77b95bc..c6f627e 100644
--- a/src/ttyrec.rs
+++ b/src/ttyrec.rs
@@ -3,15 +3,14 @@ use std::convert::TryFrom as _;
use tokio::io::{AsyncRead as _, AsyncWrite as _};
pub struct Frame {
- pub time: std::time::Instant,
+ pub time: std::time::Duration,
pub data: Vec<u8>,
}
impl Frame {
- fn as_bytes(&self, base: std::time::Instant) -> Vec<u8> {
- let dur = self.time - base;
- let secs = u32::try_from(dur.as_secs()).unwrap();
- let micros = dur.subsec_micros();
+ fn as_bytes(&self) -> Vec<u8> {
+ let secs = u32::try_from(self.time.as_secs()).unwrap();
+ let micros = self.time.subsec_micros();
let len = u32::try_from(self.data.len()).unwrap();
let mut bytes = vec![];
bytes.extend(secs.to_le_bytes().iter());
@@ -54,14 +53,17 @@ impl File {
pub fn write_frame(&mut self, data: &[u8]) -> Result<()> {
let now = std::time::Instant::now();
- if self.base_time.is_none() {
+ let base_time = if let Some(base_time) = &self.base_time {
+ *base_time
+ } else {
self.base_time = Some(now);
- }
+ now
+ };
self.waiting += 1;
self.wframe
.send(Frame {
- time: now,
+ time: now - base_time,
data: data.to_vec(),
})
.context(crate::error::WriteChannel)
@@ -74,9 +76,7 @@ impl File {
if self.writing.is_empty() {
match self.rframe.poll().context(crate::error::ReadChannel)? {
futures::Async::Ready(Some(frame)) => {
- self.writing.extend(
- frame.as_bytes(self.base_time.unwrap()).iter(),
- );
+ self.writing.extend(frame.as_bytes().iter());
self.waiting -= 1;
}
futures::Async::Ready(None) => unreachable!(),
@@ -153,10 +153,9 @@ impl File {
if self.base_time.is_none() {
self.base_time = Some(std::time::Instant::now());
}
- let dur = std::time::Duration::from_micros(u64::from(
+ let time = std::time::Duration::from_micros(u64::from(
secs * 1_000_000 + usecs,
));
- let time = self.base_time.unwrap() + dur;
self.read.push_back(Frame { time, data });