Home | History | Annotate | Download | only in sessions
      1 // Copyright 2012 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 
      5 // StatusController handles all counter and status related number crunching and
      6 // state tracking on behalf of a SyncSession.
      7 //
      8 // This object may be accessed from many different threads.  It will be accessed
      9 // most often from the syncer thread.  However, when update application is in
     10 // progress it may also be accessed from the worker threads.  This is safe
     11 // because only one of them will run at a time, and the syncer thread will be
     12 // blocked until update application completes.
     13 //
     14 // This object contains only global state.  None of its members are per model
     15 // type counters.
     16 
     17 #ifndef SYNC_SESSIONS_STATUS_CONTROLLER_H_
     18 #define SYNC_SESSIONS_STATUS_CONTROLLER_H_
     19 
     20 #include <map>
     21 #include <vector>
     22 
     23 #include "base/logging.h"
     24 #include "base/stl_util.h"
     25 #include "base/time/time.h"
     26 #include "sync/base/sync_export.h"
     27 #include "sync/internal_api/public/engine/model_safe_worker.h"
     28 #include "sync/internal_api/public/sessions/model_neutral_state.h"
     29 
     30 namespace syncer {
     31 namespace sessions {
     32 
     33 class SYNC_EXPORT_PRIVATE StatusController {
     34  public:
     35   explicit StatusController();
     36   ~StatusController();
     37 
     38   // ClientToServer messages.
     39   const ModelTypeSet commit_request_types() const {
     40     return model_neutral_.commit_request_types;
     41   }
     42   void set_commit_request_types(ModelTypeSet value) {
     43     model_neutral_.commit_request_types = value;
     44   }
     45 
     46   // Changelog related state.
     47   int64 num_server_changes_remaining() const {
     48     return model_neutral_.num_server_changes_remaining;
     49   }
     50 
     51   // Various conflict counters.
     52   int num_encryption_conflicts() const;
     53   int num_hierarchy_conflicts() const;
     54   int num_server_conflicts() const;
     55 
     56   // Aggregate sum of all conflicting items over all conflict types.
     57   int TotalNumConflictingItems() const;
     58 
     59   // Number of successfully applied updates.
     60   int num_updates_applied() const;
     61 
     62   int num_server_overwrites() const;
     63 
     64   base::Time sync_start_time() const {
     65     // The time at which we sent the first GetUpdates command for this sync.
     66     return sync_start_time_;
     67   }
     68 
     69   const ModelNeutralState& model_neutral_state() const {
     70     return model_neutral_;
     71   }
     72 
     73   SyncerError last_get_key_result() const;
     74 
     75   // Download counters.
     76   void set_num_server_changes_remaining(int64 changes_remaining);
     77   void increment_num_updates_downloaded_by(int value);
     78   void increment_num_tombstone_updates_downloaded_by(int value);
     79   void increment_num_reflected_updates_downloaded_by(int value);
     80 
     81   // Update application and conflict resolution counters.
     82   void increment_num_updates_applied_by(int value);
     83   void increment_num_encryption_conflicts_by(int value);
     84   void increment_num_hierarchy_conflicts_by(int value);
     85   void increment_num_server_conflicts();
     86   void increment_num_local_overwrites();
     87   void increment_num_server_overwrites();
     88 
     89   // Commit counters.
     90   void increment_num_successful_commits();
     91   void increment_num_successful_bookmark_commits();
     92   void set_num_successful_bookmark_commits(int value);
     93 
     94   // Server communication status tracking.
     95   void set_sync_protocol_error(const SyncProtocolError& error);
     96   void set_last_get_key_result(const SyncerError result);
     97   void set_last_download_updates_result(const SyncerError result);
     98   void set_commit_result(const SyncerError result);
     99 
    100   // A very important flag used to inform frontend of need to migrate.
    101   void set_types_needing_local_migration(ModelTypeSet types);
    102 
    103   void UpdateStartTime();
    104 
    105  private:
    106   ModelNeutralState model_neutral_;
    107 
    108   base::Time sync_start_time_;
    109 
    110   DISALLOW_COPY_AND_ASSIGN(StatusController);
    111 };
    112 
    113 }  // namespace sessions
    114 }  // namespace syncer
    115 
    116 #endif  // SYNC_SESSIONS_STATUS_CONTROLLER_H_
    117