| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/metrics/variations/variations_service.h" | 5 #include "chrome/browser/metrics/variations/variations_service.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/build_time.h" | 9 #include "base/build_time.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 variations::VariationsSeedProcessor().CreateTrialsFromSeed( | 269 variations::VariationsSeedProcessor().CreateTrialsFromSeed( |
| 270 seed, | 270 seed, |
| 271 g_browser_process->GetApplicationLocale(), | 271 g_browser_process->GetApplicationLocale(), |
| 272 GetReferenceDateForExpiryChecks(local_state_), | 272 GetReferenceDateForExpiryChecks(local_state_), |
| 273 current_version, | 273 current_version, |
| 274 GetChannelForVariations(), | 274 GetChannelForVariations(), |
| 275 GetCurrentFormFactor(), | 275 GetCurrentFormFactor(), |
| 276 GetHardwareClass(), | 276 GetHardwareClass(), |
| 277 base::Bind(&OverrideUIString)); | 277 base::Bind(&OverrideUIString)); |
| 278 | 278 |
| 279 const base::Time now = base::Time::Now(); |
| 280 |
| 279 // Log the "freshness" of the seed that was just used. The freshness is the | 281 // Log the "freshness" of the seed that was just used. The freshness is the |
| 280 // time between the last successful seed download and now. | 282 // time between the last successful seed download and now. |
| 281 const int64 last_fetch_time_internal = | 283 const int64 last_fetch_time_internal = |
| 282 local_state_->GetInt64(prefs::kVariationsLastFetchTime); | 284 local_state_->GetInt64(prefs::kVariationsLastFetchTime); |
| 283 if (last_fetch_time_internal) { | 285 if (last_fetch_time_internal) { |
| 284 const base::Time now = base::Time::Now(); | |
| 285 const base::TimeDelta delta = | 286 const base::TimeDelta delta = |
| 286 now - base::Time::FromInternalValue(last_fetch_time_internal); | 287 now - base::Time::FromInternalValue(last_fetch_time_internal); |
| 287 // Log the value in number of minutes. | 288 // Log the value in number of minutes. |
| 288 UMA_HISTOGRAM_CUSTOM_COUNTS("Variations.SeedFreshness", delta.InMinutes(), | 289 UMA_HISTOGRAM_CUSTOM_COUNTS("Variations.SeedFreshness", delta.InMinutes(), |
| 289 1, base::TimeDelta::FromDays(30).InMinutes(), 50); | 290 1, base::TimeDelta::FromDays(30).InMinutes(), 50); |
| 290 } | 291 } |
| 291 | 292 |
| 293 // Log the skew between the seed date and the system clock/build time to |
| 294 // analyze whether either could be used to make old variations seeds expire |
| 295 // after some time. |
| 296 const int64 seed_date_internal = |
| 297 local_state_->GetInt64(prefs::kVariationsSeedDate); |
| 298 if (seed_date_internal) { |
| 299 const base::Time seed_date = |
| 300 base::Time::FromInternalValue(seed_date_internal); |
| 301 const int system_clock_delta_days = (now - seed_date).InDays(); |
| 302 if (system_clock_delta_days < 0) { |
| 303 UMA_HISTOGRAM_COUNTS_100("Variations.SeedDateSkew.SystemClockBehindBy", |
| 304 -system_clock_delta_days); |
| 305 } else { |
| 306 UMA_HISTOGRAM_COUNTS_100("Variations.SeedDateSkew.SystemClockAheadBy", |
| 307 system_clock_delta_days); |
| 308 } |
| 309 |
| 310 const int build_time_delta_days = |
| 311 (base::GetBuildTime() - seed_date).InDays(); |
| 312 if (build_time_delta_days < 0) { |
| 313 UMA_HISTOGRAM_COUNTS_100("Variations.SeedDateSkew.BuildTimeBehindBy", |
| 314 -build_time_delta_days); |
| 315 } else { |
| 316 UMA_HISTOGRAM_COUNTS_100("Variations.SeedDateSkew.BuildTimeAheadBy", |
| 317 build_time_delta_days); |
| 318 } |
| 319 } |
| 320 |
| 292 return true; | 321 return true; |
| 293 } | 322 } |
| 294 | 323 |
| 295 void VariationsService::StartRepeatedVariationsSeedFetch() { | 324 void VariationsService::StartRepeatedVariationsSeedFetch() { |
| 296 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 325 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 297 | 326 |
| 298 // Initialize the Variations server URL. | 327 // Initialize the Variations server URL. |
| 299 variations_server_url_ = GetVariationsServerURL(policy_pref_service_); | 328 variations_server_url_ = GetVariationsServerURL(policy_pref_service_); |
| 300 | 329 |
| 301 // Check that |CreateTrialsFromSeed| was called, which is necessary to | 330 // Check that |CreateTrialsFromSeed| was called, which is necessary to |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 601 | 630 |
| 602 void VariationsService::RecordLastFetchTime() { | 631 void VariationsService::RecordLastFetchTime() { |
| 603 // local_state_ is NULL in tests, so check it first. | 632 // local_state_ is NULL in tests, so check it first. |
| 604 if (local_state_) { | 633 if (local_state_) { |
| 605 local_state_->SetInt64(prefs::kVariationsLastFetchTime, | 634 local_state_->SetInt64(prefs::kVariationsLastFetchTime, |
| 606 base::Time::Now().ToInternalValue()); | 635 base::Time::Now().ToInternalValue()); |
| 607 } | 636 } |
| 608 } | 637 } |
| 609 | 638 |
| 610 } // namespace chrome_variations | 639 } // namespace chrome_variations |
| OLD | NEW |