[squeak-dev] The Trunk: Kernel-eem.970.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Jan 5 19:48:57 UTC 2016


Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.970.mcz

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

Name: Kernel-eem.970
Author: eem
Time: 5 January 2016, 11:48:28.872258 am
UUID: 95e73746-6557-49a2-af25-ce39009a57b0
Ancestors: Kernel-eem.969

Changes to Time and Delay prior to changing over to the utc microsecond clock and its use in delay scheduling.

=============== Diff against Kernel-eem.969 ===============

Item was changed:
  SharedPool subclass: #ChronologyConstants
  	instanceVariableNames: 'seconds offset jdn nanos'
+ 	classVariableNames: 'DayNames DaysInMonth MicrosecondsInDay MonthNames NanosInMillisecond NanosInSecond OneDay SecondsInDay SecondsInHour SecondsInMinute SqueakEpoch Zero'
- 	classVariableNames: 'DayNames DaysInMonth MonthNames NanosInMillisecond NanosInSecond OneDay SecondsInDay SecondsInHour SecondsInMinute SqueakEpoch Zero'
  	poolDictionaries: ''
  	category: 'Kernel-Chronology'!
  
  !ChronologyConstants commentStamp: 'brp 3/12/2004 14:34' prior: 0!
  ChronologyConstants is a SharedPool for the constants used by the Kernel-Chronology classes.!

Item was changed:
  ----- Method: ChronologyConstants class>>initialize (in category 'class initialization') -----
  initialize
  	"ChronologyConstants initialize" 	
  		
  	SqueakEpoch := 2415386. 		"Julian day number of 1 Jan 1901" 
  	SecondsInDay := 86400.
  	SecondsInHour := 3600.
  	SecondsInMinute := 60.
+ 	MicrosecondsInDay := 24 * 60 * 60 * 1000000.
  	NanosInSecond := 10 raisedTo: 9.
  	NanosInMillisecond := 10 raisedTo: 6.
  	DayNames := #(Sunday Monday Tuesday Wednesday Thursday Friday Saturday).
  		
+ 	MonthNames := #(	January February March April May June
+ 						July August September October November December).
+ 	DaysInMonth := #(31 28 31 30 31 30 31 31 30 31 30 31)!
- 	MonthNames := #(January February March April May June July
-  			August September October November December).
- 	DaysInMonth := #(31 28 31 30 31 30 31 31 30 31 30 31)
- !

Item was changed:
  ----- Method: DateAndTime class>>nowWithOffset: (in category 'squeak protocol') -----
  nowWithOffset: aDuration 
+ 	| usecs |
+ 	usecs := Time utcMicrosecondClock.
+ 	^self basicNew
+ 		setJdn: DaysSinceEpoch
+ 		seconds: usecs // 1000000 \\ SecondsInDay
+ 		nano: usecs \\ 1000000 * 1000
+ 		offset: aDuration!
- 	| nanoTicks msm |
- 	nanoTicks := (msm := self milliSecondsSinceMidnight) * 1000000.
- 	"The following usually only executes at system startup."
- 	^ LastTick < nanoTicks
- 		ifTrue:
- 			[ LastTick := nanoTicks.
- 			self waitForOffsets.
- 			self basicNew
- 				setJdn: DaysSinceEpoch
- 				seconds: msm // 1000
- 				nano: msm \\ 1000 * 1000000
- 				offset: aDuration ]
- 		ifFalse:
- 			[ LastTickSemaphore critical:
- 				[ LastTick := LastTick + 1.
- 				self waitForOffsets.
- 				self basicNew
- 					setJdn: DaysSinceEpoch
- 					seconds: LastTick // 1000000000
- 					nano: LastTick \\ 1000000000
- 					offset: aDuration ] ]
- " 
- [ 10000 timesRepeat: [ self now. ] ] timeToRun / 10000.0 . 
- 
- If calls to DateAndTime-c-#now are within a single millisecond the semaphore code 
- to ensure that (self now <= self now) slows things down considerably by a factor of about 20.
- 
- The actual speed of a single call to DateAndTime-now in milliseconds is 
- demonstrated by the unguarded method below.
- 
- [ 100000 timesRepeat: [ self todayAtMilliSeconds: (self milliSecondsSinceMidnight) ] ] timeToRun / 100000.0 .  0.00494 0.00481 0.00492 0.00495
-   
- "!

