V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
invalidated-slots.h
1 // Copyright 2017 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 V8_HEAP_INVALIDATED_SLOTS_H_
6 #define V8_HEAP_INVALIDATED_SLOTS_H_
7 
8 #include <map>
9 #include <stack>
10 
11 #include "src/allocation.h"
12 #include "src/base/atomic-utils.h"
13 #include "src/utils.h"
14 
15 namespace v8 {
16 namespace internal {
17 
18 class HeapObject;
19 
20 // This data structure stores objects that went through object layout change
21 // that potentially invalidates slots recorded concurrently. The second part
22 // of each element is the size of the corresponding object before the layout
23 // change.
24 using InvalidatedSlots = std::map<HeapObject*, int>;
25 
26 // This class provides IsValid predicate that takes into account the set
27 // of invalidated objects in the given memory chunk.
28 // The sequence of queried slot must be non-decreasing. This allows fast
29 // implementation with complexity O(m*log(m) + n), where
30 // m is the number of invalidated objects in the memory chunk.
31 // n is the number of IsValid queries.
33  public:
34  explicit InvalidatedSlotsFilter(MemoryChunk* chunk);
35  inline bool IsValid(Address slot);
36 
37  private:
38  InvalidatedSlots::const_iterator iterator_;
39  InvalidatedSlots::const_iterator iterator_end_;
40  Address sentinel_;
41  Address invalidated_start_;
42  Address invalidated_end_;
43  HeapObject* invalidated_object_;
44  int invalidated_object_size_;
45  bool slots_in_free_space_are_valid_;
46  InvalidatedSlots empty_;
47 #ifdef DEBUG
48  Address last_slot_;
49 #endif
50 };
51 
52 } // namespace internal
53 } // namespace v8
54 
55 #endif // V8_HEAP_INVALIDATED_SLOTS_H_
Definition: libplatform.h:13