1 /*
2 * Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * All rights reserved. Distributed under the terms of the MIT license.
4 */
5 #include "AllocationInfo.h"
6
7 #include "DebugSupport.h"
8
9 #include "Attribute.h"
10 #include "Directory.h"
11 #include "Entry.h"
12 #include "File.h"
13 #include "SymLink.h"
14
15 // constructor
AllocationInfo()16 AllocationInfo::AllocationInfo()
17 : fNodeTableArraySize(0),
18 fNodeTableVectorSize(0),
19 fNodeTableElementCount(0),
20 fDirectoryEntryTableArraySize(0),
21 fDirectoryEntryTableVectorSize(0),
22 fDirectoryEntryTableElementCount(0),
23
24 fAttributeCount(0),
25 fAttributeSize(0),
26 fDirectoryCount(0),
27 fEntryCount(0),
28 fFileCount(0),
29 fFileSize(0),
30 fSymLinkCount(0),
31 fSymLinkSize(0),
32
33 fAreaCount(0),
34 fAreaSize(0),
35 fBlockCount(0),
36 fBlockSize(0),
37 fListCount(0),
38 fListSize(0),
39 fOtherCount(0),
40 fOtherSize(0),
41 fStringCount(0),
42 fStringSize(0)
43 {
44 }
45
46 // destructor
~AllocationInfo()47 AllocationInfo::~AllocationInfo()
48 {
49 }
50
51 // AddNodeTableAllocation
52 void
AddNodeTableAllocation(size_t arraySize,size_t vectorSize,size_t elementSize,size_t elementCount)53 AllocationInfo::AddNodeTableAllocation(size_t arraySize, size_t vectorSize,
54 size_t elementSize, size_t elementCount)
55 {
56 fNodeTableArraySize += arraySize;
57 fNodeTableVectorSize += vectorSize * elementSize;
58 fNodeTableElementCount += elementCount;
59 }
60
61 // AddDirectoryEntryTableAllocation
62 void
AddDirectoryEntryTableAllocation(size_t arraySize,size_t vectorSize,size_t elementSize,size_t elementCount)63 AllocationInfo::AddDirectoryEntryTableAllocation(size_t arraySize,
64 size_t vectorSize,
65 size_t elementSize,
66 size_t elementCount)
67 {
68 fDirectoryEntryTableArraySize += arraySize;
69 fDirectoryEntryTableVectorSize += vectorSize * elementSize;
70 fDirectoryEntryTableElementCount += elementCount;
71 }
72
73 // AddAttributeAllocation
74 void
AddAttributeAllocation(size_t size)75 AllocationInfo::AddAttributeAllocation(size_t size)
76 {
77 fAttributeCount++;
78 fAttributeSize += size;
79 }
80
81 // AddDirectoryAllocation
82 void
AddDirectoryAllocation()83 AllocationInfo::AddDirectoryAllocation()
84 {
85 fDirectoryCount++;
86 }
87
88 // AddEntryAllocation
89 void
AddEntryAllocation()90 AllocationInfo::AddEntryAllocation()
91 {
92 fEntryCount++;
93 }
94
95 // AddFileAllocation
96 void
AddFileAllocation(size_t size)97 AllocationInfo::AddFileAllocation(size_t size)
98 {
99 fFileCount++;
100 fFileSize += size;
101 }
102
103 // AddSymLinkAllocation
104 void
AddSymLinkAllocation(size_t size)105 AllocationInfo::AddSymLinkAllocation(size_t size)
106 {
107 fSymLinkCount++;
108 fSymLinkSize += size;
109 }
110
111 // AddAreaAllocation
112 void
AddAreaAllocation(size_t size,size_t count)113 AllocationInfo::AddAreaAllocation(size_t size, size_t count)
114 {
115 fAreaCount += count;
116 fAreaSize += count * size;
117 }
118
119 // AddBlockAllocation
120 void
AddBlockAllocation(size_t size)121 AllocationInfo::AddBlockAllocation(size_t size)
122 {
123 fBlockCount++;
124 fBlockSize += size;
125 }
126
127 // AddListAllocation
128 void
AddListAllocation(size_t capacity,size_t elementSize)129 AllocationInfo::AddListAllocation(size_t capacity, size_t elementSize)
130 {
131 fListCount += 1;
132 fListSize += capacity * elementSize;
133 }
134
135 // AddOtherAllocation
136 void
AddOtherAllocation(size_t size,size_t count)137 AllocationInfo::AddOtherAllocation(size_t size, size_t count)
138 {
139 fOtherCount += count;
140 fOtherSize += size * count;
141 }
142
143 // AddStringAllocation
144 void
AddStringAllocation(size_t size)145 AllocationInfo::AddStringAllocation(size_t size)
146 {
147 fStringCount++;
148 fStringSize += size;
149 }
150
151 // Dump
152 void
Dump() const153 AllocationInfo::Dump() const
154 {
155 size_t heapCount = 0;
156 size_t heapSize = 0;
157 size_t areaCount = 0;
158 size_t areaSize = 0;
159
160 PRINT(" node table:\n");
161 PRINT(" array size: %9lu\n", fNodeTableArraySize);
162 PRINT(" vector size: %9lu\n", fNodeTableVectorSize);
163 PRINT(" elements: %9lu\n", fNodeTableElementCount);
164 areaCount += 2;
165 areaSize += fNodeTableArraySize * sizeof(int32) + fNodeTableVectorSize;
166
167 PRINT(" entry table:\n");
168 PRINT(" array size: %9lu\n", fDirectoryEntryTableArraySize);
169 PRINT(" vector size: %9lu\n", fDirectoryEntryTableVectorSize);
170 PRINT(" elements: %9lu\n", fDirectoryEntryTableElementCount);
171 areaCount += 2;
172 areaSize += fDirectoryEntryTableArraySize * sizeof(int32)
173 + fDirectoryEntryTableVectorSize;
174
175 PRINT(" attributes: %9lu, size: %9lu\n", fAttributeCount, fAttributeSize);
176 heapCount += fAttributeCount;
177 heapSize += fAttributeCount * sizeof(Attribute);
178
179 PRINT(" directories: %9lu\n", fDirectoryCount);
180 heapCount += fDirectoryCount;
181 heapSize += fDirectoryCount * sizeof(Directory);
182
183 PRINT(" entries: %9lu\n", fEntryCount);
184 heapCount += fEntryCount;
185 heapSize += fEntryCount * sizeof(Entry);
186
187 PRINT(" files: %9lu, size: %9lu\n", fFileCount, fFileSize);
188 heapCount += fFileCount;
189 heapSize += fFileCount * sizeof(File);
190
191 PRINT(" symlinks: %9lu, size: %9lu\n", fSymLinkCount, fSymLinkSize);
192 heapCount += fSymLinkCount;
193 heapSize += fSymLinkCount * sizeof(SymLink);
194
195 PRINT(" areas: %9lu, size: %9lu\n", fAreaCount, fAreaSize);
196 areaCount += fAreaCount;
197 areaSize += fAreaSize;
198
199 PRINT(" blocks: %9lu, size: %9lu\n", fBlockCount, fBlockSize);
200
201 PRINT(" lists: %9lu, size: %9lu\n", fListCount, fListSize);
202 heapCount += fListCount;
203 heapSize += fListSize;
204
205 PRINT(" other: %9lu, size: %9lu\n", fOtherCount, fOtherSize);
206 heapCount += fOtherCount;
207 heapSize += fOtherSize;
208
209 PRINT(" strings: %9lu, size: %9lu\n", fStringCount, fStringSize);
210 heapCount += fStringCount;
211 heapSize += fStringSize;
212
213 PRINT("heap: %9lu allocations, size: %9lu\n", heapCount, heapSize);
214 PRINT("areas: %9lu allocations, size: %9lu\n", areaCount, areaSize);
215 }
216
217