v8  10.1.124 (node 18.2.0)
V8 is Google's open source JavaScript engine
testing.h
Go to the documentation of this file.
1 // Copyright 2021 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef INCLUDE_CPPGC_TESTING_H_
6 #define INCLUDE_CPPGC_TESTING_H_
7 
8 #include "cppgc/common.h"
9 #include "cppgc/macros.h"
10 #include "v8config.h" // NOLINT(build/include_directory)
11 
12 namespace cppgc {
13 
14 class HeapHandle;
15 
16 /**
17  * Namespace contains testing helpers.
18  */
19 namespace testing {
20 
21 /**
22  * Overrides the state of the stack with the provided value. Parameters passed
23  * to explicit garbage collection calls still take precedence. Must not be
24  * nested.
25  *
26  * This scope is useful to make the garbage collector consider the stack when
27  * tasks that invoke garbage collection (through the provided platform) contain
28  * interesting pointers on its stack.
29  */
30 class V8_EXPORT V8_NODISCARD OverrideEmbedderStackStateScope final {
32 
33  public:
34  /**
35  * Constructs a scoped object that automatically enters and leaves the scope.
36  *
37  * \param heap_handle The corresponding heap.
38  */
39  explicit OverrideEmbedderStackStateScope(HeapHandle& heap_handle,
40  EmbedderStackState state);
42 
43  OverrideEmbedderStackStateScope(const OverrideEmbedderStackStateScope&) =
44  delete;
45  OverrideEmbedderStackStateScope& operator=(
46  const OverrideEmbedderStackStateScope&) = delete;
47 
48  private:
49  HeapHandle& heap_handle_;
50 };
51 
52 /**
53  * Testing interface for managed heaps that allows for controlling garbage
54  * collection timings. Embedders should use this class when testing the
55  * interaction of their code with incremental/concurrent garbage collection.
56  */
57 class V8_EXPORT StandaloneTestingHeap final {
58  public:
59  explicit StandaloneTestingHeap(HeapHandle&);
60 
61  /**
62  * Start an incremental garbage collection.
63  */
65 
66  /**
67  * Perform an incremental step. This will also schedule concurrent steps if
68  * needed.
69  *
70  * \param stack_state The state of the stack during the step.
71  */
73 
74  /**
75  * Finalize the current garbage collection cycle atomically.
76  * Assumes that garbage collection is in progress.
77  *
78  * \param stack_state The state of the stack for finalizing the garbage
79  * collection cycle.
80  */
82 
83  /**
84  * Toggle main thread marking on/off. Allows to stress concurrent marking
85  * (e.g. to better detect data races).
86  *
87  * \param should_mark Denotes whether the main thread should contribute to
88  * marking. Defaults to true.
89  */
90  void ToggleMainThreadMarking(bool should_mark);
91 
92  /**
93  * Force enable compaction for the next garbage collection cycle.
94  */
96 
97  private:
98  HeapHandle& heap_handle_;
99 };
100 
102 
103 } // namespace testing
104 } // namespace cppgc
105 
106 #endif // INCLUDE_CPPGC_TESTING_H_