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

Side by Side Diff: src/objects.h

Issue 1441453002: Avoid manual object's body traversal in GC. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments + removed HeapObject::ContentType() Created 5 years, 1 month 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 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 1486 matching lines...) Expand 10 before | Expand all | Expand 10 after
1497 private: 1497 private:
1498 // HeapObject calls the private constructor and directly reads the value. 1498 // HeapObject calls the private constructor and directly reads the value.
1499 friend class HeapObject; 1499 friend class HeapObject;
1500 1500
1501 explicit MapWord(uintptr_t value) : value_(value) {} 1501 explicit MapWord(uintptr_t value) : value_(value) {}
1502 1502
1503 uintptr_t value_; 1503 uintptr_t value_;
1504 }; 1504 };
1505 1505
1506 1506
1507 // The content of an heap object (except for the map pointer). kTaggedValues
1508 // objects can contain both heap pointers and Smis, kMixedValues can contain
1509 // heap pointers, Smis, and raw values (e.g. doubles or strings), and kRawValues
1510 // objects can contain raw values and Smis.
1511 enum class HeapObjectContents { kTaggedValues, kMixedValues, kRawValues };
1512
1513
1514 // HeapObject is the superclass for all classes describing heap allocated 1507 // HeapObject is the superclass for all classes describing heap allocated
1515 // objects. 1508 // objects.
1516 class HeapObject: public Object { 1509 class HeapObject: public Object {
1517 public: 1510 public:
1518 // [map]: Contains a map which contains the object's reflective 1511 // [map]: Contains a map which contains the object's reflective
1519 // information. 1512 // information.
1520 inline Map* map() const; 1513 inline Map* map() const;
1521 inline void set_map(Map* value); 1514 inline void set_map(Map* value);
1522 // The no-write-barrier version. This is OK if the object is white and in 1515 // The no-write-barrier version. This is OK if the object is white and in
1523 // new space, or if the value is an immortal immutable object, like the maps 1516 // new space, or if the value is an immortal immutable object, like the maps
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1580 ObjectVisitor* v); 1573 ObjectVisitor* v);
1581 1574
1582 // Returns true if the object contains a tagged value at given offset. 1575 // Returns true if the object contains a tagged value at given offset.
1583 // It is used for invalid slots filtering. If the offset points outside 1576 // It is used for invalid slots filtering. If the offset points outside
1584 // of the object or to the map word, the result is UNDEFINED (!!!). 1577 // of the object or to the map word, the result is UNDEFINED (!!!).
1585 bool IsValidSlot(int offset); 1578 bool IsValidSlot(int offset);
1586 1579
1587 // Returns the heap object's size in bytes 1580 // Returns the heap object's size in bytes
1588 inline int Size(); 1581 inline int Size();
1589 1582
1590 // Indicates what type of values this heap object may contain.
1591 inline HeapObjectContents ContentType();
1592
1593 // Given a heap object's map pointer, returns the heap size in bytes 1583 // Given a heap object's map pointer, returns the heap size in bytes
1594 // Useful when the map pointer field is used for other purposes. 1584 // Useful when the map pointer field is used for other purposes.
1595 // GC internal. 1585 // GC internal.
1596 inline int SizeFromMap(Map* map); 1586 inline int SizeFromMap(Map* map);
1597 1587
1598 // Returns the field at offset in obj, as a read/write Object* reference. 1588 // Returns the field at offset in obj, as a read/write Object* reference.
1599 // Does no checking, and is safe to use during GC, while maps are invalid. 1589 // Does no checking, and is safe to use during GC, while maps are invalid.
1600 // Does not invoke write barrier, so should only be assigned to 1590 // Does not invoke write barrier, so should only be assigned to
1601 // during marking GC. 1591 // during marking GC.
1602 static inline Object** RawField(HeapObject* obj, int offset); 1592 static inline Object** RawField(HeapObject* obj, int offset);
(...skipping 9105 matching lines...) Expand 10 before | Expand all | Expand 10 after
10708 } 10698 }
10709 return value; 10699 return value;
10710 } 10700 }
10711 }; 10701 };
10712 10702
10713 10703
10714 } // NOLINT, false-positive due to second-order macros. 10704 } // NOLINT, false-positive due to second-order macros.
10715 } // NOLINT, false-positive due to second-order macros. 10705 } // NOLINT, false-positive due to second-order macros.
10716 10706
10717 #endif // V8_OBJECTS_H_ 10707 #endif // V8_OBJECTS_H_
OLDNEW
« src/heap/spaces.cc ('K') | « src/heap/store-buffer.cc ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698