OLD | NEW |
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS 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 "update_engine/update_attempter.h" | 5 #include "update_engine/update_attempter.h" |
6 | 6 |
7 // From 'man clock_gettime': feature test macro: _POSIX_C_SOURCE >= 199309L | 7 // From 'man clock_gettime': feature test macro: _POSIX_C_SOURCE >= 199309L |
8 #ifndef _POSIX_C_SOURCE | 8 #ifndef _POSIX_C_SOURCE |
9 #define _POSIX_C_SOURCE 199309L | 9 #define _POSIX_C_SOURCE 199309L |
10 #endif // _POSIX_C_SOURCE | 10 #endif // _POSIX_C_SOURCE |
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 priority_ = priority; | 465 priority_ = priority; |
466 LOG(INFO) << "Process priority = " << priority_; | 466 LOG(INFO) << "Process priority = " << priority_; |
467 } | 467 } |
468 } | 468 } |
469 | 469 |
470 void UpdateAttempter::SetupPriorityManagement() { | 470 void UpdateAttempter::SetupPriorityManagement() { |
471 if (manage_priority_source_) { | 471 if (manage_priority_source_) { |
472 LOG(ERROR) << "Process priority timeout source hasn't been destroyed."; | 472 LOG(ERROR) << "Process priority timeout source hasn't been destroyed."; |
473 CleanupPriorityManagement(); | 473 CleanupPriorityManagement(); |
474 } | 474 } |
475 const int kPriorityTimeout = 10 * 60; // 10 minutes | 475 const int kPriorityTimeout = 2 * 60 * 60; // 2 hours |
476 manage_priority_source_ = g_timeout_source_new_seconds(kPriorityTimeout); | 476 manage_priority_source_ = g_timeout_source_new_seconds(kPriorityTimeout); |
477 g_source_set_callback(manage_priority_source_, | 477 g_source_set_callback(manage_priority_source_, |
478 StaticManagePriorityCallback, | 478 StaticManagePriorityCallback, |
479 this, | 479 this, |
480 NULL); | 480 NULL); |
481 g_source_attach(manage_priority_source_, NULL); | 481 g_source_attach(manage_priority_source_, NULL); |
482 SetPriority(utils::kProcessPriorityLow); | 482 SetPriority(utils::kProcessPriorityLow); |
483 } | 483 } |
484 | 484 |
485 void UpdateAttempter::CleanupPriorityManagement() { | 485 void UpdateAttempter::CleanupPriorityManagement() { |
486 if (manage_priority_source_) { | 486 if (manage_priority_source_) { |
487 g_source_destroy(manage_priority_source_); | 487 g_source_destroy(manage_priority_source_); |
488 manage_priority_source_ = NULL; | 488 manage_priority_source_ = NULL; |
489 } | 489 } |
490 SetPriority(utils::kProcessPriorityNormal); | 490 SetPriority(utils::kProcessPriorityNormal); |
491 } | 491 } |
492 | 492 |
493 gboolean UpdateAttempter::StaticManagePriorityCallback(gpointer data) { | 493 gboolean UpdateAttempter::StaticManagePriorityCallback(gpointer data) { |
494 return reinterpret_cast<UpdateAttempter*>(data)->ManagePriorityCallback(); | 494 return reinterpret_cast<UpdateAttempter*>(data)->ManagePriorityCallback(); |
495 } | 495 } |
496 | 496 |
497 bool UpdateAttempter::ManagePriorityCallback() { | 497 bool UpdateAttempter::ManagePriorityCallback() { |
498 // If the current process priority is below normal, set it to normal | 498 SetPriority(utils::kProcessPriorityNormal); |
499 // and let GLib invoke this callback again. | |
500 if (utils::ComparePriorities(priority_, utils::kProcessPriorityNormal) < 0) { | |
501 SetPriority(utils::kProcessPriorityNormal); | |
502 return true; | |
503 } | |
504 // Set the priority to high and let GLib destroy the timeout source. | |
505 SetPriority(utils::kProcessPriorityHigh); | |
506 manage_priority_source_ = NULL; | 499 manage_priority_source_ = NULL; |
507 return false; | 500 return false; // Destroy the timeout source. |
508 } | 501 } |
509 | 502 |
510 void UpdateAttempter::DisableDeltaUpdateIfNeeded() { | 503 void UpdateAttempter::DisableDeltaUpdateIfNeeded() { |
511 int64_t delta_failures; | 504 int64_t delta_failures; |
512 if (omaha_request_params_.delta_okay && | 505 if (omaha_request_params_.delta_okay && |
513 prefs_->GetInt64(kPrefsDeltaUpdateFailures, &delta_failures) && | 506 prefs_->GetInt64(kPrefsDeltaUpdateFailures, &delta_failures) && |
514 delta_failures >= kMaxDeltaUpdateFailures) { | 507 delta_failures >= kMaxDeltaUpdateFailures) { |
515 LOG(WARNING) << "Too many delta update failures, forcing full update."; | 508 LOG(WARNING) << "Too many delta update failures, forcing full update."; |
516 omaha_request_params_.delta_okay = false; | 509 omaha_request_params_.delta_okay = false; |
517 } | 510 } |
(...skipping 30 matching lines...) Expand all Loading... |
548 if (resume_offset < response_handler_action_->install_plan().size) { | 541 if (resume_offset < response_handler_action_->install_plan().size) { |
549 ranges.push_back(make_pair(resume_offset, -1)); | 542 ranges.push_back(make_pair(resume_offset, -1)); |
550 } | 543 } |
551 } else { | 544 } else { |
552 ranges.push_back(make_pair(0, -1)); | 545 ranges.push_back(make_pair(0, -1)); |
553 } | 546 } |
554 fetcher->set_ranges(ranges); | 547 fetcher->set_ranges(ranges); |
555 } | 548 } |
556 | 549 |
557 } // namespace chromeos_update_engine | 550 } // namespace chromeos_update_engine |
OLD | NEW |