| Index: sync/sessions/nudge_tracker.h
|
| diff --git a/sync/sessions/nudge_tracker.h b/sync/sessions/nudge_tracker.h
|
| index 0128ce096efa4075383b579b502f44eafcd75297..c0932506e8baf63e9e48b347b67a2e50cafa0edb 100644
|
| --- a/sync/sessions/nudge_tracker.h
|
| +++ b/sync/sessions/nudge_tracker.h
|
| @@ -7,11 +7,14 @@
|
| #ifndef SYNC_SESSIONS_NUDGE_TRACKER_H_
|
| #define SYNC_SESSIONS_NUDGE_TRACKER_H_
|
|
|
| -#include <vector>
|
| +#include <list>
|
| +#include <map>
|
|
|
| #include "base/compiler_specific.h"
|
| #include "sync/base/sync_export.h"
|
| -#include "sync/internal_api/public/sessions/sync_source_info.h"
|
| +#include "sync/internal_api/public/base/model_type.h"
|
| +#include "sync/internal_api/public/base/model_type_invalidation_map.h"
|
| +#include "sync/protocol/sync.pb.h"
|
|
|
| namespace syncer {
|
| namespace sessions {
|
| @@ -20,30 +23,107 @@ struct SyncSourceInfo;
|
|
|
| class SYNC_EXPORT_PRIVATE NudgeTracker {
|
| public:
|
| + static size_t kDefaultMaxPayloadsPerType;
|
| +
|
| NudgeTracker();
|
| ~NudgeTracker();
|
|
|
| - // Merges in the information from another nudge.
|
| - void CoalesceSources(const SyncSourceInfo& source);
|
| + // Returns true if there is a good reason for performing a sync cycle.
|
| + // This does not take into account whether or not this is a good *time* to
|
| + // perform a sync cycle; that's the scheduler's job.
|
| + bool IsSyncRequired();
|
| +
|
| + // Tells this class that all required update fetching and committing has
|
| + // completed successfully.
|
| + void RecordSuccessfulSyncCycle();
|
| +
|
| + // Takes note of a local change.
|
| + void RecordLocalChange(ModelTypeSet types);
|
| +
|
| + // Takes note of a locally issued request to refresh a data type.
|
| + void RecordLocalRefreshRequest(ModelTypeSet types);
|
|
|
| - // Returns true if there are no unserviced nudges.
|
| - bool IsEmpty();
|
| + // Takes note of the receipt of an invalidation notice from the server.
|
| + void RecordRemoteInvalidation(
|
| + const ModelTypeInvalidationMap& invalidation_map);
|
|
|
| - // Clear all unserviced nudges.
|
| - void Reset();
|
| + // These functions should be called to keep this class informed of the status
|
| + // of the connection to the invalidations server.
|
| + void OnInvalidationsEnabled();
|
| + void OnInvalidationsDisabled();
|
|
|
| - // Returns the coalesced source info.
|
| - const SyncSourceInfo& source_info() const {
|
| - return source_info_;
|
| - }
|
| + // A helper to return an old-style source info. Used only to maintain
|
| + // compatibility with some old code.
|
| + SyncSourceInfo GetSourceInfo() const;
|
|
|
| - // Returns the set of locally modified types, according to our tracked source
|
| - // infos. The result is often wrong; see implementation comment for details.
|
| + // Returns the set of locally modified types, according to the nudges received
|
| + // since the last successful sync cycle.
|
| ModelTypeSet GetLocallyModifiedTypes() const;
|
|
|
| + // Returns the 'source' of the GetUpdate request.
|
| + //
|
| + // This flag is deprecated, but still used by the server. There can be more
|
| + // than one reason to perform a particular sync cycle. The GetUpdatesTrigger
|
| + // message will contain more reliable information about the reasons for
|
| + // performing a sync.
|
| + //
|
| + // See the implementation for important information about the coalesce logic.
|
| + sync_pb::GetUpdatesCallerInfo::GetUpdatesSource updates_source() const;
|
| +
|
| + // Fills a ProgressMarker for the next GetUpdates request. This is used by
|
| + // the DownloadUpdatesCommand to dump lots of useful per-type state
|
| + // information into the GetUpdate request before sending it off to the server.
|
| + void FillProtoMessage(
|
| + ModelType type,
|
| + sync_pb::GetUpdateTriggers* msg) const;
|
| +
|
| + // Adjusts the number of hints that can be stored locally.
|
| + void SetHintBufferSize(size_t size);
|
| +
|
| private:
|
| - // Merged source info for the nudge(s).
|
| - SyncSourceInfo source_info_;
|
| + typedef std::list<std::string> PayloadList;
|
| + typedef std::map<ModelType, PayloadList> PayloadListMap;
|
| + typedef std::map<ModelType, int> NudgeMap;
|
| +
|
| + // Merged updates source. This should be obsolete, but the server still
|
| + // relies on it for some heuristics.
|
| + sync_pb::GetUpdatesCallerInfo::GetUpdatesSource updates_source_;
|
| +
|
| + // The number of times each type has been locally nudged since the last
|
| + // successful sync cycle. If a type is not in the map, the count is zero.
|
| + NudgeMap local_nudge_counts_;
|
| +
|
| + // The number of times a refresh was requested each type, since the last
|
| + // successful sync cycle. If a type is not in the map, the count is zero.
|
| + NudgeMap refresh_requested_counts_;
|
| +
|
| + // A map of datatypes to lists of hints. The hints are ordered from least
|
| + // recent to most recent.
|
| + PayloadListMap payload_list_map_;
|
| +
|
| + // Tracks the types for which the list of pending hints has overflowed,
|
| + // causing us to drop the oldest hints.
|
| + ModelTypeSet locally_dropped_payload_types_;
|
| +
|
| + // Tracks the types for which the invalidation server has notified us that it
|
| + // dropped some of its payloads.
|
| + ModelTypeSet server_dropped_payload_types_;
|
| +
|
| + // Tracks whether or not invalidations are currently enabled.
|
| + bool invalidations_enabled_;
|
| +
|
| + // This flag is set if suspect that some technical malfunction or known bug
|
| + // may have left us with some unserviced invalidations.
|
| + //
|
| + // Keeps track of whether or not we're fully in sync with the invalidation
|
| + // server. This can be false even if invalidations are enabled and working
|
| + // correctly. For example, until we get ack-tracking working properly, we
|
| + // won't persist invalidations between restarts, so we may be out of sync when
|
| + // we restart. The only way to get back into sync is to have invalidations
|
| + // enabled, then complete a sync cycle to make sure we're fully up to date.
|
| + bool invalidations_out_of_sync_;
|
| +
|
| + size_t num_payloads_per_type_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(NudgeTracker);
|
| };
|
|
|