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

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: Rebase 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
11 11
12 #include <list> 12 #include <list>
13 #include <map>
13 #include <string> 14 #include <string>
14 #include <vector> 15 #include <vector>
15 16
16 #include "base/basictypes.h" 17 #include "base/basictypes.h"
17 #include "base/gtest_prod_util.h" 18 #include "base/gtest_prod_util.h"
18 #include "base/ref_counted.h" 19 #include "base/ref_counted.h"
19 #include "base/scoped_ptr.h" 20 #include "base/scoped_ptr.h"
20 #include "base/synchronization/condition_variable.h" 21 #include "base/synchronization/condition_variable.h"
21 #include "base/threading/thread.h" 22 #include "base/threading/thread.h"
22 #include "base/time.h" 23 #include "base/time.h"
(...skipping 19 matching lines...) Expand all
42 43
43 class SyncerThread : public base::RefCountedThreadSafe<SyncerThread>, 44 class SyncerThread : public base::RefCountedThreadSafe<SyncerThread>,
44 public sessions::SyncSession::Delegate { 45 public sessions::SyncSession::Delegate {
45 FRIEND_TEST_ALL_PREFIXES(SyncerThreadTest, CalculateSyncWaitTime); 46 FRIEND_TEST_ALL_PREFIXES(SyncerThreadTest, CalculateSyncWaitTime);
46 FRIEND_TEST_ALL_PREFIXES(SyncerThreadTest, CalculatePollingWaitTime); 47 FRIEND_TEST_ALL_PREFIXES(SyncerThreadTest, CalculatePollingWaitTime);
47 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Polling); 48 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Polling);
48 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Nudge); 49 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Nudge);
49 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, NudgeWithDataTypes); 50 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, NudgeWithDataTypes);
50 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, 51 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest,
51 NudgeWithDataTypesCoalesced); 52 NudgeWithDataTypesCoalesced);
53 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, NudgeWithPayloads);
54 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest,
55 NudgeWithPayloadsCoalesced);
52 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Throttling); 56 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Throttling);
53 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, AuthInvalid); 57 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, AuthInvalid);
54 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Pause); 58 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, Pause);
55 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, StartWhenNotConnected); 59 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, StartWhenNotConnected);
56 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, PauseWhenNotConnected); 60 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, PauseWhenNotConnected);
57 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, StopSyncPermanently); 61 FRIEND_TEST_ALL_PREFIXES(SyncerThreadWithSyncerTest, StopSyncPermanently);
58 friend class SyncerThreadWithSyncerTest; 62 friend class SyncerThreadWithSyncerTest;
59 friend class SyncerThreadFactory; 63 friend class SyncerThreadFactory;
60 public: 64 public:
61 // Encapsulates the parameters that make up an interval on which the 65 // 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. 137 // from the SyncerThread's controller and will cause a mutex lock.
134 virtual void NudgeSyncer(int milliseconds_from_now, NudgeSource source); 138 virtual void NudgeSyncer(int milliseconds_from_now, NudgeSource source);
135 139
136 // Same as |NudgeSyncer|, but supports tracking the datatypes that caused 140 // Same as |NudgeSyncer|, but supports tracking the datatypes that caused
137 // the nudge to occur. 141 // the nudge to occur.
138 virtual void NudgeSyncerWithDataTypes( 142 virtual void NudgeSyncerWithDataTypes(
139 int milliseconds_from_now, 143 int milliseconds_from_now,
140 NudgeSource source, 144 NudgeSource source,
141 const syncable::ModelTypeBitSet& model_type); 145 const syncable::ModelTypeBitSet& model_type);
142 146
147 // Same as |NudgeSyncer|, but supports including a payload for passing on to
148 // the download updates command. Datatypes with payloads are also considered
149 // to have caused a nudged to occur and treated accordingly.
150 virtual void NudgeSyncerWithPayloads(
151 int milliseconds_from_now,
152 NudgeSource source,
153 const std::map<syncable::ModelType, std::string>& payloads);
154
143 void SetNotificationsEnabled(bool notifications_enabled); 155 void SetNotificationsEnabled(bool notifications_enabled);
144 156
145 // Call this when a directory is opened 157 // Call this when a directory is opened
146 void CreateSyncer(const std::string& dirname); 158 void CreateSyncer(const std::string& dirname);
147 159
148 // DDOS avoidance function. The argument and return value is in seconds 160 // DDOS avoidance function. The argument and return value is in seconds
149 static int GetRecommendedDelaySeconds(int base_delay_seconds); 161 static int GetRecommendedDelaySeconds(int base_delay_seconds);
150 162
151 protected: 163 protected:
152 virtual void ThreadMain(); 164 virtual void ThreadMain();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 198
187 // kUnknown if there is no pending nudge. (Theoretically, there 199 // kUnknown if there is no pending nudge. (Theoretically, there
188 // could be a pending nudge of type kUnknown, so it's better to 200 // could be a pending nudge of type kUnknown, so it's better to
189 // check pending_nudge_time_.) 201 // check pending_nudge_time_.)
190 NudgeSource pending_nudge_source_; 202 NudgeSource pending_nudge_source_;
191 203
192 // BitSet of the datatypes that have triggered the current nudge 204 // BitSet of the datatypes that have triggered the current nudge
193 // (can be union of various bitsets when multiple nudges are coalesced) 205 // (can be union of various bitsets when multiple nudges are coalesced)
194 syncable::ModelTypeBitSet pending_nudge_types_; 206 syncable::ModelTypeBitSet pending_nudge_types_;
195 207
208 // Payloads associated with each of the datatypes we're polling on.
209 // These payloads are used by the download updates command and can contain
210 // datatype specific information the server might use.
211 std::vector<std::string> datatype_payloads_;
212
196 // null iff there is no pending nudge. 213 // null iff there is no pending nudge.
197 base::TimeTicks pending_nudge_time_; 214 base::TimeTicks pending_nudge_time_;
198 215
199 // The wait interval for to the current iteration of our main loop. This is 216 // 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 217 // 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 218 // 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 219 // really need to access mutually exclusively as the data races that exist
203 // are intrinsic, but do so anyway and avoid using 'volatile'. 220 // are intrinsic, but do so anyway and avoid using 'volatile'.
204 WaitInterval current_wait_interval_; 221 WaitInterval current_wait_interval_;
205 222
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 // |was_nudged| parameter. 291 // |was_nudged| parameter.
275 sessions::SyncSourceInfo GetAndResetNudgeSource(bool was_throttled, 292 sessions::SyncSourceInfo GetAndResetNudgeSource(bool was_throttled,
276 bool continue_sync_cycle, 293 bool continue_sync_cycle,
277 bool* initial_sync, 294 bool* initial_sync,
278 bool* was_nudged); 295 bool* was_nudged);
279 296
280 sessions::SyncSourceInfo MakeSyncSourceInfo( 297 sessions::SyncSourceInfo MakeSyncSourceInfo(
281 bool nudged, 298 bool nudged,
282 NudgeSource nudge_source, 299 NudgeSource nudge_source,
283 const syncable::ModelTypeBitSet& nudge_types, 300 const syncable::ModelTypeBitSet& nudge_types,
301 const std::vector<std::string>& payloads,
284 bool* initial_sync); 302 bool* initial_sync);
285 303
286 int UserIdleTime(); 304 int UserIdleTime();
287 305
288 void WaitUntilConnectedOrQuit(); 306 void WaitUntilConnectedOrQuit();
289 307
290 // The thread will remain in this method until a resume is requested 308 // The thread will remain in this method until a resume is requested
291 // or shutdown is started. 309 // or shutdown is started.
292 void PauseUntilResumedOrQuit(); 310 void PauseUntilResumedOrQuit();
293 311
(...skipping 26 matching lines...) Expand all
320 // this bounds the "nominal" poll interval, while the the actual interval 338 // this bounds the "nominal" poll interval, while the the actual interval
321 // also takes previous failures into account. 339 // also takes previous failures into account.
322 int syncer_max_interval_; 340 int syncer_max_interval_;
323 341
324 // This causes syncer to start syncing ASAP. If the rate of requests is too 342 // 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 343 // high the request will be silently dropped. mutex_ should be held when
326 // this is called. 344 // this is called.
327 void NudgeSyncImpl( 345 void NudgeSyncImpl(
328 int milliseconds_from_now, 346 int milliseconds_from_now,
329 NudgeSource source, 347 NudgeSource source,
330 const syncable::ModelTypeBitSet& model_types); 348 const syncable::ModelTypeBitSet& model_types,
349 const std::map<syncable::ModelType, std::string>& payloads);
331 350
332 #if defined(OS_LINUX) 351 #if defined(OS_LINUX)
333 // On Linux, we need this information in order to query idle time. 352 // On Linux, we need this information in order to query idle time.
334 scoped_ptr<IdleQueryLinux> idle_query_; 353 scoped_ptr<IdleQueryLinux> idle_query_;
335 #endif 354 #endif
336 355
337 scoped_ptr<sessions::SyncSessionContext> session_context_; 356 scoped_ptr<sessions::SyncSessionContext> session_context_;
338 357
339 // Set whenever the server instructs us to stop sending it requests until 358 // 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 359 // 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 360 // WaitInterval::THROTTLED contract is such that we don't call SyncShare at
342 // all until the "silenced until" embargo expires.) 361 // all until the "silenced until" embargo expires.)
343 base::TimeTicks silenced_until_; 362 base::TimeTicks silenced_until_;
344 363
345 // Useful for unit tests 364 // Useful for unit tests
346 bool disable_idle_detection_; 365 bool disable_idle_detection_;
347 366
348 DISALLOW_COPY_AND_ASSIGN(SyncerThread); 367 DISALLOW_COPY_AND_ASSIGN(SyncerThread);
349 }; 368 };
350 369
351 } // namespace browser_sync 370 } // namespace browser_sync
352 371
353 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_ 372 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698