[Vm-dev] VM Maker: VMMaker.oscog-eem.2080.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Jan 10 21:10:22 UTC 2017


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2080.mcz

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

Name: VMMaker.oscog-eem.2080
Author: eem
Time: 10 January 2017, 1:09:38.430454 pm
UUID: de2bea31-7530-47e7-b308-598c8e29a740
Ancestors: VMMaker.oscog-eem.2079

SpurPlanningCompactor:
Add a test framework for the compactor based around loading a Pharo bootstrap image and extending it.  For now include one test that shortens the heap to the minimum and checks that the heap is found to be incompressible.  Add a test class that tests that the cloneSimulation and image (re)loading functions work (upon which the SpurPlanningCompactorTests relies).

Don't use a macro for setDesiredCogCodeSize: (not needed) and implement it in the StackInterpreter for the convenience of these tests as well as potential image-build Smalltalk code running on the StackInterpreter.
Requires Cog-eem.335

=============== Diff against VMMaker.oscog-eem.2079 ===============

Item was changed:
  ----- Method: CoInterpreter>>setDesiredCogCodeSize: (in category 'internal interpreter access') -----
  setDesiredCogCodeSize: dccs
+ 	<inline: true>
- 	<cmacro: '(dccs) (desiredCogCodeSize = (dccs))'>
  	desiredCogCodeSize := dccs!

Item was added:
+ ----- Method: SpurMemoryManager>>abandonEmptySegmentForTests (in category 'simulation tests support') -----
+ abandonEmptySegmentForTests
+ 	"Assume a freshly-loaded image. Eliminate the last segment."
+ 	<doNotGenerate>
+ 	| freeChunk emptySeg |
+ 	freeChunk := self findLargestFreeChunk.
+ 	self assert: totalFreeOldSpace = (self bytesInObject: freeChunk).
+ 	self assert: endOfMemory = (self addressAfter: freeChunk).
+ 	self unlinkSolitaryFreeTreeNode: freeChunk.
+ 	segmentManager numSegments > 1
+ 		ifTrue:
+ 			[emptySeg := segmentManager findEmptySegNearestInSizeTo: (self bytesInObject: freeChunk).
+ 			 segmentManager removeSegment: emptySeg]
+ 		ifFalse:
+ 			[(segmentManager segments at: 0)
+ 				segSize: (segmentManager segments at: 0) segSize - (self bytesInObject: freeChunk).
+ 			 self setLastSegment: (segmentManager segments at: 0);
+ 			 	initSegmentBridgeWithBytes: self bridgeSize at: (self startOfObject: freeChunk)]!

Item was added:
+ TestCase subclass: #SpurPlanningCompactorTests
+ 	instanceVariableNames: 'emptyVM'
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'VMMaker-Tests'!

Item was added:
+ ----- Method: SpurPlanningCompactorTests class>>imageNameForTests (in category 'accessing') -----
+ imageNameForTests
+ 	"self imageNameForTests"
+ 	| baseImageName |
+ 	baseImageName := 'core32-preen.image'.
+ 	#('.' 'oscogvm/image' '../oscogvm/image') do:
+ 		[:dirName|
+ 		 ((FileDirectory default directoryExists: dirName)
+ 		  and: [(FileDirectory on: dirName) fileExists: baseImageName]) ifTrue:
+ 			[^dirName, '/', baseImageName]].
+ 	self error: 'cannot find ', baseImageName!

Item was added:
+ ----- Method: SpurPlanningCompactorTests class>>preenImage (in category 'utilities') -----
+ preenImage
+ 	"Assume there's a Pharo bootstrap core32.image in ../oscogvm/image/core32.image.
+ 	 We should find out where the image directory is and write a download script to get it.
+ 	 But for now assume it's there."
+ 	"[SpurPlanningCompactorTests preenImage] timeToRun"
+ 	Spur32BitPreen new
+ 		writeDefaultHeader: true;
+ 		savedWindowSize: 640 at 480;
+ 		preenImage: '../oscogvm/image/core32'!

