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 1458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1469 // Given an address occupied by a live code object, return that object. | 1469 // Given an address occupied by a live code object, return that object. |
1470 Object* FindCodeObject(Address a); | 1470 Object* FindCodeObject(Address a); |
1471 | 1471 |
1472 enum HeapState { NOT_IN_GC, SCAVENGE, MARK_COMPACT }; | 1472 enum HeapState { NOT_IN_GC, SCAVENGE, MARK_COMPACT }; |
1473 inline HeapState gc_state() { return gc_state_; } | 1473 inline HeapState gc_state() { return gc_state_; } |
1474 | 1474 |
1475 inline bool IsInGCPostProcessing() { return gc_post_processing_depth_ > 0; } | 1475 inline bool IsInGCPostProcessing() { return gc_post_processing_depth_ > 0; } |
1476 | 1476 |
1477 #ifdef DEBUG | 1477 #ifdef DEBUG |
1478 bool IsAllocationAllowed() { return allocation_allowed_; } | 1478 bool IsAllocationAllowed() { return allocation_allowed_; } |
| 1479 inline void set_allow_allocation(bool allocation_allowed); |
1479 inline bool allow_allocation(bool enable); | 1480 inline bool allow_allocation(bool enable); |
1480 | 1481 |
1481 bool disallow_allocation_failure() { | 1482 bool disallow_allocation_failure() { |
1482 return disallow_allocation_failure_; | 1483 return disallow_allocation_failure_; |
1483 } | 1484 } |
1484 | 1485 |
1485 void TracePathToObjectFrom(Object* target, Object* root); | 1486 void TracePathToObjectFrom(Object* target, Object* root); |
1486 void TracePathToObject(Object* target); | 1487 void TracePathToObject(Object* target); |
1487 void TracePathToGlobal(); | 1488 void TracePathToGlobal(); |
1488 #endif | 1489 #endif |
(...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2684 }; | 2685 }; |
2685 | 2686 |
2686 | 2687 |
2687 // A helper class to document/test C++ scopes where we do not | 2688 // A helper class to document/test C++ scopes where we do not |
2688 // expect a GC. Usage: | 2689 // expect a GC. Usage: |
2689 // | 2690 // |
2690 // /* Allocation not allowed: we cannot handle a GC in this scope. */ | 2691 // /* Allocation not allowed: we cannot handle a GC in this scope. */ |
2691 // { AssertNoAllocation nogc; | 2692 // { AssertNoAllocation nogc; |
2692 // ... | 2693 // ... |
2693 // } | 2694 // } |
| 2695 |
| 2696 #ifdef DEBUG |
| 2697 inline bool EnterAllocationScope(Isolate* isolate, bool allow_allocation); |
| 2698 inline void ExitAllocationScope(Isolate* isolate, bool last_state); |
| 2699 #endif |
| 2700 |
| 2701 |
2694 class AssertNoAllocation { | 2702 class AssertNoAllocation { |
2695 public: | 2703 public: |
2696 inline AssertNoAllocation(); | 2704 inline AssertNoAllocation(); |
2697 inline ~AssertNoAllocation(); | 2705 inline ~AssertNoAllocation(); |
2698 | 2706 |
2699 #ifdef DEBUG | 2707 #ifdef DEBUG |
2700 private: | 2708 private: |
2701 bool old_state_; | 2709 bool last_state_; |
2702 bool active_; | |
2703 #endif | 2710 #endif |
2704 }; | 2711 }; |
2705 | 2712 |
2706 | 2713 |
2707 class DisableAssertNoAllocation { | 2714 class DisableAssertNoAllocation { |
2708 public: | 2715 public: |
2709 inline DisableAssertNoAllocation(); | 2716 inline DisableAssertNoAllocation(); |
2710 inline ~DisableAssertNoAllocation(); | 2717 inline ~DisableAssertNoAllocation(); |
2711 | 2718 |
2712 #ifdef DEBUG | 2719 #ifdef DEBUG |
2713 private: | 2720 private: |
2714 bool old_state_; | 2721 bool last_state_; |
2715 bool active_; | |
2716 #endif | 2722 #endif |
2717 }; | 2723 }; |
2718 | 2724 |
2719 // GCTracer collects and prints ONE line after each garbage collector | 2725 // GCTracer collects and prints ONE line after each garbage collector |
2720 // invocation IFF --trace_gc is used. | 2726 // invocation IFF --trace_gc is used. |
2721 | 2727 |
2722 class GCTracer BASE_EMBEDDED { | 2728 class GCTracer BASE_EMBEDDED { |
2723 public: | 2729 public: |
2724 class Scope BASE_EMBEDDED { | 2730 class Scope BASE_EMBEDDED { |
2725 public: | 2731 public: |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3062 AssertNoAllocation no_alloc; // i.e. no gc allowed. | 3068 AssertNoAllocation no_alloc; // i.e. no gc allowed. |
3063 | 3069 |
3064 private: | 3070 private: |
3065 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); | 3071 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); |
3066 }; | 3072 }; |
3067 #endif // DEBUG | 3073 #endif // DEBUG |
3068 | 3074 |
3069 } } // namespace v8::internal | 3075 } } // namespace v8::internal |
3070 | 3076 |
3071 #endif // V8_HEAP_H_ | 3077 #endif // V8_HEAP_H_ |
OLD | NEW |