Chromium Code Reviews| Index: chrome/browser/android/data_usage/data_use_tab_model.cc |
| diff --git a/chrome/browser/android/data_usage/data_use_tab_model.cc b/chrome/browser/android/data_usage/data_use_tab_model.cc |
| index c4d8e36e39e2716ec47af99ce4fe3453efac5227..1a6e7245e13afa3a4d324b0fa3667a5e24add630 100644 |
| --- a/chrome/browser/android/data_usage/data_use_tab_model.cc |
| +++ b/chrome/browser/android/data_usage/data_use_tab_model.cc |
| @@ -4,6 +4,7 @@ |
| #include "chrome/browser/android/data_usage/data_use_tab_model.h" |
| +#include "base/metrics/histogram_macros.h" |
| #include "base/time/time.h" |
| #include "chrome/browser/android/data_usage/external_data_use_observer.h" |
| #include "chrome/browser/android/data_usage/tab_data_use_entry.h" |
| @@ -19,6 +20,13 @@ bool IsValidTabID(int32_t tab_id) { |
| return tab_id >= 0; |
| } |
| +const char kUMAExpiredInactiveTabEntryRemovaltimeSecondsHistogram[] = |
|
tbansal1
2015/11/16 17:17:38
May be remove Seconds from the variable names (if
Raj
2015/11/16 20:09:36
Not sure. Each UMA needs different precision.
|
| + "DataUse.TabModel.ExpiredInactiveTabEntryRemovaltime"; |
| +const char kUMAExpiredActiveTabEntryRemovaltimeHoursHistogram[] = |
| + "DataUse.TabModel.ExpiredActiveTabEntryRemovaltime"; |
| +const char kUMAUnexpiredTabEntryRemovaltimeMinutesHistogram[] = |
| + "DataUse.TabModel.UnexpiredTabEntryLifetime"; |
| + |
| } // namespace |
| namespace chrome { |
| @@ -40,6 +48,10 @@ DataUseTabModel::~DataUseTabModel() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| } |
| +base::TimeTicks DataUseTabModel::Now() const { |
|
tbansal1
2015/11/16 17:17:38
Follow the same order as in .h file. Declare befor
Raj
2015/11/16 20:09:36
Done.
|
| + return base::TimeTicks::Now(); |
| +} |
| + |
| base::WeakPtr<DataUseTabModel> DataUseTabModel::GetWeakPtr() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| return weak_factory_.GetWeakPtr(); |
| @@ -168,10 +180,23 @@ void DataUseTabModel::CompactTabEntries() { |
| // Remove expired tab entries. |
| for (TabEntryMap::iterator tab_entry_iterator = active_tabs_.begin(); |
| tab_entry_iterator != active_tabs_.end();) { |
| - if (tab_entry_iterator->second.IsExpired()) |
| - active_tabs_.erase(tab_entry_iterator++); |
| - else |
| - ++tab_entry_iterator; |
| + const auto& tab_entry = tab_entry_iterator->second; |
| + if (tab_entry.IsExpired()) { |
| + // Track the lifetime of expired tab entry. |
| + const base::TimeDelta removal_time = |
| + Now() - tab_entry.GetLatestStartOrEndTime(); |
| + if (!tab_entry.IsTrackingDataUse()) { |
| + UMA_HISTOGRAM_COUNTS_1000( |
|
tbansal1
2015/11/16 17:17:38
Why not UMA_HISTOGRAM_TIMES, or its sibling UMA_HI
Raj
2015/11/16 20:09:36
Tracking expired inactive tab entry removal times
tbansal1
2015/11/16 21:09:13
UMA_HISTOGRAM_CUSTOM_TIMES?
Raj
2015/11/17 07:04:03
Done.
|
| + kUMAExpiredInactiveTabEntryRemovaltimeSecondsHistogram, |
| + base::TimeDelta(removal_time).InSeconds()); |
| + } else { |
| + UMA_HISTOGRAM_CUSTOM_COUNTS( |
|
tbansal1
2015/11/16 17:17:38
Why not UMA_HISTOGRAM_TIMES?
Raj
2015/11/16 20:09:36
Tracking expired active tab entry removal times in
|
| + kUMAExpiredActiveTabEntryRemovaltimeHoursHistogram, |
| + base::TimeDelta(removal_time).InHours(), 1, 120, 50); |
| + } |
| + active_tabs_.erase(tab_entry_iterator); |
|
tbansal1
2015/11/16 17:17:38
Is this correct? Documentation for erase() says th
Raj
2015/11/16 20:09:36
Done.
|
| + } |
| + ++tab_entry_iterator; |
| } |
| if (active_tabs_.size() <= kMaxTabEntries) |
| @@ -189,6 +214,11 @@ void DataUseTabModel::CompactTabEntries() { |
| } |
| } |
| DCHECK(oldest_tab_entry_iterator != active_tabs_.end()); |
| + UMA_HISTOGRAM_COUNTS_1000( |
|
tbansal1
2015/11/16 17:17:38
Why not UMA_HISTOGRAM_TIMES?
Raj
2015/11/16 20:09:36
Tracking unexpired tab entry removal times in the
|
| + kUMAUnexpiredTabEntryRemovaltimeMinutesHistogram, |
| + base::TimeDelta( |
| + Now() - oldest_tab_entry_iterator->second.GetLatestStartOrEndTime()) |
| + .InMinutes()); |
| active_tabs_.erase(oldest_tab_entry_iterator); |
| } |
| } |