| OLD | NEW | 
|---|
| 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 176 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 187 }; | 187 }; | 
| 188 | 188 | 
| 189 | 189 | 
| 190 // Indicates whether we are only interested in the descriptors of a particular | 190 // Indicates whether we are only interested in the descriptors of a particular | 
| 191 // map, or in all descriptors in the descriptor array. | 191 // map, or in all descriptors in the descriptor array. | 
| 192 enum DescriptorFlag { | 192 enum DescriptorFlag { | 
| 193   ALL_DESCRIPTORS, | 193   ALL_DESCRIPTORS, | 
| 194   OWN_DESCRIPTORS | 194   OWN_DESCRIPTORS | 
| 195 }; | 195 }; | 
| 196 | 196 | 
|  | 197 // The GC maintains a bit of information, the MarkingParity, which toggles | 
|  | 198 // from odd to even and back every time marking is completed. Incremental | 
|  | 199 // marking can visit an object twice during a marking phase, so algorithms that | 
|  | 200 // that piggy-back on marking can use the parity to ensure that they only | 
|  | 201 // perform an operation on an object once per marking phase: they record the | 
|  | 202 // MarkingParity when they visit an object, and only re-visit the object when it | 
|  | 203 // is marked again and the MarkingParity changes. | 
|  | 204 enum MarkingParity { | 
|  | 205   NO_MARKING_PARITY, | 
|  | 206   ODD_MARKING_PARITY, | 
|  | 207   EVEN_MARKING_PARITY | 
|  | 208 }; | 
| 197 | 209 | 
| 198 // Instance size sentinel for objects of variable size. | 210 // Instance size sentinel for objects of variable size. | 
| 199 const int kVariableSizeSentinel = 0; | 211 const int kVariableSizeSentinel = 0; | 
| 200 | 212 | 
| 201 const int kStubMajorKeyBits = 6; | 213 const int kStubMajorKeyBits = 6; | 
| 202 const int kStubMinorKeyBits = kBitsPerInt - kSmiTagSize - kStubMajorKeyBits; | 214 const int kStubMinorKeyBits = kBitsPerInt - kSmiTagSize - kStubMajorKeyBits; | 
| 203 | 215 | 
| 204 // All Maps have a field instance_type containing a InstanceType. | 216 // All Maps have a field instance_type containing a InstanceType. | 
| 205 // It describes the type of the instances. | 217 // It describes the type of the instances. | 
| 206 // | 218 // | 
| (...skipping 4308 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4515   inline void CodePrint() { | 4527   inline void CodePrint() { | 
| 4516     CodePrint(stdout); | 4528     CodePrint(stdout); | 
| 4517   } | 4529   } | 
| 4518   void CodePrint(FILE* out); | 4530   void CodePrint(FILE* out); | 
| 4519 #endif | 4531 #endif | 
| 4520   DECLARE_VERIFIER(Code) | 4532   DECLARE_VERIFIER(Code) | 
| 4521 | 4533 | 
| 4522   void ClearInlineCaches(); | 4534   void ClearInlineCaches(); | 
| 4523   void ClearTypeFeedbackCells(Heap* heap); | 4535   void ClearTypeFeedbackCells(Heap* heap); | 
| 4524 | 4536 | 
|  | 4537 #define DECLARE_CODE_AGE_ENUM(X) k##X##CodeAge, | 
|  | 4538   enum Age { | 
|  | 4539     kNoAge = 0, | 
|  | 4540     CODE_AGE_LIST(DECLARE_CODE_AGE_ENUM) | 
|  | 4541     kAfterLastCodeAge, | 
|  | 4542     kLastCodeAge = kAfterLastCodeAge - 1, | 
|  | 4543     kCodeAgeCount = kAfterLastCodeAge - 1 | 
|  | 4544   }; | 
|  | 4545 #undef DECLARE_CODE_AGE_ENUM | 
|  | 4546 | 
|  | 4547   // Code aging | 
|  | 4548   static void MakeCodeAgeSequenceYoung(byte* sequence); | 
|  | 4549   void MakeYoung(); | 
|  | 4550   void MakeOlder(MarkingParity); | 
|  | 4551   static bool IsYoungSequence(byte* sequence); | 
|  | 4552   bool IsOld(); | 
|  | 4553 | 
| 4525   // Max loop nesting marker used to postpose OSR. We don't take loop | 4554   // Max loop nesting marker used to postpose OSR. We don't take loop | 
| 4526   // nesting that is deeper than 5 levels into account. | 4555   // nesting that is deeper than 5 levels into account. | 
| 4527   static const int kMaxLoopNestingMarker = 6; | 4556   static const int kMaxLoopNestingMarker = 6; | 
| 4528 | 4557 | 
| 4529   // Layout description. | 4558   // Layout description. | 
| 4530   static const int kInstructionSizeOffset = HeapObject::kHeaderSize; | 4559   static const int kInstructionSizeOffset = HeapObject::kHeaderSize; | 
| 4531   static const int kRelocationInfoOffset = kInstructionSizeOffset + kIntSize; | 4560   static const int kRelocationInfoOffset = kInstructionSizeOffset + kIntSize; | 
| 4532   static const int kHandlerTableOffset = kRelocationInfoOffset + kPointerSize; | 4561   static const int kHandlerTableOffset = kRelocationInfoOffset + kPointerSize; | 
| 4533   static const int kDeoptimizationDataOffset = | 4562   static const int kDeoptimizationDataOffset = | 
| 4534       kHandlerTableOffset + kPointerSize; | 4563       kHandlerTableOffset + kPointerSize; | 
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4643 | 4672 | 
| 4644   // Signed field cannot be encoded using the BitField class. | 4673   // Signed field cannot be encoded using the BitField class. | 
| 4645   static const int kArgumentsCountShift = 14; | 4674   static const int kArgumentsCountShift = 14; | 
| 4646   static const int kArgumentsCountMask = ~((1 << kArgumentsCountShift) - 1); | 4675   static const int kArgumentsCountMask = ~((1 << kArgumentsCountShift) - 1); | 
| 4647 | 4676 | 
| 4648   // This constant should be encodable in an ARM instruction. | 4677   // This constant should be encodable in an ARM instruction. | 
| 4649   static const int kFlagsNotUsedInLookup = | 4678   static const int kFlagsNotUsedInLookup = | 
| 4650       TypeField::kMask | CacheHolderField::kMask; | 4679       TypeField::kMask | CacheHolderField::kMask; | 
| 4651 | 4680 | 
| 4652  private: | 4681  private: | 
|  | 4682   friend class RelocIterator; | 
|  | 4683 | 
|  | 4684   // Code aging | 
|  | 4685   byte* FindCodeAgeSequence(); | 
|  | 4686   static void  GetCodeAgeAndParity(Code* code, Age* age, | 
|  | 4687                                    MarkingParity* parity); | 
|  | 4688   static void GetCodeAgeAndParity(byte* sequence, Age* age, | 
|  | 4689                                   MarkingParity* parity); | 
|  | 4690   static Code* GetCodeAgeStub(Age age, MarkingParity parity); | 
|  | 4691 | 
|  | 4692   // Code aging -- platform-specific | 
|  | 4693   byte* FindPlatformCodeAgeSequence(); | 
|  | 4694   static void PatchPlatformCodeAge(byte* sequence, Age age, | 
|  | 4695                                    MarkingParity parity); | 
|  | 4696 | 
| 4653   DISALLOW_IMPLICIT_CONSTRUCTORS(Code); | 4697   DISALLOW_IMPLICIT_CONSTRUCTORS(Code); | 
| 4654 }; | 4698 }; | 
| 4655 | 4699 | 
| 4656 | 4700 | 
| 4657 // All heap objects have a Map that describes their structure. | 4701 // All heap objects have a Map that describes their structure. | 
| 4658 //  A Map contains information about: | 4702 //  A Map contains information about: | 
| 4659 //  - Size information about the object | 4703 //  - Size information about the object | 
| 4660 //  - How to iterate over an object (for garbage collection) | 4704 //  - How to iterate over an object (for garbage collection) | 
| 4661 class Map: public HeapObject { | 4705 class Map: public HeapObject { | 
| 4662  public: | 4706  public: | 
| (...skipping 4227 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 8890 | 8934 | 
| 8891   // Visits the resource of an ASCII or two-byte string. | 8935   // Visits the resource of an ASCII or two-byte string. | 
| 8892   virtual void VisitExternalAsciiString( | 8936   virtual void VisitExternalAsciiString( | 
| 8893       v8::String::ExternalAsciiStringResource** resource) {} | 8937       v8::String::ExternalAsciiStringResource** resource) {} | 
| 8894   virtual void VisitExternalTwoByteString( | 8938   virtual void VisitExternalTwoByteString( | 
| 8895       v8::String::ExternalStringResource** resource) {} | 8939       v8::String::ExternalStringResource** resource) {} | 
| 8896 | 8940 | 
| 8897   // Visits a debug call target in the instruction stream. | 8941   // Visits a debug call target in the instruction stream. | 
| 8898   virtual void VisitDebugTarget(RelocInfo* rinfo); | 8942   virtual void VisitDebugTarget(RelocInfo* rinfo); | 
| 8899 | 8943 | 
|  | 8944   // Visits the byte sequence in a function's prologue that contains information | 
|  | 8945   // about the code's age. | 
|  | 8946   virtual void VisitCodeAgeSequence(RelocInfo* rinfo); | 
|  | 8947 | 
| 8900   // Handy shorthand for visiting a single pointer. | 8948   // Handy shorthand for visiting a single pointer. | 
| 8901   virtual void VisitPointer(Object** p) { VisitPointers(p, p + 1); } | 8949   virtual void VisitPointer(Object** p) { VisitPointers(p, p + 1); } | 
| 8902 | 8950 | 
| 8903   // Visit pointer embedded into a code object. | 8951   // Visit pointer embedded into a code object. | 
| 8904   virtual void VisitEmbeddedPointer(RelocInfo* rinfo); | 8952   virtual void VisitEmbeddedPointer(RelocInfo* rinfo); | 
| 8905 | 8953 | 
| 8906   // Visits a contiguous arrays of external references (references to the C++ | 8954   // Visits a contiguous arrays of external references (references to the C++ | 
| 8907   // heap) in the half-open range [start, end). Any or all of the values | 8955   // heap) in the half-open range [start, end). Any or all of the values | 
| 8908   // may be modified on return. | 8956   // may be modified on return. | 
| 8909   virtual void VisitExternalReferences(Address* start, Address* end) {} | 8957   virtual void VisitExternalReferences(Address* start, Address* end) {} | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 8955     } else { | 9003     } else { | 
| 8956       value &= ~(1 << bit_position); | 9004       value &= ~(1 << bit_position); | 
| 8957     } | 9005     } | 
| 8958     return value; | 9006     return value; | 
| 8959   } | 9007   } | 
| 8960 }; | 9008 }; | 
| 8961 | 9009 | 
| 8962 } }  // namespace v8::internal | 9010 } }  // namespace v8::internal | 
| 8963 | 9011 | 
| 8964 #endif  // V8_OBJECTS_H_ | 9012 #endif  // V8_OBJECTS_H_ | 
| OLD | NEW | 
|---|