Item was added:
+ ----- Method: Delay class>>primSignal:atUTCMicroseconds: (in category 'primitives') -----
+ primSignal: aSemaphore atUTCMicroseconds: anInteger
+ 	"Signal the semaphore when the UTC microsecond clock reaches the value of the second argument.
+ 	 Fail if the first argument is neither a Semaphore nor nil, or if the second argument is not an integer.
+ 	 Essential. See Object documentation whatIsAPrimitive."
+ 	<primitive: 242>
+ 	^self primitiveFailed!

Item was added:
+ ----- Method: Delay class>>scheduleDelay:from: (in category 'timer process') -----
+ scheduleDelay: aDelay from: nowUsecs
+ 	"Private. Schedule this Delay."
+ 	
+ 	aDelay
+ 		resumptionTime: nowUsecs + aDelay microsecondDelayDuration;
+ 		beingWaitedOn: true.
+ 	ActiveDelay 
+ 		ifNil: [ActiveDelay := aDelay]
+ 		ifNotNil:
+ 			[aDelay resumptionTime < ActiveDelay resumptionTime
+ 				ifTrue: [SuspendedDelays add: ActiveDelay.
+ 						ActiveDelay := aDelay]
+ 				ifFalse: [SuspendedDelays add: aDelay]]!

Item was changed:
  ----- Method: Delay>>delayDuration (in category 'public') -----
  delayDuration
+ 	"Answer the receiver's duration in milliseconds."
  	^delayDuration!

Item was changed:
  ----- Method: Delay>>delayDuration: (in category 'public') -----
+ delayDuration: milliseconds
+ 	"Set teh receiver's duration in milliseconds, iff it is not active."
+ 	milliseconds < 0 ifTrue:
+ 		[self error: 'Delay times cannot be negative!!'].
+ 	beingWaitedOn == true ifTrue:
+ 		[self error: 'This delay is scheduled!!'].
+ 	delayDuration := milliseconds asInteger!
- delayDuration: anInteger
- 
- 	anInteger < 0 ifTrue: [ self error: 'Delay times cannot be negative!!' ].
- 	beingWaitedOn == true ifTrue: [ self error: 'This delay is scheduled!!' ].
- 	delayDuration := anInteger!

Item was added:
+ ----- Method: Delay>>microsecondDelayDuration (in category 'public') -----
+ microsecondDelayDuration
+ 	"Answer the receiver's duration in microseconds."
+ 	^delayDuration * 1000!

Item was removed:
- ----- Method: Delay>>scheduleEvent (in category 'private') -----
- scheduleEvent
- 	"Schedule this delay"
- 	resumptionTime := Time millisecondClockValue + delayDuration.
- 	AccessProtect critical:[
- 		ScheduledDelay := self.
- 		TimingSemaphore signal.
- 	].!

Item was added:
+ ----- Method: Time class>>localMicrosecondClock (in category 'clock') -----
+ localMicrosecondClock
+ 	"Answer the number of microseconds since the start of the 20th century in local time."
+ 	<primitive: 241>
+ 	^0!

Item was changed:
  ----- Method: Time class>>now (in category 'ansi protocol') -----
  now
  	"Answer a Time representing the time right now - this is a 24 hour clock."
+ 	| localUsecs localUsecsToday |
+ 	localUsecs := self localMicrosecondClock.
+ 	localUsecsToday := localUsecs \\ MicrosecondsInDay.
+ 	^ self
+ 		seconds: localUsecsToday // 1000000
+ 		nanoSeconds: localUsecsToday \\ 1000000 * 1000!
- 
- 	| ms |
- 	
- 	ms := self milliSecondsSinceMidnight.
- 
- 	^ self seconds:  (ms // 1000) nanoSeconds: (ms \\ 1000) * 1000000
- 
- 
- !

Item was added:
+ ----- Method: Time class>>utcMicrosecondClock (in category 'clock') -----
+ utcMicrosecondClock
+ 	"Answer the number of microseconds since the start of the 20th century in UTC."
+ 	<primitive: 240>
+ 	^0!



More information about the Squeak-dev mailing list