summaryrefslogtreecommitdiff
path: root/Source/WebInspectorUI/UserInterface/Views/ScriptClusterTimelineView.js
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebInspectorUI/UserInterface/Views/ScriptClusterTimelineView.js
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/Views/ScriptClusterTimelineView.js')
-rw-r--r--Source/WebInspectorUI/UserInterface/Views/ScriptClusterTimelineView.js215
1 files changed, 215 insertions, 0 deletions
diff --git a/Source/WebInspectorUI/UserInterface/Views/ScriptClusterTimelineView.js b/Source/WebInspectorUI/UserInterface/Views/ScriptClusterTimelineView.js
new file mode 100644
index 000000000..8c46d91e4
--- /dev/null
+++ b/Source/WebInspectorUI/UserInterface/Views/ScriptClusterTimelineView.js
@@ -0,0 +1,215 @@
+/*
+ * Copyright (C) 2016 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. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.ScriptClusterTimelineView = class ScriptClusterTimelineView extends WebInspector.ClusterContentView
+{
+ constructor(timeline, extraArguments)
+ {
+ super(timeline);
+
+ console.assert(timeline.type === WebInspector.TimelineRecord.Type.Script);
+
+ this._currentContentViewSetting = new WebInspector.Setting("script-cluster-timeline-view-current-view", WebInspector.ScriptClusterTimelineView.EventsIdentifier);
+
+ let showSelectorArrows = this._canShowProfileView();
+ function createPathComponent(displayName, className, identifier)
+ {
+ let pathComponent = new WebInspector.HierarchicalPathComponent(displayName, className, identifier, false, showSelectorArrows);
+ pathComponent.addEventListener(WebInspector.HierarchicalPathComponent.Event.SiblingWasSelected, this._pathComponentSelected, this);
+ return pathComponent;
+ }
+
+ this._eventsPathComponent = createPathComponent.call(this, WebInspector.UIString("Events"), "events-icon", WebInspector.ScriptClusterTimelineView.EventsIdentifier);
+ this._profilePathComponent = createPathComponent.call(this, WebInspector.UIString("Call Trees"), "call-trees-icon", WebInspector.ScriptClusterTimelineView.ProfileIdentifier);
+
+ if (this._canShowProfileView()) {
+ this._eventsPathComponent.nextSibling = this._profilePathComponent;
+ this._profilePathComponent.previousSibling = this._eventsPathComponent;
+ }
+
+ // FIXME: We should be able to create these lazily.
+ this._eventsContentView = new WebInspector.ScriptDetailsTimelineView(this.representedObject, extraArguments);
+ this._profileContentView = this._canShowProfileView() ? new WebInspector.ScriptProfileTimelineView(this.representedObject, extraArguments) : null;
+
+ this._showContentViewForIdentifier(this._currentContentViewSetting.value);
+
+ this.contentViewContainer.addEventListener(WebInspector.ContentViewContainer.Event.CurrentContentViewDidChange, this._scriptClusterViewCurrentContentViewDidChange, this);
+ }
+
+ // TimelineView
+
+ // FIXME: Determine a better way to bridge TimelineView methods to the sub-timeline views.
+ get showsLiveRecordingData() { return this._contentViewContainer.currentContentView.showsLiveRecordingData; }
+ get showsFilterBar() { return this._contentViewContainer.currentContentView.showsFilterBar; }
+ get zeroTime() { return this._contentViewContainer.currentContentView.zeroTime; }
+ set zeroTime(x) { this._contentViewContainer.currentContentView.zeroTime = x; }
+ get startTime() { return this._contentViewContainer.currentContentView.startTime; }
+ set startTime(x) { this._contentViewContainer.currentContentView.startTime = x; }
+ get endTime() { return this._contentViewContainer.currentContentView.endTime; }
+ set endTime(x) { this._contentViewContainer.currentContentView.endTime = x; }
+ get currentTime() { return this._contentViewContainer.currentContentView.currentTime; }
+ set currentTime(x) { this._contentViewContainer.currentContentView.currentTime = x; }
+ selectRecord(record) { this._contentViewContainer.currentContentView.selectRecord(record); }
+ updateFilter(filters) { return this._contentViewContainer.currentContentView.updateFilter(filters); }
+ filterDidChange() { return this._contentViewContainer.currentContentView.filterDidChange(); }
+ matchDataGridNodeAgainstCustomFilters(node) { return this._contentViewContainer.currentContentView.matchDataGridNodeAgainstCustomFilters(node); }
+
+ reset()
+ {
+ this._eventsContentView.reset();
+
+ if (this._profileContentView)
+ this._profileContentView.reset();
+ }
+
+ // Public
+
+ get eventsContentView()
+ {
+ return this._eventsContentView;
+ }
+
+ get profileContentView()
+ {
+ return this._profileContentView;
+ }
+
+ get selectionPathComponents()
+ {
+ let currentContentView = this._contentViewContainer.currentContentView;
+ if (!currentContentView)
+ return [];
+
+ let components = [this._pathComponentForContentView(currentContentView)];
+ let subComponents = currentContentView.selectionPathComponents;
+ if (subComponents)
+ return components.concat(subComponents);
+ return components;
+ }
+
+ saveToCookie(cookie)
+ {
+ cookie[WebInspector.ScriptClusterTimelineView.ContentViewIdentifierCookieKey] = this._currentContentViewSetting.value;
+ }
+
+ restoreFromCookie(cookie)
+ {
+ this._showContentViewForIdentifier(cookie[WebInspector.ScriptClusterTimelineView.ContentViewIdentifierCookieKey]);
+ }
+
+ showEvents()
+ {
+ return this._showContentViewForIdentifier(WebInspector.ScriptClusterTimelineView.EventsIdentifier);
+ }
+
+ showProfile()
+ {
+ if (!this._canShowProfileView())
+ return this.showEvents();
+
+ return this._showContentViewForIdentifier(WebInspector.ScriptClusterTimelineView.ProfileIdentifier);
+ }
+
+ // Private
+
+ _canShowProfileView()
+ {
+ // COMPATIBILITY (iOS 9): Legacy backends did not include CallingContextTree ScriptProfiler data.
+ return window.ScriptProfilerAgent;
+ }
+
+ _pathComponentForContentView(contentView)
+ {
+ console.assert(contentView);
+ if (!contentView)
+ return null;
+ if (contentView === this._eventsContentView)
+ return this._eventsPathComponent;
+ if (contentView === this._profileContentView)
+ return this._profilePathComponent;
+ console.error("Unknown contentView.");
+ return null;
+ }
+
+ _identifierForContentView(contentView)
+ {
+ console.assert(contentView);
+ if (!contentView)
+ return null;
+ if (contentView === this._eventsContentView)
+ return WebInspector.ScriptClusterTimelineView.EventsIdentifier;
+ if (contentView === this._profileContentView)
+ return WebInspector.ScriptClusterTimelineView.ProfileIdentifier;
+ console.error("Unknown contentView.");
+ return null;
+ }
+
+ _showContentViewForIdentifier(identifier)
+ {
+ let contentViewToShow = null;
+
+ switch (identifier) {
+ case WebInspector.ScriptClusterTimelineView.EventsIdentifier:
+ contentViewToShow = this.eventsContentView;
+ break;
+ case WebInspector.ScriptClusterTimelineView.ProfileIdentifier:
+ contentViewToShow = this.profileContentView;
+ break;
+ }
+
+ if (!contentViewToShow)
+ contentViewToShow = this.eventsContentView;
+
+ console.assert(contentViewToShow);
+
+ this._currentContentViewSetting.value = this._identifierForContentView(contentViewToShow);
+
+ return this.contentViewContainer.showContentView(contentViewToShow);
+ }
+
+ _pathComponentSelected(event)
+ {
+ this._showContentViewForIdentifier(event.data.pathComponent.representedObject);
+ }
+
+ _scriptClusterViewCurrentContentViewDidChange(event)
+ {
+ let currentContentView = this._contentViewContainer.currentContentView;
+ if (!currentContentView)
+ return;
+
+ let previousContentView = currentContentView === this._eventsContentView ? this._profileContentView : this._eventsContentView;
+
+ currentContentView.zeroTime = previousContentView.zeroTime;
+ currentContentView.startTime = previousContentView.startTime;
+ currentContentView.endTime = previousContentView.endTime;
+ currentContentView.currentTime = previousContentView.currentTime;
+ }
+};
+
+WebInspector.ScriptClusterTimelineView.ContentViewIdentifierCookieKey = "script-cluster-timeline-view-identifier";
+
+WebInspector.ScriptClusterTimelineView.EventsIdentifier = "events";
+WebInspector.ScriptClusterTimelineView.ProfileIdentifier = "profile";