| Index: tools/memory_watcher/memory_watcher.h
|
| ===================================================================
|
| --- tools/memory_watcher/memory_watcher.h (revision 31097)
|
| +++ tools/memory_watcher/memory_watcher.h (working copy)
|
| @@ -23,6 +23,19 @@
|
| // allocations and frees.
|
| class MemoryWatcher : MemoryObserver {
|
| public:
|
| + struct StackTrack {
|
| + CallStack* stack;
|
| + int count;
|
| + int size;
|
| + };
|
| +
|
| + typedef std::map<int32, AllocationStack*, std::less<int32>,
|
| + PrivateHookAllocator<int32> > CallStackMap;
|
| + typedef std::map<int32, StackTrack, std::less<int32>,
|
| + PrivateHookAllocator<int32> > CallStackIdMap;
|
| + typedef std::basic_string<char, std::char_traits<char>,
|
| + PrivateHookAllocator<char> > PrivateAllocatorString;
|
| +
|
| MemoryWatcher();
|
| virtual ~MemoryWatcher();
|
|
|
| @@ -49,32 +62,24 @@
|
| // Unhooks our memory hooks.
|
| void Unhook();
|
|
|
| + // Check to see if this thread is already processing a block, and should not
|
| + // recurse.
|
| + bool LockedRecursionDetected() const;
|
| +
|
| // This is for logging.
|
| FILE* file_;
|
|
|
| - struct StackTrack {
|
| - CallStack* stack;
|
| - int count;
|
| - int size;
|
| - };
|
| -
|
| bool hooked_; // True when this class has the memory_hooks hooked.
|
|
|
| - bool in_track_;
|
| + // Either 0, or else the threadID for a thread that is actively working on
|
| + // a stack track. Used to avoid recursive tracking.
|
| + DWORD active_thread_id_;
|
| +
|
| Lock block_map_lock_;
|
| - typedef std::map<int32, AllocationStack*, std::less<int32>,
|
| - PrivateHookAllocator<int32>> CallStackMap;
|
| - typedef std::map<int32, StackTrack, std::less<int32>,
|
| - PrivateHookAllocator<int32>> CallStackIdMap;
|
| // The block_map provides quick lookups based on the allocation
|
| // pointer. This is important for having fast round trips through
|
| // malloc/free.
|
| CallStackMap *block_map_;
|
| - // The stack_map keeps track of the known CallStacks based on the
|
| - // hash of the CallStack. This is so that we can quickly aggregate
|
| - // like-CallStacks together.
|
| - CallStackIdMap *stack_map_;
|
| - int32 block_map_size_;
|
|
|
| // The file name for that log.
|
| std::string file_name_;
|
|
|