Chromium Code Reviews| Index: remoting/client/plugin/chromoting_instance.cc |
| diff --git a/remoting/client/plugin/chromoting_instance.cc b/remoting/client/plugin/chromoting_instance.cc |
| index c0ad2d3eaacb7d6bf7807cc6c84a6aa6c9a4ede2..3676cfd4c8d121a16d41123694f1d592a627d387 100644 |
| --- a/remoting/client/plugin/chromoting_instance.cc |
| +++ b/remoting/client/plugin/chromoting_instance.cc |
| @@ -67,6 +67,24 @@ const int kDefaultDPI = 96; |
| // state, so we initialize it with 1k or random data. |
| const int kRandomSeedSize = 1024; |
| +// The connection times and duration values are stored in UMA custom-time |
| +// histograms, specified based off values seen over a recent 7-day period. |
| +// The connection times histograms are in milliseconds and the connection |
| +// duration histograms are in minutes. |
| +const char kTimeToAuthenticateHistogram[] = |
| + "Chromoting.Connections.TimesMs.Authenticate"; |
| +const char kTimeToConnectHistogram[] = "Chromoting.Connections.TimesMs.Connect"; |
| +const char kClosedSessionDurationHistogram[] = |
| + "Chromoting.Connections.DurationsMinutes.Closed"; |
| +const char kDroppedSessionDurationHistogram[] = |
| + "Chromoting.Connections.DurationsMinutes.Failed"; |
| +const int kConnectionTimesHistogramMinMs = 1; |
| +const int kConnectionTimesHistogramMaxMs = 30000; |
| +const int kConnectionTimesHistogramBuckets = 50; |
| +const int kConnectionDurationHistogramMinMinutes = 1; |
| +const int kConnectionDurationHistogramMaxMinutes = 24 * 60; |
| +const int kConnectionDurationHistogramBuckets = 50; |
| + |
| // TODO(sergeyu): Ideally we should just pass ErrorCode to the webapp |
| // and let it handle it, but it would be hard to fix it now because |
| // client plugin and webapp versions may not be in sync. It should be |
| @@ -364,6 +382,48 @@ void ChromotingInstance::OnVideoFrameDirtyRegion( |
| void ChromotingInstance::OnConnectionState( |
| protocol::ConnectionToHost::State state, |
| protocol::ErrorCode error) { |
| + pp::UMAPrivate uma(this); |
| + |
| + switch (state) { |
| + case protocol::ConnectionToHost::CONNECTING: |
| + connection_connecting_ = base::Time::Now(); |
| + break; |
| + case protocol::ConnectionToHost::AUTHENTICATED: |
| + connection_authenticated_ = base::Time::Now(); |
| + uma.HistogramCustomTimes( |
| + kTimeToAuthenticateHistogram, |
| + (connection_authenticated_ - connection_connecting_).InMilliseconds(), |
| + kConnectionTimesHistogramMinMs, kConnectionTimesHistogramMaxMs, |
| + kConnectionTimesHistogramBuckets); |
| + break; |
| + case protocol::ConnectionToHost::CONNECTED: |
| + connection_connected_ = base::Time::Now(); |
| + uma.HistogramCustomTimes( |
| + kTimeToConnectHistogram, |
| + (connection_connected_ - connection_authenticated_).InMilliseconds(), |
| + kConnectionTimesHistogramMinMs, kConnectionTimesHistogramMaxMs, |
| + kConnectionTimesHistogramBuckets); |
| + break; |
| + case protocol::ConnectionToHost::CLOSED: |
| + uma.HistogramCustomTimes( |
| + kClosedSessionDurationHistogram, |
| + (base::Time::Now() - connection_connected_).InMilliseconds(), |
| + kConnectionDurationHistogramMinMinutes, |
| + kConnectionDurationHistogramMaxMinutes, |
| + kConnectionDurationHistogramBuckets); |
| + break; |
| + case protocol::ConnectionToHost::FAILED: |
| + uma.HistogramCustomTimes( |
| + kDroppedSessionDurationHistogram, |
| + (base::Time::Now() - connection_connected_).InMilliseconds(), |
|
Sergey Ulanov
2015/08/20 21:05:19
connection_connected_ is set only if the session w
anandc
2015/08/20 23:12:01
Done.
|
| + kConnectionDurationHistogramMinMinutes, |
| + kConnectionDurationHistogramMaxMinutes, |
| + kConnectionDurationHistogramBuckets); |
| + break; |
| + case protocol::ConnectionToHost::INITIALIZING: |
| + break; |
| + } |
| + |
| scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue()); |
| data->SetString("state", protocol::ConnectionToHost::StateToString(state)); |
| data->SetString("error", ConnectionErrorToString(error)); |