1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Functions used to debug memory usage, leaks, and other memory issues.
6// All methods are effectively no-ops unless this program is being run through
7// a supported memory tool (currently, only Purify)
8
9#ifndef BASE_MEMORY_MEMORY_DEBUG_H_
10#define BASE_MEMORY_MEMORY_DEBUG_H_
11#pragma once
12
13#include "base/base_api.h"
14#include "base/basictypes.h"
15
16namespace base {
17
18class BASE_API MemoryDebug {
19 public:
20  // Since MIU messages are a lot of data, and we don't always want this data,
21  // we have a global switch.  If disabled, *MemoryInUse are no-ops.
22  static void SetMemoryInUseEnabled(bool enabled);
23
24  // Dump information about all memory in use.
25  static void DumpAllMemoryInUse();
26  // Dump information about new memory in use since the last
27  // call to DumpAllMemoryInUse() or DumpNewMemoryInUse().
28  static void DumpNewMemoryInUse();
29
30  // Dump information about all current memory leaks.
31  static void DumpAllLeaks();
32  // Dump information about new memory leaks since the last
33  // call to DumpAllLeaks() or DumpNewLeaks()
34  static void DumpNewLeaks();
35
36  // Mark |size| bytes of memory as initialized, so it doesn't produce any UMRs
37  // or UMCs.
38  static void MarkAsInitialized(void* addr, size_t size);
39
40 private:
41  static bool memory_in_use_;
42
43  DISALLOW_IMPLICIT_CONSTRUCTORS(MemoryDebug);
44};
45
46}  // namespace base
47
48#endif  // BASE_MEMORY_MEMORY_DEBUG_H_
49