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