Make the JavaScript profiler opt-in, so it does not slow down JavaScript all the...
authortimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Oct 2008 20:42:34 +0000 (20:42 +0000)
committertimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Oct 2008 20:42:34 +0000 (20:42 +0000)
Make the Profiles panel in the Web Inspector have an enable screen.
Profiling now needs to be enabled before console.profile() works.

WebCore:

2008-10-27  Timothy Hatcher  <timothy@apple.com>

        Make the Profiles panel in the Web Inspector have an enable screen.
        Profiling now needs to be enabled before console.profile() works.

        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
        not slow down JavaScript all the time

        Reviewed by Darin Adler and Kevin McCullough.

        * English.lproj/localizedStrings.js: New strings.
        * WebCore.base.exp: New and changed exports.
        * WebCore.vcproj/WebCore.vcproj: Add the PanelEnablerView.js file.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling): Call InspectorController:profilerEnabled.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController): Initialize the m_startProfiling
        Timer to call InspectorController::startUserInitiatedProfiling.
        (WebCore::InspectorController::startUserInitiatedProfilingSoon): Start a one-shot timer
        that calls InspectorController::startUserInitiatedProfiling.
        (WebCore::InspectorController::startUserInitiatedProfiling): Recompile all JavaScript
        and enable the profiler if the profiler was not enabled.
        (WebCore::InspectorController::stopUserInitiatedProfiling): Rearrange code for readability.
        (WebCore::InspectorController::enableProfiler): Recompile all the JavaScript functions
        if the skipRecompile argument is false. Call the profilerWasEnabled script function.
        (WebCore::InspectorController::disableProfiler): Recompile all the JavaScript functions.
        Call the profilerWasEnabled script function.
        (WebCore::InspectorController::disableDebugger): Set m_attachDebuggerWhenShown to false,
        so it won't be started later.
        * inspector/InspectorController.h:
        (WebCore::InspectorController::profilerEnabled): Return enabled() && m_profilerEnabled.
        * inspector/front-end/Images/debuggingButtons.png: Remove.
        * inspector/front-end/Images/enableButtons.png: Added.
        * inspector/front-end/Images/profilesSilhouette.png: Added.
        * inspector/front-end/Images/scriptsSilhouette.png: Added.
        * inspector/front-end/PanelEnablerView.js: Added.
        (WebInspector.PanelEnablerView):
        (WebInspector.PanelEnablerView.prototype._enableButtonCicked): Fire the "enable clicked"
        event so listeners can do their thing.
        (WebInspector.PanelEnablerView.prototype._windowResized): Test if the icon should be hidden.
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel): Create the PanelEnablerView and the strings needed for it.
        (WebInspector.ProfilesPanel.prototype.get statusBarItems): Include the enableToggleButton.
        (WebInspector.ProfilesPanel.prototype.profilerWasEnabled): Call reset and populateInterface.
        (WebInspector.ProfilesPanel.prototype.profilerWasDisabled): Call reset.
        (WebInspector.ProfilesPanel.prototype.reset): Call _updateInterface.
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile): Moved in the code, no changes.
        (WebInspector.ProfilesPanel.prototype._updateInterface): Update the toggle button and
        show/hide other buttons. Also show/hide the PanelEnablerView.
        (WebInspector.ProfilesPanel.prototype._enableProfiling): Call _toggleProfiling if not enabled.
        (WebInspector.ProfilesPanel.prototype._toggleProfiling): Call InspectorController's
        disableProfiler or enableProfiler.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel): Replace the overlay element with a PanelEnablerView. Replace the
        debuggingButton with the enableToggleButton.
        (WebInspector.ScriptsPanel.prototype.get statusBarItems): Replace the debuggingButton with
        the enableToggleButton.
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons): Hide/show the pauseOnExceptionButton
        when needed. Replace the overlay element with a PanelEnablerView. Replace the debuggingButton
        with the enableToggleButton.
        (WebInspector.ScriptsPanel.prototype._enableDebugging): Call _toggleDebugging when not enabled.
        (WebInspector.ScriptsPanel.prototype._toggleDebugging): Remove the call to _clearInterface,
        since reset is called from debuggerWasEnabled and debuggerWasDisabled.
        * inspector/front-end/View.js: Inherit from WebInspector.Object.
        * inspector/front-end/WebKit.qrc: Add the PanelEnablerView.js file.
        * inspector/front-end/inspector.css: New styles for the PanelEnablerView.
        * inspector/front-end/inspector.html: Add the PanelEnablerView.js file.
        * inspector/front-end/inspector.js:
        (WebInspector.profilerWasEnabled): Added. Calls the ProfilesPanel.
        (WebInspector.profilerWasDisabled): Ditto.
        * page/Console.cpp:
        (WebCore::Console::error): Remove null check for m_frame, since m_frame isn't used.
        (WebCore::Console::info): Ditto.
        (WebCore::Console::log): Ditto.
        (WebCore::Console::assertCondition): Ditto.
        (WebCore::Console::dirxml): Remove null check for m_frame and use this->page().
        (WebCore::Console::count): Ditto.
        (WebCore::Console::profile): Return early if InspectorController::profilerEnabled is false.
        (WebCore::Console::profileEnd): Ditto.
        (WebCore::Console::warn): Remove null check for m_frame, since m_frame isn't used.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Remove initialization of m_didInitializeDeveloperExtrasEnabled.
        (WebCore::Settings::setDeveloperExtrasEnabled): Remove code that recompiled functions.
        Now just sets the member boolean.
        * page/Settings.h: Remove m_didInitializeDeveloperExtrasEnabled.

WebKit/mac:

2008-10-28  Timothy Hatcher  <timothy@apple.com>

        Add WebInspector methods to enable the profiler.

        https://bugs.webkit.org/show_bug.cgi?id=21927

        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
        not slow down JavaScript all the time

        Reviewed by Darin Adler and Kevin McCullough.

        * WebInspector/WebInspector.h:
        * WebInspector/WebInspector.mm:
        (-[WebInspector isJavaScriptProfilingEnabled]): Added. Calls InspectorController::profilerEnabled.
        (-[WebInspector setJavaScriptProfilingEnabled:]): Added. Call InspectorController's disableProfiler
        or enableProfiler methods.

WebKit/win:

2008-10-28  Timothy Hatcher  <timothy@apple.com>

        Add IWebInspector methods to enable the profiler.

        https://bugs.webkit.org/show_bug.cgi?id=21927

        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
        not slow down JavaScript all the time

        Reviewed by Darin Adler and Kevin McCullough.

        * WebInspector.cpp:
        (WebInspector::isJavaScriptProfilingEnabled): Added. Calls InspectorController::profilerEnabled.
        (WebInspector::setJavaScriptProfilingEnabled): Added. Call InspectorController's disableProfiler
        or enableProfiler methods.
        * WebInspector.h:

WebKitTools:

2008-10-28  Timothy Hatcher  <timothy@apple.com>

        Add support for enabling the profiler, so the profiling tests can continue
        work now that the profiler is not always enabled.

        https://bugs.webkit.org/show_bug.cgi?id=21927

        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
        not slow down JavaScript all the time

        Reviewed by Darin Adler and Kevin McCullough.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Make the editor use spaces.
        * DumpRenderTree/LayoutTestController.cpp:
        (setJavaScriptProfilingEnabledCallback): Added. Calls LayoutTestController::setJavaScriptProfilingEnabled.
        (LayoutTestController::staticFunctions): Added setJavaScriptProfilingEnabled to the script class.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled): Stubbed out with a FIXME.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting): Disables the developer extras and disables the profiler.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setJavaScriptProfilingEnabled): Toggles the developer extras and profiler.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting): Disables the developer extras and disables the profiler.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled): Toggles the developer extras and profiler.

LayoutTests:

2008-10-28  Timothy Hatcher  <timothy@apple.com>

        Update profiler tests to opt-in to profiling and clean up the output.

        https://bugs.webkit.org/show_bug.cgi?id=21927

        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it
        does not slow down JavaScript all the time

        Reviewed by Darin Adler and Kevin McCullough.

        * fast/profiler/anonymous-event-handler-expected.txt:
        * fast/profiler/anonymous-event-handler.html:
        * fast/profiler/anonymous-function-called-from-different-contexts-expected.txt:
        * fast/profiler/anonymous-function-called-from-different-contexts.html:
        * fast/profiler/anonymous-function-calls-built-in-functions-expected.txt:
        * fast/profiler/anonymous-function-calls-built-in-functions.html:
        * fast/profiler/anonymous-function-calls-eval-expected.txt:
        * fast/profiler/anonymous-function-calls-eval.html:
        * fast/profiler/apply-expected.txt:
        * fast/profiler/apply.html:
        * fast/profiler/built-in-function-calls-anonymous-expected.txt:
        * fast/profiler/built-in-function-calls-anonymous.html:
        * fast/profiler/built-in-function-calls-user-defined-function-expected.txt:
        * fast/profiler/built-in-function-calls-user-defined-function.html:
        * fast/profiler/call-expected.txt:
        * fast/profiler/call-nodelist-as-function-expected.txt:
        * fast/profiler/call-nodelist-as-function.html:
        * fast/profiler/call.html:
        * fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope-expected.txt:
        * fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope.html:
        * fast/profiler/compare-multiple-profiles-expected.txt:
        * fast/profiler/compare-multiple-profiles.html:
        * fast/profiler/constructor-expected.txt:
        * fast/profiler/constructor.html:
        * fast/profiler/dead-time-expected.txt:
        * fast/profiler/dead-time.html:
        * fast/profiler/document-dot-write-expected.txt:
        * fast/profiler/document-dot-write.html:
        * fast/profiler/event-handler-expected.txt:
        * fast/profiler/event-handler.html:
        * fast/profiler/execution-context-and-eval-on-same-line-expected.txt:
        * fast/profiler/execution-context-and-eval-on-same-line.html:
        * fast/profiler/heavy-view-expected.txt:
        * fast/profiler/heavy-view.html:
        * fast/profiler/inline-event-handler-expected.txt:
        * fast/profiler/inline-event-handler.html:
        * fast/profiler/many-calls-in-the-same-scope-expected.txt:
        * fast/profiler/many-calls-in-the-same-scope.html:
        * fast/profiler/multiple-and-different-scoped-anonymous-function-calls-expected.txt:
        * fast/profiler/multiple-and-different-scoped-anonymous-function-calls.html:
        * fast/profiler/multiple-and-different-scoped-function-calls-expected.txt:
        * fast/profiler/multiple-and-different-scoped-function-calls.html:
        * fast/profiler/multiple-frames-expected.txt:
        * fast/profiler/multiple-frames.html:
        * fast/profiler/nested-anonymous-functon-expected.txt:
        * fast/profiler/nested-anonymous-functon.html:
        * fast/profiler/nested-start-and-stop-profiler-expected.txt:
        * fast/profiler/nested-start-and-stop-profiler.html:
        * fast/profiler/no-execution-context-expected.txt:
        * fast/profiler/no-execution-context.html:
        * fast/profiler/one-execution-context-expected.txt:
        * fast/profiler/one-execution-context.html:
        * fast/profiler/profile-calls-in-included-file-expected.txt:
        * fast/profiler/profile-calls-in-included-file.html:
        * fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting-expected.txt:
        * fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting.html:
        * fast/profiler/profiling-from-a-nested-location-expected.txt:
        * fast/profiler/profiling-from-a-nested-location.html:
        * fast/profiler/resources/profiler-test-JS-resources.js:
        (endTest): Remove some whitespace.
        (insertGivenText): Hide the output of this method, sicne it is not important to the test.
        (insertNewText): Ditto.
        (printHeavyProfilesDataWithoutTime): Output plain text an not console.log.
        (printProfilesDataWithoutTime): Ditto.
        (printProfileNodeWithoutTime): Ditto.
        * fast/profiler/simple-event-call-expected.txt:
        * fast/profiler/simple-event-call.html:
        * fast/profiler/simple-no-level-change-expected.txt:
        * fast/profiler/simple-no-level-change.html:
        * fast/profiler/start-and-stop-profiler-multiple-times-expected.txt:
        * fast/profiler/start-and-stop-profiler-multiple-times.html:
        * fast/profiler/start-and-stop-profiling-in-the-same-function-expected.txt:
        * fast/profiler/start-and-stop-profiling-in-the-same-function.html:
        * fast/profiler/start-but-dont-stop-profiling-expected.txt:
        * fast/profiler/start-but-dont-stop-profiling.html:
        * fast/profiler/stop-profiling-after-setTimeout-expected.txt:
        * fast/profiler/stop-profiling-after-setTimeout.html:
        * fast/profiler/stop-then-function-call-expected.txt:
        * fast/profiler/stop-then-function-call.html:
        * fast/profiler/throw-exception-from-eval-expected.txt:
        * fast/profiler/throw-exception-from-eval.html:
        * fast/profiler/two-execution-contexts-expected.txt:
        * fast/profiler/two-execution-contexts.html:
        * fast/profiler/user-defined-function-calls-built-in-functions-expected.txt:
        * fast/profiler/user-defined-function-calls-built-in-functions.html:
        * fast/profiler/window-dot-eval-expected.txt:
        * fast/profiler/window-dot-eval.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@37933 268f45cc-cd09-0410-ab3c-d52691b4dbfc

119 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/profiler/anonymous-event-handler-expected.txt
LayoutTests/fast/profiler/anonymous-event-handler.html
LayoutTests/fast/profiler/anonymous-function-called-from-different-contexts-expected.txt
LayoutTests/fast/profiler/anonymous-function-called-from-different-contexts.html
LayoutTests/fast/profiler/anonymous-function-calls-built-in-functions-expected.txt
LayoutTests/fast/profiler/anonymous-function-calls-built-in-functions.html
LayoutTests/fast/profiler/anonymous-function-calls-eval-expected.txt
LayoutTests/fast/profiler/anonymous-function-calls-eval.html
LayoutTests/fast/profiler/apply-expected.txt
LayoutTests/fast/profiler/apply.html
LayoutTests/fast/profiler/built-in-function-calls-anonymous-expected.txt
LayoutTests/fast/profiler/built-in-function-calls-anonymous.html
LayoutTests/fast/profiler/built-in-function-calls-user-defined-function-expected.txt
LayoutTests/fast/profiler/built-in-function-calls-user-defined-function.html
LayoutTests/fast/profiler/call-expected.txt
LayoutTests/fast/profiler/call-nodelist-as-function-expected.txt
LayoutTests/fast/profiler/call-nodelist-as-function.html
LayoutTests/fast/profiler/call.html
LayoutTests/fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope-expected.txt
LayoutTests/fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope.html
LayoutTests/fast/profiler/compare-multiple-profiles-expected.txt
LayoutTests/fast/profiler/compare-multiple-profiles.html
LayoutTests/fast/profiler/constructor-expected.txt
LayoutTests/fast/profiler/constructor.html
LayoutTests/fast/profiler/dead-time-expected.txt
LayoutTests/fast/profiler/dead-time.html
LayoutTests/fast/profiler/document-dot-write-expected.txt
LayoutTests/fast/profiler/document-dot-write.html
LayoutTests/fast/profiler/event-handler-expected.txt
LayoutTests/fast/profiler/event-handler.html
LayoutTests/fast/profiler/execution-context-and-eval-on-same-line-expected.txt
LayoutTests/fast/profiler/execution-context-and-eval-on-same-line.html
LayoutTests/fast/profiler/heavy-view-expected.txt
LayoutTests/fast/profiler/heavy-view.html
LayoutTests/fast/profiler/inline-event-handler-expected.txt
LayoutTests/fast/profiler/inline-event-handler.html
LayoutTests/fast/profiler/many-calls-in-the-same-scope-expected.txt
LayoutTests/fast/profiler/many-calls-in-the-same-scope.html
LayoutTests/fast/profiler/multiple-and-different-scoped-anonymous-function-calls-expected.txt
LayoutTests/fast/profiler/multiple-and-different-scoped-anonymous-function-calls.html
LayoutTests/fast/profiler/multiple-and-different-scoped-function-calls-expected.txt
LayoutTests/fast/profiler/multiple-and-different-scoped-function-calls.html
LayoutTests/fast/profiler/multiple-frames-expected.txt
LayoutTests/fast/profiler/multiple-frames.html
LayoutTests/fast/profiler/nested-anonymous-functon-expected.txt
LayoutTests/fast/profiler/nested-anonymous-functon.html
LayoutTests/fast/profiler/nested-start-and-stop-profiler-expected.txt
LayoutTests/fast/profiler/nested-start-and-stop-profiler.html
LayoutTests/fast/profiler/no-execution-context-expected.txt
LayoutTests/fast/profiler/no-execution-context.html
LayoutTests/fast/profiler/one-execution-context-expected.txt
LayoutTests/fast/profiler/one-execution-context.html
LayoutTests/fast/profiler/profile-calls-in-included-file-expected.txt
LayoutTests/fast/profiler/profile-calls-in-included-file.html
LayoutTests/fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting-expected.txt
LayoutTests/fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting.html
LayoutTests/fast/profiler/profiling-from-a-nested-location-expected.txt
LayoutTests/fast/profiler/profiling-from-a-nested-location.html
LayoutTests/fast/profiler/resources/profiler-test-JS-resources.js
LayoutTests/fast/profiler/simple-event-call-expected.txt
LayoutTests/fast/profiler/simple-event-call.html
LayoutTests/fast/profiler/simple-no-level-change-expected.txt
LayoutTests/fast/profiler/simple-no-level-change.html
LayoutTests/fast/profiler/start-and-stop-profiler-multiple-times-expected.txt
LayoutTests/fast/profiler/start-and-stop-profiler-multiple-times.html
LayoutTests/fast/profiler/start-and-stop-profiling-in-the-same-function-expected.txt
LayoutTests/fast/profiler/start-and-stop-profiling-in-the-same-function.html
LayoutTests/fast/profiler/start-but-dont-stop-profiling-expected.txt
LayoutTests/fast/profiler/start-but-dont-stop-profiling.html
LayoutTests/fast/profiler/stop-profiling-after-setTimeout-expected.txt
LayoutTests/fast/profiler/stop-profiling-after-setTimeout.html
LayoutTests/fast/profiler/stop-then-function-call-expected.txt
LayoutTests/fast/profiler/stop-then-function-call.html
LayoutTests/fast/profiler/throw-exception-from-eval-expected.txt
LayoutTests/fast/profiler/throw-exception-from-eval.html
LayoutTests/fast/profiler/two-execution-contexts-expected.txt
LayoutTests/fast/profiler/two-execution-contexts.html
LayoutTests/fast/profiler/user-defined-function-calls-built-in-functions-expected.txt
LayoutTests/fast/profiler/user-defined-function-calls-built-in-functions.html
LayoutTests/fast/profiler/window-dot-eval-expected.txt
LayoutTests/fast/profiler/window-dot-eval.html
WebCore/ChangeLog
WebCore/English.lproj/localizedStrings.js
WebCore/WebCore.base.exp
WebCore/WebCore.vcproj/WebCore.vcproj
WebCore/bindings/js/JSDOMWindowBase.cpp
WebCore/inspector/InspectorController.cpp
WebCore/inspector/InspectorController.h
WebCore/inspector/front-end/Images/debuggingButtons.png [deleted file]
WebCore/inspector/front-end/Images/enableButtons.png [new file with mode: 0644]
WebCore/inspector/front-end/Images/profilesSilhouette.png [new file with mode: 0644]
WebCore/inspector/front-end/Images/scriptsSilhouette.png [new file with mode: 0644]
WebCore/inspector/front-end/PanelEnablerView.js [new file with mode: 0644]
WebCore/inspector/front-end/ProfilesPanel.js
WebCore/inspector/front-end/ScriptsPanel.js
WebCore/inspector/front-end/View.js
WebCore/inspector/front-end/WebKit.qrc
WebCore/inspector/front-end/inspector.css
WebCore/inspector/front-end/inspector.html
WebCore/inspector/front-end/inspector.js
WebCore/page/Console.cpp
WebCore/page/Settings.cpp
WebCore/page/Settings.h
WebKit/mac/ChangeLog
WebKit/mac/WebInspector/WebInspector.h
WebKit/mac/WebInspector/WebInspector.mm
WebKit/win/ChangeLog
WebKit/win/WebInspector.cpp
WebKit/win/WebInspector.h
WebKitTools/ChangeLog
WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj
WebKitTools/DumpRenderTree/LayoutTestController.cpp
WebKitTools/DumpRenderTree/LayoutTestController.h
WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
WebKitTools/DumpRenderTree/mac/DumpRenderTree.mm
WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm
WebKitTools/DumpRenderTree/win/DumpRenderTree.cpp
WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp

