diff options
author | brandonsalmon@chromium.org <brandonsalmon@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-11 07:45:07 +0000 |
---|---|---|
committer | brandonsalmon@chromium.org <brandonsalmon@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-11 07:45:07 +0000 |
commit | 501984d2ba4bf528ad7980dfc2ce31a8b100e49e (patch) | |
tree | acb2bd718d799407a8aa191dce169ca3b031dd04 /net/http | |
parent | 68aa2ca150ab1ed4a9cadccf22702d4d8023cc58 (diff) | |
download | chromium_src-501984d2ba4bf528ad7980dfc2ce31a8b100e49e.zip chromium_src-501984d2ba4bf528ad7980dfc2ce31a8b100e49e.tar.gz chromium_src-501984d2ba4bf528ad7980dfc2ce31a8b100e49e.tar.bz2 |
Adding cache hit/miss histograms to DiskBasedCertCache. There are separate
histograms for the in-memory MRU cache and the disk cache.
This cl is closely related to https://codereview.chromium.org/356953003/, which implements similar histograms in the http_cache.
and a follow up to https://codereview.chromium.org/361513003/
BUG=
Review URL: https://codereview.chromium.org/378063002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@282584 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http')
-rw-r--r-- | net/http/disk_based_cert_cache.cc | 44 | ||||
-rw-r--r-- | net/http/disk_based_cert_cache.h | 6 | ||||
-rw-r--r-- | net/http/disk_based_cert_cache_unittest.cc | 2 |
3 files changed, 40 insertions, 12 deletions
diff --git a/net/http/disk_based_cert_cache.cc b/net/http/disk_based_cert_cache.cc index 132648c..c1f583d 100644 --- a/net/http/disk_based_cert_cache.cc +++ b/net/http/disk_based_cert_cache.cc @@ -1,4 +1,4 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. +// Copyright (c) 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/callback_helpers.h" #include "base/memory/ref_counted.h" +#include "base/metrics/histogram.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" #include "net/base/io_buffer.h" @@ -24,7 +25,8 @@ const size_t kMemoryCacheMaxSize = 30; // Used to obtain a unique cache key for a certificate in the form of // "cert:<hash>". -std::string GetCacheKeyToCert(const X509Certificate::OSCertHandle cert_handle) { +std::string GetCacheKeyForCert( + const X509Certificate::OSCertHandle cert_handle) { SHA1HashValue fingerprint = X509Certificate::CalculateFingerprint(cert_handle); @@ -32,6 +34,20 @@ std::string GetCacheKeyToCert(const X509Certificate::OSCertHandle cert_handle) { base::HexEncode(fingerprint.data, arraysize(fingerprint.data)); } +enum CacheResult { + MEMORY_CACHE_HIT = 0, + DISK_CACHE_HIT, + DISK_CACHE_ENTRY_CORRUPT, + DISK_CACHE_ERROR, + CACHE_MISS, + CACHE_RESULT_MAX +}; + +void RecordCacheResult(CacheResult result) { + UMA_HISTOGRAM_ENUMERATION( + "DiskBasedCertCache.CertIoCacheResult", result, CACHE_RESULT_MAX); +} + } // namespace // WriteWorkers represent pending Set jobs in the DiskBasedCertCache. Each @@ -123,7 +139,8 @@ DiskBasedCertCache::WriteWorker::WriteWorker( } DiskBasedCertCache::WriteWorker::~WriteWorker() { - X509Certificate::FreeOSCertHandle(cert_handle_); + if (cert_handle_) + X509Certificate::FreeOSCertHandle(cert_handle_); if (entry_) entry_->Close(); } @@ -428,8 +445,12 @@ int DiskBasedCertCache::ReadWorker::DoOpen() { } int DiskBasedCertCache::ReadWorker::DoOpenComplete(int rv) { - if (rv < 0) + if (rv < 0) { + // Errors other than ERR_CACHE_MISS are not recorded as either a hit + // or a miss. + RecordCacheResult(rv == ERR_CACHE_MISS ? CACHE_MISS : DISK_CACHE_ERROR); return rv; + } state_ = STATE_READ; return OK; @@ -444,14 +465,20 @@ int DiskBasedCertCache::ReadWorker::DoRead() { } int DiskBasedCertCache::ReadWorker::DoReadComplete(int rv) { - if (rv < io_buf_len_) + // The cache should return the entire buffer length. If it does not, + // it is probably indicative of an issue other than corruption. + if (rv < io_buf_len_) { + RecordCacheResult(DISK_CACHE_ERROR); return ERR_FAILED; - + } cert_handle_ = X509Certificate::CreateOSCertHandleFromBytes(buffer_->data(), io_buf_len_); - if (!cert_handle_) + if (!cert_handle_) { + RecordCacheResult(DISK_CACHE_ENTRY_CORRUPT); return ERR_FAILED; + } + RecordCacheResult(DISK_CACHE_HIT); return OK; } @@ -506,6 +533,7 @@ void DiskBasedCertCache::Get(const std::string& key, const GetCallback& cb) { // list in the MRU cache. MRUCertCache::iterator mru_it = mru_cert_cache_.Get(key); if (mru_it != mru_cert_cache_.end()) { + RecordCacheResult(MEMORY_CACHE_HIT); ++mem_cache_hits_; cb.Run(mru_it->second); return; @@ -533,7 +561,7 @@ void DiskBasedCertCache::Set(const X509Certificate::OSCertHandle cert_handle, const SetCallback& cb) { DCHECK(!cb.is_null()); DCHECK(cert_handle); - std::string key = GetCacheKeyToCert(cert_handle); + std::string key = GetCacheKeyForCert(cert_handle); WriteWorkerMap::iterator it = write_worker_map_.find(key); diff --git a/net/http/disk_based_cert_cache.h b/net/http/disk_based_cert_cache.h index 0c9bca7..36caaa1 100644 --- a/net/http/disk_based_cert_cache.h +++ b/net/http/disk_based_cert_cache.h @@ -1,4 +1,4 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. +// Copyright (c) 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -47,11 +47,11 @@ class NET_EXPORT_PRIVATE DiskBasedCertCache { void Set(const X509Certificate::OSCertHandle cert_handle, const SetCallback& cb); - // Returns the number of in-memory MRU cache hits that have occured + // Returns the number of in-memory MRU cache hits that have occurred // on Set and Get operations. Intended for test purposes only. size_t mem_cache_hits_for_testing() const { return mem_cache_hits_; } - // Returns the number of in-memory MRU cache misses that have occured + // Returns the number of in-memory MRU cache misses that have occurred // on Set and Get operations. Intended for test purposes only. size_t mem_cache_misses_for_testing() const { return mem_cache_misses_; } diff --git a/net/http/disk_based_cert_cache_unittest.cc b/net/http/disk_based_cert_cache_unittest.cc index 435b875..273b7d0 100644 --- a/net/http/disk_based_cert_cache_unittest.cc +++ b/net/http/disk_based_cert_cache_unittest.cc @@ -1,4 +1,4 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. +// Copyright (c) 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. |