| Index: net/base/load_log.cc
|
| ===================================================================
|
| --- net/base/load_log.cc (revision 31195)
|
| +++ net/base/load_log.cc (working copy)
|
| @@ -3,10 +3,13 @@
|
| // found in the LICENSE file.
|
|
|
| #include "net/base/load_log.h"
|
| +#include "base/logging.h"
|
|
|
| namespace net {
|
|
|
| -LoadLog::LoadLog() {
|
| +LoadLog::LoadLog(size_t max_num_entries)
|
| + : num_entries_truncated_(0), max_num_entries_(max_num_entries) {
|
| + DCHECK_GT(max_num_entries, 0u);
|
| }
|
|
|
| // static
|
| @@ -22,20 +25,24 @@
|
| void LoadLog::Add(const Event& event) {
|
| // Minor optimization. TODO(eroman): use StackVector instead.
|
| if (events_.empty())
|
| - events_.reserve(kMaxNumEntries / 2);
|
| + events_.reserve(10); // It is likely we will have at least 10 entries.
|
|
|
| - // Enforce a bound of kMaxNumEntries -- when we reach it, make it so the
|
| - // final entry in the list is |TYPE_LOG_TRUNCATED|.
|
| + // Enforce a bound of |max_num_entries_| -- once we reach it, keep overwriting
|
| + // the final entry in the log.
|
|
|
| - if (events_.size() + 1 == kMaxNumEntries)
|
| - events_.push_back(Event(event.time, TYPE_LOG_TRUNCATED, PHASE_NONE));
|
| - else if (events_.size() < kMaxNumEntries)
|
| + if (events_.size() + 1 <= max_num_entries_ ||
|
| + max_num_entries_ == kUnbounded) {
|
| events_.push_back(event);
|
| + } else {
|
| + num_entries_truncated_ += 1;
|
| + events_[max_num_entries_ - 1] = event;
|
| + }
|
| }
|
|
|
| void LoadLog::Append(const LoadLog* log) {
|
| for (size_t i = 0; i < log->events().size(); ++i)
|
| Add(log->events()[i]);
|
| + num_entries_truncated_ += log->num_entries_truncated();
|
| }
|
|
|
| } // namespace net
|
|
|