optimization_hints_component_update_listener.cc 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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/optimization_guide/core/optimization_hints_component_update_listener.h"
  5. #include "base/metrics/histogram_functions.h"
  6. #include "base/no_destructor.h"
  7. #include "base/observer_list.h"
  8. namespace optimization_guide {
  9. // static
  10. OptimizationHintsComponentUpdateListener*
  11. OptimizationHintsComponentUpdateListener::GetInstance() {
  12. static base::NoDestructor<OptimizationHintsComponentUpdateListener> service;
  13. return service.get();
  14. }
  15. OptimizationHintsComponentUpdateListener::
  16. OptimizationHintsComponentUpdateListener() = default;
  17. OptimizationHintsComponentUpdateListener::
  18. ~OptimizationHintsComponentUpdateListener() = default;
  19. void OptimizationHintsComponentUpdateListener::AddObserver(
  20. OptimizationHintsComponentObserver* observer) {
  21. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  22. observers_.AddObserver(observer);
  23. if (hints_component_info_) {
  24. observer->OnHintsComponentAvailable(*hints_component_info_);
  25. }
  26. }
  27. void OptimizationHintsComponentUpdateListener::RemoveObserver(
  28. OptimizationHintsComponentObserver* observer) {
  29. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  30. observers_.RemoveObserver(observer);
  31. }
  32. void OptimizationHintsComponentUpdateListener::MaybeUpdateHintsComponent(
  33. const HintsComponentInfo& info) {
  34. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  35. DCHECK(info.version.IsValid());
  36. DCHECK(!info.path.empty());
  37. // Do not update the component if the version isn't newer. This differs from
  38. // the check in ComponentInstaller::InstallHelper(), because this rejects
  39. // version equality, whereas InstallHelper() accepts it.
  40. if (hints_component_info_ &&
  41. hints_component_info_->version.CompareTo(info.version) >= 0) {
  42. return;
  43. }
  44. base::UmaHistogramSparse(
  45. "OptimizationGuide.OptimizationHintsComponent.MajorVersion",
  46. info.version.components()[0]);
  47. hints_component_info_.emplace(info.version, info.path);
  48. for (auto& observer : observers_) {
  49. observer.OnHintsComponentAvailable(*hints_component_info_);
  50. }
  51. }
  52. void OptimizationHintsComponentUpdateListener::ResetStateForTesting() {
  53. hints_component_info_ = absl::nullopt;
  54. }
  55. } // namespace optimization_guide