| // Copyright 2020 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_UNITTESTS_HEAP_UNIFIED_HEAP_UTILS_H_ |
| #define V8_UNITTESTS_HEAP_UNIFIED_HEAP_UTILS_H_ |
| |
| #include "include/cppgc/heap.h" |
| #include "include/v8.h" |
| #include "test/unittests/heap/heap-utils.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| class CppHeap; |
| |
| class UnifiedHeapTest : public TestWithHeapInternals { |
| public: |
| UnifiedHeapTest(); |
| ~UnifiedHeapTest() override; |
| |
| void CollectGarbageWithEmbedderStack(); |
| void CollectGarbageWithoutEmbedderStack(); |
| |
| CppHeap& cpp_heap() const; |
| cppgc::AllocationHandle& allocation_handle(); |
| |
| private: |
| std::unique_ptr<CppHeap> cpp_heap_; |
| bool saved_incremental_marking_wrappers_; |
| }; |
| |
| class WrapperHelper { |
| public: |
| // Sets up a V8 API object so that it points back to a C++ object. The setup |
| // used is recognized by the GC and references will be followed for liveness |
| // analysis (marking) as well as tooling (snapshot). |
| static v8::Local<v8::Object> CreateWrapper(v8::Local<v8::Context> context, |
| void* wrappable_object, |
| const char* class_name = ""); |
| |
| // Resets the connection of a wrapper (JS) to its wrappable (C++), meaning |
| // that the wrappable object is not longer kept alive by the wrapper object. |
| static void ResetWrappableConnection(v8::Local<v8::Object> api_object); |
| }; |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_UNITTESTS_HEAP_UNIFIED_HEAP_UTILS_H_ |