• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef V8_INSPECTOR_V8_PROFILER_AGENT_IMPL_H_
6 #define V8_INSPECTOR_V8_PROFILER_AGENT_IMPL_H_
7 
8 #include <memory>
9 #include <vector>
10 
11 #include "src/base/macros.h"
12 #include "src/inspector/protocol/Forward.h"
13 #include "src/inspector/protocol/Profiler.h"
14 
15 namespace v8 {
16 class CpuProfiler;
17 class Isolate;
18 }  // namespace v8
19 
20 namespace v8_inspector {
21 
22 class V8InspectorSessionImpl;
23 
24 using protocol::Maybe;
25 using protocol::Response;
26 
27 class V8ProfilerAgentImpl : public protocol::Profiler::Backend {
28  public:
29   V8ProfilerAgentImpl(V8InspectorSessionImpl*, protocol::FrontendChannel*,
30                       protocol::DictionaryValue* state);
31   ~V8ProfilerAgentImpl() override;
32   V8ProfilerAgentImpl(const V8ProfilerAgentImpl&) = delete;
33   V8ProfilerAgentImpl& operator=(const V8ProfilerAgentImpl&) = delete;
34 
enabled()35   bool enabled() const { return m_enabled; }
36   void restore();
37 
38   Response enable() override;
39   Response disable() override;
40   Response setSamplingInterval(int) override;
41   Response start() override;
42   Response stop(std::unique_ptr<protocol::Profiler::Profile>*) override;
43 
44   Response startPreciseCoverage(Maybe<bool> binary, Maybe<bool> detailed,
45                                 Maybe<bool> allow_triggered_updates,
46                                 double* out_timestamp) override;
47   Response stopPreciseCoverage() override;
48   Response takePreciseCoverage(
49       std::unique_ptr<protocol::Array<protocol::Profiler::ScriptCoverage>>*
50           out_result,
51       double* out_timestamp) override;
52   Response getBestEffortCoverage(
53       std::unique_ptr<protocol::Array<protocol::Profiler::ScriptCoverage>>*
54           out_result) override;
55 
56   Response startTypeProfile() override;
57   Response stopTypeProfile() override;
58   Response takeTypeProfile(
59       std::unique_ptr<protocol::Array<protocol::Profiler::ScriptTypeProfile>>*
60           out_result) override;
61 
62   void consoleProfile(const String16& title);
63   void consoleProfileEnd(const String16& title);
64 
65   void triggerPreciseCoverageDeltaUpdate(const String16& occasion);
66 
67  private:
68   String16 nextProfileId();
69 
70   void startProfiling(const String16& title);
71   std::unique_ptr<protocol::Profiler::Profile> stopProfiling(
72       const String16& title, bool serialize);
73 
74   V8InspectorSessionImpl* m_session;
75   v8::Isolate* m_isolate;
76   v8::CpuProfiler* m_profiler = nullptr;
77   protocol::DictionaryValue* m_state;
78   protocol::Profiler::Frontend m_frontend;
79   bool m_enabled = false;
80   bool m_recordingCPUProfile = false;
81   class ProfileDescriptor;
82   std::vector<ProfileDescriptor> m_startedProfiles;
83   String16 m_frontendInitiatedProfileId;
84   int m_startedProfilesCount = 0;
85 };
86 
87 }  // namespace v8_inspector
88 
89 #endif  // V8_INSPECTOR_V8_PROFILER_AGENT_IMPL_H_
90