Introduce an API mirroring the gc extension
BUG=none R=mstarzinger@chromium.org, svenpanne@chromium.org LOG=y Review URL: https://codereview.chromium.org/131443008 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18563 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
e9c8de04da
commit
38cde85729
20
include/v8.h
20
include/v8.h
@ -3963,6 +3963,15 @@ class V8_EXPORT Isolate {
|
||||
Scope& operator=(const Scope&);
|
||||
};
|
||||
|
||||
/**
|
||||
* Types of garbage collections that can be requested via
|
||||
* RequestGarbageCollectionForTesting.
|
||||
*/
|
||||
enum GarbageCollectionType {
|
||||
kFullGarbageCollection,
|
||||
kMinorGarbageCollection
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a new isolate. Does not change the currently entered
|
||||
* isolate.
|
||||
@ -4175,6 +4184,17 @@ class V8_EXPORT Isolate {
|
||||
*/
|
||||
void ClearInterrupt();
|
||||
|
||||
/**
|
||||
* Request garbage collection in this Isolate. It is only valid to call this
|
||||
* function if --expose_gc was specified.
|
||||
*
|
||||
* This should only be used for testing purposes and not to enforce a garbage
|
||||
* collection schedule. It has strong negative impact on the garbage
|
||||
* collection performance. Use IdleNotification() or LowMemoryNotification()
|
||||
* instead to influence the garbage collection schedule.
|
||||
*/
|
||||
void RequestGarbageCollectionForTesting(GarbageCollectionType type);
|
||||
|
||||
private:
|
||||
Isolate();
|
||||
Isolate(const Isolate&);
|
||||
|
15
src/api.cc
15
src/api.cc
@ -6412,6 +6412,21 @@ void Isolate::ClearInterrupt() {
|
||||
}
|
||||
|
||||
|
||||
void Isolate::RequestGarbageCollectionForTesting(GarbageCollectionType type) {
|
||||
CHECK(i::FLAG_expose_gc);
|
||||
if (type == kMinorGarbageCollection) {
|
||||
reinterpret_cast<i::Isolate*>(this)->heap()->CollectGarbage(
|
||||
i::NEW_SPACE, "Isolate::RequestGarbageCollection",
|
||||
kGCCallbackFlagForced);
|
||||
} else {
|
||||
ASSERT_EQ(kFullGarbageCollection, type);
|
||||
reinterpret_cast<i::Isolate*>(this)->heap()->CollectAllGarbage(
|
||||
i::Heap::kNoGCFlags, "Isolate::RequestGarbageCollection",
|
||||
kGCCallbackFlagForced);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Isolate* Isolate::GetCurrent() {
|
||||
i::Isolate* isolate = i::Isolate::UncheckedCurrent();
|
||||
return reinterpret_cast<Isolate*>(isolate);
|
||||
|
Loading…
Reference in New Issue
Block a user