Underline when empirical delay gets >500ms, even if SRTT hasn't (fixes #35)

This commit is contained in:
Keith Winstein
2012-03-07 04:01:18 -05:00
parent 562ab991c8
commit dc1c49975f
2 changed files with 14 additions and 4 deletions
+11 -3
View File
@@ -382,13 +382,18 @@ void PredictionEngine::cull( const Framebuffer &fb )
srtt_trigger = false;
}
/* control flagging with hysteresis */
/* control underlining with hysteresis */
if ( send_interval > FLAG_TRIGGER_HIGH ) {
flagging = true;
} else if ( send_interval <= FLAG_TRIGGER_LOW ) {
flagging = false;
}
/* really big glitches also activate underlining */
if ( glitch_trigger > GLITCH_REPAIR_COUNT ) {
flagging = true;
}
/* go through cell predictions */
BOOST_AUTO( i, overlays.begin() );
@@ -473,8 +478,11 @@ void PredictionEngine::cull( const Framebuffer &fb )
case Pending:
/* When a prediction takes a long time to be confirmed, we
activate the predictions even if SRTT is low */
if ( (now - j->prediction_time) >= GLITCH_THRESHOLD ) {
glitch_trigger = GLITCH_REPAIR_COUNT;
if ( (now - j->prediction_time) >= GLITCH_FLAG_THRESHOLD ) {
glitch_trigger = GLITCH_REPAIR_COUNT * 2; /* display and underline */
} else if ( ((now - j->prediction_time) >= GLITCH_THRESHOLD)
&& (glitch_trigger < GLITCH_REPAIR_COUNT) ) {
glitch_trigger = GLITCH_REPAIR_COUNT; /* just display */
}
break;
+3 -1
View File
@@ -152,6 +152,8 @@ namespace Overlay {
static const uint64_t GLITCH_REPAIR_COUNT = 10; /* non-glitches required to cure glitch trigger */
static const uint64_t GLITCH_REPAIR_MININTERVAL = 150; /* required time in between non-glitches */
static const uint64_t GLITCH_FLAG_THRESHOLD = 500; /* prediction outstanding this long => underline */
char last_byte;
Parser::UTF8Parser parser;
@@ -172,7 +174,7 @@ namespace Overlay {
bool flagging; /* whether we are underlining predictions */
bool srtt_trigger; /* show predictions because of slow round trip time */
int glitch_trigger; /* show predictions temporarily because of long-pending prediction */
unsigned int glitch_trigger; /* show predictions temporarily because of long-pending prediction */
uint64_t last_quick_confirmation;
ConditionalCursorMove & cursor( void ) { assert( !cursors.empty() ); return cursors.back(); }