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

Side by Side Diff: net/http/http_cache_transaction.cc

Issue 2009253002: Record cache freshness metric per resource type (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/http/http_cache_transaction.h" 5 #include "net/http/http_cache_transaction.h"
6 6
7 #include "build/build_config.h" // For OS_POSIX 7 #include "build/build_config.h" // For OS_POSIX
8 8
9 #if defined(OS_POSIX) 9 #if defined(OS_POSIX)
10 #include <unistd.h> 10 #include <unistd.h>
(...skipping 2706 matching lines...) Expand 10 before | Expand all | Expand 10 after
2717 void HttpCache::Transaction::RecordHistograms() { 2717 void HttpCache::Transaction::RecordHistograms() {
2718 DCHECK_NE(PATTERN_UNDEFINED, transaction_pattern_); 2718 DCHECK_NE(PATTERN_UNDEFINED, transaction_pattern_);
2719 if (!cache_.get() || !cache_->GetCurrentBackend() || 2719 if (!cache_.get() || !cache_->GetCurrentBackend() ||
2720 cache_->GetCurrentBackend()->GetCacheType() != DISK_CACHE || 2720 cache_->GetCurrentBackend()->GetCacheType() != DISK_CACHE ||
2721 cache_->mode() != NORMAL || request_->method != "GET") { 2721 cache_->mode() != NORMAL || request_->method != "GET") {
2722 return; 2722 return;
2723 } 2723 }
2724 2724
2725 bool validation_request = transaction_pattern_ == PATTERN_ENTRY_VALIDATED || 2725 bool validation_request = transaction_pattern_ == PATTERN_ENTRY_VALIDATED ||
2726 transaction_pattern_ == PATTERN_ENTRY_UPDATED; 2726 transaction_pattern_ == PATTERN_ENTRY_UPDATED;
2727
2728 bool stale_request =
2729 validation_cause_ == VALIDATION_CAUSE_STALE &&
2730 (validation_request ||
2731 transaction_pattern_ == PATTERN_ENTRY_CANT_CONDITIONALIZE);
2732 int64_t freshness_periods_since_last_used = 0;
2733
2734 if (stale_request) {
2735 // For stale entries, record how many freshness periods have elapsed since
2736 // the entry was last used.
2737 DCHECK(!open_entry_last_used_.is_null());
2738 DCHECK(!stale_entry_freshness_.is_zero());
2739 base::TimeDelta time_since_use = base::Time::Now() - open_entry_last_used_;
2740 freshness_periods_since_last_used =
2741 (time_since_use * 1000) / stale_entry_freshness_;
2742
2743 UMA_HISTOGRAM_COUNTS("HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed",
2744 freshness_periods_since_last_used);
2745 }
2746
2727 std::string mime_type; 2747 std::string mime_type;
2728 HttpResponseHeaders* response_headers = GetResponseInfo()->headers.get(); 2748 HttpResponseHeaders* response_headers = GetResponseInfo()->headers.get();
2729 if (response_headers && response_headers->GetMimeType(&mime_type)) { 2749 if (response_headers && response_headers->GetMimeType(&mime_type)) {
2730 // Record the cache pattern by resource type. The type is inferred by 2750 // Record the cache pattern by resource type. The type is inferred by
2731 // response header mime type, which could be incorrect, so this is just an 2751 // response header mime type, which could be incorrect, so this is just an
2732 // estimate. 2752 // estimate.
2733 if (mime_type == "text/html" && (request_->load_flags & LOAD_MAIN_FRAME)) { 2753 if (mime_type == "text/html" && (request_->load_flags & LOAD_MAIN_FRAME)) {
2734 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.MainFrameHTML", 2754 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.MainFrameHTML",
2735 transaction_pattern_, PATTERN_MAX); 2755 transaction_pattern_, PATTERN_MAX);
2736 if (validation_request) { 2756 if (validation_request) {
2737 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.MainFrameHTML", 2757 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.MainFrameHTML",
2738 validation_cause_, VALIDATION_CAUSE_MAX); 2758 validation_cause_, VALIDATION_CAUSE_MAX);
2739 } 2759 }
2760 if (stale_request) {
2761 UMA_HISTOGRAM_COUNTS(
2762 "HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed.MainFrameHTML",
2763 freshness_periods_since_last_used);
2764 }
2740 } else if (mime_type == "text/html") { 2765 } else if (mime_type == "text/html") {
2741 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.NonMainFrameHTML", 2766 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.NonMainFrameHTML",
2742 transaction_pattern_, PATTERN_MAX); 2767 transaction_pattern_, PATTERN_MAX);
2743 if (validation_request) { 2768 if (validation_request) {
2744 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.NonMainFrameHTML", 2769 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.NonMainFrameHTML",
2745 validation_cause_, VALIDATION_CAUSE_MAX); 2770 validation_cause_, VALIDATION_CAUSE_MAX);
2746 } 2771 }
2772 if (stale_request) {
2773 UMA_HISTOGRAM_COUNTS(
2774 "HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed."
2775 "NonMainFrameHTML",
2776 freshness_periods_since_last_used);
2777 }
2747 } else if (mime_type == "text/css") { 2778 } else if (mime_type == "text/css") {
2748 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.CSS", transaction_pattern_, 2779 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.CSS", transaction_pattern_,
2749 PATTERN_MAX); 2780 PATTERN_MAX);
2750 if (validation_request) { 2781 if (validation_request) {
2751 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.CSS", 2782 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.CSS",
2752 validation_cause_, VALIDATION_CAUSE_MAX); 2783 validation_cause_, VALIDATION_CAUSE_MAX);
2753 } 2784 }
2785 if (stale_request) {
2786 UMA_HISTOGRAM_COUNTS(
2787 "HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed.CSS",
2788 freshness_periods_since_last_used);
2789 }
2754 } else if (base::StartsWith(mime_type, "image/", 2790 } else if (base::StartsWith(mime_type, "image/",
2755 base::CompareCase::SENSITIVE)) { 2791 base::CompareCase::SENSITIVE)) {
2756 int64_t content_length = response_headers->GetContentLength(); 2792 int64_t content_length = response_headers->GetContentLength();
2757 if (content_length >= 0 && content_length < 100) { 2793 if (content_length >= 0 && content_length < 100) {
2758 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.TinyImage", 2794 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.TinyImage",
2759 transaction_pattern_, PATTERN_MAX); 2795 transaction_pattern_, PATTERN_MAX);
2760 if (validation_request) { 2796 if (validation_request) {
2761 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.TinyImage", 2797 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.TinyImage",
2762 validation_cause_, VALIDATION_CAUSE_MAX); 2798 validation_cause_, VALIDATION_CAUSE_MAX);
2763 } 2799 }
2800 if (stale_request) {
2801 UMA_HISTOGRAM_COUNTS(
2802 "HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed.TinyImage",
2803 freshness_periods_since_last_used);
2804 }
2764 } else if (content_length >= 100) { 2805 } else if (content_length >= 100) {
2765 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.NonTinyImage", 2806 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.NonTinyImage",
2766 transaction_pattern_, PATTERN_MAX); 2807 transaction_pattern_, PATTERN_MAX);
2767 if (validation_request) { 2808 if (validation_request) {
2768 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.NonTinyImage", 2809 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.NonTinyImage",
2769 validation_cause_, VALIDATION_CAUSE_MAX); 2810 validation_cause_, VALIDATION_CAUSE_MAX);
2770 } 2811 }
2812 if (stale_request) {
2813 UMA_HISTOGRAM_COUNTS(
2814 "HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed.NonTinyImage",
2815 freshness_periods_since_last_used);
2816 }
2771 } 2817 }
2772 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.Image", transaction_pattern_, 2818 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.Image", transaction_pattern_,
2773 PATTERN_MAX); 2819 PATTERN_MAX);
2774 if (validation_request) { 2820 if (validation_request) {
2775 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.Image", 2821 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.Image",
2776 validation_cause_, VALIDATION_CAUSE_MAX); 2822 validation_cause_, VALIDATION_CAUSE_MAX);
2777 } 2823 }
2824 if (stale_request) {
2825 UMA_HISTOGRAM_COUNTS(
2826 "HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed.Image",
2827 freshness_periods_since_last_used);
2828 }
2778 } else if (base::EndsWith(mime_type, "javascript", 2829 } else if (base::EndsWith(mime_type, "javascript",
2779 base::CompareCase::SENSITIVE) || 2830 base::CompareCase::SENSITIVE) ||
2780 base::EndsWith(mime_type, "ecmascript", 2831 base::EndsWith(mime_type, "ecmascript",
2781 base::CompareCase::SENSITIVE)) { 2832 base::CompareCase::SENSITIVE)) {
2782 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.JavaScript", 2833 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.JavaScript",
2783 transaction_pattern_, PATTERN_MAX); 2834 transaction_pattern_, PATTERN_MAX);
2784 if (validation_request) { 2835 if (validation_request) {
2785 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.JavaScript", 2836 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.JavaScript",
2786 validation_cause_, VALIDATION_CAUSE_MAX); 2837 validation_cause_, VALIDATION_CAUSE_MAX);
2787 } 2838 }
2839 if (stale_request) {
2840 UMA_HISTOGRAM_COUNTS(
2841 "HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed.JavaScript",
2842 freshness_periods_since_last_used);
2843 }
2788 } else if (mime_type.find("font") != std::string::npos) { 2844 } else if (mime_type.find("font") != std::string::npos) {
2789 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.Font", transaction_pattern_, 2845 UMA_HISTOGRAM_ENUMERATION("HttpCache.Pattern.Font", transaction_pattern_,
2790 PATTERN_MAX); 2846 PATTERN_MAX);
2791 if (validation_request) { 2847 if (validation_request) {
2792 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.Font", 2848 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause.Font",
2793 validation_cause_, VALIDATION_CAUSE_MAX); 2849 validation_cause_, VALIDATION_CAUSE_MAX);
2794 } 2850 }
2851 if (stale_request) {
2852 UMA_HISTOGRAM_COUNTS(
2853 "HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed.Font",
2854 freshness_periods_since_last_used);
2855 }
2795 } 2856 }
2796 } 2857 }
2797 2858
2798 if ((validation_request ||
2799 transaction_pattern_ == PATTERN_ENTRY_CANT_CONDITIONALIZE) &&
2800 validation_cause_ == VALIDATION_CAUSE_STALE) {
2801 // For stale entries, record how many freshness periods have elapsed since
2802 // the entry was last used.
2803 DCHECK(!open_entry_last_used_.is_null());
2804 DCHECK(!stale_entry_freshness_.is_zero());
2805
2806 base::TimeDelta time_since_use = base::Time::Now() - open_entry_last_used_;
2807 UMA_HISTOGRAM_COUNTS("HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed",
2808 (time_since_use * 1000) / stale_entry_freshness_);
2809 }
2810
2811 UMA_HISTOGRAM_ENUMERATION( 2859 UMA_HISTOGRAM_ENUMERATION(
2812 "HttpCache.Pattern", transaction_pattern_, PATTERN_MAX); 2860 "HttpCache.Pattern", transaction_pattern_, PATTERN_MAX);
2813 2861
2814 if (validation_request) { 2862 if (validation_request) {
2815 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause", validation_cause_, 2863 UMA_HISTOGRAM_ENUMERATION("HttpCache.ValidationCause", validation_cause_,
2816 VALIDATION_CAUSE_MAX); 2864 VALIDATION_CAUSE_MAX);
2817 } 2865 }
2818 2866
2819 if (transaction_pattern_ == PATTERN_ENTRY_CANT_CONDITIONALIZE) { 2867 if (transaction_pattern_ == PATTERN_ENTRY_CANT_CONDITIONALIZE) {
2820 UMA_HISTOGRAM_ENUMERATION("HttpCache.CantConditionalizeCause", 2868 UMA_HISTOGRAM_ENUMERATION("HttpCache.CantConditionalizeCause",
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2889 default: 2937 default:
2890 NOTREACHED(); 2938 NOTREACHED();
2891 } 2939 }
2892 } 2940 }
2893 2941
2894 void HttpCache::Transaction::OnIOComplete(int result) { 2942 void HttpCache::Transaction::OnIOComplete(int result) {
2895 DoLoop(result); 2943 DoLoop(result);
2896 } 2944 }
2897 2945
2898 } // namespace net 2946 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698