| // 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_HEAP_CODE_OBJECT_REGISTRY_H_ |
| #define V8_HEAP_CODE_OBJECT_REGISTRY_H_ |
| |
| #include <set> |
| #include <vector> |
| |
| #include "src/base/macros.h" |
| #include "src/common/globals.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| // The CodeObjectRegistry holds all start addresses of code objects of a given |
| // MemoryChunk. Each MemoryChunk owns a separate CodeObjectRegistry. The |
| // CodeObjectRegistry allows fast lookup from an inner pointer of a code object |
| // to the actual code object. |
| class V8_EXPORT_PRIVATE CodeObjectRegistry { |
| public: |
| void RegisterNewlyAllocatedCodeObject(Address code); |
| void RegisterAlreadyExistingCodeObject(Address code); |
| void Clear(); |
| void Finalize(); |
| bool Contains(Address code) const; |
| Address GetCodeObjectStartFromInnerAddress(Address address) const; |
| |
| private: |
| // A vector of addresses, which may be sorted. This is set to 'mutable' so |
| // that it can be lazily sorted during GetCodeObjectStartFromInnerAddress. |
| mutable std::vector<Address> code_object_registry_; |
| mutable bool is_sorted_ = true; |
| }; |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_HEAP_CODE_OBJECT_REGISTRY_H_ |