Home | History | Annotate | Download | only in inspector
      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 
     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