blob: 5a89221365355a3da62aff852b8ce0d11d77ff3d [file] [log] [blame]
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#ifndef RUNTIME_VM_STACK_TRACE_H_
#define RUNTIME_VM_STACK_TRACE_H_
#include "vm/allocation.h"
#include "vm/flag_list.h"
#include "vm/object.h"
namespace dart {
DECLARE_FLAG(bool, show_invisible_frames);
class StackTraceUtils : public AllStatic {
public:
/// Counts the number of stack frames.
/// Skips over the first |skip_frames|.
/// If |async_function| is not null, stops at the function that has
/// |async_function| as its parent.
static intptr_t CountFrames(Thread* thread,
int skip_frames,
const Function& async_function);
/// Collects |count| frames into |code_array| and |pc_offset_array|.
/// Writing begins at |array_offset|.
/// Skips over the first |skip_frames|.
/// Returns the number of frames collected.
static intptr_t CollectFrames(Thread* thread,
const Array& code_array,
const Array& pc_offset_array,
intptr_t array_offset,
intptr_t count,
int skip_frames);
/// If |thread| has no async_stack_trace, does nothing.
/// Populates |async_function| with the top function of the async stack
/// trace. Populates |async_stack_trace|, |async_code_array|, and
/// |async_pc_offset_array| with the thread's async_stack_trace.
/// Returns the length of the asynchronous stack trace.
static intptr_t ExtractAsyncStackTraceInfo(Thread* thread,
Function* async_function,
StackTrace* async_stack_trace,
Array* async_code_array,
Array* async_pc_offset_array);
};
} // namespace dart
#endif // RUNTIME_VM_STACK_TRACE_H_