summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjwd@chromium.org <jwd@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-11 20:29:39 +0000
committerjwd@chromium.org <jwd@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-11 20:29:39 +0000
commit344c623a0559e57db0be37062700c6229ccb1234 (patch)
tree72b48eb9f07de30116bad8dfe3ca55f877b4632a
parent1decfef8f6b311a7df532382663670bade97c6b4 (diff)
downloadchromium_src-344c623a0559e57db0be37062700c6229ccb1234.zip
chromium_src-344c623a0559e57db0be37062700c6229ccb1234.tar.gz
chromium_src-344c623a0559e57db0be37062700c6229ccb1234.tar.bz2
Logging date change for seed dates.
BUG=350415 Review URL: https://codereview.chromium.org/190063007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@256299 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/metrics/variations/variations_seed_store.cc61
-rw-r--r--chrome/browser/metrics/variations/variations_seed_store.h4
-rw-r--r--chrome/browser/metrics/variations/variations_service.cc3
-rw-r--r--tools/metrics/histograms/histograms.xml17
4 files changed, 81 insertions, 4 deletions
diff --git a/chrome/browser/metrics/variations/variations_seed_store.cc b/chrome/browser/metrics/variations/variations_seed_store.cc
index 46ecc65..03a56d0 100644
--- a/chrome/browser/metrics/variations/variations_seed_store.cc
+++ b/chrome/browser/metrics/variations/variations_seed_store.cc
@@ -72,6 +72,44 @@ void RecordVariationSeedEmptyHistogram(VariationSeedEmptyState state) {
VARIATIONS_SEED_EMPTY_ENUM_SIZE);
}
+// Note: UMA histogram enum - don't re-order or remove entries.
+enum VariationsSeedDateChangeState {
+ SEED_DATE_NO_OLD_DATE,
+ SEED_DATE_NEW_DATE_OLDER,
+ SEED_DATE_SAME_DAY,
+ SEED_DATE_NEW_DAY,
+ SEED_DATE_ENUM_SIZE,
+};
+
+// Truncates a time to the start of the day in UTC. If given a time representing
+// 2014-03-11 10:18:03.1 UTC, it will return a time representing
+// 2014-03-11 00:00:00.0 UTC.
+base::Time TruncateToUTCDay(const base::Time& time) {
+ base::Time::Exploded exploded;
+ time.UTCExplode(&exploded);
+ exploded.hour = 0;
+ exploded.minute = 0;
+ exploded.second = 0;
+ exploded.millisecond = 0;
+
+ return base::Time::FromUTCExploded(exploded);
+}
+
+VariationsSeedDateChangeState GetSeedDateChangeState(
+ const base::Time& server_seed_date,
+ const base::Time& stored_seed_date) {
+ if (server_seed_date < stored_seed_date)
+ return SEED_DATE_NEW_DATE_OLDER;
+
+ if (TruncateToUTCDay(server_seed_date) !=
+ TruncateToUTCDay(stored_seed_date)) {
+ // The server date is earlier than the stored date, and they are from
+ // different UTC days, so |server_seed_date| is a valid new day.
+ return SEED_DATE_NEW_DAY;
+ }
+ return SEED_DATE_SAME_DAY;
+}
+
} // namespace
VariationsSeedStore::VariationsSeedStore(PrefService* local_state)
@@ -158,8 +196,7 @@ bool VariationsSeedStore::StoreSeedData(
local_state_->ClearPref(prefs::kVariationsSeedHash);
local_state_->SetString(prefs::kVariationsSeed, base64_seed_data);
- local_state_->SetInt64(prefs::kVariationsSeedDate,
- date_fetched.ToInternalValue());
+ UpdateSeedDateAndLogDayChange(date_fetched);
local_state_->SetString(prefs::kVariationsSeedSignature,
base64_seed_signature);
variations_serial_number_ = seed.serial_number();
@@ -167,6 +204,26 @@ bool VariationsSeedStore::StoreSeedData(
return true;
}
+void VariationsSeedStore::UpdateSeedDateAndLogDayChange(
+ const base::Time& server_date_fetched) {
+ VariationsSeedDateChangeState date_change = SEED_DATE_NO_OLD_DATE;
+
+ if (local_state_->HasPrefPath(prefs::kVariationsSeedDate)) {
+ const int64 stored_date_value =
+ local_state_->GetInt64(prefs::kVariationsSeedDate);
+ const base::Time stored_date =
+ base::Time::FromInternalValue(stored_date_value);
+
+ date_change = GetSeedDateChangeState(server_date_fetched, stored_date);
+ }
+
+ UMA_HISTOGRAM_ENUMERATION("Variations.SeedDateChange", date_change,
+ SEED_DATE_ENUM_SIZE);
+
+ local_state_->SetInt64(prefs::kVariationsSeedDate,
+ server_date_fetched.ToInternalValue());
+}
+
// static
void VariationsSeedStore::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterStringPref(prefs::kVariationsSeed, std::string());
diff --git a/chrome/browser/metrics/variations/variations_seed_store.h b/chrome/browser/metrics/variations/variations_seed_store.h
index 228c384..79ef6e6 100644
--- a/chrome/browser/metrics/variations/variations_seed_store.h
+++ b/chrome/browser/metrics/variations/variations_seed_store.h
@@ -38,6 +38,10 @@ class VariationsSeedStore {
const std::string& base64_seed_signature,
const base::Time& date_fetched);
+ // Updates |kVariationsSeedDate| and logs when previous date was from a
+ // different day.
+ void UpdateSeedDateAndLogDayChange(const base::Time& server_date_fetched);
+
// Returns the serial number of the last loaded or stored seed.
const std::string& variations_serial_number() const {
return variations_serial_number_;
diff --git a/chrome/browser/metrics/variations/variations_service.cc b/chrome/browser/metrics/variations/variations_service.cc
index c39e0b5..a687284 100644
--- a/chrome/browser/metrics/variations/variations_service.cc
+++ b/chrome/browser/metrics/variations/variations_service.cc
@@ -445,8 +445,7 @@ void VariationsService::OnURLFetchComplete(const net::URLFetcher* source) {
RecordLastFetchTime();
// Update the seed date value in local state (used for expiry check on
// next start up), since 304 is a successful response.
- local_state_->SetInt64(prefs::kVariationsSeedDate,
- response_date.ToInternalValue());
+ seed_store_.UpdateSeedDateAndLogDayChange(response_date);
}
return;
}
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 0e4e8ec..c49aa58 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -23608,6 +23608,16 @@ other types of suffix sets.
</summary>
</histogram>
+<histogram name="Variations.SeedDateChange" enum="VariationsSeedDateChange">
+ <summary>
+ Counts if a response from the variations server is the first response of the
+ day or not. This is counted when a new valid seed or a 304 is received. The
+ date line is computed in UTC and the times being compared are the server
+ time from the server response and the stored server time from the last
+ successful request.
+ </summary>
+</histogram>
+
<histogram name="Variations.SeedEmpty" enum="VariationsSeedEmpty">
<summary>
Records whether the variations seed in local state is empty (does not exist)
@@ -35173,6 +35183,13 @@ other types of suffix sets.
<int value="5" label="Requests not allowed: disabled by command line"/>
</enum>
+<enum name="VariationsSeedDateChange" type="int">
+ <int value="0" label="No previous date"/>
+ <int value="1" label="New date older than old date"/>
+ <int value="2" label="Same day"/>
+ <int value="3" label="Day changed"/>
+</enum>
+
<enum name="VariationsSeedEmpty" type="int">
<int value="0" label="Seed Not Empty"/>
<int value="1" label="Seed Empty"/>