| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include "chrome/browser/sync_file_system/sync_process_runner.h" | 5 #include "chrome/browser/sync_file_system/sync_process_runner.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "chrome/browser/sync_file_system/logger.h" | 8 #include "chrome/browser/sync_file_system/logger.h" |
| 9 | 9 |
| 10 namespace sync_file_system { | 10 namespace sync_file_system { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 virtual bool IsRunning() OVERRIDE { | 37 virtual bool IsRunning() OVERRIDE { |
| 38 return timer_.IsRunning(); | 38 return timer_.IsRunning(); |
| 39 } | 39 } |
| 40 | 40 |
| 41 virtual void Start(const tracked_objects::Location& from_here, | 41 virtual void Start(const tracked_objects::Location& from_here, |
| 42 const base::TimeDelta& delay, | 42 const base::TimeDelta& delay, |
| 43 const base::Closure& closure) OVERRIDE { | 43 const base::Closure& closure) OVERRIDE { |
| 44 timer_.Start(from_here, delay, closure); | 44 timer_.Start(from_here, delay, closure); |
| 45 } | 45 } |
| 46 | 46 |
| 47 virtual base::TimeTicks Now() const OVERRIDE { |
| 48 return base::TimeTicks::Now(); |
| 49 } |
| 50 |
| 47 virtual ~BaseTimerHelper() {} | 51 virtual ~BaseTimerHelper() {} |
| 48 | 52 |
| 49 private: | 53 private: |
| 50 base::OneShotTimer<SyncProcessRunner> timer_; | 54 base::OneShotTimer<SyncProcessRunner> timer_; |
| 51 | 55 |
| 52 DISALLOW_COPY_AND_ASSIGN(BaseTimerHelper); | 56 DISALLOW_COPY_AND_ASSIGN(BaseTimerHelper); |
| 53 }; | 57 }; |
| 54 | 58 |
| 55 bool WasSuccessfulSync(SyncStatusCode status) { | 59 bool WasSuccessfulSync(SyncStatusCode status) { |
| 56 return status == SYNC_STATUS_OK || | 60 return status == SYNC_STATUS_OK || |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 } | 150 } |
| 147 | 151 |
| 148 void SyncProcessRunner::Finished(const base::TimeTicks& start_time, | 152 void SyncProcessRunner::Finished(const base::TimeTicks& start_time, |
| 149 SyncStatusCode status) { | 153 SyncStatusCode status) { |
| 150 DCHECK_LT(0, running_tasks_); | 154 DCHECK_LT(0, running_tasks_); |
| 151 DCHECK_LE(running_tasks_, max_parallel_task_); | 155 DCHECK_LE(running_tasks_, max_parallel_task_); |
| 152 --running_tasks_; | 156 --running_tasks_; |
| 153 util::Log(logging::LOG_VERBOSE, FROM_HERE, | 157 util::Log(logging::LOG_VERBOSE, FROM_HERE, |
| 154 "[%s] * Finished (elapsed: %" PRId64 " sec)", | 158 "[%s] * Finished (elapsed: %" PRId64 " sec)", |
| 155 name_.c_str(), | 159 name_.c_str(), |
| 156 (base::TimeTicks::Now() - start_time).InSeconds()); | 160 (timer_helper_->Now() - start_time).InSeconds()); |
| 157 if (status == SYNC_STATUS_NO_CHANGE_TO_SYNC || | 161 if (status == SYNC_STATUS_NO_CHANGE_TO_SYNC || |
| 158 status == SYNC_STATUS_FILE_BUSY) | 162 status == SYNC_STATUS_FILE_BUSY) |
| 159 ScheduleInternal(kSyncDelayMaxInMilliseconds); | 163 ScheduleInternal(kSyncDelayMaxInMilliseconds); |
| 160 else if (!WasSuccessfulSync(status) && | 164 else if (!WasSuccessfulSync(status) && |
| 161 GetServiceState() == SYNC_SERVICE_RUNNING) | 165 GetServiceState() == SYNC_SERVICE_RUNNING) |
| 162 ScheduleInternal(kSyncDelayWithSyncError); | 166 ScheduleInternal(kSyncDelayWithSyncError); |
| 163 else | 167 else |
| 164 Schedule(); | 168 Schedule(); |
| 165 } | 169 } |
| 166 | 170 |
| 167 void SyncProcessRunner::Run() { | 171 void SyncProcessRunner::Run() { |
| 168 if (running_tasks_ >= max_parallel_task_) | 172 if (running_tasks_ >= max_parallel_task_) |
| 169 return; | 173 return; |
| 170 ++running_tasks_; | 174 ++running_tasks_; |
| 171 last_scheduled_ = base::TimeTicks::Now(); | 175 last_scheduled_ = timer_helper_->Now(); |
| 172 last_delay_ = current_delay_; | 176 last_delay_ = current_delay_; |
| 173 | 177 |
| 174 util::Log(logging::LOG_VERBOSE, FROM_HERE, | 178 util::Log(logging::LOG_VERBOSE, FROM_HERE, |
| 175 "[%s] * Started", name_.c_str()); | 179 "[%s] * Started", name_.c_str()); |
| 176 | 180 |
| 177 StartSync(base::Bind(&SyncProcessRunner::Finished, factory_.GetWeakPtr(), | 181 StartSync(base::Bind(&SyncProcessRunner::Finished, factory_.GetWeakPtr(), |
| 178 last_scheduled_)); | 182 last_scheduled_)); |
| 179 } | 183 } |
| 180 | 184 |
| 181 void SyncProcessRunner::ScheduleInternal(int64 delay) { | 185 void SyncProcessRunner::ScheduleInternal(int64 delay) { |
| 182 base::TimeDelta time_to_next = base::TimeDelta::FromMilliseconds(delay); | 186 base::TimeDelta time_to_next = base::TimeDelta::FromMilliseconds(delay); |
| 183 | 187 |
| 184 if (timer_helper_->IsRunning()) { | 188 if (timer_helper_->IsRunning()) { |
| 185 if (current_delay_ == delay) | 189 if (current_delay_ == delay) |
| 186 return; | 190 return; |
| 187 | 191 |
| 188 base::TimeDelta elapsed = base::TimeTicks::Now() - last_scheduled_; | 192 base::TimeDelta elapsed = timer_helper_->Now() - last_scheduled_; |
| 189 if (elapsed < time_to_next) { | 193 if (elapsed < time_to_next) { |
| 190 time_to_next = time_to_next - elapsed; | 194 time_to_next = time_to_next - elapsed; |
| 191 } else { | 195 } else { |
| 192 time_to_next = base::TimeDelta::FromMilliseconds( | 196 time_to_next = base::TimeDelta::FromMilliseconds( |
| 193 kSyncDelayFastInMilliseconds); | 197 kSyncDelayFastInMilliseconds); |
| 194 } | 198 } |
| 195 } | 199 } |
| 196 | 200 |
| 197 if (current_delay_ != delay) { | 201 if (current_delay_ != delay) { |
| 198 util::Log(logging::LOG_VERBOSE, FROM_HERE, | 202 util::Log(logging::LOG_VERBOSE, FROM_HERE, |
| 199 "[%s] Scheduling task in %" PRId64 " secs", | 203 "[%s] Scheduling task in %" PRId64 " secs", |
| 200 name_.c_str(), time_to_next.InSeconds()); | 204 name_.c_str(), time_to_next.InSeconds()); |
| 201 } | 205 } |
| 202 current_delay_ = delay; | 206 current_delay_ = delay; |
| 203 | 207 |
| 204 timer_helper_->Start( | 208 timer_helper_->Start( |
| 205 FROM_HERE, time_to_next, | 209 FROM_HERE, time_to_next, |
| 206 base::Bind(&SyncProcessRunner::Run, base::Unretained(this))); | 210 base::Bind(&SyncProcessRunner::Run, base::Unretained(this))); |
| 207 } | 211 } |
| 208 | 212 |
| 209 } // namespace sync_file_system | 213 } // namespace sync_file_system |
| OLD | NEW |