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 16AllocationInfo::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 47AllocationInfo::~AllocationInfo() 48{ 49} 50 51// AddNodeTableAllocation 52void 53AllocationInfo::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 62void 63AllocationInfo::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 74void 75AllocationInfo::AddAttributeAllocation(size_t size) 76{ 77 fAttributeCount++; 78 fAttributeSize += size; 79} 80 81// AddDirectoryAllocation 82void 83AllocationInfo::AddDirectoryAllocation() 84{ 85 fDirectoryCount++; 86} 87 88// AddEntryAllocation 89void 90AllocationInfo::AddEntryAllocation() 91{ 92 fEntryCount++; 93} 94 95// AddFileAllocation 96void 97AllocationInfo::AddFileAllocation(size_t size) 98{ 99 fFileCount++; 100 fFileSize += size; 101} 102 103// AddSymLinkAllocation 104void 105AllocationInfo::AddSymLinkAllocation(size_t size) 106{ 107 fSymLinkCount++; 108 fSymLinkSize += size; 109} 110 111// AddAreaAllocation 112void 113AllocationInfo::AddAreaAllocation(size_t size, size_t count) 114{ 115 fAreaCount += count; 116 fAreaSize += count * size; 117} 118 119// AddBlockAllocation 120void 121AllocationInfo::AddBlockAllocation(size_t size) 122{ 123 fBlockCount++; 124 fBlockSize += size; 125} 126 127// AddListAllocation 128void 129AllocationInfo::AddListAllocation(size_t capacity, size_t elementSize) 130{ 131 fListCount += 1; 132 fListSize += capacity * elementSize; 133} 134 135// AddOtherAllocation 136void 137AllocationInfo::AddOtherAllocation(size_t size, size_t count) 138{ 139 fOtherCount += count; 140 fOtherSize += size * count; 141} 142 143// AddStringAllocation 144void 145AllocationInfo::AddStringAllocation(size_t size) 146{ 147 fStringCount++; 148 fStringSize += size; 149} 150 151// Dump 152void 153AllocationInfo::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