LCOV - code coverage report
Current view: top level - src/profiler - profiler-listener.h (source / functions) Hit Total Coverage
Test: app.info Lines: 9 10 90.0 %
Date: 2019-02-19 Functions: 3 6 50.0 %

          Line data    Source code
       1             : // Copyright 2016 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             : #ifndef V8_PROFILER_PROFILER_LISTENER_H_
       6             : #define V8_PROFILER_PROFILER_LISTENER_H_
       7             : 
       8             : #include <memory>
       9             : #include <vector>
      10             : 
      11             : #include "src/code-events.h"
      12             : #include "src/profiler/profile-generator.h"
      13             : 
      14             : namespace v8 {
      15             : namespace internal {
      16             : 
      17             : class CodeEventsContainer;
      18             : class CodeDeoptEventRecord;
      19             : 
      20         757 : class CodeEventObserver {
      21             :  public:
      22             :   virtual void CodeEventHandler(const CodeEventsContainer& evt_rec) = 0;
      23         752 :   virtual ~CodeEventObserver() = default;
      24             : };
      25             : 
      26        1484 : class ProfilerListener : public CodeEventListener {
      27             :  public:
      28             :   ProfilerListener(Isolate*, CodeEventObserver*);
      29             :   ~ProfilerListener() override;
      30             : 
      31             :   void CallbackEvent(Name name, Address entry_point) override;
      32             :   void CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
      33             :                        AbstractCode code, const char* comment) override;
      34             :   void CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
      35             :                        AbstractCode code, Name name) override;
      36             :   void CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
      37             :                        AbstractCode code, SharedFunctionInfo shared,
      38             :                        Name script_name) override;
      39             :   void CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
      40             :                        AbstractCode code, SharedFunctionInfo shared,
      41             :                        Name script_name, int line, int column) override;
      42             :   void CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
      43             :                        const wasm::WasmCode* code,
      44             :                        wasm::WasmName name) override;
      45             : 
      46         119 :   void CodeMovingGCEvent() override {}
      47             :   void CodeMoveEvent(AbstractCode from, AbstractCode to) override;
      48             :   void CodeDisableOptEvent(AbstractCode code,
      49             :                            SharedFunctionInfo shared) override;
      50             :   void CodeDeoptEvent(Code code, DeoptimizeKind kind, Address pc,
      51             :                       int fp_to_sp_delta) override;
      52             :   void GetterCallbackEvent(Name name, Address entry_point) override;
      53             :   void RegExpCodeCreateEvent(AbstractCode code, String source) override;
      54             :   void SetterCallbackEvent(Name name, Address entry_point) override;
      55           0 :   void SharedFunctionInfoMoveEvent(Address from, Address to) override {}
      56             : 
      57             :   CodeEntry* NewCodeEntry(
      58             :       CodeEventListener::LogEventsAndTags tag, const char* name,
      59             :       const char* resource_name = CodeEntry::kEmptyResourceName,
      60             :       int line_number = v8::CpuProfileNode::kNoLineNumberInfo,
      61             :       int column_number = v8::CpuProfileNode::kNoColumnNumberInfo,
      62             :       std::unique_ptr<SourcePositionTable> line_info = nullptr,
      63             :       Address instruction_start = kNullAddress);
      64             : 
      65             :   const char* GetName(Name name) {
      66     1221540 :     return function_and_resource_names_.GetName(name);
      67             :   }
      68             :   const char* GetName(int args_count) {
      69             :     return function_and_resource_names_.GetName(args_count);
      70             :   }
      71             :   const char* GetName(const char* name) {
      72       25808 :     return function_and_resource_names_.GetCopy(name);
      73             :   }
      74             :   const char* GetConsName(const char* prefix, Name name) {
      75       17226 :     return function_and_resource_names_.GetConsName(prefix, name);
      76             :   }
      77             : 
      78          10 :   void set_observer(CodeEventObserver* observer) { observer_ = observer; }
      79             : 
      80             :  private:
      81             :   void AttachDeoptInlinedFrames(Code code, CodeDeoptEventRecord* rec);
      82             :   Name InferScriptName(Name name, SharedFunctionInfo info);
      83             :   V8_INLINE void DispatchCodeEvent(const CodeEventsContainer& evt_rec) {
      84      661071 :     observer_->CodeEventHandler(evt_rec);
      85             :   }
      86             : 
      87             :   Isolate* isolate_;
      88             :   CodeEventObserver* observer_;
      89             :   StringsStorage function_and_resource_names_;
      90             : 
      91             :   DISALLOW_COPY_AND_ASSIGN(ProfilerListener);
      92             : };
      93             : 
      94             : }  // namespace internal
      95             : }  // namespace v8
      96             : 
      97             : #endif  // V8_PROFILER_PROFILER_LISTENER_H_

Generated by: LCOV version 1.10