index ff4f2b5..cf86467 100644 (file)
@@ -1,3 +1,102 @@
+2008-10-28  Timothy Hatcher  <timothy@apple.com>
+
+        Update profiler tests to opt-in to profiling and clean up the output.
+
+        https://bugs.webkit.org/show_bug.cgi?id=21927
+
+        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it
+        does not slow down JavaScript all the time
+
+        Reviewed by Darin Adler and Kevin McCullough.
+
+        * fast/profiler/anonymous-event-handler-expected.txt:
+        * fast/profiler/anonymous-event-handler.html:
+        * fast/profiler/anonymous-function-called-from-different-contexts-expected.txt:
+        * fast/profiler/anonymous-function-called-from-different-contexts.html:
+        * fast/profiler/anonymous-function-calls-built-in-functions-expected.txt:
+        * fast/profiler/anonymous-function-calls-built-in-functions.html:
+        * fast/profiler/anonymous-function-calls-eval-expected.txt:
+        * fast/profiler/anonymous-function-calls-eval.html:
+        * fast/profiler/apply-expected.txt:
+        * fast/profiler/apply.html:
+        * fast/profiler/built-in-function-calls-anonymous-expected.txt:
+        * fast/profiler/built-in-function-calls-anonymous.html:
+        * fast/profiler/built-in-function-calls-user-defined-function-expected.txt:
+        * fast/profiler/built-in-function-calls-user-defined-function.html:
+        * fast/profiler/call-expected.txt:
+        * fast/profiler/call-nodelist-as-function-expected.txt:
+        * fast/profiler/call-nodelist-as-function.html:
+        * fast/profiler/call.html:
+        * fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope-expected.txt:
+        * fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope.html:
+        * fast/profiler/compare-multiple-profiles-expected.txt:
+        * fast/profiler/compare-multiple-profiles.html:
+        * fast/profiler/constructor-expected.txt:
+        * fast/profiler/constructor.html:
+        * fast/profiler/dead-time-expected.txt:
+        * fast/profiler/dead-time.html:
+        * fast/profiler/document-dot-write-expected.txt:
+        * fast/profiler/document-dot-write.html:
+        * fast/profiler/event-handler-expected.txt:
+        * fast/profiler/event-handler.html:
+        * fast/profiler/execution-context-and-eval-on-same-line-expected.txt:
+        * fast/profiler/execution-context-and-eval-on-same-line.html:
+        * fast/profiler/heavy-view-expected.txt:
+        * fast/profiler/heavy-view.html:
+        * fast/profiler/inline-event-handler-expected.txt:
+        * fast/profiler/inline-event-handler.html:
+        * fast/profiler/many-calls-in-the-same-scope-expected.txt:
+        * fast/profiler/many-calls-in-the-same-scope.html:
+        * fast/profiler/multiple-and-different-scoped-anonymous-function-calls-expected.txt:
+        * fast/profiler/multiple-and-different-scoped-anonymous-function-calls.html:
+        * fast/profiler/multiple-and-different-scoped-function-calls-expected.txt:
+        * fast/profiler/multiple-and-different-scoped-function-calls.html:
+        * fast/profiler/multiple-frames-expected.txt:
+        * fast/profiler/multiple-frames.html:
+        * fast/profiler/nested-anonymous-functon-expected.txt:
+        * fast/profiler/nested-anonymous-functon.html:
+        * fast/profiler/nested-start-and-stop-profiler-expected.txt:
+        * fast/profiler/nested-start-and-stop-profiler.html:
+        * fast/profiler/no-execution-context-expected.txt:
+        * fast/profiler/no-execution-context.html:
+        * fast/profiler/one-execution-context-expected.txt:
+        * fast/profiler/one-execution-context.html:
+        * fast/profiler/profile-calls-in-included-file-expected.txt:
+        * fast/profiler/profile-calls-in-included-file.html:
+        * fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting-expected.txt:
+        * fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting.html:
+        * fast/profiler/profiling-from-a-nested-location-expected.txt:
+        * fast/profiler/profiling-from-a-nested-location.html:
+        * fast/profiler/resources/profiler-test-JS-resources.js:
+        (endTest): Remove some whitespace.
+        (insertGivenText): Hide the output of this method, sicne it is not important to the test.
+        (insertNewText): Ditto.
+        (printHeavyProfilesDataWithoutTime): Output plain text an not console.log.
+        (printProfilesDataWithoutTime): Ditto.
+        (printProfileNodeWithoutTime): Ditto.
+        * fast/profiler/simple-event-call-expected.txt:
+        * fast/profiler/simple-event-call.html:
+        * fast/profiler/simple-no-level-change-expected.txt:
+        * fast/profiler/simple-no-level-change.html:
+        * fast/profiler/start-and-stop-profiler-multiple-times-expected.txt:
+        * fast/profiler/start-and-stop-profiler-multiple-times.html:
+        * fast/profiler/start-and-stop-profiling-in-the-same-function-expected.txt:
+        * fast/profiler/start-and-stop-profiling-in-the-same-function.html:
+        * fast/profiler/start-but-dont-stop-profiling-expected.txt:
+        * fast/profiler/start-but-dont-stop-profiling.html:
+        * fast/profiler/stop-profiling-after-setTimeout-expected.txt:
+        * fast/profiler/stop-profiling-after-setTimeout.html:
+        * fast/profiler/stop-then-function-call-expected.txt:
+        * fast/profiler/stop-then-function-call.html:
+        * fast/profiler/throw-exception-from-eval-expected.txt:
+        * fast/profiler/throw-exception-from-eval.html:
+        * fast/profiler/two-execution-contexts-expected.txt:
+        * fast/profiler/two-execution-contexts.html:
+        * fast/profiler/user-defined-function-calls-built-in-functions-expected.txt:
+        * fast/profiler/user-defined-function-calls-built-in-functions.html:
+        * fast/profiler/window-dot-eval-expected.txt:
+        * fast/profiler/window-dot-eval.html:
+
 2008-10-28  Pierre-Olivier Latour  <pol@apple.com>
 
         Reviewed by Dan Bernstein.
index d06dabb..4382e88 100644 (file)
@@ -1,20 +1,19 @@
-CONSOLE MESSAGE: line 59: Anonymous event handler
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) anonymous-event-handler.html 8
-CONSOLE MESSAGE: line 75:   (program) anonymous-event-handler.html 4
-CONSOLE MESSAGE: line 75:   onload anonymous-event-handler.html 23
-CONSOLE MESSAGE: line 75:    testStart anonymous-event-handler.html 10
-CONSOLE MESSAGE: line 75:     getElementById  0
-CONSOLE MESSAGE: line 75:     click  0
-CONSOLE MESSAGE: line 75:      (anonymous function) anonymous-event-handler.html 12
-CONSOLE MESSAGE: line 75:       insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:        createElement  0
-CONSOLE MESSAGE: line 75:        createTextNode  0
-CONSOLE MESSAGE: line 75:        appendChild  0
-CONSOLE MESSAGE: line 75:        getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has an anonymous event handler. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. It should show the anonymous function at the same level as the onload handler. 
-This is inserted Text
+
+Profile title: Anonymous event handler
+Thread_1 (no file) (line 0)
+   startTest anonymous-event-handler.html (line 11)
+      getElementById (no file) (line 0)
+      click (no file) (line 0)
+         (anonymous function) anonymous-event-handler.html (line 15)
+            insertNewText profiler-test-JS-resources.js (line 17)
+               createElement (no file) (line 0)
+               createTextNode (no file) (line 0)
+               appendChild (no file) (line 0)
+               getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index ecfdd7b..3a86628 100644 (file)
@@ -2,25 +2,28 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Anonymous event handler");
-function testStart()
+function startTest()
 {
+    console.profile("Anonymous event handler");
+
     var buttonWithAnonymousHandler = document.getElementById("buttonWithAnAnonymousEventHandler")
     buttonWithAnonymousHandler.onclick = function () {
         insertNewText();
     }
+
     buttonWithAnonymousHandler.click();
 
     endTest();
 }
-
 </script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page has an anonymous event handler.
 <br>
 <br>
@@ -30,4 +33,4 @@ handler.
 <input type="button" id="buttonWithAnAnonymousEventHandler" value="Button with an anonymous event handler">
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 0235b8a..edce7d7 100644 (file)
@@ -1,28 +1,25 @@
-CONSOLE MESSAGE: line 59: Same anonymous function called from different contexts
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) anonymous-function-called-from-different-contexts.html 8
-CONSOLE MESSAGE: line 75:   (program) anonymous-function-called-from-different-contexts.html 4
-CONSOLE MESSAGE: line 75:   onload anonymous-function-called-from-different-contexts.html 19
-CONSOLE MESSAGE: line 75:    startTest anonymous-function-called-from-different-contexts.html 10
-CONSOLE MESSAGE: line 75:     (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:      insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:       createElement  0
-CONSOLE MESSAGE: line 75:       createTextNode  0
-CONSOLE MESSAGE: line 75:       appendChild  0
-CONSOLE MESSAGE: line 75:       getElementById  0
-CONSOLE MESSAGE: line 75:     eval  0
-CONSOLE MESSAGE: line 75:      (program)  1
-CONSOLE MESSAGE: line 75:       (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:        insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:         createElement  0
-CONSOLE MESSAGE: line 75:         createTextNode  0
-CONSOLE MESSAGE: line 75:         appendChild  0
-CONSOLE MESSAGE: line 75:         getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript calls an anonymous function from different contexts. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. Beneath onload and startTest it should show three children, an anonymous function, script context, and the endTest call.
-This is inserted Text
 
-This is inserted Text
+Profile title: Same anonymous function called from different contexts
+Thread_1 (no file) (line 0)
+   startTest anonymous-function-called-from-different-contexts.html (line 11)
+      (anonymous function) profiler-test-JS-resources.js (line 29)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      eval (no file) (line 0)
+         (program) (no file) (line 1)
+            (anonymous function) profiler-test-JS-resources.js (line 29)
+               insertNewText profiler-test-JS-resources.js (line 17)
+                  createElement (no file) (line 0)
+                  createTextNode (no file) (line 0)
+                  appendChild (no file) (line 0)
+                  getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index 8049825..79f1108 100644 (file)
@@ -2,15 +2,18 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Same anonymous function called from different contexts");
 function startTest()
 {
+    console.profile("Same anonymous function called from different contexts");
+
     anonymousFunction();
     eval("anonymousFunction()");
-    
+
     endTest();
 }
 </script>
@@ -25,4 +28,4 @@ the profile.  Beneath onload and startTest it should show three children, an
 anonymous function, script context, and the endTest call.
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 8edd9ae..adfdc9b 100644 (file)
@@ -1,18 +1,17 @@
-CONSOLE MESSAGE: line 59: Anonymous function calls built-in functions
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) anonymous-function-calls-built-in-functions.html 8
-CONSOLE MESSAGE: line 75:   (program) anonymous-function-calls-built-in-functions.html 4
-CONSOLE MESSAGE: line 75:   onload anonymous-function-calls-built-in-functions.html 17
-CONSOLE MESSAGE: line 75:    startTest anonymous-function-calls-built-in-functions.html 10
-CONSOLE MESSAGE: line 75:     (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:      insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:       createElement  0
-CONSOLE MESSAGE: line 75:       createTextNode  0
-CONSOLE MESSAGE: line 75:       appendChild  0
-CONSOLE MESSAGE: line 75:       getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has an anonymous JavaScript function that calls built-in functions. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. Beneath onload and startTest it should show three children, an anonymous function, script context, and the endTest call.
-This is inserted Text
+
+Profile title: Anonymous function calls built-in functions
+Thread_1 (no file) (line 0)
+   startTest anonymous-function-calls-built-in-functions.html (line 11)
+      (anonymous function) profiler-test-JS-resources.js (line 29)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index a4d0999..848c001 100644 (file)
@@ -2,12 +2,14 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Anonymous function calls built-in functions");
 function startTest()
 {
+    console.profile("Anonymous function calls built-in functions");
     anonymousFunction();
     endTest();
 }
@@ -23,4 +25,4 @@ the profile.  Beneath onload and startTest it should show three children, an
 anonymous function, script context, and the endTest call.
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 5414350..950cd1c 100644 (file)
@@ -1,20 +1,19 @@
-CONSOLE MESSAGE: line 59: Anonymous function calles eval
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) anonymous-function-calls-eval.html 8
-CONSOLE MESSAGE: line 75:   (program) anonymous-function-calls-eval.html 4
-CONSOLE MESSAGE: line 75:   onload anonymous-function-calls-eval.html 21
-CONSOLE MESSAGE: line 75:    startTest anonymous-function-calls-eval.html 10
-CONSOLE MESSAGE: line 75:     (anonymous function) anonymous-function-calls-eval.html 11
-CONSOLE MESSAGE: line 75:      eval  0
-CONSOLE MESSAGE: line 75:       (program)  1
-CONSOLE MESSAGE: line 75:        insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:         createElement  0
-CONSOLE MESSAGE: line 75:         createTextNode  0
-CONSOLE MESSAGE: line 75:         appendChild  0
-CONSOLE MESSAGE: line 75:         getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript calls an anonymous function which calls eval(). 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. Beneath onload and startTest it should show an (anonymous function) which has a (program) child.
-This is inserted Text
+
+Profile title: Anonymous function calles eval
+Thread_1 (no file) (line 0)
+   startTest anonymous-function-calls-eval.html (line 11)
+      (anonymous function) anonymous-function-calls-eval.html (line 14)
+         eval (no file) (line 0)
+            (program) (no file) (line 1)
+               insertNewText profiler-test-JS-resources.js (line 17)
+                  createElement (no file) (line 0)
+                  createTextNode (no file) (line 0)
+                  appendChild (no file) (line 0)
+                  getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index e6d8a6b..9cb5c4b 100644 (file)
@@ -2,12 +2,15 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Anonymous function calles eval");
 function startTest()
 {
+    console.profile("Anonymous function calles eval");
+
     var variableThatPointsToAnAnonymousFunction = function() {
         eval("insertNewText()");
     }
index 37bc866..c1c56c1 100644 (file)
@@ -1,15 +1,14 @@
-CONSOLE MESSAGE: line 59: Using the apply() method
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) apply.html 8
-CONSOLE MESSAGE: line 75:   (program) apply.html 4
-CONSOLE MESSAGE: line 75:   onload apply.html 29
-CONSOLE MESSAGE: line 75:    startTest apply.html 10
-CONSOLE MESSAGE: line 75:     fakeObject apply.html 16
-CONSOLE MESSAGE: line 75:      apply  0
-CONSOLE MESSAGE: line 75:       fakeInteriorFunction apply.html 22
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript has a call to apply() in it. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a call to fakeInteriorFunction() and a call to apply().
 
+Profile title: Using the apply() method
+Thread_1 (no file) (line 0)
+   startTest apply.html (line 11)
+      fakeObject apply.html (line 18)
+         apply (no file) (line 0)
+            fakeInteriorFunction apply.html (line 24)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index d3bd9ea..fd03a84 100644 (file)
@@ -2,12 +2,14 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Using the apply() method");
 function startTest()
 {
+    console.profile("Using the apply() method");
     var myObject = new fakeObject(1, 2);
     endTest();
 }
index ba422b9..6af80ca 100644 (file)
@@ -1,15 +1,15 @@
-CONSOLE MESSAGE: line 59: Built-in function calls an anonymous function
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) built-in-function-calls-anonymous.html 8
-CONSOLE MESSAGE: line 75:   (program) built-in-function-calls-anonymous.html 4
-CONSOLE MESSAGE: line 75:   onload built-in-function-calls-anonymous.html 22
-CONSOLE MESSAGE: line 75:    testStart built-in-function-calls-anonymous.html 10
-CONSOLE MESSAGE: line 75:     Array  0
-CONSOLE MESSAGE: line 75:     map  0
-CONSOLE MESSAGE: line 75:      (anonymous function) built-in-function-calls-anonymous.html 11
-CONSOLE MESSAGE: line 75:       arrayOperatorFunction profiler-test-JS-resources.js 25
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page uses a built-in function to call an anonymous function. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile map() should be the sibling of an (anonymous function) which has arrayOperatorFunction() as a child.
+
+Profile title: Built-in function calls an anonymous function
+Thread_1 (no file) (line 0)
+   startTest built-in-function-calls-anonymous.html (line 11)
+      Array (no file) (line 0)
+      map (no file) (line 0)
+         (anonymous function) built-in-function-calls-anonymous.html (line 14)
+            arrayOperatorFunction profiler-test-JS-resources.js (line 25)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index d50188f..fb26119 100644 (file)
@@ -2,29 +2,34 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Built-in function calls an anonymous function");
-function testStart()
+function startTest()
 {
+    console.profile("Built-in function calls an anonymous function");
+
     var myFunction = function(arrayElement) {
         return arrayOperatorFunction(arrayElement);
     }
 
     var myArray = new Array (0, 1, 2);
     myArray.map(myFunction);
+
     endTest();
 }
 </script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page uses a built-in function to call an anonymous function.
 <br>
 <br>
 To run this test manually, load it in the browser then load the WebInspector and look at
 the profile.  In the profile map() should be the sibling of an (anonymous function)
 which has arrayOperatorFunction() as a child.
+<div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 48266c9..24b85a5 100644 (file)
@@ -1,14 +1,14 @@
-CONSOLE MESSAGE: line 59: Built-in function calls a user defined function
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) built-in-function-calls-user-defined-function.html 8
-CONSOLE MESSAGE: line 75:   (program) built-in-function-calls-user-defined-function.html 4
-CONSOLE MESSAGE: line 75:   onload built-in-function-calls-user-defined-function.html 18
-CONSOLE MESSAGE: line 75:    testStart built-in-function-calls-user-defined-function.html 10
-CONSOLE MESSAGE: line 75:     Array  0
-CONSOLE MESSAGE: line 75:     map  0
-CONSOLE MESSAGE: line 75:      arrayOperatorFunction profiler-test-JS-resources.js 25
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page uses a built-in function to call a user defined function. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile map() should have arrayOperatorFunction() as a child.
+
+Profile title: Built-in function calls a user defined function
+Thread_1 (no file) (line 0)
+   startTest built-in-function-calls-user-defined-function.html (line 11)
+      Array (no file) (line 0)
+      map (no file) (line 0)
+         arrayOperatorFunction profiler-test-JS-resources.js (line 25)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index 7dd4735..600abb3 100644 (file)
@@ -2,24 +2,29 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Built-in function calls a user defined function");
-function testStart()
+function startTest()
 {
+    console.profile("Built-in function calls a user defined function");
+
     var myArray = new Array (0, 1, 2);
     myArray.map(arrayOperatorFunction);
+
     endTest();
 }
 </script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page uses a built-in function to call a user defined function.
 <br>
 <br>
 To run this test manually, load it in the browser then load the WebInspector and look at
 the profile.  In the profile map() should have arrayOperatorFunction() as a child.
+<div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 4a50521..6acb043 100644 (file)
@@ -1,15 +1,14 @@
-CONSOLE MESSAGE: line 59: Using the call() method
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) call.html 8
-CONSOLE MESSAGE: line 75:   (program) call.html 4
-CONSOLE MESSAGE: line 75:   onload call.html 29
-CONSOLE MESSAGE: line 75:    startTest call.html 10
-CONSOLE MESSAGE: line 75:     fakeObject call.html 16
-CONSOLE MESSAGE: line 75:      call  0
-CONSOLE MESSAGE: line 75:       fakeInteriorFunction call.html 22
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript has a call to call() in it. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a call to fakeObject() with call() as its child and a fakeInteriorFunction() as call()'s child.
 
+Profile title: Using the call() method
+Thread_1 (no file) (line 0)
+   startTest call.html (line 11)
+      fakeObject call.html (line 20)
+         call (no file) (line 0)
+            fakeInteriorFunction call.html (line 26)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index b13fb86..024e8a8 100644 (file)
@@ -1,14 +1,13 @@
-CONSOLE MESSAGE: line 59: Call NodeList as function
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) call-nodelist-as-function.html 8
-CONSOLE MESSAGE: line 75:   (program) call-nodelist-as-function.html 4
-CONSOLE MESSAGE: line 75:   onload call-nodelist-as-function.html 20
-CONSOLE MESSAGE: line 75:    testStart call-nodelist-as-function.html 10
-CONSOLE MESSAGE: line 75:     getElementsByTagName  0
-CONSOLE MESSAGE: line 75:     (NodeList object)  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page calls a NodeList as a function (e.g., list(0)). 
 
 To run this test manually, load it in a debug build in the browser. You should see a (NodeList object) entry in the profile.
 
