// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Functions used to debug memory usage, leaks, and other memory issues.
// All methods are effectively no-ops unless this program is being run through
// a supported memory tool (currently, only Purify)

#ifndef BASE_MEMORY_MEMORY_DEBUG_H_
#define BASE_MEMORY_MEMORY_DEBUG_H_
#pragma once

#include "base/base_api.h"
#include "base/basictypes.h"

namespace base {

class BASE_API MemoryDebug {
 public:
  // Since MIU messages are a lot of data, and we don't always want this data,
  // we have a global switch.  If disabled, *MemoryInUse are no-ops.
  static void SetMemoryInUseEnabled(bool enabled);

  // Dump information about all memory in use.
  static void DumpAllMemoryInUse();
  // Dump information about new memory in use since the last
  // call to DumpAllMemoryInUse() or DumpNewMemoryInUse().
  static void DumpNewMemoryInUse();

  // Dump information about all current memory leaks.
  static void DumpAllLeaks();
  // Dump information about new memory leaks since the last
  // call to DumpAllLeaks() or DumpNewLeaks()
  static void DumpNewLeaks();

  // Mark |size| bytes of memory as initialized, so it doesn't produce any UMRs
  // or UMCs.
  static void MarkAsInitialized(void* addr, size_t size);

 private:
  static bool memory_in_use_;

  DISALLOW_IMPLICIT_CONSTRUCTORS(MemoryDebug);
};

}  // namespace base

#endif  // BASE_MEMORY_MEMORY_DEBUG_H_
