From 60b5c00d98874fc95dfde3df6a69dbe420bda157 Mon Sep 17 00:00:00 2001 From: Matthew Hammer Date: Mon, 12 Jul 2021 20:55:44 -0600 Subject: [PATCH] Responsivity improvement: swap view and update steps (#73) * Responsivity improvement: swap view and update steps * cargo fmt --- src/bin/ic-mt.rs | 112 +++++++++++++++++++++++------------------------ src/lib/draw.rs | 12 +++-- src/lib/types.rs | 2 +- 3 files changed, 62 insertions(+), 64 deletions(-) diff --git a/src/bin/ic-mt.rs b/src/bin/ic-mt.rs index 1f7d3b9..db6500c 100644 --- a/src/bin/ic-mt.rs +++ b/src/bin/ic-mt.rs @@ -1,5 +1,5 @@ -extern crate garcon; extern crate futures; +extern crate garcon; extern crate ic_agent; extern crate ic_types; extern crate icmt; @@ -64,13 +64,14 @@ async fn create_agent(url: &str) -> IcmtResult { let rng = SystemRandom::new(); let pkcs8_bytes = ring::signature::Ed25519KeyPair::generate_pkcs8(&rng)?; let key_pair = ring::signature::Ed25519KeyPair::from_pkcs8(pkcs8_bytes.as_ref())?; - let ident = ic_agent::identity::BasicIdentity::from_key_pair(key_pair); + let ident = ic_agent::identity::BasicIdentity::from_key_pair(key_pair); let agent = Agent::builder() .with_url(url) .with_identity(ident) .build()?; info!("built agent."); - if true { // to do -- CLI switch. + if true { + // to do -- CLI switch. agent.fetch_root_key().await?; } info!("got root key."); @@ -436,6 +437,57 @@ async fn local_event_loop(ctx: ConnectCtx) -> Result<(), IcmtError> { ))?; } } + if quit_request { + write_gifs( + &ctx.cfg.cli_opt, + &window_dim, + dump_events, + &dump_graphics, + &engiffen_paths, + )?; + { + print!("Stopping view task... "); + view_out.send(None)?; + println!("Done."); + } + println!("All done."); + return Ok(()); + } else + /* attend to view task */ + { + match view_in.try_recv() { + Ok(rr) => { + view_responses += 1; + info!("view_responses = {}", view_responses); + + do_redraw( + &(ctx.cfg).cli_opt, + &window_dim, + &mut window_canvas, + &mut file_canvas, + &mut engiffen_paths, + &rr, + ) + .await?; + + ready_flag = true; + } + Err(mpsc::TryRecvError::Empty) => { /* not ready; do nothing */ } + Err(e) => error!("{:?}", e), + }; + + if dirty_flag && ready_flag { + dirty_flag = false; + ready_flag = false; + let mut events = update_events.clone(); + events.append(&mut (view_events.clone())); + + view_out.send(Some((window_dim.clone(), events)))?; + + view_requests += 1; + debug!("view_requests = {}", view_requests); + } + }; /* attend to update task */ if is_live || !quit_request { @@ -502,58 +554,6 @@ async fn local_event_loop(ctx: ConnectCtx) -> Result<(), IcmtError> { } }; - if quit_request { - write_gifs( - &ctx.cfg.cli_opt, - &window_dim, - dump_events, - &dump_graphics, - &engiffen_paths, - )?; - { - print!("Stopping view task... "); - view_out.send(None)?; - println!("Done."); - } - println!("All done."); - return Ok(()); - } else - /* attend to view task */ - { - match view_in.try_recv() { - Ok(rr) => { - view_responses += 1; - debug!("view_responses = {}", view_responses); - - do_redraw( - &(ctx.cfg).cli_opt, - &window_dim, - &mut window_canvas, - &mut file_canvas, - &mut engiffen_paths, - &rr, - ) - .await?; - - ready_flag = true; - } - Err(mpsc::TryRecvError::Empty) => { /* not ready; do nothing */ } - Err(e) => error!("{:?}", e), - }; - - if dirty_flag && ready_flag { - dirty_flag = false; - ready_flag = false; - let mut events = update_events.clone(); - events.append(&mut (view_events.clone())); - - view_out.send(Some((window_dim.clone(), events)))?; - - view_requests += 1; - debug!("view_requests = {}", view_requests); - } - }; - // attend to next batch of local events, and loop everything above continue 'running; } @@ -745,6 +745,6 @@ async fn main() -> IcmtResult<()> { }; run(cfg).await?; } - }; + }; Ok(()) } diff --git a/src/lib/draw.rs b/src/lib/draw.rs index f07dfc6..7864049 100644 --- a/src/lib/draw.rs +++ b/src/lib/draw.rs @@ -1,6 +1,6 @@ //! Draw. -use log::{trace, warn, error}; +use log::{error, trace, warn}; use crate::{ color::*, @@ -118,12 +118,10 @@ pub async fn draw( warn!("unrecognized redraw elements {:?}", elms); } } - graphics::Result::Err(opt_message) => { - match opt_message { - None => error!("Error result from server. No message."), - Some(ref m) => error!("Error message from server: {}", m), - } - } + graphics::Result::Err(opt_message) => match opt_message { + None => error!("Error result from server. No message."), + Some(ref m) => error!("Error message from server: {}", m), + }, }; canvas.present(); // to do -- if enabled, dump canvas as .BMP file to next output image file in the stream that we are producing diff --git a/src/lib/types.rs b/src/lib/types.rs index 71d10c0..d6fed95 100644 --- a/src/lib/types.rs +++ b/src/lib/types.rs @@ -236,7 +236,7 @@ pub mod graphics { #[serde(rename = "rect")] Rect(Rect, Fill), #[serde(rename = "node")] - Node(Box) + Node(Box), } /// Elements pub type Elms = Vec;