Index: tools/memory_watcher/memory_hook.h |
diff --git a/tools/memory_watcher/memory_hook.h b/tools/memory_watcher/memory_hook.h |
deleted file mode 100644 |
index 4227edb7ca4bd4cf873ada062f917f270a2b4636..0000000000000000000000000000000000000000 |
--- a/tools/memory_watcher/memory_hook.h |
+++ /dev/null |
@@ -1,153 +0,0 @@ |
-// Copyright (c) 2006-2008 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. |
-// |
-// Static class for hooking Win32 API routines. For now, |
-// we only add one watcher at a time. |
-// |
-// TODO(mbelshe): Support multiple watchers. |
- |
-#ifndef MEMORY_WATCHER_MEMORY_HOOK_ |
-#define MEMORY_WATCHER_MEMORY_HOOK_ |
- |
-#include "base/logging.h" |
- |
-// When allocating memory for internal use with the MemoryHook, |
-// we must always use the MemoryHook's heap; otherwise, the memory |
-// gets tracked, and it becomes an infinite loop (allocation() calls |
-// MemoryHook() which calls allocation(), etc). |
-// |
-// PrivateHookAllocator is an STL-friendly Allocator so that STL lists, |
-// maps, etc can be used on the global MemoryHook's heap. |
-template <class T> |
-class PrivateHookAllocator { |
- public: |
- // These type definitions are needed for stl allocators. |
- typedef size_t size_type; |
- typedef ptrdiff_t difference_type; |
- typedef T* pointer; |
- typedef const T* const_pointer; |
- typedef T& reference; |
- typedef const T& const_reference; |
- typedef T value_type; |
- |
- PrivateHookAllocator() {} |
- |
- // Allocate memory for STL. |
- pointer allocate(size_type n, const void * = 0) { |
- return reinterpret_cast<T*>(MemoryHook::Alloc(n * sizeof(T))); |
- } |
- |
- // Deallocate memory for STL. |
- void deallocate(void* p, size_type) { |
- if (p) |
- MemoryHook::Free(p); |
- } |
- |
- // Construct the object |
- void construct(pointer p, const T& val) { |
- new (reinterpret_cast<T*>(p))T(val); |
- } |
- |
- // Destruct an object |
- void destroy(pointer p) { p->~T(); } |
- |
- size_type max_size() const { return size_t(-1); } |
- |
- template <class U> |
- struct rebind { typedef PrivateHookAllocator<U> other; }; |
- |
- template <class U> |
- PrivateHookAllocator(const PrivateHookAllocator<U>&) {} |
-}; |
- |
-template<class T, class U> inline |
-bool operator==(const PrivateHookAllocator<T>&, |
- const PrivateHookAllocator<U>&) { |
- return (true); |
-} |
- |
-template<class T, class U> inline |
-bool operator!=(const PrivateHookAllocator<T>& left, |
- const PrivateHookAllocator<U>& right) { |
- return (!(left == right)); |
-} |
- |
- |
-// Classes which monitor memory from these hooks implement |
-// the MemoryObserver interface. |
-class MemoryObserver { |
- public: |
- virtual ~MemoryObserver() {} |
- |
- // Track a pointer. Will capture the current StackTrace. |
- virtual void OnTrack(HANDLE heap, int32 id, int32 size) = 0; |
- |
- // Untrack a pointer, removing it from our list. |
- virtual void OnUntrack(HANDLE heap, int32 id, int32 size) = 0; |
-}; |
- |
-class MemoryHook : MemoryObserver { |
- public: |
- // Initialize the MemoryHook. Must be called before |
- // registering watchers. This can be called repeatedly, |
- // but is not thread safe. |
- static bool Initialize(); |
- |
- // Returns true is memory allocations and deallocations |
- // are being traced. |
- static bool hooked() { return hooked_ != NULL; } |
- |
- // Register a class to receive memory allocation & deallocation |
- // callbacks. If we haven't hooked memory yet, this call will |
- // force memory hooking to start. |
- static bool RegisterWatcher(MemoryObserver* watcher); |
- |
- // Register a class to stop receiving callbacks. If there are |
- // no more watchers, this call will unhook memory. |
- static bool UnregisterWatcher(MemoryObserver* watcher); |
- |
- // MemoryHook provides a private heap for allocating |
- // unwatched memory. |
- static void* Alloc(size_t size) { |
- DCHECK(global_hook_ && global_hook_->heap_); |
- return HeapAlloc(global_hook_->heap_, 0, size); |
- } |
- static void Free(void* ptr) { |
- DCHECK(global_hook_ && global_hook_->heap_); |
- HeapFree(global_hook_->heap_, 0, ptr); |
- } |
- |
- // Access the global hook. For internal use only from static "C" |
- // hooks. |
- static MemoryHook* hook() { return global_hook_; } |
- |
- // MemoryObserver interface. |
- virtual void OnTrack(HANDLE hHeap, int32 id, int32 size); |
- virtual void OnUntrack(HANDLE hHeap, int32 id, int32 size); |
- |
- private: |
- MemoryHook(); |
- ~MemoryHook(); |
- |
- // Enable memory tracing. When memory is 'hooked', |
- // MemoryWatchers which have registered will be called |
- // as memory is allocated and deallocated. |
- static bool Hook(); |
- |
- // Disables memory tracing. |
- static bool Unhook(); |
- |
- // Create our private heap |
- bool CreateHeap(); |
- |
- // Close our private heap. |
- bool CloseHeap(); |
- |
- MemoryObserver* watcher_; |
- HANDLE heap_; // An internal accounting heap. |
- static bool hooked_; |
- static MemoryHook* global_hook_; |
-}; |
- |
-#endif // MEMORY_WATCHER_MEMORY_HOOK_ |