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

Side by Side Diff: src/execution.h

Issue 1777883002: Add memory pressure interrupt for memory pressure notification Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 months 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
« include/v8.h ('K') | « src/api.cc ('k') | src/execution.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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_EXECUTION_H_ 5 #ifndef V8_EXECUTION_H_
6 #define V8_EXECUTION_H_ 6 #define V8_EXECUTION_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/base/atomicops.h" 9 #include "src/base/atomicops.h"
10 #include "src/handles.h" 10 #include "src/handles.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 char* RestoreStackGuard(char* from); 79 char* RestoreStackGuard(char* from);
80 static int ArchiveSpacePerThread() { return sizeof(ThreadLocal); } 80 static int ArchiveSpacePerThread() { return sizeof(ThreadLocal); }
81 void FreeThreadResources(); 81 void FreeThreadResources();
82 // Sets up the default stack guard for this thread if it has not 82 // Sets up the default stack guard for this thread if it has not
83 // already been set up. 83 // already been set up.
84 void InitThread(const ExecutionAccess& lock); 84 void InitThread(const ExecutionAccess& lock);
85 // Clears the stack guard for this thread so it does not look as if 85 // Clears the stack guard for this thread so it does not look as if
86 // it has been set up. 86 // it has been set up.
87 void ClearThread(const ExecutionAccess& lock); 87 void ClearThread(const ExecutionAccess& lock);
88 88
89 #define INTERRUPT_LIST(V) \ 89 #define INTERRUPT_LIST(V) \
90 V(DEBUGBREAK, DebugBreak, 0) \ 90 V(DEBUGBREAK, DebugBreak, 0) \
91 V(DEBUGCOMMAND, DebugCommand, 1) \ 91 V(DEBUGCOMMAND, DebugCommand, 1) \
92 V(TERMINATE_EXECUTION, TerminateExecution, 2) \ 92 V(TERMINATE_EXECUTION, TerminateExecution, 2) \
93 V(GC_REQUEST, GC, 3) \ 93 V(GC_REQUEST, GC, 3) \
94 V(INSTALL_CODE, InstallCode, 4) \ 94 V(INSTALL_CODE, InstallCode, 4) \
95 V(API_INTERRUPT, ApiInterrupt, 5) \ 95 V(API_INTERRUPT, ApiInterrupt, 5) \
96 V(DEOPT_MARKED_ALLOCATION_SITES, DeoptMarkedAllocationSites, 6) 96 V(DEOPT_MARKED_ALLOCATION_SITES, DeoptMarkedAllocationSites, 6) \
97 V(MEMORY_PRESSURE_INTERRUPT, MemoryPressureInterrupt, 7)
97 98
98 #define V(NAME, Name, id) \ 99 #define V(NAME, Name, id) \
99 inline bool Check##Name() { return CheckInterrupt(NAME); } \ 100 inline bool Check##Name() { return CheckInterrupt(NAME); } \
100 inline void Request##Name() { RequestInterrupt(NAME); } \ 101 inline void Request##Name() { RequestInterrupt(NAME); } \
101 inline void Clear##Name() { ClearInterrupt(NAME); } 102 inline void Clear##Name() { ClearInterrupt(NAME); }
102 INTERRUPT_LIST(V) 103 INTERRUPT_LIST(V)
103 #undef V 104 #undef V
104 105
105 // Flag used to set the interrupt causes. 106 // Flag used to set the interrupt causes.
106 enum InterruptFlag { 107 enum InterruptFlag {
(...skipping 21 matching lines...) Expand all
128 } 129 }
129 Address address_of_real_jslimit() { 130 Address address_of_real_jslimit() {
130 return reinterpret_cast<Address>(&thread_local_.real_jslimit_); 131 return reinterpret_cast<Address>(&thread_local_.real_jslimit_);
131 } 132 }
132 133
133 // If the stack guard is triggered, but it is not an actual 134 // If the stack guard is triggered, but it is not an actual
134 // stack overflow, then handle the interruption accordingly. 135 // stack overflow, then handle the interruption accordingly.
135 Object* HandleInterrupts(); 136 Object* HandleInterrupts();
136 void HandleGCInterrupt(); 137 void HandleGCInterrupt();
137 138
139 bool NeedMemoryPressureGC();
140 void MemoryPressureGCDone();
141
138 private: 142 private:
139 StackGuard(); 143 StackGuard();
140 144
141 bool CheckInterrupt(InterruptFlag flag); 145 bool CheckInterrupt(InterruptFlag flag);
142 void RequestInterrupt(InterruptFlag flag); 146 void RequestInterrupt(InterruptFlag flag);
143 void ClearInterrupt(InterruptFlag flag); 147 void ClearInterrupt(InterruptFlag flag);
144 bool CheckAndClearInterrupt(InterruptFlag flag); 148 bool CheckAndClearInterrupt(InterruptFlag flag);
145 149
146 // You should hold the ExecutionAccess lock when calling this method. 150 // You should hold the ExecutionAccess lock when calling this method.
147 bool has_pending_interrupts(const ExecutionAccess& lock) { 151 bool has_pending_interrupts(const ExecutionAccess& lock) {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 friend class StackLimitCheck; 229 friend class StackLimitCheck;
226 friend class PostponeInterruptsScope; 230 friend class PostponeInterruptsScope;
227 231
228 DISALLOW_COPY_AND_ASSIGN(StackGuard); 232 DISALLOW_COPY_AND_ASSIGN(StackGuard);
229 }; 233 };
230 234
231 } // namespace internal 235 } // namespace internal
232 } // namespace v8 236 } // namespace v8
233 237
234 #endif // V8_EXECUTION_H_ 238 #endif // V8_EXECUTION_H_
OLDNEW
« include/v8.h ('K') | « src/api.cc ('k') | src/execution.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698