Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Unified Diff: net/proxy/proxy_service.cc

Issue 1121823004: Add some basic UMA for proxy service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tweak summary and rebase. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/proxy/proxy_service.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/proxy/proxy_service.cc
diff --git a/net/proxy/proxy_service.cc b/net/proxy/proxy_service.cc
index 5d07c8721e853a44ff17b0f5f126615bb2a273e4..d882aa30908ae04169283f758f94ec5b81a3c7ca 100644
--- a/net/proxy/proxy_service.cc
+++ b/net/proxy/proxy_service.cc
@@ -13,8 +13,10 @@
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/message_loop/message_loop_proxy.h"
+#include "base/metrics/histogram_macros.h"
#include "base/strings/string_util.h"
#include "base/thread_task_runner_handle.h"
+#include "base/time/time.h"
#include "base/values.h"
#include "net/base/completion_callback.h"
#include "net/base/load_flags.h"
@@ -856,14 +858,17 @@ class ProxyService::PacRequest
int QueryDidComplete(int result_code) {
DCHECK(!was_cancelled());
+ // This state is cleared when resolve_job_ is set to nullptr below.
+ bool script_executed = is_started();
+
// Clear |resolve_job_| so is_started() returns false while
// DidFinishResolvingProxy() runs.
resolve_job_ = nullptr;
// Note that DidFinishResolvingProxy might modify |results_|.
- int rv = service_->DidFinishResolvingProxy(url_, load_flags_,
- network_delegate_, results_,
- result_code, net_log_);
+ int rv = service_->DidFinishResolvingProxy(
+ url_, load_flags_, network_delegate_, results_, result_code, net_log_,
+ creation_time_, script_executed);
// Make a note in the results which configuration was in use at the
// time of the resolve.
@@ -1059,9 +1064,12 @@ int ProxyService::ResolveProxyHelper(const GURL& raw_url,
// using a direct connection for example).
int rv = TryToCompleteSynchronously(url, load_flags,
network_delegate, result);
- if (rv != ERR_IO_PENDING)
- return DidFinishResolvingProxy(url, load_flags, network_delegate,
- result, rv, net_log);
+ if (rv != ERR_IO_PENDING) {
+ rv = DidFinishResolvingProxy(
+ url, load_flags, network_delegate, result, rv, net_log,
+ callback.is_null() ? TimeTicks() : TimeTicks::Now(), false);
+ return rv;
+ }
if (callback.is_null())
return ERR_IO_PENDING;
@@ -1371,7 +1379,30 @@ int ProxyService::DidFinishResolvingProxy(const GURL& url,
NetworkDelegate* network_delegate,
ProxyInfo* result,
int result_code,
- const BoundNetLog& net_log) {
+ const BoundNetLog& net_log,
+ base::TimeTicks start_time,
+ bool script_executed) {
+ // Don't track any metrics if start_time is 0, which will happen when the user
+ // calls |TryResolveProxySynchronously|.
+ if (!start_time.is_null()) {
+ TimeDelta diff = TimeTicks::Now() - start_time;
+ if (script_executed) {
+ // This function "fixes" the result code, so make sure script terminated
+ // errors are tracked. Only track result codes that were a result of
+ // script execution.
+ UMA_HISTOGRAM_BOOLEAN("Net.ProxyService.ScriptTerminated",
+ result_code == ERR_PAC_SCRIPT_TERMINATED);
+ UMA_HISTOGRAM_CUSTOM_TIMES("Net.ProxyService.GetProxyUsingScriptTime",
+ diff, base::TimeDelta::FromMicroseconds(100),
+ base::TimeDelta::FromSeconds(20), 50);
+ }
+ UMA_HISTOGRAM_BOOLEAN("Net.ProxyService.ResolvedUsingScript",
+ script_executed);
+ UMA_HISTOGRAM_CUSTOM_TIMES("Net.ProxyService.ResolveProxyTime", diff,
+ base::TimeDelta::FromMicroseconds(100),
+ base::TimeDelta::FromSeconds(20), 50);
+ }
+
// Log the result of the proxy resolution.
if (result_code == OK) {
// Allow the network delegate to interpose on the resolution decision,
« no previous file with comments | « net/proxy/proxy_service.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698