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

Side by Side Diff: runtime/vm/stack_frame.h

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 years, 5 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
« no previous file with comments | « runtime/vm/source_report_test.cc ('k') | runtime/vm/stack_frame.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 (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef RUNTIME_VM_STACK_FRAME_H_ 5 #ifndef RUNTIME_VM_STACK_FRAME_H_
6 #define RUNTIME_VM_STACK_FRAME_H_ 6 #define RUNTIME_VM_STACK_FRAME_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/object.h" 9 #include "vm/object.h"
10 #include "vm/stub_code.h" 10 #include "vm/stub_code.h"
(...skipping 11 matching lines...) Expand all
22 #else 22 #else
23 #error Unknown architecture. 23 #error Unknown architecture.
24 #endif 24 #endif
25 25
26 namespace dart { 26 namespace dart {
27 27
28 // Forward declarations. 28 // Forward declarations.
29 class ObjectPointerVisitor; 29 class ObjectPointerVisitor;
30 class RawContext; 30 class RawContext;
31 31
32
33 // Generic stack frame. 32 // Generic stack frame.
34 class StackFrame : public ValueObject { 33 class StackFrame : public ValueObject {
35 public: 34 public:
36 virtual ~StackFrame() {} 35 virtual ~StackFrame() {}
37 36
38 // Accessors to get the pc, sp and fp of a frame. 37 // Accessors to get the pc, sp and fp of a frame.
39 uword sp() const { return sp_; } 38 uword sp() const { return sp_; }
40 uword fp() const { return fp_; } 39 uword fp() const { return fp_; }
41 uword pc() const { return pc_; } 40 uword pc() const { return pc_; }
42 41
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 Thread* thread_; 142 Thread* thread_;
144 143
145 // The iterators FrameSetIterator and StackFrameIterator set the private 144 // The iterators FrameSetIterator and StackFrameIterator set the private
146 // fields fp_ and sp_ when they return the respective frame objects. 145 // fields fp_ and sp_ when they return the respective frame objects.
147 friend class FrameSetIterator; 146 friend class FrameSetIterator;
148 friend class StackFrameIterator; 147 friend class StackFrameIterator;
149 friend class ProfilerDartStackWalker; 148 friend class ProfilerDartStackWalker;
150 DISALLOW_COPY_AND_ASSIGN(StackFrame); 149 DISALLOW_COPY_AND_ASSIGN(StackFrame);
151 }; 150 };
152 151
153
154 // Exit frame is used to mark the transition from dart code into dart VM 152 // Exit frame is used to mark the transition from dart code into dart VM
155 // runtime code. 153 // runtime code.
156 class ExitFrame : public StackFrame { 154 class ExitFrame : public StackFrame {
157 public: 155 public:
158 bool IsValid() const { return sp() == 0; } 156 bool IsValid() const { return sp() == 0; }
159 bool IsDartFrame(bool validate = true) const { return false; } 157 bool IsDartFrame(bool validate = true) const { return false; }
160 bool IsStubFrame() const { return false; } 158 bool IsStubFrame() const { return false; }
161 bool IsExitFrame() const { return true; } 159 bool IsExitFrame() const { return true; }
162 160
163 // Visit objects in the frame. 161 // Visit objects in the frame.
164 virtual void VisitObjectPointers(ObjectPointerVisitor* visitor); 162 virtual void VisitObjectPointers(ObjectPointerVisitor* visitor);
165 163
166 protected: 164 protected:
167 virtual const char* GetName() const { return "exit"; } 165 virtual const char* GetName() const { return "exit"; }
168 166
169 private: 167 private:
170 explicit ExitFrame(Thread* thread) : StackFrame(thread) {} 168 explicit ExitFrame(Thread* thread) : StackFrame(thread) {}
171 169
172 friend class StackFrameIterator; 170 friend class StackFrameIterator;
173 DISALLOW_COPY_AND_ASSIGN(ExitFrame); 171 DISALLOW_COPY_AND_ASSIGN(ExitFrame);
174 }; 172 };
175 173
176
177 // Entry Frame is used to mark the transition from dart VM runtime code into 174 // Entry Frame is used to mark the transition from dart VM runtime code into
178 // dart code. 175 // dart code.
179 class EntryFrame : public StackFrame { 176 class EntryFrame : public StackFrame {
180 public: 177 public:
181 bool IsValid() const { return StubCode::InInvocationStub(pc()); } 178 bool IsValid() const { return StubCode::InInvocationStub(pc()); }
182 bool IsDartFrame(bool validate = true) const { return false; } 179 bool IsDartFrame(bool validate = true) const { return false; }
183 bool IsStubFrame() const { return false; } 180 bool IsStubFrame() const { return false; }
184 bool IsEntryFrame() const { return true; } 181 bool IsEntryFrame() const { return true; }
185 182
186 // Visit objects in the frame. 183 // Visit objects in the frame.
187 virtual void VisitObjectPointers(ObjectPointerVisitor* visitor); 184 virtual void VisitObjectPointers(ObjectPointerVisitor* visitor);
188 185
189 protected: 186 protected:
190 virtual const char* GetName() const { return "entry"; } 187 virtual const char* GetName() const { return "entry"; }
191 188
192 private: 189 private:
193 explicit EntryFrame(Thread* thread) : StackFrame(thread) {} 190 explicit EntryFrame(Thread* thread) : StackFrame(thread) {}
194 191
195 friend class StackFrameIterator; 192 friend class StackFrameIterator;
196 DISALLOW_COPY_AND_ASSIGN(EntryFrame); 193 DISALLOW_COPY_AND_ASSIGN(EntryFrame);
197 }; 194 };
198 195
199
200 // A StackFrameIterator can be initialized with a thread other than the 196 // A StackFrameIterator can be initialized with a thread other than the
201 // current thread. Because this is generally a bad idea, it is only allowed on 197 // current thread. Because this is generally a bad idea, it is only allowed on
202 // Windows- where it is needed for the profiler. It is the responsibility of 198 // Windows- where it is needed for the profiler. It is the responsibility of
203 // users of StackFrameIterator to ensure that the thread given is not running 199 // users of StackFrameIterator to ensure that the thread given is not running
204 // concurrently. 200 // concurrently.
205 class StackFrameIterator : public ValueObject { 201 class StackFrameIterator : public ValueObject {
206 public: 202 public:
207 enum ValidationPolicy { 203 enum ValidationPolicy {
208 kValidateFrames = 0, 204 kValidateFrames = 0,
209 kDontValidateFrames = 1, 205 kDontValidateFrames = 1,
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 EntryFrame entry_; // Singleton entry frame returned by NextEntryFrame(). 288 EntryFrame entry_; // Singleton entry frame returned by NextEntryFrame().
293 ExitFrame exit_; // Singleton exit frame returned by NextExitFrame(). 289 ExitFrame exit_; // Singleton exit frame returned by NextExitFrame().
294 FrameSetIterator frames_; 290 FrameSetIterator frames_;
295 StackFrame* current_frame_; // Points to the current frame in the iterator. 291 StackFrame* current_frame_; // Points to the current frame in the iterator.
296 Thread* thread_; 292 Thread* thread_;
297 293
298 friend class ProfilerDartStackWalker; 294 friend class ProfilerDartStackWalker;
299 DISALLOW_COPY_AND_ASSIGN(StackFrameIterator); 295 DISALLOW_COPY_AND_ASSIGN(StackFrameIterator);
300 }; 296 };
301 297
302
303 // Iterator for iterating over all dart frames (skips over exit frames, 298 // Iterator for iterating over all dart frames (skips over exit frames,
304 // entry frames and stub frames). 299 // entry frames and stub frames).
305 // A DartFrameIterator can be initialized with an isolate other than the 300 // A DartFrameIterator can be initialized with an isolate other than the
306 // current thread's isolate. Because this is generally a bad idea, 301 // current thread's isolate. Because this is generally a bad idea,
307 // it is only allowed on Windows- where it is needed for the profiler. 302 // it is only allowed on Windows- where it is needed for the profiler.
308 // It is the responsibility of users of DartFrameIterator to ensure that the 303 // It is the responsibility of users of DartFrameIterator to ensure that the
309 // isolate given is not running concurrently on another thread. 304 // isolate given is not running concurrently on another thread.
310 class DartFrameIterator : public ValueObject { 305 class DartFrameIterator : public ValueObject {
311 public: 306 public:
312 explicit DartFrameIterator( 307 explicit DartFrameIterator(
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 } 341 }
347 return frame; 342 return frame;
348 } 343 }
349 344
350 private: 345 private:
351 StackFrameIterator frames_; 346 StackFrameIterator frames_;
352 347
353 DISALLOW_COPY_AND_ASSIGN(DartFrameIterator); 348 DISALLOW_COPY_AND_ASSIGN(DartFrameIterator);
354 }; 349 };
355 350
356
357 // Iterator for iterating over all inlined dart functions in an optimized 351 // Iterator for iterating over all inlined dart functions in an optimized
358 // dart frame (the iteration includes the function that is inlining the 352 // dart frame (the iteration includes the function that is inlining the
359 // other functions). 353 // other functions).
360 class InlinedFunctionsIterator : public ValueObject { 354 class InlinedFunctionsIterator : public ValueObject {
361 public: 355 public:
362 InlinedFunctionsIterator(const Code& code, uword pc); 356 InlinedFunctionsIterator(const Code& code, uword pc);
363 bool Done() const { return index_ == -1; } 357 bool Done() const { return index_ == -1; }
364 void Advance(); 358 void Advance();
365 359
366 RawFunction* function() const { 360 RawFunction* function() const {
(...skipping 22 matching lines...) Expand all
389 Code& code_; 383 Code& code_;
390 TypedData& deopt_info_; 384 TypedData& deopt_info_;
391 Function& function_; 385 Function& function_;
392 uword pc_; 386 uword pc_;
393 GrowableArray<DeoptInstr*> deopt_instructions_; 387 GrowableArray<DeoptInstr*> deopt_instructions_;
394 ObjectPool& object_table_; 388 ObjectPool& object_table_;
395 389
396 DISALLOW_COPY_AND_ASSIGN(InlinedFunctionsIterator); 390 DISALLOW_COPY_AND_ASSIGN(InlinedFunctionsIterator);
397 }; 391 };
398 392
399
400 #if defined(DEBUG) 393 #if defined(DEBUG)
401 void ValidateFrames(); 394 void ValidateFrames();
402 #endif 395 #endif
403 396
404
405 #if !defined(TARGET_ARCH_DBC) 397 #if !defined(TARGET_ARCH_DBC)
406 DART_FORCE_INLINE static intptr_t LocalVarIndex(intptr_t fp_offset, 398 DART_FORCE_INLINE static intptr_t LocalVarIndex(intptr_t fp_offset,
407 intptr_t var_index) { 399 intptr_t var_index) {
408 return fp_offset + var_index; 400 return fp_offset + var_index;
409 } 401 }
410 402
411
412 DART_FORCE_INLINE static uword ParamAddress(uword fp, intptr_t reverse_index) { 403 DART_FORCE_INLINE static uword ParamAddress(uword fp, intptr_t reverse_index) {
413 return fp + (kParamEndSlotFromFp * kWordSize) + (reverse_index * kWordSize); 404 return fp + (kParamEndSlotFromFp * kWordSize) + (reverse_index * kWordSize);
414 } 405 }
415 406
416
417 DART_FORCE_INLINE static bool IsCalleeFrameOf(uword fp, uword other_fp) { 407 DART_FORCE_INLINE static bool IsCalleeFrameOf(uword fp, uword other_fp) {
418 return other_fp < fp; 408 return other_fp < fp;
419 } 409 }
420 410
421 // Value for stack limit that is used to cause an interrupt. 411 // Value for stack limit that is used to cause an interrupt.
422 // Note that on DBC stack is growing upwards so interrupt limit is 0 unlike 412 // Note that on DBC stack is growing upwards so interrupt limit is 0 unlike
423 // on all other architectures. 413 // on all other architectures.
424 static const uword kInterruptStackLimit = ~static_cast<uword>(0); 414 static const uword kInterruptStackLimit = ~static_cast<uword>(0);
425 #endif 415 #endif
426 416
427
428 DART_FORCE_INLINE static uword LocalVarAddress(uword fp, intptr_t index) { 417 DART_FORCE_INLINE static uword LocalVarAddress(uword fp, intptr_t index) {
429 return fp + LocalVarIndex(0, index) * kWordSize; 418 return fp + LocalVarIndex(0, index) * kWordSize;
430 } 419 }
431 420
432
433 } // namespace dart 421 } // namespace dart
434 422
435 #endif // RUNTIME_VM_STACK_FRAME_H_ 423 #endif // RUNTIME_VM_STACK_FRAME_H_
OLDNEW
« no previous file with comments | « runtime/vm/source_report_test.cc ('k') | runtime/vm/stack_frame.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698