| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "components/offline_pages/background/request_coordinator.h" | 5 #include "components/offline_pages/background/request_coordinator.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 | 364 |
| 365 is_stopped_ = false; | 365 is_stopped_ = false; |
| 366 scheduler_callback_ = callback; | 366 scheduler_callback_ = callback; |
| 367 | 367 |
| 368 TryNextRequest(); | 368 TryNextRequest(); |
| 369 | 369 |
| 370 return true; | 370 return true; |
| 371 } | 371 } |
| 372 | 372 |
| 373 void RequestCoordinator::StartProcessingIfConnected() { | 373 void RequestCoordinator::StartProcessingIfConnected() { |
| 374 OfflinerImmediateStartStatus immediate_start_status = TryImmediateStart(); |
| 375 UMA_HISTOGRAM_ENUMERATION( |
| 376 "OfflinePages.Background.ImmediateStartStatus", immediate_start_status, |
| 377 RequestCoordinator::OfflinerImmediateStartStatus::STATUS_COUNT); |
| 378 } |
| 379 |
| 380 RequestCoordinator::OfflinerImmediateStartStatus |
| 381 RequestCoordinator::TryImmediateStart() { |
| 374 // Make sure not already busy processing. | 382 // Make sure not already busy processing. |
| 375 if (is_busy_) return; | 383 if (is_busy_) |
| 384 return OfflinerImmediateStartStatus::BUSY; |
| 376 | 385 |
| 377 // Make sure we are not on svelte device to start immediately. | 386 // Make sure we are not on svelte device to start immediately. |
| 378 if (base::SysInfo::IsLowEndDevice()) return; | 387 if (base::SysInfo::IsLowEndDevice()) |
| 388 return OfflinerImmediateStartStatus::NOT_STARTED_ON_SVELTE; |
| 379 | 389 |
| 380 // Make sure we have reasonable network quality (or at least a connection). | 390 // Make sure we have reasonable network quality (or at least a connection). |
| 381 if (network_quality_estimator_) { | 391 if (network_quality_estimator_) { |
| 382 // TODO(dougarnett): Add UMA for quality type experienced. | 392 // TODO(dougarnett): Add UMA for quality type experienced. |
| 383 net::EffectiveConnectionType quality = | 393 net::EffectiveConnectionType quality = |
| 384 network_quality_estimator_->GetEffectiveConnectionType(); | 394 network_quality_estimator_->GetEffectiveConnectionType(); |
| 385 if (quality < net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_2G) { | 395 if (quality < net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_2G) |
| 386 return; | 396 return OfflinerImmediateStartStatus::WEAK_CONNECTION; |
| 387 } | |
| 388 } else if (GetConnectionType() == | 397 } else if (GetConnectionType() == |
| 389 net::NetworkChangeNotifier::ConnectionType::CONNECTION_NONE) { | 398 net::NetworkChangeNotifier::ConnectionType::CONNECTION_NONE) { |
| 390 return; | 399 return OfflinerImmediateStartStatus::NO_CONNECTION; |
| 391 } | 400 } |
| 392 | 401 |
| 393 // Start processing with manufactured conservative battery conditions | 402 // Start processing with manufactured conservative battery conditions |
| 394 // (i.e., assume no battery). | 403 // (i.e., assume no battery). |
| 395 // TODO(dougarnett): Obtain actual battery conditions (from Android/Java). | 404 // TODO(dougarnett): Obtain actual battery conditions (from Android/Java). |
| 396 DeviceConditions device_conditions(false, 0, GetConnectionType()); | 405 DeviceConditions device_conditions(false, 0, GetConnectionType()); |
| 397 StartProcessing(device_conditions, base::Bind(&EmptySchedulerCallback)); | 406 if (StartProcessing(device_conditions, base::Bind(&EmptySchedulerCallback))) |
| 407 return OfflinerImmediateStartStatus::STARTED; |
| 408 else |
| 409 return OfflinerImmediateStartStatus::NOT_ACCEPTED; |
| 398 } | 410 } |
| 399 | 411 |
| 400 void RequestCoordinator::TryNextRequest() { | 412 void RequestCoordinator::TryNextRequest() { |
| 401 // If there is no time left in the budget, return to the scheduler. | 413 // If there is no time left in the budget, return to the scheduler. |
| 402 // We do not remove the pending task that was set up earlier in case | 414 // We do not remove the pending task that was set up earlier in case |
| 403 // we run out of time, so the background scheduler will return to us | 415 // we run out of time, so the background scheduler will return to us |
| 404 // at the next opportunity to run background tasks. | 416 // at the next opportunity to run background tasks. |
| 405 if (base::Time::Now() - operation_start_time_ > | 417 if (base::Time::Now() - operation_start_time_ > |
| 406 base::TimeDelta::FromSeconds( | 418 base::TimeDelta::FromSeconds( |
| 407 policy_->GetBackgroundProcessingTimeBudgetSeconds())) { | 419 policy_->GetBackgroundProcessingTimeBudgetSeconds())) { |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 | 611 |
| 600 ClientPolicyController* RequestCoordinator::GetPolicyController() { | 612 ClientPolicyController* RequestCoordinator::GetPolicyController() { |
| 601 return policy_controller_.get(); | 613 return policy_controller_.get(); |
| 602 } | 614 } |
| 603 | 615 |
| 604 void RequestCoordinator::Shutdown() { | 616 void RequestCoordinator::Shutdown() { |
| 605 network_quality_estimator_ = nullptr; | 617 network_quality_estimator_ = nullptr; |
| 606 } | 618 } |
| 607 | 619 |
| 608 } // namespace offline_pages | 620 } // namespace offline_pages |
| OLD | NEW |