-
Notifications
You must be signed in to change notification settings - Fork 81
Add API disable_collection() #474
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
0f507f9
Implement disable_collection()
qinsoon b382d74
Add tests for enable/disable_collection
qinsoon de8e531
Merge branch 'master' into disable-collection
caizixian bc2d77e
Merge branch 'master' into disable-collection
caizixian fbed100
Separate initialize_collection() from enable/disable_collection()
qinsoon 8854237
Address reviews.
qinsoon eed7e9b
Merge branch 'master' into disable-collection
qinsoon 817383f
cargo fmt
qinsoon 6fab6aa
Rename allow_poll to allow_gc. Fix a few comments. Remove an assertion
qinsoon File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
22 changes: 22 additions & 0 deletions
22
vmbindings/dummyvm/src/tests/allcoate_with_disable_collection.rs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| use crate::api::*; | ||
| use mmtk::util::opaque_pointer::*; | ||
| use mmtk::AllocationSemantics; | ||
|
|
||
| /// This test allocates after calling disable_collection(). When we exceed the heap limit, MMTk will NOT trigger a GC. | ||
| /// And the allocation will succeed. | ||
| #[test] | ||
| pub fn allocate_with_disable_collection() { | ||
| const MB: usize = 1024 * 1024; | ||
| // 1MB heap | ||
| gc_init(MB); | ||
| initialize_collection(VMThread::UNINITIALIZED); | ||
| let handle = bind_mutator(VMMutatorThread(VMThread::UNINITIALIZED)); | ||
| // Allocate 1MB. It should be fine. | ||
| let addr = alloc(handle, MB, 8, 0, AllocationSemantics::Default); | ||
| assert!(!addr.is_zero()); | ||
| // Disable GC | ||
| disable_collection(); | ||
| // Allocate another MB. This exceeds the heap size. But as we have disabled GC, MMTk will not trigger a GC, and allow this allocation. | ||
| let addr = alloc(handle, MB, 8, 0, AllocationSemantics::Default); | ||
| assert!(!addr.is_zero()); | ||
| } |
18 changes: 18 additions & 0 deletions
18
vmbindings/dummyvm/src/tests/allocate_with_initialize_collection.rs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| use crate::api::*; | ||
| use mmtk::util::opaque_pointer::*; | ||
| use mmtk::AllocationSemantics; | ||
|
|
||
| /// This test allocates after calling initialize_collection(). When we exceed the heap limit, MMTk will trigger a GC. And block_for_gc will be called. | ||
| /// We havent implemented block_for_gc so it will panic. | ||
| #[test] | ||
| #[should_panic(expected = "block_for_gc is not implemented")] | ||
| pub fn allocate_with_initialize_collection() { | ||
| const MB: usize = 1024 * 1024; | ||
| // 1MB heap | ||
| gc_init(MB); | ||
| initialize_collection(VMThread::UNINITIALIZED); | ||
| let handle = bind_mutator(VMMutatorThread(VMThread::UNINITIALIZED)); | ||
| // Attempt to allocate 2MB. This will trigger GC. | ||
| let addr = alloc(handle, 2 * MB, 8, 0, AllocationSemantics::Default); | ||
| assert!(!addr.is_zero()); | ||
| } |
26 changes: 26 additions & 0 deletions
26
vmbindings/dummyvm/src/tests/allocate_with_re_enable_collection.rs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| use crate::api::*; | ||
| use mmtk::util::opaque_pointer::*; | ||
| use mmtk::AllocationSemantics; | ||
|
|
||
| /// This test allocates after calling initialize_collection(). When we exceed the heap limit, MMTk will trigger a GC. And block_for_gc will be called. | ||
| /// We havent implemented block_for_gc so it will panic. This test is similar to allocate_with_initialize_collection, except that we once disabled GC in the test. | ||
| #[test] | ||
| #[should_panic(expected = "block_for_gc is not implemented")] | ||
| pub fn allocate_with_re_enable_collection() { | ||
| const MB: usize = 1024 * 1024; | ||
| // 1MB heap | ||
| gc_init(MB); | ||
| initialize_collection(VMThread::UNINITIALIZED); | ||
| let handle = bind_mutator(VMMutatorThread(VMThread::UNINITIALIZED)); | ||
| // Allocate 1MB. It should be fine. | ||
| let addr = alloc(handle, MB, 8, 0, AllocationSemantics::Default); | ||
| assert!(!addr.is_zero()); | ||
| // Disable GC. So we can keep allocate without triggering a GC. | ||
| disable_collection(); | ||
| let addr = alloc(handle, MB, 8, 0, AllocationSemantics::Default); | ||
| assert!(!addr.is_zero()); | ||
| // Enable GC again. When we allocate, we should see a GC triggered immediately. | ||
| enable_collection(); | ||
| let addr = alloc(handle, MB, 8, 0, AllocationSemantics::Default); | ||
| assert!(!addr.is_zero()); | ||
| } |
17 changes: 17 additions & 0 deletions
17
vmbindings/dummyvm/src/tests/allocate_without_initialize_collection.rs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| use crate::api::*; | ||
| use mmtk::util::opaque_pointer::*; | ||
| use mmtk::AllocationSemantics; | ||
|
|
||
| /// This test allocates without calling initialize_collection(). When we exceed the heap limit, a GC should be triggered by MMTk. | ||
| /// But as we haven't enabled collection, GC is not initialized, so MMTk will panic. | ||
| #[test] | ||
| #[should_panic(expected = "GC is not allowed here")] | ||
| pub fn allocate_without_initialize_collection() { | ||
| const MB: usize = 1024 * 1024; | ||
| // 1MB heap | ||
| gc_init(MB); | ||
| let handle = bind_mutator(VMMutatorThread(VMThread::UNINITIALIZED)); | ||
| // Attempt to allocate 2MB memory. This should trigger a GC, but as we never call initialize_collection(), we cannot do GC. | ||
| let addr = alloc(handle, 2 * MB, 8, 0, AllocationSemantics::Default); | ||
| assert!(!addr.is_zero()); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.