| // Copyright 2012 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef COMPONENTS_SYNC_ENGINE_CYCLE_STATUS_CONTROLLER_H_ | |
| #define COMPONENTS_SYNC_ENGINE_CYCLE_STATUS_CONTROLLER_H_ | |
| #include "base/time/time.h" | |
| #include "components/sync/engine/cycle/model_neutral_state.h" | |
| namespace syncer { | |
| // StatusController handles all counter and status related number crunching and | |
| // state tracking on behalf of a SyncCycle. | |
| // | |
| // This object may be accessed from many different threads. It will be accessed | |
| // most often from the syncer thread. However, when update application is in | |
| // progress it may also be accessed from the worker threads. This is safe | |
| // because only one of them will run at a time, and the syncer thread will be | |
| // blocked until update application completes. | |
| // | |
| // This object contains only global state. None of its members are per model | |
| // type counters. | |
| class StatusController { | |
| public: | |
| StatusController(); | |
| StatusController(const StatusController&) = delete; | |
| StatusController& operator=(const StatusController&) = delete; | |
| ~StatusController(); | |
| // The types which had non-deletion updates in the GetUpdates during the | |
| // last sync cycle. | |
| DataTypeSet get_updated_types() const; | |
| void add_updated_type(DataType type); | |
| void clear_updated_types(); | |
| // Various conflict counters. | |
| int num_server_conflicts() const; | |
| // The time at which we started the most recent sync cycle. | |
| base::Time sync_start_time() const { return sync_start_time_; } | |
| // If a poll was performed in this cycle, the time at which it finished. | |
| // Not set if no poll was performed. | |
| base::Time poll_finish_time() const { return poll_finish_time_; } | |
| const ModelNeutralState& model_neutral_state() const { | |
| return model_neutral_; | |
| } | |
| bool last_get_key_failed() const; | |
| // Download counters. | |
| void increment_num_updates_downloaded_by(int value); | |
| void increment_num_tombstone_updates_downloaded_by(int value); | |
| // Update application and conflict resolution counters. | |
| void increment_num_server_conflicts(); | |
| // Commit counters. | |
| void increment_num_successful_commits(); | |
| void increment_num_successful_bookmark_commits(); | |
| // Server communication status tracking. | |
| void set_last_get_key_failed(bool failed); | |
| void set_last_download_updates_result(const SyncerError result); | |
| void set_commit_result(const SyncerError result); | |
| void UpdateStartTime(); | |
| void UpdatePollTime(); | |
| private: | |
| ModelNeutralState model_neutral_; | |
| // Time the last sync cycle began. | |
| base::Time sync_start_time_; | |
| // If a poll was performed, the time it finished. Not set if not poll was | |
| // performed. | |
| base::Time poll_finish_time_; | |
| }; | |
| } // namespace syncer | |
| #endif // COMPONENTS_SYNC_ENGINE_CYCLE_STATUS_CONTROLLER_H_ |