From bd5fee1eb189fdc91ae9a0dac366c68595250390 Mon Sep 17 00:00:00 2001 From: Jonathon Wilson Date: Sun, 2 Jun 2013 13:14:31 -0600 Subject: [PATCH] FTUE: Make latency gauge functional --- .../images/content/latency_gauge_back.png | Bin 0 -> 57903 bytes .../images/content/latency_gauge_needle.png | Bin 0 -> 294 bytes app/assets/javascripts/fakeJamClient.js | 4 +- app/assets/javascripts/ftue.js | 68 ++++++++++-- app/assets/stylesheets/client/ftue.css.scss | 32 ++++++ app/views/clients/_ftue.html.erb | 12 ++- spec/javascripts/ftue.spec.js | 99 ++++++++++++++++++ spec/javascripts/karma.conf.js | 2 +- 8 files changed, 205 insertions(+), 12 deletions(-) create mode 100644 app/assets/images/content/latency_gauge_back.png create mode 100644 app/assets/images/content/latency_gauge_needle.png create mode 100644 spec/javascripts/ftue.spec.js diff --git a/app/assets/images/content/latency_gauge_back.png b/app/assets/images/content/latency_gauge_back.png new file mode 100644 index 0000000000000000000000000000000000000000..2a615bd318f8a31eeb198f8b39ff7ccdd225e2ba GIT binary patch literal 57903 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/content/latency_gauge_needle.png b/app/assets/images/content/latency_gauge_needle.png new file mode 100644 index 0000000000000000000000000000000000000000..df076e4f744fa71a5901aa6d9d3cb6d68f60714f GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^Y(RX614IUAUSI@LjKx9jP7LeL$-D%~CV9KNFgyZ5 zf72CFKoQOYkH}&M25w;xW@MN(M*=9wUgGKN%6^xPiHV1E;)UINfI`bWT^vIq4!@lg z$kl8h;1WOiM%Dk%U)Gmvei3=wKg~sG*Fn*#=a>&#oH?T=*mLLE^bJuv%Bna;vl}hUc@cubgB4qC(}bEaQ$VE$_FdiWK|% zZm6URsY8ivb}>{~yGYia>q%;4$j=d#Wzp$PyM;%(Oe literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/fakeJamClient.js b/app/assets/javascripts/fakeJamClient.js index 87da8e17b..febd15733 100644 --- a/app/assets/javascripts/fakeJamClient.js +++ b/app/assets/javascripts/fakeJamClient.js @@ -115,8 +115,8 @@ } function FTUEStartLatency() { function cb() { - // Change 10 to modify latency MS results - eval(latencyCallback + "(10)"); + // Change 4192 to modify latency MS results (in microseconds) + eval(latencyCallback + "(4192)"); } context.setTimeout(cb, 1000); } diff --git a/app/assets/javascripts/ftue.js b/app/assets/javascripts/ftue.js index c5dedebe0..052f49dac 100644 --- a/app/assets/javascripts/ftue.js +++ b/app/assets/javascripts/ftue.js @@ -90,11 +90,6 @@ function updateGauge() { var latencyMS = context.JK.FtueWizard.latencyMS; logger.debug("Latency Value: " + latencyMS); - // TODO - update the gauge visually, and the message according to - // returned value. - // IF gauge is in green (<= 10ms), hide the help/run test again buttons - // IF gauge is in yellow (> 10ms, <= 20ms), keep help/run test again. - // IF gauge is in red (>20ms, switch to fail text) if (latencyMS > 20) { $('#ftue-latency-congrats').hide(); $('#ftue-latency-fail').show(); @@ -106,10 +101,66 @@ $('[layout-wizard-step="6"] .btnHelp').hide(); $('[layout-wizard-step="6"] .btnRepeat').hide(); } - // TODO - update the gauge + setNeedleValue(latencyMS); } } + // Function to calculate an absolute value and an absolute value range into + // a number of degrees on a circualar "speedometer" gauge. The 0 degrees value + // points straight up to the middle of the real-world value range. + // Arguments: + // value: The real-world value (e.g. 20 milliseconds) + // minValue: The real-world minimum value (e.g. 0 milliseconds) + // maxValue: The real-world maximum value (e.g. 40 milliseconds) + // degreesUsed: The number of degrees used to represent the full real-world + // range. 360 would be the entire circle. 270 would be 3/4ths + // of the circle. The unused gap will be at the bottom of the + // gauge. + // (e.g. 300) + function degreesFromRange(value, minValue, maxValue, degreesUsed) { + if (value > maxValue) { value = maxValue; } + if (value < minValue) { value = minValue; } + var range = maxValue-minValue; + var floatVal = value/range; + var degrees = Math.round(floatVal * degreesUsed); + degrees -= Math.round(degreesUsed/2); + if (degrees < 0) { + degrees += 360; + } + return degrees; + } + + // Given a number of MS, and assuming the gauge has a range from + // 0 to 40 ms. Update the gauge to the proper value. + function setNeedleValue(ms) { + var deg = degreesFromRange(ms, 0, 40, 300); + + // Supporting Firefix, Chrome, Safari, Opera and IE9+. + // Should we need to support < IE9, this will need more work + // to compute the matrix transformations in those browsers - + // and I don't believe they support transparent PNG graphic + // rotation, so we'll have to change the needle itself. + var css = { + //"behavior":"url(-ms-transform.htc)", + /* Firefox */ + "-moz-transform":"rotate(" + deg + "deg)", + /* Safari and Chrome */ + "-webkit-transform":"rotate(" + deg + "deg)", + /* Opera */ + "-o-transform":"rotate(" + deg + "deg)", + /* IE9 */ + "-ms-transform":"rotate(" + deg + "deg)" + /* IE6,IE7 */ + //"filter": "progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)", + /* IE8 */ + //"-ms-filter": '"progid:DXImageTransform.Microsoft.Matrix(SizingMethod=\'auto expand\', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"' + }; + + $('#ftue-latency-numerical').html(ms); + $('#ftue-latency-needle').css(css); + + } + function testLatency() { // we'll just register for call back right here and unregister in the callback. context.JK.FtueWizard.latencyTimeout = true; @@ -285,9 +336,14 @@ // Expose publics this.initialize = initialize; + // Expose degreesFromRange outside for testing + this._degreesFromRange = degreesFromRange; + return this; }; + + // Common VU updater taking a dbValue (-80 to 20) and a CSS selector for the VU. context.JK.ftueVUCallback = function(dbValue, selector) { // Convert DB into a value from 0.0 - 1.0 diff --git a/app/assets/stylesheets/client/ftue.css.scss b/app/assets/stylesheets/client/ftue.css.scss index 2a2635e5f..46a4d216f 100644 --- a/app/assets/stylesheets/client/ftue.css.scss +++ b/app/assets/stylesheets/client/ftue.css.scss @@ -4,6 +4,38 @@ @charset "UTF-8"; /* Jonathon's FTUE overrides */ +#ftue-latency-needle { + position:absolute; + width: 6px; + height: 220px; + top:50%; + left:50%; + overflow:visible; + margin: -106px -3px 0px 0px; + padding: 0px 0px 0px 0px; +} +#ftue-latency-numerical { + position:absolute; + width: 150px; + height: 32px; + top: 228px; + left: 50%; + margin: -73px; + text-align:center; + font-size: 1.8em; + font-weight: bold; +} +#ftue-latency-label { + position:absolute; + width: 150px; + height: 32px; + top: 250px; + left: 50%; + margin: -73px; + text-align:center; + font-size: 0.9em; +} + div.dialog.ftue { min-width: 800px; max-width: 800px; diff --git a/app/views/clients/_ftue.html.erb b/app/views/clients/_ftue.html.erb index 75fde0d81..f75fedf9a 100644 --- a/app/views/clients/_ftue.html.erb +++ b/app/views/clients/_ftue.html.erb @@ -213,15 +213,21 @@
-
- <%= image_tag "content/latency_gauge.png", +
+ <%= image_tag "content/latency_gauge_back.png", {:width => 247, :height => 242, :class => "left"} %> +
+ <%= image_tag "content/latency_gauge_needle.png", + {:width => 6, :height => 220 } %> +
+
10
+
milliseconds





Congratulations! Your local end-to-end audio gear latency is - millisections, which is good. You may now create and join sessions + milliseconds, which is good. You may now create and join sessions to play with other musicians using JamKazam.