windows-nt/Source/XPSP1/NT/com/rpc/midl/statistics/stringinfo.pl
2020-09-26 16:20:57 +08:00

167 lines
4.8 KiB
Raku

###################################################################################
# #
# Copyright (c) 1989-1999 Microsoft Corporation #
# #
# Module Name: #
# #
# stringinfo.pl #
# #
# Abstract: #
# #
# Computes statistics from MIDL format string instrumentation. #
# #
# Notes: #
# #
# History: #
# #
# Oct-26-99 mzoran Created. #
# #
# #
###################################################################################
$RemoveDuplicateSymbols = 1;
@procbuckets = (100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 2000, 3000, 4000, 1000000);
@procbucketvalues = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
@typebuckets = (100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 2000, 3000, 4000, 1000000);
@typebucketvalues = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
$numbuckets = 14;
%Names;
@ProcList;
@TypeList;
$MinProcSize = 100000000;
$MinProcName = "";
$MaxProcSize = 0;
$MaxProcName = "";
$TotalProcSize = 0;
$NumberProcs = 0;
$MinTypeSize = 100000000;
$MinTypeName = "";
$MaxTypeSize = 0;
$MaxTypeName = "";
$TotalTypeSize = 0;
$NumberTypes = 0;
while($line = <STDIN>) {
$file = "";
$type = "";
$size = 0;
($file,$type,$size) = split(" ",$line);
print("Processing $file, $type, $size\n");
if (exists($Names{$file.$type}))
{
print("Skipping $file $type\n");
}
else
{
$Names{$file.$type} = 0;
if ($type eq "TYPE_FORMAT_STRING_SIZE")
{
push (@TypeList, $size);
if ($size > $MaxTypeSize) {
$MaxTypeSize = $size;
$MaxTypeName = $file;
}
if ($size < $MinTypeSize) {
$MinTypeSize = $size;
$MinTypeName = $file;
}
$TotalTypeSize += $size;
$NumberTypes++;
}
elsif ($type eq "PROC_FORMAT_STRING_SIZE")
{
push (@ProcList, $size);
if ($size > $MaxProcSize) {
$MaxProcSize = $size;
$MaxProcName = $file;
}
if ($size < $MinProcSize) {
$MinProcSize = $size;
$MinProcName = $file;
}
$TotalProcSize += $size;
$NumberProcs++;
}
else
{
print ("Unknow type: $type. Skipping..\n");
}
}
}
print("\n\n");
print("Numbers are for 32bit only.\n");
print("\n");
print("Total proc string size: $TotalProcSize\n");
print("Number proc strings: $NumberProcs\n");
print("Min proc string: $MinProcSize($MinProcName)\n");
print("Max proc string: $MaxProcSize($MaxProcName)\n");
print("Average proc size: ".($TotalProcSize / $NumberProcs)."\n");
foreach $i (@ProcList)
{
for($j = 0; 1; $j++)
{
if ($i <= $procbuckets[$j])
{
$procbucketvalues[$j]++;
last;
}
}
}
print("Proc size histogram:\n");
for($i = 0; $i < $numbuckets; $i++)
{
print("$procbuckets[$i] \t");
}
print("\n");
for($i = 0; $i < $numbuckets; $i++)
{
print("$procbucketvalues[$i] \t");
}
print("\n");
print("\n");
print("Total Types string size: $TotalTypeSize\n");
print("Number proc strings: $NumberTypes\n");
print("Min type string: $MinTypeSize($MinTypeName)\n");
print("Max type string: $MaxTypeSize($MaxTypeName)\n");
print("Average type size: ".($TotalTypeSize / $NumberTypes)."\n");
foreach $i (@TypeList)
{
for($j = 0; 1; $j++)
{
if ($i <= $typebuckets[$j])
{
$typebucketvalues[$j]++;
last;
}
}
}
print("Type size histogram:\n");
for($i = 0; $i < $numbuckets; $i++)
{
print("$typebuckets[$i] \t");
}
print("\n");
for($i = 0; $i < $numbuckets; $i++)
{
print("$typebucketvalues[$i] \t");
}