Chromium Code Reviews| Index: chrome/browser/history/history_database.cc |
| =================================================================== |
| --- chrome/browser/history/history_database.cc (revision 178554) |
| +++ chrome/browser/history/history_database.cc (working copy) |
| @@ -13,6 +13,7 @@ |
| #include "base/metrics/histogram.h" |
| #include "base/rand_util.h" |
| #include "base/string_util.h" |
| +#include "base/time.h" |
| #include "sql/transaction.h" |
| #if defined(OS_MACOSX) |
| @@ -39,6 +40,7 @@ |
| if (base::RandInt(1, 100) != 50) |
| return; // Only do this computation sometimes since it can be expensive. |
| + base::TimeTicks start_time = base::TimeTicks::Now(); |
| int64 file_size = 0; |
| if (!file_util::GetFileSize(history_name, &file_size)) |
| return; |
| @@ -55,6 +57,54 @@ |
| if (!visit_count.Step()) |
| return; |
| UMA_HISTOGRAM_COUNTS("History.VisitTableCount", visit_count.ColumnInt(0)); |
| + |
| + base::Time one_week_ago = base::Time::Now() - base::TimeDelta::FromDays(7); |
| + sql::Statement weekly_visit_sql(db.GetUniqueStatement( |
| + "SELECT count(*) FROM visits WHERE visit_time > ?")); |
| + weekly_visit_sql.BindInt64(0, one_week_ago.ToInternalValue()); |
| + int weekly_visit_count = weekly_visit_sql.ColumnInt(0); |
| + UMA_HISTOGRAM_COUNTS("History.WeeklyVisitCount", weekly_visit_count); |
| + |
| + base::Time one_month_ago = base::Time::Now() - base::TimeDelta::FromDays(30); |
| + sql::Statement monthly_visit_sql(db.GetUniqueStatement( |
| + "SELECT count(*) FROM visits WHERE visit_time > ? AND visit_time <= ?")); |
| + monthly_visit_sql.BindInt64(0, one_month_ago.ToInternalValue()); |
| + monthly_visit_sql.BindInt64(1, one_week_ago.ToInternalValue()); |
| + UMA_HISTOGRAM_COUNTS("History.MonthlyVisitCount", |
| + monthly_visit_sql.ColumnInt(0) + weekly_visit_count); |
| + |
| + UMA_HISTOGRAM_TIMES("History.DatabaseBasicMetricsTime", |
| + base::TimeTicks::Now() - start_time); |
| + |
| + // Compute the advanced metrics even less often, pending timing data showing |
| + // that's not necessary. |
| + if (base::RandInt(1, 3) == 3) { |
| + start_time = base::TimeTicks::Now(); |
| + sql::Statement url_sql(db.GetUniqueStatement( |
| + "SELECT url, last_visit_time FROM urls WHERE last_visit_time > ? " |
| + "ORDER BY last_visit_time DESC")); |
|
Scott Hess - ex-Googler
2013/01/24 17:30:52
I don't see an index on last_visit_time, so it see
Pam (message me for reviews)
2013/01/25 08:07:48
Makes sense. Thanks for knowing way more about the
Scott Hess - ex-Googler
2013/01/25 16:15:49
Unlike a server db like MYSQL, asking SQLite to do
|
| + url_sql.BindInt64(0, one_month_ago.ToInternalValue()); |
| + |
| + bool saved_weekly_counts = false; |
| + int url_count = 0; |
| + std::set<std::string> hosts; |
| + while (url_sql.Step()) { |
| + GURL url(url_sql.ColumnString(0)); |
| + base::Time visit_time = |
| + base::Time::FromInternalValue(url_sql.ColumnInt64(1)); |
| + if (!saved_weekly_counts && visit_time < one_week_ago) { |
|
Scott Hess - ex-Googler
2013/01/24 17:30:52
Pedantic Man wants visit_time <= one_week_ago to m
Pam (message me for reviews)
2013/01/25 08:07:48
Now moot. The new > here matches the > for visits.
|
| + UMA_HISTOGRAM_COUNTS("History.WeeklyURLCount", url_count); |
| + UMA_HISTOGRAM_COUNTS_10000("History.WeeklyHostCount", hosts.size()); |
| + saved_weekly_counts = true; |
| + } |
| + ++url_count; |
| + hosts.insert(url.host()); |
| + } |
| + UMA_HISTOGRAM_COUNTS("History.MonthlyURLCount", url_count); |
| + UMA_HISTOGRAM_COUNTS_10000("History.MonthlyHostCount", hosts.size()); |
| + UMA_HISTOGRAM_TIMES("History.DatabaseAdvancedMetricsTime", |
| + base::TimeTicks::Now() - start_time); |
| + } |
| } |
| } // namespace |