From 5152e48e43339dbe3013b647c00bfff4867eb087 Mon Sep 17 00:00:00 2001 From: jkarlin Date: Fri, 25 Mar 2016 11:36:19 -0700 Subject: Break down HTTPCache.Result metric by resource type We'd like to know how often different resource types are cached and revalidated, so this CL adds cache pattern metrics for common resource types. Note that the resource type is a guess based on the URL's path. There will be many missed resources but I anticipate the fraction of false positives will be low. BUG=596569 Review URL: https://codereview.chromium.org/1824713002 Cr-Commit-Position: refs/heads/master@{#383319} --- net/http/http_cache_transaction.cc | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'net') diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc index 38da8f3..178df98 100644 --- a/net/http/http_cache_transaction.cc +++ b/net/http/http_cache_transaction.cc @@ -2704,6 +2704,39 @@ void HttpCache::Transaction::RecordHistograms() { cache_->mode() != NORMAL || request_->method != "GET") { return; } + + std::string mime_type; + if (GetResponseInfo()->headers && + GetResponseInfo()->headers->GetMimeType(&mime_type)) { + // Record the cache pattern by resource type. The type is inferred by + // response header mime type, which could be incorrect, so this is just an + // estimate. + if (mime_type == "text/html" && (request_->load_flags & LOAD_MAIN_FRAME)) { + UMA_HISTOGRAM_ENUMERATION(std::string("HttpCache.Pattern.MainFrameHTML"), + transaction_pattern_, PATTERN_MAX); + } else if (mime_type == "text/html") { + UMA_HISTOGRAM_ENUMERATION( + std::string("HttpCache.Pattern.NonMainFrameHTML"), + transaction_pattern_, PATTERN_MAX); + } else if (mime_type == "text/css") { + UMA_HISTOGRAM_ENUMERATION(std::string("HttpCache.Pattern.CSS"), + transaction_pattern_, PATTERN_MAX); + } else if (base::StartsWith(mime_type, "image/", + base::CompareCase::SENSITIVE)) { + UMA_HISTOGRAM_ENUMERATION(std::string("HttpCache.Pattern.Image"), + transaction_pattern_, PATTERN_MAX); + } else if (base::EndsWith(mime_type, "javascript", + base::CompareCase::SENSITIVE) || + base::EndsWith(mime_type, "ecmascript", + base::CompareCase::SENSITIVE)) { + UMA_HISTOGRAM_ENUMERATION(std::string("HttpCache.Pattern.JavaScript"), + transaction_pattern_, PATTERN_MAX); + } else if (mime_type.find("font") != std::string::npos) { + UMA_HISTOGRAM_ENUMERATION(std::string("HttpCache.Pattern.Font"), + transaction_pattern_, PATTERN_MAX); + } + } + UMA_HISTOGRAM_ENUMERATION( "HttpCache.Pattern", transaction_pattern_, PATTERN_MAX); if (transaction_pattern_ == PATTERN_NOT_COVERED) -- cgit v1.1