-- File: PerfPrivate.mesa
-- Edited by Sandman on September 19, 1980 11:51 AM
DIRECTORY
PerfStructures USING [
FrameHandle, GlobalFrameHandle, LongNumber, NullGlobalFrame, PsbHandle, RealPC];
PerfPrivate: DEFINITIONS =
BEGIN OPEN PerfStructures;
Number: TYPE = LONG CARDINAL;
LongNumber: TYPE = PerfStructures.LongNumber;
OverFlowNumber: Number = 20000000B;
NodeID: TYPE = RECORD [pc: RealPC, frame: GlobalFrameHandle];
NullID: NodeID = [[0], NullGlobalFrame];
CallClass: TYPE = {perf, normal};
LegAddClass: TYPE = {none, successor};
LegTrackClass: TYPE = {none, successor, all};
VersionID: CARDINAL = 09190;
PerfControlRecord: TYPE = MACHINE DEPENDENT RECORD [
measuringNow(0): BOOLEAN,
nodeTable(1): POINTER TO NodeTab,
legTable(2): POINTER TO LegTab,
process(3): PsbHandle,
lastCall(4): CallClass,
trackLeg(5): LegTrackClass,
addLeg(6): LegAddClass,
totalBreaks(7): LONG CARDINAL,
perfTime(9): LONG CARDINAL,
totalTime(11): LONG CARDINAL,
lastID(13): NodeIndex,
nextLeg(14): CARDINAL,
nextNode(15): CARDINAL,
histFree(16): HistIndex,
histBase(17): HistBase,
saveBreakHandler(18): FrameHandle,
self(19): FrameHandle,
newSession(20): BOOLEAN,
version(21): CARDINAL,
pulseConversion(22): LONG CARDINAL ← NULL];
MaxNodes: CARDINAL = 20; -- maximum number of nodes tracked
NodeIndex: TYPE = CARDINAL [0..MaxNodes + 1];
NullNode: NodeIndex = MaxNodes;
AllNodes: NodeIndex = MaxNodes + 1;
HighBits: CARDINAL = 77B;
SubNodeIndex: TYPE = NodeIndex [0..MaxNodes);
Node: TYPE = RECORD [
id: NodeID,
hitsLow: CARDINAL,
hist: HistIndex,
overflowed: BOOLEAN,
hitsHigh: [0..HighBits]];
NodeTab: TYPE = ARRAY SubNodeIndex OF Node;
MaxLegs: CARDINAL = 40; -- maximum number of legs tracked
NoLegSlot: LegIndex = MaxLegs + 1;
LegIndex: TYPE = CARDINAL [0..MaxLegs + 1];
SubLegIndex: TYPE = LegIndex [0..MaxLegs);
Leg: TYPE = RECORD [
start: Number,
lock: BOOLEAN,
from, to: NodeIndex,
sum: Number,
owner: UNSPECIFIED,
hitsLow: CARDINAL,
hist: HistIndex,
overflowed, someIgnored: BOOLEAN,
hitsHigh: [0..HighBits]];
LegTab: TYPE = ARRAY SubLegIndex OF Leg;
HistClass: TYPE = {linear, log};
HistType: TYPE = {node, leg};
Histogram: TYPE = RECORD [
count, scale: CARDINAL,
sum: Number,
type: HistType,
class: HistClass,
nBuckets: [0..377B],
overflow: CARDINAL,
underflow: CARDINAL,
base: Number,
buckets: ARRAY [0..0) OF CARDINAL];
HistBase: TYPE = BASE POINTER;
HistIndex: TYPE = HistBase RELATIVE ORDERED POINTER [0..HistSpaceSize) TO
Histogram;
NullHist: HistIndex = LAST[HistIndex];
HistSpaceSize: CARDINAL = 256;
PCR: TYPE = POINTER TO PerfControlRecord;
ReadWrite: TYPE = {read, write};
END.