+Profile title: Call NodeList as function
+Thread_1 (no file) (line 0)
+   startTest call-nodelist-as-function.html (line 11)
+      getElementsByTagName (no file) (line 0)
+      (NodeList object) (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index f3aafae..c6ab92b 100644 (file)
@@ -2,12 +2,15 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Call NodeList as function");
-function testStart()
+function startTest()
 {
+    console.profile("Call NodeList as function");
+
     var brs = document.getElementsByTagName("br");
     var br0 = brs(0);
 
@@ -17,7 +20,7 @@ function testStart()
 </script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page calls a NodeList as a function (e.g., <code>list(0)</code>).
 <br>
 <br>
index 1c2957d..186122e 100644 (file)
@@ -2,13 +2,17 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Using the call() method");
 function startTest()
 {
+    console.profile("Using the call() method");
+
     var myObject = new fakeObject(1, 2);
+
     endTest();
 }
 
@@ -22,7 +26,6 @@ function fakeInteriorFunction(y)
 {
     this.y = y;
 }
-
 </script>
 </head>
 
index 2b12257..4a7d5f1 100644 (file)
@@ -1,11 +1,13 @@
-CONSOLE MESSAGE: line 59: Calling the same function where the profile started from another function
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  indirection calling-the-function-that-started-the-profiler-from-another-scope.html 16
-CONSOLE MESSAGE: line 75:   functionWichStartsAndStopsTheProfiler calling-the-function-that-started-the-profiler-from-another-scope.html 22
-CONSOLE MESSAGE: line 75:  functionWichStartsAndStopsTheProfiler calling-the-function-that-started-the-profiler-from-another-scope.html 22
-CONSOLE MESSAGE: line 75:  endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript starts profiling from within a function which is then called later from another context. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profiler you should see a call to indirection() and functionWichStartsAndStopsTheProfiler()
 
+Profile title: Calling the same function where the profile started from another function
+Thread_1 (no file) (line 0)
+   indirection calling-the-function-that-started-the-profiler-from-another-scope.html (line 18)
+      functionWichStartsAndStopsTheProfiler calling-the-function-that-started-the-profiler-from-another-scope.html (line 24)
+   functionWichStartsAndStopsTheProfiler calling-the-function-that-started-the-profiler-from-another-scope.html (line 24)
+   endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index 6329d32..eabab6e 100644 (file)
@@ -2,8 +2,10 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
 function startTest()
 {
index 97131f9..1100470 100644 (file)
@@ -1,16 +1,19 @@
-CONSOLE MESSAGE: line 59: Test
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) compare-multiple-profiles.html 20
-CONSOLE MESSAGE: line 75:   test compare-multiple-profiles.html 9
-CONSOLE MESSAGE: line 75:    test2 compare-multiple-profiles.html 15
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Test
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) compare-multiple-profiles.html 24
-CONSOLE MESSAGE: line 75:   test compare-multiple-profiles.html 9
-CONSOLE MESSAGE: line 75:    test2 compare-multiple-profiles.html 15
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has multiple profiles with the same name. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. It should not crash or hang and there should be multiple runs of the same named profile.
 
+Profile title: Test
+Thread_1 (no file) (line 0)
+   startTest compare-multiple-profiles.html (line 23)
+      test compare-multiple-profiles.html (line 11)
+         test2 compare-multiple-profiles.html (line 17)
+   (idle) (no file) (line 0)
+
+Profile title: Test
+Thread_1 (no file) (line 0)
+   startTest compare-multiple-profiles.html (line 23)
+      test compare-multiple-profiles.html (line 11)
+         test2 compare-multiple-profiles.html (line 17)
+   (idle) (no file) (line 0)
+
+
index 347e4d2..c8c4812 100644 (file)
@@ -2,8 +2,10 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
 var j = 0;
 function test(len) {
@@ -17,19 +19,22 @@ function test2(len) {
         --j;
 }
 
-console.profile("Test");
-test(100);
-console.profileEnd("Test");
+function startTest()
+{
+    console.profile("Test");
+    test(100);
+    console.profileEnd("Test");
 
-console.profile("Test");
-test(1000);
-console.profileEnd("Test");
+    console.profile("Test");
+    test(1000);
+    console.profileEnd("Test");
 
-printProfilesDataWithoutTime();
+    printProfilesDataWithoutTime();
+}
 </script>
 </head>
 
-<body>
+<body onload="startTest()">
 This page has multiple profiles with the same name.
 <br>
 <br>
index 4af5343..e8b4ea6 100644 (file)
@@ -1,13 +1,13 @@
-CONSOLE MESSAGE: line 59: Using a constructor.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) constructor.html 8
-CONSOLE MESSAGE: line 75:   (program) constructor.html 4
-CONSOLE MESSAGE: line 75:   onload constructor.html 23
-CONSOLE MESSAGE: line 75:    startTest constructor.html 10
-CONSOLE MESSAGE: line 75:     fakeObject constructor.html 16
-CONSOLE MESSAGE: line 75:      Array  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript has a call to new() in it. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a call to fakeObject() and Array() in it.
+
+Profile title: Using a constructor.
+Thread_1 (no file) (line 0)
+   startTest constructor.html (line 11)
+      fakeObject constructor.html (line 20)
+         Array (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index 6273cd8..0dd38bc 100644 (file)
@@ -2,13 +2,17 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Using a constructor.");
 function startTest()
 {
+    console.profile("Using a constructor.");
+
     var myObject = new fakeObject(1, 2);
+
     endTest();
 }
 
@@ -27,5 +31,6 @@ This page's JavaScript has a call to new() in it.
 To run this test manually, load it in the browser then load the WebInspector and look at
 the profile.  In the profile there should be a call to fakeObject() and Array()
 in it.
+<div id="output"></div>
 </body>
 </html>
index 725734a..12aeded 100644 (file)
@@ -1,14 +1,14 @@
-CONSOLE MESSAGE: line 59: Dead time in profile.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) dead-time.html 10
-CONSOLE MESSAGE: line 75:   (program) dead-time.html 4
-CONSOLE MESSAGE: line 75:   onload dead-time.html 19
-CONSOLE MESSAGE: line 75:    startTest dead-time.html 12
-CONSOLE MESSAGE: line 75:     setTimeout  0
-CONSOLE MESSAGE: line 75:   (program) dead-time.html 1
-CONSOLE MESSAGE: line 75:    endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript Has some dead time in the profile. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a large amount of the % spent in (non-JavaScript).
 
+Profile title: Dead time in profile.
+Thread_1 (no file) (line 0)
+   onload dead-time.html (line 20)
+      startTest dead-time.html (line 12)
+         setTimeout (no file) (line 0)
+   (program) dead-time.html (line 1)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index 985d8cb..236479d 100644 (file)
@@ -5,11 +5,12 @@
 if (window.layoutTestController) {
     layoutTestController.dumpAsText();
     layoutTestController.waitUntilDone();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
 }
 
-console.profile("Dead time in profile.");
 function startTest()
 {
+    console.profile("Dead time in profile.");
     setTimeout("endTest()", 1234);
 }
 
@@ -25,4 +26,4 @@ the profile.  In the profile there should be a large amount of the % spent in
 (non-JavaScript).
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index d133850..d990d14 100644 (file)
@@ -1,10 +1,9 @@
-CONSOLE MESSAGE: line 59: Call Document.write()
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) document-dot-write.html 8
-CONSOLE MESSAGE: line 75:   write  0
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
-This was a triumph. This page calls document.write(). 
 
-To run this test manually, load it in the browser then load the WebInspector and look at the profile. If there is a profile it should show write().
+Profile title: Call Document.write()
+Thread_1 (no file) (line 0)
+   startTest document-dot-write.html (line 11)
+      write (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
 
index 9ddd503..f3d6b00 100644 (file)
@@ -2,21 +2,27 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Call Document.write()");
-document.write("<div>This was a triumph.<// div>");
-endTest();
+function startTest()
+{
+    console.profile("Call Document.write()");
+
+    document.write("<div id=\"output\"></div>");
+
+    endTest();
+}
 </script>
 </head>
 
-<body>
+<body onload="startTest()">
 This page calls document.write().
 <br>
 <br>
 To run this test manually, load it in the browser then load the WebInspector and look at
 the profile.  If there is a profile it should show write().
-<div id="output"></div>
 </body>
 </html>
index fb3fc2d..f8d43a2 100644 (file)
@@ -1,20 +1,19 @@
-CONSOLE MESSAGE: line 59: Event handler
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) event-handler.html 8
-CONSOLE MESSAGE: line 75:   (program) event-handler.html 4
-CONSOLE MESSAGE: line 75:   onload event-handler.html 20
-CONSOLE MESSAGE: line 75:    testStart event-handler.html 10
-CONSOLE MESSAGE: line 75:     getElementById  0
-CONSOLE MESSAGE: line 75:     addEventListener  0
-CONSOLE MESSAGE: line 75:     click  0
-CONSOLE MESSAGE: line 75:      insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:       createElement  0
-CONSOLE MESSAGE: line 75:       createTextNode  0
-CONSOLE MESSAGE: line 75:       appendChild  0
-CONSOLE MESSAGE: line 75:       getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has an event handler. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile insertnewText() should be a sibling to onload(). 
-This is inserted Text
+
+Profile title: Event handler
+Thread_1 (no file) (line 0)
+   startTest event-handler.html (line 11)
+      getElementById (no file) (line 0)
+      addEventListener (no file) (line 0)
+      click (no file) (line 0)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index e240d34..0eadd91 100644 (file)
@@ -2,14 +2,17 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Event handler");
-function testStart()
+function startTest()
 {    
+    console.profile("Event handler");
+
     var myButton = document.getElementById("buttonWithAnEventListener");
-    myButton.addEventListener('click', insertNewText, false);
+    myButton.addEventListener("click", insertNewText, false);
     myButton.click();
 
     endTest();
@@ -17,7 +20,7 @@ function testStart()
 </script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page has an event handler.
 <br>
 <br>
@@ -26,4 +29,4 @@ the profile.  In the profile insertnewText() should be a sibling to onload().
 <input type="button" id="buttonWithAnEventListener" value="Button with an event listener">
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 9918131..cfabe32 100644 (file)
@@ -1,21 +1,17 @@
-CONSOLE MESSAGE: line 59: Two Execution Contexts on the same line
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) execution-context-and-eval-on-same-line.html 8
-CONSOLE MESSAGE: line 75:   (program) execution-context-and-eval-on-same-line.html 4
-CONSOLE MESSAGE: line 75:   (program) execution-context-and-eval-on-same-line.html 15
-CONSOLE MESSAGE: line 75:    eval  0
-CONSOLE MESSAGE: line 75:     (program)  1
-CONSOLE MESSAGE: line 75:   onload execution-context-and-eval-on-same-line.html 18
-CONSOLE MESSAGE: line 75:    testStart execution-context-and-eval-on-same-line.html 10
-CONSOLE MESSAGE: line 75:     evalFunction  1
-CONSOLE MESSAGE: line 75:      insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:       createElement  0
-CONSOLE MESSAGE: line 75:       createTextNode  0
-CONSOLE MESSAGE: line 75:       appendChild  0
-CONSOLE MESSAGE: line 75:       getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has a call to eval and a script tag on the same line. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be multiple (program) elements and one that represents the eval().
-This is inserted Text
+
+Profile title: Two Execution Contexts on the same line
+Thread_1 (no file) (line 0)
+   startTest execution-context-and-eval-on-same-line.html (line 11)
+      evalFunction (no file) (line 1)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index ea5e45b..92aa32d 100644 (file)
@@ -2,20 +2,26 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Two Execution Contexts on the same line");
-function testStart()
+function startTest()
 {
+    console.profile("Two Execution Contexts on the same line");
+
     evalFunction();
+
     endTest();
 }
 </script>
-<script> eval("function evalFunction() { insertNewText(); }");</script>
+<script>
+eval("function evalFunction() { insertNewText(); }");
+</script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page has a call to eval and a script tag on the same line.
 <br>
 <br>
