| // 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_ |