[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 1 | // Copyright 2014 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 | |||||
[email protected] | 7315c96 | 2014-05-09 23:17:47 | [diff] [blame] | 5 | #ifndef COMPONENTS_INVALIDATION_INVALIDATION_LOGGER_H_ |
6 | #define COMPONENTS_INVALIDATION_INVALIDATION_LOGGER_H_ | ||||
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 7 | |
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 8 | #include <map> |
[email protected] | 063cbbb3 | 2014-02-27 01:46:20 | [diff] [blame] | 9 | #include <set> |
10 | |||||
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 11 | #include "base/memory/scoped_ptr.h" |
12 | #include "base/observer_list.h" | ||||
[email protected] | 51766bf | 2014-07-24 01:13:47 | [diff] [blame] | 13 | #include "components/invalidation/invalidation_util.h" |
14 | #include "components/invalidation/invalidator_state.h" | ||||
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 15 | |
16 | namespace base { | ||||
17 | class DictionaryValue; | ||||
18 | } // namespace base | ||||
19 | |||||
20 | namespace syncer { | ||||
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 21 | class InvalidationHandler; |
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 22 | class ObjectIdInvalidationMap; |
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 23 | } // namespace syncer |
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 24 | |
25 | namespace invalidation { | ||||
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 26 | |
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 27 | class InvalidationLoggerObserver; |
28 | |||||
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 29 | // This class is in charge of logging invalidation-related information. |
30 | // It is used store the state of the InvalidatorService that owns this object | ||||
31 | // and then rebroadcast it to observers than can display it accordingly | ||||
32 | // (like a debugging page). This class only stores lightweight state, as in | ||||
33 | // which services are registered and listening for certain objects, and the | ||||
34 | // status of the InvalidatorService (in order not to increase unnecesary | ||||
35 | // memory usage). | ||||
36 | // | ||||
37 | // Observers can be registered and will be called to be notified of any | ||||
38 | // status change immediatly. They can log there the history of what messages | ||||
[email protected] | dd2cd94 | 2014-05-06 00:58:07 | [diff] [blame] | 39 | // they receive. |
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 40 | |
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 41 | class InvalidationLogger { |
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 42 | |
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 43 | public: |
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 44 | InvalidationLogger(); |
45 | ~InvalidationLogger(); | ||||
46 | |||||
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 47 | // Pass through to any registered InvalidationLoggerObservers. |
48 | // We will do local logging here too. | ||||
[email protected] | 063cbbb3 | 2014-02-27 01:46:20 | [diff] [blame] | 49 | void OnRegistration(const std::string& details); |
50 | void OnUnregistration(const std::string& details); | ||||
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 51 | void OnStateChange(const syncer::InvalidatorState& new_state); |
52 | void OnUpdateIds(std::map<std::string, syncer::ObjectIdSet> updated_ids); | ||||
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 53 | void OnDebugMessage(const base::DictionaryValue& details); |
54 | void OnInvalidation(const syncer::ObjectIdInvalidationMap& details); | ||||
55 | |||||
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 56 | // Triggers messages to be sent to the Observers to provide them with |
57 | // the current state of the logging. | ||||
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 58 | void EmitContent(); |
59 | |||||
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 60 | // Add and remove observers listening for messages. |
61 | void RegisterObserver(InvalidationLoggerObserver* debug_observer); | ||||
62 | void UnregisterObserver(InvalidationLoggerObserver* debug_observer); | ||||
mgiuca | 64ccf236 | 2014-11-10 06:44:23 | [diff] [blame] | 63 | bool IsObserverRegistered( |
64 | const InvalidationLoggerObserver* debug_observer) const; | ||||
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 65 | |
66 | private: | ||||
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 67 | // Send to every Observer a OnStateChange event with the latest state. |
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 68 | void EmitState(); |
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 69 | |
70 | // Send to every Observer many OnUpdateIds events, each with one registrar | ||||
71 | // and every objectId it currently has registered. | ||||
72 | void EmitUpdatedIds(); | ||||
73 | |||||
[email protected] | 063cbbb3 | 2014-02-27 01:46:20 | [diff] [blame] | 74 | // Send to every Observer a vector with the all the current registered |
[email protected] | 5cb5b18 | 2014-03-18 00:32:39 | [diff] [blame] | 75 | // handlers. |
[email protected] | 063cbbb3 | 2014-02-27 01:46:20 | [diff] [blame] | 76 | void EmitRegisteredHandlers(); |
77 | |||||
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 78 | // The list of every observer currently listening for notifications. |
79 | ObserverList<InvalidationLoggerObserver> observer_list_; | ||||
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 80 | |
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 81 | // The last InvalidatorState updated by the InvalidatorService. |
82 | syncer::InvalidatorState last_invalidator_state_; | ||||
[email protected] | 46109c5 | 2014-04-08 22:58:34 | [diff] [blame] | 83 | base::Time last_invalidator_state_timestamp_; |
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 84 | |
85 | // The map that contains every object id that is currently registered | ||||
86 | // and its owner. | ||||
87 | std::map<std::string, syncer::ObjectIdSet> latest_ids_; | ||||
88 | |||||
[email protected] | 9364154f | 2014-03-31 17:39:24 | [diff] [blame] | 89 | // The map that counts how many invalidations per objectId there has been. |
90 | syncer::ObjectIdCountMap invalidation_count_; | ||||
91 | |||||
[email protected] | 063cbbb3 | 2014-02-27 01:46:20 | [diff] [blame] | 92 | // The name of all invalidatorHandler registered (note that this is not |
93 | // necessarily the same as the keys of latest_ids_, because they might | ||||
[email protected] | 5cb5b18 | 2014-03-18 00:32:39 | [diff] [blame] | 94 | // have not registered any object id). |
[email protected] | 063cbbb3 | 2014-02-27 01:46:20 | [diff] [blame] | 95 | std::multiset<std::string> registered_handlers_; |
96 | |||||
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 97 | DISALLOW_COPY_AND_ASSIGN(InvalidationLogger); |
[email protected] | b760027 | 2014-02-11 18:55:55 | [diff] [blame] | 98 | }; |
99 | |||||
100 | } // namespace invalidation | ||||
[email protected] | 9b0d66b | 2014-02-20 13:16:01 | [diff] [blame] | 101 | |
[email protected] | 7315c96 | 2014-05-09 23:17:47 | [diff] [blame] | 102 | #endif // COMPONENTS_INVALIDATION_INVALIDATION_LOGGER_H_ |