// Copyright 2015 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_CONTEXT_MEASURE_H_ #define V8_CONTEXT_MEASURE_H_ #include "src/address-map.h" #include "src/assert-scope.h" #include "src/objects.h" namespace v8 { namespace internal { class ContextMeasure : public ObjectVisitor { public: explicit ContextMeasure(Context* context); int Size() { return size_; } int Count() { return count_; } void VisitPointers(Object** start, Object** end) override; private: void MeasureObject(HeapObject* object); void MeasureDeferredObjects(); void MeasureAndRecurse(HeapObject* object); bool IsShared(HeapObject* object); Context* context_; SerializerReferenceMap reference_map_; RootIndexMap root_index_map_; static const int kMaxRecursion = 16; int recursion_depth_; List<HeapObject*> deferred_objects_; int count_; int size_; DisallowHeapAllocation no_gc_; DISALLOW_COPY_AND_ASSIGN(ContextMeasure); }; } // namespace internal } // namespace v8 #endif // V8_CONTEXT_MEASURE_H_