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..c35569a5a5876637bb5a0c688221de5aa850e7f4 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.Times.ToAuthenticate"; |
| +const char kTimeToConnectHistogram[] = "Chromoting.Connections.Times.ToConnect"; |
| +const char kClosedSessionDurationHistogram[] = |
| + "Chromoting.Connections.Durations.Closed"; |
| +const char kFailedSessionDurationHistogram[] = |
| + "Chromoting.Connections.Durations.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; |
|
Sergey Ulanov
2015/08/21 18:26:48
Not sure if 50 histograms is enough. Are these dis
anandc
2015/08/21 18:56:56
These are log-scaled. Added a note about that in t
|
| + |
| // 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,56 @@ void ChromotingInstance::OnVideoFrameDirtyRegion( |
| void ChromotingInstance::OnConnectionState( |
| protocol::ConnectionToHost::State state, |
| protocol::ErrorCode error) { |
| + pp::UMAPrivate uma(this); |
| + |
| + switch (state) { |
| + case protocol::ConnectionToHost::CONNECTING: |
| + connection_started_time = base::TimeTicks::Now(); |
| + break; |
| + case protocol::ConnectionToHost::AUTHENTICATED: |
| + connection_authenticated_time_ = base::TimeTicks::Now(); |
| + uma.HistogramCustomTimes( |
| + kTimeToAuthenticateHistogram, |
| + (connection_authenticated_time_ - connection_started_time) |
| + .InMilliseconds(), |
| + kConnectionTimesHistogramMinMs, kConnectionTimesHistogramMaxMs, |
| + kConnectionTimesHistogramBuckets); |
| + break; |
| + case protocol::ConnectionToHost::CONNECTED: |
| + connection_connected_time_ = base::TimeTicks::Now(); |
| + uma.HistogramCustomTimes( |
| + kTimeToConnectHistogram, |
| + (connection_connected_time_ - connection_authenticated_time_) |
| + .InMilliseconds(), |
| + kConnectionTimesHistogramMinMs, kConnectionTimesHistogramMaxMs, |
| + kConnectionTimesHistogramBuckets); |
| + break; |
| + case protocol::ConnectionToHost::CLOSED: |
| + if (!connection_connected_time_.is_null()) { |
| + uma.HistogramCustomTimes( |
| + kClosedSessionDurationHistogram, |
| + (base::TimeTicks::Now() - connection_connected_time_) |
| + .InMilliseconds(), |
| + kConnectionDurationHistogramMinMinutes, |
| + kConnectionDurationHistogramMaxMinutes, |
| + kConnectionDurationHistogramBuckets); |
| + } |
| + break; |
| + case protocol::ConnectionToHost::FAILED: |
| + if (!connection_connected_time_.is_null()) { |
| + uma.HistogramCustomTimes( |
| + kFailedSessionDurationHistogram, |
| + (base::TimeTicks::Now() - connection_connected_time_) |
| + .InMilliseconds(), |
| + kConnectionDurationHistogramMinMinutes, |
| + kConnectionDurationHistogramMaxMinutes, |
| + kConnectionDurationHistogramBuckets); |
| + } |
| + break; |
| + case protocol::ConnectionToHost::INITIALIZING: |
| + break; |
|
Sergey Ulanov
2015/08/21 18:26:48
nit: Add NOTREACHED() here and move to the beginni
anandc
2015/08/21 18:56:56
Done.
|
| + } |
| + |
| scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue()); |
| data->SetString("state", protocol::ConnectionToHost::StateToString(state)); |
| data->SetString("error", ConnectionErrorToString(error)); |