Bumping manifests a=b2g-bump
[gecko.git] / tools / jprof / leaky.h
blob5dafe30b920a3c5d131c920b63127e1840e5dba7
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #ifndef __leaky_h_
6 #define __leaky_h_
8 #include "config.h"
9 #include <stdio.h>
10 #include <string.h>
11 #include <sys/types.h>
12 #include "libmalloc.h"
13 #include "strset.h"
14 #include "intcnt.h"
16 typedef unsigned int u_int;
18 struct Symbol;
19 struct leaky;
21 class FunctionCount : public IntCount
23 public:
24 void printReport(FILE *fp, leaky *lk, int parent, int total);
27 struct Symbol {
28 char* name;
29 u_long address;
30 int timerHit;
31 FunctionCount cntP, cntC;
33 int regChild(int id) {return cntC.countAdd(id, 1);}
34 int regParrent(int id) {return cntP.countAdd(id, 1);}
35 void regClear() {cntC.clear(); cntP.clear();}
37 Symbol() : timerHit(0) {}
38 void Init(const char* aName, u_long aAddress) {
39 name = aName ? strdup(aName) : (char *)"";
40 address = aAddress;
44 struct LoadMapEntry {
45 char* name; // name of .so
46 u_long address; // base address where it was mapped in
47 LoadMapEntry* next;
50 struct leaky {
51 leaky();
52 ~leaky();
54 void initialize(int argc, char** argv);
55 void open(char *arg);
57 char* applicationName;
58 int logFileIndex;
59 int numLogFiles;
60 char* progFile;
61 FILE* outputfd;
63 bool quiet;
64 bool showAddress;
65 bool showThreads;
66 bool cleo;
67 u_int stackDepth;
68 int onlyThread;
69 char* output_dir;
71 int mappedLogFile;
72 malloc_log_entry* firstLogEntry;
73 malloc_log_entry* lastLogEntry;
75 int stacks;
77 int sfd;
78 Symbol** externalSymbols;
79 Symbol** lastSymbol;
80 int usefulSymbols;
81 int numExternalSymbols;
82 StrSet exclusions;
83 u_long lowestSymbolAddr;
84 u_long highestSymbolAddr;
86 LoadMapEntry* loadMap;
88 bool collect_last;
89 int collect_start;
90 int collect_end;
92 StrSet roots;
93 StrSet includes;
95 void usageError();
97 void LoadMap();
99 void analyze(int thread);
101 void dumpEntryToLog(malloc_log_entry* lep);
103 void insertAddress(u_long address, malloc_log_entry* lep);
104 void removeAddress(u_long address, malloc_log_entry* lep);
106 void displayStackTrace(FILE* out, malloc_log_entry* lep);
108 Symbol ** ExtendSymbols(int num);
109 void ReadSymbols(const char* fileName, u_long aBaseAddress);
110 void ReadSharedLibrarySymbols();
111 void setupSymbols(const char* fileName);
112 Symbol* findSymbol(u_long address);
113 bool excluded(malloc_log_entry* lep);
114 bool included(malloc_log_entry* lep);
115 const char* indexToName(int idx) {return externalSymbols[idx]->name;}
117 private:
118 void generateReportHTML(FILE *fp, int *countArray, int count, int thread);
119 int findSymbolIndex(u_long address);
122 #endif /* __leaky_h_ */