summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/engine/syncer_thread_pthreads.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sync/engine/syncer_thread_pthreads.h')
-rw-r--r--chrome/browser/sync/engine/syncer_thread_pthreads.h284
1 files changed, 0 insertions, 284 deletions
diff --git a/chrome/browser/sync/engine/syncer_thread_pthreads.h b/chrome/browser/sync/engine/syncer_thread_pthreads.h
deleted file mode 100644
index fb70982..0000000
--- a/chrome/browser/sync/engine/syncer_thread_pthreads.h
+++ /dev/null
@@ -1,284 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// *THIS EXISTS FOR EXPERIMENTATION AND TESTING WHILE WE REPLACE PTHREADS
-// WITH CHROME THREADS IN SYNC CODE*
-
-// A class to run the syncer on a thread. Uses PIMPL to wrap the old, original
-// pthreads implementation of SyncerThread.
-#ifndef CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_PTHREADS_H_
-#define CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_PTHREADS_H_
-
-#include <list>
-#include <map>
-#include <queue>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/scoped_ptr.h"
-#include "chrome/browser/sync/engine/all_status.h"
-#include "chrome/browser/sync/engine/client_command_channel.h"
-#include "chrome/browser/sync/util/event_sys-inl.h"
-#include "chrome/browser/sync/util/pthread_helpers.h"
-#include "chrome/browser/sync/engine/syncer_thread.h"
-#include "testing/gtest/include/gtest/gtest_prod.h" // For FRIEND_TEST
-
-class EventListenerHookup;
-
-namespace syncable {
-class DirectoryManager;
-struct DirectoryManagerEvent;
-}
-
-namespace browser_sync {
-
-class ModelSafeWorker;
-class ServerConnectionManager;
-class Syncer;
-class TalkMediator;
-class URLFactory;
-struct ServerConnectionEvent;
-struct SyncerEvent;
-struct SyncerShutdownEvent;
-struct TalkMediatorEvent;
-
-// The legacy implementation of SyncerThread using pthreads, kept around for
-// historical experimentation until a new version is finalized.
-class SyncerThreadPthreadImpl {
- public:
- virtual ~SyncerThreadPthreadImpl();
-
- virtual void WatchConnectionManager(ServerConnectionManager* conn_mgr);
- // Creates and starts a syncer thread.
- // Returns true if it creates a thread or if there's currently a thread
- // running and false otherwise.
- virtual bool Start();
-
- // Stop processing. A max wait of at least 2*server RTT time is recommended.
- // returns true if we stopped, false otherwise.
- virtual bool Stop(int max_wait);
-
- // Nudges the syncer to sync with a delay specified. This API is for access
- // from the SyncerThread's controller and will cause a mutex lock.
- virtual bool NudgeSyncer(int milliseconds_from_now,
- SyncerThread::NudgeSource source);
-
- // Registers this thread to watch talk mediator events.
- virtual void WatchTalkMediator(TalkMediator* talk_mediator);
-
- virtual void WatchClientCommands(ClientCommandChannel* channel);
-
- virtual SyncerEventChannel* channel();
-
- private:
- friend class SyncerThreadPthreads;
- SyncerThreadPthreadImpl(ClientCommandChannel* command_channel,
- syncable::DirectoryManager* mgr,
- ServerConnectionManager* connection_manager, AllStatus* all_status,
- ModelSafeWorker* model_safe_worker);
-
- // A few members to gate the rate at which we nudge the syncer.
- enum {
- kNudgeRateLimitCount = 6,
- kNudgeRateLimitTime = 180,
- };
-
- // A queue of all scheduled nudges. One insertion for every call to
- // NudgeQueue().
- typedef std::pair<timespec, SyncerThread::NudgeSource> NudgeObject;
-
- struct IsTimeSpecGreater {
- inline bool operator() (const NudgeObject& lhs, const NudgeObject& rhs) {
- return lhs.first.tv_sec == rhs.first.tv_sec ?
- lhs.first.tv_nsec > rhs.first.tv_nsec :
- lhs.first.tv_sec > rhs.first.tv_sec;
- }
- };
-
- typedef std::priority_queue<NudgeObject, std::vector<NudgeObject>,
- IsTimeSpecGreater> NudgeQueue;
-
- // Threshold multipler for how long before user should be considered idle.
- static const int kPollBackoffThresholdMultiplier = 10;
-
- friend void* RunSyncerThread(void* syncer_thread);
- void* Run();
- void HandleDirectoryManagerEvent(
- const syncable::DirectoryManagerEvent& event);
- void HandleSyncerEvent(const SyncerEvent& event);
- void HandleClientCommand(ClientCommandChannel::EventType event);
-
- void HandleServerConnectionEvent(const ServerConnectionEvent& event);
-
- void HandleTalkMediatorEvent(const TalkMediatorEvent& event);
-
- void* ThreadMain();
- void ThreadMainLoop();
-
- void SyncMain(Syncer* syncer);
-
- // Calculates the next sync wait time in seconds. last_poll_wait is the time
- // duration of the previous polling timeout which was used.
- // user_idle_milliseconds is updated by this method, and is a report of the
- // full amount of time since the last period of activity for the user. The
- // continue_sync_cycle parameter is used to determine whether or not we are
- // calculating a polling wait time that is a continuation of an sync cycle
- // which terminated while the syncer still had work to do.
- int CalculatePollingWaitTime(
- const AllStatus::Status& status,
- int last_poll_wait, // in s
- int* user_idle_milliseconds,
- bool* continue_sync_cycle);
- // Helper to above function, considers effect of user idle time.
- int CalculateSyncWaitTime(int last_wait, int user_idle_ms);
-
- // Sets the source value of the controlled syncer's updates_source value.
- // The initial sync boolean is updated if read as a sentinel. The following
- // two methods work in concert to achieve this goal.
- void UpdateNudgeSource(const timespec& now, bool* continue_sync_cycle,
- bool* initial_sync);
- void SetUpdatesSource(bool nudged, SyncerThread::NudgeSource nudge_source,
- bool* initial_sync);
-
- // For unit tests only.
- void DisableIdleDetection() { disable_idle_detection_ = true; }
-
- // False when we want to stop the thread.
- bool stop_syncer_thread_;
-
- // We use one mutex for all members except the channel.
- PThreadMutex mutex_;
- typedef PThreadScopedLock<PThreadMutex> MutexLock;
-
- // Handle of the running thread.
- pthread_t thread_;
- bool thread_running_;
-
- // Gets signaled whenever a thread outside of the syncer thread changes a
- // member variable.
- PThreadCondVar changed_;
-
- // State of the server connection.
- bool connected_;
-
- // State of the notification framework is tracked by these values.
- bool p2p_authenticated_;
- bool p2p_subscribed_;
-
- scoped_ptr<EventListenerHookup> client_command_hookup_;
- scoped_ptr<EventListenerHookup> conn_mgr_hookup_;
- const AllStatus* allstatus_;
-
- Syncer* syncer_;
-
- syncable::DirectoryManager* dirman_;
- ServerConnectionManager* scm_;
-
- // Modifiable versions of kDefaultLongPollIntervalSeconds which can be
- // updated by the server.
- int syncer_short_poll_interval_seconds_;
- int syncer_long_poll_interval_seconds_;
-
- // The time we wait between polls in seconds. This is used as lower bound on
- // our wait time. Updated once per loop from the command line flag.
- int syncer_polling_interval_;
-
- // The upper bound on the nominal wait between polls in seconds. Note that
- // this bounds the "nominal" poll interval, while the the actual interval
- // also takes previous failures into account.
- int syncer_max_interval_;
-
- scoped_ptr<SyncerEventChannel> syncer_event_channel_;
-
- // This causes syncer to start syncing ASAP. If the rate of requests is too
- // high the request will be silently dropped. mutex_ should be held when
- // this is called.
- void NudgeSyncImpl(int milliseconds_from_now,
- SyncerThread::NudgeSource source);
-
- NudgeQueue nudge_queue_;
-
- scoped_ptr<EventListenerHookup> talk_mediator_hookup_;
- ClientCommandChannel* const command_channel_;
- scoped_ptr<EventListenerHookup> directory_manager_hookup_;
- scoped_ptr<EventListenerHookup> syncer_events_;
-
- // Handles any tasks that will result in model changes (modifications of
- // syncable::Entries). Pass this to the syncer created and managed by |this|.
- // Only non-null in syncapi case.
- scoped_ptr<ModelSafeWorker> model_safe_worker_;
-
- // Useful for unit tests
- bool disable_idle_detection_;
-
- DISALLOW_COPY_AND_ASSIGN(SyncerThreadPthreadImpl);
-};
-
-// A new-version SyncerThread pimpl wrapper for the old legacy implementation.
-class SyncerThreadPthreads : public SyncerThread {
- FRIEND_TEST(SyncerThreadTest, CalculateSyncWaitTime);
- FRIEND_TEST(SyncerThreadTest, CalculatePollingWaitTime);
- FRIEND_TEST(SyncerThreadWithSyncerTest, Polling);
- FRIEND_TEST(SyncerThreadWithSyncerTest, Nudge);
- friend class SyncerThreadWithSyncerTest;
- friend class SyncerThreadFactory;
- public:
- virtual ~SyncerThreadPthreads() {}
-
- virtual void WatchConnectionManager(ServerConnectionManager* conn_mgr) {
- impl_->WatchConnectionManager(conn_mgr);
- }
- virtual bool Start() {
- return impl_->Start();
- }
- virtual bool Stop(int max_wait) {
- return impl_->Stop(max_wait);
- }
- virtual bool NudgeSyncer(int milliseconds_from_now, NudgeSource source) {
- return impl_->NudgeSyncer(milliseconds_from_now, source);
- }
- virtual void WatchTalkMediator(TalkMediator* talk_mediator) {
- impl_->WatchTalkMediator(talk_mediator);
- }
- virtual void WatchClientCommands(ClientCommandChannel* channel) {
- impl_->WatchClientCommands(channel);
- }
- virtual SyncerEventChannel* channel() {
- return impl_->channel();
- }
- protected:
- SyncerThreadPthreads(ClientCommandChannel* command_channel,
- syncable::DirectoryManager* mgr,
- ServerConnectionManager* connection_manager, AllStatus* all_status,
- ModelSafeWorker* model_safe_worker);
- virtual void SetConnected(bool connected) {
- impl_->connected_ = connected;
- }
- virtual void SetSyncerPollingInterval(int interval) {
- impl_->syncer_polling_interval_ = interval;
- }
- virtual void SetSyncerShortPollInterval(base::TimeDelta interval) {
- impl_->syncer_short_poll_interval_seconds_ = static_cast<int>(
- interval.InSeconds());
- }
- virtual void DisableIdleDetection() { impl_->disable_idle_detection_ = true; }
- virtual int CalculateSyncWaitTime(int last_wait, int user_idle_ms) {
- return impl_->CalculateSyncWaitTime(last_wait, user_idle_ms);
- }
- virtual int CalculatePollingWaitTime(
- const AllStatus::Status& status,
- int last_poll_wait, // in s
- int* user_idle_milliseconds,
- bool* continue_sync_cycle) {
- return impl_->CalculatePollingWaitTime(status, last_poll_wait,
- user_idle_milliseconds, continue_sync_cycle);
- }
- private:
- scoped_ptr<SyncerThreadPthreadImpl> impl_;
- DISALLOW_COPY_AND_ASSIGN(SyncerThreadPthreads);
-};
-
-} // namespace browser_sync
-
-#endif // CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD_PTHREADS_H_