metrics_rotation_scheduler.cc 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/metrics/metrics_rotation_scheduler.h"
  5. #include "base/metrics/histogram_macros.h"
  6. #include "build/build_config.h"
  7. namespace metrics {
  8. MetricsRotationScheduler::MetricsRotationScheduler(
  9. const base::RepeatingClosure& upload_callback,
  10. const base::RepeatingCallback<base::TimeDelta(void)>&
  11. upload_interval_callback,
  12. bool fast_startup_for_testing)
  13. : MetricsScheduler(upload_callback, fast_startup_for_testing),
  14. init_task_complete_(false),
  15. waiting_for_init_task_complete_(false),
  16. upload_interval_callback_(upload_interval_callback) {}
  17. MetricsRotationScheduler::~MetricsRotationScheduler() {}
  18. void MetricsRotationScheduler::InitTaskComplete() {
  19. DCHECK(!init_task_complete_);
  20. init_task_complete_ = true;
  21. if (waiting_for_init_task_complete_) {
  22. waiting_for_init_task_complete_ = false;
  23. TriggerTask();
  24. } else {
  25. LogMetricsInitSequence(INIT_TASK_COMPLETED_FIRST);
  26. }
  27. }
  28. void MetricsRotationScheduler::RotationFinished() {
  29. TaskDone(upload_interval_callback_.Run());
  30. }
  31. void MetricsRotationScheduler::LogMetricsInitSequence(InitSequence sequence) {
  32. UMA_HISTOGRAM_ENUMERATION("UMA.InitSequence", sequence,
  33. INIT_SEQUENCE_ENUM_SIZE);
  34. }
  35. void MetricsRotationScheduler::TriggerTask() {
  36. // If the timer fired before the init task has completed, don't trigger the
  37. // upload yet - wait for the init task to complete and do it then.
  38. if (!init_task_complete_) {
  39. LogMetricsInitSequence(TIMER_FIRED_FIRST);
  40. waiting_for_init_task_complete_ = true;
  41. return;
  42. }
  43. MetricsScheduler::TriggerTask();
  44. }
  45. } // namespace metrics