trace.h revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This file provides support for basic in-memory tracing of short events. We
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// keep a static circular buffer where we store the last traced events, so we
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// can review the cache recent behavior should we need it.
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_DISK_CACHE_TRACE_H__
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_DISK_CACHE_TRACE_H__
113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/basictypes.h"
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/ref_counted.h"
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace disk_cache {
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Create and destroy the tracing buffer.
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid InitTrace(void);
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid DestroyTrace(void);
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Simple class to handle the trace buffer lifetime. Any object interested in
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// tracing should keep a reference to the object returned by GetTraceObject().
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass TraceObject : public base::RefCounted<TraceObject> {
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  friend class base::RefCounted<TraceObject>;
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public:
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  static TraceObject* GetTraceObject();
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private:
303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  TraceObject();
313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ~TraceObject();
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TraceObject);
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott};
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Traces to the internal buffer.
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid Trace(const char* format, ...);
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace disk_cache
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif  // NET_DISK_CACHE_TRACE_H__
41