blob: f78253e56fd0681e4e49eda5a713e0d6431f25a9 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/forensics/feedback/last_reboot.h"
namespace forensics::feedback {
LastReboot::LastReboot(async_dispatcher_t* dispatcher,
std::shared_ptr<sys::ServiceDirectory> services, cobalt::Logger* cobalt,
RedactorBase* redactor, fuchsia::feedback::CrashReporter* crash_reporter,
const Options options)
: dispatcher_(dispatcher),
reboot_watcher_(services, options.graceful_reboot_reason_write_path, cobalt),
reporter_(dispatcher, services, cobalt, redactor, crash_reporter),
last_reboot_info_provider_(options.reboot_log) {
reboot_watcher_.Connect();
if (options.is_first_instance) {
const zx::duration delay = (options.reboot_log.RebootReason() == RebootReason::kOOM)
? options.oom_crash_reporting_delay
: zx::sec(0);
reporter_.ReportOn(options.reboot_log, delay);
}
}
void LastReboot::LastReboot::Handle(
::fidl::InterfaceRequest<fuchsia::feedback::LastRebootInfoProvider> request,
::fit::function<void(zx_status_t)> error_handler) {
last_reboot_info_provider_connections_.AddBinding(&last_reboot_info_provider_, std::move(request),
dispatcher_, std::move(error_handler));
}
} // namespace forensics::feedback