diff options
author | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-07 19:19:43 +0000 |
---|---|---|
committer | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-07 19:19:43 +0000 |
commit | 668fc1063e8cf948924825ff90268587d407c59c (patch) | |
tree | c3d64124a4a1d3e9f4a63473517dec0cb83e880d /net/socket/client_socket_handle.cc | |
parent | 83d86254647aea9dc212c4835b1d8a2104d92dba (diff) | |
download | chromium_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.cc | 24 |
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; + } } } |