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

Side by Side Diff: chrome/browser/chromeos/drive/job_scheduler.cc

Issue 1124813003: [chrome/browser/chromeos/drive] Avoid use of MessageLoopProxy by use of TTRH (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/chromeos/drive/job_scheduler.h" 5 #include "chrome/browser/chromeos/drive/job_scheduler.h"
6 6
7 #include "base/files/file_util.h" 7 #include "base/files/file_util.h"
8 #include "base/message_loop/message_loop.h"
9 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
10 #include "base/prefs/pref_service.h" 9 #include "base/prefs/pref_service.h"
11 #include "base/rand_util.h" 10 #include "base/rand_util.h"
12 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
13 #include "base/thread_task_runner_handle.h"
14 #include "chrome/browser/drive/event_logger.h" 14 #include "chrome/browser/drive/event_logger.h"
15 #include "chrome/common/pref_names.h" 15 #include "chrome/common/pref_names.h"
16 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
17 #include "google_apis/drive/drive_api_parser.h" 17 #include "google_apis/drive/drive_api_parser.h"
18 18
19 using content::BrowserThread; 19 using content::BrowserThread;
20 20
21 namespace drive { 21 namespace drive {
22 22
23 namespace { 23 namespace {
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 for (size_t i = 0; i < jobs.size(); ++i) { 777 for (size_t i = 0; i < jobs.size(); ++i) {
778 JobEntry* job = job_map_.Lookup(jobs[i]); 778 JobEntry* job = job_map_.Lookup(jobs[i]);
779 DCHECK(job); 779 DCHECK(job);
780 AbortNotRunningJob(job, google_apis::DRIVE_NO_CONNECTION); 780 AbortNotRunningJob(job, google_apis::DRIVE_NO_CONNECTION);
781 } 781 }
782 } 782 }
783 783
784 // Wait when throttled. 784 // Wait when throttled.
785 const base::Time now = base::Time::Now(); 785 const base::Time now = base::Time::Now();
786 if (now < wait_until_) { 786 if (now < wait_until_) {
787 base::MessageLoopProxy::current()->PostDelayedTask( 787 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
788 FROM_HERE, 788 FROM_HERE, base::Bind(&JobScheduler::DoJobLoop,
789 base::Bind(&JobScheduler::DoJobLoop, 789 weak_ptr_factory_.GetWeakPtr(), queue_type),
790 weak_ptr_factory_.GetWeakPtr(),
791 queue_type),
792 wait_until_ - now); 790 wait_until_ - now);
793 return; 791 return;
794 } 792 }
795 793
796 // Run the job with the highest priority in the queue. 794 // Run the job with the highest priority in the queue.
797 JobID job_id = -1; 795 JobID job_id = -1;
798 if (!queue_[queue_type]->PopForRun(accepted_priority, &job_id)) 796 if (!queue_[queue_type]->PopForRun(accepted_priority, &job_id))
799 return; 797 return;
800 798
801 JobEntry* entry = job_map_.Lookup(job_id); 799 JobEntry* entry = job_map_.Lookup(job_id);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 QueueJob(job_id); 898 QueueJob(job_id);
901 } else { 899 } else {
902 NotifyJobDone(*job_info, error); 900 NotifyJobDone(*job_info, error);
903 // The job has finished, no retry will happen in the scheduler. Now we can 901 // The job has finished, no retry will happen in the scheduler. Now we can
904 // remove the job info from the map. 902 // remove the job info from the map.
905 job_map_.Remove(job_id); 903 job_map_.Remove(job_id);
906 } 904 }
907 905
908 // Post a task to continue the job loop. This allows us to finish handling 906 // Post a task to continue the job loop. This allows us to finish handling
909 // the current job before starting the next one. 907 // the current job before starting the next one.
910 base::MessageLoopProxy::current()->PostTask(FROM_HERE, 908 base::ThreadTaskRunnerHandle::Get()->PostTask(
911 base::Bind(&JobScheduler::DoJobLoop, 909 FROM_HERE, base::Bind(&JobScheduler::DoJobLoop,
912 weak_ptr_factory_.GetWeakPtr(), 910 weak_ptr_factory_.GetWeakPtr(), queue_type));
913 queue_type));
914 return !should_retry; 911 return !should_retry;
915 } 912 }
916 913
917 void JobScheduler::OnGetFileListJobDone( 914 void JobScheduler::OnGetFileListJobDone(
918 JobID job_id, 915 JobID job_id,
919 const google_apis::FileListCallback& callback, 916 const google_apis::FileListCallback& callback,
920 google_apis::DriveApiErrorCode error, 917 google_apis::DriveApiErrorCode error,
921 scoped_ptr<google_apis::FileList> file_list) { 918 scoped_ptr<google_apis::FileList> file_list) {
922 DCHECK_CURRENTLY_ON(BrowserThread::UI); 919 DCHECK_CURRENTLY_ON(BrowserThread::UI);
923 DCHECK(!callback.is_null()); 920 DCHECK(!callback.is_null());
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1131 job->job_info.ToString().c_str(), 1128 job->job_info.ToString().c_str(),
1132 DriveApiErrorCodeToString(error).c_str(), 1129 DriveApiErrorCodeToString(error).c_str(),
1133 base::Int64ToString(elapsed.InMilliseconds()).c_str(), 1130 base::Int64ToString(elapsed.InMilliseconds()).c_str(),
1134 GetQueueInfo(queue_type).c_str()); 1131 GetQueueInfo(queue_type).c_str());
1135 1132
1136 base::Callback<void(google_apis::DriveApiErrorCode)> callback = 1133 base::Callback<void(google_apis::DriveApiErrorCode)> callback =
1137 job->abort_callback; 1134 job->abort_callback;
1138 queue_[GetJobQueueType(job->job_info.job_type)]->Remove(job->job_info.job_id); 1135 queue_[GetJobQueueType(job->job_info.job_type)]->Remove(job->job_info.job_id);
1139 NotifyJobDone(job->job_info, error); 1136 NotifyJobDone(job->job_info, error);
1140 job_map_.Remove(job->job_info.job_id); 1137 job_map_.Remove(job->job_info.job_id);
1141 base::MessageLoopProxy::current()->PostTask(FROM_HERE, 1138 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
1142 base::Bind(callback, error)); 1139 base::Bind(callback, error));
1143 } 1140 }
1144 1141
1145 void JobScheduler::NotifyJobAdded(const JobInfo& job_info) { 1142 void JobScheduler::NotifyJobAdded(const JobInfo& job_info) {
1146 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1143 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1147 FOR_EACH_OBSERVER(JobListObserver, observer_list_, OnJobAdded(job_info)); 1144 FOR_EACH_OBSERVER(JobListObserver, observer_list_, OnJobAdded(job_info));
1148 } 1145 }
1149 1146
1150 void JobScheduler::NotifyJobDone(const JobInfo& job_info, 1147 void JobScheduler::NotifyJobDone(const JobInfo& job_info,
1151 google_apis::DriveApiErrorCode error) { 1148 google_apis::DriveApiErrorCode error) {
1152 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1149 DCHECK_CURRENTLY_ON(BrowserThread::UI);
(...skipping 18 matching lines...) Expand all
1171 case FILE_QUEUE: 1168 case FILE_QUEUE:
1172 return "FILE_QUEUE"; 1169 return "FILE_QUEUE";
1173 case NUM_QUEUES: 1170 case NUM_QUEUES:
1174 break; // This value is just a sentinel. Should never be used. 1171 break; // This value is just a sentinel. Should never be used.
1175 } 1172 }
1176 NOTREACHED(); 1173 NOTREACHED();
1177 return ""; 1174 return "";
1178 } 1175 }
1179 1176
1180 } // namespace drive 1177 } // namespace drive
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698