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

Unified Diff: chrome/browser/sync/engine/syncer_thread_pthreads.cc

Issue 214033: Use chrome/base synchronization primitives and threads instead of... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/engine/syncer_thread_pthreads.cc
===================================================================
--- chrome/browser/sync/engine/syncer_thread_pthreads.cc (revision 26372)
+++ chrome/browser/sync/engine/syncer_thread_pthreads.cc (working copy)
@@ -1,9 +1,8 @@
// 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.
+#include "chrome/browser/sync/engine/syncer_thread_pthreads.h"
-#include "chrome/browser/sync/engine/syncer_thread.h"
-
#include "build/build_config.h"
#ifdef OS_MACOSX
@@ -108,7 +107,18 @@
namespace browser_sync {
-bool SyncerThread::NudgeSyncer(int milliseconds_from_now, NudgeSource source) {
+SyncerThreadPthreads::SyncerThreadPthreads(
+ ClientCommandChannel* command_channel,
+ syncable::DirectoryManager* mgr,
+ ServerConnectionManager* connection_manager,
+ AllStatus* all_status, ModelSafeWorker* model_safe_worker)
+ : SyncerThread() {
+ impl_.reset(new SyncerThreadPthreadImpl(command_channel, mgr,
+ connection_manager, all_status, model_safe_worker));
+}
+
+bool SyncerThreadPthreadImpl::NudgeSyncer(int milliseconds_from_now,
+ SyncerThread::NudgeSource source) {
MutexLock lock(&mutex_);
if (syncer_ == NULL) {
return false;
@@ -118,10 +128,11 @@
}
void* RunSyncerThread(void* syncer_thread) {
- return (reinterpret_cast<SyncerThread*>(syncer_thread))->ThreadMain();
+ return (reinterpret_cast<SyncerThreadPthreadImpl*>(
+ syncer_thread))->ThreadMain();
}
-SyncerThread::SyncerThread(
+SyncerThreadPthreadImpl::SyncerThreadPthreadImpl(
ClientCommandChannel* command_channel,
syncable::DirectoryManager* mgr,
ServerConnectionManager* connection_manager,
@@ -129,10 +140,12 @@
ModelSafeWorker* model_safe_worker)
: dirman_(mgr), scm_(connection_manager),
syncer_(NULL), syncer_events_(NULL), thread_running_(false),
- syncer_short_poll_interval_seconds_(kDefaultShortPollIntervalSeconds),
- syncer_long_poll_interval_seconds_(kDefaultLongPollIntervalSeconds),
- syncer_polling_interval_(kDefaultShortPollIntervalSeconds),
- syncer_max_interval_(kDefaultMaxPollIntervalMs),
+ syncer_short_poll_interval_seconds_(
+ SyncerThread::kDefaultShortPollIntervalSeconds),
+ syncer_long_poll_interval_seconds_(
+ SyncerThread::kDefaultLongPollIntervalSeconds),
+ syncer_polling_interval_(SyncerThread::kDefaultShortPollIntervalSeconds),
+ syncer_max_interval_(SyncerThread::kDefaultMaxPollIntervalMs),
stop_syncer_thread_(false), connected_(false), conn_mgr_hookup_(NULL),
p2p_authenticated_(false), p2p_subscribed_(false),
allstatus_(all_status), talk_mediator_hookup_(NULL),
@@ -145,7 +158,8 @@
if (dirman_) {
directory_manager_hookup_.reset(NewEventListenerHookup(
- dirman_->channel(), this, &SyncerThread::HandleDirectoryManagerEvent));
+ dirman_->channel(), this,
+ &SyncerThreadPthreadImpl::HandleDirectoryManagerEvent));
}
if (scm_) {
@@ -157,7 +171,7 @@
}
}
-SyncerThread::~SyncerThread() {
+SyncerThreadPthreadImpl::~SyncerThreadPthreadImpl() {
client_command_hookup_.reset();
conn_mgr_hookup_.reset();
syncer_event_channel_.reset();
@@ -171,7 +185,7 @@
// Creates and starts a syncer thread.
// Returns true if it creates a thread or if there's currently a thread running
// and false otherwise.
-bool SyncerThread::Start() {
+bool SyncerThreadPthreadImpl::Start() {
MutexLock lock(&mutex_);
if (thread_running_) {
return true;
@@ -186,7 +200,7 @@
// Stop processing. A max wait of at least 2*server RTT time is recommended.
// Returns true if we stopped, false otherwise.
-bool SyncerThread::Stop(int max_wait) {
+bool SyncerThreadPthreadImpl::Stop(int max_wait) {
MutexLock lock(&mutex_);
if (!thread_running_)
return true;
@@ -210,13 +224,15 @@
return true;
}
-void SyncerThread::WatchClientCommands(ClientCommandChannel* channel) {
+void SyncerThreadPthreadImpl::WatchClientCommands(
+ ClientCommandChannel* channel) {
PThreadScopedLock<PThreadMutex> lock(&mutex_);
client_command_hookup_.reset(NewEventListenerHookup(channel, this,
- &SyncerThread::HandleClientCommand));
+ &SyncerThreadPthreadImpl::HandleClientCommand));
}
-void SyncerThread::HandleClientCommand(ClientCommandChannel::EventType event) {
+void SyncerThreadPthreadImpl::HandleClientCommand(
+ ClientCommandChannel::EventType event) {
if (!event) {
return;
}
@@ -231,7 +247,7 @@
}
}
-void SyncerThread::ThreadMainLoop() {
+void SyncerThreadPthreadImpl::ThreadMainLoop() {
// Use the short poll value by default.
int poll_seconds = syncer_short_poll_interval_seconds_;
int user_idle_milliseconds = 0;
@@ -290,7 +306,7 @@
// We check how long the user's been idle and sync less often if the machine is
// not in use. The aim is to reduce server load.
-int SyncerThread::CalculatePollingWaitTime(
+int SyncerThreadPthreadImpl::CalculatePollingWaitTime(
const AllStatus::Status& status,
int last_poll_wait, // in s
int* user_idle_milliseconds,
@@ -343,7 +359,7 @@
return actual_next_wait;
}
-void* SyncerThread::ThreadMain() {
+void* SyncerThreadPthreadImpl::ThreadMain() {
NameCurrentThreadForDebugging("SyncEngine_SyncerThread");
mutex_.Lock();
ThreadMainLoop();
@@ -354,7 +370,7 @@
return 0;
}
-void SyncerThread::SyncMain(Syncer* syncer) {
+void SyncerThreadPthreadImpl::SyncMain(Syncer* syncer) {
CHECK(syncer);
mutex_.Unlock();
while (syncer->SyncShare()) {
@@ -365,14 +381,14 @@
mutex_.Lock();
}
-void SyncerThread::UpdateNudgeSource(const timespec& now,
+void SyncerThreadPthreadImpl::UpdateNudgeSource(const timespec& now,
bool* continue_sync_cycle,
bool* initial_sync) {
bool nudged = false;
- NudgeSource nudge_source = kUnknown;
+ SyncerThread::NudgeSource nudge_source = SyncerThread::kUnknown;
// Has the previous sync cycle completed?
if (continue_sync_cycle) {
- nudge_source = kContinuation;
+ nudge_source = SyncerThread::kContinuation;
}
// Update the nudge source if a new nudge has come through during the
// previous sync cycle.
@@ -387,8 +403,8 @@
SetUpdatesSource(nudged, nudge_source, initial_sync);
}
-void SyncerThread::SetUpdatesSource(bool nudged, NudgeSource nudge_source,
- bool* initial_sync) {
+void SyncerThreadPthreadImpl::SetUpdatesSource(bool nudged,
+ SyncerThread::NudgeSource nudge_source, bool* initial_sync) {
sync_pb::GetUpdatesCallerInfo::GET_UPDATES_SOURCE updates_source =
sync_pb::GetUpdatesCallerInfo::UNKNOWN;
if (*initial_sync) {
@@ -398,16 +414,16 @@
updates_source = sync_pb::GetUpdatesCallerInfo::PERIODIC;
} else {
switch (nudge_source) {
- case kNotification:
+ case SyncerThread::kNotification:
updates_source = sync_pb::GetUpdatesCallerInfo::NOTIFICATION;
break;
- case kLocal:
+ case SyncerThread::kLocal:
updates_source = sync_pb::GetUpdatesCallerInfo::LOCAL;
break;
- case kContinuation:
+ case SyncerThread::kContinuation:
updates_source = sync_pb::GetUpdatesCallerInfo::SYNC_CYCLE_CONTINUATION;
break;
- case kUnknown:
+ case SyncerThread::kUnknown:
default:
updates_source = sync_pb::GetUpdatesCallerInfo::UNKNOWN;
break;
@@ -416,16 +432,16 @@
syncer_->set_updates_source(updates_source);
}
-void SyncerThread::HandleSyncerEvent(const SyncerEvent& event) {
+void SyncerThreadPthreadImpl::HandleSyncerEvent(const SyncerEvent& event) {
MutexLock lock(&mutex_);
channel()->NotifyListeners(event);
if (SyncerEvent::REQUEST_SYNC_NUDGE != event.what_happened) {
return;
}
- NudgeSyncImpl(event.nudge_delay_milliseconds, kUnknown);
+ NudgeSyncImpl(event.nudge_delay_milliseconds, SyncerThread::kUnknown);
}
-void SyncerThread::HandleDirectoryManagerEvent(
+void SyncerThreadPthreadImpl::HandleDirectoryManagerEvent(
const syncable::DirectoryManagerEvent& event) {
LOG(INFO) << "Handling a directory manager event";
if (syncable::DirectoryManagerEvent::OPENED == event.what_happened) {
@@ -439,7 +455,7 @@
syncer_->set_command_channel(command_channel_);
syncer_events_.reset(NewEventListenerHookup(
- syncer_->channel(), this, &SyncerThread::HandleSyncerEvent));
+ syncer_->channel(), this, &SyncerThreadPthreadImpl::HandleSyncerEvent));
pthread_cond_broadcast(&changed_.condvar_);
}
}
@@ -460,14 +476,15 @@
}
}
-void SyncerThread::WatchConnectionManager(ServerConnectionManager* conn_mgr) {
+void SyncerThreadPthreadImpl::WatchConnectionManager(
+ ServerConnectionManager* conn_mgr) {
conn_mgr_hookup_.reset(NewEventListenerHookup(conn_mgr->channel(), this,
- &SyncerThread::HandleServerConnectionEvent));
+ &SyncerThreadPthreadImpl::HandleServerConnectionEvent));
CheckConnected(&connected_, conn_mgr->server_status(),
&changed_.condvar_);
}
-void SyncerThread::HandleServerConnectionEvent(
+void SyncerThreadPthreadImpl::HandleServerConnectionEvent(
const ServerConnectionEvent& event) {
if (ServerConnectionEvent::STATUS_CHANGED == event.what_happened) {
MutexLock lock(&mutex_);
@@ -476,12 +493,13 @@
}
}
-SyncerEventChannel* SyncerThread::channel() {
+SyncerEventChannel* SyncerThreadPthreadImpl::channel() {
return syncer_event_channel_.get();
}
// Inputs and return value in milliseconds.
-int SyncerThread::CalculateSyncWaitTime(int last_interval, int user_idle_ms) {
+int SyncerThreadPthreadImpl::CalculateSyncWaitTime(int last_interval,
+ int user_idle_ms) {
// syncer_polling_interval_ is in seconds
int syncer_polling_interval_ms = syncer_polling_interval_ * 1000;
@@ -502,23 +520,24 @@
}
// Called with mutex_ already locked.
-void SyncerThread::NudgeSyncImpl(int milliseconds_from_now,
- NudgeSource source) {
+void SyncerThreadPthreadImpl::NudgeSyncImpl(int milliseconds_from_now,
+ SyncerThread::NudgeSource source) {
const timespec nudge_time = GetPThreadAbsoluteTime(milliseconds_from_now);
NudgeObject nudge_object(nudge_time, source);
nudge_queue_.push(nudge_object);
pthread_cond_broadcast(&changed_.condvar_);
}
-void SyncerThread::WatchTalkMediator(TalkMediator* mediator) {
+void SyncerThreadPthreadImpl::WatchTalkMediator(TalkMediator* mediator) {
talk_mediator_hookup_.reset(
NewEventListenerHookup(
mediator->channel(),
this,
- &SyncerThread::HandleTalkMediatorEvent));
+ &SyncerThreadPthreadImpl::HandleTalkMediatorEvent));
}
-void SyncerThread::HandleTalkMediatorEvent(const TalkMediatorEvent& event) {
+void SyncerThreadPthreadImpl::HandleTalkMediatorEvent(
+ const TalkMediatorEvent& event) {
MutexLock lock(&mutex_);
switch (event.what_happened) {
case TalkMediatorEvent::LOGIN_SUCCEEDED:
@@ -534,7 +553,7 @@
p2p_subscribed_ = true;
if (NULL != syncer_) {
LOG(INFO) << "Subscriptions on. Nudging syncer for initial push.";
- NudgeSyncImpl(0, kLocal);
+ NudgeSyncImpl(0, SyncerThread::kLocal);
}
break;
case TalkMediatorEvent::SUBSCRIPTIONS_OFF:
@@ -544,7 +563,7 @@
case TalkMediatorEvent::NOTIFICATION_RECEIVED:
LOG(INFO) << "P2P: Updates on server, pushing syncer";
if (NULL != syncer_) {
- NudgeSyncImpl(0, kNotification);
+ NudgeSyncImpl(0, SyncerThread::kNotification);
}
break;
default:
@@ -556,4 +575,4 @@
}
}
-} // namespace browser_sync
+} // namespace browser_sync
« no previous file with comments | « chrome/browser/sync/engine/syncer_thread_pthreads.h ('k') | chrome/browser/sync/engine/syncer_thread_timed_stop.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698