12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/memory_history.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <limits>
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<MemoryHistory> MemoryHistory::Create() {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return make_scoped_ptr(new MemoryHistory());
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MemoryHistory::MemoryHistory() {}
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MemoryHistory::SaveEntry(const MemoryHistory::Entry& entry) {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ring_buffer_.SaveToBuffer(entry);
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MemoryHistory::GetMinAndMax(size_t* min, size_t* max) const {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  *min = std::numeric_limits<size_t>::max();
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  *max = 0;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (RingBufferType::Iterator it = ring_buffer_.Begin(); it; ++it) {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    size_t bytes_total = it->bytes_total();
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (bytes_total < *min)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *min = bytes_total;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (bytes_total > *max)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *max = bytes_total;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (*min > *max)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    *min = *max;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
40