OLD | NEW |
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/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "base/rand_util.h" | 9 #include "base/rand_util.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 void JobScheduler::QueueJob(JobID job_id) { | 685 void JobScheduler::QueueJob(JobID job_id) { |
686 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 686 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
687 | 687 |
688 JobEntry* job_entry = job_map_.Lookup(job_id); | 688 JobEntry* job_entry = job_map_.Lookup(job_id); |
689 DCHECK(job_entry); | 689 DCHECK(job_entry); |
690 const JobInfo& job_info = job_entry->job_info; | 690 const JobInfo& job_info = job_entry->job_info; |
691 | 691 |
692 QueueType queue_type = GetJobQueueType(job_info.job_type); | 692 QueueType queue_type = GetJobQueueType(job_info.job_type); |
693 queue_[queue_type]->Push(job_id, job_entry->context.type); | 693 queue_[queue_type]->Push(job_id, job_entry->context.type); |
694 | 694 |
695 util::Log("Job queued: %s - %s", job_info.ToString().c_str(), | 695 util::Log(logging::LOG_INFO, |
| 696 "Job queued: %s - %s", |
| 697 job_info.ToString().c_str(), |
696 GetQueueInfo(queue_type).c_str()); | 698 GetQueueInfo(queue_type).c_str()); |
697 } | 699 } |
698 | 700 |
699 void JobScheduler::DoJobLoop(QueueType queue_type) { | 701 void JobScheduler::DoJobLoop(QueueType queue_type) { |
700 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 702 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
701 | 703 |
702 const int accepted_priority = GetCurrentAcceptedPriority(queue_type); | 704 const int accepted_priority = GetCurrentAcceptedPriority(queue_type); |
703 | 705 |
704 // Abort all USER_INITAITED jobs when not accepted. | 706 // Abort all USER_INITAITED jobs when not accepted. |
705 if (accepted_priority < USER_INITIATED) { | 707 if (accepted_priority < USER_INITIATED) { |
(...skipping 14 matching lines...) Expand all Loading... |
720 JobEntry* entry = job_map_.Lookup(job_id); | 722 JobEntry* entry = job_map_.Lookup(job_id); |
721 DCHECK(entry); | 723 DCHECK(entry); |
722 | 724 |
723 JobInfo* job_info = &entry->job_info; | 725 JobInfo* job_info = &entry->job_info; |
724 job_info->state = STATE_RUNNING; | 726 job_info->state = STATE_RUNNING; |
725 job_info->start_time = base::Time::Now(); | 727 job_info->start_time = base::Time::Now(); |
726 NotifyJobUpdated(*job_info); | 728 NotifyJobUpdated(*job_info); |
727 | 729 |
728 entry->cancel_callback = entry->task.Run(); | 730 entry->cancel_callback = entry->task.Run(); |
729 | 731 |
730 util::Log("Job started: %s - %s", | 732 util::Log(logging::LOG_INFO, |
| 733 "Job started: %s - %s", |
731 job_info->ToString().c_str(), | 734 job_info->ToString().c_str(), |
732 GetQueueInfo(queue_type).c_str()); | 735 GetQueueInfo(queue_type).c_str()); |
733 } | 736 } |
734 | 737 |
735 int JobScheduler::GetCurrentAcceptedPriority(QueueType queue_type) { | 738 int JobScheduler::GetCurrentAcceptedPriority(QueueType queue_type) { |
736 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 739 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
737 | 740 |
738 const int kNoJobShouldRun = -1; | 741 const int kNoJobShouldRun = -1; |
739 | 742 |
740 // Should stop if Drive was disabled while running the fetch loop. | 743 // Should stop if Drive was disabled while running the fetch loop. |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
798 bool JobScheduler::OnJobDone(JobID job_id, google_apis::GDataErrorCode error) { | 801 bool JobScheduler::OnJobDone(JobID job_id, google_apis::GDataErrorCode error) { |
799 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 802 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
800 | 803 |
801 JobEntry* job_entry = job_map_.Lookup(job_id); | 804 JobEntry* job_entry = job_map_.Lookup(job_id); |
802 DCHECK(job_entry); | 805 DCHECK(job_entry); |
803 JobInfo* job_info = &job_entry->job_info; | 806 JobInfo* job_info = &job_entry->job_info; |
804 QueueType queue_type = GetJobQueueType(job_info->job_type); | 807 QueueType queue_type = GetJobQueueType(job_info->job_type); |
805 queue_[queue_type]->MarkFinished(job_id); | 808 queue_[queue_type]->MarkFinished(job_id); |
806 | 809 |
807 const base::TimeDelta elapsed = base::Time::Now() - job_info->start_time; | 810 const base::TimeDelta elapsed = base::Time::Now() - job_info->start_time; |
808 util::Log("Job done: %s => %s (elapsed time: %sms) - %s", | 811 bool success = (GDataToFileError(error) == FILE_ERROR_OK); |
| 812 util::Log(success ? logging::LOG_INFO : logging::LOG_WARNING, |
| 813 "Job done: %s => %s (elapsed time: %sms) - %s", |
809 job_info->ToString().c_str(), | 814 job_info->ToString().c_str(), |
810 GDataErrorCodeToString(error).c_str(), | 815 GDataErrorCodeToString(error).c_str(), |
811 base::Int64ToString(elapsed.InMilliseconds()).c_str(), | 816 base::Int64ToString(elapsed.InMilliseconds()).c_str(), |
812 GetQueueInfo(queue_type).c_str()); | 817 GetQueueInfo(queue_type).c_str()); |
813 | 818 |
814 // Retry, depending on the error. | 819 // Retry, depending on the error. |
815 if ((error == google_apis::HTTP_SERVICE_UNAVAILABLE || | 820 if ((error == google_apis::HTTP_SERVICE_UNAVAILABLE || |
816 error == google_apis::HTTP_INTERNAL_SERVER_ERROR) && | 821 error == google_apis::HTTP_INTERNAL_SERVER_ERROR) && |
817 job_entry->retry_count < kMaxRetryCount) { | 822 job_entry->retry_count < kMaxRetryCount) { |
818 job_entry->cancel_callback.Reset(); | 823 job_entry->cancel_callback.Reset(); |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 NOTREACHED(); | 1012 NOTREACHED(); |
1008 return FILE_QUEUE; | 1013 return FILE_QUEUE; |
1009 } | 1014 } |
1010 | 1015 |
1011 void JobScheduler::AbortNotRunningJob(JobEntry* job, | 1016 void JobScheduler::AbortNotRunningJob(JobEntry* job, |
1012 google_apis::GDataErrorCode error) { | 1017 google_apis::GDataErrorCode error) { |
1013 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1018 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1014 | 1019 |
1015 const base::TimeDelta elapsed = base::Time::Now() - job->job_info.start_time; | 1020 const base::TimeDelta elapsed = base::Time::Now() - job->job_info.start_time; |
1016 const QueueType queue_type = GetJobQueueType(job->job_info.job_type); | 1021 const QueueType queue_type = GetJobQueueType(job->job_info.job_type); |
1017 util::Log("Job aborted: %s => %s (elapsed time: %sms) - %s", | 1022 util::Log(logging::LOG_INFO, |
| 1023 "Job aborted: %s => %s (elapsed time: %sms) - %s", |
1018 job->job_info.ToString().c_str(), | 1024 job->job_info.ToString().c_str(), |
1019 GDataErrorCodeToString(error).c_str(), | 1025 GDataErrorCodeToString(error).c_str(), |
1020 base::Int64ToString(elapsed.InMilliseconds()).c_str(), | 1026 base::Int64ToString(elapsed.InMilliseconds()).c_str(), |
1021 GetQueueInfo(queue_type).c_str()); | 1027 GetQueueInfo(queue_type).c_str()); |
1022 | 1028 |
1023 base::Callback<void(google_apis::GDataErrorCode)> callback = | 1029 base::Callback<void(google_apis::GDataErrorCode)> callback = |
1024 job->abort_callback; | 1030 job->abort_callback; |
1025 queue_[GetJobQueueType(job->job_info.job_type)]->Remove(job->job_info.job_id); | 1031 queue_[GetJobQueueType(job->job_info.job_type)]->Remove(job->job_info.job_id); |
1026 NotifyJobDone(job->job_info, error); | 1032 NotifyJobDone(job->job_info, error); |
1027 job_map_.Remove(job->job_info.job_id); | 1033 job_map_.Remove(job->job_info.job_id); |
(...skipping 30 matching lines...) Expand all Loading... |
1058 case FILE_QUEUE: | 1064 case FILE_QUEUE: |
1059 return "FILE_QUEUE"; | 1065 return "FILE_QUEUE"; |
1060 case NUM_QUEUES: | 1066 case NUM_QUEUES: |
1061 break; // This value is just a sentinel. Should never be used. | 1067 break; // This value is just a sentinel. Should never be used. |
1062 } | 1068 } |
1063 NOTREACHED(); | 1069 NOTREACHED(); |
1064 return ""; | 1070 return ""; |
1065 } | 1071 } |
1066 | 1072 |
1067 } // namespace drive | 1073 } // namespace drive |
OLD | NEW |