OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium 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 StackFrameDepth_h | 5 #ifndef StackFrameDepth_h |
6 #define StackFrameDepth_h | 6 #define StackFrameDepth_h |
7 | 7 |
8 #include "platform/PlatformExport.h" | 8 #include "platform/PlatformExport.h" |
| 9 #include "wtf/Allocator.h" |
9 #include "wtf/Assertions.h" | 10 #include "wtf/Assertions.h" |
10 #include <cstddef> | 11 #include <cstddef> |
11 #include <stdint.h> | 12 #include <stdint.h> |
12 | 13 |
13 namespace blink { | 14 namespace blink { |
14 | 15 |
15 // StackFrameDepth keeps track of current call stack frame depth. | 16 // StackFrameDepth keeps track of current call stack frame depth. |
16 // Use isSafeToRecurse() to query if there is a room in current | 17 // Use isSafeToRecurse() to query if there is a room in current |
17 // call stack for more recursive call. | 18 // call stack for more recursive call. |
18 class PLATFORM_EXPORT StackFrameDepth final { | 19 class PLATFORM_EXPORT StackFrameDepth final { |
| 20 STATIC_ONLY(StackFrameDepth); |
19 public: | 21 public: |
20 inline static bool isSafeToRecurse() | 22 inline static bool isSafeToRecurse() |
21 { | 23 { |
22 ASSERT(s_stackFrameLimit || !s_isEnabled); | 24 ASSERT(s_stackFrameLimit || !s_isEnabled); |
23 | 25 |
24 // Asssume that the stack grows towards lower addresses, which | 26 // Asssume that the stack grows towards lower addresses, which |
25 // all the ABIs currently supported do. | 27 // all the ABIs currently supported do. |
26 // | 28 // |
27 // A unit test checks that the assumption holds for a target | 29 // A unit test checks that the assumption holds for a target |
28 // (HeapTest.StackGrowthDirection.) | 30 // (HeapTest.StackGrowthDirection.) |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 // considered safe and allowed. | 73 // considered safe and allowed. |
72 static const int kSafeStackFrameSize = 32 * 1024; | 74 static const int kSafeStackFrameSize = 32 * 1024; |
73 | 75 |
74 static uintptr_t s_stackFrameLimit; | 76 static uintptr_t s_stackFrameLimit; |
75 #if ENABLE(ASSERT) | 77 #if ENABLE(ASSERT) |
76 static bool s_isEnabled; | 78 static bool s_isEnabled; |
77 #endif | 79 #endif |
78 }; | 80 }; |
79 | 81 |
80 class StackFrameDepthScope { | 82 class StackFrameDepthScope { |
| 83 STACK_ALLOCATED(); |
| 84 WTF_MAKE_NONCOPYABLE(StackFrameDepthScope); |
81 public: | 85 public: |
82 StackFrameDepthScope() | 86 StackFrameDepthScope() |
83 { | 87 { |
84 StackFrameDepth::enableStackLimit(); | 88 StackFrameDepth::enableStackLimit(); |
85 ASSERT(StackFrameDepth::isSafeToRecurse()); | 89 ASSERT(StackFrameDepth::isSafeToRecurse()); |
86 } | 90 } |
87 | 91 |
88 ~StackFrameDepthScope() | 92 ~StackFrameDepthScope() |
89 { | 93 { |
90 StackFrameDepth::disableStackLimit(); | 94 StackFrameDepth::disableStackLimit(); |
91 } | 95 } |
92 }; | 96 }; |
93 | 97 |
94 } // namespace blink | 98 } // namespace blink |
95 | 99 |
96 #endif // StackFrameDepth_h | 100 #endif // StackFrameDepth_h |
OLD | NEW |