breadcrumb_manager.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2019 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. #ifndef COMPONENTS_BREADCRUMBS_CORE_BREADCRUMB_MANAGER_H_
  5. #define COMPONENTS_BREADCRUMBS_CORE_BREADCRUMB_MANAGER_H_
  6. #include <list>
  7. #include <string>
  8. #include "base/observer_list.h"
  9. #include "base/time/time.h"
  10. namespace breadcrumbs {
  11. class BreadcrumbManagerObserver;
  12. // Stores events logged with |AddEvent| in memory which can later be retrieved
  13. // with |GetEvents|. Events will be silently dropped after a certain amount of
  14. // time has passed unless no more recent events are available. The internal
  15. // management of events aims to keep relevant events available while clearing
  16. // stale data.
  17. class BreadcrumbManager {
  18. public:
  19. // |start_time| will be used to determine logged events' timestamps, and
  20. // should almost always be breadcrumbs::GetStartTime(), with a few exceptions
  21. // for tests that rely on specific start times.
  22. explicit BreadcrumbManager(base::TimeTicks start_time);
  23. BreadcrumbManager(const BreadcrumbManager&) = delete;
  24. BreadcrumbManager& operator=(const BreadcrumbManager&) = delete;
  25. ~BreadcrumbManager();
  26. // Returns a list of the collected breadcrumb events which are still relevant
  27. // up to |event_count_limit|. Passing zero for |event_count_limit| signifies
  28. // no limit. Events returned will have a timestamp prepended to the original
  29. // |event| string representing when |AddEvent| was called.
  30. // Note: This method may drop old events so the returned events can change
  31. // even if no new events have been added, but time has passed.
  32. const std::list<std::string> GetEvents(size_t event_count_limit);
  33. // Logs a breadcrumb event with message data |event|.
  34. // NOTE: |event| must not include newline characters as newlines are used by
  35. // BreadcrumbPersistentStorageManager as a delimiter.
  36. void AddEvent(const std::string& event);
  37. // Adds and removes observers.
  38. void AddObserver(BreadcrumbManagerObserver* observer);
  39. void RemoveObserver(BreadcrumbManagerObserver* observer);
  40. private:
  41. // Drops events which are considered stale. Note that stale events are not
  42. // guaranteed to be removed. Explicitly, stale events will be retained while
  43. // newer events are limited.
  44. void DropOldEvents();
  45. // Returns the time since |start_time_|.
  46. base::TimeDelta GetElapsedTime();
  47. // The time when breadcrumbs logging started, used to calculate elapsed time
  48. // for event timestamps.
  49. const base::TimeTicks start_time_;
  50. // List of events, paired with the time they were logged in minutes. Newer
  51. // events are at the end of the list.
  52. struct EventBucket {
  53. int minutes_elapsed;
  54. std::list<std::string> events;
  55. explicit EventBucket(int minutes_elapsed);
  56. EventBucket(const EventBucket&);
  57. ~EventBucket();
  58. };
  59. std::list<EventBucket> event_buckets_;
  60. base::ObserverList<BreadcrumbManagerObserver, /*check_empty=*/true>
  61. observers_;
  62. };
  63. } // namespace breadcrumbs
  64. #endif // COMPONENTS_BREADCRUMBS_CORE_BREADCRUMB_MANAGER_H_