| Index: third_party/google_input_tools/src/chrome/os/statistics.js
|
| diff --git a/third_party/google_input_tools/src/chrome/os/statistics.js b/third_party/google_input_tools/src/chrome/os/statistics.js
|
| index d08a0040e71053419d5831e5b0e4ad387e20e0f7..26fc3f52a2a74ee7f7be4f420259c4c177ec9397 100644
|
| --- a/third_party/google_input_tools/src/chrome/os/statistics.js
|
| +++ b/third_party/google_input_tools/src/chrome/os/statistics.js
|
| @@ -87,6 +87,40 @@ Statistics.prototype.charactersBetweenBackspaces_ = 0;
|
|
|
|
|
| /**
|
| + * Maximum pause duration in milliseconds.
|
| + *
|
| + * @private {number}
|
| + * @const
|
| + */
|
| +Statistics.prototype.MAX_PAUSE_DURATION_ = 3000;
|
| +
|
| +
|
| +/**
|
| + * Minimum words typed before committing the WPM statistic.
|
| + *
|
| + * @private {number}
|
| + * @const
|
| + */
|
| +Statistics.prototype.MIN_WORDS_FOR_WPM_ = 10;
|
| +
|
| +
|
| +/**
|
| + * Timestamp of last activity.
|
| + *
|
| + * @private {number}
|
| + */
|
| +Statistics.prototype.lastActivityTimeStamp_ = 0;
|
| +
|
| +
|
| +/**
|
| + * Time spent typing.
|
| + *
|
| + * @private {number}
|
| + */
|
| +Statistics.prototype.typingDuration_ = 0;
|
| +
|
| +
|
| +/**
|
| * Whether recording for physical keyboard specially.
|
| *
|
| * @private {boolean}
|
| @@ -111,6 +145,14 @@ Statistics.prototype.charactersCommitted_ = 0;
|
|
|
|
|
| /**
|
| + * The number of characters to ignore when calculating WPM.
|
| + *
|
| + * @private {number}
|
| + */
|
| +Statistics.prototype.droppedKeys_ = 0;
|
| +
|
| +
|
| +/**
|
| * Sets whether recording for physical keyboard.
|
| *
|
| * @param {boolean} isPhysicalKeyboard .
|
| @@ -175,11 +217,20 @@ Statistics.prototype.recordSessionEnd = function() {
|
| // excudes the focus loss-gain on the new tab page from being counted.
|
| if (this.charactersCommitted_ > 0) {
|
| this.recordValue('InputMethod.VirtualKeyboard.CharactersCommitted',
|
| - this.charactersCommitted_, 16384, 50);
|
| - // TODO: Add WPM metrics.
|
| + this.charactersCommitted_, 16384, 50);
|
| + var words = (this.charactersCommitted_ - this.droppedKeys_) / 5;
|
| + if (this.typingDuration_ > 0 && words > this.MIN_WORDS_FOR_WPM_) {
|
| + // Milliseconds to minutes.
|
| + var minutes = this.typingDuration_ / 60000;
|
| + this.recordValue('InputMethod.VirtualKeyboard.WordsPerMinute',
|
| + Math.round(words / minutes), 100, 100);
|
| + }
|
| }
|
| + this.droppedKeys_ = 0;
|
| this.charactersCommitted_ = 0;
|
| this.lastCommitLength_ = 0;
|
| + this.typingDuration_ = 0;
|
| + this.lastActivityTimeStamp_ = 0;
|
| };
|
|
|
|
|
| @@ -363,6 +414,19 @@ Statistics.prototype.recordValue = function(
|
| * Records a key down.
|
| */
|
| Statistics.prototype.recordCharacterKey = function() {
|
| + var now = Date.now();
|
| + if (this.lastActivityTimeStamp_) {
|
| + if (now < (this.lastActivityTimeStamp_ + this.MAX_PAUSE_DURATION_)) {
|
| + this.typingDuration_ += (now - this.lastActivityTimeStamp_);
|
| + } else {
|
| + // Exceeded pause duration. Ignore this character.
|
| + this.droppedKeys_++;
|
| + }
|
| + } else {
|
| + // Ignore the first character in the new session.
|
| + this.droppedKeys_++;
|
| + }
|
| + this.lastActivityTimeStamp_ = now;
|
| this.charactersBetweenBackspaces_++;
|
| };
|
|
|
|
|