| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |