[webkit-reviews] review canceled: [Bug 44174] Web Inspector: extract profiler-related code and data from InspectorController into ProfilerAgent : [Attachment 64836] Comments addressed.
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Thu Aug 19 07:12:10 PDT 2010
Mikhail Naganov <mnaganov at chromium.org> has canceled Mikhail Naganov
<mnaganov at chromium.org>'s request for review:
Bug 44174: Web Inspector: extract profiler-related code and data from
InspectorController into ProfilerAgent
https://bugs.webkit.org/show_bug.cgi?id=44174
Attachment 64836: Comments addressed.
https://bugs.webkit.org/attachment.cgi?id=64836&action=review
------- Additional Comments from Mikhail Naganov <mnaganov at chromium.org>
This breaks Chromium's interactive_ui_test for profiler. Holding this change
back.
> diff --git a/WebCore/CMakeLists.txt b/WebCore/CMakeLists.txt
> index 3fe6c2c..4efd85c 100644
> --- a/WebCore/CMakeLists.txt
> +++ b/WebCore/CMakeLists.txt
> @@ -1074,6 +1074,7 @@ SET(WebCore_SOURCES
> inspector/InspectorDebuggerAgent.cpp
> inspector/InspectorFrontendClientLocal.cpp
> inspector/InspectorFrontendHost.cpp
> + inspector/InspectorProfilerAgent.cpp
> inspector/InspectorResource.cpp
> inspector/InspectorValues.cpp
> inspector/InspectorStorageAgent.cpp
> diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
> index 9934fbf..ba704d5 100644
> --- a/WebCore/ChangeLog
> +++ b/WebCore/ChangeLog
> @@ -1,3 +1,69 @@
> +2010-08-19 Mikhail Naganov <mnaganov at chromium.org>
> +
> + Reviewed by NOBODY (OOPS!).
> +
> + Extract profiler-related code and data from InspectorController into
> + InspectorProfilerAgent.
> +
> + https://bugs.webkit.org/show_bug.cgi?id=44174
> +
> + * CMakeLists.txt:
> + * GNUmakefile.am:
> + * WebCore.exp.in:
> + * WebCore.gypi:
> + * WebCore.pro:
> + * WebCore.vcproj/WebCore.vcproj:
> + * WebCore.xcodeproj/project.pbxproj:
> + * bindings/js/ScriptProfiler.cpp:
> + (WebCore::ScriptProfiler::isProfilerAlwaysEnabled):
> + * bindings/js/ScriptProfiler.h:
> + * bindings/v8/ScriptProfiler.cpp:
> + (WebCore::ScriptProfiler::isProfilerAlwaysEnabled):
> + * bindings/v8/ScriptProfiler.h:
> + * inspector/CodeGeneratorInspector.pm:
> + * inspector/Inspector.idl:
> + * inspector/InspectorController.cpp:
> + (WebCore::InspectorController::InspectorController):
> + (WebCore::InspectorController::inspectedPageDestroyed):
> + (WebCore::InspectorController::connectFrontend):
> + (WebCore::InspectorController::disconnectFrontend):
> + (WebCore::InspectorController::populateScriptObjects):
> + (WebCore::InspectorController::didCommitLoad):
> + (WebCore::InspectorController::addProfile):
> + (WebCore::InspectorController::addProfileFinishedMessageToConsole):
> + (WebCore::InspectorController::addStartProfilingMessageToConsole):
> + (WebCore::InspectorController::isRecordingUserInitiatedProfile):
> + (WebCore::InspectorController::getCurrentUserInitiatedProfileName):
> + (WebCore::InspectorController::startUserInitiatedProfiling):
> + (WebCore::InspectorController::stopUserInitiatedProfiling):
> + (WebCore::InspectorController::enableProfiler):
> + (WebCore::InspectorController::disableProfiler):
> + * inspector/InspectorController.h:
> + (WebCore::InspectorController::profilerEnabled):
> + (WebCore::InspectorController::profilerAgent):
> + * inspector/InspectorProfilerAgent.cpp: Added.
> + (WebCore::InspectorProfilerAgent::create):
> + (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
> + (WebCore::InspectorProfilerAgent::~InspectorProfilerAgent):
> + (WebCore::InspectorProfilerAgent::addProfile):
> +
(WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
> +
(WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
> + (WebCore::InspectorProfilerAgent::createProfileHeader):
> +
(WebCore::InspectorProfilerAgent::getCurrentUserInitiatedProfileName):
> + (WebCore::InspectorProfilerAgent::getProfileHeaders):
> + (WebCore::InspectorProfilerAgent::getProfile):
> + (WebCore::InspectorProfilerAgent::removeProfile):
> + (WebCore::InspectorProfilerAgent::resetState):
> + (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
> + (WebCore::InspectorProfilerAgent::stopUserInitiatedProfiling):
> + (WebCore::InspectorProfilerAgent::toggleRecordButton):
> + * inspector/InspectorProfilerAgent.h: Added.
> + (WebCore::InspectorProfilerAgent::clearProfiles):
> + (WebCore::InspectorProfilerAgent::isRecordingUserInitiatedProfile):
> + (WebCore::InspectorProfilerAgent::setRemoteFrontend):
> + (WebCore::InspectorProfilerAgent::startProfiling):
> + (WebCore::InspectorProfilerAgent::stopProfiling):
> +
> 2010-08-19 Andreas Kling <andreas.kling at nokia.com>
>
> Reviewed by Kenneth Rohde Christiansen.
> diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
> index 20baf0f..e4b660e 100644
> --- a/WebCore/GNUmakefile.am
> +++ b/WebCore/GNUmakefile.am
> @@ -1627,6 +1627,8 @@ webcore_sources += \
> WebCore/inspector/InspectorFrontendClientLocal.h \
> WebCore/inspector/InspectorFrontendHost.cpp \
> WebCore/inspector/InspectorFrontendHost.h \
> + WebCore/inspector/InspectorProfilerAgent.cpp \
> + WebCore/inspector/InspectorProfilerAgent.h \
> WebCore/inspector/InspectorResource.cpp \
> WebCore/inspector/InspectorResource.h \
> WebCore/inspector/InspectorStorageAgent.cpp \
> diff --git a/WebCore/WebCore.exp.in b/WebCore/WebCore.exp.in
> index 1369296..57b8440 100644
> --- a/WebCore/WebCore.exp.in
> +++ b/WebCore/WebCore.exp.in
> @@ -1189,10 +1189,11 @@
__ZN7WebCore19InspectorController20stopTimelineProfilerEv
> __ZN7WebCore19InspectorController21startTimelineProfilerEv
>
__ZN7WebCore19InspectorController25evaluateForTestInFrontendElRKN3WTF6StringE
>
__ZN7WebCore19InspectorController26setInspectorFrontendClientEN3WTF10PassOwnPtr
INS_23InspectorFrontendClientEEE
> +__ZN7WebCore19InspectorController27startUserInitiatedProfilingEv
> __ZN7WebCore19InspectorController26stopUserInitiatedProfilingEv
>
-__ZN7WebCore19InspectorController27startUserInitiatedProfilingEPNS_5TimerIS0_E
E
> __ZN7WebCore19InspectorController34inspectorStartsAttachedSettingNameEv
> __ZN7WebCore19InspectorController34inspectorStartsAttachedSettingNameEv
> +__ZNK7WebCore19InspectorController31isRecordingUserInitiatedProfileEv
> __ZN7WebCore19InspectorController4showEv
> __ZN7WebCore19InspectorController5closeEv
> __ZN7WebCore19InspectorController7inspectEPNS_4NodeE
> diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
> index 3dff25d..38504ad 100644
> --- a/WebCore/WebCore.gypi
> +++ b/WebCore/WebCore.gypi
> @@ -1769,6 +1769,8 @@
> 'inspector/InspectorFrontendClient.h',
> 'inspector/InspectorFrontendHost.cpp',
> 'inspector/InspectorFrontendHost.h',
> + 'inspector/InspectorProfilerAgent.cpp',
> + 'inspector/InspectorProfilerAgent.h',
> 'inspector/InspectorResource.cpp',
> 'inspector/InspectorResource.h',
> 'inspector/InspectorStorageAgent.cpp',
> diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
> index 37d4bd7..4555725 100644
> --- a/WebCore/WebCore.pro
> +++ b/WebCore/WebCore.pro
> @@ -753,6 +753,7 @@ SOURCES += \
> inspector/InspectorDOMStorageResource.cpp \
> inspector/InspectorFrontendClientLocal.cpp \
> inspector/InspectorFrontendHost.cpp \
> + inspector/InspectorProfilerAgent.cpp \
> inspector/InspectorResource.cpp \
> inspector/InspectorStorageAgent.cpp \
> inspector/InspectorTimelineAgent.cpp \
> @@ -1522,6 +1523,7 @@ HEADERS += \
> inspector/InspectorFrontendClient.h \
> inspector/InspectorFrontendClientLocal.h \
> inspector/InspectorFrontendHost.h \
> + inspector/InspectorProfilerAgent.h \
> inspector/InspectorResource.h \
> inspector/InspectorStorageAgent.h \
> inspector/InspectorTimelineAgent.h \
> diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj
b/WebCore/WebCore.vcproj/WebCore.vcproj
> index 18d4851..e4831f4 100644
> --- a/WebCore/WebCore.vcproj/WebCore.vcproj
> +++ b/WebCore/WebCore.vcproj/WebCore.vcproj
> @@ -51853,6 +51853,14 @@
> >
> </File>
> <File
> +
RelativePath="..\inspector\InspectorProfilerAgent.cpp"
> + >
> + </File>
> + <File
> +
RelativePath="..\inspector\InspectorProfilerAgent.h"
> + >
> + </File>
> + <File
>
RelativePath="..\inspector\InspectorResource.cpp"
> >
> </File>
> diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj
b/WebCore/WebCore.xcodeproj/project.pbxproj
> index 2435c61..6712582 100644
> --- a/WebCore/WebCore.xcodeproj/project.pbxproj
> +++ b/WebCore/WebCore.xcodeproj/project.pbxproj
> @@ -2742,6 +2742,8 @@
> 97EF561011E40783007E026F /* HTMLConstructionSite.cpp in Sources
*/ = {isa = PBXBuildFile; fileRef = 97EF560E11E40783007E026F /*
HTMLConstructionSite.cpp */; };
> 97EF561111E40783007E026F /* HTMLConstructionSite.h in Headers
*/ = {isa = PBXBuildFile; fileRef = 97EF560F11E40783007E026F /*
HTMLConstructionSite.h */; };
> 97EF7DFE107E55B700D7C49C /* ScriptControllerBase.cpp in Sources
*/ = {isa = PBXBuildFile; fileRef = 97EF7DFD107E55B700D7C49C /*
ScriptControllerBase.cpp */; };
> + 9F0D6B2E121BFEBA006C0288 /* InspectorProfilerAgent.cpp in
Sources */ = {isa = PBXBuildFile; fileRef = 9F0D6B2C121BFEBA006C0288 /*
InspectorProfilerAgent.cpp */; };
> + 9F0D6B2F121BFEBA006C0288 /* InspectorProfilerAgent.h in Headers
*/ = {isa = PBXBuildFile; fileRef = 9F0D6B2D121BFEBA006C0288 /*
InspectorProfilerAgent.h */; };
> 9F6FC1961122E82A00E80196 /* ScriptDebugServer.cpp in Sources */
= {isa = PBXBuildFile; fileRef = 9F6FC1941122E82A00E80196 /*
ScriptDebugServer.cpp */; };
> 9F6FC1971122E82A00E80196 /* ScriptDebugServer.h in Headers */ =
{isa = PBXBuildFile; fileRef = 9F6FC1951122E82A00E80196 /* ScriptDebugServer.h
*/; settings = {ATTRIBUTES = (Private, ); }; };
> 9F72304F11184B4100AD0126 /* ScriptProfile.h in Headers */ =
{isa = PBXBuildFile; fileRef = 9F72304C11184B4100AD0126 /* ScriptProfile.h */;
settings = {ATTRIBUTES = (Private, ); }; };
> @@ -8597,6 +8599,8 @@
> 97EF560E11E40783007E026F /* HTMLConstructionSite.cpp */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp;
path = HTMLConstructionSite.cpp; sourceTree = "<group>"; };
> 97EF560F11E40783007E026F /* HTMLConstructionSite.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
HTMLConstructionSite.h; sourceTree = "<group>"; };
> 97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp;
path = ScriptControllerBase.cpp; sourceTree = "<group>"; };
> + 9F0D6B2C121BFEBA006C0288 /* InspectorProfilerAgent.cpp */ =
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.cpp.cpp; path = InspectorProfilerAgent.cpp; sourceTree = "<group>";
};
> + 9F0D6B2D121BFEBA006C0288 /* InspectorProfilerAgent.h */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path
= InspectorProfilerAgent.h; sourceTree = "<group>"; };
> 9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp;
path = ScriptDebugServer.cpp; sourceTree = "<group>"; };
> 9F6FC1951122E82A00E80196 /* ScriptDebugServer.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
ScriptDebugServer.h; sourceTree = "<group>"; };
> 9F72304C11184B4100AD0126 /* ScriptProfile.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
ScriptProfile.h; sourceTree = "<group>"; };
> @@ -11787,6 +11791,8 @@
> 7A0E770B10C00A8800A0276E /*
InspectorFrontendHost.cpp */,
> 7A0E770C10C00A8800A0276E /*
InspectorFrontendHost.h */,
> 7A0E770D10C00A8800A0276E /*
InspectorFrontendHost.idl */,
> + 9F0D6B2C121BFEBA006C0288 /*
InspectorProfilerAgent.cpp */,
> + 9F0D6B2D121BFEBA006C0288 /*
InspectorProfilerAgent.h */,
> 41F062000F5F0B6600A07EAC /*
InspectorResource.cpp */,
> 41F061FF0F5F0B6600A07EAC /* InspectorResource.h
*/,
> 7AB0B1BE1211A62200A76940 /*
InspectorStorageAgent.cpp */,
> @@ -20329,6 +20335,7 @@
> 2EDEF1F8121B0EFC00726DB2 /* BlobStorageData.h
in Headers */,
> 2EF1BFEB121C9F4200C27627 /* FileStream.h in
Headers */,
> 46A26906121B6B4300C41F3A /* FileWriter.h in
Headers */,
> + 9F0D6B2F121BFEBA006C0288 /*
InspectorProfilerAgent.h in Headers */,
> );
> runOnlyForDeploymentPostprocessing = 0;
> };
> @@ -22780,6 +22787,7 @@
> 2EDEF1F6121B0EFC00726DB2 /*
BlobRegistryImpl.cpp in Sources */,
> 2EF1BFEA121C9F4200C27627 /* FileStream.cpp in
Sources */,
> 46A26905121B6B4300C41F3A /* FileWriter.cpp in
Sources */,
> + 9F0D6B2E121BFEBA006C0288 /*
InspectorProfilerAgent.cpp in Sources */,
> );
> runOnlyForDeploymentPostprocessing = 0;
> };
> diff --git a/WebCore/bindings/js/ScriptProfiler.cpp
b/WebCore/bindings/js/ScriptProfiler.cpp
> index f372c3c..62ae9ba 100644
> --- a/WebCore/bindings/js/ScriptProfiler.cpp
> +++ b/WebCore/bindings/js/ScriptProfiler.cpp
> @@ -46,6 +46,11 @@ PassRefPtr<ScriptProfile>
ScriptProfiler::stop(ScriptState* state, const String&
> return ScriptProfile::create(profile);
> }
>
> +bool ScriptProfiler::isProfilerAlwaysEnabled()
> +{
> + return false;
> +}
> +
> } // namespace WebCore
>
> #endif // ENABLE(JAVASCRIPT_DEBUGGER)
> diff --git a/WebCore/bindings/js/ScriptProfiler.h
b/WebCore/bindings/js/ScriptProfiler.h
> index 4fa331c..180c49f 100644
> --- a/WebCore/bindings/js/ScriptProfiler.h
> +++ b/WebCore/bindings/js/ScriptProfiler.h
> @@ -41,6 +41,7 @@ public:
> static PassRefPtr<ScriptProfile> stop(ScriptState* state, const String&
title);
> static void takeHeapSnapshot() { }
> static long getProfilerLogLines(long, String*) { return 0; }
> + static bool isProfilerAlwaysEnabled();
> };
>
> } // namespace WebCore
> diff --git a/WebCore/bindings/v8/ScriptProfiler.cpp
b/WebCore/bindings/v8/ScriptProfiler.cpp
> index 9213774..0de4a24 100644
> --- a/WebCore/bindings/v8/ScriptProfiler.cpp
> +++ b/WebCore/bindings/v8/ScriptProfiler.cpp
> @@ -69,4 +69,9 @@ long ScriptProfiler::getProfilerLogLines(long position,
String* data)
> return position;
> }
>
> +bool ScriptProfiler::isProfilerAlwaysEnabled()
> +{
> + return true;
> +}
> +
> } // namespace WebCore
> diff --git a/WebCore/bindings/v8/ScriptProfiler.h
b/WebCore/bindings/v8/ScriptProfiler.h
> index 5c1054b..b1ab3b1 100644
> --- a/WebCore/bindings/v8/ScriptProfiler.h
> +++ b/WebCore/bindings/v8/ScriptProfiler.h
> @@ -45,6 +45,7 @@ public:
> static PassRefPtr<ScriptProfile> stop(ScriptState* state, const String&
title);
> static void takeHeapSnapshot();
> static long getProfilerLogLines(long position, String* data);
> + static bool isProfilerAlwaysEnabled();
> };
>
> } // namespace WebCore
> diff --git a/WebCore/inspector/CodeGeneratorInspector.pm
b/WebCore/inspector/CodeGeneratorInspector.pm
> index cd9052a..e647c90 100644
> --- a/WebCore/inspector/CodeGeneratorInspector.pm
> +++ b/WebCore/inspector/CodeGeneratorInspector.pm
> @@ -38,6 +38,11 @@ $typeTransform{"ApplicationCache"} = {
> "header" => "InspectorApplicationCacheAgent.h",
> "handlerAccessor" => "m_inspectorController->applicationCacheAgent()",
> };
> +$typeTransform{"Profiler"} = {
> + "forward" => "InspectorProfilerAgent",
> + "header" => "InspectorProfilerAgent.h",
> + "handlerAccessor" => "m_inspectorController->profilerAgent()",
> +};
> $typeTransform{"Frontend"} = {
> "forward" => "RemoteInspectorFrontend",
> "header" => "RemoteInspectorFrontend.h",
> diff --git a/WebCore/inspector/Inspector.idl
b/WebCore/inspector/Inspector.idl
> index 1c66b59..4864842 100644
> --- a/WebCore/inspector/Inspector.idl
> +++ b/WebCore/inspector/Inspector.idl
> @@ -145,14 +145,14 @@ module core {
> [handler=Controller] void enableProfiler(in boolean always);
> [handler=Controller] void disableProfiler(in boolean always);
>
> - [handler=Controller] void startProfiling();
> - [handler=Controller] void stopProfiling();
> + [handler=Profiler] void startProfiling();
> + [handler=Profiler] void stopProfiling();
>
> - [handler=Controller] void getProfileHeaders(in long callId, out
Array headers);
> - [handler=Controller] void getProfile(in long callId, in unsigned
long uid, out Object profile);
> + [handler=Profiler] void getProfileHeaders(in long callId, out Array
headers);
> + [handler=Profiler] void getProfile(in long callId, in unsigned long
uid, out Object profile);
>
> - [handler=Controller] void removeProfile(in unsigned long uid);
> - [handler=Controller] void clearProfiles();
> + [handler=Profiler] void removeProfile(in unsigned long uid);
> + [handler=Profiler] void clearProfiles();
>
> [handler=Backend] void takeHeapSnapshot();
> [handler=Backend] void getProfilerLogLines(in long callId, in long
inPosition, out long outPosition, out String log);
> diff --git a/WebCore/inspector/InspectorController.cpp
b/WebCore/inspector/InspectorController.cpp
> index ac670cb..d6a3634 100644
> --- a/WebCore/inspector/InspectorController.cpp
> +++ b/WebCore/inspector/InspectorController.cpp
> @@ -63,6 +63,7 @@
> #include "InspectorDOMStorageResource.h"
> #include "InspectorDatabaseResource.h"
> #include "InspectorDebuggerAgent.h"
> +#include "InspectorProfilerAgent.h"
> #include "InspectorResource.h"
> #include "InspectorStorageAgent.h"
> #include "InspectorTimelineAgent.h"
> @@ -115,8 +116,6 @@ using namespace std;
>
> namespace WebCore {
>
> -static const char* const UserInitiatedProfileName =
"org.webkit.profiles.user-initiated";
> -static const char* const CPUProfileType = "CPU";
> static const char* const resourceTrackingEnabledSettingName =
"resourceTrackingEnabled";
> static const char* const debuggerEnabledSettingName = "debuggerEnabled";
> static const char* const profilerEnabledSettingName = "profilerEnabled";
> @@ -170,11 +169,6 @@ InspectorController::InspectorController(Page* page,
InspectorClient* client)
> , m_injectedScriptHost(InjectedScriptHost::create(this))
> #if ENABLE(JAVASCRIPT_DEBUGGER)
> , m_attachDebuggerWhenShown(false)
> - , m_profilerEnabled(!WTF_USE_JSC)
> - , m_recordingUserInitiatedProfile(false)
> - , m_currentUserInitiatedProfileNumber(-1)
> - , m_nextUserInitiatedProfileNumber(1)
> - , m_startProfiling(this,
&InspectorController::startUserInitiatedProfiling)
> #endif
> {
> ASSERT_ARG(page, page);
> @@ -209,6 +203,7 @@ void InspectorController::inspectedPageDestroyed()
>
> #if ENABLE(JAVASCRIPT_DEBUGGER)
> m_debuggerAgent.clear();
> + m_profilerAgent.clear();
> #endif
> ASSERT(m_inspectedPage);
> m_inspectedPage = 0;
> @@ -504,10 +499,16 @@ void InspectorController::connectFrontend()
> String debuggerEnabled = setting(debuggerEnabledSettingName);
> if (debuggerEnabled == "true" || m_attachDebuggerWhenShown)
> enableDebugger();
> + }
> + if (ScriptProfiler::isProfilerAlwaysEnabled())
> + enableProfiler(true, false);
> + else {
> String profilerEnabled = setting(profilerEnabledSettingName);
> if (profilerEnabled == "true")
> enableProfiler();
> }
> + if (profilerEnabled())
> + m_profilerAgent->setRemoteFrontend(m_remoteFrontend.get());
> #endif
>
> if (m_showAfterVisible == lastActivePanel)
> @@ -594,7 +595,10 @@ void InspectorController::disconnectFrontend()
> hideHighlight();
>
> #if ENABLE(JAVASCRIPT_DEBUGGER)
> - stopUserInitiatedProfiling();
> + if (profilerEnabled()) {
> + m_profilerAgent->setRemoteFrontend(0);
> + stopUserInitiatedProfiling();
> + }
> #endif
>
> releaseFrontendLifetimeAgents();
> @@ -638,7 +642,7 @@ void InspectorController::populateScriptObjects()
> m_remoteFrontend->monitoringXHRWasEnabled();
>
> #if ENABLE(JAVASCRIPT_DEBUGGER)
> - if (m_profilerEnabled)
> + if (profilerEnabled())
> m_remoteFrontend->profilerWasEnabled();
> #endif
>
> @@ -745,11 +749,8 @@ void InspectorController::didCommitLoad(DocumentLoader*
loader)
> m_debuggerAgent->clearForPageNavigation();
> #endif
> #if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC)
> - m_profiles.clear();
> - m_currentUserInitiatedProfileNumber = 1;
> - m_nextUserInitiatedProfileNumber = 1;
> - if (m_remoteFrontend)
> - m_remoteFrontend->resetProfilesPanel();
> + if (m_profilerAgent)
> + m_profilerAgent->resetState();
> #endif
> // unbindAllResources should be called before database and DOM
storage
> // resources are cleared so that it has a chance to unbind them.
> @@ -1456,145 +1457,48 @@ InspectorDOMStorageResource*
InspectorController::getDOMStorageResourceForId(lon
> #if ENABLE(JAVASCRIPT_DEBUGGER)
> void InspectorController::addProfile(PassRefPtr<ScriptProfile> prpProfile,
unsigned lineNumber, const String& sourceURL)
> {
> - if (!enabled())
> - return;
> -
> - RefPtr<ScriptProfile> profile = prpProfile;
> - m_profiles.add(profile->uid(), profile);
> -
> - if (m_remoteFrontend) {
> - m_remoteFrontend->addProfileHeader(createProfileHeader(*profile));
> - }
> -
> - addProfileFinishedMessageToConsole(profile, lineNumber, sourceURL);
> + if (profilerEnabled())
> + m_profilerAgent->addProfile(prpProfile, lineNumber, sourceURL);
> }
>
> void
InspectorController::addProfileFinishedMessageToConsole(PassRefPtr<ScriptProfil
e> prpProfile, unsigned lineNumber, const String& sourceURL)
> {
> - RefPtr<ScriptProfile> profile = prpProfile;
> -
> - String title = profile->title();
> - String message = String::format("Profile \"webkit-profile://%s/%s#%d\"
finished.", CPUProfileType, encodeWithURLEscapeSequences(title).utf8().data(),
profile->uid());
> - addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel,
message, lineNumber, sourceURL);
> + if (profilerEnabled())
> + m_profilerAgent->addProfileFinishedMessageToConsole(prpProfile,
lineNumber, sourceURL);
> }
>
> void InspectorController::addStartProfilingMessageToConsole(const String&
title, unsigned lineNumber, const String& sourceURL)
> {
> - String message = String::format("Profile \"webkit-profile://%s/%s#0\"
started.", CPUProfileType, encodeWithURLEscapeSequences(title).utf8().data());
> - addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel,
message, lineNumber, sourceURL);
> -}
> -
> -void InspectorController::removeProfile(unsigned uid)
> -{
> - if (!enabled())
> - return;
> -
> - if (m_profiles.contains(uid))
> - m_profiles.remove(uid);
> + if (profilerEnabled())
> + m_profilerAgent->addStartProfilingMessageToConsole(title,
lineNumber, sourceURL);
> }
>
> -void InspectorController::clearProfiles()
> -{
> - if (!enabled())
> - return;
> -
> - m_profiles.clear();
> - m_currentUserInitiatedProfileNumber = 1;
> - m_nextUserInitiatedProfileNumber = 1;
> -}
>
> -void InspectorController::getProfileHeaders(RefPtr<InspectorArray>* headers)
> +bool InspectorController::isRecordingUserInitiatedProfile() const
> {
> - ProfilesMap::iterator profilesEnd = m_profiles.end();
> - for (ProfilesMap::iterator it = m_profiles.begin(); it != profilesEnd;
++it)
> - (*headers)->pushObject(createProfileHeader(*it->second));
> + return m_profilerAgent &&
m_profilerAgent->isRecordingUserInitiatedProfile();
> }
>
> -void InspectorController::getProfile(unsigned uid, RefPtr<InspectorObject>*
profileObject)
> +String InspectorController::getCurrentUserInitiatedProfileName(bool
incrementProfileNumber)
> {
> - ProfilesMap::iterator it = m_profiles.find(uid);
> - if (it != m_profiles.end()) {
> - *profileObject = createProfileHeader(*it->second);
> - (*profileObject)->setObject("head",
it->second->buildInspectorObjectForHead());
> - }
> -}
> -
> -PassRefPtr<InspectorObject> InspectorController::createProfileHeader(const
ScriptProfile& profile)
> -{
> - RefPtr<InspectorObject> header = InspectorObject::create();
> - header->setString("title", profile.title());
> - header->setNumber("uid", profile.uid());
> - header->setString("typeId", String(CPUProfileType));
> - return header;
> + if (profilerEnabled())
> + return
m_profilerAgent->getCurrentUserInitiatedProfileName(incrementProfileNumber);
> + return "";
> }
>
> -String InspectorController::getCurrentUserInitiatedProfileName(bool
incrementProfileNumber = false)
> +void InspectorController::startUserInitiatedProfiling()
> {
> - if (incrementProfileNumber)
> - m_currentUserInitiatedProfileNumber =
m_nextUserInitiatedProfileNumber++;
> -
> - return String::format("%s.%d", UserInitiatedProfileName,
m_currentUserInitiatedProfileNumber);
> -}
> -
> -void InspectorController::startUserInitiatedProfilingSoon()
> -{
> - m_startProfiling.startOneShot(0);
> -}
> -
> -void
InspectorController::startUserInitiatedProfiling(Timer<InspectorController>*)
> -{
> - if (!enabled())
> - return;
> -
> if (!profilerEnabled()) {
> enableProfiler(false, true);
> ScriptDebugServer::shared().recompileAllJSFunctions();
> }
> -
> - m_recordingUserInitiatedProfile = true;
> -
> - String title = getCurrentUserInitiatedProfileName(true);
> -
> -#if USE(JSC)
> - JSC::ExecState* scriptState =
toJSDOMWindow(m_inspectedPage->mainFrame(), debuggerWorld())->globalExec();
> -#else
> - ScriptState* scriptState = 0;
> -#endif
> - ScriptProfiler::start(scriptState, title);
> -
> - addStartProfilingMessageToConsole(title, 0, String());
> -
> - toggleRecordButton(true);
> + m_profilerAgent->startUserInitiatedProfiling();
> }
>
> void InspectorController::stopUserInitiatedProfiling()
> {
> - if (!enabled())
> - return;
> -
> - m_recordingUserInitiatedProfile = false;
> -
> - String title = getCurrentUserInitiatedProfileName();
> -
> -#if USE(JSC)
> - JSC::ExecState* scriptState =
toJSDOMWindow(m_inspectedPage->mainFrame(), debuggerWorld())->globalExec();
> -#else
> - // Use null script state to avoid filtering by context security token.
> - // All functions from all iframes should be visible from Inspector UI.
> - ScriptState* scriptState = 0;
> -#endif
> - RefPtr<ScriptProfile> profile = ScriptProfiler::stop(scriptState,
title);
> - if (profile)
> - addProfile(profile, 0, String());
> -
> - toggleRecordButton(false);
> -}
> -
> -void InspectorController::toggleRecordButton(bool isProfiling)
> -{
> - if (!m_remoteFrontend)
> - return;
> - m_remoteFrontend->setRecordingProfile(isProfiling);
> + if (profilerEnabled())
> + m_profilerAgent->stopUserInitiatedProfiling();
> }
>
> void InspectorController::enableProfiler(bool always, bool skipRecompile)
> @@ -1602,14 +1506,14 @@ void InspectorController::enableProfiler(bool always,
bool skipRecompile)
> if (always)
> setSetting(profilerEnabledSettingName, "true");
>
> - if (m_profilerEnabled)
> + if (profilerEnabled())
> return;
>
> - m_profilerEnabled = true;
> -
> if (!skipRecompile)
> ScriptDebugServer::shared().recompileAllJSFunctionsSoon();
>
> + m_profilerAgent = InspectorProfilerAgent::create(this,
m_remoteFrontend.get());
> +
> if (m_remoteFrontend)
> m_remoteFrontend->profilerWasEnabled();
> }
> @@ -1619,10 +1523,10 @@ void InspectorController::disableProfiler(bool
always)
> if (always)
> setSetting(profilerEnabledSettingName, "false");
>
> - if (!m_profilerEnabled)
> + if (!profilerEnabled())
> return;
>
> - m_profilerEnabled = false;
> + m_profilerAgent.clear();
>
> ScriptDebugServer::shared().recompileAllJSFunctionsSoon();
>
> diff --git a/WebCore/inspector/InspectorController.h
b/WebCore/inspector/InspectorController.h
> index 8d96005..672a7c1 100644
> --- a/WebCore/inspector/InspectorController.h
> +++ b/WebCore/inspector/InspectorController.h
> @@ -33,9 +33,7 @@
> #include "Cookie.h"
> #include "InspectorDOMAgent.h"
> #include "PlatformString.h"
> -#include "ScriptProfile.h"
> #include "ScriptState.h"
> -#include "Timer.h"
> #include <wtf/HashMap.h>
> #include <wtf/HashSet.h>
> #include <wtf/ListHashSet.h>
> @@ -65,6 +63,7 @@ class InspectorDatabaseResource;
> class InspectorDebuggerAgent;
> class InspectorFrontendClient;
> class InspectorObject;
> +class InspectorProfilerAgent;
> class InspectorResource;
> class InspectorStorageAgent;
> class InspectorTimelineAgent;
> @@ -78,6 +77,7 @@ class ResourceRequest;
> class ResourceResponse;
> class ResourceError;
> class ScriptCallStack;
> +class ScriptProfile;
> class ScriptString;
> class SharedBuffer;
> class Storage;
> @@ -228,20 +228,14 @@ public:
> void addProfile(PassRefPtr<ScriptProfile>, unsigned lineNumber, const
String& sourceURL);
> void addProfileFinishedMessageToConsole(PassRefPtr<ScriptProfile>,
unsigned lineNumber, const String& sourceURL);
> void addStartProfilingMessageToConsole(const String& title, unsigned
lineNumber, const String& sourceURL);
> - void removeProfile(unsigned);
> - void clearProfiles();
> -
> - bool isRecordingUserInitiatedProfile() const { return
m_recordingUserInitiatedProfile; }
> -
> - String getCurrentUserInitiatedProfileName(bool incrementProfileNumber);
> - void startUserInitiatedProfiling(Timer<InspectorController>* = 0);
> + bool isRecordingUserInitiatedProfile() const;
> + String getCurrentUserInitiatedProfileName(bool incrementProfileNumber =
false);
> + void startUserInitiatedProfiling();
> void stopUserInitiatedProfiling();
> - void startProfiling() { startUserInitiatedProfiling(); }
> - void stopProfiling() { stopUserInitiatedProfiling(); }
> -
> void enableProfiler(bool always = false, bool skipRecompile = false);
> void disableProfiler(bool always = false);
> - bool profilerEnabled() const { return enabled() && m_profilerEnabled; }
> + bool profilerEnabled() const { return enabled() && m_profilerAgent; }
> + InspectorProfilerAgent* profilerAgent() const { return
m_profilerAgent.get(); }
>
> void enableDebugger();
> void disableDebugger(bool always = false);
> @@ -283,14 +277,9 @@ private:
> void releaseFrontendLifetimeAgents();
>
> #if ENABLE(JAVASCRIPT_DEBUGGER)
> - typedef HashMap<unsigned int, RefPtr<ScriptProfile> > ProfilesMap;
>
> - void startUserInitiatedProfilingSoon();
> void toggleRecordButton(bool);
> void enableDebuggerFromFrontend(bool always);
> - void getProfileHeaders(RefPtr<InspectorArray>* headers);
> - void getProfile(unsigned uid, RefPtr<InspectorObject>* profileObject);
> - PassRefPtr<InspectorObject> createProfileHeader(const ScriptProfile&
profile);
> #endif
> #if ENABLE(DATABASE)
> void selectDatabase(Database* database);
> @@ -380,12 +369,7 @@ private:
> bool m_attachDebuggerWhenShown;
> OwnPtr<InspectorDebuggerAgent> m_debuggerAgent;
>
> - bool m_profilerEnabled;
> - bool m_recordingUserInitiatedProfile;
> - int m_currentUserInitiatedProfileNumber;
> - unsigned m_nextUserInitiatedProfileNumber;
> - Timer<InspectorController> m_startProfiling;
> - ProfilesMap m_profiles;
> + OwnPtr<InspectorProfilerAgent> m_profilerAgent;
> #endif
> #if ENABLE(WORKERS)
> typedef HashMap<intptr_t, RefPtr<InspectorWorkerResource> > WorkersMap;
> diff --git a/WebCore/inspector/InspectorProfilerAgent.cpp
b/WebCore/inspector/InspectorProfilerAgent.cpp
> new file mode 100644
> index 0000000..3954194
> --- /dev/null
> +++ b/WebCore/inspector/InspectorProfilerAgent.cpp
> @@ -0,0 +1,184 @@
> +/*
> + * Copyright (C) 2010 Apple Inc. All rights reserved.
> + * Copyright (C) 2010 Google Inc. All rights reserved.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + *
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
> + * its contributors may be used to endorse or promote products derived
> + * from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
> + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
> + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
> + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
> + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
> + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
> + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
> + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> +#include "config.h"
> +#include "InspectorProfilerAgent.h"
> +
> +#if ENABLE(JAVASCRIPT_DEBUGGER)
> +
> +#include "Console.h"
> +#include "InspectorController.h"
> +#include "InspectorValues.h"
> +#include "KURL.h"
> +#include "Page.h"
> +#include "RemoteInspectorFrontend.h"
> +#include "ScriptProfile.h"
> +#include "ScriptProfiler.h"
> +#include <wtf/OwnPtr.h>
> +
> +#if USE(JSC)
> +#include "JSDOMWindow.h"
> +#endif
> +
> +namespace WebCore {
> +
> +static const char* const UserInitiatedProfileName =
"org.webkit.profiles.user-initiated";
> +static const char* const CPUProfileType = "CPU";
> +
> +PassOwnPtr<InspectorProfilerAgent>
InspectorProfilerAgent::create(InspectorController* inspectorController,
RemoteInspectorFrontend* remoteFrontend)
> +{
> + OwnPtr<InspectorProfilerAgent> agent = adoptPtr(new
InspectorProfilerAgent(inspectorController, remoteFrontend));
> + return agent.release();
> +}
> +
> +InspectorProfilerAgent::InspectorProfilerAgent(InspectorController*
inspectorController, RemoteInspectorFrontend* remoteFrontend)
> + : m_inspectorController(inspectorController)
> + , m_remoteFrontend(remoteFrontend)
> + , m_recordingUserInitiatedProfile(false)
> + , m_currentUserInitiatedProfileNumber(-1)
> + , m_nextUserInitiatedProfileNumber(1)
> +{
> +}
> +
> +InspectorProfilerAgent::~InspectorProfilerAgent()
> +{
> +}
> +
> +void InspectorProfilerAgent::addProfile(PassRefPtr<ScriptProfile>
prpProfile, unsigned lineNumber, const String& sourceURL)
> +{
> + RefPtr<ScriptProfile> profile = prpProfile;
> + m_profiles.add(profile->uid(), profile);
> + if (m_remoteFrontend)
> + m_remoteFrontend->addProfileHeader(createProfileHeader(*profile));
> + addProfileFinishedMessageToConsole(profile, lineNumber, sourceURL);
> +}
> +
> +void
InspectorProfilerAgent::addProfileFinishedMessageToConsole(PassRefPtr<ScriptPro
file> prpProfile, unsigned lineNumber, const String& sourceURL)
> +{
> + RefPtr<ScriptProfile> profile = prpProfile;
> +
> + String title = profile->title();
> + String message = String::format("Profile \"webkit-profile://%s/%s#%d\"
finished.", CPUProfileType, encodeWithURLEscapeSequences(title).utf8().data(),
profile->uid());
> + m_inspectorController->addMessageToConsole(JSMessageSource,
LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
> +}
> +
> +void InspectorProfilerAgent::addStartProfilingMessageToConsole(const String&
title, unsigned lineNumber, const String& sourceURL)
> +{
> + String message = String::format("Profile \"webkit-profile://%s/%s#0\"
started.", CPUProfileType, encodeWithURLEscapeSequences(title).utf8().data());
> + m_inspectorController->addMessageToConsole(JSMessageSource,
LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
> +}
> +
> +PassRefPtr<InspectorObject>
InspectorProfilerAgent::createProfileHeader(const ScriptProfile& profile)
> +{
> + RefPtr<InspectorObject> header = InspectorObject::create();
> + header->setString("title", profile.title());
> + header->setNumber("uid", profile.uid());
> + header->setString("typeId", String(CPUProfileType));
> + return header;
> +}
> +
> +String InspectorProfilerAgent::getCurrentUserInitiatedProfileName(bool
incrementProfileNumber)
> +{
> + if (incrementProfileNumber)
> + m_currentUserInitiatedProfileNumber =
m_nextUserInitiatedProfileNumber++;
> +
> + return String::format("%s.%d", UserInitiatedProfileName,
m_currentUserInitiatedProfileNumber);
> +}
> +
> +void InspectorProfilerAgent::getProfileHeaders(RefPtr<InspectorArray>*
headers)
> +{
> + ProfilesMap::iterator profilesEnd = m_profiles.end();
> + for (ProfilesMap::iterator it = m_profiles.begin(); it != profilesEnd;
++it)
> + (*headers)->pushObject(createProfileHeader(*it->second));
> +}
> +
> +void InspectorProfilerAgent::getProfile(unsigned uid,
RefPtr<InspectorObject>* profileObject)
> +{
> + ProfilesMap::iterator it = m_profiles.find(uid);
> + if (it != m_profiles.end()) {
> + *profileObject = createProfileHeader(*it->second);
> + (*profileObject)->setObject("head",
it->second->buildInspectorObjectForHead());
> + }
> +}
> +
> +void InspectorProfilerAgent::removeProfile(unsigned uid)
> +{
> + if (m_profiles.contains(uid))
> + m_profiles.remove(uid);
> +}
> +
> +void InspectorProfilerAgent::resetState()
> +{
> + m_profiles.clear();
> + m_currentUserInitiatedProfileNumber = 1;
> + m_nextUserInitiatedProfileNumber = 1;
> + if (m_remoteFrontend)
> + m_remoteFrontend->resetProfilesPanel();
> +}
> +
> +void InspectorProfilerAgent::startUserInitiatedProfiling()
> +{
> + m_recordingUserInitiatedProfile = true;
> + String title = getCurrentUserInitiatedProfileName(true);
> +#if USE(JSC)
> + JSC::ExecState* scriptState =
toJSDOMWindow(m_inspectorController->inspectedPage()->mainFrame(),
debuggerWorld())->globalExec();
> +#else
> + ScriptState* scriptState = 0;
> +#endif
> + ScriptProfiler::start(scriptState, title);
> + addStartProfilingMessageToConsole(title, 0, String());
> + toggleRecordButton(true);
> +}
> +
> +void InspectorProfilerAgent::stopUserInitiatedProfiling()
> +{
> + m_recordingUserInitiatedProfile = false;
> + String title = getCurrentUserInitiatedProfileName();
> +#if USE(JSC)
> + JSC::ExecState* scriptState =
toJSDOMWindow(m_inspectorController->inspectedPage()->mainFrame(),
debuggerWorld())->globalExec();
> +#else
> + // Use null script state to avoid filtering by context security token.
> + // All functions from all iframes should be visible from Inspector UI.
> + ScriptState* scriptState = 0;
> +#endif
> + RefPtr<ScriptProfile> profile = ScriptProfiler::stop(scriptState,
title);
> + if (profile)
> + addProfile(profile, 0, String());
> + toggleRecordButton(false);
> +}
> +
> +void InspectorProfilerAgent::toggleRecordButton(bool isProfiling)
> +{
> + if (m_remoteFrontend)
> + m_remoteFrontend->setRecordingProfile(isProfiling);
> +}
> +
> +} // namespace WebCore
> +
> +#endif // ENABLE(JAVASCRIPT_DEBUGGER)
> diff --git a/WebCore/inspector/InspectorProfilerAgent.h
b/WebCore/inspector/InspectorProfilerAgent.h
> new file mode 100644
> index 0000000..2ce6549
> --- /dev/null
> +++ b/WebCore/inspector/InspectorProfilerAgent.h
> @@ -0,0 +1,89 @@
> +/*
> + * Copyright (C) 2010 Apple Inc. All rights reserved.
> + * Copyright (C) 2010 Google Inc. All rights reserved.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + *
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
> + * its contributors may be used to endorse or promote products derived
> + * from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
> + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
> + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
> + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
> + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES;
> + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
> + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
> + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> +#ifndef InspectorProfilerAgent_h
> +#define InspectorProfilerAgent_h
> +
> +#if ENABLE(JAVASCRIPT_DEBUGGER)
> +
> +#include "PlatformString.h"
> +#include <wtf/Forward.h>
> +#include <wtf/HashMap.h>
> +#include <wtf/Noncopyable.h>
> +#include <wtf/PassOwnPtr.h>
> +
> +namespace WebCore {
> +
> +class InspectorArray;
> +class InspectorController;
> +class InspectorObject;
> +class ScriptProfile;
> +class RemoteInspectorFrontend;
> +
> +class InspectorProfilerAgent : public Noncopyable {
> +public:
> + static PassOwnPtr<InspectorProfilerAgent> create(InspectorController*,
RemoteInspectorFrontend*);
> + virtual ~InspectorProfilerAgent();
> +
> + void addProfile(PassRefPtr<ScriptProfile> prpProfile, unsigned
lineNumber, const String& sourceURL);
> + void addProfileFinishedMessageToConsole(PassRefPtr<ScriptProfile>,
unsigned lineNumber, const String& sourceURL);
> + void addStartProfilingMessageToConsole(const String& title, unsigned
lineNumber, const String& sourceURL);
> + void clearProfiles() { resetState(); }
> + String getCurrentUserInitiatedProfileName(bool incrementProfileNumber =
false);
> + void getProfileHeaders(RefPtr<InspectorArray>* headers);
> + void getProfile(unsigned uid, RefPtr<InspectorObject>* profileObject);
> + bool isRecordingUserInitiatedProfile() { return
m_recordingUserInitiatedProfile; }
> + void removeProfile(unsigned uid);
> + void resetState();
> + void setRemoteFrontend(RemoteInspectorFrontend* frontend) {
m_remoteFrontend = frontend; }
> + void startProfiling() { startUserInitiatedProfiling(); }
> + void startUserInitiatedProfiling();
> + void stopProfiling() { stopUserInitiatedProfiling(); }
> + void stopUserInitiatedProfiling();
> + void toggleRecordButton(bool isProfiling);
> +
> +private:
> + typedef HashMap<unsigned int, RefPtr<ScriptProfile> > ProfilesMap;
> +
> + InspectorProfilerAgent(InspectorController*, RemoteInspectorFrontend*);
> + PassRefPtr<InspectorObject> createProfileHeader(const ScriptProfile&
profile);
> +
> + InspectorController* m_inspectorController;
> + RemoteInspectorFrontend* m_remoteFrontend;
> + bool m_recordingUserInitiatedProfile;
> + int m_currentUserInitiatedProfileNumber;
> + unsigned m_nextUserInitiatedProfileNumber;
> + ProfilesMap m_profiles;
> +};
> +
> +} // namespace WebCore
> +
> +#endif // ENABLE(JAVASCRIPT_DEBUGGER)
> +
> +#endif // !defined(InspectorProfilerAgent_h)
More information about the webkit-reviews
mailing list