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

Side by Side Diff: src/objects.h

Issue 10824042: Use linear backing store for hidden properties to save memory. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 4 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 | « no previous file | 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 // - JSBuiltinsObject 67 // - JSBuiltinsObject
68 // - JSGlobalProxy 68 // - JSGlobalProxy
69 // - JSValue 69 // - JSValue
70 // - JSDate 70 // - JSDate
71 // - JSMessageObject 71 // - JSMessageObject
72 // - JSProxy 72 // - JSProxy
73 // - JSFunctionProxy 73 // - JSFunctionProxy
74 // - FixedArrayBase 74 // - FixedArrayBase
75 // - ByteArray 75 // - ByteArray
76 // - FixedArray 76 // - FixedArray
77 // - HiddenPropertiesArray
77 // - DescriptorArray 78 // - DescriptorArray
78 // - HashTable 79 // - HashTable
79 // - Dictionary 80 // - Dictionary
80 // - SymbolTable 81 // - SymbolTable
81 // - CompilationCacheTable 82 // - CompilationCacheTable
82 // - CodeCacheHashTable 83 // - CodeCacheHashTable
83 // - MapCache 84 // - MapCache
84 // - Context 85 // - Context
85 // - JSFunctionResultCache 86 // - JSFunctionResultCache
86 // - ScopeInfo 87 // - ScopeInfo
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 V(ExternalFloatArray) \ 793 V(ExternalFloatArray) \
793 V(ExternalDoubleArray) \ 794 V(ExternalDoubleArray) \
794 V(ExternalPixelArray) \ 795 V(ExternalPixelArray) \
795 V(ByteArray) \ 796 V(ByteArray) \
796 V(FreeSpace) \ 797 V(FreeSpace) \
797 V(JSReceiver) \ 798 V(JSReceiver) \
798 V(JSObject) \ 799 V(JSObject) \
799 V(JSContextExtensionObject) \ 800 V(JSContextExtensionObject) \
800 V(JSModule) \ 801 V(JSModule) \
801 V(Map) \ 802 V(Map) \
803 V(HiddenPropertiesArray) \
802 V(DescriptorArray) \ 804 V(DescriptorArray) \
803 V(TransitionArray) \ 805 V(TransitionArray) \
804 V(DeoptimizationInputData) \ 806 V(DeoptimizationInputData) \
805 V(DeoptimizationOutputData) \ 807 V(DeoptimizationOutputData) \
806 V(TypeFeedbackCells) \ 808 V(TypeFeedbackCells) \
807 V(FixedArray) \ 809 V(FixedArray) \
808 V(FixedDoubleArray) \ 810 V(FixedDoubleArray) \
809 V(Context) \ 811 V(Context) \
810 V(GlobalContext) \ 812 V(GlobalContext) \
811 V(ModuleContext) \ 813 V(ModuleContext) \
(...skipping 1416 matching lines...) Expand 10 before | Expand all | Expand 10 after
2228 Object* getter, 2230 Object* getter,
2229 Object* setter, 2231 Object* setter,
2230 PropertyAttributes attributes); 2232 PropertyAttributes attributes);
2231 MUST_USE_RESULT MaybeObject* CreateAccessorPairFor(String* name); 2233 MUST_USE_RESULT MaybeObject* CreateAccessorPairFor(String* name);
2232 MUST_USE_RESULT MaybeObject* DefinePropertyAccessor( 2234 MUST_USE_RESULT MaybeObject* DefinePropertyAccessor(
2233 String* name, 2235 String* name,
2234 Object* getter, 2236 Object* getter,
2235 Object* setter, 2237 Object* setter,
2236 PropertyAttributes attributes); 2238 PropertyAttributes attributes);
2237 2239
2238 // Returns the hidden properties backing store object, currently 2240 // Returns the hidden properties backing store object stored on this object.
2239 // a StringDictionary, stored on this object.
2240 // If no hidden properties object has been put on this object, 2241 // If no hidden properties object has been put on this object,
2241 // return undefined, unless create_if_absent is true, in which case 2242 // return undefined, unless create_if_absent is true, in which case
2242 // a new dictionary is created, added to this object, and returned. 2243 // a new backing store is allocated, added to this object, and returned.
2243 MUST_USE_RESULT MaybeObject* GetHiddenPropertiesDictionary( 2244 MUST_USE_RESULT MaybeObject* GetHiddenPropertiesArray(
2244 bool create_if_absent); 2245 bool create_if_absent);
2245 // Updates the existing hidden properties dictionary. 2246 // Updates the existing hidden properties backing store.
2246 MUST_USE_RESULT MaybeObject* SetHiddenPropertiesDictionary( 2247 MUST_USE_RESULT MaybeObject* SetHiddenPropertiesArray(
2247 StringDictionary* dictionary); 2248 HiddenPropertiesArray* hidden_properties);
2248 2249
2249 DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject); 2250 DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject);
2250 }; 2251 };
2251 2252
2252 2253
2253 // Common superclass for FixedArrays that allow implementations to share 2254 // Common superclass for FixedArrays that allow implementations to share
2254 // common accessors and some code paths. 2255 // common accessors and some code paths.
2255 class FixedArrayBase: public HeapObject { 2256 class FixedArrayBase: public HeapObject {
2256 public: 2257 public:
2257 // [length]: length of the array. 2258 // [length]: length of the array.
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
2448 #endif 2449 #endif
2449 2450
2450 #ifdef DEBUG 2451 #ifdef DEBUG
2451 void FixedDoubleArrayVerify(); 2452 void FixedDoubleArrayVerify();
2452 #endif 2453 #endif
2453 2454
2454 private: 2455 private:
2455 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray); 2456 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray);
2456 }; 2457 };
2457 2458
2459 // HiddenPropertiesArray are fixed arrays used to store hidden properties.
2460 // Since we expect very few hidden properties, we use store the entries
2461 // linearly and use linear search for retrieval.
2462 class HiddenPropertiesArray: public FixedArray {
2463 public:
2464 // We allocate the backing store as FixedArray filled with holes.
2465 MUST_USE_RESULT static inline MaybeObject* Allocate();
2466
2467 // Set a hidden property. Return the current backing store afterwards
2468 // (the backing store may be re-allocated when extended).
2469 MUST_USE_RESULT inline MaybeObject* Set(String* key, Object* value);
2470
2471 // If the entry corresponding to the key is found, set the key of the entry
2472 // to the hole and the value to undefined. This way we can distinguish
2473 // deleted entries from end of the list when we do linear search.
2474 inline void Delete(String* key);
2475 inline Object* Get(String* key);
2476 static inline HiddenPropertiesArray* cast(Object* obj);
2477
2478 private:
2479 DISALLOW_IMPLICIT_CONSTRUCTORS(HiddenPropertiesArray);
2480 };
2481
2458 2482
2459 // DescriptorArrays are fixed arrays used to hold instance descriptors. 2483 // DescriptorArrays are fixed arrays used to hold instance descriptors.
2460 // The format of the these objects is: 2484 // The format of the these objects is:
2461 // TODO(1399): It should be possible to make room for bit_field3 in the map 2485 // TODO(1399): It should be possible to make room for bit_field3 in the map
2462 // without overloading the instance descriptors field in the map 2486 // without overloading the instance descriptors field in the map
2463 // (and storing it in the DescriptorArray when the map has one). 2487 // (and storing it in the DescriptorArray when the map has one).
2464 // [0]: storage for bit_field3 for Map owning this object (Smi) 2488 // [0]: storage for bit_field3 for Map owning this object (Smi)
2465 // [1]: point to a fixed array with (value, detail) pairs. 2489 // [1]: point to a fixed array with (value, detail) pairs.
2466 // [2]: next enumeration index (Smi), or pointer to small fixed array: 2490 // [2]: next enumeration index (Smi), or pointer to small fixed array:
2467 // [0]: next enumeration index (Smi) 2491 // [0]: next enumeration index (Smi)
(...skipping 6442 matching lines...) Expand 10 before | Expand all | Expand 10 after
8910 } else { 8934 } else {
8911 value &= ~(1 << bit_position); 8935 value &= ~(1 << bit_position);
8912 } 8936 }
8913 return value; 8937 return value;
8914 } 8938 }
8915 }; 8939 };
8916 8940
8917 } } // namespace v8::internal 8941 } } // namespace v8::internal
8918 8942
8919 #endif // V8_OBJECTS_H_ 8943 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « no previous file | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698