Skip to content

Commit

Permalink
Calculate dataSize image with permanent space
Browse files Browse the repository at this point in the history
  • Loading branch information
PalumboN committed Apr 4, 2022
1 parent 6da1a68 commit 20ba87a
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 46 deletions.
8 changes: 6 additions & 2 deletions smalltalksrc/VMMaker/ComposedImageWriter.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ ComposedImageWriter >> writeImageFile: imageFileName fromHeader: header [

<var: #imageFileName declareC: 'char *imageFileName'>
<var: #header type: #SpurImageHeaderStruct> "TODO: Rename this class"
| bytesWritten |
| oldSpaceBytesWritten permanentSpaceBytesWritten bytesWritten |

self logDebug: 'Writing snapshot %s' _: imageFileName.

Expand All @@ -48,7 +48,11 @@ ComposedImageWriter >> writeImageFile: imageFileName fromHeader: header [

self flag: #TODO. "success: header imageHeaderSize?"

bytesWritten := self writeImageSegments: imageFileName.
oldSpaceBytesWritten := self writeImageSegments: imageFileName.

permanentSpaceBytesWritten := 0. "self writeImagePermanentSpace: imageFileName."

bytesWritten := oldSpaceBytesWritten + permanentSpaceBytesWritten.

interpreter success: bytesWritten = header dataSize
]
Expand Down
8 changes: 7 additions & 1 deletion smalltalksrc/VMMaker/SpurMemoryManager.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -6052,7 +6052,7 @@ SpurMemoryManager >> imageFormatVersion [
SpurMemoryManager >> imageSizeToWrite [
"when asked, newSpace should be empty."
self assert: self newSpaceIsEmpty.
^segmentManager totalBytesInNonEmptySegments
^segmentManager totalBytesInNonEmptySegments + self totalBytesInPermanentSpace.
]
{ #category : #'header format' }
Expand Down Expand Up @@ -12062,6 +12062,12 @@ SpurMemoryManager >> totalByteSizeOf: oop [
ifFalse: [self bytesInObject: oop]
]
{ #category : #accessing }
SpurMemoryManager >> totalBytesInPermanentSpace [
^ permSpaceFreeStart - memoryMap permSpaceStart
]
{ #category : #'free space' }
SpurMemoryManager >> totalFreeListBytes [
"This method both computes the actual number of free bytes by traversing all free objects
Expand Down
14 changes: 14 additions & 0 deletions smalltalksrc/VMMakerTests/VMImageHeaderWritingTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,20 @@ VMImageHeaderWritingTest >> setUp [
self saveImage.
]

{ #category : #tests }
VMImageHeaderWritingTest >> testWritingImageWithPermanentObjects [

| header permanentObject |

imageWriterClass ~= ComposedImageWriter ifTrue: [ ^ self skip ].

permanentObject := self newPermanentByteObjectOfSize: 14.

header := interpreter newHeader.

self assert: header dataSize equals: memory segmentManager totalBytesInNonEmptySegments + (memory bytesInObject: permanentObject).
]

{ #category : #tests }
VMImageHeaderWritingTest >> testWritingImageWritesCorrectBaseAddress [

Expand Down
21 changes: 18 additions & 3 deletions smalltalksrc/VMMakerTests/VMImageReadingTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ Class {
#name : #VMImageReadingTest,
#superclass : #VMAbstractImageFormatTest,
#instVars : [
'originalNilObjectIdentityHash'
'originalNilObjectIdentityHash',
'permanentObject',
'originalPermanentObjectIdentityHash'
],
#category : #'VMMakerTests-ImageFormat'
}
Expand Down Expand Up @@ -37,12 +39,15 @@ VMImageReadingTest >> setUp [
memory classByteArray: (self newClassInOldSpaceWithSlots: 0 instSpec: (memory byteFormatForNumBytes: 0)).
memory ensureBehaviorHash: memory classByteArray.

permanentObject := self newPermanentByteObjectOfSize: 14.

memory garbageCollectForSnapshot.

self assert: interpreter successful.

originalNilObjectIdentityHash := memory hashBitsOf: memory nilObject.

originalPermanentObjectIdentityHash := memory hashBitsOf: permanentObject.

]

{ #category : #tests }
Expand All @@ -64,14 +69,24 @@ VMImageReadingTest >> testReadingSTONHeader [
]

{ #category : #tests }
VMImageReadingTest >> testSavedImageSavesObject [
VMImageReadingTest >> testSavedImageSavesObjectFromOldSpace [

self saveImage.
self loadImage.

self assert: originalNilObjectIdentityHash equals: (memory hashBitsOf: memory nilObject).
]

{ #category : #tests }
VMImageReadingTest >> testSavedImageSavesObjectFromPermanentSpace [

self saveImage.
self loadImage.

self assert: originalPermanentObjectIdentityHash equals: (memory hashBitsOf: permanentObject).

]

{ #category : #tests }
VMImageReadingTest >> testSavingImageWithThreeSegmentsIsCorrectlySqueezed [

Expand Down
40 changes: 0 additions & 40 deletions smalltalksrc/VMMakerTests/VMPermanentSpaceMemoryTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -4,46 +4,6 @@ Class {
#category : #'VMMakerTests-PermSpace'
}

{ #category : #running }
VMPermanentSpaceMemoryTest >> configureEnvironmentBuilder [

super configureEnvironmentBuilder.

environmentBuilder permSpaceSize: 10*1024*1024.
]

{ #category : #'instance creation' }
VMPermanentSpaceMemoryTest >> newPermanentByteObjectOfSize: byteSize [

| oop numSlots instSpec |

numSlots := memory numSlotsForBytes: byteSize.
instSpec := memory byteFormatForNumBytes: byteSize.

oop := memory
allocateSlotsInPermSpace: numSlots
format: instSpec
classIndex: (memory ensureBehaviorHash: memory classByteArray).

0 to: byteSize - 1 do: [ :index |
memory storeByte: index ofObject: oop withValue: 0 ].

^ oop
]

{ #category : #running }
VMPermanentSpaceMemoryTest >> setUp [

super setUp.

memory classByteArray: (self newClassInOldSpaceWithSlots: 0 instSpec: (memory byteFormatForNumBytes: 0)).





]

{ #category : #'tests - allocation' }
VMPermanentSpaceMemoryTest >> testMarkingNewSpaceDoesNotMarkPermSpace [

Expand Down
29 changes: 29 additions & 0 deletions smalltalksrc/VMMakerTests/VMSpurInitializedOldSpaceTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ VMSpurInitializedOldSpaceTest >> assertFreeListEmpty: aFreeListOop [
self assert: aFreeListOop equals: 0
]

{ #category : #running }
VMSpurInitializedOldSpaceTest >> configureEnvironmentBuilder [

super configureEnvironmentBuilder.

environmentBuilder permSpaceSize: 10*1024*1024.
]

{ #category : #helpers }
VMSpurInitializedOldSpaceTest >> createEphemeronClass [
ourEphemeronClass := self newObjectWithSlots: 3.
Expand Down Expand Up @@ -98,6 +106,25 @@ VMSpurInitializedOldSpaceTest >> newEphemeronObject [
classIndex: (memory ensureBehaviorHash: ourEphemeronClass)
]

{ #category : #'instance creation' }
VMSpurInitializedOldSpaceTest >> newPermanentByteObjectOfSize: byteSize [

| oop numSlots instSpec |

numSlots := memory numSlotsForBytes: byteSize.
instSpec := memory byteFormatForNumBytes: byteSize.

oop := memory
allocateSlotsInPermSpace: numSlots
format: instSpec
classIndex: (memory ensureBehaviorHash: memory classByteArray).

0 to: byteSize - 1 do: [ :index |
memory storeByte: index ofObject: oop withValue: 0 ].

^ oop
]

{ #category : #helpers }
VMSpurInitializedOldSpaceTest >> nextNodeOf: aNode [

Expand Down Expand Up @@ -129,6 +156,8 @@ VMSpurInitializedOldSpaceTest >> setUp [
self initializeOldSpaceForScavenger.
self initializeOldSpaceForFullGC.
memory lastHash: 1.
memory classByteArray: (self newClassInOldSpaceWithSlots: 0 instSpec: (memory byteFormatForNumBytes: 0)).

]

{ #category : #helpers }
Expand Down

0 comments on commit 20ba87a

Please sign in to comment.