15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/browser/appcache/appcache_histograms.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace content {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static std::string OriginToCustomHistogramSuffix(const GURL& origin_url) {
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (origin_url.host() == "docs.google.com")
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return ".Docs";
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return std::string();
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheHistograms::CountInitResult(InitResultType init_result) {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION(
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "appcache.InitResult",
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       init_result, NUM_INIT_RESULT_TYPES);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void AppCacheHistograms::CountReinitAttempt(bool repeated_attempt) {
241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  UMA_HISTOGRAM_BOOLEAN("appcache.ReinitAttempt", repeated_attempt);
251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void AppCacheHistograms::CountCorruptionDetected() {
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_HISTOGRAM_BOOLEAN("appcache.CorruptionDetected", true);
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void AppCacheHistograms::CountUpdateJobResult(
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    AppCacheUpdateJob::ResultType result,
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const GURL& origin_url) {
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION(
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)       "appcache.UpdateJobResult",
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)       result, AppCacheUpdateJob::NUM_UPDATE_JOB_RESULT_TYPES);
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const std::string suffix = OriginToCustomHistogramSuffix(origin_url);
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!suffix.empty()) {
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::LinearHistogram::FactoryGet(
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "appcache.UpdateJobResult" + suffix,
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        1,
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        AppCacheUpdateJob::NUM_UPDATE_JOB_RESULT_TYPES,
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        AppCacheUpdateJob::NUM_UPDATE_JOB_RESULT_TYPES + 1,
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        base::HistogramBase::kUmaTargetedHistogramFlag)->Add(result);
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheHistograms::CountCheckResponseResult(
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CheckResponseResultType result) {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION(
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "appcache.CheckResponseResult",
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       result, NUM_CHECK_RESPONSE_RESULT_TYPES);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid AppCacheHistograms::CountResponseRetrieval(
57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    bool success, bool is_main_resource, const GURL& origin_url) {
58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  std::string label;
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (is_main_resource) {
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    label = "appcache.MainResourceResponseRetrieval";
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    UMA_HISTOGRAM_BOOLEAN(label, success);
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else {
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    label = "appcache.SubResourceResponseRetrieval";
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    UMA_HISTOGRAM_BOOLEAN(label, success);
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const std::string suffix = OriginToCustomHistogramSuffix(origin_url);
67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!suffix.empty()) {
68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    base::BooleanHistogram::FactoryGet(
69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        label + suffix,
70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::HistogramBase::kUmaTargetedHistogramFlag)->Add(success);
71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid AppCacheHistograms::LogUpdateFailureStats(
75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      const GURL& origin_url,
76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      int percent_complete,
77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      bool was_stalled,
78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      bool was_off_origin_resource_failure) {
79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const std::string suffix = OriginToCustomHistogramSuffix(origin_url);
80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  std::string label = "appcache.UpdateProgressAtPointOfFaliure";
82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  UMA_HISTOGRAM_PERCENTAGE(label, percent_complete);
83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!suffix.empty()) {
84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    base::LinearHistogram::FactoryGet(
85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        label + suffix,
86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        1, 101, 102,
87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::HistogramBase::kUmaTargetedHistogramFlag)->Add(percent_complete);
88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  label = "appcache.UpdateWasStalledAtPointOfFailure";
91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  UMA_HISTOGRAM_BOOLEAN(label, was_stalled);
92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!suffix.empty()) {
93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    base::BooleanHistogram::FactoryGet(
94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        label + suffix,
95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::HistogramBase::kUmaTargetedHistogramFlag)->Add(was_stalled);
96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  label = "appcache.UpdateWasOffOriginAtPointOfFailure";
99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  UMA_HISTOGRAM_BOOLEAN(label, was_off_origin_resource_failure);
100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!suffix.empty()) {
101effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    base::BooleanHistogram::FactoryGet(
102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        label + suffix,
103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::HistogramBase::kUmaTargetedHistogramFlag)->Add(
104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch            was_off_origin_resource_failure);
105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheHistograms::AddTaskQueueTimeSample(
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::TimeDelta& duration) {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_TIMES("appcache.TaskQueueTime", duration);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheHistograms::AddTaskRunTimeSample(
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::TimeDelta& duration) {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_TIMES("appcache.TaskRunTime", duration);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheHistograms::AddCompletionQueueTimeSample(
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::TimeDelta& duration) {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_TIMES("appcache.CompletionQueueTime", duration);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheHistograms::AddCompletionRunTimeSample(
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::TimeDelta& duration) {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_TIMES("appcache.CompletionRunTime", duration);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AppCacheHistograms::AddNetworkJobStartDelaySample(
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::TimeDelta& duration) {
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UMA_HISTOGRAM_TIMES("appcache.JobStartDelay.Network", duration);
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AppCacheHistograms::AddErrorJobStartDelaySample(
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::TimeDelta& duration) {
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UMA_HISTOGRAM_TIMES("appcache.JobStartDelay.Error", duration);
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AppCacheHistograms::AddAppCacheJobStartDelaySample(
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::TimeDelta& duration) {
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UMA_HISTOGRAM_TIMES("appcache.JobStartDelay.AppCache", duration);
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheHistograms::AddMissingManifestEntrySample() {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_BOOLEAN("appcache.MissingManifestEntry", true);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppCacheHistograms::AddMissingManifestDetectedAtCallsite(
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MissingManifestCallsiteType callsite) {
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION(
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "appcache.MissingManifestDetectedAtCallsite",
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       callsite, NUM_MISSING_MANIFEST_CALLSITE_TYPES);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace content
155