Eliot Miranda uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-eem.789.mcz ==================== Summary ==================== Name: System-eem.789 Author: eem Time: 25 January 2016, 7:37:27.08369 pm UUID: b86ef820-368a-49a4-925d-ea983158737f Ancestors: System-mt.788 Fix vmStatisticsReportString given recent clock changes. When available, use vmParameterAt: 20 to get the utc microsecond clock at startup, otherwise defer to the eventMillisecondClock. Remember to nil out LastStats on start-up to eliminate those whacky first queries where LastStats is left over from a prior snapshot. Also don't bother reestablishing event forwarding to Smalltalk unless starting up. =============== Diff against System-mt.788 =============== Item was removed: - ----- Method: SmalltalkImage class>>startUp (in category 'class initialization') ----- - startUp - SystemChangeNotifier uniqueInstance notify: Smalltalk ofAllSystemChangesUsing: #event:! Item was added: + ----- Method: SmalltalkImage class>>startUp: (in category 'class initialization') ----- + startUp: resuming + resuming ifTrue: + [LastStats := nil. + SystemChangeNotifier uniqueInstance notify: Smalltalk ofAllSystemChangesUsing: #event:]! 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'" + | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | - | params onSpur oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | params := self getVMParameters. - onSpur := (params at: 41 ifAbsent: [ 0 ]) anyMask: 16. 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. + upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startupp 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" - upTime := Time millisecondClockValue. str := WriteStream on: (String new: 700). str nextPutAll: 'uptime '; print: (upTime / 1000 / 60 // 60); nextPut: $h; print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; 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. + youngSize := params at: 44. - youngSize := onSpur - ifTrue: [params at: 44 "eden size"] "Spur" - ifFalse: [youngSpaceEnd - oldSpaceEnd]. "Squeak V3" 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. - onSpur ifTrue: [youngSize := youngSpaceEnd "used eden"]. - freeSize := onSpur - ifTrue: [(params at: 54) + (params at: 44) - youngSize] "Spur" - ifFalse: [memorySize - youngSpaceEnd] "Squeak V3". - used := onSpur - ifTrue: [youngSize + oldSpaceEnd - freeSize] "Spur" - ifFalse: [youngSpaceEnd]. "Squeak V3" 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. str nextPutAll: 'GCs '; nextPutAll: (fullGCs + incrGCs) asStringWithCommas. fullGCs + incrGCs > 0 ifTrue: [ str nextPutAll: ' ('; print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1; nextPutAll: ' ms between GCs)' ]. str cr. str nextPutAll: ' full '; nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms ('; print: (fullGCTime / upTime * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime)'. fullGCs = 0 ifFalse: [str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms']. str cr. str nextPutAll: ' incr '; nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms ('; print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime), avg '; print: (incrGCTime / incrGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'; cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse: [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)']. str cr. LastStats ifNil: [LastStats := Array new: 6] ifNotNil: [ 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). str nextPutAll: self textMarkerForShortReport ; nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas. fullGCs2 + incrGCs2 > 0 ifTrue: [ str nextPutAll: ' ('; print: upTime2 // (fullGCs2 + incrGCs2); nextPutAll: ' ms between GCs)'. ]. str cr. str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr. str nextPutAll: ' full '; nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms ('; print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime)'. fullGCs2 = 0 ifFalse: [str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms']. str cr. str nextPutAll: ' incr '; nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms ('; print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime), avg '. incrGCs2 > 0 ifTrue: [ str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms' ]. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount2 asStringWithCommas. tenureCount2 = 0 ifFalse: [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)']. str cr. ]. LastStats at: 1 put: upTime. LastStats at: 2 put: fullGCs. LastStats at: 3 put: fullGCTime. LastStats at: 4 put: incrGCs. LastStats at: 5 put: incrGCTime. LastStats at: 6 put: tenureCount. ^ str contents ! |
Free forum by Nabble | Edit this page |