Chromium Code Reviews| Index: chrome/browser/sync/engine/sync_scheduler.cc |
| diff --git a/chrome/browser/sync/engine/sync_scheduler.cc b/chrome/browser/sync/engine/sync_scheduler.cc |
| index 7bb2d651da63693acc5cb7241bc35c4a467a7e95..241692eec05dd64cbd6a9f5dc61250e460bcd51c 100644 |
| --- a/chrome/browser/sync/engine/sync_scheduler.cc |
| +++ b/chrome/browser/sync/engine/sync_scheduler.cc |
| @@ -453,9 +453,11 @@ void SyncScheduler::ScheduleClearUserData() { |
| // functions, too. |
| void SyncScheduler::ScheduleCleanupDisabledTypes() { |
| DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| - ScheduleSyncSessionJob( |
| - TimeDelta::FromSeconds(0), SyncSessionJob::CLEANUP_DISABLED_TYPES, |
| - CreateSyncSession(SyncSourceInfo()), FROM_HERE); |
| + SyncSessionJob job(SyncSessionJob::CLEANUP_DISABLED_TYPES, TimeTicks::Now(), |
| + make_linked_ptr(CreateSyncSession(SyncSourceInfo())), |
| + false, |
| + FROM_HERE); |
| + ScheduleSyncSessionJob(job); |
| } |
| void SyncScheduler::ScheduleNudge( |
| @@ -503,9 +505,12 @@ void SyncScheduler::ScheduleNudgeWithPayloads( |
| void SyncScheduler::ScheduleClearUserDataImpl() { |
| DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| - ScheduleSyncSessionJob( |
| - TimeDelta::FromSeconds(0), SyncSessionJob::CLEAR_USER_DATA, |
| - CreateSyncSession(SyncSourceInfo()), FROM_HERE); |
| + SyncSessionJob job(SyncSessionJob::CLEAR_USER_DATA, TimeTicks::Now(), |
| + make_linked_ptr(CreateSyncSession(SyncSourceInfo())), |
| + false, |
| + FROM_HERE); |
| + |
| + ScheduleSyncSessionJob(job); |
|
tim (not reviewing)
2011/12/16 02:52:10
suggestion here and elsewhere, you could just inli
|
| } |
| void SyncScheduler::ScheduleNudgeImpl( |
| @@ -543,22 +548,18 @@ void SyncScheduler::ScheduleNudgeImpl( |
| SDVLOG(2) << "Coalescing pending nudge"; |
| pending_nudge_->session->Coalesce(*(job.session.get())); |
| - if (!IsBackingOff()) { |
| - SDVLOG(2) << "Dropping a nudge because" |
| - << " we are not in backoff and the job was coalesced"; |
| - return; |
| - } else { |
| - SDVLOG(2) << "Rescheduling pending nudge"; |
| - SyncSession* s = pending_nudge_->session.get(); |
| - job.session.reset(new SyncSession(s->context(), s->delegate(), |
| - s->source(), s->routing_info(), s->workers())); |
| - pending_nudge_.reset(); |
| - } |
| + SDVLOG(2) << "Rescheduling pending nudge"; |
| + SyncSession* s = pending_nudge_->session.get(); |
| + job.session.reset(new SyncSession(s->context(), s->delegate(), |
| + s->source(), s->routing_info(), s->workers())); |
| + |
| + // Choose the start time as the earliest of the 2. |
| + job.scheduled_start = std::min(job.scheduled_start, |
| + pending_nudge_->scheduled_start); |
| + pending_nudge_.reset(); |
| } |
| - // TODO(lipalani) - pass the job itself to ScheduleSyncSessionJob. |
| - ScheduleSyncSessionJob(delay, SyncSessionJob::NUDGE, job.session.release(), |
| - nudge_location); |
| + ScheduleSyncSessionJob(job); |
| } |
| // Helper to extract the routing info and workers corresponding to types in |
| @@ -637,8 +638,11 @@ void SyncScheduler::ScheduleConfigImpl( |
| syncable::ModelTypePayloadMapFromRoutingInfo( |
| routing_info, std::string())), |
| routing_info, workers); |
| - ScheduleSyncSessionJob(TimeDelta::FromSeconds(0), |
| - SyncSessionJob::CONFIGURATION, session, FROM_HERE); |
| + SyncSessionJob job(SyncSessionJob::CONFIGURATION, TimeTicks::Now(), |
| + make_linked_ptr(session), |
| + false, |
| + FROM_HERE); |
| + ScheduleSyncSessionJob(job); |
| } |
| const char* SyncScheduler::GetModeString(SyncScheduler::Mode mode) { |
| @@ -684,25 +688,23 @@ void SyncScheduler::PostDelayedTask( |
| sync_loop_->PostDelayedTask(from_here, task, delay_ms); |
| } |
| -void SyncScheduler::ScheduleSyncSessionJob( |
| - const base::TimeDelta& delay, |
| - SyncSessionJob::SyncSessionJobPurpose purpose, |
| - sessions::SyncSession* session, |
| - const tracked_objects::Location& from_here) { |
| +void SyncScheduler::ScheduleSyncSessionJob(const SyncSessionJob& job) { |
| DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| - SDVLOG_LOC(from_here, 2) |
| + TimeDelta delay = job.scheduled_start - TimeTicks::Now(); |
| + if (delay < TimeDelta::FromMilliseconds(0)) |
| + delay = TimeDelta::FromMilliseconds(0); |
| + SDVLOG_LOC(job.from_here, 2) |
| << "In ScheduleSyncSessionJob with " |
| - << SyncSessionJob::GetPurposeString(purpose) |
| + << SyncSessionJob::GetPurposeString(job.purpose) |
| << " job and " << delay.InMilliseconds() << " ms delay"; |
| - SyncSessionJob job(purpose, TimeTicks::Now() + delay, |
| - make_linked_ptr(session), false, from_here); |
| - if (purpose == SyncSessionJob::NUDGE) { |
| - SDVLOG_LOC(from_here, 2) << "Resetting pending_nudge"; |
| - DCHECK(!pending_nudge_.get() || pending_nudge_->session.get() == session); |
| + if (job.purpose == SyncSessionJob::NUDGE) { |
| + SDVLOG_LOC(job.from_here, 2) << "Resetting pending_nudge"; |
| + DCHECK(!pending_nudge_.get() || pending_nudge_->session.get() == |
| + job.session); |
| pending_nudge_.reset(new SyncSessionJob(job)); |
| } |
| - PostDelayedTask(from_here, "DoSyncSessionJob", |
| + PostDelayedTask(job.from_here, "DoSyncSessionJob", |
| base::Bind(&SyncScheduler::DoSyncSessionJob, |
| weak_ptr_factory_.GetWeakPtr(), |
| job), |
| @@ -1082,8 +1084,13 @@ void SyncScheduler::PollTimerCallback() { |
| syncable::ModelTypePayloadMapFromRoutingInfo(r, std::string()); |
| SyncSourceInfo info(GetUpdatesCallerInfo::PERIODIC, types_with_payloads); |
| SyncSession* s = CreateSyncSession(info); |
| - ScheduleSyncSessionJob(TimeDelta::FromSeconds(0), SyncSessionJob::POLL, s, |
| - FROM_HERE); |
| + |
| + SyncSessionJob job(SyncSessionJob::POLL, TimeTicks::Now(), |
| + make_linked_ptr(s), |
| + false, |
| + FROM_HERE); |
| + |
| + ScheduleSyncSessionJob(job); |
| } |
| void SyncScheduler::Unthrottle() { |