mirror of
https://github.com/dart-lang/sdk
synced 2024-09-05 00:13:50 +00:00
![Ryan Macnak](/assets/img/avatar_default.png)
Also fix stack trace collection to always include invisible frames. It can happen that a visible function is inlined into an invisible function, and we don't expand inlined frames until we print a stack trace. dart2js product x64: compile time: 12.459s VMIsolate(CodeSize): 152292 Isolate(CodeSize): 3343117 ReadOnlyData(CodeSize): 3728928 Instructions(CodeSize): 8677600 Total(CodeSize): 15901937 -> compile time: 14.195s (+13%) VMIsolate(CodeSize): 174034 Isolate(CodeSize): 3892418 (+16%) ReadOnlyData(CodeSize): 5036320 (+35%) Instructions(CodeSize): 8682624 Total(CodeSize): 17785396 (+12%) R=asiva@google.com Review-Url: https://codereview.chromium.org/2687143005 .
52 lines
2 KiB
C++
52 lines
2 KiB
C++
// 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_
|