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