| Index: test/cctest/cctest.h
|
| diff --git a/test/cctest/cctest.h b/test/cctest/cctest.h
|
| index 122d36d5b8383fb30abbcb4fbb359f22ebfc21fb..7621f0b0d8b1a830b9471382c7dfc917288c252b 100644
|
| --- a/test/cctest/cctest.h
|
| +++ b/test/cctest/cctest.h
|
| @@ -79,6 +79,17 @@ typedef v8::internal::EnumSet<CcTestExtensionIds> CcTestExtensionFlags;
|
| #undef DEFINE_EXTENSION_FLAG
|
|
|
|
|
| +void RunAndTrackAllocations(void (*test)());
|
| +
|
| +#ifndef TEST_TRACK_ALLOCATIONS
|
| +#define TEST_TRACK_ALLOCATIONS(Name) \
|
| + static void Test##Name(); \
|
| + TEST(Name##TrackAllocations) { \
|
| + RunAndTrackAllocations(&Test##Name); \
|
| + } \
|
| + TEST(Name)
|
| +#endif
|
| +
|
| class CcTest {
|
| public:
|
| typedef void (TestFunction)();
|
| @@ -340,4 +351,33 @@ static inline void SimulateFullSpace(v8::internal::PagedSpace* space) {
|
| }
|
|
|
|
|
| +// Helper class for new allocations tracking and checking.
|
| +// To use checking of JS allocations tracking in a test,
|
| +// use TEST_TRACK_ALLOCATIONS macro or just create an instance
|
| +// of this class.
|
| +class HeapObjectsTracker {
|
| + public:
|
| + HeapObjectsTracker() {
|
| + heap_profiler_ = i::Isolate::Current()->heap_profiler();
|
| + CHECK_NE(NULL, heap_profiler_);
|
| + heap_profiler_->StartHeapAllocationsRecording();
|
| + untracked_on_start_ = heap_profiler_->FindUntrackedObjects();
|
| + }
|
| +
|
| + virtual ~HeapObjectsTracker() {
|
| + i::Isolate::Current()->heap()->CollectAllAvailableGarbage();
|
| + CHECK_EQ(0, CountUntrackedObjects());
|
| + heap_profiler_->StopHeapAllocationsRecording();
|
| + }
|
| +
|
| + private:
|
| + int CountUntrackedObjects() {
|
| + return heap_profiler_->FindUntrackedObjects() - untracked_on_start_;
|
| + }
|
| +
|
| + i::HeapProfiler* heap_profiler_;
|
| + int untracked_on_start_;
|
| +};
|
| +
|
| +
|
| #endif // ifndef CCTEST_H_
|
|
|