Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Side by Side Diff: chrome/browser/sync/engine/syncer_thread.h

Issue 6182004: [SYNC] Refactor SyncSourceInfo and add support in chrome invalidation client ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Added util functions Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 run the syncer on a thread. 5 // A class to run the syncer on a thread.
6 // This is the default implementation of SyncerThread whose Stop implementation 6 // This is the default implementation of SyncerThread whose Stop implementation
7 // does not support a timeout, but is greatly simplified. 7 // does not support a timeout, but is greatly simplified.
8 #ifndef CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_ 8 #ifndef CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_
9 #define CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_ 9 #define CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_
10 #pragma once 10 #pragma once
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 42
43 class SyncerThread : public base::RefCountedThreadSafe<SyncerThread>, 43 class SyncerThread : public base::RefCountedThreadSafe<SyncerThread>,
44 public sessions::SyncSession::Delegate { 44 public sessions::SyncSession::Delegate {
45 FRIEND_TEST_ALL_PREFIXES(SyncerThreadTest, CalculateSyncWaitTime); 45 FRIEND_TEST_ALL_PREFIXES(SyncerThreadTest, CalculateSyncWaitTime);
46 FRIEND_TEST_ALL_PREFIXES(SyncerThreadTest, CalculatePollingWaitTime); 46 FRIEND_TEST_ALL_PREFIXES(SyncerThreadTest, CalculatePollingWaitTime);
47 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Polling); 47 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Polling);
48 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Nudge); 48 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Nudge);
49 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, NudgeWithDataTypes); 49 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, NudgeWithDataTypes);
50 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, 50 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest,
51 NudgeWithDataTypesCoalesced); 51 NudgeWithDataTypesCoalesced);
52 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, NudgeWithPayloads);
53 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest,
54 NudgeWithPayloadsCoalesced);
52 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Throttling); 55 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Throttling);
53 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, AuthInvalid); 56 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, AuthInvalid);
54 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Pause); 57 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Pause);
55 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, StartWhenNotConnected); 58 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, StartWhenNotConnected);
56 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, PauseWhenNotConnected); 59 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, PauseWhenNotConnected);
57 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, StopSyncPermanently); 60 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, StopSyncPermanently);
58 friend class SyncerThreadWithSyncerTest; 61 friend class SyncerThreadWithSyncerTest;
59 friend class SyncerThreadFactory; 62 friend class SyncerThreadFactory;
60 public: 63 public:
61 // Encapsulates the parameters that make up an interval on which the 64 // Encapsulates the parameters that make up an interval on which the
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 134
132 // Nudges the syncer to sync with a delay specified. This API is for access 135 // Nudges the syncer to sync with a delay specified. This API is for access
133 // from the SyncerThread's controller and will cause a mutex lock. 136 // from the SyncerThread's controller and will cause a mutex lock.
134 virtual void NudgeSyncer(int milliseconds_from_now, NudgeSource source); 137 virtual void NudgeSyncer(int milliseconds_from_now, NudgeSource source);
135 138
136 // Same as |NudgeSyncer|, but supports tracking the datatypes that caused 139 // Same as |NudgeSyncer|, but supports tracking the datatypes that caused
137 // the nudge to occur. 140 // the nudge to occur.
138 virtual void NudgeSyncerWithDataTypes( 141 virtual void NudgeSyncerWithDataTypes(
139 int milliseconds_from_now, 142 int milliseconds_from_now,
140 NudgeSource source, 143 NudgeSource source,
141 const syncable::ModelTypeBitSet& model_type); 144 const syncable::ModelTypeBitSet& model_types);
145
146 // Same as |NudgeSyncer|, but supports including a payload for passing on to
147 // the download updates command. Datatypes with payloads are also considered
148 // to have caused a nudged to occur and treated accordingly.
149 virtual void NudgeSyncerWithPayloads(
150 int milliseconds_from_now,
151 NudgeSource source,
152 const sessions::ModelTypeMap& model_types_with_payloads);
142 153
143 void SetNotificationsEnabled(bool notifications_enabled); 154 void SetNotificationsEnabled(bool notifications_enabled);
144 155
145 // Call this when a directory is opened 156 // Call this when a directory is opened
146 void CreateSyncer(const std::string& dirname); 157 void CreateSyncer(const std::string& dirname);
147 158
148 // DDOS avoidance function. The argument and return value is in seconds 159 // DDOS avoidance function. The argument and return value is in seconds
149 static int GetRecommendedDelaySeconds(int base_delay_seconds); 160 static int GetRecommendedDelaySeconds(int base_delay_seconds);
150 161
151 protected: 162 protected:
(...skipping 30 matching lines...) Expand all
182 Syncer* syncer_; 193 Syncer* syncer_;
183 194
184 // State of the server connection. 195 // State of the server connection.
185 bool connected_; 196 bool connected_;
186 197
187 // kUnknown if there is no pending nudge. (Theoretically, there 198 // kUnknown if there is no pending nudge. (Theoretically, there
188 // could be a pending nudge of type kUnknown, so it's better to 199 // could be a pending nudge of type kUnknown, so it's better to
189 // check pending_nudge_time_.) 200 // check pending_nudge_time_.)
190 NudgeSource pending_nudge_source_; 201 NudgeSource pending_nudge_source_;
191 202
192 // BitSet of the datatypes that have triggered the current nudge 203 // Map of all datatypes that are requesting a nudge. Can be union
193 // (can be union of various bitsets when multiple nudges are coalesced) 204 // from multiple nudges that are coalesced. In addition, we
194 syncable::ModelTypeBitSet pending_nudge_types_; 205 // optionally track a payload associated with each datatype (most recent
206 // payload overwrites old ones). These payloads are used by the download
207 // updates command and can contain datatype specific information the server
208 // might use.
209 sessions::ModelTypeMap pending_nudge_types_;
195 210
196 // null iff there is no pending nudge. 211 // null iff there is no pending nudge.
197 base::TimeTicks pending_nudge_time_; 212 base::TimeTicks pending_nudge_time_;
198 213
199 // The wait interval for to the current iteration of our main loop. This is 214 // The wait interval for to the current iteration of our main loop. This is
200 // only written to by the syncer thread, and since the only reader from a 215 // only written to by the syncer thread, and since the only reader from a
201 // different thread (NudgeSync) is called at totally random times, we don't 216 // different thread (NudgeSync) is called at totally random times, we don't
202 // really need to access mutually exclusively as the data races that exist 217 // really need to access mutually exclusively as the data races that exist
203 // are intrinsic, but do so anyway and avoid using 'volatile'. 218 // are intrinsic, but do so anyway and avoid using 'volatile'.
204 WaitInterval current_wait_interval_; 219 WaitInterval current_wait_interval_;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 // Builds a SyncSourceInfo and returns whether a nudge occurred in the 288 // Builds a SyncSourceInfo and returns whether a nudge occurred in the
274 // |was_nudged| parameter. 289 // |was_nudged| parameter.
275 sessions::SyncSourceInfo GetAndResetNudgeSource(bool was_throttled, 290 sessions::SyncSourceInfo GetAndResetNudgeSource(bool was_throttled,
276 bool continue_sync_cycle, 291 bool continue_sync_cycle,
277 bool* initial_sync, 292 bool* initial_sync,
278 bool* was_nudged); 293 bool* was_nudged);
279 294
280 sessions::SyncSourceInfo MakeSyncSourceInfo( 295 sessions::SyncSourceInfo MakeSyncSourceInfo(
281 bool nudged, 296 bool nudged,
282 NudgeSource nudge_source, 297 NudgeSource nudge_source,
283 const syncable::ModelTypeBitSet& nudge_types, 298 const sessions::ModelTypeMap& model_types_with_payloads,
284 bool* initial_sync); 299 bool* initial_sync);
285 300
286 int UserIdleTime(); 301 int UserIdleTime();
287 302
288 void WaitUntilConnectedOrQuit(); 303 void WaitUntilConnectedOrQuit();
289 304
290 // The thread will remain in this method until a resume is requested 305 // The thread will remain in this method until a resume is requested
291 // or shutdown is started. 306 // or shutdown is started.
292 void PauseUntilResumedOrQuit(); 307 void PauseUntilResumedOrQuit();
293 308
(...skipping 26 matching lines...) Expand all
320 // this bounds the "nominal" poll interval, while the the actual interval 335 // this bounds the "nominal" poll interval, while the the actual interval
321 // also takes previous failures into account. 336 // also takes previous failures into account.
322 int syncer_max_interval_; 337 int syncer_max_interval_;
323 338
324 // This causes syncer to start syncing ASAP. If the rate of requests is too 339 // This causes syncer to start syncing ASAP. If the rate of requests is too
325 // high the request will be silently dropped. mutex_ should be held when 340 // high the request will be silently dropped. mutex_ should be held when
326 // this is called. 341 // this is called.
327 void NudgeSyncImpl( 342 void NudgeSyncImpl(
328 int milliseconds_from_now, 343 int milliseconds_from_now,
329 NudgeSource source, 344 NudgeSource source,
330 const syncable::ModelTypeBitSet& model_types); 345 const sessions::ModelTypeMap& model_types_with_payloads);
331 346
332 #if defined(OS_LINUX) 347 #if defined(OS_LINUX)
333 // On Linux, we need this information in order to query idle time. 348 // On Linux, we need this information in order to query idle time.
334 scoped_ptr<IdleQueryLinux> idle_query_; 349 scoped_ptr<IdleQueryLinux> idle_query_;
335 #endif 350 #endif
336 351
337 scoped_ptr<sessions::SyncSessionContext> session_context_; 352 scoped_ptr<sessions::SyncSessionContext> session_context_;
338 353
339 // Set whenever the server instructs us to stop sending it requests until 354 // Set whenever the server instructs us to stop sending it requests until
340 // a specified time, and reset for each call to SyncShare. (Note that the 355 // a specified time, and reset for each call to SyncShare. (Note that the
341 // WaitInterval::THROTTLED contract is such that we don't call SyncShare at 356 // WaitInterval::THROTTLED contract is such that we don't call SyncShare at
342 // all until the "silenced until" embargo expires.) 357 // all until the "silenced until" embargo expires.)
343 base::TimeTicks silenced_until_; 358 base::TimeTicks silenced_until_;
344 359
345 // Useful for unit tests 360 // Useful for unit tests
346 bool disable_idle_detection_; 361 bool disable_idle_detection_;
347 362
348 DISALLOW_COPY_AND_ASSIGN(SyncerThread); 363 DISALLOW_COPY_AND_ASSIGN(SyncerThread);
349 }; 364 };
350 365
351 } // namespace browser_sync 366 } // namespace browser_sync
352 367
353 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_ 368 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698