From 1bb8df69a917f0102dbe96370a46a5d02cb19709 Mon Sep 17 00:00:00 2001 From: Keith Winstein Date: Thu, 13 Oct 2011 15:37:26 -0400 Subject: [PATCH] Only flag (underline) predictions on long echo delay --- terminaloverlay.cpp | 8 +++++++- terminaloverlay.hpp | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/terminaloverlay.cpp b/terminaloverlay.cpp index 71f54d8..efaa10d 100644 --- a/terminaloverlay.cpp +++ b/terminaloverlay.cpp @@ -22,7 +22,9 @@ void OverlayCell::apply( Framebuffer &fb ) const if ( !(*(fb.get_mutable_cell( row, col )) == replacement) ) { *(fb.get_mutable_cell( row, col )) = replacement; - fb.get_mutable_cell( row, col )->renditions.bold = true; /* XXX */ + if ( flag ) { + fb.get_mutable_cell( row, col )->renditions.underlined = true; + } } } @@ -122,6 +124,9 @@ void PredictionEngine::cull( const Framebuffer &fb ) i++; } } + + if ( SRTT > 150 ) flagging = true; /* start underlining predicted chars */ + if ( SRTT < 100 ) flagging = false; /* use some hysterisis to avoid annoying flicker */ } OverlayCell::OverlayCell( uint64_t expiration_time, int s_row, int s_col, int background_color ) @@ -342,6 +347,7 @@ void PredictionEngine::new_user_byte( char the_byte, const Framebuffer &fb ) coc->replacement = *existing_cell; coc->replacement.contents.clear(); coc->replacement.contents.push_back( the_byte ); + coc->flag = flagging; ccm->new_col++; ccm->expiration_time = now + prediction_len(); diff --git a/terminaloverlay.hpp b/terminaloverlay.hpp index d1f0be0..95fd592 100644 --- a/terminaloverlay.hpp +++ b/terminaloverlay.hpp @@ -21,12 +21,14 @@ namespace Overlay { class OverlayElement { public: uint64_t prediction_time, expiration_time; + bool flag; /* whether to bold for the user */ virtual void apply( Framebuffer &fb ) const = 0; virtual Validity get_validity( const Framebuffer & ) const; OverlayElement( uint64_t s_expiration_time ) : prediction_time( timestamp() ), - expiration_time( s_expiration_time ) {} + expiration_time( s_expiration_time ), + flag( false ) {} virtual ~OverlayElement() {} }; @@ -112,6 +114,7 @@ namespace Overlay { /* use the TCP timeout algorithm to measure appropriate echo prediction timeout */ bool RTT_hit; double SRTT, RTTVAR; + bool flagging; int prediction_len( void ); public: @@ -119,7 +122,7 @@ namespace Overlay { void new_user_byte( char the_byte, const Framebuffer &fb ); void calculate_score( const Framebuffer &fb ); - PredictionEngine() : score( 0 ), RTT_hit( false ), SRTT( 1000 ), RTTVAR( 500 ) {} + PredictionEngine() : score( 0 ), RTT_hit( false ), SRTT( 1000 ), RTTVAR( 500 ), flagging( false ) {} int get_score( void ) { return score; } };