12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 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)#ifndef CC_RESOURCES_MEMORY_HISTORY_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_RESOURCES_MEMORY_HISTORY_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/debug/ring_buffer.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Maintains a history of memory for each frame. 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MemoryHistory { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<MemoryHistory> Create(); 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t HistorySize() const { return ring_buffer_.BufferSize(); } 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct Entry { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Entry() 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : total_budget_in_bytes(0), 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bytes_allocated(0), 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bytes_unreleasable(0), 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bytes_over(0) {} 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t total_budget_in_bytes; 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t bytes_allocated; 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t bytes_unreleasable; 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t bytes_over; 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t bytes_total() const { 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return bytes_allocated + bytes_unreleasable + bytes_over; 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SaveEntry(const Entry& entry); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetMinAndMax(size_t* min, size_t* max) const; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef RingBuffer<Entry, 80> RingBufferType; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RingBufferType::Iterator Begin() const { return ring_buffer_.Begin(); } 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RingBufferType::Iterator End() const { return ring_buffer_.End(); } 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MemoryHistory(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RingBufferType ring_buffer_; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MemoryHistory); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_RESOURCES_MEMORY_HISTORY_H_ 56