Merge remote-tracking branch 'goog/upstream-master'.
The following commits were reverted:
840703a Fix update over cellular network on guest account
eaad5d0 Do not merge to AOSP: Fixes the link to brillo-clang-format in CrOS
740efad Reboot even if a system update is not available.
Fixed a few sign compare warnings.
Had to ifdef out 2 SquashfsFilesystemTest because it depends on unsquashfs -m.
Test: update_engine_unittests
Change-Id: I6f4ca5003e78c76064ec60d0797505d8c18d00bf
Merged-In: I6f4ca5003e78c76064ec60d0797505d8c18d00bf
diff --git a/payload_consumer/download_action.cc b/payload_consumer/download_action.cc
index cd25962..f1b6e33 100644
--- a/payload_consumer/download_action.cc
+++ b/payload_consumer/download_action.cc
@@ -20,9 +20,10 @@
#include <algorithm>
#include <string>
-#include <vector>
#include <base/files/file_path.h>
+#include <base/metrics/statistics_recorder.h>
+#include <base/strings/stringprintf.h>
#include "update_engine/common/action_pipe.h"
#include "update_engine/common/boot_control_interface.h"
@@ -35,7 +36,6 @@
using base::FilePath;
using std::string;
-using std::vector;
namespace chromeos_update_engine {
@@ -43,17 +43,21 @@
BootControlInterface* boot_control,
HardwareInterface* hardware,
SystemState* system_state,
- HttpFetcher* http_fetcher)
+ HttpFetcher* http_fetcher,
+ bool is_interactive)
: prefs_(prefs),
boot_control_(boot_control),
hardware_(hardware),
system_state_(system_state),
http_fetcher_(new MultiRangeHttpFetcher(http_fetcher)),
+ is_interactive_(is_interactive),
writer_(nullptr),
code_(ErrorCode::kSuccess),
delegate_(nullptr),
p2p_sharing_fd_(-1),
- p2p_visible_(true) {}
+ p2p_visible_(true) {
+ base::StatisticsRecorder::Initialize();
+}
DownloadAction::~DownloadAction() {}
@@ -241,8 +245,13 @@
if (writer_ && writer_ != delta_performer_.get()) {
LOG(INFO) << "Using writer for test.";
} else {
- delta_performer_.reset(new DeltaPerformer(
- prefs_, boot_control_, hardware_, delegate_, &install_plan_, payload_));
+ delta_performer_.reset(new DeltaPerformer(prefs_,
+ boot_control_,
+ hardware_,
+ delegate_,
+ &install_plan_,
+ payload_,
+ is_interactive_));
writer_ = delta_performer_.get();
}
if (system_state_ != nullptr) {
@@ -363,25 +372,33 @@
if (code == ErrorCode::kSuccess) {
if (delta_performer_ && !payload_->already_applied)
code = delta_performer_->VerifyPayload(payload_->hash, payload_->size);
- if (code != ErrorCode::kSuccess) {
+ if (code == ErrorCode::kSuccess) {
+ if (payload_ < &install_plan_.payloads.back() &&
+ system_state_->payload_state()->NextPayload()) {
+ LOG(INFO) << "Incrementing to next payload";
+ // No need to reset if this payload was already applied.
+ if (delta_performer_ && !payload_->already_applied)
+ DeltaPerformer::ResetUpdateProgress(prefs_, false);
+ // Start downloading next payload.
+ bytes_received_previous_payloads_ += payload_->size;
+ payload_++;
+ install_plan_.download_url =
+ system_state_->payload_state()->GetCurrentUrl();
+ StartDownloading();
+ return;
+ }
+ // Log UpdateEngine.DownloadAction.* histograms to help diagnose
+ // long-blocking oeprations.
+ std::string histogram_output;
+ base::StatisticsRecorder::WriteGraph(
+ "UpdateEngine.DownloadAction.", &histogram_output);
+ LOG(INFO) << histogram_output;
+ } else {
LOG(ERROR) << "Download of " << install_plan_.download_url
<< " failed due to payload verification error.";
// Delete p2p file, if applicable.
if (!p2p_file_id_.empty())
CloseP2PSharingFd(true);
- } else if (payload_ < &install_plan_.payloads.back() &&
- system_state_->payload_state()->NextPayload()) {
- LOG(INFO) << "Incrementing to next payload";
- // No need to reset if this payload was already applied.
- if (delta_performer_ && !payload_->already_applied)
- DeltaPerformer::ResetUpdateProgress(prefs_, false);
- // Start downloading next payload.
- bytes_received_previous_payloads_ += payload_->size;
- payload_++;
- install_plan_.download_url =
- system_state_->payload_state()->GetCurrentUrl();
- StartDownloading();
- return;
}
}