[squeak-dev] The Inbox: Chronology-Core-mt.50.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Oct 30 09:25:15 UTC 2019


A new version of Chronology-Core was added to project The Inbox:
http://source.squeak.org/inbox/Chronology-Core-mt.50.mcz

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

Name: Chronology-Core-mt.50
Author: mt
Time: 30 October 2019, 10:25:14.294226 am
UUID: f064aadc-0e62-174e-b97c-f70cc22a23f6
Ancestors: Chronology-Core-mt.49

Proposal to add GC pressure to #bench method.

=============== Diff against Chronology-Core-mt.49 ===============

Item was changed:
  ----- Method: BlockClosure>>benchFor: (in category '*chronology-core') -----
  benchFor: aDuration
  	"See how many times I can value within the given duration.  I'll answer a meaningful description."
  
+ 	| startTime shouldRun count elapsedTime roundTo3Digits delay gcStart gcTime |
- 	| startTime shouldRun count elapsedTime  roundTo3Digits delay |
  	roundTo3Digits := [:num |
  		| rounded lowDigit |
  		rounded := (num * 1000) rounded. "round to 1/1000"
  		lowDigit := (rounded numberOfDigitsInBase: 10) - 3. "keep only first 3 digits"
  		rounded := rounded roundTo:(10 raisedTo: lowDigit).
  		(lowDigit >= 3 or: [rounded \\ 1000 = 0]) "display fractional part only when needed"
  			ifTrue: [(rounded // 1000) asStringWithCommas]
  			ifFalse: [(rounded / 1000.0) printString]].
  	delay := aDuration asDelay.
  	count := 0.
  	shouldRun := true.
+ 	Smalltalk garbageCollect.
  	[ delay wait. shouldRun := false ] forkAt: Processor timingPriority - 1.
  	startTime := Time millisecondClockValue.
+ 	gcStart := (Smalltalk vmParameterAt: 8) + (Smalltalk vmParameterAt: 10).
  	[ shouldRun ] whileTrue: [ 
  		self value.
  		count := count + 1 ].
  	elapsedTime := Time millisecondsSince: startTime.
+ 	gcTime := (Smalltalk vmParameterAt: 8) + (Smalltalk vmParameterAt: 10) - gcStart.
  	^(roundTo3Digits value: count * 1000 / elapsedTime) , ' per second.', ((
  		#(
  			(1e-3 'seconds')
  			(1 'milliseconds')
  			(1e3 'microseconds')
  			(1e6 'nanoseconds')
  		)
  			detect: [ :pair | elapsedTime * pair first >= count ]
  			ifNone: [ #(1e9 'picoseconds') ])
  		in: [ :pair |
  			' {1} {2} per run.' format: {
  				(roundTo3Digits value: elapsedTime * pair first / count).
+ 				pair second } ]), (' {1} % GC time.' format: {gcTime / elapsedTime * 100 roundTo: 0.0001})!
- 				pair second } ])!



More information about the Squeak-dev mailing list