Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(906)

Side by Side Diff: src/objects.h

Issue 2801073006: Decouple root visitors from object visitors. (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_OBJECTS_H_ 5 #ifndef V8_OBJECTS_H_
6 #define V8_OBJECTS_H_ 6 #define V8_OBJECTS_H_
7 7
8 #include <iosfwd> 8 #include <iosfwd>
9 #include <memory> 9 #include <memory>
10 10
(...skipping 933 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 class LookupIterator; 944 class LookupIterator;
945 class FieldType; 945 class FieldType;
946 class Module; 946 class Module;
947 class ModuleDescriptor; 947 class ModuleDescriptor;
948 class ModuleInfoEntry; 948 class ModuleInfoEntry;
949 class ModuleInfo; 949 class ModuleInfo;
950 class ObjectHashTable; 950 class ObjectHashTable;
951 class ObjectVisitor; 951 class ObjectVisitor;
952 class PropertyCell; 952 class PropertyCell;
953 class PropertyDescriptor; 953 class PropertyDescriptor;
954 class RootVisitor;
954 class SafepointEntry; 955 class SafepointEntry;
955 class SharedFunctionInfo; 956 class SharedFunctionInfo;
956 class StringStream; 957 class StringStream;
957 class TypeFeedbackInfo; 958 class TypeFeedbackInfo;
958 class FeedbackMetadata; 959 class FeedbackMetadata;
959 class FeedbackVector; 960 class FeedbackVector;
960 class WeakCell; 961 class WeakCell;
961 class TransitionArray; 962 class TransitionArray;
962 class TemplateList; 963 class TemplateList;
963 964
(...skipping 7738 matching lines...) Expand 10 before | Expand all | Expand 10 after
8702 }; 8703 };
8703 8704
8704 8705
8705 // Utility superclass for stack-allocated objects that must be updated 8706 // Utility superclass for stack-allocated objects that must be updated
8706 // on gc. It provides two ways for the gc to update instances, either 8707 // on gc. It provides two ways for the gc to update instances, either
8707 // iterating or updating after gc. 8708 // iterating or updating after gc.
8708 class Relocatable BASE_EMBEDDED { 8709 class Relocatable BASE_EMBEDDED {
8709 public: 8710 public:
8710 explicit inline Relocatable(Isolate* isolate); 8711 explicit inline Relocatable(Isolate* isolate);
8711 inline virtual ~Relocatable(); 8712 inline virtual ~Relocatable();
8712 virtual void IterateInstance(ObjectVisitor* v) { } 8713 virtual void IterateInstance(RootVisitor* v) {}
8713 virtual void PostGarbageCollection() { } 8714 virtual void PostGarbageCollection() { }
8714 8715
8715 static void PostGarbageCollectionProcessing(Isolate* isolate); 8716 static void PostGarbageCollectionProcessing(Isolate* isolate);
8716 static int ArchiveSpacePerThread(); 8717 static int ArchiveSpacePerThread();
8717 static char* ArchiveState(Isolate* isolate, char* to); 8718 static char* ArchiveState(Isolate* isolate, char* to);
8718 static char* RestoreState(Isolate* isolate, char* from); 8719 static char* RestoreState(Isolate* isolate, char* from);
8719 static void Iterate(Isolate* isolate, ObjectVisitor* v); 8720 static void Iterate(Isolate* isolate, RootVisitor* v);
8720 static void Iterate(ObjectVisitor* v, Relocatable* top); 8721 static void Iterate(RootVisitor* v, Relocatable* top);
8721 static char* Iterate(ObjectVisitor* v, char* t); 8722 static char* Iterate(RootVisitor* v, char* t);
8722 8723
8723 private: 8724 private:
8724 Isolate* isolate_; 8725 Isolate* isolate_;
8725 Relocatable* prev_; 8726 Relocatable* prev_;
8726 }; 8727 };
8727 8728
8728 8729
8729 // A flat string reader provides random access to the contents of a 8730 // A flat string reader provides random access to the contents of a
8730 // string independent of the character width of the string. The handle 8731 // string independent of the character width of the string. The handle
8731 // must be valid as long as the reader is being used. 8732 // must be valid as long as the reader is being used.
(...skipping 1402 matching lines...) Expand 10 before | Expand all | Expand 10 after
10134 10135
10135 private: 10136 private:
10136 // Bit position in the flag, from least significant bit position. 10137 // Bit position in the flag, from least significant bit position.
10137 static const int kIsEvalBit = 0; 10138 static const int kIsEvalBit = 0;
10138 static const int kIsConstructorBit = 1; 10139 static const int kIsConstructorBit = 1;
10139 static const int kIsWasmBit = 2; 10140 static const int kIsWasmBit = 2;
10140 10141
10141 DISALLOW_IMPLICIT_CONSTRUCTORS(StackFrameInfo); 10142 DISALLOW_IMPLICIT_CONSTRUCTORS(StackFrameInfo);
10142 }; 10143 };
10143 10144
10144 #define VISITOR_SYNCHRONIZATION_TAGS_LIST(V) \
10145 V(kStringTable, "string_table", "(Internalized strings)") \
10146 V(kExternalStringsTable, "external_strings_table", "(External strings)") \
10147 V(kStrongRootList, "strong_root_list", "(Strong roots)") \
10148 V(kSmiRootList, "smi_root_list", "(Smi roots)") \
10149 V(kBootstrapper, "bootstrapper", "(Bootstrapper)") \
10150 V(kTop, "top", "(Isolate)") \
10151 V(kRelocatable, "relocatable", "(Relocatable)") \
10152 V(kDebug, "debug", "(Debugger)") \
10153 V(kCompilationCache, "compilationcache", "(Compilation cache)") \
10154 V(kHandleScope, "handlescope", "(Handle scope)") \
10155 V(kDispatchTable, "dispatchtable", "(Dispatch table)") \
10156 V(kBuiltins, "builtins", "(Builtins)") \
10157 V(kGlobalHandles, "globalhandles", "(Global handles)") \
10158 V(kEternalHandles, "eternalhandles", "(Eternal handles)") \
10159 V(kThreadManager, "threadmanager", "(Thread manager)") \
10160 V(kStrongRoots, "strong roots", "(Strong roots)") \
10161 V(kExtensions, "Extensions", "(Extensions)")
10162
10163 class VisitorSynchronization : public AllStatic {
10164 public:
10165 #define DECLARE_ENUM(enum_item, ignore1, ignore2) enum_item,
10166 enum SyncTag {
10167 VISITOR_SYNCHRONIZATION_TAGS_LIST(DECLARE_ENUM)
10168 kNumberOfSyncTags
10169 };
10170 #undef DECLARE_ENUM
10171
10172 static const char* const kTags[kNumberOfSyncTags];
10173 static const char* const kTagNames[kNumberOfSyncTags];
10174 };
10175
10176 // Abstract base class for visiting, and optionally modifying, the 10145 // Abstract base class for visiting, and optionally modifying, the
10177 // pointers contained in Objects. Used in GC and serialization/deserialization. 10146 // pointers contained in Objects. Used in GC and serialization/deserialization.
10147 // TODO(ulan): move to src/visitors.h
10178 class ObjectVisitor BASE_EMBEDDED { 10148 class ObjectVisitor BASE_EMBEDDED {
10179 public: 10149 public:
10180 virtual ~ObjectVisitor() {} 10150 virtual ~ObjectVisitor() {}
10181 10151
10182 // Visits a contiguous arrays of pointers in the half-open range 10152 // Visits a contiguous arrays of pointers in the half-open range
10183 // [start, end). Any or all of the values may be modified on return. 10153 // [start, end). Any or all of the values may be modified on return.
10184 virtual void VisitPointers(Object** start, Object** end) = 0; 10154 virtual void VisitPointers(Object** start, Object** end) = 0;
10185 10155
10186 // Handy shorthand for visiting a single pointer. 10156 // Handy shorthand for visiting a single pointer.
10187 virtual void VisitPointer(Object** p) { VisitPointers(p, p + 1); } 10157 virtual void VisitPointer(Object** p) { VisitPointers(p, p + 1); }
(...skipping 27 matching lines...) Expand all
10215 virtual void VisitEmbeddedPointer(RelocInfo* rinfo); 10185 virtual void VisitEmbeddedPointer(RelocInfo* rinfo);
10216 10186
10217 // Visits an external reference embedded into a code object. 10187 // Visits an external reference embedded into a code object.
10218 virtual void VisitExternalReference(RelocInfo* rinfo); 10188 virtual void VisitExternalReference(RelocInfo* rinfo);
10219 10189
10220 // Visits an external reference. 10190 // Visits an external reference.
10221 virtual void VisitExternalReference(Address* p) {} 10191 virtual void VisitExternalReference(Address* p) {}
10222 10192
10223 // Visits an (encoded) internal reference. 10193 // Visits an (encoded) internal reference.
10224 virtual void VisitInternalReference(RelocInfo* rinfo) {} 10194 virtual void VisitInternalReference(RelocInfo* rinfo) {}
10225
10226 // Intended for serialization/deserialization checking: insert, or
10227 // check for the presence of, a tag at this position in the stream.
10228 // Also used for marking up GC roots in heap snapshots.
10229 virtual void Synchronize(VisitorSynchronization::SyncTag tag) {}
10230 }; 10195 };
10231 10196
10232 10197
10233 // BooleanBit is a helper class for setting and getting a bit in an integer. 10198 // BooleanBit is a helper class for setting and getting a bit in an integer.
10234 class BooleanBit : public AllStatic { 10199 class BooleanBit : public AllStatic {
10235 public: 10200 public:
10236 static inline bool get(int value, int bit_position) { 10201 static inline bool get(int value, int bit_position) {
10237 return (value & (1 << bit_position)) != 0; 10202 return (value & (1 << bit_position)) != 0;
10238 } 10203 }
10239 10204
10240 static inline int set(int value, int bit_position, bool v) { 10205 static inline int set(int value, int bit_position, bool v) {
10241 if (v) { 10206 if (v) {
10242 value |= (1 << bit_position); 10207 value |= (1 << bit_position);
10243 } else { 10208 } else {
10244 value &= ~(1 << bit_position); 10209 value &= ~(1 << bit_position);
10245 } 10210 }
10246 return value; 10211 return value;
10247 } 10212 }
10248 }; 10213 };
10249 10214
10250 10215
10251 } // NOLINT, false-positive due to second-order macros. 10216 } // NOLINT, false-positive due to second-order macros.
10252 } // NOLINT, false-positive due to second-order macros. 10217 } // NOLINT, false-positive due to second-order macros.
10253 10218
10254 #include "src/objects/object-macros-undef.h" 10219 #include "src/objects/object-macros-undef.h"
10255 10220
10256 #endif // V8_OBJECTS_H_ 10221 #endif // V8_OBJECTS_H_
OLDNEW
« src/heap/mark-compact.cc ('K') | « src/isolate.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698