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

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: Self review. Fix compile error 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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
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_type);
142 145
146 virtual void NudgeSyncerWithPayloads(
147 int milliseconds_from_now,
148 NudgeSource source,
149 const std::vector<std::string>& payloads);
150
151
143 void SetNotificationsEnabled(bool notifications_enabled); 152 void SetNotificationsEnabled(bool notifications_enabled);
144 153
145 // Call this when a directory is opened 154 // Call this when a directory is opened
146 void CreateSyncer(const std::string& dirname); 155 void CreateSyncer(const std::string& dirname);
147 156
148 // DDOS avoidance function. The argument and return value is in seconds 157 // DDOS avoidance function. The argument and return value is in seconds
149 static int GetRecommendedDelaySeconds(int base_delay_seconds); 158 static int GetRecommendedDelaySeconds(int base_delay_seconds);
150 159
151 protected: 160 protected:
152 virtual void ThreadMain(); 161 virtual void ThreadMain();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 195
187 // kUnknown if there is no pending nudge. (Theoretically, there 196 // kUnknown if there is no pending nudge. (Theoretically, there
188 // could be a pending nudge of type kUnknown, so it's better to 197 // could be a pending nudge of type kUnknown, so it's better to
189 // check pending_nudge_time_.) 198 // check pending_nudge_time_.)
190 NudgeSource pending_nudge_source_; 199 NudgeSource pending_nudge_source_;
191 200
192 // BitSet of the datatypes that have triggered the current nudge 201 // BitSet of the datatypes that have triggered the current nudge
193 // (can be union of various bitsets when multiple nudges are coalesced) 202 // (can be union of various bitsets when multiple nudges are coalesced)
194 syncable::ModelTypeBitSet pending_nudge_types_; 203 syncable::ModelTypeBitSet pending_nudge_types_;
195 204
205 // Payloads associated with each of the datatypes we're polling on.
206 // These payloads are used by the download updates command and can contain
207 // datatype specific information the server might use, such as which
208 // datacenter to poll from.
tim (not reviewing) 2011/01/11 23:20:02 re: last bit of this comment - I'd rather not tie
Nicolas Zea 2011/01/12 00:11:37 Done.
209 std::vector<std::string> datatype_payloads_;
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_;
205 220
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 syncable::ModelTypeBitSet& nudge_types,
299 const std::vector<std::string>& payloads,
284 bool* initial_sync); 300 bool* initial_sync);
285 301
286 int UserIdleTime(); 302 int UserIdleTime();
287 303
288 void WaitUntilConnectedOrQuit(); 304 void WaitUntilConnectedOrQuit();
289 305
290 // The thread will remain in this method until a resume is requested 306 // The thread will remain in this method until a resume is requested
291 // or shutdown is started. 307 // or shutdown is started.
292 void PauseUntilResumedOrQuit(); 308 void PauseUntilResumedOrQuit();
293 309
(...skipping 26 matching lines...) Expand all
320 // this bounds the "nominal" poll interval, while the the actual interval 336 // this bounds the "nominal" poll interval, while the the actual interval
321 // also takes previous failures into account. 337 // also takes previous failures into account.
322 int syncer_max_interval_; 338 int syncer_max_interval_;
323 339
324 // This causes syncer to start syncing ASAP. If the rate of requests is too 340 // 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 341 // high the request will be silently dropped. mutex_ should be held when
326 // this is called. 342 // this is called.
327 void NudgeSyncImpl( 343 void NudgeSyncImpl(
328 int milliseconds_from_now, 344 int milliseconds_from_now,
329 NudgeSource source, 345 NudgeSource source,
330 const syncable::ModelTypeBitSet& model_types); 346 const syncable::ModelTypeBitSet& model_types,
347 const std::vector<std::string>& payloads);
331 348
332 #if defined(OS_LINUX) 349 #if defined(OS_LINUX)
333 // On Linux, we need this information in order to query idle time. 350 // On Linux, we need this information in order to query idle time.
334 scoped_ptr<IdleQueryLinux> idle_query_; 351 scoped_ptr<IdleQueryLinux> idle_query_;
335 #endif 352 #endif
336 353
337 scoped_ptr<sessions::SyncSessionContext> session_context_; 354 scoped_ptr<sessions::SyncSessionContext> session_context_;
338 355
339 // Set whenever the server instructs us to stop sending it requests until 356 // 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 357 // 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 358 // WaitInterval::THROTTLED contract is such that we don't call SyncShare at
342 // all until the "silenced until" embargo expires.) 359 // all until the "silenced until" embargo expires.)
343 base::TimeTicks silenced_until_; 360 base::TimeTicks silenced_until_;
344 361
345 // Useful for unit tests 362 // Useful for unit tests
346 bool disable_idle_detection_; 363 bool disable_idle_detection_;
347 364
348 DISALLOW_COPY_AND_ASSIGN(SyncerThread); 365 DISALLOW_COPY_AND_ASSIGN(SyncerThread);
349 }; 366 };
350 367
351 } // namespace browser_sync 368 } // namespace browser_sync
352 369
353 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_ 370 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698