| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index bb9ecee0172d71b6348f4e90ed0ee3c7bc5e5850..c932aa3220de0ffd27b4f5805b58bafc79f05231 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -5665,12 +5665,18 @@ class Map: public HeapObject {
|
| class IsFrozen : public BitField<bool, 24, 1> {};
|
| class IsUnstable : public BitField<bool, 25, 1> {};
|
| class IsMigrationTarget : public BitField<bool, 26, 1> {};
|
| - class DoneInobjectSlackTracking : public BitField<bool, 27, 1> {};
|
| - // Bit 28 is free.
|
| + // Bit 27 is free.
|
|
|
| // Keep this bit field at the very end for better code in
|
| // Builtins::kJSConstructStubGeneric stub.
|
| - class ConstructionCount: public BitField<int, 29, 3> {};
|
| + // This counter is used for in-object slack tracking and for map aging.
|
| + // The in-object slack tracking is considered enabled when the counter is
|
| + // in the range [kSlackTrackingCounterStart, kSlackTrackingCounterEnd].
|
| + class Counter : public BitField<bool, 28, 4> {};
|
| + static const int kSlackTrackingCounterStart = 14;
|
| + static const int kSlackTrackingCounterEnd = 8;
|
| + static const int kRetainingCounterStart = kSlackTrackingCounterEnd - 1;
|
| + static const int kRetainingCounterEnd = 0;
|
|
|
| // Tells whether the object in the prototype property will be used
|
| // for instances created from this function. If the prototype
|
| @@ -6012,10 +6018,8 @@ class Map: public HeapObject {
|
| inline bool is_stable();
|
| inline void set_migration_target(bool value);
|
| inline bool is_migration_target();
|
| - inline void set_done_inobject_slack_tracking(bool value);
|
| - inline bool done_inobject_slack_tracking();
|
| - inline void set_construction_count(int value);
|
| - inline int construction_count();
|
| + inline void set_counter(int value);
|
| + inline int counter();
|
| inline void deprecate();
|
| inline bool is_deprecated();
|
| inline bool CanBeDeprecated();
|
| @@ -7366,13 +7370,12 @@ class JSFunction: public JSObject {
|
| // Here is the algorithm to reclaim the unused inobject space:
|
| // - Detect the first constructor call for this JSFunction.
|
| // When it happens enter the "in progress" state: initialize construction
|
| - // counter in the initial_map and set the |done_inobject_slack_tracking|
|
| - // flag.
|
| + // counter in the initial_map.
|
| // - While the tracking is in progress create objects filled with
|
| // one_pointer_filler_map instead of undefined_value. This way they can be
|
| // resized quickly and safely.
|
| - // - Once enough (kGenerousAllocationCount) objects have been created
|
| - // compute the 'slack' (traverse the map transition tree starting from the
|
| + // - Once enough objects have been created compute the 'slack'
|
| + // (traverse the map transition tree starting from the
|
| // initial_map and find the lowest value of unused_property_fields).
|
| // - Traverse the transition tree again and decrease the instance size
|
| // of every map. Existing objects will resize automatically (they are
|
| @@ -7385,23 +7388,17 @@ class JSFunction: public JSObject {
|
| // Important: inobject slack tracking is not attempted during the snapshot
|
| // creation.
|
|
|
| - static const int kGenerousAllocationCount = Map::ConstructionCount::kMax;
|
| - static const int kFinishSlackTracking = 1;
|
| - static const int kNoSlackTracking = 0;
|
| -
|
| // True if the initial_map is set and the object constructions countdown
|
| // counter is not zero.
|
| + static const int kGenerousAllocationCount =
|
| + Map::kSlackTrackingCounterStart - Map::kSlackTrackingCounterEnd + 1;
|
| inline bool IsInobjectSlackTrackingInProgress();
|
|
|
| // Starts the tracking.
|
| // Initializes object constructions countdown counter in the initial map.
|
| - // IsInobjectSlackTrackingInProgress is normally true after this call,
|
| - // except when tracking have not been started (e.g. the map has no unused
|
| - // properties or the snapshot is being built).
|
| void StartInobjectSlackTracking();
|
|
|
| // Completes the tracking.
|
| - // IsInobjectSlackTrackingInProgress is false after this call.
|
| void CompleteInobjectSlackTracking();
|
|
|
| // [literals_or_bindings]: Fixed array holding either
|
|
|