diff options
author | jwd@chromium.org <jwd@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-11 20:29:39 +0000 |
---|---|---|
committer | jwd@chromium.org <jwd@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-11 20:29:39 +0000 |
commit | 344c623a0559e57db0be37062700c6229ccb1234 (patch) | |
tree | 72b48eb9f07de30116bad8dfe3ca55f877b4632a | |
parent | 1decfef8f6b311a7df532382663670bade97c6b4 (diff) | |
download | chromium_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
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"/> |