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