Beat me to it but you forgot to update the sends to #asStringWithCommasSigned. It was deprecated because this is the only sender and it's an exceptional case to want to print "+" in front. We should use #asStringWithCommasSigned: true.
On Mon, Jul 9, 2012 at 7:55 AM, commits@source.squeak.org wrote:
Bert Freudenberg uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-bf.488.mcz
==================== Summary ====================
Name: System-bf.488 Author: bf Time: 9 July 2012, 2:55:32.107 pm UUID: 1f332f03-ee04-4f81-8e73-c2e3b203a85d Ancestors: System-eem.487
Format floats using print:maxDecimalPlaces: instead of roundTo:.
=============== Diff against System-eem.487 ===============
Item was changed: ----- Method: MessageTally>>reportGCStatsOn: (in category 'reporting') ----- reportGCStatsOn: str | oldSpaceEnd youngSpaceEnd memoryEnd fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime rootOverflows | upTime := time. oldSpaceEnd := gcStats at: 1. youngSpaceEnd := gcStats at: 2. memoryEnd := gcStats at: 3. fullGCs := gcStats at: 7. fullGCTime := gcStats at: 8. incrGCs := gcStats at: 9. incrGCTime := gcStats at: 10. tenureCount := gcStats at: 11. rootOverflows := gcStats at: 22.
str cr. str nextPutAll: '**Memory**'; cr. str nextPutAll: ' old '; nextPutAll: oldSpaceEnd asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' young '; nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' used '; nextPutAll: youngSpaceEnd asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' free '; nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str cr. str nextPutAll: '**GCs**'; cr. str nextPutAll: ' full ';
print: fullGCs; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms (';
print: (fullGCTime / upTime * 100) maxDecimalPlaces: 2;
print: fullGCs; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((fullGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. fullGCs = 0 ifFalse:
[str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll: ', avg '; print: ((fullGCTime / fullGCs) roundTo: 1.0); nextPutAll: 'ms']. str cr.
str nextPutAll: ' incr ';
print: incrGCs; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms (';
print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1;
str nextPutAll: ' incr ';
print: incrGCs; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((incrGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. incrGCs = 0 ifFalse:
[str nextPutAll: ', avg '; print: (incrGCTime / incrGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll:', avg '; print: ((incrGCTime / incrGCs) roundTo: 1.0); nextPutAll: 'ms']. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse:
[str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)'].
[str nextPutAll: ' (avg '; print: (incrGCs / tenureCount) asInteger; nextPutAll: ' GCs/tenure)']. str cr. str nextPutAll: ' root table ';
nextPutAll: rootOverflows asStringWithCommas; nextPutAll: ' overflows'.
!nextPutAll: rootOverflows asStringWithCommas; nextPutAll:' overflows'. str cr.
Item was changed: ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm statistics') ----- vmStatisticsReportString "StringHolderView open: (StringHolder new contents: SmalltalkImage current vmStatisticsReportString) label: 'VM Statistics'"
| params oldSpaceEnd youngSpaceEnd memoryEnd fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str | params := self getVMParameters. oldSpaceEnd := params at: 1. youngSpaceEnd := params at: 2. memoryEnd := params at: 3. fullGCs := params at: 7. fullGCTime := params at: 8. incrGCs := params at: 9. incrGCTime := params at: 10. tenureCount := params at: 11. upTime := Time millisecondClockValue. str := WriteStream on: (String new: 1000). 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 ';
str nextPutAll: 'memory '; nextPutAll: memoryEnd asStringWithCommas; nextPutAll: ' bytes'; cr. str nextPutAll: ' old '; nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
print: (oldSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((oldSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr. str nextPutAll: ' young '; nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
print: (youngSpaceEnd - oldSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((youngSpaceEnd - oldSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr. str nextPutAll: ' used '; nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((youngSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr. str nextPutAll: ' free '; nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((memoryEnd - youngSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr.
str nextPutAll: 'GCs ';
str nextPutAll: 'GCs '; nextPutAll: (fullGCs + incrGCs) asStringWithCommas. fullGCs + incrGCs > 0 ifTrue: [ str nextPutAll: ' (';
print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1;
nextPutAll: ' ms between GCs)'
print: ((upTime / (fullGCs + incrGCs)) roundTo: 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;
print: fullGCs; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((fullGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. fullGCs = 0 ifFalse:
[str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll: ', avg '; print: ((fullGCTime / fullGCs) roundTo: 1.0); 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: ' incr ';
print: incrGCs; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((incrGCTime / upTime * 100) roundTo: 1.0);
nextPutAll: '% uptime), avg '; print: ((incrGCTime / incrGCs) roundTo: 1.0); nextPutAll: 'ms'; cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse:
[str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)'].
[str nextPutAll: ' (avg '; print: (incrGCs / tenureCount) asInteger; 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)'.
print: ((upTime2 / (fullGCs2 + incrGCs2)) roundTo: 1);
nextPutAll: 'ms between GCs)'. ]. str cr.
str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr.
str nextPutAll: ' uptime '; print: ((upTime2 / 1000.0) roundTo: 0.1); nextPutAll: 's'; cr. str nextPutAll: ' full ';
nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms (';
print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1;
print: fullGCs2; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: 'ms (';
print: ((fullGCTime2 / upTime2 * 100) roundTo: 1.0); nextPutAll: '% uptime)'. fullGCs2 = 0 ifFalse:
[str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll: ', avg '; print: ((fullGCTime2 / fullGCs2) roundTo: 1.0); nextPutAll: 'ms']. str cr.
str nextPutAll: ' incr ';
nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms (';
print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1;
str nextPutAll: ' incr ';
print: incrGCs2; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: 'ms (';
print: ((incrGCTime2 / upTime2 * 100) roundTo: 1.0); nextPutAll: '% uptime), avg '. incrGCs2 > 0 ifTrue: [
str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms'
str print: ((incrGCTime2 / incrGCs2) roundTo: 1.0); nextPutAll: 'ms' ]. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount2 asStringWithCommas. tenureCount2 = 0 ifFalse:
[str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)'].
[str nextPutAll: ' (avg '; print: (incrGCs2 / tenureCount2) asInteger; 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
!
On 2012-07-09, at 17:57, Chris Muller wrote:
Beat me to it but you forgot to update the sends to #asStringWithCommasSigned. It was deprecated because this is the only sender and it's an exceptional case to want to print "+" in front. We should use #asStringWithCommasSigned: true.
Feel free to improve :)
Another idea would be to tweak roundTo: so the result would print as expected. Any floating point magician out there? ;)
- Bert -
On Mon, Jul 9, 2012 at 7:55 AM, commits@source.squeak.org wrote:
Bert Freudenberg uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-bf.488.mcz
==================== Summary ====================
Name: System-bf.488 Author: bf Time: 9 July 2012, 2:55:32.107 pm UUID: 1f332f03-ee04-4f81-8e73-c2e3b203a85d Ancestors: System-eem.487
Format floats using print:maxDecimalPlaces: instead of roundTo:.
=============== Diff against System-eem.487 ===============
Item was changed: ----- Method: MessageTally>>reportGCStatsOn: (in category 'reporting') ----- reportGCStatsOn: str | oldSpaceEnd youngSpaceEnd memoryEnd fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime rootOverflows | upTime := time. oldSpaceEnd := gcStats at: 1. youngSpaceEnd := gcStats at: 2. memoryEnd := gcStats at: 3. fullGCs := gcStats at: 7. fullGCTime := gcStats at: 8. incrGCs := gcStats at: 9. incrGCTime := gcStats at: 10. tenureCount := gcStats at: 11. rootOverflows := gcStats at: 22.
str cr. str nextPutAll: '**Memory**'; cr. str nextPutAll: ' old '; nextPutAll: oldSpaceEnd asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' young '; nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' used '; nextPutAll: youngSpaceEnd asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' free '; nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str cr. str nextPutAll: '**GCs**'; cr. str nextPutAll: ' full ';
print: fullGCs; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms (';
print: (fullGCTime / upTime * 100) maxDecimalPlaces: 2;
print: fullGCs; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((fullGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. fullGCs = 0 ifFalse:
[str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll: ', avg '; print: ((fullGCTime / fullGCs) roundTo: 1.0); nextPutAll: 'ms']. str cr.
str nextPutAll: ' incr ';
print: incrGCs; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms (';
print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1;
str nextPutAll: ' incr ';
print: incrGCs; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((incrGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. incrGCs = 0 ifFalse:
[str nextPutAll: ', avg '; print: (incrGCTime / incrGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll:', avg '; print: ((incrGCTime / incrGCs) roundTo: 1.0); nextPutAll: 'ms']. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse:
[str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)'].
[str nextPutAll: ' (avg '; print: (incrGCs / tenureCount) asInteger; nextPutAll: ' GCs/tenure)']. str cr. str nextPutAll: ' root table ';
nextPutAll: rootOverflows asStringWithCommas; nextPutAll: ' overflows'.
nextPutAll: rootOverflows asStringWithCommas; nextPutAll:' overflows'. str cr.
!
Item was changed: ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm statistics') ----- vmStatisticsReportString "StringHolderView open: (StringHolder new contents: SmalltalkImage current vmStatisticsReportString) label: 'VM Statistics'"
| params oldSpaceEnd youngSpaceEnd memoryEnd fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str | params := self getVMParameters. oldSpaceEnd := params at: 1. youngSpaceEnd := params at: 2. memoryEnd := params at: 3. fullGCs := params at: 7. fullGCTime := params at: 8. incrGCs := params at: 9. incrGCTime := params at: 10. tenureCount := params at: 11. upTime := Time millisecondClockValue. str := WriteStream on: (String new: 1000). 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 ';
str nextPutAll: 'memory '; nextPutAll: memoryEnd asStringWithCommas; nextPutAll: ' bytes'; cr. str nextPutAll: ' old '; nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
print: (oldSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((oldSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr. str nextPutAll: ' young '; nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
print: (youngSpaceEnd - oldSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((youngSpaceEnd - oldSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr. str nextPutAll: ' used '; nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((youngSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr. str nextPutAll: ' free '; nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((memoryEnd - youngSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr.
str nextPutAll: 'GCs ';
str nextPutAll: 'GCs '; nextPutAll: (fullGCs + incrGCs) asStringWithCommas. fullGCs + incrGCs > 0 ifTrue: [ str nextPutAll: ' (';
print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1;
nextPutAll: ' ms between GCs)'
print: ((upTime / (fullGCs + incrGCs)) roundTo: 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;
print: fullGCs; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((fullGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. fullGCs = 0 ifFalse:
[str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll: ', avg '; print: ((fullGCTime / fullGCs) roundTo: 1.0); 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: ' incr ';
print: incrGCs; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((incrGCTime / upTime * 100) roundTo: 1.0);
nextPutAll: '% uptime), avg '; print: ((incrGCTime / incrGCs) roundTo: 1.0); nextPutAll: 'ms'; cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse:
[str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)'].
[str nextPutAll: ' (avg '; print: (incrGCs / tenureCount) asInteger; 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)'.
print: ((upTime2 / (fullGCs2 + incrGCs2)) roundTo: 1);
nextPutAll: 'ms between GCs)'. ]. str cr.
str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr.
str nextPutAll: ' uptime '; print: ((upTime2 / 1000.0) roundTo: 0.1); nextPutAll: 's'; cr. str nextPutAll: ' full ';
nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms (';
print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1;
print: fullGCs2; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: 'ms (';
print: ((fullGCTime2 / upTime2 * 100) roundTo: 1.0); nextPutAll: '% uptime)'. fullGCs2 = 0 ifFalse:
[str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll: ', avg '; print: ((fullGCTime2 / fullGCs2) roundTo: 1.0); nextPutAll: 'ms']. str cr.
str nextPutAll: ' incr ';
nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms (';
print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1;
str nextPutAll: ' incr ';
print: incrGCs2; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: 'ms (';
print: ((incrGCTime2 / upTime2 * 100) roundTo: 1.0); nextPutAll: '% uptime), avg '. incrGCs2 > 0 ifTrue: [
str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms'
str print: ((incrGCTime2 / incrGCs2) roundTo: 1.0); nextPutAll: 'ms' ]. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount2 asStringWithCommas. tenureCount2 = 0 ifFalse:
[str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)'].
[str nextPutAll: ' (avg '; print: (incrGCs2 / tenureCount2) asInteger; 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
!
2012/7/9 Bert Freudenberg bert@freudenbergs.de:
On 2012-07-09, at 17:57, Chris Muller wrote:
Beat me to it but you forgot to update the sends to #asStringWithCommasSigned. It was deprecated because this is the only sender and it's an exceptional case to want to print "+" in front. We should use #asStringWithCommasSigned: true.
Feel free to improve :)
Another idea would be to tweak roundTo: so the result would print as expected. Any floating point magician out there? ;)
- Bert -
This would be something like:
roundToDecimalPlaces: d ^(self asTrueFraction roundTo: (1/10 raisedTo: d)) asFloat
slightly different from Pharo initial proposition http://code.google.com/p/pharo/issues/detail?id=5590 round: d ^((self * (10 raisedTo: d)) rounded / (10 raisedTo: d)) asFloat
For example, with receiver 0.995, we have 0.995 < (995/1000) so the former is
(0.995 roundToDecimalPlaces: d) -> 0.99
while the later is
(0.995 round: 2) -> 1.0
REMINDER: I started http://ss3.gemstone.com/ss/NumberPrinter to factor a few Float printing methods However, my initial solution is not very flexible because it relies too much on inheritance. It's already a progress compared to explosion of duplications in current trunk.
Nicolas
On Mon, Jul 9, 2012 at 7:55 AM, commits@source.squeak.org wrote:
Bert Freudenberg uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-bf.488.mcz
==================== Summary ====================
Name: System-bf.488 Author: bf Time: 9 July 2012, 2:55:32.107 pm UUID: 1f332f03-ee04-4f81-8e73-c2e3b203a85d Ancestors: System-eem.487
Format floats using print:maxDecimalPlaces: instead of roundTo:.
=============== Diff against System-eem.487 ===============
Item was changed: ----- Method: MessageTally>>reportGCStatsOn: (in category 'reporting') ----- reportGCStatsOn: str | oldSpaceEnd youngSpaceEnd memoryEnd fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime rootOverflows | upTime := time. oldSpaceEnd := gcStats at: 1. youngSpaceEnd := gcStats at: 2. memoryEnd := gcStats at: 3. fullGCs := gcStats at: 7. fullGCTime := gcStats at: 8. incrGCs := gcStats at: 9. incrGCTime := gcStats at: 10. tenureCount := gcStats at: 11. rootOverflows := gcStats at: 22.
str cr. str nextPutAll: '**Memory**'; cr. str nextPutAll: ' old '; nextPutAll: oldSpaceEnd asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' young '; nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' used '; nextPutAll: youngSpaceEnd asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' free '; nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str cr. str nextPutAll: '**GCs**'; cr. str nextPutAll: ' full ';
print: fullGCs; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms (';
print: (fullGCTime / upTime * 100) maxDecimalPlaces: 2;
print: fullGCs; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((fullGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. fullGCs = 0 ifFalse:
[str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll: ', avg '; print: ((fullGCTime / fullGCs) roundTo: 1.0); nextPutAll: 'ms']. str cr.
str nextPutAll: ' incr ';
print: incrGCs; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms (';
print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1;
str nextPutAll: ' incr ';
print: incrGCs; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((incrGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. incrGCs = 0 ifFalse:
[str nextPutAll: ', avg '; print: (incrGCTime / incrGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll:', avg '; print: ((incrGCTime / incrGCs) roundTo: 1.0); nextPutAll: 'ms']. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse:
[str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)'].
[str nextPutAll: ' (avg '; print: (incrGCs / tenureCount) asInteger; nextPutAll: ' GCs/tenure)']. str cr. str nextPutAll: ' root table ';
nextPutAll: rootOverflows asStringWithCommas; nextPutAll: ' overflows'.
nextPutAll: rootOverflows asStringWithCommas; nextPutAll:' overflows'. str cr.
!
Item was changed: ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm statistics') ----- vmStatisticsReportString "StringHolderView open: (StringHolder new contents: SmalltalkImage current vmStatisticsReportString) label: 'VM Statistics'"
| params oldSpaceEnd youngSpaceEnd memoryEnd fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str | params := self getVMParameters. oldSpaceEnd := params at: 1. youngSpaceEnd := params at: 2. memoryEnd := params at: 3. fullGCs := params at: 7. fullGCTime := params at: 8. incrGCs := params at: 9. incrGCTime := params at: 10. tenureCount := params at: 11. upTime := Time millisecondClockValue. str := WriteStream on: (String new: 1000). 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 ';
str nextPutAll: 'memory '; nextPutAll: memoryEnd asStringWithCommas; nextPutAll: ' bytes'; cr. str nextPutAll: ' old '; nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
print: (oldSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((oldSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr. str nextPutAll: ' young '; nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
print: (youngSpaceEnd - oldSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((youngSpaceEnd - oldSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr. str nextPutAll: ' used '; nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((youngSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr. str nextPutAll: ' free '; nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
print: ((memoryEnd - youngSpaceEnd / memoryEnd * 100) roundTo: 0.1); nextPutAll: '%)'; cr.
str nextPutAll: 'GCs ';
str nextPutAll: 'GCs '; nextPutAll: (fullGCs + incrGCs) asStringWithCommas. fullGCs + incrGCs > 0 ifTrue: [ str nextPutAll: ' (';
print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1;
nextPutAll: ' ms between GCs)'
print: ((upTime / (fullGCs + incrGCs)) roundTo: 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;
print: fullGCs; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((fullGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. fullGCs = 0 ifFalse:
[str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll: ', avg '; print: ((fullGCTime / fullGCs) roundTo: 1.0); 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: ' incr ';
print: incrGCs; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: 'ms (';
print: ((incrGCTime / upTime * 100) roundTo: 1.0);
nextPutAll: '% uptime), avg '; print: ((incrGCTime / incrGCs) roundTo: 1.0); nextPutAll: 'ms'; cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse:
[str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)'].
[str nextPutAll: ' (avg '; print: (incrGCs / tenureCount) asInteger; 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)'.
print: ((upTime2 / (fullGCs2 + incrGCs2)) roundTo: 1);
nextPutAll: 'ms between GCs)'. ]. str cr.
str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr.
str nextPutAll: ' uptime '; print: ((upTime2 / 1000.0) roundTo: 0.1); nextPutAll: 's'; cr. str nextPutAll: ' full ';
nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms (';
print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1;
print: fullGCs2; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: 'ms (';
print: ((fullGCTime2 / upTime2 * 100) roundTo: 1.0); nextPutAll: '% uptime)'. fullGCs2 = 0 ifFalse:
[str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms'].
[str nextPutAll: ', avg '; print: ((fullGCTime2 / fullGCs2) roundTo: 1.0); nextPutAll: 'ms']. str cr.
str nextPutAll: ' incr ';
nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms (';
print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1;
str nextPutAll: ' incr ';
print: incrGCs2; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: 'ms (';
print: ((incrGCTime2 / upTime2 * 100) roundTo: 1.0); nextPutAll: '% uptime), avg '. incrGCs2 > 0 ifTrue: [
str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms'
str print: ((incrGCTime2 / incrGCs2) roundTo: 1.0); nextPutAll: 'ms' ]. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount2 asStringWithCommas. tenureCount2 = 0 ifFalse:
[str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)'].
[str nextPutAll: ' (avg '; print: (incrGCs2 / tenureCount2) asInteger; 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
!
On 2012-07-09, at 22:18, Nicolas Cellier wrote:
2012/7/9 Bert Freudenberg bert@freudenbergs.de:
On 2012-07-09, at 17:57, Chris Muller wrote:
Beat me to it but you forgot to update the sends to #asStringWithCommasSigned. It was deprecated because this is the only sender and it's an exceptional case to want to print "+" in front. We should use #asStringWithCommasSigned: true.
Feel free to improve :)
Another idea would be to tweak roundTo: so the result would print as expected. Any floating point magician out there? ;)
- Bert -
This would be something like:
roundToDecimalPlaces: d ^(self asTrueFraction roundTo: (1/10 raisedTo: d)) asFloat
slightly different from Pharo initial proposition http://code.google.com/p/pharo/issues/detail?id=5590 round: d ^((self * (10 raisedTo: d)) rounded / (10 raisedTo: d)) asFloat
For example, with receiver 0.995, we have 0.995 < (995/1000) so the former is
(0.995 roundToDecimalPlaces: d) -> 0.99
while the later is
(0.995 round: 2) -> 1.0
Ah, I remember that discussion now. That Pharo version is 10x more efficient than the one using asTrueFraction, though. I'd be happy with that I guess.
REMINDER: I started http://ss3.gemstone.com/ss/NumberPrinter to factor a few Float printing methods However, my initial solution is not very flexible because it relies too much on inheritance. It's already a progress compared to explosion of duplications in current trunk.
Nicolas
Feature request: allow to print with thousands grouping, i.e. a space between every 3 digits :)
- Bert -
2012/7/9 Bert Freudenberg bert@freudenbergs.de:
On 2012-07-09, at 22:18, Nicolas Cellier wrote:
2012/7/9 Bert Freudenberg bert@freudenbergs.de:
On 2012-07-09, at 17:57, Chris Muller wrote:
Beat me to it but you forgot to update the sends to #asStringWithCommasSigned. It was deprecated because this is the only sender and it's an exceptional case to want to print "+" in front. We should use #asStringWithCommasSigned: true.
Feel free to improve :)
Another idea would be to tweak roundTo: so the result would print as expected. Any floating point magician out there? ;)
- Bert -
This would be something like:
roundToDecimalPlaces: d ^(self asTrueFraction roundTo: (1/10 raisedTo: d)) asFloat
slightly different from Pharo initial proposition http://code.google.com/p/pharo/issues/detail?id=5590 round: d ^((self * (10 raisedTo: d)) rounded / (10 raisedTo: d)) asFloat
For example, with receiver 0.995, we have 0.995 < (995/1000) so the former is
(0.995 roundToDecimalPlaces: d) -> 0.99
while the later is
(0.995 round: 2) -> 1.0
Ah, I remember that discussion now. That Pharo version is 10x more efficient than the one using asTrueFraction, though. I'd be happy with that I guess.
REMINDER: I started http://ss3.gemstone.com/ss/NumberPrinter to factor a few Float printing methods However, my initial solution is not very flexible because it relies too much on inheritance. It's already a progress compared to explosion of duplications in current trunk.
Nicolas
Feature request: allow to print with thousands grouping, i.e. a space between every 3 digits :)
- Bert -
Sure, that's typically the limitation with this mixture of parametrization and inheritance (used only for main format parameter). We can add such a feature with a new parameter, but will have to modify the existing classes & algorithms... It's not easily extensible (by third party optional modules).
Nicolas
2012/7/9 Bert Freudenberg bert@freudenbergs.de:
On 2012-07-09, at 22:18, Nicolas Cellier wrote:
2012/7/9 Bert Freudenberg bert@freudenbergs.de:
On 2012-07-09, at 17:57, Chris Muller wrote:
Beat me to it but you forgot to update the sends to #asStringWithCommasSigned. It was deprecated because this is the only sender and it's an exceptional case to want to print "+" in front. We should use #asStringWithCommasSigned: true.
Feel free to improve :)
Another idea would be to tweak roundTo: so the result would print as expected. Any floating point magician out there? ;)
- Bert -
This would be something like:
roundToDecimalPlaces: d ^(self asTrueFraction roundTo: (1/10 raisedTo: d)) asFloat
slightly different from Pharo initial proposition http://code.google.com/p/pharo/issues/detail?id=5590 round: d ^((self * (10 raisedTo: d)) rounded / (10 raisedTo: d)) asFloat
For example, with receiver 0.995, we have 0.995 < (995/1000) so the former is
(0.995 roundToDecimalPlaces: d) -> 0.99
while the later is
(0.995 round: 2) -> 1.0
Ah, I remember that discussion now. That Pharo version is 10x more efficient than the one using asTrueFraction, though. I'd be happy with that I guess.
If the purpose is to print, then the printer will use LargeInteger arithmetic anyway. So you would pay at most a factor 2x, not a factor 10x.
Nicolas
squeak-dev@lists.squeakfoundation.org