@@ -24,4 +30,4 @@ the profile.  In the profile there should be multiple (program) elements and
 one that represents the eval().
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 7ecc559..d9c03c1 100644 (file)
@@ -1,65 +1,51 @@
-CONSOLE MESSAGE: line 50: Heavy View Test
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) heavy-view.html 4
-CONSOLE MESSAGE: line 75:   (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:  foo heavy-view.html 49
-CONSOLE MESSAGE: line 75:   c heavy-view.html 28
-CONSOLE MESSAGE: line 75:    foo heavy-view.html 49
-CONSOLE MESSAGE: line 75:     b heavy-view.html 22
-CONSOLE MESSAGE: line 75:      a heavy-view.html 11
-CONSOLE MESSAGE: line 75:       onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:        (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:   b heavy-view.html 22
-CONSOLE MESSAGE: line 75:    a heavy-view.html 11
-CONSOLE MESSAGE: line 75:     onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:      (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:    g heavy-view.html 43
-CONSOLE MESSAGE: line 75:     a heavy-view.html 11
-CONSOLE MESSAGE: line 75:      onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:       (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:   a heavy-view.html 11
-CONSOLE MESSAGE: line 75:    onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:     (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:   e heavy-view.html 38
-CONSOLE MESSAGE: line 75:    d heavy-view.html 33
-CONSOLE MESSAGE: line 75:     a heavy-view.html 11
-CONSOLE MESSAGE: line 75:      onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:       (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:  c heavy-view.html 28
-CONSOLE MESSAGE: line 75:   foo heavy-view.html 49
-CONSOLE MESSAGE: line 75:    b heavy-view.html 22
-CONSOLE MESSAGE: line 75:     a heavy-view.html 11
-CONSOLE MESSAGE: line 75:      onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:       (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:  b heavy-view.html 22
-CONSOLE MESSAGE: line 75:   a heavy-view.html 11
-CONSOLE MESSAGE: line 75:    onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:     (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:   g heavy-view.html 43
-CONSOLE MESSAGE: line 75:    a heavy-view.html 11
-CONSOLE MESSAGE: line 75:     onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:      (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:  e heavy-view.html 38
-CONSOLE MESSAGE: line 75:   d heavy-view.html 33
-CONSOLE MESSAGE: line 75:    a heavy-view.html 11
-CONSOLE MESSAGE: line 75:     onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:      (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:  d heavy-view.html 33
-CONSOLE MESSAGE: line 75:   a heavy-view.html 11
-CONSOLE MESSAGE: line 75:    onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:     (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:  g heavy-view.html 43
-CONSOLE MESSAGE: line 75:   a heavy-view.html 11
-CONSOLE MESSAGE: line 75:    onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:     (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:  a heavy-view.html 11
-CONSOLE MESSAGE: line 75:   onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:    (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:  onload heavy-view.html 59
-CONSOLE MESSAGE: line 75:   (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:  (program) heavy-view.html 8
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has several functions calling each other in a way that exposes interesting edge cases related to the Heavy view in the profiler. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile in Heavy view.
 
+Profile title: Heavy View Test
+Thread_1 (no file) (line 0)
+   foo heavy-view.html (line 57)
+      c heavy-view.html (line 36)
+         foo heavy-view.html (line 57)
+            b heavy-view.html (line 30)
+               a heavy-view.html (line 21)
+                  startTest heavy-view.html (line 11)
+      b heavy-view.html (line 30)
+         a heavy-view.html (line 21)
+            startTest heavy-view.html (line 11)
+         g heavy-view.html (line 51)
+            a heavy-view.html (line 21)
+               startTest heavy-view.html (line 11)
+      a heavy-view.html (line 21)
+         startTest heavy-view.html (line 11)
+      e heavy-view.html (line 46)
+         d heavy-view.html (line 41)
+            a heavy-view.html (line 21)
+               startTest heavy-view.html (line 11)
+   c heavy-view.html (line 36)
+      foo heavy-view.html (line 57)
+         b heavy-view.html (line 30)
+            a heavy-view.html (line 21)
+               startTest heavy-view.html (line 11)
+   b heavy-view.html (line 30)
+      a heavy-view.html (line 21)
+         startTest heavy-view.html (line 11)
+      g heavy-view.html (line 51)
+         a heavy-view.html (line 21)
+            startTest heavy-view.html (line 11)
+   e heavy-view.html (line 46)
+      d heavy-view.html (line 41)
+         a heavy-view.html (line 21)
+            startTest heavy-view.html (line 11)
+   d heavy-view.html (line 41)
+      a heavy-view.html (line 21)
+         startTest heavy-view.html (line 11)
+   g heavy-view.html (line 51)
+      a heavy-view.html (line 21)
+         startTest heavy-view.html (line 11)
+   a heavy-view.html (line 21)
+      startTest heavy-view.html (line 11)
+   startTest heavy-view.html (line 11)
+   (idle) (no file) (line 0)
+
+
index 9d508b6..9feada4 100644 (file)
@@ -2,10 +2,20 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
+
+function startTest()
+{
+    console.profile("Heavy View Test");
 
-console.profile("Heavy View Test");
+    a();
+
+    console.profileEnd();
+    printHeavyProfilesDataWithoutTime();
+}
 
 function a()
 {
@@ -14,8 +24,6 @@ function a()
     d();
     d();
     g();
-    console.profileEnd();
-    printHeavyProfilesDataWithoutTime();
 }
 
 function b()
@@ -56,7 +64,7 @@ function foo()
 </script>
 </head>
 
-<body onload="a()">
+<body onload="startTest()">
 This page has several functions calling each other in a way that exposes interesting
 edge cases related to the Heavy view in the profiler.
 <br>
@@ -65,4 +73,4 @@ To run this test manually, load it in the browser then load the WebInspector and
 the profile in Heavy view.
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 4403a53..15f1acf 100644 (file)
@@ -1,22 +1,21 @@
-CONSOLE MESSAGE: line 59: Inline event handler
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) inline-event-handler.html 8
-CONSOLE MESSAGE: line 75:   (program) inline-event-handler.html 4
-CONSOLE MESSAGE: line 75:   onload inline-event-handler.html 21
-CONSOLE MESSAGE: line 75:    testStart inline-event-handler.html 10
-CONSOLE MESSAGE: line 75:     getElementById  0
-CONSOLE MESSAGE: line 75:     click  0
-CONSOLE MESSAGE: line 75:      onclick inline-event-handler.html 28
-CONSOLE MESSAGE: line 75:       eventListener inline-event-handler.html 14
-CONSOLE MESSAGE: line 75:        (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:         insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:          createElement  0
-CONSOLE MESSAGE: line 75:          createTextNode  0
-CONSOLE MESSAGE: line 75:          appendChild  0
-CONSOLE MESSAGE: line 75:          getElementById  0
-CONSOLE MESSAGE: line 75:        endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has an inline event handler. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile onclick() should be a sibling to onload() and onclick() should have eventListener() as a child. 
-This is inserted Text
+
+Profile title: Inline event handler
+Thread_1 (no file) (line 0)
+   startTest inline-event-handler.html (line 11)
+      getElementById (no file) (line 0)
+      click (no file) (line 0)
+         onclick inline-event-handler.html (line 31)
+            eventListener inline-event-handler.html (line 17)
+               (anonymous function) profiler-test-JS-resources.js (line 29)
+                  insertNewText profiler-test-JS-resources.js (line 17)
+                     createElement (no file) (line 0)
+                     createTextNode (no file) (line 0)
+                     appendChild (no file) (line 0)
+                     getElementById (no file) (line 0)
+               endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index c32d262..b76711c 100644 (file)
@@ -2,12 +2,15 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Inline event handler");
-function testStart()
+function startTest()
 {    
+    console.profile("Inline event handler");
+
     document.getElementById("eventListenerSetInline").click();
 }
 
@@ -18,7 +21,7 @@ function eventListener() {
 </script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page has an inline event handler.
 <br>
 <br>
@@ -28,4 +31,4 @@ should have eventListener() as a child.
 <input type="button" onclick="eventListener()" id="eventListenerSetInline" value="Event Listener Set Inline">
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 145d338..0749a4f 100644 (file)
@@ -1,44 +1,37 @@
-CONSOLE MESSAGE: line 59: Many Calls In The Same Scope
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) many-calls-in-the-same-scope.html 8
-CONSOLE MESSAGE: line 75:   (program) many-calls-in-the-same-scope.html 4
-CONSOLE MESSAGE: line 75:   onload many-calls-in-the-same-scope.html 35
-CONSOLE MESSAGE: line 75:    startTest many-calls-in-the-same-scope.html 10
-CONSOLE MESSAGE: line 75:     insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:      createElement  0
-CONSOLE MESSAGE: line 75:      createTextNode  0
-CONSOLE MESSAGE: line 75:      appendChild  0
-CONSOLE MESSAGE: line 75:      getElementById  0
-CONSOLE MESSAGE: line 75:     insertGivenText profiler-test-JS-resources.js 9
-CONSOLE MESSAGE: line 75:      createElement  0
-CONSOLE MESSAGE: line 75:      createTextNode  0
-CONSOLE MESSAGE: line 75:      appendChild  0
-CONSOLE MESSAGE: line 75:      getElementById  0
-CONSOLE MESSAGE: line 75:     arrayOperatorFunction profiler-test-JS-resources.js 25
-CONSOLE MESSAGE: line 75:     intermediaryFunction profiler-test-JS-resources.js 32
-CONSOLE MESSAGE: line 75:      (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:       insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:        createElement  0
-CONSOLE MESSAGE: line 75:        createTextNode  0
-CONSOLE MESSAGE: line 75:        appendChild  0
-CONSOLE MESSAGE: line 75:        getElementById  0
-CONSOLE MESSAGE: line 75:     (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:      insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:       createElement  0
-CONSOLE MESSAGE: line 75:       createTextNode  0
-CONSOLE MESSAGE: line 75:       appendChild  0
-CONSOLE MESSAGE: line 75:       getElementById  0
-CONSOLE MESSAGE: line 75:     end many-calls-in-the-same-scope.html 23
-CONSOLE MESSAGE: line 75:     endT many-calls-in-the-same-scope.html 28
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript has many function calls in the same scope. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile many functions should be the children of startTest. Use the sorting capabilites to make sure the similarly named functions are sorted correctly.
-This is inserted Text
 
-This was a triumph.
+Profile title: Many Calls In The Same Scope
+Thread_1 (no file) (line 0)
+   startTest many-calls-in-the-same-scope.html (line 11)
+      insertNewText profiler-test-JS-resources.js (line 17)
+         createElement (no file) (line 0)
+         createTextNode (no file) (line 0)
+         appendChild (no file) (line 0)
+         getElementById (no file) (line 0)
+      insertGivenText profiler-test-JS-resources.js (line 9)
+         createElement (no file) (line 0)
+         createTextNode (no file) (line 0)
+         appendChild (no file) (line 0)
+         getElementById (no file) (line 0)
+      arrayOperatorFunction profiler-test-JS-resources.js (line 25)
+      intermediaryFunction profiler-test-JS-resources.js (line 32)
+         (anonymous function) profiler-test-JS-resources.js (line 29)
+            insertNewText profiler-test-JS-resources.js (line 17)
+               createElement (no file) (line 0)
+               createTextNode (no file) (line 0)
+               appendChild (no file) (line 0)
+               getElementById (no file) (line 0)
+      (anonymous function) profiler-test-JS-resources.js (line 29)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      end many-calls-in-the-same-scope.html (line 27)
+      endT many-calls-in-the-same-scope.html (line 32)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
 
-This is inserted Text
 
-This is inserted Text
index 3d4235f..fa954bb 100644 (file)
@@ -2,12 +2,15 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Many Calls In The Same Scope");
 function startTest()
 {
+    console.profile("Many Calls In The Same Scope");
+
     insertNewText();
     insertGivenText("This was a triumph.");
     arrayOperatorFunction(7);
@@ -16,6 +19,7 @@ function startTest()
     end()
     endT();
     endT();
+
     endTest();
 }
 
@@ -42,4 +46,4 @@ Use the sorting capabilites to make sure the similarly named functions are sorte
 correctly.
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 7116ee9..2857b4f 100644 (file)
@@ -1,29 +1,24 @@
-CONSOLE MESSAGE: line 59: Multiple and different scoped calls to the same anonymous function
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) multiple-and-different-scoped-anonymous-function-calls.html 8
-CONSOLE MESSAGE: line 75:   (program) multiple-and-different-scoped-anonymous-function-calls.html 4
-CONSOLE MESSAGE: line 75:   onload multiple-and-different-scoped-anonymous-function-calls.html 20
-CONSOLE MESSAGE: line 75:    startTest multiple-and-different-scoped-anonymous-function-calls.html 10
-CONSOLE MESSAGE: line 75:     (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:      insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:       createElement  0
-CONSOLE MESSAGE: line 75:       createTextNode  0
-CONSOLE MESSAGE: line 75:       appendChild  0
-CONSOLE MESSAGE: line 75:       getElementById  0
-CONSOLE MESSAGE: line 75:     intermediaryFunction profiler-test-JS-resources.js 32
-CONSOLE MESSAGE: line 75:      (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:       insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:        createElement  0
-CONSOLE MESSAGE: line 75:        createTextNode  0
-CONSOLE MESSAGE: line 75:        appendChild  0
-CONSOLE MESSAGE: line 75:        getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript calls the same anonymous function from multiple and differently scoped locations. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a call to fakeObject with fakeInteriorFunction as its child, but call() should not be shown.
-This is inserted Text
 
-This is inserted Text
+Profile title: Multiple and different scoped calls to the same anonymous function
+Thread_1 (no file) (line 0)
+   startTest multiple-and-different-scoped-anonymous-function-calls.html (line 11)
+      (anonymous function) profiler-test-JS-resources.js (line 29)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      intermediaryFunction profiler-test-JS-resources.js (line 32)
+         (anonymous function) profiler-test-JS-resources.js (line 29)
+            insertNewText profiler-test-JS-resources.js (line 17)
+               createElement (no file) (line 0)
+               createTextNode (no file) (line 0)
+               appendChild (no file) (line 0)
+               getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
 
-This is inserted Text
index a897c26..604d03a 100644 (file)
@@ -2,16 +2,20 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Multiple and different scoped calls to the same anonymous function");
 function startTest()
 {
+    console.profile("Multiple and different scoped calls to the same anonymous function");
+
     anonymousFunction();
     anonymousFunction();
 
     intermediaryFunction();
+
     endTest();
 }
 </script>
@@ -26,4 +30,4 @@ the profile.  In the profile there should be a call to fakeObject with
 fakeInteriorFunction as its child, but call() should not be shown.
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 71df2d0..58c5c33 100644 (file)
@@ -1,28 +1,23 @@
-CONSOLE MESSAGE: line 59: Multiple and different scoped calls to the same function
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) multiple-and-different-scoped-function-calls.html 8
-CONSOLE MESSAGE: line 75:   (program) multiple-and-different-scoped-function-calls.html 4
-CONSOLE MESSAGE: line 75:   onload multiple-and-different-scoped-function-calls.html 20
-CONSOLE MESSAGE: line 75:    startTest multiple-and-different-scoped-function-calls.html 10
-CONSOLE MESSAGE: line 75:     insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:      createElement  0
-CONSOLE MESSAGE: line 75:      createTextNode  0
-CONSOLE MESSAGE: line 75:      appendChild  0
-CONSOLE MESSAGE: line 75:      getElementById  0
-CONSOLE MESSAGE: line 75:     intermediaryFunction profiler-test-JS-resources.js 32
-CONSOLE MESSAGE: line 75:      (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:       insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:        createElement  0
-CONSOLE MESSAGE: line 75:        createTextNode  0
-CONSOLE MESSAGE: line 75:        appendChild  0
-CONSOLE MESSAGE: line 75:        getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript calls the same function from multiple and differently scoped locations. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be two calls to insertNewText under startTest() and one under an (anonymous function) under intermediaryFunction().
-This is inserted Text
 
-This is inserted Text
+Profile title: Multiple and different scoped calls to the same function
+Thread_1 (no file) (line 0)
+   startTest multiple-and-different-scoped-function-calls.html (line 11)
+      insertNewText profiler-test-JS-resources.js (line 17)
+         createElement (no file) (line 0)
+         createTextNode (no file) (line 0)
+         appendChild (no file) (line 0)
+         getElementById (no file) (line 0)
+      intermediaryFunction profiler-test-JS-resources.js (line 32)
+         (anonymous function) profiler-test-JS-resources.js (line 29)
+            insertNewText profiler-test-JS-resources.js (line 17)
+               createElement (no file) (line 0)
+               createTextNode (no file) (line 0)
+               appendChild (no file) (line 0)
+               getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
 
-This is inserted Text
index d9ae826..4e476de 100644 (file)
@@ -2,16 +2,20 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Multiple and different scoped calls to the same function");
 function startTest()
 {
+    console.profile("Multiple and different scoped calls to the same function");
+
     insertNewText();
     insertNewText();
 
     intermediaryFunction();
+
     endTest();
 }
 </script>
@@ -26,4 +30,4 @@ the profile.  In the profile there should be two calls to insertNewText under
 startTest() and one under an (anonymous function) under intermediaryFunction().
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index fd416f9..1bac2d3 100644 (file)
@@ -1,23 +1,19 @@
-CONSOLE MESSAGE: line 59: Other window executing JavaScript
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) multiple-frames.html 8
-CONSOLE MESSAGE: line 75:   (program) multiple-frames.html 4
-CONSOLE MESSAGE: line 75:   (program) other-frame.html 3
-CONSOLE MESSAGE: line 75:   onload multiple-frames.html 24
-CONSOLE MESSAGE: line 75:    testStart multiple-frames.html 10
-CONSOLE MESSAGE: line 75:     getElementById  0
-CONSOLE MESSAGE: line 75:     functionInOtherFrame other-frame.html 4
-CONSOLE MESSAGE: line 75:      functionInParentFrame multiple-frames.html 18
-CONSOLE MESSAGE: line 75:     insertGivenText profiler-test-JS-resources.js 9
-CONSOLE MESSAGE: line 75:      createElement  0
-CONSOLE MESSAGE: line 75:      createTextNode  0
-CONSOLE MESSAGE: line 75:      appendChild  0
-CONSOLE MESSAGE: line 75:      getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This test has JS executing in another window. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a call to functionInOtherFrame().
-Pi
+
+Profile title: Other window executing JavaScript
+Thread_1 (no file) (line 0)
+   startTest multiple-frames.html (line 11)
+      getElementById (no file) (line 0)
+      functionInOtherFrame other-frame.html (line 4)
+         functionInParentFrame multiple-frames.html (line 21)
+      insertGivenText profiler-test-JS-resources.js (line 9)
+         createElement (no file) (line 0)
+         createTextNode (no file) (line 0)
+         appendChild (no file) (line 0)
+         getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
 
 
index f4fb84f..430356f 100644 (file)
@@ -2,12 +2,15 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Other window executing JavaScript");
-function testStart()
+function startTest()
 {
+    console.profile("Other window executing JavaScript");
+
     var myFrame = document.getElementById("mySubFrame");
     var secret = myFrame.contentWindow.functionInOtherFrame();
     insertGivenText(secret);
@@ -21,7 +24,7 @@ function functionInParentFrame() {
 </script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This test has JS executing in another window.
 <br>
 <br>
@@ -30,4 +33,4 @@ the profile.  In the profile there should be a call to functionInOtherFrame().
 <div id="output"></div>
 <iframe src="resources/other-frame.html" id="mySubFrame"></iframe>
 </body>
-</html>
\ No newline at end of file
+</html>
index 99f1a6e..217a86c 100644 (file)
@@ -1,19 +1,18 @@
-CONSOLE MESSAGE: line 59: Nested anonymous functions called
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) nested-anonymous-functon.html 8
-CONSOLE MESSAGE: line 75:   (program) nested-anonymous-functon.html 4
-CONSOLE MESSAGE: line 75:   onload nested-anonymous-functon.html 21
-CONSOLE MESSAGE: line 75:    startTest nested-anonymous-functon.html 10
-CONSOLE MESSAGE: line 75:     (anonymous function) nested-anonymous-functon.html 11
-CONSOLE MESSAGE: line 75:      (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:       insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:        createElement  0
-CONSOLE MESSAGE: line 75:        createTextNode  0
-CONSOLE MESSAGE: line 75:        appendChild  0
-CONSOLE MESSAGE: line 75:        getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript calls an anonymous which calls a nested anonymous function. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be an (anonymous function) with a child (anonymous function).
-This is inserted Text
+
+Profile title: Nested anonymous functions called
+Thread_1 (no file) (line 0)
+   startTest nested-anonymous-functon.html (line 11)
+      (anonymous function) nested-anonymous-functon.html (line 14)
+         (anonymous function) profiler-test-JS-resources.js (line 29)
+            insertNewText profiler-test-JS-resources.js (line 17)
+               createElement (no file) (line 0)
+               createTextNode (no file) (line 0)
+               appendChild (no file) (line 0)
+               getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index a5c8b12..d11dcc2 100644 (file)
@@ -2,17 +2,21 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Nested anonymous functions called");
 function startTest()
 {
+    console.profile("Nested anonymous functions called");
+
     var AnonymousFunctionWichCallsAnAnonymousFunction = function() {
         anonymousFunction();
     }
 
     AnonymousFunctionWichCallsAnAnonymousFunction();
+
     endTest();
 }
 </script>
@@ -27,4 +31,4 @@ the profile.  In the profile there should be an (anonymous function) with a chil
 (anonymous function).
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index b0f3b80..d09b2d9 100644 (file)
-CONSOLE MESSAGE: line 59: Start the profiler the third time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  startTest nested-start-and-stop-profiler.html 10
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Start the profiler the third time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  startTest nested-start-and-stop-profiler.html 10
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Start the profiler the second time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  startTest nested-start-and-stop-profiler.html 10
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:    profileEnd  0
-CONSOLE MESSAGE: line 75:    printProfilesDataWithoutTime profiler-test-JS-resources.js 56
-CONSOLE MESSAGE: line 75:     log  0
-CONSOLE MESSAGE: line 75:     printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:      log  0
-CONSOLE MESSAGE: line 75:      printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:       log  0
-CONSOLE MESSAGE: line 75:       printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:        log  0
-CONSOLE MESSAGE: line 75:    notifyDone  0
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Start the profiler the third time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  startTest nested-start-and-stop-profiler.html 10
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Start the profiler the second time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  startTest nested-start-and-stop-profiler.html 10
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:    profileEnd  0
-CONSOLE MESSAGE: line 75:    printProfilesDataWithoutTime profiler-test-JS-resources.js 56
-CONSOLE MESSAGE: line 75:     log  0
-CONSOLE MESSAGE: line 75:     printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:      log  0
-CONSOLE MESSAGE: line 75:      printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:       log  0
-CONSOLE MESSAGE: line 75:       printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:        log  0
-CONSOLE MESSAGE: line 75:    notifyDone  0
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Start the profiler the first time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) nested-start-and-stop-profiler.html 8
-CONSOLE MESSAGE: line 75:   (program) nested-start-and-stop-profiler.html 4
-CONSOLE MESSAGE: line 75:   onload nested-start-and-stop-profiler.html 20
-CONSOLE MESSAGE: line 75:    startTest nested-start-and-stop-profiler.html 10
-CONSOLE MESSAGE: line 75:     profile  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:      profileEnd  0
-CONSOLE MESSAGE: line 75:      printProfilesDataWithoutTime profiler-test-JS-resources.js 56
-CONSOLE MESSAGE: line 75:       log  0
-CONSOLE MESSAGE: line 75:       printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:        log  0
-CONSOLE MESSAGE: line 75:        printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:         log  0
-CONSOLE MESSAGE: line 75:         printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:          log  0
-CONSOLE MESSAGE: line 75:          printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:           log  0
-CONSOLE MESSAGE: line 75:           printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:            log  0
-CONSOLE MESSAGE: line 75:            printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:             log  0
-CONSOLE MESSAGE: line 75:             printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:              log  0
-CONSOLE MESSAGE: line 75:              printProfileNodeWithoutTime profiler-test-JS-resources.js 65
-CONSOLE MESSAGE: line 75:               log  0
-CONSOLE MESSAGE: line 75:      notifyDone  0
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript calls console.profile() three times then console.profileEnd() three times. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profiler there should be three profiles.
+
+Profile title: Start the profiler the third time.
+Thread_1 (no file) (line 0)
+   startTest nested-start-and-stop-profiler.html (line 11)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
+Profile title: Start the profiler the third time.
+Thread_1 (no file) (line 0)
+   startTest nested-start-and-stop-profiler.html (line 11)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+Profile title: Start the profiler the second time.
+Thread_1 (no file) (line 0)
+   startTest nested-start-and-stop-profiler.html (line 11)
+      endTest profiler-test-JS-resources.js (line 1)
+         profileEnd (no file) (line 0)
+         printProfilesDataWithoutTime profiler-test-JS-resources.js (line 62)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+               replace (no file) (line 0)
+               createTextNode (no file) (line 0)
+               appendChild (no file) (line 0)
+               printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                  replace (no file) (line 0)
+                  createTextNode (no file) (line 0)
+                  appendChild (no file) (line 0)
+                  printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                     replace (no file) (line 0)
+                     createTextNode (no file) (line 0)
+                     appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+         notifyDone (no file) (line 0)
+   (idle) (no file) (line 0)
+
+
+Profile title: Start the profiler the third time.
+Thread_1 (no file) (line 0)
+   startTest nested-start-and-stop-profiler.html (line 11)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+Profile title: Start the profiler the second time.
+Thread_1 (no file) (line 0)
+   startTest nested-start-and-stop-profiler.html (line 11)
+      endTest profiler-test-JS-resources.js (line 1)
+         profileEnd (no file) (line 0)
+         printProfilesDataWithoutTime profiler-test-JS-resources.js (line 62)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+               replace (no file) (line 0)
+               createTextNode (no file) (line 0)
+               appendChild (no file) (line 0)
+               printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                  replace (no file) (line 0)
+                  createTextNode (no file) (line 0)
+                  appendChild (no file) (line 0)
+                  printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                     replace (no file) (line 0)
+                     createTextNode (no file) (line 0)
+                     appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+         notifyDone (no file) (line 0)
+   (idle) (no file) (line 0)
+
+Profile title: Start the profiler the first time.
+Thread_1 (no file) (line 0)
+   startTest nested-start-and-stop-profiler.html (line 11)
+      endTest profiler-test-JS-resources.js (line 1)
+         profileEnd (no file) (line 0)
+         printProfilesDataWithoutTime profiler-test-JS-resources.js (line 62)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+               replace (no file) (line 0)
+               createTextNode (no file) (line 0)
+               appendChild (no file) (line 0)
+               printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                  replace (no file) (line 0)
+                  createTextNode (no file) (line 0)
+                  appendChild (no file) (line 0)
+                  printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                     replace (no file) (line 0)
+                     createTextNode (no file) (line 0)
+                     appendChild (no file) (line 0)
+                     printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                        replace (no file) (line 0)
+                        createTextNode (no file) (line 0)
+                        appendChild (no file) (line 0)
+                        printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                           replace (no file) (line 0)
+                           createTextNode (no file) (line 0)
+                           appendChild (no file) (line 0)
+                           printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                              replace (no file) (line 0)
+                              createTextNode (no file) (line 0)
+                              appendChild (no file) (line 0)
+                              printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                                 replace (no file) (line 0)
+                                 createTextNode (no file) (line 0)
+                                 appendChild (no file) (line 0)
+                                 printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77)
+                                    replace (no file) (line 0)
+                                    createTextNode (no file) (line 0)
+                                    appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+         notifyDone (no file) (line 0)
+   (idle) (no file) (line 0)
+
+
index dab098e..308eade 100644 (file)
@@ -2,12 +2,14 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Start the profiler the first time.");
 function startTest()
 {
+    console.profile("Start the profiler the first time.");
     console.profile("Start the profiler the second time.");
     console.profile("Start the profiler the third time.");
     endTest();
@@ -24,5 +26,6 @@ three times.
 <br>
 To run this test manually, load it in the browser then load the WebInspector and look at
 the profile.  In the profiler there should be three profiles.
+<div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 8fe5e48..755dccb 100644 (file)
@@ -1,3 +1,5 @@
-This page has a no script tag and so has no execution context or profiling information. 
+This page has a no profiling information. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. You should not see any profile date in the WebInspector.
+
+
index 03295e1..ea63fc5 100644 (file)
@@ -1,16 +1,20 @@
 <html>
 <head>
-</head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 </script>
+</head>
+
 <body onload="printProfilesDataWithoutTime()">
-This page has a no script tag and so has no execution context or profiling information.
+This page has a no profiling information.
 <br>
 <br>
 To run this test manually, load it in the browser then load the WebInspector and look at
 the profile.  You should not see any profile date in the WebInspector.
+<div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 6dce301..b0acc7f 100644 (file)
@@ -1,11 +1,11 @@
-CONSOLE MESSAGE: line 59: One Execution Context
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) one-execution-context.html 8
-CONSOLE MESSAGE: line 75:   (program) one-execution-context.html 4
-CONSOLE MESSAGE: line 75:   onload one-execution-context.html 17
-CONSOLE MESSAGE: line 75:    testStart one-execution-context.html 10
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has a single script tag with some simple JavaScript. 
 
-To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile you should see one (program).
+To run this test manually, load it in the browser then load the WebInspector and look at the profile.
+
+Profile title: One Execution Context
+Thread_1 (no file) (line 0)
+   startTest one-execution-context.html (line 11)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index cdcb20a..def3c4b 100644 (file)
@@ -2,23 +2,26 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("One Execution Context");
-function testStart()
+function startTest()
 {
+    console.profile("One Execution Context");
     endTest();
 }
 
 </script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page has a single script tag with some simple JavaScript.
 <br>
 <br>
 To run this test manually, load it in the browser then load the WebInspector and look at
-the profile.  In the profile you should see one (program).
+the profile.
+<div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index c9c9924..a8b3bec 100644 (file)
@@ -1,9 +1,11 @@
-CONSOLE MESSAGE: line 59: Profile call in included file
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  startProfile profiler-test-JS-resources.js 42
-CONSOLE MESSAGE: line 75:  endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page calls the profiler from the included file. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. If there is a profile that is sufficient for this test.
 
+Profile title: Profile call in included file
+Thread_1 (no file) (line 0)
+   startProfile profiler-test-JS-resources.js (line 42)
+   endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index a3a389c..305a605 100644 (file)
@@ -2,10 +2,12 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-function testStart()
+function startTest()
 {
     startProfile("Profile call in included file");
     endTest();
@@ -13,7 +15,7 @@ function testStart()
 </script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page calls the profiler from the included file.
 <br>
 <br>
@@ -23,4 +25,4 @@ the profile.  If there is a profile that is sufficient for this test.
 <script>
 </script>
 </body>
-</html>
\ No newline at end of file
+</html>
index f928272..5ea9fc2 100644 (file)
@@ -1,9 +1,11 @@
-CONSOLE MESSAGE: line 59: Profiling From A Nested Location But Stop Profiling Outside The Nesting
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  functionWichStartsAndStopsTheProfiler profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting.html 15
-CONSOLE MESSAGE: line 75:  endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript starts profiling from within a nested location but stops the profiler from a different level of nesting. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a call to functionWichStartsAndStopsTheProfiler().
 
+Profile title: Profiling From A Nested Location But Stop Profiling Outside The Nesting
+Thread_1 (no file) (line 0)
+   functionWichStartsTheProfiler profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting.html (line 17)
+   endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index d3c667b..7e063ce 100644 (file)
@@ -2,16 +2,18 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
 function startTest()
 {
-    functionWichStartsAndStopsTheProfiler();
+    functionWichStartsTheProfiler();
     endTest();
 }
 
-function functionWichStartsAndStopsTheProfiler()
+function functionWichStartsTheProfiler()
 {
     console.profile("Profiling From A Nested Location But Stop Profiling Outside The Nesting");
 
@@ -31,4 +33,4 @@ To run this test manually, load it in the browser then load the WebInspector and
 the profile.  In the profile there should be a call to functionWichStartsAndStopsTheProfiler().
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 01ab4ef..5a1b23a 100644 (file)
@@ -1,9 +1,11 @@
-CONSOLE MESSAGE: line 59: Profiling From A Nested Location
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  functionWichStartsAndStopsTheProfiler profiling-from-a-nested-location.html 14
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript starts profiling from within a nested location. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a call to functionWichStartsAndStopsTheProfiler().
 
+Profile title: Profiling From A Nested Location
+Thread_1 (no file) (line 0)
+   functionWichStartsAndStopsTheProfiler profiling-from-a-nested-location.html (line 16)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index f9b0987..e6251c7 100644 (file)
@@ -2,8 +2,10 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
 function startTest()
 {
@@ -31,4 +33,4 @@ To run this test manually, load it in the browser then load the WebInspector and
 the profile.  In the profile there should be a call to functionWichStartsAndStopsTheProfiler().
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 962742e..4210b46 100644 (file)
@@ -1,25 +1,25 @@
 function endTest() {
     console.profileEnd();
     printProfilesDataWithoutTime();
-    
+
     if (window.layoutTestController)
         layoutTestController.notifyDone();
 }
 
 function insertGivenText(text) {
-    var newP = document.createElement("p");
-    var textNode =document.createTextNode(text);
-    newP.appendChild(textNode);
-    var output = document.getElementById("output");
-    output.appendChild(newP);
+    var paragraph = document.createElement("p");
+    paragraph.appendChild(document.createTextNode(text));
+    paragraph.style.display = "none"; // Hidden since this isn't important in the test results.
+
+    document.getElementById("output").appendChild(paragraph);
 }
 
 function insertNewText() {
-    var newP = document.createElement("p");
-    var textNode =document.createTextNode("This is inserted Text");
-    newP.appendChild(textNode);
-    var output = document.getElementById("output");
-    output.appendChild(newP);
+    var paragraph = document.createElement("p");
+    paragraph.appendChild(document.createTextNode("This is inserted Text"));
+    paragraph.style.display = "none"; // Hidden since this isn't important in the test results.
+
+    document.getElementById("output").appendChild(paragraph);
 }
 
 function arrayOperatorFunction(arrayElement) {
@@ -45,37 +45,53 @@ function startProfile(title)
 
 function printHeavyProfilesDataWithoutTime()
 {
+    var preElement = document.createElement("pre");
+    preElement.appendChild(document.createTextNode("\n"));
+
     var profiles = console.profiles;
     for (var i = 0; i < profiles.length; ++i) {
-        console.log(profiles[i].title);
-        printProfileNodeWithoutTime(profiles[i].heavyProfile.head, 0);
+        preElement.appendChild(document.createTextNode("Profile title: " + profiles[i].title + "\n"));
+        printProfileNodeWithoutTime(preElement, profiles[i].heavyProfile.head, 0);
+        preElement.appendChild(document.createTextNode("\n"));
     }
+
+    document.getElementById("output").appendChild(preElement);
 }
 
 function printProfilesDataWithoutTime()
 {
+    var preElement = document.createElement("pre");
+    preElement.appendChild(document.createTextNode("\n"));
+
     var profiles = console.profiles;
     for (var i = 0; i < profiles.length; ++i) {
-        console.log(profiles[i].title);
-        printProfileNodeWithoutTime(profiles[i].treeProfile.head, 0);
+        preElement.appendChild(document.createTextNode("Profile title: " + profiles[i].title + "\n"));
+        printProfileNodeWithoutTime(preElement, profiles[i].treeProfile.head, 0);
+        preElement.appendChild(document.createTextNode("\n"));
     }
+
+    document.getElementById("output").appendChild(preElement);
 }
 
-function printProfileNodeWithoutTime(node, indentLevel)
+function printProfileNodeWithoutTime(preElement, node, indentLevel)
 {
     if (!node.visible)
         return;
 
     var space = "";
     for (var i = 0; i < indentLevel; ++i)
-        space += " "
+        space += "   "
 
     ++indentLevel;
 
-    console.log(space + node.functionName + " " + node.url + " " + node.lineNumber);
+    var strippedURL = node.url.replace(/.*\//, "");
+    if (!strippedURL)
+        strippedURL = "(no file)";
+
+    var line = space + node.functionName + " " + strippedURL + " (line " + node.lineNumber + ")\n";
+    preElement.appendChild(document.createTextNode(line));
 
     var children = node.children;
     for (var i = 0; i < children.length; ++i)
-        printProfileNodeWithoutTime(children[i], indentLevel);
+        printProfileNodeWithoutTime(preElement, children[i], indentLevel);
 }
-
index 51e4e10..3a154b2 100644 (file)
@@ -1,12 +1,11 @@
-CONSOLE MESSAGE: line 59: A simple profile test where an event happens.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) simple-event-call.html 8
-CONSOLE MESSAGE: line 75:   (program) simple-event-call.html 4
-CONSOLE MESSAGE: line 75:   onload simple-event-call.html 16
-CONSOLE MESSAGE: line 75:    startTest simple-event-call.html 10
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript has an onload event. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. There should be only one onload node.
 
+Profile title: A simple profile test where an event happens.
+Thread_1 (no file) (line 0)
+   startTest simple-event-call.html (line 11)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index 968fa09..434f202 100644 (file)
@@ -2,12 +2,15 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("A simple profile test where an event happens.");
 function startTest()
 {
+    console.profile("A simple profile test where an event happens.");
+    // FIXME: this is not testing what it says it is.
     endTest();
 }
 </script>
index 1ef9eed..a40d109 100644 (file)
@@ -1,9 +1,11 @@
-CONSOLE MESSAGE: line 59: A simple profile test where no scope chagnes
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  functionWichStartsAndStopsTheProfiler simple-no-level-change.html 14
-CONSOLE MESSAGE: line 75:   getElementById  0
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript starts and stops profiling from the same scope. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. There should be no function calls between console.profile() and console.profileEnd().
 
+Profile title: A simple profile test where no scope chagnes
+Thread_1 (no file) (line 0)
+   functionWichStartsAndStopsTheProfiler simple-no-level-change.html (line 16)
+      getElementById (no file) (line 0)
+   (idle) (no file) (line 0)
+
+
index 28d8d7c..092aede 100644 (file)
@@ -2,8 +2,10 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
 function startTest()
 {
@@ -22,7 +24,6 @@ function functionWichStartsAndStopsTheProfiler()
     console.profileEnd();
     printProfilesDataWithoutTime();
 }
-
 </script>
 </head>
 
index 1e604b7..6f0575b 100644 (file)
@@ -1,83 +1,79 @@
-CONSOLE MESSAGE: line 59: Start the profiler the first time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) start-and-stop-profiler-multiple-times.html 8
-CONSOLE MESSAGE: line 75:   (program) start-and-stop-profiler-multiple-times.html 4
-CONSOLE MESSAGE: line 75:   onload start-and-stop-profiler-multiple-times.html 23
-CONSOLE MESSAGE: line 75:    startTest start-and-stop-profiler-multiple-times.html 10
-CONSOLE MESSAGE: line 75:     (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:      insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:       createElement  0
-CONSOLE MESSAGE: line 75:       createTextNode  0
-CONSOLE MESSAGE: line 75:       appendChild  0
-CONSOLE MESSAGE: line 75:       getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Start the profiler the first time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) start-and-stop-profiler-multiple-times.html 8
-CONSOLE MESSAGE: line 75:   (program) start-and-stop-profiler-multiple-times.html 4
-CONSOLE MESSAGE: line 75:   onload start-and-stop-profiler-multiple-times.html 23
-CONSOLE MESSAGE: line 75:    startTest start-and-stop-profiler-multiple-times.html 10
-CONSOLE MESSAGE: line 75:     (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:      insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:       createElement  0
-CONSOLE MESSAGE: line 75:       createTextNode  0
-CONSOLE MESSAGE: line 75:       appendChild  0
-CONSOLE MESSAGE: line 75:       getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Start the profiler the second time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  startTest start-and-stop-profiler-multiple-times.html 10
-CONSOLE MESSAGE: line 75:   (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:    insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:     createElement  0
-CONSOLE MESSAGE: line 75:     createTextNode  0
-CONSOLE MESSAGE: line 75:     appendChild  0
-CONSOLE MESSAGE: line 75:     getElementById  0
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Start the profiler the first time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) start-and-stop-profiler-multiple-times.html 8
-CONSOLE MESSAGE: line 75:   (program) start-and-stop-profiler-multiple-times.html 4
-CONSOLE MESSAGE: line 75:   onload start-and-stop-profiler-multiple-times.html 23
-CONSOLE MESSAGE: line 75:    startTest start-and-stop-profiler-multiple-times.html 10
-CONSOLE MESSAGE: line 75:     (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:      insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:       createElement  0
-CONSOLE MESSAGE: line 75:       createTextNode  0
-CONSOLE MESSAGE: line 75:       appendChild  0
-CONSOLE MESSAGE: line 75:       getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Start the profiler the second time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  startTest start-and-stop-profiler-multiple-times.html 10
-CONSOLE MESSAGE: line 75:   (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:    insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:     createElement  0
-CONSOLE MESSAGE: line 75:     createTextNode  0
-CONSOLE MESSAGE: line 75:     appendChild  0
-CONSOLE MESSAGE: line 75:     getElementById  0
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
-CONSOLE MESSAGE: line 59: Start the profiler the third time.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  startTest start-and-stop-profiler-multiple-times.html 10
-CONSOLE MESSAGE: line 75:   (anonymous function) profiler-test-JS-resources.js 29
-CONSOLE MESSAGE: line 75:    insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:     createElement  0
-CONSOLE MESSAGE: line 75:     createTextNode  0
-CONSOLE MESSAGE: line 75:     appendChild  0
-CONSOLE MESSAGE: line 75:     getElementById  0
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript calls console.profile() and console.profileEnd() three times. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profiler there should be three profiles.
-This is inserted Text
 
-This is inserted Text
+Profile title: Start the profiler the first time.
+Thread_1 (no file) (line 0)
+   startTest start-and-stop-profiler-multiple-times.html (line 11)
+      (anonymous function) profiler-test-JS-resources.js (line 29)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
+Profile title: Start the profiler the first time.
+Thread_1 (no file) (line 0)
+   startTest start-and-stop-profiler-multiple-times.html (line 11)
+      (anonymous function) profiler-test-JS-resources.js (line 29)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+Profile title: Start the profiler the second time.
+Thread_1 (no file) (line 0)
+   startTest start-and-stop-profiler-multiple-times.html (line 11)
+      (anonymous function) profiler-test-JS-resources.js (line 29)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
+Profile title: Start the profiler the first time.
+Thread_1 (no file) (line 0)
+   startTest start-and-stop-profiler-multiple-times.html (line 11)
+      (anonymous function) profiler-test-JS-resources.js (line 29)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+Profile title: Start the profiler the second time.
+Thread_1 (no file) (line 0)
+   startTest start-and-stop-profiler-multiple-times.html (line 11)
+      (anonymous function) profiler-test-JS-resources.js (line 29)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+Profile title: Start the profiler the third time.
+Thread_1 (no file) (line 0)
+   startTest start-and-stop-profiler-multiple-times.html (line 11)
+      (anonymous function) profiler-test-JS-resources.js (line 29)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
 
-This is inserted Text
index b2885c1..8559c1a 100644 (file)
@@ -2,12 +2,14 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Start the profiler the first time.");
 function startTest()
 {
+    console.profile("Start the profiler the first time.");
     anonymousFunction();
     endTest();
     console.profile("Start the profiler the second time.");
@@ -28,4 +30,4 @@ To run this test manually, load it in the browser then load the WebInspector and
 the profile.  In the profiler there should be three profiles.
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 445b2c0..400bd6f 100644 (file)
@@ -1,8 +1,11 @@
-CONSOLE MESSAGE: line 59: Profiling From A Nested Location
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  functionWichStartsAndStopsTheProfiler start-and-stop-profiling-in-the-same-function.html 14
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript starts profiling from within a nested location. 
 
-To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a call to functionWichStartsAndStopsTheProfiler().
+To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a call to functionWichStopsTheProfiler().
+
+Profile title: Profiling From A Nested Location
+Thread_1 (no file) (line 0)
+   startTest start-and-stop-profiling-in-the-same-function.html (line 11)
+      functionWichStopsTheProfiler start-and-stop-profiling-in-the-same-function.html (line 18)
+   (idle) (no file) (line 0)
+
 
index 495c915..5faaf74 100644 (file)
@@ -2,18 +2,20 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
 function startTest()
 {
-    functionWichStartsAndStopsTheProfiler();
+    console.profile("Profiling From A Nested Location");
+
+    functionWichStopsTheProfiler();
 }
 
-function functionWichStartsAndStopsTheProfiler()
+function functionWichStopsTheProfiler()
 {
-    console.profile("Profiling From A Nested Location");
-
     for (var i = 0; i < 10000000; i++)
         var b = i + 2;
 
@@ -29,7 +31,7 @@ This page's JavaScript starts profiling from within a nested location.
 <br>
 <br>
 To run this test manually, load it in the browser then load the WebInspector and look at
-the profile.  In the profile there should be a call to functionWichStartsAndStopsTheProfiler().
+the profile.  In the profile there should be a call to functionWichStopsTheProfiler().
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 7a8d00d..4dbc12d 100644 (file)
@@ -1,4 +1,5 @@
 This page's JavaScript calls console.profile() but not console.profileEnd(). 
 
-To run this test manually, load it in the browser then load the WebInspector and look at the profile. You should see the profile running (when that feature is implemented 6060556). Then navigate to another page and check the WebInspector again. Safari should not have crashed and the Inspector should not show a profile (unless we allow cross-load profiling in the future 5951478 5954912).
-This is inserted Text
+To run this test manually, load it in the browser then load the WebInspector and look at the profile. You should see the profile running (when that feature is implemented 6060556). Then navigate to another page and check the WebInspector again. Safari should not have crashed and the Inspector should not show a profile (unless we allow cross-load profiling in the future 5951478 & 5954912).
+
+
index 46a2e30..2a25ce0 100644 (file)
@@ -2,12 +2,14 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Start the profiler but don't stop it.");
 function startTest()
 {
+    console.profile("Start the profiler but don't stop it.");
     anonymousFunction();
     printProfilesDataWithoutTime();
 }
@@ -22,7 +24,7 @@ To run this test manually, load it in the browser then load the WebInspector and
 the profile.  You should see the profile running (when that feature is implemented 6060556).
 Then navigate to another page and check the WebInspector again. Safari should not
 have crashed and the Inspector should not show a profile (unless we allow cross-load
-profiling in the future 5951478 5954912).
+profiling in the future 5951478 &amp; 5954912).
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 0b9cc7a..621c5f8 100644 (file)
@@ -1,12 +1,14 @@
-CONSOLE MESSAGE: line 59: Stop profiling from a timeout
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  onload stop-profiling-after-setTimeout.html 19
-CONSOLE MESSAGE: line 75:   startTest stop-profiling-after-setTimeout.html 11
-CONSOLE MESSAGE: line 75:    setTimeout  0
-CONSOLE MESSAGE: line 75:  (program) stop-profiling-after-setTimeout.html 1
-CONSOLE MESSAGE: line 75:   endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page's JavaScript stops profiling from a timeout. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile endProfile() should not be a child of (program).
 
+Profile title: Stop profiling from a timeout
+Thread_1 (no file) (line 0)
+   onload stop-profiling-after-setTimeout.html (line 20)
+      startTest stop-profiling-after-setTimeout.html (line 12)
+         setTimeout (no file) (line 0)
+   (program) stop-profiling-after-setTimeout.html (line 1)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index 45e6c6d..39b93db 100644 (file)
@@ -5,6 +5,7 @@
 if (window.layoutTestController) {
     layoutTestController.dumpAsText();
     layoutTestController.waitUntilDone();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
 }
 
 function startTest()
index 668bc31..4b993c3 100644 (file)
@@ -1,8 +1,11 @@
-CONSOLE MESSAGE: line 59: Test
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) stop-then-function-call.html 19
-CONSOLE MESSAGE: line 75:   test stop-then-function-call.html 9
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has an anonymous JavaScript function that calls built-in functions. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. There should be two nodes in the profile, a "(program)" node with one child that is "test".
+
+Profile title: Test
+Thread_1 (no file) (line 0)
+   (program) (no file) (line 1)
+      test stop-then-function-call.html (line 11)
+   (idle) (no file) (line 0)
+
+
index 078dbd0..4f97029 100644 (file)
@@ -2,8 +2,10 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
 var j = 0;
 function test(len) {
@@ -16,20 +18,26 @@ function test2(len) {
         --j;
 }
 
-console.profile("Test");
-test(1000);
-console.profileEnd("Test");
-test2(1000);
+function startTest()
+{
+    var script = "console.profile('Test');\n";
+    script += "test(1000);\n";
+    script += "console.profileEnd('Test');\n";
+    script += "test2(1000);\n";
+
+    eval(script);
 
-printProfilesDataWithoutTime();
+    printProfilesDataWithoutTime();
+}
 </script>
 </head>
 
-<body>
+<body onload="startTest()">
 This page has an anonymous JavaScript function that calls built-in functions.
 <br>
 <br>
 To run this test manually, load it in the browser then load the WebInspector and look at
 the profile. There should be two nodes in the profile, a "(program)" node with one child that is "test".
+<div id="output"></div>
 </body>
 </html>
index 035bc06..83f0c1c 100644 (file)
@@ -1,23 +1,17 @@
-CONSOLE MESSAGE: line 0: I threw up
-CONSOLE MESSAGE: line 59: Throw within an eval.
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) throw-exception-from-eval.html 8
-CONSOLE MESSAGE: line 75:   (program) throw-exception-from-eval.html 15
-CONSOLE MESSAGE: line 75:    (program) throw-exception-from-eval.html 4
-CONSOLE MESSAGE: line 75:    (program) throw-exception-from-eval.html 15
-CONSOLE MESSAGE: line 75:     eval  0
-CONSOLE MESSAGE: line 75:      (program)  1
-CONSOLE MESSAGE: line 75:       (program)  1
-CONSOLE MESSAGE: line 75:   onload throw-exception-from-eval.html 18
-CONSOLE MESSAGE: line 75:    testStart throw-exception-from-eval.html 10
-CONSOLE MESSAGE: line 75:     insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:      createElement  0
-CONSOLE MESSAGE: line 75:      createTextNode  0
-CONSOLE MESSAGE: line 75:      appendChild  0
-CONSOLE MESSAGE: line 75:      getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
+CONSOLE MESSAGE: line 0: Test exception.
 This page throws an exception from within eval(). 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. The profiler should not crash and still show the stack under insertnewText().
-This is inserted Text
+
+Profile title: Throw within an eval.
+Thread_1 (no file) (line 0)
+   startTest throw-exception-from-eval.html (line 11)
+      insertNewText profiler-test-JS-resources.js (line 17)
+         createElement (no file) (line 0)
+         createTextNode (no file) (line 0)
+         appendChild (no file) (line 0)
+         getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index 7f984f8..3b34e87 100644 (file)
@@ -2,20 +2,26 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Throw within an eval.");
-function testStart()
+function startTest()
 {
+    console.profile("Throw within an eval.");
+
     insertNewText();
+
     endTest();
 }
 </script>
-<script> eval("throw('I threw up');");</script>
+<script>
+eval("throw('Test exception.');");
+</script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page throws an exception from within eval().
 <br>
 <br>
index 32c4725..c34fa47 100644 (file)
@@ -1,13 +1,12 @@
-CONSOLE MESSAGE: line 59: Two Execution Contexts
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) two-execution-contexts.html 8
-CONSOLE MESSAGE: line 75:   (program) two-execution-contexts.html 4
-CONSOLE MESSAGE: line 75:   (program) two-execution-contexts.html 28
-CONSOLE MESSAGE: line 75:   onload two-execution-contexts.html 21
-CONSOLE MESSAGE: line 75:    testStart two-execution-contexts.html 10
-CONSOLE MESSAGE: line 75:     intermediaryFunction two-execution-contexts.html 15
-CONSOLE MESSAGE: line 75:      testEnd two-execution-contexts.html 29
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has two script tags with some simple JavaScript. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be two (program) elements.
+
+Profile title: Two Execution Contexts
+Thread_1 (no file) (line 0)
+   startTest two-execution-contexts.html (line 11)
+      intermediaryFunction two-execution-contexts.html (line 18)
+         testEnd two-execution-contexts.html (line 33)
+   (idle) (no file) (line 0)
+
+
index bd6b456..c3e91b5 100644 (file)
@@ -2,12 +2,15 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Two Execution Contexts");
-function testStart()
+function startTest()
 {
+    console.profile("Two Execution Contexts");
+
     intermediaryFunction();
 }
 
@@ -18,12 +21,13 @@ function intermediaryFunction()
 </script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page has two script tags with some simple JavaScript.
 <br>
 <br>
 To run this test manually, load it in the browser then load the WebInspector and look at
 the profile.  In the profile there should be two (program) elements.
+<div id="output"></div>
 </body>
 <script>
 function testEnd() {
@@ -31,4 +35,4 @@ function testEnd() {
     printProfilesDataWithoutTime();
 }
 </script>
-</html>
\ No newline at end of file
+</html>
index f376dc8..656f32c 100644 (file)
@@ -1,16 +1,17 @@
-CONSOLE MESSAGE: line 59: User defined function calles built-in functions
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) user-defined-function-calls-built-in-functions.html 8
-CONSOLE MESSAGE: line 75:   (program) user-defined-function-calls-built-in-functions.html 4
-CONSOLE MESSAGE: line 75:   onload user-defined-function-calls-built-in-functions.html 22
-CONSOLE MESSAGE: line 75:    startTest user-defined-function-calls-built-in-functions.html 10
-CONSOLE MESSAGE: line 75:     createElement  0
-CONSOLE MESSAGE: line 75:     createTextNode  0
-CONSOLE MESSAGE: line 75:     appendChild  0
-CONSOLE MESSAGE: line 75:     getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has JavaScript that calls built-in functions. 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be calls to createElement() createTextNode() appendChild() and testEnd(), among others.
 This is inserted Text
+
+
+Profile title: User defined function calles built-in functions
+Thread_1 (no file) (line 0)
+   startTest user-defined-function-calls-built-in-functions.html (line 11)
+      createElement (no file) (line 0)
+      createTextNode (no file) (line 0)
+      appendChild (no file) (line 0)
+      getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index 76363cf..bdb1d5d 100644 (file)
@@ -2,12 +2,15 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("User defined function calles built-in functions");
 function startTest()
 {
+    console.profile("User defined function calles built-in functions");
+
     var newP = document.createElement("p");
     var textNode =document.createTextNode("This is inserted Text");
     newP.appendChild(textNode);
@@ -28,4 +31,4 @@ the profile.  In the profile there should be calls to createElement() createText
 appendChild() and testEnd(), among others.
 <div id="output"></div>
 </body>
-</html>
\ No newline at end of file
+</html>
index 5890928..979ea98 100644 (file)
@@ -1,21 +1,17 @@
-CONSOLE MESSAGE: line 59: Call window.eval()
-CONSOLE MESSAGE: line 75: Thread_1  0
-CONSOLE MESSAGE: line 75:  (program) window-dot-eval.html 8
-CONSOLE MESSAGE: line 75:   (program) window-dot-eval.html 4
-CONSOLE MESSAGE: line 75:   (program) window-dot-eval.html 15
-CONSOLE MESSAGE: line 75:    eval  0
-CONSOLE MESSAGE: line 75:     (program)  1
-CONSOLE MESSAGE: line 75:   onload window-dot-eval.html 18
-CONSOLE MESSAGE: line 75:    testStart window-dot-eval.html 10
-CONSOLE MESSAGE: line 75:     evalFunction  1
-CONSOLE MESSAGE: line 75:      insertNewText profiler-test-JS-resources.js 17
-CONSOLE MESSAGE: line 75:       createElement  0
-CONSOLE MESSAGE: line 75:       createTextNode  0
-CONSOLE MESSAGE: line 75:       appendChild  0
-CONSOLE MESSAGE: line 75:       getElementById  0
-CONSOLE MESSAGE: line 75:     endTest profiler-test-JS-resources.js 1
-CONSOLE MESSAGE: line 75:  (idle)  0
 This page has a call to window.eval(). 
 
 To run this test manually, load it in the browser then load the WebInspector and look at the profile. In the profile there should be a call to eval().
-This is inserted Text
+
+Profile title: Call window.eval()
+Thread_1 (no file) (line 0)
+   startTest window-dot-eval.html (line 11)
+      evalFunction (no file) (line 1)
+         insertNewText profiler-test-JS-resources.js (line 17)
+            createElement (no file) (line 0)
+            createTextNode (no file) (line 0)
+            appendChild (no file) (line 0)
+            getElementById (no file) (line 0)
+      endTest profiler-test-JS-resources.js (line 1)
+   (idle) (no file) (line 0)
+
+
index b7a569b..7d983ac 100644 (file)
@@ -2,20 +2,26 @@
 <head>
 <script src="resources/profiler-test-JS-resources.js"></script>
 <script>
-if (window.layoutTestController)
+if (window.layoutTestController) {
     layoutTestController.dumpAsText();
+    layoutTestController.setJavaScriptProfilingEnabled(true);
+}
 
-console.profile("Call window.eval()");
-function testStart()
+function startTest()
 {
+    console.profile("Call window.eval()");
+
     evalFunction();
+
     endTest();
 }
 </script>
-<script> window.eval("function evalFunction() { insertNewText(); }");</script>
+<script>
+window.eval("function evalFunction() { insertNewText(); }");
+</script>
 </head>
 
-<body onload="testStart()">
+<body onload="startTest()">
 This page has a call to window.eval().
 <br>
 <br>
index 906bdd1..944ef6a 100644 (file)
@@ -1,5 +1,91 @@
 2008-10-28  Timothy Hatcher  <timothy@apple.com>
 
+        Make the Profiles panel in the Web Inspector have an enable screen.
+        Profiling now needs to be enabled before console.profile() works.
+
+        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
+        not slow down JavaScript all the time
+
+        Reviewed by Darin Adler and Kevin McCullough.
+
+        * English.lproj/localizedStrings.js: New strings.
+        * WebCore.base.exp: New and changed exports.
+        * WebCore.vcproj/WebCore.vcproj: Add the PanelEnablerView.js file.
+        * bindings/js/JSDOMWindowBase.cpp:
+        (WebCore::JSDOMWindowBase::supportsProfiling): Call InspectorController:profilerEnabled.
+        * inspector/InspectorController.cpp:
+        (WebCore::InspectorController::InspectorController): Initialize the m_startProfiling
+        Timer to call InspectorController::startUserInitiatedProfiling.
+        (WebCore::InspectorController::startUserInitiatedProfilingSoon): Start a one-shot timer
+        that calls InspectorController::startUserInitiatedProfiling.
+        (WebCore::InspectorController::startUserInitiatedProfiling): Recompile all JavaScript
+        and enable the profiler if the profiler was not enabled.
+        (WebCore::InspectorController::stopUserInitiatedProfiling): Rearrange code for readability.
+        (WebCore::InspectorController::enableProfiler): Recompile all the JavaScript functions
+        if the skipRecompile argument is false. Call the profilerWasEnabled script function.
+        (WebCore::InspectorController::disableProfiler): Recompile all the JavaScript functions.
+        Call the profilerWasEnabled script function.
+        (WebCore::InspectorController::disableDebugger): Set m_attachDebuggerWhenShown to false,
+        so it won't be started later.
+        * inspector/InspectorController.h:
+        (WebCore::InspectorController::profilerEnabled): Return enabled() && m_profilerEnabled.
+        * inspector/front-end/Images/debuggingButtons.png: Remove.
+        * inspector/front-end/Images/enableButtons.png: Added.
+        * inspector/front-end/Images/profilesSilhouette.png: Added.
+        * inspector/front-end/Images/scriptsSilhouette.png: Added.
+        * inspector/front-end/PanelEnablerView.js: Added.
+        (WebInspector.PanelEnablerView):
+        (WebInspector.PanelEnablerView.prototype._enableButtonCicked): Fire the "enable clicked"
+        event so listeners can do their thing.
+        (WebInspector.PanelEnablerView.prototype._windowResized): Test if the icon should be hidden.
+        * inspector/front-end/ProfilesPanel.js:
+        (WebInspector.ProfilesPanel): Create the PanelEnablerView and the strings needed for it.
+        (WebInspector.ProfilesPanel.prototype.get statusBarItems): Include the enableToggleButton.
+        (WebInspector.ProfilesPanel.prototype.profilerWasEnabled): Call reset and populateInterface.
+        (WebInspector.ProfilesPanel.prototype.profilerWasDisabled): Call reset.
+        (WebInspector.ProfilesPanel.prototype.reset): Call _updateInterface.
+        (WebInspector.ProfilesPanel.prototype.setRecordingProfile): Moved in the code, no changes.
+        (WebInspector.ProfilesPanel.prototype._updateInterface): Update the toggle button and
+        show/hide other buttons. Also show/hide the PanelEnablerView.
+        (WebInspector.ProfilesPanel.prototype._enableProfiling): Call _toggleProfiling if not enabled.
+        (WebInspector.ProfilesPanel.prototype._toggleProfiling): Call InspectorController's
+        disableProfiler or enableProfiler.
+        * inspector/front-end/ScriptsPanel.js:
+        (WebInspector.ScriptsPanel): Replace the overlay element with a PanelEnablerView. Replace the
+        debuggingButton with the enableToggleButton.
+        (WebInspector.ScriptsPanel.prototype.get statusBarItems): Replace the debuggingButton with
+        the enableToggleButton.
+        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons): Hide/show the pauseOnExceptionButton
+        when needed. Replace the overlay element with a PanelEnablerView. Replace the debuggingButton
+        with the enableToggleButton.
+        (WebInspector.ScriptsPanel.prototype._enableDebugging): Call _toggleDebugging when not enabled.
+        (WebInspector.ScriptsPanel.prototype._toggleDebugging): Remove the call to _clearInterface,
+        since reset is called from debuggerWasEnabled and debuggerWasDisabled.
+        * inspector/front-end/View.js: Inherit from WebInspector.Object.
+        * inspector/front-end/WebKit.qrc: Add the PanelEnablerView.js file.
+        * inspector/front-end/inspector.css: New styles for the PanelEnablerView.
+        * inspector/front-end/inspector.html: Add the PanelEnablerView.js file.
+        * inspector/front-end/inspector.js:
+        (WebInspector.profilerWasEnabled): Added. Calls the ProfilesPanel.
+        (WebInspector.profilerWasDisabled): Ditto.
+        * page/Console.cpp:
+        (WebCore::Console::error): Remove null check for m_frame, since m_frame isn't used.
+        (WebCore::Console::info): Ditto.
+        (WebCore::Console::log): Ditto.
+        (WebCore::Console::assertCondition): Ditto.
+        (WebCore::Console::dirxml): Remove null check for m_frame and use this->page().
+        (WebCore::Console::count): Ditto.
+        (WebCore::Console::profile): Return early if InspectorController::profilerEnabled is false.
+        (WebCore::Console::profileEnd): Ditto.
+        (WebCore::Console::warn): Remove null check for m_frame, since m_frame isn't used.
+        * page/Settings.cpp:
+        (WebCore::Settings::Settings): Remove initialization of m_didInitializeDeveloperExtrasEnabled.
+        (WebCore::Settings::setDeveloperExtrasEnabled): Remove code that recompiled functions.
+        Now just sets the member boolean.
+        * page/Settings.h: Remove m_didInitializeDeveloperExtrasEnabled.
+
+2008-10-28  Timothy Hatcher  <timothy@apple.com>
+
         Rename a few methods related to attaching and detaching the debugger. Also
         adds stub methods for enabling and disabling the profiler.
 
index b0d79ab..8a95d59 100644 (file)
Binary files a/WebCore/English.lproj/localizedStrings.js and b/WebCore/English.lproj/localizedStrings.js differ
index 504b0c4..66f310c 100644 (file)
@@ -380,10 +380,12 @@ __ZN7WebCore19CSSStyleDeclaration11setPropertyERKNS_6StringES3_Ri
 __ZN7WebCore19InspectorController12attachWindowEv
 __ZN7WebCore19InspectorController12detachWindowEv
 __ZN7WebCore19InspectorController14enableDebuggerEv
+__ZN7WebCore19InspectorController14enableProfilerEb
 __ZN7WebCore19InspectorController15disableDebuggerEv
+__ZN7WebCore19InspectorController15disableProfilerEv
 __ZN7WebCore19InspectorController16setWindowVisibleEbb
 __ZN7WebCore19InspectorController26stopUserInitiatedProfilingEv
-__ZN7WebCore19InspectorController27startUserInitiatedProfilingEv
+__ZN7WebCore19InspectorController27startUserInitiatedProfilingEPNS_5TimerIS0_EE
 __ZN7WebCore19InspectorController4showEv
 __ZN7WebCore19InspectorController5closeEv
 __ZN7WebCore19InspectorController7inspectEPNS_4NodeE
@@ -763,6 +765,7 @@ __ZNK7WebCore16HTMLInputElement12autoCompleteEv
 __ZNK7WebCore16ResourceResponse13nsURLResponseEv
 __ZNK7WebCore17ResourceErrorBase8lazyInitEv
 __ZNK7WebCore19InspectorController17drawNodeHighlightERNS_15GraphicsContextE
+__ZNK7WebCore19InspectorController7enabledEv
 __ZNK7WebCore19ResourceRequestBase3urlEv
 __ZNK7WebCore19ResourceRequestBase7isEmptyEv
 __ZNK7WebCore19SelectionController17isInPasswordFieldEv
index b21557a..01e7481 100644 (file)
                                        >\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\inspector\front-end\PanelEnablerView.js"\r
+                                       >\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\inspector\front-end\Placard.js"\r
                                        >\r
                                </File>\r
index 8dc831c..610e198 100644 (file)
@@ -37,6 +37,7 @@
 #include "FrameTree.h"
 #include "GCController.h"
 #include "HTMLDocument.h"
+#include "InspectorController.h"
 #include "JSAudioConstructor.h"
 #include "JSDedicatedWorkerConstructor.h"
 #include "JSDOMWindowCustom.h"
@@ -716,11 +717,11 @@ bool JSDOMWindowBase::supportsProfiling() const
     if (!frame)
         return false;
 
-    Settings* settings = frame->settings();
-    if (!settings)
+    Page* page = frame->page();
+    if (!page)
         return false;
-    
-    return settings->developerExtrasEnabled();
+
+    return page->inspectorController()->profilerEnabled();
 }
 
 bool JSDOMWindowBase::shouldInterruptScript() const
index 7d8287c..2863ecf 100644 (file)
@@ -445,7 +445,7 @@ SIMPLE_INSPECTOR_CALLBACK(stepOutOfFunctionInDebugger, stepOutOfFunctionInDebugg
 #endif
 SIMPLE_INSPECTOR_CALLBACK(closeWindow, closeWindow);
 SIMPLE_INSPECTOR_CALLBACK(clearMessages, clearConsoleMessages);
-SIMPLE_INSPECTOR_CALLBACK(startProfiling, startUserInitiatedProfiling);
+SIMPLE_INSPECTOR_CALLBACK(startProfiling, startUserInitiatedProfilingSoon);
 SIMPLE_INSPECTOR_CALLBACK(stopProfiling, stopUserInitiatedProfiling);
 SIMPLE_INSPECTOR_CALLBACK(enableProfiler, enableProfiler);
 SIMPLE_INSPECTOR_CALLBACK(disableProfiler, disableProfiler);
@@ -1080,6 +1080,7 @@ InspectorController::InspectorController(Page* page, InspectorClient* client)
     , m_currentUserInitiatedProfileNumber(-1)
     , m_nextUserInitiatedProfileNumber(1)
     , m_previousMessage(0)
+    , m_startProfiling(this, &InspectorController::startUserInitiatedProfiling)
 {
     ASSERT_ARG(page, page);
     ASSERT_ARG(client, client);
@@ -1134,7 +1135,6 @@ bool InspectorController::enabled() const
 {
     if (!m_inspectedPage)
         return false;
-
     return m_inspectedPage->settings()->developerExtrasEnabled();
 }
 
@@ -1683,19 +1683,31 @@ void InspectorController::closeWindow()
     m_client->closeWindow();
 }
 
-void InspectorController::startUserInitiatedProfiling()
+void InspectorController::startUserInitiatedProfilingSoon()
+{
+    m_startProfiling.startOneShot(0);
+}
+
+void InspectorController::startUserInitiatedProfiling(Timer<InspectorController>*)
 {
     if (!enabled())
         return;
 
-    m_recordingUserInitiatedProfile = true;
+    if (!profilerEnabled()) {
+        enableProfiler(true);
+        JavaScriptDebugServer::shared().recompileAllJSFunctions();
+    }
 
-    ExecState* exec = toJSDOMWindow(m_inspectedPage->mainFrame())->globalExec();
+    m_recordingUserInitiatedProfile = true;
     m_currentUserInitiatedProfileNumber = m_nextUserInitiatedProfileNumber++;
+
     UString title = UserInitiatedProfileName;
     title += ".";
     title += UString::from(m_currentUserInitiatedProfileNumber);
+
+    ExecState* exec = toJSDOMWindow(m_inspectedPage->mainFrame())->globalExec();
     Profiler::profiler()->startProfiling(exec, title);
+
     toggleRecordButton(true);
 }
 
@@ -1706,24 +1718,43 @@ void InspectorController::stopUserInitiatedProfiling()
 
     m_recordingUserInitiatedProfile = false;
 
-    ExecState* exec = toJSDOMWindow(m_inspectedPage->mainFrame())->globalExec();
     UString title =  UserInitiatedProfileName;
     title += ".";
     title += UString::from(m_currentUserInitiatedProfileNumber);
+
+    ExecState* exec = toJSDOMWindow(m_inspectedPage->mainFrame())->globalExec();
     RefPtr<Profile> profile = Profiler::profiler()->stopProfiling(exec, title);
     if (profile)
         addProfile(profile, 0, UString());
+
     toggleRecordButton(false);
 }
 
-void InspectorController::enableProfiler()
+void InspectorController::enableProfiler(bool skipRecompile)
 {
+    if (m_profilerEnabled)
+        return;
+
     m_profilerEnabled = true;
+
+    if (!skipRecompile)
+        JavaScriptDebugServer::shared().recompileAllJSFunctionsSoon();
+
+    if (m_scriptContext && m_scriptObject)
+        callSimpleFunction(m_scriptContext, m_scriptObject, "profilerWasEnabled");
 }
 
 void InspectorController::disableProfiler()
 {
+    if (!m_profilerEnabled)
+        return;
+
     m_profilerEnabled = false;
+
+    JavaScriptDebugServer::shared().recompileAllJSFunctionsSoon();
+
+    if (m_scriptContext && m_scriptObject)
+        callSimpleFunction(m_scriptContext, m_scriptObject, "profilerWasDisabled");
 }
 
 static void addHeaders(JSContextRef context, JSObjectRef object, const HTTPHeaderMap& headers, JSValueRef* exception)
@@ -2537,7 +2568,9 @@ void InspectorController::disableDebugger()
     ASSERT(m_inspectedPage);
 
     JavaScriptDebugServer::shared().removeListener(this, m_inspectedPage);
+
     m_debuggerEnabled = false;
+    m_attachDebuggerWhenShown = false;
 
     if (m_scriptContext && m_scriptObject)
         callSimpleFunction(m_scriptContext, m_scriptObject, "debuggerWasDisabled");
index 5c454ab..62f3bdb 100644 (file)
 #include "Console.h"
 #include "PlatformString.h"
 #include "StringHash.h"
+#include "Timer.h"
+
 #include <JavaScriptCore/JSContextRef.h>
+
 #include <wtf/HashMap.h>
 #include <wtf/HashSet.h>
 #include <wtf/Vector.h>
@@ -146,12 +149,13 @@ public:
     void close();
 
     bool isRecordingUserInitiatedProfile() const { return m_recordingUserInitiatedProfile; }
-    void startUserInitiatedProfiling();
+    void startUserInitiatedProfilingSoon();
+    void startUserInitiatedProfiling(Timer<InspectorController>* = 0);
     void stopUserInitiatedProfiling();
 
-    void enableProfiler();
+    void enableProfiler(bool skipRecompile = false);
     void disableProfiler();
-    bool profilerEnabled() const { return m_profilerEnabled; }
+    bool profilerEnabled() const { return enabled() && m_profilerEnabled; }
 
     bool windowVisible();
     void setWindowVisible(bool visible = true, bool attached = false);
@@ -315,6 +319,7 @@ private:
     int m_currentUserInitiatedProfileNumber;
     unsigned m_nextUserInitiatedProfileNumber;
     ConsoleMessage* m_previousMessage;
+    Timer<InspectorController> m_startProfiling;
 };
 
 } // namespace WebCore
diff --git a/WebCore/inspector/front-end/Images/debuggingButtons.png b/WebCore/inspector/front-end/Images/debuggingButtons.png
deleted file mode 100644 (file)
index c9cc618..0000000
Binary files a/WebCore/inspector/front-end/Images/debuggingButtons.png and /dev/null differ
diff --git a/WebCore/inspector/front-end/Images/enableButtons.png b/WebCore/inspector/front-end/Images/enableButtons.png
new file mode 100644 (file)
index 0000000..facee60
Binary files /dev/null and b/WebCore/inspector/front-end/Images/enableButtons.png differ
diff --git a/WebCore/inspector/front-end/Images/profilesSilhouette.png b/WebCore/inspector/front-end/Images/profilesSilhouette.png
new file mode 100644 (file)
index 0000000..42bb966
Binary files /dev/null and b/WebCore/inspector/front-end/Images/profilesSilhouette.png differ
diff --git a/WebCore/inspector/front-end/Images/scriptsSilhouette.png b/WebCore/inspector/front-end/Images/scriptsSilhouette.png
new file mode 100644 (file)
index 0000000..206396f
Binary files /dev/null and b/WebCore/inspector/front-end/Images/scriptsSilhouette.png differ
diff --git a/WebCore/inspector/front-end/PanelEnablerView.js b/WebCore/inspector/front-end/PanelEnablerView.js
new file mode 100644 (file)
index 0000000..6ec565b
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2008 Apple 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 INC. OR
+ * 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.
+ */
+
+WebInspector.PanelEnablerView = function(identifier, headingText, disclaimerText, buttonTitle)
+{
+    WebInspector.View.call(this);
+
+    this.element.addStyleClass("panel-enabler-view");
+    this.element.addStyleClass(identifier);
+
+    this.contentElement = document.createElement("div");
+    this.contentElement.className = "panel-enabler-view-content";
+    this.element.appendChild(this.contentElement);
+
+    this.imageElement = document.createElement("img");
+    this.contentElement.appendChild(this.imageElement);
+
+    this.choicesForm = document.createElement("form");
+    this.contentElement.appendChild(this.choicesForm);
+
+    this.headerElement = document.createElement("h1");
+    this.headerElement.textContent = headingText;
+    this.choicesForm.appendChild(this.headerElement);
+
+    this.disclaimerElement = document.createElement("div");
+    this.disclaimerElement.className = "panel-enabler-disclaimer";
+    this.disclaimerElement.textContent = disclaimerText;
+    this.choicesForm.appendChild(this.disclaimerElement);
+
+    this.enableButton = document.createElement("button");
+    this.enableButton.setAttribute("type", "button");
+    this.enableButton.textContent = buttonTitle;
+    this.enableButton.addEventListener("click", this._enableButtonCicked.bind(this), false);
+    this.choicesForm.appendChild(this.enableButton);
+
+    window.addEventListener("resize", this._windowResized.bind(this), true);
+}
+
+WebInspector.PanelEnablerView.prototype = {
+    _enableButtonCicked: function()
+    {
+        this.dispatchEventToListeners("enable clicked");
+    },
+
+    _windowResized: function()
+    {
+        this.imageElement.removeStyleClass("hidden");
+
+        if (this.element.offsetWidth < (this.choicesForm.offsetWidth + this.imageElement.offsetWidth))
+            this.imageElement.addStyleClass("hidden");
+    }
+}
+
+WebInspector.PanelEnablerView.prototype.__proto__ = WebInspector.View.prototype;
index 56bf3cd..ea3b85c 100644 (file)
@@ -31,6 +31,14 @@ WebInspector.ProfilesPanel = function()
 
     this.element.addStyleClass("profiles");
 
+    var panelEnablerHeading = WebInspector.UIString("You need to enable profiling before you can use the Profiles panel.");
+    var panelEnablerDisclaimer = WebInspector.UIString("Enabling profiling will make scripts run slower.");
+    var panelEnablerButton = WebInspector.UIString("Enable Profiling");
+    this.panelEnablerView = new WebInspector.PanelEnablerView("profiles", panelEnablerHeading, panelEnablerDisclaimer, panelEnablerButton);
+    this.panelEnablerView.addEventListener("enable clicked", this._enableProfiling, this);
+
+    this.element.appendChild(this.panelEnablerView.element);
+
     this.sidebarElement = document.createElement("div");
     this.sidebarElement.id = "profiles-sidebar";
     this.sidebarElement.className = "sidebar";
@@ -51,6 +59,10 @@ WebInspector.ProfilesPanel = function()
     this.profileViews.id = "profile-views";
     this.element.appendChild(this.profileViews);
 
+    this.enableToggleButton = document.createElement("button");
+    this.enableToggleButton.className = "enable-toggle-status-bar-item status-bar-item";
+    this.enableToggleButton.addEventListener("click", this._toggleProfiling.bind(this), false);
+
     this.recordButton = document.createElement("button");
     this.recordButton.title = WebInspector.UIString("Start profiling.");
     this.recordButton.id = "record-profile-status-bar-item";
@@ -75,7 +87,7 @@ WebInspector.ProfilesPanel.prototype = {
 
     get statusBarItems()
     {
-        return [this.recordButton, this.profileViewStatusBarItemsContainer];
+        return [this.enableToggleButton, this.recordButton, this.profileViewStatusBarItemsContainer];
     },
 
     show: function()
@@ -94,6 +106,17 @@ WebInspector.ProfilesPanel.prototype = {
             this._shouldPopulateProfiles = true;
     },
 
+    profilerWasEnabled: function()
+    {
+        this.reset();
+        this.populateInterface();
+    },
+
+    profilerWasDisabled: function()
+    {
+        this.reset();
+    },
+
     reset: function()
     {
         if (this._profiles) {
@@ -118,6 +141,8 @@ WebInspector.ProfilesPanel.prototype = {
         this.profileViews.removeChildren();
 
         this.profileViewStatusBarItemsContainer.removeChildren();
+
+        this._updateInterface();
     },
 
     handleKeyEvent: function(event)
@@ -287,6 +312,36 @@ WebInspector.ProfilesPanel.prototype = {
         }
     },
 
+    setRecordingProfile: function(isProfiling)
+    {
+        this.recording = isProfiling;
+
+        if (isProfiling) {
+            this.recordButton.addStyleClass("toggled-on");
+            this.recordButton.title = WebInspector.UIString("Stop profiling.");
+        } else {
+            this.recordButton.removeStyleClass("toggled-on");
+            this.recordButton.title = WebInspector.UIString("Start profiling.");
+        }
+    },
+
+    _updateInterface: function()
+    {
+        if (InspectorController.profilerEnabled()) {
+            this.enableToggleButton.title = WebInspector.UIString("Profiling enabled. Click to disable.");
+            this.enableToggleButton.addStyleClass("toggled-on");
+            this.recordButton.removeStyleClass("hidden");
+            this.profileViewStatusBarItemsContainer.removeStyleClass("hidden");
+            this.panelEnablerView.visible = false;
+        } else {
+            this.enableToggleButton.title = WebInspector.UIString("Profiling disabled. Click to enable.");
+            this.enableToggleButton.removeStyleClass("toggled-on");
+            this.recordButton.addStyleClass("hidden");
+            this.profileViewStatusBarItemsContainer.addStyleClass("hidden");
+            this.panelEnablerView.visible = true;
+        }
+    },
+
     _recordClicked: function()
     {
         this.recording = !this.recording;
@@ -297,18 +352,19 @@ WebInspector.ProfilesPanel.prototype = {
             InspectorController.stopProfiling();
     },
 
-    setRecordingProfile: function(isProfiling)
+    _enableProfiling: function()
     {
-        this.recording = isProfiling;
-        
-        if (isProfiling) {
-            this.recordButton.addStyleClass("toggled-on");
-            this.recordButton.title = WebInspector.UIString("Stop profiling.");
-        } else {
-            this.recordButton.removeStyleClass("toggled-on");
-            this.recordButton.title = WebInspector.UIString("Start profiling.");
-        }
-    
+        if (InspectorController.profilerEnabled())
+            return;
+        this._toggleProfiling();
+    },
+
+    _toggleProfiling: function()
+    {
+        if (InspectorController.profilerEnabled())
+            InspectorController.disableProfiler();
+        else
+            InspectorController.enableProfiler();
     },
 
     _populateProfiles: function()
index 160ad92..1120adf 100644 (file)
@@ -140,23 +140,21 @@ WebInspector.ScriptsPanel = function()
 
     this.sidebarPanes.scopechain.expanded = true;
 
-    this.attachOverlayElement = document.createElement("div");
-    this.attachOverlayElement.id = "scripts-attach-overlay";
+    var panelEnablerHeading = WebInspector.UIString("You need to enable debugging before you can use the Scripts panel.");
+    var panelEnablerDisclaimer = WebInspector.UIString("Enabling debugging will make scripts run slower.");
+    var panelEnablerButton = WebInspector.UIString("Enable Debugging");
 
-    var attachButton = document.createElement("button");
-    attachButton.textContent = WebInspector.UIString("Start Debugging");
-    attachButton.addEventListener("click", this._toggleDebugging.bind(this), false);
-    this.attachOverlayElement.appendChild(attachButton);
+    this.panelEnablerView = new WebInspector.PanelEnablerView("scripts", panelEnablerHeading, panelEnablerDisclaimer, panelEnablerButton);
+    this.panelEnablerView.addEventListener("enable clicked", this._enableDebugging, this);
 
-    this.element.appendChild(this.attachOverlayElement);
+    this.element.appendChild(this.panelEnablerView.element);
     this.element.appendChild(this.viewsContainerElement);
     this.element.appendChild(this.sidebarElement);
     this.element.appendChild(this.sidebarResizeElement);
 
-    this.debuggingButton = document.createElement("button");
-    this.debuggingButton.id = "scripts-debugging-status-bar-item";
-    this.debuggingButton.className = "status-bar-item";
-    this.debuggingButton.addEventListener("click", this._toggleDebugging.bind(this), false);
+    this.enableToggleButton = document.createElement("button");
+    this.enableToggleButton.className = "enable-toggle-status-bar-item status-bar-item";
+    this.enableToggleButton.addEventListener("click", this._toggleDebugging.bind(this), false);
 
     this.pauseOnExceptionButton = document.createElement("button");
     this.pauseOnExceptionButton.id = "scripts-pause-on-exceptions-status-bar-item";
@@ -178,7 +176,7 @@ WebInspector.ScriptsPanel.prototype = {
 
     get statusBarItems()
     {
-        return [this.debuggingButton, this.pauseOnExceptionButton];
+        return [this.enableToggleButton, this.pauseOnExceptionButton];
     },
 
     get paused()
@@ -654,18 +652,15 @@ WebInspector.ScriptsPanel.prototype = {
     _updateDebuggerButtons: function()
     {
         if (InspectorController.debuggerEnabled()) {
-            this.debuggingButton.title = WebInspector.UIString("Stop debugging.");
-            this.debuggingButton.addStyleClass("toggled-on");
-            this.pauseButton.disabled = false;
-
-            if (this.attachOverlayElement.parentNode)
-                this.attachOverlayElement.parentNode.removeChild(this.attachOverlayElement);
+            this.enableToggleButton.title = WebInspector.UIString("Debugging enabled. Click to disable.");
+            this.enableToggleButton.addStyleClass("toggled-on");
+            this.pauseOnExceptionButton.removeStyleClass("hidden");
+            this.panelEnablerView.visible = false;
         } else {
-            this.debuggingButton.title = WebInspector.UIString("Start debugging.");
-            this.debuggingButton.removeStyleClass("toggled-on");
-            this.pauseButton.disabled = true;
-
-            this.element.appendChild(this.attachOverlayElement);
+            this.enableToggleButton.title = WebInspector.UIString("Debugging disabled. Click to enable.");
+            this.enableToggleButton.removeStyleClass("toggled-on");
+            this.pauseOnExceptionButton.addStyleClass("hidden");
+            this.panelEnablerView.visible = true;
         }
 
         this._updatePauseOnExceptionsButton();
@@ -733,6 +728,13 @@ WebInspector.ScriptsPanel.prototype = {
         this._updateBackAndForwardButtons();
     },
 
+    _enableDebugging: function()
+    {
+        if (InspectorController.debuggerEnabled())
+            return;
+        this._toggleDebugging();
+    },
+
     _toggleDebugging: function()
     {
         this._paused = false;
@@ -743,8 +745,6 @@ WebInspector.ScriptsPanel.prototype = {
             InspectorController.disableDebugger();
         else
             InspectorController.enableDebugger();
-
-        this._clearInterface();
     },
 
     _togglePauseOnExceptions: function()
index 9daad12..632a61a 100644 (file)
@@ -70,3 +70,5 @@ WebInspector.View.prototype = {
             this.element.parentNode.removeChild(this.element);
     }
 }
+
+WebInspector.View.prototype.__proto__ = WebInspector.Object.prototype;
index e0de073..0b38a17 100644 (file)
@@ -20,6 +20,7 @@
     <file>Object.js</file>
     <file>ObjectPropertiesSection.js</file>
     <file>Panel.js</file>
+    <file>PanelEnablerView.js</file>
     <file>Placard.js</file>
     <file>ProfilesPanel.js</file>
     <file>ProfileView.js</file>
index 78d384d..b8aa2c8 100644 (file)
@@ -1836,7 +1836,7 @@ body.inactive .data-grid th.sort-ascending, body.inactive .data-grid th.sort-des
     background-image: url(Images/errorIcon.png);
 }
 
-#scripts-attach-overlay {
+.panel-enabler-view {
     z-index: 1000;
     position: absolute;
     top: 0;
@@ -1844,34 +1844,128 @@ body.inactive .data-grid th.sort-ascending, body.inactive .data-grid th.sort-des
     right: 0;
     bottom: 0;
     background-color: white;
-    color: rgb(96, 96, 96);
-    padding: 75px 50px;
+    font-size: 13px;
     text-align: center;
+    overflow-x: hidden;
+    overflow-y: overlay;
+    display: none;
+}
+
+.panel-enabler-view.visible {
+    display: block;
+}
+
+.panel-enabler-view .panel-enabler-view-content {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    max-height: 390px;
+    margin: auto;
+    white-space: nowrap;
+}
+
+.panel-enabler-view h1 {
+    color: rgb(110, 116, 128);
     font-size: 16px;
+    line-height: 20px;
+    font-weight: normal;
+    margin-top: 0;
 }
 
-#scripts-attach-overlay h1 {
-    font-size: 18px;
+.panel-enabler-disclaimer {
+    font-size: 10px;
+    color: rgb(110, 116, 128);
+    margin-bottom: 12px;
 }
 
-#scripts-attach-overlay button {
-    padding-left: 15px;
-    padding-right: 15px;
+.panel-enabler-disclaimer:empty {
+    display: none;
+}
+
+.panel-enabler-view img {
+    height: 100%;
+    min-height: 200px;
+    max-width: 100%;
+    top: 0;
+    bottom: 0;
+    padding: 20px 0 20px 20px;
+    margin: auto;
+    vertical-align: middle;
+}
+
+.panel-enabler-view img.hidden {
+    display: initial !important;
+    width: 0;
+}
+
+.panel-enabler-view form {
+    display: inline-block;
+    vertical-align: middle;
+    width: 330px;
+    margin: 0;
+    padding: 15px;
+    white-space: normal;
+}
+
+.panel-enabler-view label {
+    position: relative;
+    display: block;
+    text-align: left;
+    margin-left: 50px;
+    margin-bottom: 6px;
+    line-height: 18px;
+    word-break: break-word;
+}
+
+.panel-enabler-view button {
+    font-size: 13px;
+    margin: 6px 0 0 0;
+    padding: 3px 20px;
+    color: rgb(6, 6, 6);
+    height: 24px;
+    background-color: transparent;
+    border: 1px solid rgb(165, 165, 165);
+    background-color: rgb(237, 237, 237);
+    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)));
+    -webkit-border-radius: 12px;
+    -webkit-appearance: none;
+}
+
+.panel-enabler-view button:active {
+    background-color: rgb(215, 215, 215);
+    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 194)), to(rgb(239, 239, 239)));
+}
+
+body.inactive .panel-enabler-view button, .panel-enabler-view button:disabled {
+    color: rgb(130, 130, 130);
+    border-color: rgb(212, 212, 212);
+    background-color: rgb(239, 239, 239);
+    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(250, 250, 250)), to(rgb(235, 235, 235)));
+}
+
+.panel-enabler-view.scripts img {
+    content: url(Images/scriptsSilhouette.png);
+}
+
+.panel-enabler-view.profiles img {
+    content: url(Images/profilesSilhouette.png);
 }
 
-#scripts-debugging-status-bar-item {
-    background-image: url(Images/debuggingButtons.png);
+button.enable-toggle-status-bar-item {
+    background-image: url(Images/enableButtons.png);
 }
 
-#scripts-debugging-status-bar-item:active {
+button.enable-toggle-status-bar-item:active {
     background-position: 32px 0;
 }
 
-#scripts-debugging-status-bar-item.toggled-on {
+button.enable-toggle-status-bar-item.toggled-on {
     background-position: 0 24px;
 }
 
-#scripts-debugging-status-bar-item.toggled-on:active {
+button.enable-toggle-status-bar-item.toggled-on:active {
     background-position: 32px 24px;
 }
 
index 7603974..cb38886 100644 (file)
@@ -56,6 +56,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     <script type="text/javascript" src="PropertiesSidebarPane.js"></script>
     <script type="text/javascript" src="StylesSidebarPane.js"></script>
     <script type="text/javascript" src="Panel.js"></script>
+    <script type="text/javascript" src="PanelEnablerView.js"></script>
     <script type="text/javascript" src="ElementsPanel.js"></script>
     <script type="text/javascript" src="ResourcesPanel.js"></script>
     <script type="text/javascript" src="ScriptsPanel.js"></script>
index d47d6cb..0eab6d1 100644 (file)
@@ -803,6 +803,16 @@ WebInspector.debuggerWasDisabled = function()
     this.panels.scripts.debuggerWasDisabled();
 }
 
+WebInspector.profilerWasEnabled = function()
+{
+    this.panels.profiles.profilerWasEnabled();
+}
+
+WebInspector.profilerWasDisabled = function()
+{
+    this.panels.profiles.profilerWasDisabled();
+}
+
 WebInspector.parsedScriptSource = function(sourceID, sourceURL, source, startingLine)
 {
     this.panels.scripts.addScript(sourceID, sourceURL, source, startingLine);
index 8bc581d..76191c1 100644 (file)
@@ -181,9 +181,6 @@ void Console::error(ExecState* exec, const ArgList& args)
     if (args.isEmpty())
         return;
 
-    if (!m_frame)
-        return;
-
     Page* page = this->page();
     if (!page)
         return;
@@ -205,9 +202,6 @@ void Console::info(ExecState* exec, const ArgList& args)
     if (args.isEmpty())
         return;
 
-    if (!m_frame)
-        return;
-
     Page* page = this->page();
     if (!page)
         return;
@@ -229,9 +223,6 @@ void Console::log(ExecState* exec, const ArgList& args)
     if (args.isEmpty())
         return;
 
-    if (!m_frame)
-        return;
-
     Page* page = this->page();
     if (!page)
         return;
@@ -265,10 +256,7 @@ void Console::dirxml(ExecState* exec, const ArgList& args)
     if (args.isEmpty())
         return;
 
-    if (!m_frame)
-        return;
-
-    Page* page = m_frame->page();
+    Page* page = this->page();
     if (!page)
         return;
 
@@ -302,9 +290,6 @@ void Console::assertCondition(bool condition, ExecState* exec, const ArgList& ar
     if (condition)
         return;
 
-    if (!m_frame)
-        return;
-
     Page* page = this->page();
     if (!page)
         return;
@@ -323,10 +308,7 @@ void Console::assertCondition(bool condition, ExecState* exec, const ArgList& ar
 
 void Console::count(ExecState* exec, const ArgList& args)
 {
-    if (!m_frame)
-        return;
-
-    Page* page = m_frame->page();
+    Page* page = this->page();
     if (!page)
         return;
 
@@ -343,12 +325,27 @@ void Console::count(ExecState* exec, const ArgList& args)
 
 void Console::profile(ExecState* exec, const ArgList& args)
 {
+    Page* page = this->page();
+    if (!page)
+        return;
+
+    // FIXME: log a console message when profiling is disabled.
+    if (!page->inspectorController()->profilerEnabled())
+        return;
+
     UString title = args.at(exec, 0)->toString(exec);
     Profiler::profiler()->startProfiling(exec, title);
 }
 
 void Console::profileEnd(ExecState* exec, const ArgList& args)
 {
+    Page* page = this->page();
+    if (!page)
+        return;
+
+    if (!page->inspectorController()->profilerEnabled())
+        return;
+
     UString title;
     if (args.size() >= 1)
         title = valueToStringWithUndefinedOrNullCheck(exec, args.at(exec, 0));
@@ -428,9 +425,6 @@ void Console::warn(ExecState* exec, const ArgList& args)
     if (args.isEmpty())
         return;
 
-    if (!m_frame)
-        return;
-
     Page* page = this->page();
     if (!page)
         return;
@@ -469,7 +463,6 @@ Page* Console::page() const
 {
     if (!m_frame)
         return 0;
-
     return m_frame->page();
 }
 
index 603d064..786e7df 100644 (file)
@@ -29,7 +29,6 @@
 #include "Frame.h"
 #include "FrameTree.h"
 #include "HistoryItem.h"
-#include "JavaScriptDebugServer.h"
 #include "Page.h"
 #include "PageCache.h"
 #include <limits>
@@ -76,7 +75,6 @@ Settings::Settings(Page* page)
     , m_showsURLsInToolTips(false)
     , m_forceFTPDirectoryListings(false)
     , m_developerExtrasEnabled(false)
-    , m_didInitializeDeveloperExtrasEnabled(false)
     , m_authorAndUserStylesEnabled(true)
     , m_needsSiteSpecificQuirks(false)
     , m_fontRenderingMode(0)
@@ -312,18 +310,7 @@ void Settings::setForceFTPDirectoryListings(bool force)
 
 void Settings::setDeveloperExtrasEnabled(bool developerExtrasEnabled)
 {
-    if (m_developerExtrasEnabled == developerExtrasEnabled)
-        return;
-
     m_developerExtrasEnabled = developerExtrasEnabled;
-
-    // Avoid recompiling when initializing a page.
-    if (!m_didInitializeDeveloperExtrasEnabled) {
-        m_didInitializeDeveloperExtrasEnabled = true;
-        return;
-    }
-
-    JavaScriptDebugServer::shared().recompileAllJSFunctionsSoon();
 }
 
 void Settings::setAuthorAndUserStylesEnabled(bool authorAndUserStylesEnabled)
index 3eb0c4d..6e7cb56 100644 (file)
@@ -221,7 +221,6 @@ namespace WebCore {
         bool m_showsURLsInToolTips : 1;
         bool m_forceFTPDirectoryListings : 1;
         bool m_developerExtrasEnabled : 1;
-        bool m_didInitializeDeveloperExtrasEnabled : 1;
         bool m_authorAndUserStylesEnabled : 1;
         bool m_needsSiteSpecificQuirks : 1;
         unsigned m_fontRenderingMode : 1;
index 4a78e02..c3e645f 100644 (file)
@@ -1,3 +1,20 @@
+2008-10-28  Timothy Hatcher  <timothy@apple.com>
+
+        Add WebInspector methods to enable the profiler.
+
+        https://bugs.webkit.org/show_bug.cgi?id=21927
+
+        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
+        not slow down JavaScript all the time
+
+        Reviewed by Darin Adler and Kevin McCullough.
+
+        * WebInspector/WebInspector.h:
+        * WebInspector/WebInspector.mm:
+        (-[WebInspector isJavaScriptProfilingEnabled]): Added. Calls InspectorController::profilerEnabled.
+        (-[WebInspector setJavaScriptProfilingEnabled:]): Added. Call InspectorController's disableProfiler
+        or enableProfiler methods.
+
 2008-10-27  Timothy Hatcher  <timothy@apple.com>
 
         Rename a few methods related to attaching and detaching the debugger.
index ff6a978..c16726d 100644 (file)
@@ -47,6 +47,9 @@
 - (void)startDebuggingJavaScript:(id)sender;
 - (void)stopDebuggingJavaScript:(id)sender;
 
+- (BOOL)isJavaScriptProfilingEnabled;
+- (void)setJavaScriptProfilingEnabled:(BOOL)enabled;
+
 - (BOOL)isProfilingJavaScript;
 - (void)toggleProfilingJavaScript:(id)sender;
 - (void)startProfilingJavaScript:(id)sender;
index cba1649..c04a56c 100644 (file)
@@ -127,6 +127,25 @@ using namespace WebCore;
     page->inspectorController()->showPanel(InspectorController::ProfilesPanel);
 }
 
+- (BOOL)isJavaScriptProfilingEnabled
+{
+    if (Page* page = core(_webView))
+        return page->inspectorController()->profilerEnabled();
+    return NO;
+}
+
+- (void)setJavaScriptProfilingEnabled:(BOOL)enabled
+{
+    Page* page = core(_webView);
+    if (!page)
+        return;
+
+    if (enabled)
+        page->inspectorController()->enableProfiler();
+    else
+        page->inspectorController()->disableProfiler();
+}
+
 - (void)close:(id)sender 
 {
     if (Page* page = core(_webView))
index 7559021..0ac43d3 100644 (file)
@@ -1,3 +1,20 @@
+2008-10-28  Timothy Hatcher  <timothy@apple.com>
+
+        Add IWebInspector methods to enable the profiler.
+
+        https://bugs.webkit.org/show_bug.cgi?id=21927
+
+        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
+        not slow down JavaScript all the time
+
+        Reviewed by Darin Adler and Kevin McCullough.
+
+        * WebInspector.cpp:
+        (WebInspector::isJavaScriptProfilingEnabled): Added. Calls InspectorController::profilerEnabled.
+        (WebInspector::setJavaScriptProfilingEnabled): Added. Call InspectorController's disableProfiler
+        or enableProfiler methods.
+        * WebInspector.h:
+
 2008-10-27  Timothy Hatcher  <timothy@apple.com>
 
         Rename a few methods related to attaching and detaching the debugger.
index 322cc9e..41e0a2d 100644 (file)
@@ -221,3 +221,38 @@ HRESULT STDMETHODCALLTYPE WebInspector::toggleProfilingJavaScript()
 
     return S_OK;
 }
+
+HRESULT STDMETHODCALLTYPE WebInspector::isJavaScriptProfilingEnabled(BOOL* isProfilingEnabled)
+{
+    if (!isProfiling)
+        return E_POINTER;
+
+    *isProfiling = FALSE;
+
+    if (!m_webView)
+        return S_OK;
+
+    Page* page = m_webView->page();
+    if (!page)
+        return S_OK;
+
+    *isProfilingEnabled = page->inspectorController()->profilerEnabled();
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebInspector::setJavaScriptProfilingEnabled(BOOL enabled)
+{
+    if (!m_webView)
+        return S_OK;
+
+    Page* page = m_webView->page();
+    if (!page)
+        return S_OK;
+
+    if (enabled)
+        page->inspectorController()->enableProfiler();
+    else
+        page->inspectorController()->disableProfiler();
+
+    return S_OK;
+}
index 12d754d..b300098 100644 (file)
@@ -57,6 +57,9 @@ public:
     virtual HRESULT STDMETHODCALLTYPE isProfilingJavaScript(BOOL* isProfiling);
     virtual HRESULT STDMETHODCALLTYPE toggleProfilingJavaScript();
 
+    virtual HRESULT STDMETHODCALLTYPE isJavaScriptProfilingEnabled(BOOL* isProfilingEnabled);
+    virtual HRESULT STDMETHODCALLTYPE setJavaScriptProfilingEnabled(BOOL);
+
 private:
     WebInspector(WebView*);
     ~WebInspector();
index d926c11..cced2fc 100644 (file)
@@ -1,3 +1,31 @@
+2008-10-28  Timothy Hatcher  <timothy@apple.com>
+
+        Add support for enabling the profiler, so the profiling tests can continue
+        work now that the profiler is not always enabled.
+
+        https://bugs.webkit.org/show_bug.cgi?id=21927
+
+        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
+        not slow down JavaScript all the time
+
+        Reviewed by Darin Adler and Kevin McCullough.
+
+        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Make the editor use spaces.
+        * DumpRenderTree/LayoutTestController.cpp:
+        (setJavaScriptProfilingEnabledCallback): Added. Calls LayoutTestController::setJavaScriptProfilingEnabled.
+        (LayoutTestController::staticFunctions): Added setJavaScriptProfilingEnabled to the script class.
+        * DumpRenderTree/LayoutTestController.h:
+        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
+        (LayoutTestController::setJavaScriptProfilingEnabled): Stubbed out with a FIXME.
+        * DumpRenderTree/mac/DumpRenderTree.mm:
+        (resetWebViewToConsistentStateBeforeTesting): Disables the developer extras and disables the profiler.
+        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
+        (LayoutTestController::setJavaScriptProfilingEnabled): Toggles the developer extras and profiler.
+        * DumpRenderTree/win/DumpRenderTree.cpp:
+        (resetWebViewToConsistentStateBeforeTesting): Disables the developer extras and disables the profiler.
+        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
+        (LayoutTestController::setJavaScriptProfilingEnabled): Toggles the developer extras and profiler.
+
 2008-10-28  Pierre-Olivier Latour  <pol@apple.com>
 
         Reviewed by Dan Bernstein
index bfc7500..ca7bdcd 100644 (file)
                BC9D90220C97472E0099A4A3 /* WorkQueue.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WorkQueue.h; sourceTree = "<group>"; };
                BC9D90230C97472E0099A4A3 /* WorkQueueItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WorkQueueItem.h; sourceTree = "<group>"; };
                BCA18B210C9B014B00114369 /* GCControllerMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = GCControllerMac.mm; path = mac/GCControllerMac.mm; sourceTree = "<group>"; };
-               BCA18B220C9B014B00114369 /* LayoutTestControllerMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = LayoutTestControllerMac.mm; path = mac/LayoutTestControllerMac.mm; sourceTree = "<group>"; };
+               BCA18B220C9B014B00114369 /* LayoutTestControllerMac.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = LayoutTestControllerMac.mm; path = mac/LayoutTestControllerMac.mm; sourceTree = "<group>"; };
                BCA18B250C9B015C00114369 /* WorkQueueItemMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = WorkQueueItemMac.mm; path = mac/WorkQueueItemMac.mm; sourceTree = "<group>"; };
                BCA18B2F0C9B01B400114369 /* ObjCController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ObjCController.h; path = mac/ObjCController.h; sourceTree = "<group>"; };
                BCA18B300C9B01B400114369 /* ObjCController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ObjCController.m; path = mac/ObjCController.m; sourceTree = "<group>"; };
                        );
                        name = Controllers;
                        sourceTree = "<group>";
+                       usesTabs = 0;
                };
                1422A2750AF6F4BD00E1A883 /* Delegates */ = {
                        isa = PBXGroup;
index aa717f4..f450543 100644 (file)
@@ -485,6 +485,16 @@ static JSValueRef setDatabaseQuotaCallback(JSContextRef context, JSObjectRef fun
 
 }
 
+static JSValueRef setJavaScriptProfilingEnabledCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    if (argumentCount < 1)
+        return JSValueMakeUndefined(context);
+
+    LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+    controller->setJavaScriptProfilingEnabled(JSValueToBoolean(context, arguments[0]));
+    return JSValueMakeUndefined(context);
+}
+
 static JSValueRef setMainFrameIsFirstResponderCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
     // Has mac implementation
@@ -744,6 +754,7 @@ JSStaticFunction* LayoutTestController::staticFunctions()
         { "setCloseRemainingWindowsWhenComplete", setCloseRemainingWindowsWhenCompleteCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setCustomPolicyDelegate", setCustomPolicyDelegateCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setDatabaseQuota", setDatabaseQuotaCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete }, 
+        { "setJavaScriptProfilingEnabled", setJavaScriptProfilingEnabledCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setMainFrameIsFirstResponder", setMainFrameIsFirstResponderCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setPersistentUserStyleSheetLocation", setPersistentUserStyleSheetLocationCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setPrivateBrowsingEnabled", setPrivateBrowsingEnabledCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
index 649db7a..f27c2c6 100644 (file)
@@ -65,6 +65,7 @@ public:
     void setPopupBlockingEnabled(bool flag);
     void setTabKeyCyclesThroughElements(bool cycles);
     void setSmartInsertDeleteEnabled(bool flag);
+    void setJavaScriptProfilingEnabled(bool profilingEnabled);
     void setUseDashboardCompatibilityMode(bool flag);
     void setUserStyleSheetEnabled(bool flag);
     void setUserStyleSheetLocation(JSStringRef path);
index c99ae47..3a01e60 100644 (file)
@@ -227,6 +227,11 @@ void LayoutTestController::setAuthorAndUserStylesEnabled(bool flag)
     // FIXME: implement
 }
 
+void LayoutTestController::setJavaScriptProfilingEnabled(bool flag)
+{
+    // FIXME: implement
+}
+
 void LayoutTestController::setPopupBlockingEnabled(bool popupBlockingEnabled)
 {
     // FIXME: implement
index 596bf69..c7e4e16 100644 (file)
@@ -62,6 +62,7 @@
 #import <WebKit/WebHTMLRepresentationInternal.h>
 #import <WebKit/WebHistory.h>
 #import <WebKit/WebHistoryItemPrivate.h>
+#import <WebKit/WebInspector.h>
 #import <WebKit/WebPluginDatabase.h>
 #import <WebKit/WebPreferences.h>
 #import <WebKit/WebPreferencesPrivate.h>
@@ -943,13 +944,16 @@ static void resetWebViewToConsistentStateBeforeTesting()
     [preferences setJavaScriptCanOpenWindowsAutomatically:YES];
     [preferences setOfflineWebApplicationCacheEnabled:YES];
     [preferences setFullDocumentTeardownEnabled:YES];
-    
+    [preferences setDeveloperExtrasEnabled:NO];
+
     if (persistentUserStyleSheetLocation) {
         [preferences setUserStyleSheetLocation:[NSURL URLWithString:(NSString *)(persistentUserStyleSheetLocation.get())]];
         [preferences setUserStyleSheetEnabled:YES];
     } else
         [preferences setUserStyleSheetEnabled:NO];
+
     [[mainFrame webView] setSmartInsertDeleteEnabled:YES];
+    [[[mainFrame webView] inspector] setJavaScriptProfilingEnabled:NO];
 
     [WebView _setUsesTestModeFocusRingColor:YES];
 }
index ef6a6cb..2200c27 100644 (file)
@@ -44,6 +44,7 @@
 #import <WebKit/WebHTMLRepresentation.h>
 #import <WebKit/WebHTMLViewPrivate.h>
 #import <WebKit/WebHistory.h>
+#import <WebKit/WebInspector.h>
 #import <WebKit/WebNSURLExtras.h>
 #import <WebKit/WebPreferences.h>
 #import <WebKit/WebPreferencesPrivate.h>
@@ -254,6 +255,12 @@ void LayoutTestController::setSmartInsertDeleteEnabled(bool flag)
     [[mainFrame webView] setSmartInsertDeleteEnabled:flag];
 }
 
+void LayoutTestController::setJavaScriptProfilingEnabled(bool profilingEnabled)
+{
+    [[[mainFrame webView] preferences] setDeveloperExtrasEnabled:profilingEnabled];
+    [[[mainFrame webView] inspector] setJavaScriptProfilingEnabled:profilingEnabled];
+}
+
 static const CFTimeInterval waitToDumpWatchdogInterval = 10.0;
 
 static void waitUntilDoneWatchdogFired(CFRunLoopTimerRef timer, void* info)
index 742bd7f..9b0cd6e 100644 (file)
@@ -655,14 +655,20 @@ static void resetWebViewToConsistentStateBeforeTesting()
             preferences->setUserStyleSheetEnabled(FALSE);
 
         COMPtr<IWebPreferencesPrivate> prefsPrivate(Query, preferences);
-        if (prefsPrivate)
+        if (prefsPrivate) {
             prefsPrivate->setAuthorAndUserStylesEnabled(TRUE);
+            prefsPrivate->setDeveloperExtrasEnabled(FALSE);
+        }
     }
 
     COMPtr<IWebViewEditing> viewEditing;
     if (SUCCEEDED(webView->QueryInterface(&viewEditing)))
         viewEditing->setSmartInsertDeleteEnabled(TRUE);
 
+    COMPtr<IWebInspector> inspector;
+    if (SUCCEEDED(webView->inspector(&inspector)))
+        inspector->setJavaScriptProfilingEnabled(FALSE);
+
     COMPtr<IWebViewPrivate> webViewPrivate(Query, webView);
     if (!webViewPrivate)
         return;
index 272ce11..1cd0145 100644 (file)
@@ -521,6 +521,24 @@ void LayoutTestController::setSmartInsertDeleteEnabled(bool flag)
     viewEditing->setSmartInsertDeleteEnabled(flag ? TRUE : FALSE);
 }
 
+void LayoutTestController::setJavaScriptProfilingEnabled(bool flag)
+{
+    COMPtr<IWebPreferences> preferences;
+    if (FAILED(webView->preferences(&preferences)))
+        return;
+
+    COMPtr<IWebPreferencesPrivate> prefsPrivate(Query, preferences);
+    if (!prefsPrivate)
+        return;
+
+    COMPtr<IWebInspector> inspector;
+    if (FAILED(webView->inspector(&inspector)))
+        return;
+
+    prefsPrivate->setDeveloperExtrasEnabled(flag);
+    inspector->setJavaScriptProfilingEnabled(flag);
+}
+
 static const CFTimeInterval waitToDumpWatchdogInterval = 10.0;
 
 static void waitUntilDoneWatchdogFired(CFRunLoopTimerRef timer, void* info)