summaryrefslogtreecommitdiff
path: root/cmdline
diff options
context:
space:
mode:
Diffstat (limited to 'cmdline')
-rw-r--r--cmdline/apt-cache.cc56
1 files changed, 32 insertions, 24 deletions
diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc
index 620cb6c01..88a323280 100644
--- a/cmdline/apt-cache.cc
+++ b/cmdline/apt-cache.cc
@@ -270,34 +270,36 @@ static bool DumpPackage(CommandLine &CmdL)
template<class T>
static void ShowHashTableStats(std::string Type,
T *StartP,
- map_ptrloc *Hashtable,
+ map_pointer_t *Hashtable,
unsigned long Size)
{
// hashtable stats for the HashTable
- long NumBuckets = Size;
- long UsedBuckets = 0;
- long UnusedBuckets = 0;
- long LongestBucket = 0;
- long ShortestBucket = NumBuckets;
+ unsigned long NumBuckets = Size;
+ unsigned long UsedBuckets = 0;
+ unsigned long UnusedBuckets = 0;
+ unsigned long LongestBucket = 0;
+ unsigned long ShortestBucket = NumBuckets;
+ unsigned long Entries = 0;
for (unsigned int i=0; i < NumBuckets; ++i)
{
T *P = StartP + Hashtable[i];
if(P == 0 || P == StartP)
{
- UnusedBuckets++;
+ ++UnusedBuckets;
continue;
}
- long ThisBucketSize = 0;
+ ++UsedBuckets;
+ unsigned long ThisBucketSize = 0;
for (; P != StartP; P = StartP + P->Next)
- ThisBucketSize++;
+ ++ThisBucketSize;
+ Entries += ThisBucketSize;
LongestBucket = std::max(ThisBucketSize, LongestBucket);
ShortestBucket = std::min(ThisBucketSize, ShortestBucket);
- UsedBuckets += ThisBucketSize;
}
- cout << "Total buckets " << Type << ": " << SizeToStr(NumBuckets) << std::endl;
- cout << " Unused: " << SizeToStr(UnusedBuckets) << std::endl;
+ cout << "Total buckets in " << Type << ": " << NumBuckets << std::endl;
+ cout << " Unused: " << UnusedBuckets << std::endl;
cout << " Used: " << UsedBuckets << std::endl;
- cout << " Average entries: " << UsedBuckets/(double)NumBuckets << std::endl;
+ cout << " Average entries: " << Entries/(double)NumBuckets << std::endl;
cout << " Longest: " << LongestBucket << std::endl;
cout << " Shortest: " << ShortestBucket << std::endl;
}
@@ -398,25 +400,31 @@ static bool Stats(CommandLine &)
}
}
cout << _("Total dependency version space: ") << SizeToStr(DepVerSize) << endl;
-
+
unsigned long Slack = 0;
for (int I = 0; I != 7; I++)
Slack += Cache->Head().Pools[I].ItemSize*Cache->Head().Pools[I].Count;
cout << _("Total slack space: ") << SizeToStr(Slack) << endl;
-
+
unsigned long Total = 0;
- Total = Slack + Size + Cache->Head().DependsCount*Cache->Head().DependencySz +
- Cache->Head().VersionCount*Cache->Head().VersionSz +
- Cache->Head().PackageCount*Cache->Head().PackageSz +
- Cache->Head().VerFileCount*Cache->Head().VerFileSz +
- Cache->Head().ProvidesCount*Cache->Head().ProvidesSz;
+#define APT_CACHESIZE(X,Y) (Cache->Head().X * Cache->Head().Y)
+ Total = Slack + Size +
+ APT_CACHESIZE(GroupCount, GroupSz) +
+ APT_CACHESIZE(PackageCount, PackageSz) +
+ APT_CACHESIZE(VersionCount, VersionSz) +
+ APT_CACHESIZE(DescriptionCount, DescriptionSz) +
+ APT_CACHESIZE(DependsCount, DependencySz) +
+ APT_CACHESIZE(PackageFileCount, PackageFileSz) +
+ APT_CACHESIZE(VerFileCount, VerFileSz) +
+ APT_CACHESIZE(DescFileCount, DescFileSz) +
+ APT_CACHESIZE(ProvidesCount, ProvidesSz) +
+ (2 * Cache->Head().HashTableSize * sizeof(map_id_t));
cout << _("Total space accounted for: ") << SizeToStr(Total) << endl;
+#undef APT_CACHESIZE
// hashtable stats
- int HashTableSize = sizeof(Cache->HeaderP->PkgHashTable)/sizeof(map_ptrloc);
- ShowHashTableStats<pkgCache::Package>("PkgHashTable", Cache->PkgP, Cache->HeaderP->PkgHashTable, HashTableSize);
- HashTableSize = sizeof(Cache->HeaderP->GrpHashTable)/sizeof(map_ptrloc);
- ShowHashTableStats<pkgCache::Group>("GrpHashTable", Cache->GrpP, Cache->HeaderP->GrpHashTable, HashTableSize);
+ ShowHashTableStats<pkgCache::Package>("PkgHashTable", Cache->PkgP, Cache->Head().PkgHashTable(), Cache->Head().HashTableSize);
+ ShowHashTableStats<pkgCache::Group>("GrpHashTable", Cache->GrpP, Cache->Head().GrpHashTable(), Cache->Head().HashTableSize);
return true;
}