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

Side by Side Diff: src/objects.h

Issue 1488023002: Fix inobject slack tracking for both subclassing and non-subclassing cases. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Cleanup Created 5 years 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
« no previous file with comments | « src/mips64/builtins-mips64.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 // 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 9
10 #include "src/allocation.h" 10 #include "src/allocation.h"
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 // Define this so that we can put assertions on discrete checks. 770 // Define this so that we can put assertions on discrete checks.
771 NUM_OF_CALLABLE_SPEC_OBJECT_TYPES = 2 771 NUM_OF_CALLABLE_SPEC_OBJECT_TYPES = 2
772 }; 772 };
773 773
774 STATIC_ASSERT(JS_OBJECT_TYPE == Internals::kJSObjectType); 774 STATIC_ASSERT(JS_OBJECT_TYPE == Internals::kJSObjectType);
775 STATIC_ASSERT(FIRST_NONSTRING_TYPE == Internals::kFirstNonstringType); 775 STATIC_ASSERT(FIRST_NONSTRING_TYPE == Internals::kFirstNonstringType);
776 STATIC_ASSERT(ODDBALL_TYPE == Internals::kOddballType); 776 STATIC_ASSERT(ODDBALL_TYPE == Internals::kOddballType);
777 STATIC_ASSERT(FOREIGN_TYPE == Internals::kForeignType); 777 STATIC_ASSERT(FOREIGN_TYPE == Internals::kForeignType);
778 778
779 779
780 std::ostream& operator<<(std::ostream& os, InstanceType instance_type);
781
782
780 #define FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(V) \ 783 #define FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(V) \
781 V(FAST_ELEMENTS_SUB_TYPE) \ 784 V(FAST_ELEMENTS_SUB_TYPE) \
782 V(DICTIONARY_ELEMENTS_SUB_TYPE) \ 785 V(DICTIONARY_ELEMENTS_SUB_TYPE) \
783 V(FAST_PROPERTIES_SUB_TYPE) \ 786 V(FAST_PROPERTIES_SUB_TYPE) \
784 V(DICTIONARY_PROPERTIES_SUB_TYPE) \ 787 V(DICTIONARY_PROPERTIES_SUB_TYPE) \
785 V(MAP_CODE_CACHE_SUB_TYPE) \ 788 V(MAP_CODE_CACHE_SUB_TYPE) \
786 V(SCOPE_INFO_SUB_TYPE) \ 789 V(SCOPE_INFO_SUB_TYPE) \
787 V(STRING_TABLE_SUB_TYPE) \ 790 V(STRING_TABLE_SUB_TYPE) \
788 V(DESCRIPTOR_ARRAY_SUB_TYPE) \ 791 V(DESCRIPTOR_ARRAY_SUB_TYPE) \
789 V(TRANSITION_ARRAY_SUB_TYPE) 792 V(TRANSITION_ARRAY_SUB_TYPE)
(...skipping 4708 matching lines...) Expand 10 before | Expand all | Expand 10 after
5498 // Builtins::kJSConstructStubGeneric stub. 5501 // Builtins::kJSConstructStubGeneric stub.
5499 // This counter is used for in-object slack tracking and for map aging. 5502 // This counter is used for in-object slack tracking and for map aging.
5500 // The in-object slack tracking is considered enabled when the counter is 5503 // The in-object slack tracking is considered enabled when the counter is
5501 // in the range [kSlackTrackingCounterStart, kSlackTrackingCounterEnd]. 5504 // in the range [kSlackTrackingCounterStart, kSlackTrackingCounterEnd].
5502 class Counter : public BitField<int, 28, 4> {}; 5505 class Counter : public BitField<int, 28, 4> {};
5503 static const int kSlackTrackingCounterStart = 14; 5506 static const int kSlackTrackingCounterStart = 14;
5504 static const int kSlackTrackingCounterEnd = 8; 5507 static const int kSlackTrackingCounterEnd = 8;
5505 static const int kRetainingCounterStart = kSlackTrackingCounterEnd - 1; 5508 static const int kRetainingCounterStart = kSlackTrackingCounterEnd - 1;
5506 static const int kRetainingCounterEnd = 0; 5509 static const int kRetainingCounterEnd = 0;
5507 5510
5511 // Starts the tracking by initializing object constructions countdown counter.
5512 void StartInobjectSlackTracking();
5513
5514 inline bool IsInobjectSlackTrackingInProgress();
5515
5516 // Does the tracking step.
5517 inline void InobjectSlackTrackingStep();
5518
5508 // Completes inobject slack tracking for the transition tree starting at this 5519 // Completes inobject slack tracking for the transition tree starting at this
5509 // initial map. 5520 // initial map.
5510 void CompleteInobjectSlackTracking(); 5521 void CompleteInobjectSlackTracking();
5511 5522
5512 // Tells whether the object in the prototype property will be used 5523 // Tells whether the object in the prototype property will be used
5513 // for instances created from this function. If the prototype 5524 // for instances created from this function. If the prototype
5514 // property is set to a value that is not a JSObject, the prototype 5525 // property is set to a value that is not a JSObject, the prototype
5515 // property will not be used to create instances of the function. 5526 // property will not be used to create instances of the function.
5516 // See ECMA-262, 13.2.2. 5527 // See ECMA-262, 13.2.2.
5517 inline void set_non_instance_prototype(bool value); 5528 inline void set_non_instance_prototype(bool value);
(...skipping 1726 matching lines...) Expand 10 before | Expand all | Expand 10 after
7244 // of every map. Existing objects will resize automatically (they are 7255 // of every map. Existing objects will resize automatically (they are
7245 // filled with one_pointer_filler_map). All further allocations will 7256 // filled with one_pointer_filler_map). All further allocations will
7246 // use the adjusted instance size. 7257 // use the adjusted instance size.
7247 // - SharedFunctionInfo's expected_nof_properties left unmodified since 7258 // - SharedFunctionInfo's expected_nof_properties left unmodified since
7248 // allocations made using different closures could actually create different 7259 // allocations made using different closures could actually create different
7249 // kind of objects (see prototype inheritance pattern). 7260 // kind of objects (see prototype inheritance pattern).
7250 // 7261 //
7251 // Important: inobject slack tracking is not attempted during the snapshot 7262 // Important: inobject slack tracking is not attempted during the snapshot
7252 // creation. 7263 // creation.
7253 7264
7254 // True if the initial_map is set and the object constructions countdown 7265 // True if the initial_map is set and the object constructions countdown
Michael Starzinger 2015/12/02 18:41:57 nit: This comment applied to the predicate, looks
Igor Sheludko 2015/12/03 08:53:14 Thanks! I updated and moved both this comment and
7255 // counter is not zero. 7266 // counter is not zero.
7256 static const int kGenerousAllocationCount = 7267 static const int kGenerousAllocationCount =
7257 Map::kSlackTrackingCounterStart - Map::kSlackTrackingCounterEnd + 1; 7268 Map::kSlackTrackingCounterStart - Map::kSlackTrackingCounterEnd + 1;
7258 inline bool IsInobjectSlackTrackingInProgress();
7259 7269
7260 // Starts the tracking. 7270 // Completes the tracking on initial map if it is active.
7261 // Initializes object constructions countdown counter in the initial map. 7271 inline void CompleteInobjectSlackTrackingIfActive();
7262 void StartInobjectSlackTracking();
7263
7264 // Completes the tracking.
7265 void CompleteInobjectSlackTracking();
7266 7272
7267 // [literals_or_bindings]: Fixed array holding either 7273 // [literals_or_bindings]: Fixed array holding either
7268 // the materialized literals or the bindings of a bound function. 7274 // the materialized literals or the bindings of a bound function.
7269 // 7275 //
7270 // If the function contains object, regexp or array literals, the 7276 // If the function contains object, regexp or array literals, the
7271 // literals array prefix contains the object, regexp, and array 7277 // literals array prefix contains the object, regexp, and array
7272 // function to be used when creating these literals. This is 7278 // function to be used when creating these literals. This is
7273 // necessary so that we do not dynamically lookup the object, regexp 7279 // necessary so that we do not dynamically lookup the object, regexp
7274 // or array functions. Performing a dynamic lookup, we might end up 7280 // or array functions. Performing a dynamic lookup, we might end up
7275 // using the functions from a new context that we should not have 7281 // using the functions from a new context that we should not have
(...skipping 3434 matching lines...) Expand 10 before | Expand all | Expand 10 after
10710 } 10716 }
10711 return value; 10717 return value;
10712 } 10718 }
10713 }; 10719 };
10714 10720
10715 10721
10716 } // NOLINT, false-positive due to second-order macros. 10722 } // NOLINT, false-positive due to second-order macros.
10717 } // NOLINT, false-positive due to second-order macros. 10723 } // NOLINT, false-positive due to second-order macros.
10718 10724
10719 #endif // V8_OBJECTS_H_ 10725 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/mips64/builtins-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698