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

Side by Side Diff: chrome/browser/android/data_usage/data_use_tab_model.cc

Issue 1444133002: Add UMA histograms for data usage tab model (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years, 1 month 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "chrome/browser/android/data_usage/data_use_tab_model.h" 5 #include "chrome/browser/android/data_usage/data_use_tab_model.h"
6 6
7 #include "base/metrics/histogram_macros.h"
7 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
8 #include "base/time/time.h" 9 #include "base/time/time.h"
9 #include "chrome/browser/android/data_usage/external_data_use_observer.h" 10 #include "chrome/browser/android/data_usage/external_data_use_observer.h"
10 #include "chrome/browser/android/data_usage/tab_data_use_entry.h" 11 #include "chrome/browser/android/data_usage/tab_data_use_entry.h"
11 #include "components/variations/variations_associated_data.h" 12 #include "components/variations/variations_associated_data.h"
12 13
13 namespace { 14 namespace {
14 15
15 // Indicates the default maximum number of tabs to maintain session information 16 // Indicates the default maximum number of tabs to maintain session information
16 // about. May be overridden by the field trial. 17 // about. May be overridden by the field trial.
17 const size_t kDefaultMaxTabEntries = 200; 18 const size_t kDefaultMaxTabEntries = 200;
18 19
20 const char kUMAExpiredInactiveTabEntryRemovalDurationSecondsHistogram[] =
21 "DataUse.TabModel.ExpiredInactiveTabEntryRemovalDuration";
22 const char kUMAExpiredActiveTabEntryRemovalDurationHoursHistogram[] =
23 "DataUse.TabModel.ExpiredActiveTabEntryRemovalDuration";
24 const char kUMAUnexpiredTabEntryRemovalDurationMinutesHistogram[] =
25 "DataUse.TabModel.UnexpiredTabEntryRemovalDuration";
26
19 // Returns true if |tab_id| is a valid tab ID. 27 // Returns true if |tab_id| is a valid tab ID.
20 bool IsValidTabID(int32_t tab_id) { 28 bool IsValidTabID(int32_t tab_id) {
21 return tab_id >= 0; 29 return tab_id >= 0;
22 } 30 }
23 31
24 // Returns various parameters from the values specified in the field trial. 32 // Returns various parameters from the values specified in the field trial.
25 size_t GetMaxTabEntries() { 33 size_t GetMaxTabEntries() {
26 size_t max_tab_entries = -1; 34 size_t max_tab_entries = -1;
27 std::string variation_value = variations::GetVariationParamValue( 35 std::string variation_value = variations::GetVariationParamValue(
28 chrome::android::ExternalDataUseObserver:: 36 chrome::android::ExternalDataUseObserver::
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 } 152 }
145 153
146 void DataUseTabModel::AddObserver(TabDataUseObserver* observer) { 154 void DataUseTabModel::AddObserver(TabDataUseObserver* observer) {
147 observer_list_->AddObserver(observer); 155 observer_list_->AddObserver(observer);
148 } 156 }
149 157
150 void DataUseTabModel::RemoveObserver(TabDataUseObserver* observer) { 158 void DataUseTabModel::RemoveObserver(TabDataUseObserver* observer) {
151 observer_list_->RemoveObserver(observer); 159 observer_list_->RemoveObserver(observer);
152 } 160 }
153 161
162 base::TimeTicks DataUseTabModel::Now() const {
163 return base::TimeTicks::Now();
164 }
165
154 void DataUseTabModel::NotifyObserversOfTrackingStarting(int32_t tab_id) { 166 void DataUseTabModel::NotifyObserversOfTrackingStarting(int32_t tab_id) {
155 observer_list_->Notify(FROM_HERE, &TabDataUseObserver::NotifyTrackingStarting, 167 observer_list_->Notify(FROM_HERE, &TabDataUseObserver::NotifyTrackingStarting,
156 tab_id); 168 tab_id);
157 } 169 }
158 170
159 void DataUseTabModel::NotifyObserversOfTrackingEnding(int32_t tab_id) { 171 void DataUseTabModel::NotifyObserversOfTrackingEnding(int32_t tab_id) {
160 observer_list_->Notify(FROM_HERE, &TabDataUseObserver::NotifyTrackingEnding, 172 observer_list_->Notify(FROM_HERE, &TabDataUseObserver::NotifyTrackingEnding,
161 tab_id); 173 tab_id);
162 } 174 }
163 175
(...skipping 23 matching lines...) Expand all
187 if (tab_entry_iterator != active_tabs_.end() && 199 if (tab_entry_iterator != active_tabs_.end() &&
188 tab_entry_iterator->second.EndTracking()) { 200 tab_entry_iterator->second.EndTracking()) {
189 NotifyObserversOfTrackingEnding(tab_id); 201 NotifyObserversOfTrackingEnding(tab_id);
190 } 202 }
191 } 203 }
192 204
193 void DataUseTabModel::CompactTabEntries() { 205 void DataUseTabModel::CompactTabEntries() {
194 // Remove expired tab entries. 206 // Remove expired tab entries.
195 for (TabEntryMap::iterator tab_entry_iterator = active_tabs_.begin(); 207 for (TabEntryMap::iterator tab_entry_iterator = active_tabs_.begin();
196 tab_entry_iterator != active_tabs_.end();) { 208 tab_entry_iterator != active_tabs_.end();) {
197 if (tab_entry_iterator->second.IsExpired()) 209 const auto& tab_entry = tab_entry_iterator->second;
210 if (tab_entry.IsExpired()) {
211 // Track the lifetime of expired tab entry.
212 const base::TimeDelta removal_time =
213 Now() - tab_entry.GetLatestStartOrEndTime();
214 if (!tab_entry.IsTrackingDataUse()) {
215 UMA_HISTOGRAM_CUSTOM_TIMES(
216 kUMAExpiredInactiveTabEntryRemovalDurationSecondsHistogram,
217 removal_time, base::TimeDelta::FromSeconds(1),
218 base::TimeDelta::FromHours(1), 50);
219 } else {
220 UMA_HISTOGRAM_CUSTOM_TIMES(
221 kUMAExpiredActiveTabEntryRemovalDurationHoursHistogram,
222 removal_time, base::TimeDelta::FromHours(1),
223 base::TimeDelta::FromDays(5), 50);
224 }
198 active_tabs_.erase(tab_entry_iterator++); 225 active_tabs_.erase(tab_entry_iterator++);
199 else 226 } else {
200 ++tab_entry_iterator; 227 ++tab_entry_iterator;
228 }
201 } 229 }
202 230
203 if (active_tabs_.size() <= max_tab_entries_) 231 if (active_tabs_.size() <= max_tab_entries_)
204 return; 232 return;
205 233
206 // Remove oldest unexpired tab entries. 234 // Remove oldest unexpired tab entries.
207 while (active_tabs_.size() > max_tab_entries_) { 235 while (active_tabs_.size() > max_tab_entries_) {
208 // Find oldest tab entry. 236 // Find oldest tab entry.
209 TabEntryMap::iterator oldest_tab_entry_iterator = active_tabs_.begin(); 237 TabEntryMap::iterator oldest_tab_entry_iterator = active_tabs_.begin();
210 for (TabEntryMap::iterator tab_entry_iterator = active_tabs_.begin(); 238 for (TabEntryMap::iterator tab_entry_iterator = active_tabs_.begin();
211 tab_entry_iterator != active_tabs_.end(); ++tab_entry_iterator) { 239 tab_entry_iterator != active_tabs_.end(); ++tab_entry_iterator) {
212 if (oldest_tab_entry_iterator->second.GetLatestStartOrEndTime() > 240 if (oldest_tab_entry_iterator->second.GetLatestStartOrEndTime() >
213 tab_entry_iterator->second.GetLatestStartOrEndTime()) { 241 tab_entry_iterator->second.GetLatestStartOrEndTime()) {
214 oldest_tab_entry_iterator = tab_entry_iterator; 242 oldest_tab_entry_iterator = tab_entry_iterator;
215 } 243 }
216 } 244 }
217 DCHECK(oldest_tab_entry_iterator != active_tabs_.end()); 245 DCHECK(oldest_tab_entry_iterator != active_tabs_.end());
246 UMA_HISTOGRAM_CUSTOM_TIMES(
247 kUMAUnexpiredTabEntryRemovalDurationMinutesHistogram,
248 Now() - oldest_tab_entry_iterator->second.GetLatestStartOrEndTime(),
249 base::TimeDelta::FromMinutes(1), base::TimeDelta::FromHours(1), 50);
218 active_tabs_.erase(oldest_tab_entry_iterator); 250 active_tabs_.erase(oldest_tab_entry_iterator);
219 } 251 }
220 } 252 }
221 253
222 } // namespace android 254 } // namespace android
223 255
224 } // namespace chrome 256 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698