The Trunk: System-eem.1058.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: System-eem.1058.mcz

commits-2
Eliot Miranda uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-eem.1058.mcz

==================== Summary ====================

Name: System-eem.1058
Author: eem
Time: 28 March 2019, 11:03:09.932094 am
UUID: ebedf3e7-56ae-464d-a7fc-c507e370e4e7
Ancestors: System-eem.1057

A long-needed refactor of vmStatisticsReportString into vmStatisticsReportOn:

=============== Diff against System-eem.1057 ===============

Item was added:
+ ----- Method: SmalltalkImage>>vmStatisticsReportOn: (in category 'vm statistics') -----
+ vmStatisticsReportOn: str
+ "(Workspace new contents: Smalltalk vmStatisticsReportString)
+ openLabel: 'VM Statistics'"
+ "StringHolderView
+ open: (StringHolder new contents: Smalltalk vmStatisticsReportString)
+ label: 'VM Statistics'"
+
+ | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime fullGCCompactionTime incrGCs incrGCTime tenureCount upTime
+  upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 freeSize youngSize used spur timeReporter idleMs idleMs2 codeCompactionTime codeCompactionsOrNil codeCompactionTime2 codeCompactions2 maxParams |
+ "Pad to protect for a VM that does not answer the expected parameter array"
+ maxParams := 63. "max position referenced in this method"
+ params := Array streamContents: [ :strm |
+ strm nextPutAll: Smalltalk getVMParameters.
+ [strm position < maxParams] whileTrue: [strm nextPut: nil]].
+ oldSpaceEnd := params at: 1.
+ youngSpaceEnd := params at: 2.
+ memorySize := params at: 3.
+ fullGCs := params at: 7.
+ fullGCTime := params at: 8.
+ incrGCs := params at: 9.
+ incrGCTime := params at: 10.
+ tenureCount := params at: 11.
+ fullGCCompactionTime := params at: 18.
+ codeCompactionsOrNil := params at: 62.
+ codeCompactionTime := params at: 63.
+
+ upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startup in later Spur VMs"
+ ifTrue: [Time utcMicrosecondClock - (params at: 20) + 500 // 1000]
+ ifFalse: [Time eventMillisecondClock]. "Fall back on old microsecond clock; Good for 47.5 days"
+ spur := (params at: 41)
+ ifNotNil: [ :p | p anyMask: 16]
+ ifNil: [false].
+ timeReporter := [:time| | seconds |
+ seconds := time / 1000.
+ seconds >= (60*60*24)
+ ifTrue:
+ [str print: seconds / 60 // 60 // 24; nextPut: $d; space;
+ print: seconds / 60 // 60 \\ 24; nextPut: $h; space]
+ ifFalse:
+ [seconds >= (60*60) ifTrue:
+ [str print: (seconds / 60 // 60); nextPut: $h; space]].
+ str
+ print: (seconds / 60 \\ 60) asInteger; nextPut: $m; space;
+ print: (seconds \\ 60) asInteger; nextPut: $s].
+ str nextPutAll: 'uptime '.
+ timeReporter value: upTime.
+ (idleMs := params at: 16) ~= 0 ifTrue:
+ [str tab; nextPutAll: '(runtime '.
+ idleMs := idleMs // 1000.
+ timeReporter value: upTime - idleMs.
+ str nextPutAll: ', idletime '.
+ timeReporter value: idleMs.
+ str nextPut: $)].
+ str cr.
+
+ str nextPutAll: 'memory ';
+ nextPutAll: memorySize asStringWithCommas; nextPutAll: ' bytes'; cr.
+ str nextPutAll: ' old ';
+ nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
+ print: oldSpaceEnd / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
+
+ spur ifTrue:
+ [(youngSize := (params at: 19)  * 7 // 5) = 0 ifTrue: [params at: 44].
+ youngSize := youngSize roundUpTo: 1024.
+ str nextPutAll: ' young ';
+ nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes (';
+ print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
+ youngSize := youngSpaceEnd. "used eden"
+ freeSize := (params at: 54) + (params at: 44) - youngSize.
+ used := youngSize + oldSpaceEnd - freeSize.
+ str nextPutAll: ' used ';
+ nextPutAll: used asStringWithCommas; nextPutAll: ' bytes (';
+ print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
+ str nextPutAll: ' free ';
+ nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes (';
+ print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr]
+ ifFalse: "Earlier VM and V3 object memory"
+ [str nextPutAll: ' young ';
+ nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
+ print: (youngSpaceEnd - oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
+ str nextPutAll: ' used ';
+ nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
+ print: (youngSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
+ str nextPutAll: ' free ';
+ nextPutAll: (memorySize - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
+ print: (memorySize - youngSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr].
+
+ str nextPutAll: 'GCs ';
+ nextPutAll: (fullGCs + incrGCs) asStringWithCommas.
+ fullGCs + incrGCs > 0 ifTrue:
+ [str
+ nextPutAll: ' (';
+ print: upTime / (fullGCs + incrGCs) maxDecimalPlaces: 1;
+ nextPutAll: ' ms between GCs'.
+ idleMs > 0 ifTrue:
+ [str
+ space;
+ print: upTime - idleMs / (fullGCs + incrGCs) maxDecimalPlaces: 1;
+ nextPutAll: ' ms runtime between GCs'].
+ str nextPut: $)].
+ str cr.
+ str nextPutAll: ' full ';
+ nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms (';
+ print: fullGCTime / (upTime - idleMs) * 100 maxDecimalPlaces: 2;
+ nextPutAll: '% runtime)';
+ nextPutAll: ', avg '; print: (fullGCTime / (fullGCs max: 1)) maxDecimalPlaces: 1; nextPutAll: ' ms'.
+ (spur and: [fullGCCompactionTime ~= 0]) ifTrue:
+ [str cr; nextPutAll: ' marking ';
+ nextPutAll: (fullGCTime - fullGCCompactionTime) asStringWithCommas; nextPutAll: ' ms (';
+ print: (fullGCTime - fullGCCompactionTime) / fullGCTime * 100 maxDecimalPlaces: 1;
+ nextPutAll: '%) avg '; print: (fullGCTime - fullGCCompactionTime / (fullGCs max: 1)) maxDecimalPlaces: 1;
+ nextPutAll: ' ms,'; cr;
+ nextPutAll: ' compacting ';
+ nextPutAll: fullGCCompactionTime asStringWithCommas; nextPutAll: ' ms (';
+ print: fullGCCompactionTime / fullGCTime * 100 maxDecimalPlaces: 1;
+ nextPutAll: '%) avg '; print: fullGCCompactionTime / (fullGCs max: 1) maxDecimalPlaces: 1;
+ nextPutAll: ' ms'].
+ str cr.
+ str nextPutAll: (spur ifTrue: [' scavenges '] ifFalse: [' incr ']);
+ nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms (';
+ print: incrGCTime / (upTime - idleMs) * 100 maxDecimalPlaces: 2;
+ nextPutAll: '% runtime), avg '; print: incrGCTime / incrGCs maxDecimalPlaces: 1; nextPutAll: ' ms'; cr.
+ str nextPutAll: ' tenures ';
+ nextPutAll: tenureCount asStringWithCommas.
+ tenureCount = 0 ifFalse:
+ [spur
+ ifTrue: [str nextPutAll: ' (avg '; print: tenureCount // (incrGCs max: 1); nextPutAll: ' tenures per scavenge)']
+ ifFalse: [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)']].
+ str cr.
+
+ codeCompactionsOrNil ifNotNil:
+ [str
+ nextPutAll: 'Code compactions '; crtab.
+ codeCompactionsOrNil = 0
+ ifTrue: [str
+ nextPutAll: codeCompactionsOrNil asString; cr]
+ ifFalse: [str
+ nextPutAll: codeCompactionsOrNil asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: codeCompactionTime asStringWithCommas; nextPutAll: ' ms (';
+ print: codeCompactionTime / (upTime - idleMs) * 100 maxDecimalPlaces: 3;
+ nextPutAll: '% runtime), avg '; print: codeCompactionTime / codeCompactionsOrNil maxDecimalPlaces: 1; nextPutAll: ' ms'; cr]].
+
+ LastStats ifNil: [LastStats := Array new: 9]
+ ifNotNil: [
+ LastStats size < 9 ifTrue:
+ [LastStats := LastStats, (Array new: 9 - LastStats size withAll: 0)].
+ upTime2 := upTime - (LastStats at: 1).
+ fullGCs2 := fullGCs - (LastStats at: 2).
+ fullGCTime2 := fullGCTime - (LastStats at: 3).
+ incrGCs2 := incrGCs - (LastStats at: 4).
+ incrGCTime2 := incrGCTime - (LastStats at: 5).
+ tenureCount2 := tenureCount - (LastStats at: 6).
+ idleMs2 := idleMs - (LastStats at: 7).
+ codeCompactionsOrNil ifNotNil:
+ [codeCompactions2 := codeCompactionsOrNil - (LastStats at: 8).
+ codeCompactionTime2 := codeCompactionTime - (LastStats at: 9)].
+
+ str nextPutAll: self textMarkerForShortReport ;
+ nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas.
+ fullGCs2 + incrGCs2 > 0 ifTrue:
+ [str
+ nextPutAll: ' (';
+ print: upTime2 // (fullGCs2 + incrGCs2);
+ nextPutAll: ' ms between GCs'.
+ idleMs2 > 0 ifTrue:
+ [str
+ nextPutAll: ', ';
+ print: upTime2 - idleMs2 // (fullGCs2 + incrGCs2);
+ nextPutAll: ' ms runtime between GCs'].
+ str nextPut: $)].
+ str cr.
+ str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1;
+ nextPutAll: ' s, runtime ';   print: (upTime2 - idleMs2 / 1000.0) maxDecimalPlaces: 1;
+ nextPutAll: ' s, idletime ';   print: (idleMs2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr.
+ str nextPutAll: ' full ';
+ nextPutAll: fullGCs2 asStringWithCommas.
+ fullGCs2 + fullGCTime2 > 0 ifTrue:
+ [str nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms (';
+ print: fullGCTime2 / (upTime2 - idleMs2) * 100 maxDecimalPlaces: 1;
+ nextPutAll: '% runtime)'.
+ str nextPutAll: ', avg '; print: fullGCTime2 / (fullGCs2 max: 1) maxDecimalPlaces: 1; nextPutAll: ' ms'].
+ str cr.
+ str nextPutAll: (spur ifTrue: [' scavenge '] ifFalse: [' incr ']);
+ nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms (';
+ print: incrGCTime2 / (upTime2 - idleMs2) * 100 maxDecimalPlaces: 1;
+ nextPutAll: '% runtime), avg '; print: incrGCTime2 / (incrGCs2 max: 1) maxDecimalPlaces: 1; nextPutAll: ' ms'.
+ str cr.
+ str nextPutAll: ' tenures ';
+ nextPutAll: tenureCount2 asStringWithCommas.
+ tenureCount2 = 0 ifFalse:
+ [spur
+ ifTrue: [str nextPutAll: ' (avg '; print: tenureCount2 // (incrGCs2 max: 1); nextPutAll: ' tenures per scavenge)']
+ ifFalse: [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)']].
+ str cr.
+ codeCompactionsOrNil ifNotNil:
+ [str nextPutAll: ' code compactions ';
+ nextPutAll: codeCompactions2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: codeCompactionTime2 asStringWithCommas; nextPutAll: ' ms (';
+ print: codeCompactionTime2 / (upTime2 - idleMs2) * 100 maxDecimalPlaces: 3;
+ nextPutAll: '% runtime)'.
+ codeCompactions2 > 0 ifTrue:
+ [str nextPutAll: ', avg '; print: codeCompactionTime2 / codeCompactions2 maxDecimalPlaces: 1; nextPutAll: ' ms'; cr.]]
+ ].
+ LastStats := { upTime. fullGCs. fullGCTime. incrGCs. incrGCTime. tenureCount. idleMs. codeCompactionsOrNil. codeCompactionTime }
+ !

Item was changed:
  ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm statistics') -----
  vmStatisticsReportString
  "(Workspace new contents: Smalltalk vmStatisticsReportString)
  openLabel: 'VM Statistics'"
  "StringHolderView
  open: (StringHolder new contents: Smalltalk vmStatisticsReportString)
  label: 'VM Statistics'"
 
+ ^String new: 2048 streamContents: [:s| self vmStatisticsReportOn: s]!
- | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime fullGCCompactionTime incrGCs incrGCTime tenureCount upTime
-  upTime2 fullGCs2 fullGCTime2  incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used spur timeReporter idleMs idleMs2 codeCompactionTime codeCompactionsOrNil codeCompactionTime2 codeCompactions2 maxParams |
- "Pad to protect for a VM that does not answer the expected parameter array"
- maxParams := 63. "max position referenced in this method"
- params := Array streamContents: [ :strm |
- strm nextPutAll: Smalltalk getVMParameters.
- [strm position < maxParams] whileTrue: [strm nextPut: nil]].
- oldSpaceEnd := params at: 1.
- youngSpaceEnd := params at: 2.
- memorySize := params at: 3.
- fullGCs := params at: 7.
- fullGCTime := params at: 8.
- incrGCs := params at: 9.
- incrGCTime := params at: 10.
- tenureCount := params at: 11.
- fullGCCompactionTime := params at: 18.
- codeCompactionsOrNil := params at: 62.
- codeCompactionTime := params at: 63.
-
- upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startup in later Spur VMs"
- ifTrue: [Time utcMicrosecondClock - (params at: 20) + 500 // 1000]
- ifFalse: [Time eventMillisecondClock]. "Fall back on old microsecond clock; Good for 47.5 days"
- spur := (params at: 41)
- ifNotNil: [ :p | p anyMask: 16]
- ifNil: [false].
- str := WriteStream on: (String new: 2048).
- timeReporter := [:time| | seconds |
- seconds := time / 1000.
- seconds >= (60*60*24)
- ifTrue:
- [str print: seconds / 60 // 60 // 24; nextPut: $d; space;
- print: seconds / 60 // 60 \\ 24; nextPut: $h; space]
- ifFalse:
- [seconds >= (60*60) ifTrue:
- [str print: (seconds / 60 // 60); nextPut: $h; space]].
- str
- print: (seconds / 60 \\ 60) asInteger; nextPut: $m; space;
- print: (seconds \\ 60) asInteger; nextPut: $s].
- str nextPutAll: 'uptime '.
- timeReporter value: upTime.
- (idleMs := params at: 16) ~= 0 ifTrue:
- [str tab; nextPutAll: '(runtime '.
- idleMs := idleMs // 1000.
- timeReporter value: upTime - idleMs.
- str nextPutAll: ', idletime '.
- timeReporter value: idleMs.
- str nextPut: $)].
- str cr.
-
- str nextPutAll: 'memory ';
- nextPutAll: memorySize asStringWithCommas; nextPutAll: ' bytes'; cr.
- str nextPutAll: ' old ';
- nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
- print: oldSpaceEnd / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
-
- spur ifTrue:
- [(youngSize := (params at: 19)  * 7 // 5) = 0 ifTrue: [params at: 44].
- youngSize := youngSize roundUpTo: 1024.
- str nextPutAll: ' young ';
- nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes (';
- print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
- youngSize := youngSpaceEnd. "used eden"
- freeSize := (params at: 54) + (params at: 44) - youngSize.
- used := youngSize + oldSpaceEnd - freeSize.
- str nextPutAll: ' used ';
- nextPutAll: used asStringWithCommas; nextPutAll: ' bytes (';
- print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
- str nextPutAll: ' free ';
- nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes (';
- print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr]
- ifFalse: "Earlier VM and V3 object memory"
- [str nextPutAll: ' young ';
- nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
- print: (youngSpaceEnd - oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
- str nextPutAll: ' used ';
- nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
- print: (youngSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
- str nextPutAll: ' free ';
- nextPutAll: (memorySize - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
- print: (memorySize - youngSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr].
-
- str nextPutAll: 'GCs ';
- nextPutAll: (fullGCs + incrGCs) asStringWithCommas.
- fullGCs + incrGCs > 0 ifTrue:
- [str
- nextPutAll: ' (';
- print: upTime / (fullGCs + incrGCs) maxDecimalPlaces: 1;
- nextPutAll: ' ms between GCs'.
- idleMs > 0 ifTrue:
- [str
- space;
- print: upTime - idleMs / (fullGCs + incrGCs) maxDecimalPlaces: 1;
- nextPutAll: ' ms runtime between GCs'].
- str nextPut: $)].
- str cr.
- str nextPutAll: ' full ';
- nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms (';
- print: fullGCTime / (upTime - idleMs) * 100 maxDecimalPlaces: 2;
- nextPutAll: '% runtime)';
- nextPutAll: ', avg '; print: (fullGCTime / (fullGCs max: 1)) maxDecimalPlaces: 1; nextPutAll: ' ms'.
- (spur and: [fullGCCompactionTime ~= 0]) ifTrue:
- [str cr; nextPutAll: ' marking ';
- nextPutAll: (fullGCTime - fullGCCompactionTime) asStringWithCommas; nextPutAll: ' ms (';
- print: (fullGCTime - fullGCCompactionTime) / fullGCTime * 100 maxDecimalPlaces: 1;
- nextPutAll: '%) avg '; print: (fullGCTime - fullGCCompactionTime / (fullGCs max: 1)) maxDecimalPlaces: 1;
- nextPutAll: ' ms,'; cr;
- nextPutAll: ' compacting ';
- nextPutAll: fullGCCompactionTime asStringWithCommas; nextPutAll: ' ms (';
- print: fullGCCompactionTime / fullGCTime * 100 maxDecimalPlaces: 1;
- nextPutAll: '%) avg '; print: fullGCCompactionTime / (fullGCs max: 1) maxDecimalPlaces: 1;
- nextPutAll: ' ms'].
- str cr.
- str nextPutAll: (spur ifTrue: [' scavenges '] ifFalse: [' incr ']);
- nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms (';
- print: incrGCTime / (upTime - idleMs) * 100 maxDecimalPlaces: 2;
- nextPutAll: '% runtime), avg '; print: incrGCTime / incrGCs maxDecimalPlaces: 1; nextPutAll: ' ms'; cr.
- str nextPutAll: ' tenures ';
- nextPutAll: tenureCount asStringWithCommas.
- tenureCount = 0 ifFalse:
- [spur
- ifTrue: [str nextPutAll: ' (avg '; print: tenureCount // (incrGCs max: 1); nextPutAll: ' tenures per scavenge)']
- ifFalse: [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)']].
- str cr.
-
- codeCompactionsOrNil ifNotNil:
- [str
- nextPutAll: 'Code compactions '; crtab.
- codeCompactionsOrNil = 0
- ifTrue: [str
- nextPutAll: codeCompactionsOrNil asString; cr]
- ifFalse: [str
- nextPutAll: codeCompactionsOrNil asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: codeCompactionTime asStringWithCommas; nextPutAll: ' ms (';
- print: codeCompactionTime / (upTime - idleMs) * 100 maxDecimalPlaces: 3;
- nextPutAll: '% runtime), avg '; print: codeCompactionTime / codeCompactionsOrNil maxDecimalPlaces: 1; nextPutAll: ' ms'; cr]].
-
- LastStats ifNil: [LastStats := Array new: 9]
- ifNotNil: [
- LastStats size < 9 ifTrue:
- [LastStats := LastStats, (Array new: 9 - LastStats size withAll: 0)].
- upTime2 := upTime - (LastStats at: 1).
- fullGCs2 := fullGCs - (LastStats at: 2).
- fullGCTime2 := fullGCTime - (LastStats at: 3).
- incrGCs2 := incrGCs - (LastStats at: 4).
- incrGCTime2 := incrGCTime - (LastStats at: 5).
- tenureCount2 := tenureCount - (LastStats at: 6).
- idleMs2 := idleMs - (LastStats at: 7).
- codeCompactionsOrNil ifNotNil:
- [codeCompactions2 := codeCompactionsOrNil - (LastStats at: 8).
- codeCompactionTime2 := codeCompactionTime - (LastStats at: 9)].
-
- str nextPutAll: self textMarkerForShortReport ;
- nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas.
- fullGCs2 + incrGCs2 > 0 ifTrue:
- [str
- nextPutAll: ' (';
- print: upTime2 // (fullGCs2 + incrGCs2);
- nextPutAll: ' ms between GCs'.
- idleMs2 > 0 ifTrue:
- [str
- nextPutAll: ', ';
- print: upTime2 - idleMs2 // (fullGCs2 + incrGCs2);
- nextPutAll: ' ms runtime between GCs'].
- str nextPut: $)].
- str cr.
- str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1;
- nextPutAll: ' s, runtime ';   print: (upTime2 - idleMs2 / 1000.0) maxDecimalPlaces: 1;
- nextPutAll: ' s, idletime ';   print: (idleMs2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr.
- str nextPutAll: ' full ';
- nextPutAll: fullGCs2 asStringWithCommas.
- fullGCs2 + fullGCTime2 > 0 ifTrue:
- [str nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms (';
- print: fullGCTime2 / (upTime2 - idleMs2) * 100 maxDecimalPlaces: 1;
- nextPutAll: '% runtime)'.
- str nextPutAll: ', avg '; print: fullGCTime2 / (fullGCs2 max: 1) maxDecimalPlaces: 1; nextPutAll: ' ms'].
- str cr.
- str nextPutAll: (spur ifTrue: [' scavenge '] ifFalse: [' incr ']);
- nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms (';
- print: incrGCTime2 / (upTime2 - idleMs2) * 100 maxDecimalPlaces: 1;
- nextPutAll: '% runtime), avg '; print: incrGCTime2 / (incrGCs2 max: 1) maxDecimalPlaces: 1; nextPutAll: ' ms'.
- str cr.
- str nextPutAll: ' tenures ';
- nextPutAll: tenureCount2 asStringWithCommas.
- tenureCount2 = 0 ifFalse:
- [spur
- ifTrue: [str nextPutAll: ' (avg '; print: tenureCount2 // (incrGCs2 max: 1); nextPutAll: ' tenures per scavenge)']
- ifFalse: [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)']].
- str cr.
- codeCompactionsOrNil ifNotNil:
- [str nextPutAll: ' code compactions ';
- nextPutAll: codeCompactions2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: codeCompactionTime2 asStringWithCommas; nextPutAll: ' ms (';
- print: codeCompactionTime2 / (upTime2 - idleMs2) * 100 maxDecimalPlaces: 3;
- nextPutAll: '% runtime)'.
- codeCompactions2 > 0 ifTrue:
- [str nextPutAll: ', avg '; print: codeCompactionTime2 / codeCompactions2 maxDecimalPlaces: 1; nextPutAll: ' ms'; cr.]]
- ].
- LastStats := { upTime. fullGCs. fullGCTime. incrGCs. incrGCTime. tenureCount. idleMs. codeCompactionsOrNil. codeCompactionTime }.
-
- ^str contents
- !