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/Allocator.h" |
10 #include "wtf/Assertions.h" | 10 #include "wtf/Assertions.h" |
(...skipping 24 matching lines...) Loading... | |
35 static void disableStackLimit() | 35 static void disableStackLimit() |
36 { | 36 { |
37 s_stackFrameLimit = 0; | 37 s_stackFrameLimit = 0; |
38 #if ENABLE(ASSERT) | 38 #if ENABLE(ASSERT) |
39 s_isEnabled = false; | 39 s_isEnabled = false; |
40 #endif | 40 #endif |
41 } | 41 } |
42 | 42 |
43 #if ENABLE(ASSERT) | 43 #if ENABLE(ASSERT) |
44 inline static bool isEnabled() { return s_isEnabled; } | 44 inline static bool isEnabled() { return s_isEnabled; } |
45 inline static bool isAcceptableStackUse() | |
46 { | |
47 // ASan adds extra stack usage leading to too noisy asserts. | |
48 #if defined(ADDRESS_SANITIZER) | |
49 return true; | |
50 #else | |
51 // If a conservative fallback stack size is in effect, use | |
52 // a larger stack limit so as to avoid false positives. | |
53 return !s_isEnabled || isSafeToRecurse() || (s_isUsingFallbackStackSize && (s_stackFrameLimit - currentStackFrame()) < 3 * kSafeStackFrameSize); | |
haraken
2016/02/04 01:31:36
Nit: Slightly clearer:
if (s_isUsingFallbackStack
sof
2016/02/04 09:54:32
Done.
| |
54 #endif | |
55 } | |
45 #endif | 56 #endif |
46 | 57 |
47 static size_t getUnderestimatedStackSize(); | 58 static size_t getUnderestimatedStackSize(); |
48 static void* getStackStart(); | 59 static void* getStackStart(); |
49 | 60 |
50 #if COMPILER(MSVC) | 61 #if COMPILER(MSVC) |
51 // Ignore C4172: returning address of local variable or temporary: dummy. This | 62 // Ignore C4172: returning address of local variable or temporary: dummy. This |
52 // warning suppression has to go outside of the function to take effect. | 63 // warning suppression has to go outside of the function to take effect. |
53 #pragma warning(push) | 64 #pragma warning(push) |
54 #pragma warning(disable: 4172) | 65 #pragma warning(disable: 4172) |
(...skipping 14 matching lines...) Loading... | |
69 #endif | 80 #endif |
70 | 81 |
71 private: | 82 private: |
72 // The maximum depth of eager, unrolled trace() calls that is | 83 // The maximum depth of eager, unrolled trace() calls that is |
73 // considered safe and allowed. | 84 // considered safe and allowed. |
74 static const int kSafeStackFrameSize = 32 * 1024; | 85 static const int kSafeStackFrameSize = 32 * 1024; |
75 | 86 |
76 static uintptr_t s_stackFrameLimit; | 87 static uintptr_t s_stackFrameLimit; |
77 #if ENABLE(ASSERT) | 88 #if ENABLE(ASSERT) |
78 static bool s_isEnabled; | 89 static bool s_isEnabled; |
90 static bool s_isUsingFallbackStackSize; | |
79 #endif | 91 #endif |
80 }; | 92 }; |
81 | 93 |
82 class StackFrameDepthScope { | 94 class StackFrameDepthScope { |
83 STACK_ALLOCATED(); | 95 STACK_ALLOCATED(); |
84 WTF_MAKE_NONCOPYABLE(StackFrameDepthScope); | 96 WTF_MAKE_NONCOPYABLE(StackFrameDepthScope); |
85 public: | 97 public: |
86 StackFrameDepthScope() | 98 StackFrameDepthScope() |
87 { | 99 { |
88 StackFrameDepth::enableStackLimit(); | 100 StackFrameDepth::enableStackLimit(); |
89 ASSERT(StackFrameDepth::isSafeToRecurse()); | 101 ASSERT(StackFrameDepth::isSafeToRecurse()); |
90 } | 102 } |
91 | 103 |
92 ~StackFrameDepthScope() | 104 ~StackFrameDepthScope() |
93 { | 105 { |
94 StackFrameDepth::disableStackLimit(); | 106 StackFrameDepth::disableStackLimit(); |
95 } | 107 } |
96 }; | 108 }; |
97 | 109 |
98 } // namespace blink | 110 } // namespace blink |
99 | 111 |
100 #endif // StackFrameDepth_h | 112 #endif // StackFrameDepth_h |
OLD | NEW |