Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(405)

Side by Side Diff: tools/memory_watcher/memory_watcher.h

Issue 314253003: Remove memory_watcher tool as well as --memory-profile command line flag. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile issue on non-ChromeOS platforms Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/memory_watcher/memory_hook.cc ('k') | tools/memory_watcher/memory_watcher.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2006-2008 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 // MemoryWatcher.
6 // The MemoryWatcher is a library that can be linked into any
7 // win32 application. It will override the default memory allocators
8 // and track call stacks for any allocations that are made. It can
9 // then be used to see what memory is in use.
10
11 #ifndef TOOLS_MEMORY_WATCHER_MEMORY_WATCHER_
12 #define TOOLS_MEMORY_WATCHER_MEMORY_WATCHER_
13
14 #include <map>
15 #include <functional>
16
17 #include "base/synchronization/lock.h"
18 #include "tools/memory_watcher/memory_hook.h"
19
20 class CallStack;
21 class AllocationStack;
22
23 // The MemoryWatcher installs allocation hooks and monitors
24 // allocations and frees.
25 class MemoryWatcher : MemoryObserver {
26 public:
27 struct StackTrack {
28 CallStack* stack;
29 int count;
30 int size;
31 };
32
33 typedef std::map<int32, AllocationStack*, std::less<int32>,
34 PrivateHookAllocator<int32> > CallStackMap;
35 typedef std::map<int32, StackTrack, std::less<int32>,
36 PrivateHookAllocator<int32> > CallStackIdMap;
37 typedef std::basic_string<char, std::char_traits<char>,
38 PrivateHookAllocator<char> > PrivateAllocatorString;
39
40 MemoryWatcher();
41 virtual ~MemoryWatcher();
42
43 // Dump all tracked pointers still in use.
44 void DumpLeaks();
45
46 // MemoryObserver interface.
47 virtual void OnTrack(HANDLE heap, int32 id, int32 size);
48 virtual void OnUntrack(HANDLE heap, int32 id, int32 size);
49
50 // Sets a name that appears in the generated file name.
51 void SetLogName(char* log_name);
52
53 private:
54 // Opens the logfile which we create.
55 void OpenLogFile();
56
57 // Close the logfile.
58 void CloseLogFile();
59
60 // Hook the memory hooks.
61 void Hook();
62
63 // Unhooks our memory hooks.
64 void Unhook();
65
66 // Check to see if this thread is already processing a block, and should not
67 // recurse.
68 bool LockedRecursionDetected() const;
69
70 // This is for logging.
71 FILE* file_;
72
73 bool hooked_; // True when this class has the memory_hooks hooked.
74
75 // Either 0, or else the threadID for a thread that is actively working on
76 // a stack track. Used to avoid recursive tracking.
77 DWORD active_thread_id_;
78
79 base::Lock block_map_lock_;
80 // The block_map provides quick lookups based on the allocation
81 // pointer. This is important for having fast round trips through
82 // malloc/free.
83 CallStackMap *block_map_;
84
85 // The file name for that log.
86 std::string file_name_;
87
88 // An optional name that appears in the log file name (used to differentiate
89 // logs).
90 std::string log_name_;
91 };
92
93
94
95 #endif // TOOLS_MEMORY_WATCHER_MEMORY_WATCHER_
OLDNEW
« no previous file with comments | « tools/memory_watcher/memory_hook.cc ('k') | tools/memory_watcher/memory_watcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698