Index: net/log/file_net_log_observer.cc |
diff --git a/net/log/file_net_log_observer.cc b/net/log/file_net_log_observer.cc |
index ef2c6164889a8febb5c2af4152ba9a6b988d8e64..fd3e13863cfacca05501857e101f7bdbeb13d06f 100644 |
--- a/net/log/file_net_log_observer.cc |
+++ b/net/log/file_net_log_observer.cc |
@@ -216,9 +216,41 @@ class FileNetLogObserver::UnboundedFileWriter |
DISALLOW_COPY_AND_ASSIGN(UnboundedFileWriter); |
}; |
-FileNetLogObserver::FileNetLogObserver( |
- scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) |
- : file_task_runner_(file_task_runner) {} |
+std::unique_ptr<FileNetLogObserver> FileNetLogObserver::CreateBounded( |
+ scoped_refptr<base::SingleThreadTaskRunner> file_task_runner, |
+ const base::FilePath& directory, |
+ size_t max_total_size, |
+ size_t total_num_files, |
+ std::unique_ptr<base::Value> constants) { |
+ DCHECK_GT(total_num_files, 0u); |
+ // The BoundedFileWriter uses a soft limit to write events to file that allows |
+ // the size of the file to exceed the limit, but the WriteQueue uses a hard |
+ // limit which the size of |WriteQueue::queue_| cannot exceed. Thus, the |
+ // BoundedFileWriter may write more events to file than can be contained by |
+ // the WriteQueue if they have the same size limit. The maximum size of the |
+ // WriteQueue is doubled to allow |WriteQueue::queue_| to hold enough events |
+ // for the BoundedFileWriter to fill all files. As long as all events have |
+ // sizes <= the size of an individual event file, the discrepancy between the |
+ // hard limit and the soft limit will not cause an issue. |
+ // TODO(dconnol): Handle the case when the WriteQueue still doesn't |
+ // contain enough events to fill all files, because of very large events |
+ // relative to file size. |
+ FileWriter* file_writer = |
eroman
2017/02/22 02:03:29
see suggestion in header file -- we try to keep po
wangyix1
2017/02/23 02:14:57
Done.
|
+ new BoundedFileWriter(directory, max_total_size / total_num_files, |
+ total_num_files, file_task_runner); |
+ return std::unique_ptr<FileNetLogObserver>(new FileNetLogObserver( |
+ file_task_runner, file_writer, max_total_size * 2, std::move(constants))); |
+} |
+ |
+std::unique_ptr<FileNetLogObserver> FileNetLogObserver::CreateUnbounded( |
+ scoped_refptr<base::SingleThreadTaskRunner> file_task_runner, |
+ const base::FilePath& log_path, |
+ std::unique_ptr<base::Value> constants) { |
+ FileWriter* file_writer = new UnboundedFileWriter(log_path, file_task_runner); |
+ return std::unique_ptr<FileNetLogObserver>(new FileNetLogObserver( |
+ file_task_runner, file_writer, std::numeric_limits<size_t>::max(), |
+ std::move(constants))); |
+} |
FileNetLogObserver::~FileNetLogObserver() { |
if (net_log()) { |
@@ -228,75 +260,11 @@ FileNetLogObserver::~FileNetLogObserver() { |
base::Unretained(file_writer_))); |
net_log()->DeprecatedRemoveObserver(this); |
} |
- |
file_task_runner_->DeleteSoon(FROM_HERE, file_writer_); |
} |
-void FileNetLogObserver::StartObservingBounded( |
- NetLog* net_log, |
- NetLogCaptureMode capture_mode, |
- const base::FilePath& directory, |
- std::unique_ptr<base::Value> constants, |
- URLRequestContext* url_request_context, |
- size_t max_total_size, |
- size_t total_num_files) { |
- DCHECK_GT(total_num_files, 0u); |
- |
- file_writer_ = |
- new BoundedFileWriter(directory, max_total_size / total_num_files, |
- total_num_files, file_task_runner_); |
- |
- // The |file_writer_| uses a soft limit to write events to file that allows |
- // the size of the file to exceed the limit, but the |write_queue_| uses a |
- // hard limit which the size of the |queue_| cannot exceed. Thus, the |
- // |file_writer_| may write more events to file than can be contained by the |
- // |write_queue_| if they have the same size limit. The maximum size of the |
- // |write_queue_| is doubled to allow the |queue_| to hold enough events for |
- // the |file_writer_| to fill all files. As long as all events have sizes <= |
- // the size of an individual event file, the discrepancy between the hard |
- // limit and the soft limit will not cause an issue. |
- // TODO(dconnol): Handle the case when the |write_queue_| still doesn't |
- // contain enough events to fill all files, because of very large events |
- // relative to file size. |
- write_queue_ = new WriteQueue(max_total_size * 2); |
- |
- StartObservingHelper(net_log, capture_mode, std::move(constants), |
- url_request_context); |
-} |
- |
-void FileNetLogObserver::StartObservingUnbounded( |
- NetLog* net_log, |
- NetLogCaptureMode capture_mode, |
- const base::FilePath& filepath, |
- std::unique_ptr<base::Value> constants, |
- URLRequestContext* url_request_context) { |
- file_writer_ = new UnboundedFileWriter(filepath, file_task_runner_); |
- |
- write_queue_ = new WriteQueue(std::numeric_limits<size_t>::max()); |
- |
- StartObservingHelper(net_log, capture_mode, std::move(constants), |
- url_request_context); |
-} |
- |
-void FileNetLogObserver::StartObservingHelper( |
- NetLog* net_log, |
- NetLogCaptureMode capture_mode, |
- std::unique_ptr<base::Value> constants, |
- URLRequestContext* url_request_context) { |
- if (!constants) |
- constants = GetNetConstants(); |
- file_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&FileNetLogObserver::FileWriter::Initialize, |
- base::Unretained(file_writer_), base::Passed(&constants))); |
- |
- if (url_request_context) { |
- DCHECK(url_request_context->CalledOnValidThread()); |
- std::set<URLRequestContext*> contexts; |
- contexts.insert(url_request_context); |
- CreateNetLogEntriesForActiveObjects(contexts, this); |
- } |
- |
+void FileNetLogObserver::StartObserving(NetLog* net_log, |
+ NetLogCaptureMode capture_mode) { |
net_log->DeprecatedAddObserver(this, capture_mode); |
} |
@@ -331,6 +299,22 @@ void FileNetLogObserver::OnAddEntry(const NetLogEntry& entry) { |
} |
} |
+FileNetLogObserver::FileNetLogObserver( |
+ scoped_refptr<base::SingleThreadTaskRunner> file_task_runner, |
+ FileWriter* file_writer, |
+ size_t write_queue_memory_max, |
+ std::unique_ptr<base::Value> constants) |
+ : file_task_runner_(file_task_runner), |
+ write_queue_(new WriteQueue(write_queue_memory_max)), |
+ file_writer_(file_writer) { |
+ if (!constants) |
+ constants = GetNetConstants(); |
+ file_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&FileNetLogObserver::FileWriter::Initialize, |
+ base::Unretained(file_writer_), base::Passed(&constants))); |
+} |
+ |
FileNetLogObserver::WriteQueue::WriteQueue(size_t memory_max) |
: memory_(0), memory_max_(memory_max) {} |