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

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: payloads/nudge type merge 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>
akalin 2011/01/21 19:50:09 No need for this since you're using the typedef fr
Nicolas Zea 2011/01/21 21:57:44 Done.
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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 135
132 // Nudges the syncer to sync with a delay specified. This API is for access 136 // 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. 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_types);
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 sessions::SyncSourceInfo::ModelTypeMap& model_types_with_payloads);
142 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:
(...skipping 30 matching lines...) Expand all
182 Syncer* syncer_; 194 Syncer* syncer_;
183 195
184 // State of the server connection. 196 // State of the server connection.
185 bool connected_; 197 bool connected_;
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 // Map of all datatypes that are requesting a nudge. Can be union
193 // (can be union of various bitsets when multiple nudges are coalesced) 205 // from multiple nudges that are coalesced. In addition, we
194 syncable::ModelTypeBitSet pending_nudge_types_; 206 // optionally track a payload associated with each datatype (most recent
207 // payload overwrites old ones). These payloads are used by the download
208 // updates command and can contain datatype specific information the server
209 // might use.
210 sessions::SyncSourceInfo::ModelTypeMap pending_nudge_types_;
195 211
196 // null iff there is no pending nudge. 212 // null iff there is no pending nudge.
197 base::TimeTicks pending_nudge_time_; 213 base::TimeTicks pending_nudge_time_;
198 214
199 // The wait interval for to the current iteration of our main loop. This is 215 // 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 216 // 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 217 // 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 218 // really need to access mutually exclusively as the data races that exist
203 // are intrinsic, but do so anyway and avoid using 'volatile'. 219 // are intrinsic, but do so anyway and avoid using 'volatile'.
204 WaitInterval current_wait_interval_; 220 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 289 // Builds a SyncSourceInfo and returns whether a nudge occurred in the
274 // |was_nudged| parameter. 290 // |was_nudged| parameter.
275 sessions::SyncSourceInfo GetAndResetNudgeSource(bool was_throttled, 291 sessions::SyncSourceInfo GetAndResetNudgeSource(bool was_throttled,
276 bool continue_sync_cycle, 292 bool continue_sync_cycle,
277 bool* initial_sync, 293 bool* initial_sync,
278 bool* was_nudged); 294 bool* was_nudged);
279 295
280 sessions::SyncSourceInfo MakeSyncSourceInfo( 296 sessions::SyncSourceInfo MakeSyncSourceInfo(
281 bool nudged, 297 bool nudged,
282 NudgeSource nudge_source, 298 NudgeSource nudge_source,
283 const syncable::ModelTypeBitSet& nudge_types, 299 const sessions::SyncSourceInfo::ModelTypeMap& nudge_types,
akalin 2011/01/21 19:50:09 rename to model_types_with_payloads to be consiste
Nicolas Zea 2011/01/21 21:57:44 Done.
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 sessions::SyncSourceInfo::ModelTypeMap& model_types_with_payloads);
331 347
332 #if defined(OS_LINUX) 348 #if defined(OS_LINUX)
333 // On Linux, we need this information in order to query idle time. 349 // On Linux, we need this information in order to query idle time.
334 scoped_ptr<IdleQueryLinux> idle_query_; 350 scoped_ptr<IdleQueryLinux> idle_query_;
335 #endif 351 #endif
336 352
337 scoped_ptr<sessions::SyncSessionContext> session_context_; 353 scoped_ptr<sessions::SyncSessionContext> session_context_;
338 354
339 // Set whenever the server instructs us to stop sending it requests until 355 // 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 356 // 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 357 // WaitInterval::THROTTLED contract is such that we don't call SyncShare at
342 // all until the "silenced until" embargo expires.) 358 // all until the "silenced until" embargo expires.)
343 base::TimeTicks silenced_until_; 359 base::TimeTicks silenced_until_;
344 360
345 // Useful for unit tests 361 // Useful for unit tests
346 bool disable_idle_detection_; 362 bool disable_idle_detection_;
347 363
348 DISALLOW_COPY_AND_ASSIGN(SyncerThread); 364 DISALLOW_COPY_AND_ASSIGN(SyncerThread);
349 }; 365 };
350 366
351 } // namespace browser_sync 367 } // namespace browser_sync
352 368
353 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_ 369 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698