Chromium Code Reviews| Index: components/net_log/chrome_net_log.cc |
| diff --git a/components/net_log/chrome_net_log.cc b/components/net_log/chrome_net_log.cc |
| index 509de9d1546f0430ebed41ca944fdd7e3c429a05..4052424d6f049225522bf6a10f8074e31a193fbe 100644 |
| --- a/components/net_log/chrome_net_log.cc |
| +++ b/components/net_log/chrome_net_log.cc |
| @@ -4,12 +4,9 @@ |
| #include "components/net_log/chrome_net_log.h" |
| -#include <stdio.h> |
| #include <utility> |
| #include "base/command_line.h" |
| -#include "base/files/scoped_file.h" |
| -#include "base/logging.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/sys_info.h" |
| @@ -18,9 +15,9 @@ |
| #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event_store.h" |
| #include "components/net_log/net_export_file_writer.h" |
| #include "components/version_info/version_info.h" |
| +#include "net/log/file_net_log_observer.h" |
| #include "net/log/net_log_util.h" |
| #include "net/log/trace_net_log_observer.h" |
| -#include "net/log/write_to_file_net_log_observer.h" |
| namespace net_log { |
| @@ -31,48 +28,22 @@ ChromeNetLog::ChromeNetLog() { |
| ChromeNetLog::~ChromeNetLog() { |
| net_export_file_writer_.reset(); |
| - // Remove the observers we own before we're destroyed. |
| - if (write_to_file_observer_) |
| - write_to_file_observer_->StopObserving(nullptr); |
| - if (trace_net_log_observer_) |
| - trace_net_log_observer_->StopWatchForTraceStart(); |
| + ClearFileNetLogObserver(); |
| + trace_net_log_observer_->StopWatchForTraceStart(); |
| } |
| void ChromeNetLog::StartWritingToFile( |
| - const base::FilePath& log_file, |
| - net::NetLogCaptureMode log_file_mode, |
| + const base::FilePath& path, |
| + net::NetLogCaptureMode capture_mode, |
| const base::CommandLine::StringType& command_line_string, |
| const std::string& channel_string) { |
| - DCHECK(!log_file.empty()); |
| - |
| - // TODO(716570): Use common code to write NetLog to file. |
| - |
| - // Much like logging.h, bypass threading restrictions by using fopen |
| - // directly. Have to write on a thread that's shutdown to handle events on |
| - // shutdown properly, and posting events to another thread as they occur |
| - // would result in an unbounded buffer size, so not much can be gained by |
| - // doing this on another thread. It's only used when debugging Chrome, so |
| - // performance is not a big concern. |
| - base::ScopedFILE file; |
| -#if defined(OS_WIN) |
| - file.reset(_wfopen(log_file.value().c_str(), L"w")); |
| -#elif defined(OS_POSIX) |
| - file.reset(fopen(log_file.value().c_str(), "w")); |
| -#endif |
| - |
| - if (!file) { |
| - LOG(ERROR) << "Could not open file " << log_file.value() |
| - << " for net logging"; |
| - } else { |
| - std::unique_ptr<base::Value> constants( |
| - GetConstants(command_line_string, channel_string)); |
| - write_to_file_observer_.reset(new net::WriteToFileNetLogObserver()); |
| - |
| - write_to_file_observer_->set_capture_mode(log_file_mode); |
| - |
| - write_to_file_observer_->StartObserving(this, std::move(file), |
| - constants.get(), nullptr); |
| - } |
| + DCHECK(!path.empty()); |
| + |
| + // TODO(739485): The log file does not contain about:flags data. |
| + file_net_log_observer_ = net::FileNetLogObserver::CreateUnbounded( |
| + path, GetConstants(command_line_string, channel_string)); |
| + |
| + file_net_log_observer_->StartObserving(this, capture_mode); |
| } |
| NetExportFileWriter* ChromeNetLog::net_export_file_writer() { |
| @@ -115,4 +86,28 @@ std::unique_ptr<base::Value> ChromeNetLog::GetConstants( |
| return std::move(constants_dict); |
| } |
| +void ChromeNetLog::ShutdownBeforeTaskScheduler() { |
|
mmenke
2017/07/06 21:31:29
nit: ShutDown*
eroman
2017/07/06 21:57:54
Done.
|
| + // TODO(eroman): Stop in-progress net_export_file_writer_ or delete its files? |
| + |
| + ClearFileNetLogObserver(); |
| +} |
| + |
| +void ChromeNetLog::ClearFileNetLogObserver() { |
| + if (file_net_log_observer_) { |
|
mmenke
2017/07/06 21:31:29
nit: Suggest early exit here (Think it's unlikely
eroman
2017/07/06 21:57:54
Done.
|
| + // TODO(739487): The log file does not contain any polled data. |
| + // |
| + // TODO(eroman): FileNetLogObserver::StopObserving() posts to the file task |
| + // runner to finish writing the log file. Despite that sequenced task runner |
| + // being marked BLOCK_SHUTDOWN, those tasks are not actually running. |
| + // |
| + // This isn't a big deal when using the unbounded logger since the log |
| + // loading code can handle such truncated logs. But this will need fixing |
| + // if switching to log formats that are not so versatile (also if adding |
| + // polled data). |
| + file_net_log_observer_->StopObserving(nullptr /*polled_data*/, |
| + base::Closure()); |
| + file_net_log_observer_.reset(); |
| + } |
| +} |
| + |
| } // namespace net_log |