Item was added:
+ ----- Method: SpurPlanningCompactorTests>>initialize (in category 'initialize-release') -----
+ initialize
+ 	emptyVM := StackInterpreterSimulator newWithOptions: #(ObjectMemory Spur32BitMemoryManager
+ 																 compactorClass SpurPlanningCompactor)!

Item was added:
+ ----- Method: SpurPlanningCompactorTests>>initializedVM (in category 'private') -----
+ initializedVM
+ 	^emptyVM cloneSimulation
+ 		openOn: self class imageNameForTests extraMemory: 0;
+ 		initStackPages;
+ 		yourself!

Item was added:
+ ----- Method: SpurPlanningCompactorTests>>testIncompactibleHeap (in category 'tests') -----
+ testIncompactibleHeap
+ 	| errored |
+ 	errored := false.
+ 	[self initializedVM objectMemory
+ 		initializeMarkStack; "The Pharo bootstrap has no mark or weakling stacks :-)"
+ 		initializeWeaklingStack;
+ 		abandonEmptySegmentForTests;
+ 		fullGC]
+ 		on: Error
+ 		do: [:ex|
+ 			errored := true.
+ 			self assert: ex messageText = 'uncompactable heap; no unmarked objects found'].
+ 	self assert: errored!

Item was changed:
  ----- Method: StackInterpreter>>setDesiredCogCodeSize: (in category 'internal interpreter access') -----
+ setDesiredCogCodeSize: dccs
+ 	<inline: true>
+ 	"This should perhaps be a no-op in the StackVM, but we implement it for the convenience of bootstrap scripts etc."
+ 	theUnknownShort := dccs!
- setDesiredCogCodeSize: iCouldCareLess
- 	"This is a no-op in the StackVM"!

Item was added:
+ TestCase subclass: #StackInterpreterSimulatorTests
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'VMMaker-Tests'!

Item was added:
+ ----- Method: StackInterpreterSimulatorTests class>>imageNameForTests (in category 'accessing') -----
+ imageNameForTests
+ 	"self imageNameForTests"
+ 	| baseImageName |
+ 	baseImageName := 'core32-preen.image'.
+ 	#('.' 'oscogvm/image' '../oscogvm/image') do:
+ 		[:dirName|
+ 		 ((FileDirectory default directoryExists: dirName)
+ 		  and: [(FileDirectory on: dirName) fileExists: baseImageName]) ifTrue:
+ 			[^dirName, '/', baseImageName]].
+ 	self error: 'cannot find ', baseImageName!

Item was added:
+ ----- Method: StackInterpreterSimulatorTests>>testEmptySimulatorCanCloneSimulation (in category 'tests') -----
+ testEmptySimulatorCanCloneSimulation
+ 	self shouldnt:
+ 			[(StackInterpreterSimulator newWithOptions: #(ObjectMemory Spur32BitMemoryManager))
+ 				cloneSimulation cloneSimulation]
+ 		raise: Error!

Item was added:
+ ----- Method: StackInterpreterSimulatorTests>>testEmptySimulatorCloneCanLoadImage (in category 'tests') -----
+ testEmptySimulatorCloneCanLoadImage
+ 	self shouldnt:
+ 			[(StackInterpreterSimulator newWithOptions: #(ObjectMemory Spur32BitMemoryManager))
+ 				cloneSimulation
+ 					openOn: self class imageNameForTests extraMemory: 0]
+ 		raise: Error!

Item was added:
+ ----- Method: StackInterpreterSimulatorTests>>testSimulatorCanReloadImage (in category 'tests') -----
+ testSimulatorCanReloadImage
+ 	self shouldnt:
+ 			[(StackInterpreterSimulator newWithOptions: #(ObjectMemory Spur32BitMemoryManager))
+ 				openOn: self class imageNameForTests extraMemory: 0;
+ 				openOn: self class imageNameForTests extraMemory: 0]
+ 		raise: Error!



More information about the Vm-dev mailing list