OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // A class to track the outstanding work required to bring the client back into | 5 // A class to track the outstanding work required to bring the client back into |
6 // sync with the server. | 6 // sync with the server. |
7 #ifndef SYNC_SESSIONS_NUDGE_TRACKER_H_ | 7 #ifndef SYNC_SESSIONS_NUDGE_TRACKER_H_ |
8 #define SYNC_SESSIONS_NUDGE_TRACKER_H_ | 8 #define SYNC_SESSIONS_NUDGE_TRACKER_H_ |
9 | 9 |
10 #include <list> | 10 #include <list> |
11 #include <map> | 11 #include <map> |
12 | 12 |
13 #include "base/compiler_specific.h" | 13 #include "base/compiler_specific.h" |
14 #include "base/time/clock.h" | |
rlarocque
2014/01/08 20:30:08
I think you can remove this now.
haitaol1
2014/01/09 00:30:44
Done.
| |
14 #include "sync/base/sync_export.h" | 15 #include "sync/base/sync_export.h" |
15 #include "sync/internal_api/public/base/model_type.h" | 16 #include "sync/internal_api/public/base/model_type.h" |
16 #include "sync/protocol/sync.pb.h" | 17 #include "sync/protocol/sync.pb.h" |
17 #include "sync/sessions/data_type_tracker.h" | 18 #include "sync/sessions/data_type_tracker.h" |
18 | 19 |
19 namespace syncer { | 20 namespace syncer { |
20 | 21 |
21 class ObjectIdInvalidationMap; | 22 class ObjectIdInvalidationMap; |
22 | 23 |
23 namespace sessions { | 24 namespace sessions { |
24 | 25 |
25 class SYNC_EXPORT_PRIVATE NudgeTracker { | 26 class SYNC_EXPORT_PRIVATE NudgeTracker { |
26 public: | 27 public: |
27 static size_t kDefaultMaxPayloadsPerType; | 28 static size_t kDefaultMaxPayloadsPerType; |
28 | 29 |
29 NudgeTracker(); | 30 NudgeTracker(); |
30 ~NudgeTracker(); | 31 ~NudgeTracker(); |
31 | 32 |
32 // Returns true if there is a good reason for performing a sync cycle. | 33 // Returns true if there is a good reason for performing a sync cycle. |
33 // This does not take into account whether or not this is a good *time* to | 34 // This does not take into account whether or not this is a good *time* to |
34 // perform a sync cycle; that's the scheduler's job. | 35 // perform a sync cycle; that's the scheduler's job. |
35 bool IsSyncRequired() const; | 36 bool IsSyncRequired() const; |
36 | 37 |
37 // Returns true if there is a good reason for performing a get updates | 38 // Returns true if there is a good reason for performing a get updates |
38 // request as part of the next sync cycle. | 39 // request as part of the next sync cycle. |
39 bool IsGetUpdatesRequired() const; | 40 bool IsGetUpdatesRequired(base::TimeTicks now) const; |
40 | 41 |
41 // Tells this class that all required update fetching and committing has | 42 // Return true if should perform a sync cycle for GU retry. |
43 bool IsRetryRequired(base::TimeTicks now) const; | |
44 | |
45 // Tells this class that all required update fetching or committing has | |
42 // completed successfully. | 46 // completed successfully. |
43 void RecordSuccessfulSyncCycle(); | 47 void RecordSuccessfulSyncCycle(base::TimeTicks now); |
44 | 48 |
45 // Takes note of a local change. | 49 // Takes note of a local change. |
46 void RecordLocalChange(ModelTypeSet types); | 50 void RecordLocalChange(ModelTypeSet types); |
47 | 51 |
48 // Takes note of a locally issued request to refresh a data type. | 52 // Takes note of a locally issued request to refresh a data type. |
49 void RecordLocalRefreshRequest(ModelTypeSet types); | 53 void RecordLocalRefreshRequest(ModelTypeSet types); |
50 | 54 |
51 // Takes note of the receipt of an invalidation notice from the server. | 55 // Takes note of the receipt of an invalidation notice from the server. |
52 void RecordRemoteInvalidation( | 56 void RecordRemoteInvalidation( |
53 const ObjectIdInvalidationMap& invalidation_map); | 57 const ObjectIdInvalidationMap& invalidation_map); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
98 // Fills a ProgressMarker with single legacy notification hint expected by the | 102 // Fills a ProgressMarker with single legacy notification hint expected by the |
99 // sync server. Newer servers will rely on the data set by FillProtoMessage() | 103 // sync server. Newer servers will rely on the data set by FillProtoMessage() |
100 // instead of this. | 104 // instead of this. |
101 void SetLegacyNotificationHint( | 105 void SetLegacyNotificationHint( |
102 ModelType type, | 106 ModelType type, |
103 sync_pb::DataTypeProgressMarker* progress) const; | 107 sync_pb::DataTypeProgressMarker* progress) const; |
104 | 108 |
105 // Adjusts the number of hints that can be stored locally. | 109 // Adjusts the number of hints that can be stored locally. |
106 void SetHintBufferSize(size_t size); | 110 void SetHintBufferSize(size_t size); |
107 | 111 |
112 void set_next_retry_time(base::TimeTicks next_retry_time) { | |
113 next_retry_time_ = next_retry_time; | |
114 } | |
115 | |
108 private: | 116 private: |
109 typedef std::map<ModelType, DataTypeTracker> TypeTrackerMap; | 117 typedef std::map<ModelType, DataTypeTracker> TypeTrackerMap; |
110 | 118 |
111 TypeTrackerMap type_trackers_; | 119 TypeTrackerMap type_trackers_; |
112 | 120 |
113 // Merged updates source. This should be obsolete, but the server still | 121 // Merged updates source. This should be obsolete, but the server still |
114 // relies on it for some heuristics. | 122 // relies on it for some heuristics. |
115 sync_pb::GetUpdatesCallerInfo::GetUpdatesSource updates_source_; | 123 sync_pb::GetUpdatesCallerInfo::GetUpdatesSource updates_source_; |
116 | 124 |
117 // Tracks whether or not invalidations are currently enabled. | 125 // Tracks whether or not invalidations are currently enabled. |
118 bool invalidations_enabled_; | 126 bool invalidations_enabled_; |
119 | 127 |
120 // This flag is set if suspect that some technical malfunction or known bug | 128 // This flag is set if suspect that some technical malfunction or known bug |
121 // may have left us with some unserviced invalidations. | 129 // may have left us with some unserviced invalidations. |
122 // | 130 // |
123 // Keeps track of whether or not we're fully in sync with the invalidation | 131 // Keeps track of whether or not we're fully in sync with the invalidation |
124 // server. This can be false even if invalidations are enabled and working | 132 // server. This can be false even if invalidations are enabled and working |
125 // correctly. For example, until we get ack-tracking working properly, we | 133 // correctly. For example, until we get ack-tracking working properly, we |
126 // won't persist invalidations between restarts, so we may be out of sync when | 134 // won't persist invalidations between restarts, so we may be out of sync when |
127 // we restart. The only way to get back into sync is to have invalidations | 135 // we restart. The only way to get back into sync is to have invalidations |
128 // enabled, then complete a sync cycle to make sure we're fully up to date. | 136 // enabled, then complete a sync cycle to make sure we're fully up to date. |
129 bool invalidations_out_of_sync_; | 137 bool invalidations_out_of_sync_; |
130 | 138 |
131 size_t num_payloads_per_type_; | 139 size_t num_payloads_per_type_; |
132 | 140 |
141 base::TimeTicks last_successful_sync_time_; | |
142 | |
143 // A retry GU should be issued after this time. | |
144 base::TimeTicks next_retry_time_; | |
145 | |
133 DISALLOW_COPY_AND_ASSIGN(NudgeTracker); | 146 DISALLOW_COPY_AND_ASSIGN(NudgeTracker); |
134 }; | 147 }; |
135 | 148 |
136 } // namespace sessions | 149 } // namespace sessions |
137 } // namespace syncer | 150 } // namespace syncer |
138 | 151 |
139 #endif // SYNC_SESSIONS_NUDGE_TRACKER_H_ | 152 #endif // SYNC_SESSIONS_NUDGE_TRACKER_H_ |
OLD | NEW |