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

Side by Side Diff: src/objects.h

Issue 11818021: Allocation Info Tracking, continued. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: A partial delta against Toon's previous review Created 7 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « src/isolate.cc ('k') | src/objects.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 2011 matching lines...) Expand 10 before | Expand all | Expand 10 after
2022 inline MUST_USE_RESULT MaybeObject* GetElementsTransitionMap( 2022 inline MUST_USE_RESULT MaybeObject* GetElementsTransitionMap(
2023 Isolate* isolate, 2023 Isolate* isolate,
2024 ElementsKind elements_kind); 2024 ElementsKind elements_kind);
2025 MUST_USE_RESULT MaybeObject* GetElementsTransitionMapSlow( 2025 MUST_USE_RESULT MaybeObject* GetElementsTransitionMapSlow(
2026 ElementsKind elements_kind); 2026 ElementsKind elements_kind);
2027 2027
2028 static Handle<Object> TransitionElementsKind(Handle<JSObject> object, 2028 static Handle<Object> TransitionElementsKind(Handle<JSObject> object,
2029 ElementsKind to_kind); 2029 ElementsKind to_kind);
2030 2030
2031 MUST_USE_RESULT MaybeObject* TransitionElementsKind(ElementsKind to_kind); 2031 MUST_USE_RESULT MaybeObject* TransitionElementsKind(ElementsKind to_kind);
2032 MUST_USE_RESULT MaybeObject* PossiblyTransitionArrayBoilerplate( 2032 MUST_USE_RESULT MaybeObject* UpdateAllocationSiteInfo(
2033 ElementsKind to_kind); 2033 ElementsKind to_kind);
2034 2034
2035 // Replaces an existing transition with a transition to a map with a FIELD. 2035 // Replaces an existing transition with a transition to a map with a FIELD.
2036 MUST_USE_RESULT MaybeObject* ConvertTransitionToMapTransition( 2036 MUST_USE_RESULT MaybeObject* ConvertTransitionToMapTransition(
2037 int transition_index, 2037 int transition_index,
2038 String* name, 2038 String* name,
2039 Object* new_value, 2039 Object* new_value,
2040 PropertyAttributes attributes); 2040 PropertyAttributes attributes);
2041 2041
2042 // Converts a descriptor of any other type to a real field, backed by the 2042 // Converts a descriptor of any other type to a real field, backed by the
(...skipping 2130 matching lines...) Expand 10 before | Expand all | Expand 10 after
4173 inline void SetCell(int index, JSGlobalPropertyCell* cell); 4173 inline void SetCell(int index, JSGlobalPropertyCell* cell);
4174 4174
4175 // The object that indicates an uninitialized cache. 4175 // The object that indicates an uninitialized cache.
4176 static inline Handle<Object> UninitializedSentinel(Isolate* isolate); 4176 static inline Handle<Object> UninitializedSentinel(Isolate* isolate);
4177 4177
4178 // The object that indicates a megamorphic state. 4178 // The object that indicates a megamorphic state.
4179 static inline Handle<Object> MegamorphicSentinel(Isolate* isolate); 4179 static inline Handle<Object> MegamorphicSentinel(Isolate* isolate);
4180 4180
4181 // The object that indicates a monomorphic state of Array with 4181 // The object that indicates a monomorphic state of Array with
4182 // ElementsKind 4182 // ElementsKind
4183 static inline Handle<Object> MonomorphicArraySentinel( 4183 static inline Handle<Object> MonomorphicArraySentinel(Isolate* isolate,
4184 ElementsKind elements_kind); 4184 ElementsKind elements_kind);
4185 4185
4186 // A raw version of the uninitialized sentinel that's safe to read during 4186 // A raw version of the uninitialized sentinel that's safe to read during
4187 // garbage collection (e.g., for patching the cache). 4187 // garbage collection (e.g., for patching the cache).
4188 static inline Object* RawUninitializedSentinel(Heap* heap); 4188 static inline Object* RawUninitializedSentinel(Heap* heap);
4189 4189
4190 // Casting. 4190 // Casting.
4191 static inline TypeFeedbackCells* cast(Object* obj); 4191 static inline TypeFeedbackCells* cast(Object* obj);
4192 4192
4193 static const int kForInFastCaseMarker = 0; 4193 static const int kForInFastCaseMarker = 0;
(...skipping 2845 matching lines...) Expand 10 before | Expand all | Expand 10 after
7039 }; 7039 };
7040 7040
7041 7041
7042 enum AllocationSiteMode { 7042 enum AllocationSiteMode {
7043 DONT_TRACK_ALLOCATION_SITE, 7043 DONT_TRACK_ALLOCATION_SITE,
7044 TRACK_ALLOCATION_SITE, 7044 TRACK_ALLOCATION_SITE,
7045 LAST_ALLOCATION_SITE_MODE = TRACK_ALLOCATION_SITE 7045 LAST_ALLOCATION_SITE_MODE = TRACK_ALLOCATION_SITE
7046 }; 7046 };
7047 7047
7048 7048
7049
7050
7051 class AllocationSiteInfo: public Struct { 7049 class AllocationSiteInfo: public Struct {
7052 public: 7050 public:
7053 DECL_ACCESSORS(payload, Object) 7051 DECL_ACCESSORS(payload, Object)
7054 7052
7055 static inline AllocationSiteInfo* cast(Object* obj); 7053 static inline AllocationSiteInfo* cast(Object* obj);
7056 7054
7057 DECLARE_PRINTER(AllocationSiteInfo) 7055 DECLARE_PRINTER(AllocationSiteInfo)
7058 DECLARE_VERIFIER(AllocationSiteInfo) 7056 DECLARE_VERIFIER(AllocationSiteInfo)
7059 7057
7060 // Returns NULL if no AllocationSiteInfo is available for object. 7058 // Returns NULL if no AllocationSiteInfo is available for object.
7061 static AllocationSiteInfo* FindForJSObject(JSObject* object); 7059 static AllocationSiteInfo* FindForJSObject(JSObject* object);
7062 7060
7063 static AllocationSiteMode GetMode(ElementsKind boilerplate_elements_kind); 7061 static AllocationSiteMode GetMode(ElementsKind boilerplate_elements_kind);
7064 static AllocationSiteMode GetMode(ElementsKind from, ElementsKind to); 7062 static AllocationSiteMode GetMode(ElementsKind from, ElementsKind to);
7065 7063
7066 static const int kPayloadOffset = HeapObject::kHeaderSize; 7064 static const int kPayloadOffset = HeapObject::kHeaderSize;
7067 static const int kSize = kPayloadOffset + kPointerSize; 7065 static const int kSize = kPayloadOffset + kPointerSize;
7066 static const uint32_t kMaximumArrayBytesToPretransition = 8 * 1024;
7068 7067
7069 bool GetElementsKindPayload(ElementsKind* kind); 7068 bool GetElementsKindPayload(ElementsKind* kind);
7070 private: 7069 private:
7071 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSiteInfo); 7070 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSiteInfo);
7072 }; 7071 };
7073 7072
7074 7073
7075 // Representation of a slow alias as part of a non-strict arguments objects. 7074 // Representation of a slow alias as part of a non-strict arguments objects.
7076 // For fast aliases (if HasNonStrictArgumentsElements()): 7075 // For fast aliases (if HasNonStrictArgumentsElements()):
7077 // - the parameter map contains an index into the context 7076 // - the parameter map contains an index into the context
(...skipping 1268 matching lines...) Expand 10 before | Expand all | Expand 10 after
8346 // Overload the length setter to skip write barrier when the length 8345 // Overload the length setter to skip write barrier when the length
8347 // is set to a smi. This matches the set function on FixedArray. 8346 // is set to a smi. This matches the set function on FixedArray.
8348 inline void set_length(Smi* length); 8347 inline void set_length(Smi* length);
8349 8348
8350 MUST_USE_RESULT MaybeObject* JSArrayUpdateLengthFromIndex(uint32_t index, 8349 MUST_USE_RESULT MaybeObject* JSArrayUpdateLengthFromIndex(uint32_t index,
8351 Object* value); 8350 Object* value);
8352 8351
8353 // Initialize the array with the given capacity. The function may 8352 // Initialize the array with the given capacity. The function may
8354 // fail due to out-of-memory situations, but only if the requested 8353 // fail due to out-of-memory situations, but only if the requested
8355 // capacity is non-zero. 8354 // capacity is non-zero.
8356 MUST_USE_RESULT MaybeObject* Initialize(int capacity); 8355 MUST_USE_RESULT MaybeObject* Initialize(int capacity, int length = 0);
8357 8356
8358 // Initializes the array to a certain length. 8357 // Initializes the array to a certain length.
8359 inline bool AllowsSetElementsLength(); 8358 inline bool AllowsSetElementsLength();
8360 // Can cause GC. 8359 // Can cause GC.
8361 MUST_USE_RESULT MaybeObject* SetElementsLength(Object* length); 8360 MUST_USE_RESULT MaybeObject* SetElementsLength(Object* length);
8362 8361
8363 // Set the content of the array to the content of storage. 8362 // Set the content of the array to the content of storage.
8364 MUST_USE_RESULT inline MaybeObject* SetContent(FixedArrayBase* storage); 8363 MUST_USE_RESULT inline MaybeObject* SetContent(FixedArrayBase* storage);
8365 8364
8366 // Casting. 8365 // Casting.
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after
9024 } else { 9023 } else {
9025 value &= ~(1 << bit_position); 9024 value &= ~(1 << bit_position);
9026 } 9025 }
9027 return value; 9026 return value;
9028 } 9027 }
9029 }; 9028 };
9030 9029
9031 } } // namespace v8::internal 9030 } } // namespace v8::internal
9032 9031
9033 #endif // V8_OBJECTS_H_ 9032 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/isolate.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698