Chromium Code Reviews| Index: chrome/browser/resources/hotword/nacl_manager.js |
| diff --git a/chrome/browser/resources/hotword/nacl_manager.js b/chrome/browser/resources/hotword/nacl_manager.js |
| index 79c1f3f1104a92f1c755ed883fb7140f1c36403f..be20edec81d4eede7ce948f6bd3ec5823d6f548e 100644 |
| --- a/chrome/browser/resources/hotword/nacl_manager.js |
| +++ b/chrome/browser/resources/hotword/nacl_manager.js |
| @@ -77,6 +77,8 @@ NaClManager.ManagerState_ = { |
| }; |
| var ManagerState_ = NaClManager.ManagerState_; |
| var Error_ = hotword.constants.Error; |
| +var UmaNaClMessageTimeout_ = hotword.constants.UmaNaClMessageTimeout; |
| +var UmaNaClPluginLoadResult_ = hotword.constants.UmaNaClPluginLoadResult; |
| NaClManager.prototype.__proto__ = cr.EventTarget.prototype; |
| @@ -92,6 +94,18 @@ NaClManager.prototype.handleError_ = function(error) { |
| }; |
| /** |
| + * Record the result of loading the NaCl plugin to UMA. |
| + * @param {!hotword.constants.UmaNaClPluginLoadResult} error |
| + * @private |
| + */ |
| +NaClManager.prototype.logPluginLoadResult_ = function(error) { |
| + hotword.metrics.recordEnum( |
| + hotword.constants.UmaMetrics.NACL_PLUGIN_LOAD_RESULT, |
| + error, |
| + UmaNaClPluginLoadResult_.MAX); |
| +}; |
| + |
| +/** |
| * @return {boolean} True if the recognizer is in a running state. |
| */ |
| NaClManager.prototype.isRunning = function() { |
| @@ -250,11 +264,16 @@ NaClManager.prototype.initialize = function(naclArch, stream) { |
| false); |
| plugin.addEventListener('crash', |
| - this.handleError_.bind(this, Error_.NACL_CRASH), |
| + function() { |
| + this.handleError_(Error_.NACL_CRASH); |
| + this.logPluginLoadResult_( |
| + UmaNaClPluginLoadResult_.CRASH); |
| + }.bind(this), |
| false); |
| return true; |
| } |
| this.recognizerState_ = ManagerState_.ERROR; |
| + this.logPluginLoadResult_(UmaNaClPluginLoadResult_.NO_MODULE_FOUND); |
| return false; |
| }; |
| @@ -297,6 +316,31 @@ NaClManager.prototype.waitForMessage_ = function(timeout, message) { |
| function() { |
| this.recognizerState_ = ManagerState_.ERROR; |
| this.handleError_(Error_.TIMEOUT); |
| + this.logPluginLoadResult_(UmaNaClPluginLoadResult_.MESSAGE_TIMEOUT); |
| + switch (this.expectingMessage_) { |
| + case hotword.constants.NaClPlugin.REQUEST_MODEL: |
| + var metricValue = UmaNaClMessageTimeout_.REQUEST_MODEL; |
| + break; |
| + case hotword.constants.NaClPlugin.MODEL_LOADED: |
| + var metricValue = UmaNaClMessageTimeout_.MODEL_LOADED; |
| + break; |
| + case hotword.constants.NaClPlugin.READY_FOR_AUDIO: |
| + var metricValue = UmaNaClMessageTimeout_.READY_FOR_AUDIO; |
| + break; |
| + case hotword.constants.NaClPlugin.STOPPED: |
| + var metricValue = UmaNaClMessageTimeout_.STOPPED; |
| + break; |
| + case hotword.constants.NaClPlugin.HOTWORD_DETECTED: |
| + var metricValue = UmaNaClMessageTimeout_.HOTWORD_DETECTED; |
| + break; |
| + case hotword.constants.NaClPlugin.MS_CONFIGURED: |
| + var metricValue = UmaNaClMessageTimeout_.MS_CONFIGURED; |
| + break; |
| + } |
| + hotword.metrics.recordEnum( |
| + hotword.constants.UmaMetrics.NACL_MESSAGE_TIMEOUT, |
| + metricValue, |
|
rpetterson
2014/10/23 19:03:36
Perhaps success should simply be one of the cases
Anand Mistry (off Chromium)
2014/10/23 21:38:16
I don't understand. I don't think we want to track
|
| + UmaNaClMessageTimeout_.MAX); |
| }.bind(this), timeout); |
| this.expectingMessage_ = message; |
| }; |
| @@ -323,6 +367,7 @@ NaClManager.prototype.handleRequestModel_ = function() { |
| if (this.recognizerState_ != ManagerState_.LOADING) { |
| return; |
| } |
| + this.logPluginLoadResult_(UmaNaClPluginLoadResult_.SUCCESS); |
| this.sendDataToPlugin_( |
| hotword.constants.NaClPlugin.MODEL_PREFIX + this.modelUrl_); |
| this.waitForMessage_(hotword.constants.TimeoutMs.LONG, |