| // Copyright 2014 The Chromium OS Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef BUFFET_STATES_STATE_CHANGE_QUEUE_H_ | |
| #define BUFFET_STATES_STATE_CHANGE_QUEUE_H_ | |
| #include <map> | |
| #include <vector> | |
| #include <base/macros.h> | |
| #include <base/threading/thread_checker.h> | |
| #include "buffet/states/state_change_queue_interface.h" | |
| namespace buffet { | |
| // An object to record and retrieve device state change notification events. | |
| class StateChangeQueue : public StateChangeQueueInterface { | |
| public: | |
| explicit StateChangeQueue(size_t max_queue_size); | |
| // Overrides from StateChangeQueueInterface. | |
| bool IsEmpty() const override { return state_changes_.empty(); } | |
| bool NotifyPropertiesUpdated( | |
| base::Time timestamp, | |
| chromeos::VariantDictionary changed_properties) override; | |
| std::vector<StateChange> GetAndClearRecordedStateChanges() override; | |
| private: | |
| // To make sure we do not call NotifyPropertiesUpdated() and | |
| // GetAndClearRecordedStateChanges() on different threads, |thread_checker_| | |
| // is here to help us with verifying the single-threaded operation. | |
| base::ThreadChecker thread_checker_; | |
| // Maximum queue size. If it is full, the oldest state update records are | |
| // merged together until the queue size is within the size limit. | |
| const size_t max_queue_size_; | |
| // Accumulated list of device state change notifications. | |
| std::map<base::Time, chromeos::VariantDictionary> state_changes_; | |
| DISALLOW_COPY_AND_ASSIGN(StateChangeQueue); | |
| }; | |
| } // namespace buffet | |
| #endif // BUFFET_STATES_STATE_CHANGE_QUEUE_H_ |