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

Side by Side Diff: components/offline_pages/offline_page_model_impl.cc

Issue 2314273003: [Offline Pages] Adds duplicate detection metrics. (Closed)
Patch Set: Fix uninitialized variable Created 4 years, 3 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "components/offline_pages/offline_page_model_impl.h" 5 #include "components/offline_pages/offline_page_model_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 // Note: The factory creates and owns the histogram. 143 // Note: The factory creates and owns the histogram.
144 base::HistogramBase* histogram = base::LinearHistogram::FactoryGet( 144 base::HistogramBase* histogram = base::LinearHistogram::FactoryGet(
145 AddHistogramSuffix(client_id, "OfflinePages.SavePageResult"), 145 AddHistogramSuffix(client_id, "OfflinePages.SavePageResult"),
146 1, 146 1,
147 static_cast<int>(SavePageResult::RESULT_COUNT), 147 static_cast<int>(SavePageResult::RESULT_COUNT),
148 static_cast<int>(SavePageResult::RESULT_COUNT) + 1, 148 static_cast<int>(SavePageResult::RESULT_COUNT) + 1,
149 base::HistogramBase::kUmaTargetedHistogramFlag); 149 base::HistogramBase::kUmaTargetedHistogramFlag);
150 histogram->Add(static_cast<int>(result)); 150 histogram->Add(static_cast<int>(result));
151 } 151 }
152 152
153 void ReportPageHistogramAfterSave(const OfflinePageItem& offline_page) { 153 // Goes through the list of offline pages, compiling the following two metrics:
154 // - a count of the pages with the same URL
155 // - The difference between the |created_before| time and the creation time of
156 // the page with the closest creation time before |created_before|.
157 // Returns true if there was a page that was saved before |created_before| with
158 // a matching URL.
159 bool GetMatchingURLCountAndMostRecentCreationTime(
160 const std::map<int64_t, OfflinePageItem>& offline_pages,
161 std::string name_space,
162 const GURL& url,
163 base::Time created_before,
164 int* matching_url_count,
165 base::TimeDelta* most_recent_creation_time) {
166 int count = 0;
167
168 // Create a time that is very old, so that any valid time will be newer than
169 // it.
170 base::Time latest_time;
171 bool matching_page = false;
172
173 for (auto& id_page_pair : offline_pages) {
174 if (id_page_pair.second.client_id.name_space == name_space &&
175 url == id_page_pair.second.url) {
176 count++;
177 base::Time page_creation_time = id_page_pair.second.creation_time;
178 if (page_creation_time < created_before &&
179 page_creation_time > latest_time) {
180 latest_time = page_creation_time;
181 matching_page = true;
182 }
183 }
184 }
185
186 if (matching_url_count != nullptr)
187 *matching_url_count = count;
188 if (most_recent_creation_time != nullptr && latest_time != base::Time())
189 *most_recent_creation_time = created_before - latest_time;
190
191 return matching_page;
192 }
193
194 void ReportPageHistogramAfterSave(
195 const std::map<int64_t, OfflinePageItem>& offline_pages,
196 const OfflinePageItem& offline_page) {
154 // The histogram below is an expansion of the UMA_HISTOGRAM_TIMES 197 // The histogram below is an expansion of the UMA_HISTOGRAM_TIMES
155 // macro adapted to allow for a dynamically suffixed histogram name. 198 // macro adapted to allow for a dynamically suffixed histogram name.
156 // Note: The factory creates and owns the histogram. 199 // Note: The factory creates and owns the histogram.
157 base::HistogramBase* histogram = base::Histogram::FactoryTimeGet( 200 base::HistogramBase* histogram = base::Histogram::FactoryTimeGet(
158 AddHistogramSuffix(offline_page.client_id, "OfflinePages.SavePageTime"), 201 AddHistogramSuffix(offline_page.client_id, "OfflinePages.SavePageTime"),
159 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(10), 202 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(10),
160 50, base::HistogramBase::kUmaTargetedHistogramFlag); 203 50, base::HistogramBase::kUmaTargetedHistogramFlag);
161 histogram->AddTime(base::Time::Now() - offline_page.creation_time); 204 histogram->AddTime(base::Time::Now() - offline_page.creation_time);
162 205
163 // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS 206 // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS
164 // macro adapted to allow for a dynamically suffixed histogram name. 207 // macro adapted to allow for a dynamically suffixed histogram name.
165 // Note: The factory creates and owns the histogram. 208 // Note: The factory creates and owns the histogram.
166 // Reported as Kb between 1Kb and 10Mb. 209 // Reported as Kb between 1Kb and 10Mb.
167 histogram = base::Histogram::FactoryGet( 210 histogram = base::Histogram::FactoryGet(
168 AddHistogramSuffix(offline_page.client_id, "OfflinePages.PageSize"), 211 AddHistogramSuffix(offline_page.client_id, "OfflinePages.PageSize"),
169 1, 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag); 212 1, 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag);
170 histogram->Add(offline_page.file_size / 1024); 213 histogram->Add(offline_page.file_size / 1024);
214
215 if (offline_page.client_id.name_space == kDownloadNamespace) {
216 int matching_url_count;
217 base::TimeDelta time_since_most_recent_duplicate;
218 if (GetMatchingURLCountAndMostRecentCreationTime(
219 offline_pages, offline_page.client_id.name_space, offline_page.url,
220 offline_page.creation_time, &matching_url_count,
221 &time_since_most_recent_duplicate)) {
222 UMA_HISTOGRAM_CUSTOM_TIMES(
Mark P 2016/09/09 18:41:05 Do you really care about millisecond accuracy? You
dewittj 2016/09/12 18:22:50 I wanted reasonable resolution within a few minute
223 "OfflinePages.DownloadSavedPageTimeSinceDuplicateSaved",
224 time_since_most_recent_duplicate,
225 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromDays(7),
226 200);
227 }
228 UMA_HISTOGRAM_COUNTS_100("OfflinePages.DownloadSavedPageDuplicateCount",
Mark P 2016/09/09 18:41:04 Do you really think that users will have up to a 1
dewittj 2016/09/12 18:22:50 Done.
229 matching_url_count);
230 }
171 } 231 }
172 232
173 void ReportPageHistogramsAfterDelete( 233 void ReportPageHistogramsAfterDelete(
174 const std::map<int64_t, OfflinePageItem>& offline_pages, 234 const std::map<int64_t, OfflinePageItem>& offline_pages,
175 const std::vector<int64_t>& deleted_offline_ids) { 235 const std::vector<int64_t>& deleted_offline_ids) {
176 const int max_minutes = base::TimeDelta::FromDays(365).InMinutes(); 236 const int max_minutes = base::TimeDelta::FromDays(365).InMinutes();
177 base::Time now = base::Time::Now(); 237 base::Time now = base::Time::Now();
178 int64_t total_size = 0; 238 int64_t total_size = 0;
179 for (int64_t offline_id : deleted_offline_ids) { 239 for (int64_t offline_id : deleted_offline_ids) {
180 auto iter = offline_pages.find(offline_id); 240 auto iter = offline_pages.find(offline_id);
181 if (iter == offline_pages.end()) 241 if (iter == offline_pages.end())
182 continue; 242 continue;
243
183 total_size += iter->second.file_size; 244 total_size += iter->second.file_size;
184 ClientId client_id = iter->second.client_id; 245 ClientId client_id = iter->second.client_id;
185 246
247 if (client_id.name_space == kDownloadNamespace) {
248 int remaining_pages_with_url;
249 GetMatchingURLCountAndMostRecentCreationTime(
250 offline_pages, iter->second.client_id.name_space, iter->second.url,
251 base::Time::Max(), &remaining_pages_with_url, nullptr);
252 UMA_HISTOGRAM_COUNTS_100("OfflinePages.DownloadDeletedPageDuplicateCount",
253 remaining_pages_with_url);
254 }
255
186 // The histograms below are an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS 256 // The histograms below are an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS
187 // macro adapted to allow for a dynamically suffixed histogram name. 257 // macro adapted to allow for a dynamically suffixed histogram name.
188 // Note: The factory creates and owns the histogram. 258 // Note: The factory creates and owns the histogram.
189 base::HistogramBase* histogram = base::Histogram::FactoryGet( 259 base::HistogramBase* histogram = base::Histogram::FactoryGet(
190 AddHistogramSuffix(client_id, "OfflinePages.PageLifetime"), 260 AddHistogramSuffix(client_id, "OfflinePages.PageLifetime"),
191 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag); 261 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag);
192 histogram->Add((now - iter->second.creation_time).InMinutes()); 262 histogram->Add((now - iter->second.creation_time).InMinutes());
193 263
194 histogram = base::Histogram::FactoryGet( 264 histogram = base::Histogram::FactoryGet(
195 AddHistogramSuffix( 265 AddHistogramSuffix(
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 799
730 void OfflinePageModelImpl::OnAddOfflinePageDone( 800 void OfflinePageModelImpl::OnAddOfflinePageDone(
731 OfflinePageArchiver* archiver, 801 OfflinePageArchiver* archiver,
732 const SavePageCallback& callback, 802 const SavePageCallback& callback,
733 const OfflinePageItem& offline_page, 803 const OfflinePageItem& offline_page,
734 bool success) { 804 bool success) {
735 SavePageResult result; 805 SavePageResult result;
736 if (success) { 806 if (success) {
737 offline_pages_[offline_page.offline_id] = offline_page; 807 offline_pages_[offline_page.offline_id] = offline_page;
738 result = SavePageResult::SUCCESS; 808 result = SavePageResult::SUCCESS;
739 ReportPageHistogramAfterSave(offline_page); 809 ReportPageHistogramAfterSave(offline_pages_, offline_page);
740 offline_event_logger_.RecordPageSaved( 810 offline_event_logger_.RecordPageSaved(
741 offline_page.client_id.name_space, offline_page.url.spec(), 811 offline_page.client_id.name_space, offline_page.url.spec(),
742 std::to_string(offline_page.offline_id)); 812 std::to_string(offline_page.offline_id));
743 } else { 813 } else {
744 result = SavePageResult::STORE_FAILURE; 814 result = SavePageResult::STORE_FAILURE;
745 } 815 }
746 InformSavePageDone(callback, result, offline_page.client_id, 816 InformSavePageDone(callback, result, offline_page.client_id,
747 offline_page.offline_id); 817 offline_page.offline_id);
748 if (result == SavePageResult::SUCCESS) { 818 if (result == SavePageResult::SUCCESS) {
749 DeleteExistingPagesWithSameURL(offline_page); 819 DeleteExistingPagesWithSameURL(offline_page);
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1070 void OfflinePageModelImpl::RunWhenLoaded(const base::Closure& task) { 1140 void OfflinePageModelImpl::RunWhenLoaded(const base::Closure& task) {
1071 if (!is_loaded_) { 1141 if (!is_loaded_) {
1072 delayed_tasks_.push_back(task); 1142 delayed_tasks_.push_back(task);
1073 return; 1143 return;
1074 } 1144 }
1075 1145
1076 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task); 1146 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task);
1077 } 1147 }
1078 1148
1079 } // namespace offline_pages 1149 } // namespace offline_pages
OLDNEW
« no previous file with comments | « no previous file | components/offline_pages/offline_page_model_impl_unittest.cc » ('j') | tools/metrics/histograms/histograms.xml » ('J')

Powered by Google App Engine
This is Rietveld 408576698