LCOV - code coverage report
Current view: top level - src/debug - debug-frames.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 34 42 81.0 %
Date: 2019-03-21 Functions: 8 10 80.0 %

          Line data    Source code
       1             : // Copyright 2015 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #include "src/debug/debug-frames.h"
       6             : 
       7             : #include "src/accessors.h"
       8             : #include "src/frames-inl.h"
       9             : #include "src/wasm/wasm-interpreter.h"
      10             : #include "src/wasm/wasm-objects-inl.h"
      11             : 
      12             : namespace v8 {
      13             : namespace internal {
      14             : 
      15      261784 : FrameInspector::FrameInspector(StandardFrame* frame, int inlined_frame_index,
      16             :                                Isolate* isolate)
      17             :     : frame_(frame),
      18             :       inlined_frame_index_(inlined_frame_index),
      19      785352 :       isolate_(isolate) {
      20             :   // Extract the relevant information from the frame summary and discard it.
      21      523568 :   FrameSummary summary = FrameSummary::Get(frame, inlined_frame_index);
      22             : 
      23      261784 :   is_constructor_ = summary.is_constructor();
      24      261784 :   source_position_ = summary.SourcePosition();
      25      261784 :   function_name_ = summary.FunctionName();
      26      261784 :   script_ = Handle<Script>::cast(summary.script());
      27      261784 :   receiver_ = summary.receiver();
      28             : 
      29      261784 :   if (summary.IsJavaScript()) {
      30      260952 :     function_ = summary.AsJavaScript().function();
      31             :   }
      32             : 
      33             :   JavaScriptFrame* js_frame =
      34      261784 :       frame->is_java_script() ? javascript_frame() : nullptr;
      35             :   DCHECK(js_frame || frame->is_wasm());
      36      522736 :   has_adapted_arguments_ = js_frame && js_frame->has_adapted_arguments();
      37      523568 :   is_optimized_ = frame_->is_optimized();
      38      523568 :   is_interpreted_ = frame_->is_interpreted();
      39             : 
      40             :   // Calculate the deoptimized frame.
      41      261784 :   if (is_optimized_) {
      42             :     DCHECK_NOT_NULL(js_frame);
      43       24974 :     deoptimized_frame_.reset(Deoptimizer::DebuggerInspectableFrame(
      44       24974 :         js_frame, inlined_frame_index, isolate));
      45      473620 :   } else if (frame_->is_wasm_interpreter_entry()) {
      46             :     wasm_interpreted_frame_ =
      47             :         WasmInterpreterEntryFrame::cast(frame_)
      48        1488 :             ->debug_info()
      49        2232 :             ->GetInterpretedFrame(frame_->fp(), inlined_frame_index);
      50             :     DCHECK(wasm_interpreted_frame_);
      51             :   }
      52      261784 : }
      53             : 
      54             : // NOLINTNEXTLINE
      55      523568 : FrameInspector::~FrameInspector() {
      56             :   // Destructor needs to be defined in the .cc file, because it instantiates
      57             :   // std::unique_ptr destructors but the types are not known in the header.
      58      261784 : }
      59             : 
      60           0 : int FrameInspector::GetParametersCount() {
      61           0 :   if (is_optimized_) return deoptimized_frame_->parameters_count();
      62           0 :   if (wasm_interpreted_frame_)
      63           0 :     return wasm_interpreted_frame_->GetParameterCount();
      64           0 :   return frame_->ComputeParametersCount();
      65             : }
      66             : 
      67       25375 : Handle<Object> FrameInspector::GetParameter(int index) {
      68       25375 :   if (is_optimized_) return deoptimized_frame_->GetParameter(index);
      69             :   // TODO(clemensh): Handle wasm_interpreted_frame_.
      70       13115 :   return handle(frame_->GetParameter(index), isolate_);
      71             : }
      72             : 
      73     3996622 : Handle<Object> FrameInspector::GetExpression(int index) {
      74     3996622 :   return is_optimized_ ? deoptimized_frame_->GetExpression(index)
      75    11980563 :                        : handle(frame_->GetExpression(index), isolate_);
      76             : }
      77             : 
      78      476981 : Handle<Object> FrameInspector::GetContext() {
      79             :   return deoptimized_frame_ ? deoptimized_frame_->GetContext()
      80      953962 :                             : handle(frame_->context(), isolate_);
      81             : }
      82             : 
      83      383166 : bool FrameInspector::IsWasm() { return frame_->is_wasm(); }
      84             : 
      85      294159 : bool FrameInspector::IsJavaScript() { return frame_->is_java_script(); }
      86             : 
      87           0 : bool FrameInspector::ParameterIsShadowedByContextLocal(
      88             :     Handle<ScopeInfo> info, Handle<String> parameter_name) {
      89             :   VariableMode mode;
      90             :   InitializationFlag init_flag;
      91             :   MaybeAssignedFlag maybe_assigned_flag;
      92           0 :   return ScopeInfo::ContextSlotIndex(*info, *parameter_name, &mode, &init_flag,
      93           0 :                                      &maybe_assigned_flag) != -1;
      94             : }
      95             : }  // namespace internal
      96      120216 : }  // namespace v8

Generated by: LCOV version 1.10