Skip to content

Commit

Permalink
Logging date change for seed dates.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
jwd@chromium.org committed Mar 11, 2014
1 parent 1decfef commit 344c623
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 4 deletions.
61 changes: 59 additions & 2 deletions chrome/browser/metrics/variations/variations_seed_store.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -158,15 +196,34 @@ 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();

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());
Expand Down
4 changes: 4 additions & 0 deletions chrome/browser/metrics/variations/variations_seed_store.h
Original file line number Diff line number Diff line change
Expand Up @@ -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_;
Expand Down
3 changes: 1 addition & 2 deletions chrome/browser/metrics/variations/variations_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
17 changes: 17 additions & 0 deletions tools/metrics/histograms/histograms.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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"/>
Expand Down

0 comments on commit 344c623

Please sign in to comment.