Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 VM_STACK_FRAME_H_ | 5 #ifndef VM_STACK_FRAME_H_ |
| 6 #define VM_STACK_FRAME_H_ | 6 #define 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 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 175 // It is the responsibility of users of StackFrameIterator to ensure that the | 175 // It is the responsibility of users of StackFrameIterator to ensure that the |
| 176 // isolate given is not running concurrently on another thread. | 176 // isolate given is not running concurrently on another thread. |
| 177 class StackFrameIterator : public ValueObject { | 177 class StackFrameIterator : public ValueObject { |
| 178 public: | 178 public: |
| 179 static const bool kValidateFrames = true; | 179 static const bool kValidateFrames = true; |
| 180 static const bool kDontValidateFrames = false; | 180 static const bool kDontValidateFrames = false; |
| 181 | 181 |
| 182 // Iterators for iterating over all frames from the last ExitFrame to the | 182 // Iterators for iterating over all frames from the last ExitFrame to the |
| 183 // first EntryFrame. | 183 // first EntryFrame. |
| 184 explicit StackFrameIterator(bool validate, | 184 explicit StackFrameIterator(bool validate, |
| 185 Isolate* isolate = Isolate::Current()); | 185 Isolate* isolate = Isolate::Current(), |
| 186 Thread* thread = Thread::Current()); | |
|
siva
2015/10/20 21:06:14
The explicit should have been removed when the iso
| |
| 186 StackFrameIterator(uword last_fp, bool validate, | 187 StackFrameIterator(uword last_fp, bool validate, |
| 187 Isolate* isolate = Isolate::Current()); | 188 Isolate* isolate = Isolate::Current(), |
| 189 Thread* thread = Thread::Current()); | |
| 188 | 190 |
| 189 // Iterator for iterating over all frames from the current frame (given by its | 191 // Iterator for iterating over all frames from the current frame (given by its |
| 190 // fp, sp, and pc) to the first EntryFrame. | 192 // fp, sp, and pc) to the first EntryFrame. |
| 191 StackFrameIterator(uword fp, uword sp, uword pc, bool validate, | 193 StackFrameIterator(uword fp, uword sp, uword pc, bool validate, |
| 192 Isolate* isolate = Isolate::Current()); | 194 Isolate* isolate = Isolate::Current(), |
| 195 Thread* thread = Thread::Current()); | |
| 193 | 196 |
| 194 // Checks if a next frame exists. | 197 // Checks if a next frame exists. |
| 195 bool HasNextFrame() const { return frames_.fp_ != 0; } | 198 bool HasNextFrame() const { return frames_.fp_ != 0; } |
| 196 | 199 |
| 197 // Get next frame. | 200 // Get next frame. |
| 198 StackFrame* NextFrame(); | 201 StackFrame* NextFrame(); |
| 199 | 202 |
| 200 bool validate() const { return validate_; } | 203 bool validate() const { return validate_; } |
| 201 | 204 |
| 202 private: | 205 private: |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 244 // stack frames. | 247 // stack frames. |
| 245 void SetupLastExitFrameData(); | 248 void SetupLastExitFrameData(); |
| 246 void SetupNextExitFrameData(); | 249 void SetupNextExitFrameData(); |
| 247 | 250 |
| 248 bool validate_; // Validate each frame as we traverse the frames. | 251 bool validate_; // Validate each frame as we traverse the frames. |
| 249 EntryFrame entry_; // Singleton entry frame returned by NextEntryFrame(). | 252 EntryFrame entry_; // Singleton entry frame returned by NextEntryFrame(). |
| 250 ExitFrame exit_; // Singleton exit frame returned by NextExitFrame(). | 253 ExitFrame exit_; // Singleton exit frame returned by NextExitFrame(). |
| 251 FrameSetIterator frames_; | 254 FrameSetIterator frames_; |
| 252 StackFrame* current_frame_; // Points to the current frame in the iterator. | 255 StackFrame* current_frame_; // Points to the current frame in the iterator. |
| 253 Isolate* isolate_; | 256 Isolate* isolate_; |
| 257 Thread* thread_; | |
| 254 | 258 |
| 255 DISALLOW_COPY_AND_ASSIGN(StackFrameIterator); | 259 DISALLOW_COPY_AND_ASSIGN(StackFrameIterator); |
| 256 }; | 260 }; |
| 257 | 261 |
| 258 | 262 |
| 259 // Iterator for iterating over all dart frames (skips over exit frames, | 263 // Iterator for iterating over all dart frames (skips over exit frames, |
| 260 // entry frames and stub frames). | 264 // entry frames and stub frames). |
| 261 // A DartFrameIterator can be initialized with an isolate other than the | 265 // A DartFrameIterator can be initialized with an isolate other than the |
| 262 // current thread's isolate. Because this is generally a bad idea, | 266 // current thread's isolate. Because this is generally a bad idea, |
| 263 // it is only allowed on Windows- where it is needed for the profiler. | 267 // it is only allowed on Windows- where it is needed for the profiler. |
| 264 // It is the responsibility of users of DartFrameIterator to ensure that the | 268 // It is the responsibility of users of DartFrameIterator to ensure that the |
| 265 // isolate given is not running concurrently on another thread. | 269 // isolate given is not running concurrently on another thread. |
| 266 class DartFrameIterator : public ValueObject { | 270 class DartFrameIterator : public ValueObject { |
| 267 public: | 271 public: |
| 268 explicit DartFrameIterator(Isolate* isolate = Isolate::Current()) | 272 DartFrameIterator(Isolate* isolate = Isolate::Current(), |
| 269 : frames_(StackFrameIterator::kDontValidateFrames, isolate) { } | 273 Thread* thread = Thread::Current()) |
|
srdjan
2015/10/20 20:59:26
Pass in only thread and get isolate from thread->i
| |
| 274 : frames_(StackFrameIterator::kDontValidateFrames, isolate, thread) { } | |
| 270 DartFrameIterator(uword last_fp, | 275 DartFrameIterator(uword last_fp, |
| 271 Isolate* isolate = Isolate::Current()) | 276 Isolate* isolate = Isolate::Current(), |
| 272 : frames_(last_fp, StackFrameIterator::kDontValidateFrames, isolate) { } | 277 Thread* thread = Thread::Current()) |
| 278 : frames_(last_fp, StackFrameIterator::kDontValidateFrames, | |
| 279 isolate, thread) { } | |
| 273 DartFrameIterator(uword fp, | 280 DartFrameIterator(uword fp, |
| 274 uword sp, | 281 uword sp, |
| 275 uword pc, | 282 uword pc, |
| 276 Isolate* isolate = Isolate::Current()) | 283 Isolate* isolate = Isolate::Current(), |
| 277 : frames_(fp, sp, pc, StackFrameIterator::kDontValidateFrames, isolate) { | 284 Thread* thread = Thread::Current()) |
| 285 : frames_(fp, sp, pc, | |
| 286 StackFrameIterator::kDontValidateFrames, isolate, thread) { | |
| 278 } | 287 } |
| 279 // Get next dart frame. | 288 // Get next dart frame. |
| 280 StackFrame* NextFrame() { | 289 StackFrame* NextFrame() { |
| 281 StackFrame* frame = frames_.NextFrame(); | 290 StackFrame* frame = frames_.NextFrame(); |
| 282 while (frame != NULL && !frame->IsDartFrame(frames_.validate())) { | 291 while (frame != NULL && !frame->IsDartFrame(frames_.validate())) { |
| 283 frame = frames_.NextFrame(); | 292 frame = frames_.NextFrame(); |
| 284 } | 293 } |
| 285 return frame; | 294 return frame; |
| 286 } | 295 } |
| 287 | 296 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 329 uword pc_; | 338 uword pc_; |
| 330 GrowableArray<DeoptInstr*> deopt_instructions_; | 339 GrowableArray<DeoptInstr*> deopt_instructions_; |
| 331 ObjectPool& object_table_; | 340 ObjectPool& object_table_; |
| 332 | 341 |
| 333 DISALLOW_COPY_AND_ASSIGN(InlinedFunctionsIterator); | 342 DISALLOW_COPY_AND_ASSIGN(InlinedFunctionsIterator); |
| 334 }; | 343 }; |
| 335 | 344 |
| 336 } // namespace dart | 345 } // namespace dart |
| 337 | 346 |
| 338 #endif // VM_STACK_FRAME_H_ | 347 #endif // VM_STACK_FRAME_H_ |
| OLD | NEW |