InspectorProfilerAgent.h [plain text]
#ifndef InspectorProfilerAgent_h
#define InspectorProfilerAgent_h
#if ENABLE(INSPECTOR)
#include "InspectorJSBackendDispatchers.h"
#include "InspectorJSFrontendDispatchers.h"
#include "inspector/InspectorAgentBase.h"
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
#include <wtf/Noncopyable.h>
#include <wtf/text/WTFString.h>
namespace JSC {
class ExecState;
class Profile;
}
namespace Inspector {
class ScriptDebugServer;
typedef String ErrorString;
class JS_EXPORT_PRIVATE InspectorProfilerAgent : public InspectorAgentBase, public InspectorProfilerBackendDispatcherHandler {
WTF_MAKE_NONCOPYABLE(InspectorProfilerAgent);
WTF_MAKE_FAST_ALLOCATED;
public:
virtual ~InspectorProfilerAgent();
virtual void didCreateFrontendAndBackend(InspectorFrontendChannel*, InspectorBackendDispatcher*) override final;
virtual void willDestroyFrontendAndBackend(InspectorDisconnectReason) override final;
virtual void enable(ErrorString*) override final;
virtual void disable(ErrorString*) override final;
virtual void start(ErrorString* = nullptr) override final;
virtual void stop(ErrorString* = nullptr) override final;
virtual void clearProfiles(ErrorString*) override final { reset(); }
virtual void getProfileHeaders(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::Profiler::ProfileHeader>>&) override final;
virtual void getCPUProfile(ErrorString*, int uid, RefPtr<TypeBuilder::Profiler::CPUProfile>&) override final;
virtual void removeProfile(ErrorString*, const String& type, int uid) override final;
static PassRefPtr<TypeBuilder::Profiler::CPUProfile> buildProfileInspectorObject(const JSC::Profile*);
enum ShouldRecompile { SkipRecompile, Recompile };
virtual void enable(ShouldRecompile);
virtual void disable(ShouldRecompile);
bool enabled() const { return m_enabled; }
void reset();
void setScriptDebugServer(ScriptDebugServer* scriptDebugServer) { m_scriptDebugServer = scriptDebugServer; }
String startProfiling(const String& title = String(), JSC::ExecState* = nullptr);
PassRefPtr<JSC::Profile> stopProfiling(const String& title = String(), JSC::ExecState* = nullptr);
protected:
InspectorProfilerAgent();
virtual JSC::ExecState* profilingGlobalExecState() const = 0;
private:
void addProfile(PassRefPtr<JSC::Profile>);
void setRecordingProfile(bool isProfiling);
String getUserInitiatedProfileName();
PassRefPtr<TypeBuilder::Profiler::ProfileHeader> createProfileHeader(const JSC::Profile&);
std::unique_ptr<InspectorProfilerFrontendDispatcher> m_frontendDispatcher;
RefPtr<InspectorProfilerBackendDispatcher> m_backendDispatcher;
HashMap<unsigned, RefPtr<JSC::Profile>> m_profiles;
ScriptDebugServer* m_scriptDebugServer;
bool m_enabled;
bool m_profileHeadersRequested;
unsigned m_recordingProfileCount;
unsigned m_nextUserInitiatedProfileNumber;
};
}
#endif // ENABLE(INSPECTOR)
#endif // !defined(InspectorProfilerAgent_h)