summaryrefslogtreecommitdiffstats
path: root/net/socket/client_socket_handle.cc
diff options
context:
space:
mode:
authorjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-07 19:19:43 +0000
committerjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-07 19:19:43 +0000
commit668fc1063e8cf948924825ff90268587d407c59c (patch)
treec3d64124a4a1d3e9f4a63473517dec0cb83e880d /net/socket/client_socket_handle.cc
parent83d86254647aea9dc212c4835b1d8a2104d92dba (diff)
downloadchromium_src-668fc1063e8cf948924825ff90268587d407c59c.zip
chromium_src-668fc1063e8cf948924825ff90268587d407c59c.tar.gz
chromium_src-668fc1063e8cf948924825ff90268587d407c59c.tar.bz2
Add DCHECK to detect misuse of HISTOGRAM interface.
The interface (for perf reasons) snapshots the histogram name, and reuses it in future calls. As a result, any attempt to modulate (change) the name between call is ignored. This change uses a DCHECK to detect such abuse. BUG=43377 BUG=43375 r=vandebo Review URL: http://codereview.chromium.org/2019001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@46726 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket/client_socket_handle.cc')
-rw-r--r--net/socket/client_socket_handle.cc24
1 files changed, 16 insertions, 8 deletions
diff --git a/net/socket/client_socket_handle.cc b/net/socket/client_socket_handle.cc
index 6e3a587..87212b1 100644
--- a/net/socket/client_socket_handle.cc
+++ b/net/socket/client_socket_handle.cc
@@ -75,32 +75,40 @@ void ClientSocketHandle::HandleInitCompletion(int result) {
}
setup_time_ = base::TimeTicks::Now() - init_time_;
- std::string metric = "Net." + pool_->name() + "SocketType";
+ // TODO(vandebo): bug 43375: The strings passed to HISTOGRAM macros should NOT
+ // vary, as the macro snapshots the name into a static. I've temporarilly
+ // made this code use statics so that the HISTOGRAM macro will not DCHECK (and
+ // this also makes the current semantics a tiny bit more clear).
+ static std::string metric = "Net." + pool_->name() + "SocketType";
UMA_HISTOGRAM_ENUMERATION(metric, reuse_type(), NUM_TYPES);
switch (reuse_type()) {
- case ClientSocketHandle::UNUSED:
- metric = "Net." + pool_->name() + "SocketRequestTime";
+ case ClientSocketHandle::UNUSED: {
+ static std::string metric = "Net." + pool_->name() + "SocketRequestTime";
UMA_HISTOGRAM_CLIPPED_TIMES(metric, setup_time(),
base::TimeDelta::FromMilliseconds(1),
base::TimeDelta::FromMinutes(10), 100);
break;
- case ClientSocketHandle::UNUSED_IDLE:
- metric = "Net." + pool_->name() +
+ }
+ case ClientSocketHandle::UNUSED_IDLE: {
+ static std::string metric = "Net." + pool_->name() +
"SocketIdleTimeBeforeNextUse_UnusedSocket";
UMA_HISTOGRAM_CUSTOM_TIMES(metric, idle_time(),
base::TimeDelta::FromMilliseconds(1),
base::TimeDelta::FromMinutes(6), 100);
break;
- case ClientSocketHandle::REUSED_IDLE:
- metric = "Net." + pool_->name() +
+ }
+ case ClientSocketHandle::REUSED_IDLE: {
+ static std::string metric = "Net." + pool_->name() +
"SocketIdleTimeBeforeNextUse_ReusedSocket";
UMA_HISTOGRAM_CUSTOM_TIMES(metric, idle_time(),
base::TimeDelta::FromMilliseconds(1),
base::TimeDelta::FromMinutes(6), 100);
break;
- default:
+ }
+ default: {
NOTREACHED();
break;
+ }
}
}