Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(548)

Unified Diff: third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js b/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js
index 7adcc93e91bbf142b65395c0366cd990e6b6c51a..717606fef030fa428a8911fa4adce3f558fd2b71 100644
--- a/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js
+++ b/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js
@@ -22,481 +22,449 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
/**
- * @constructor
* @implements {WebInspector.Searchable}
- * @extends {WebInspector.ProfileView}
- * @param {!WebInspector.CPUProfileHeader} profileHeader
+ * @unrestricted
*/
-WebInspector.CPUProfileView = function(profileHeader)
-{
- WebInspector.ProfileView.call(this);
+WebInspector.CPUProfileView = class extends WebInspector.ProfileView {
+ /**
+ * @param {!WebInspector.CPUProfileHeader} profileHeader
+ */
+ constructor(profileHeader) {
+ super();
this._profileHeader = profileHeader;
this.profile = new WebInspector.CPUProfileDataModel(profileHeader._profile || profileHeader.protocolProfile());
this.adjustedTotal = this.profile.profileHead.total;
this.adjustedTotal -= this.profile.idleNode ? this.profile.idleNode.total : 0;
this.initialize(new WebInspector.CPUProfileView.NodeFormatter(this));
-};
-
-WebInspector.CPUProfileView.prototype = {
- /**
- * @override
- */
- wasShown: function()
- {
- WebInspector.ProfileView.prototype.wasShown.call(this);
- var lineLevelProfile = WebInspector.LineLevelProfile.instance();
- lineLevelProfile.reset();
- lineLevelProfile.appendCPUProfile(this.profile);
- },
-
- /**
- * @override
- * @param {string} columnId
- * @return {string}
- */
- columnHeader: function(columnId)
- {
- switch (columnId) {
- case "self": return WebInspector.UIString("Self Time");
- case "total": return WebInspector.UIString("Total Time");
- }
- return "";
- },
-
- /**
- * @override
- * @return {!WebInspector.FlameChartDataProvider}
- */
- createFlameChartDataProvider: function()
- {
- return new WebInspector.CPUFlameChartDataProvider(this.profile, this._profileHeader.target());
- },
-
- __proto__: WebInspector.ProfileView.prototype
+ }
+
+ /**
+ * @override
+ */
+ wasShown() {
+ super.wasShown();
+ var lineLevelProfile = WebInspector.LineLevelProfile.instance();
+ lineLevelProfile.reset();
+ lineLevelProfile.appendCPUProfile(this.profile);
+ }
+
+ /**
+ * @override
+ * @param {string} columnId
+ * @return {string}
+ */
+ columnHeader(columnId) {
+ switch (columnId) {
+ case 'self':
+ return WebInspector.UIString('Self Time');
+ case 'total':
+ return WebInspector.UIString('Total Time');
+ }
+ return '';
+ }
+
+ /**
+ * @override
+ * @return {!WebInspector.FlameChartDataProvider}
+ */
+ createFlameChartDataProvider() {
+ return new WebInspector.CPUFlameChartDataProvider(this.profile, this._profileHeader.target());
+ }
};
/**
- * @constructor
- * @extends {WebInspector.ProfileType}
+ * @unrestricted
*/
-WebInspector.CPUProfileType = function()
-{
- WebInspector.ProfileType.call(this, WebInspector.CPUProfileType.TypeId, WebInspector.UIString("Record JavaScript CPU Profile"));
+WebInspector.CPUProfileType = class extends WebInspector.ProfileType {
+ constructor() {
+ super(WebInspector.CPUProfileType.TypeId, WebInspector.UIString('Record JavaScript CPU Profile'));
this._recording = false;
this._nextAnonymousConsoleProfileNumber = 1;
this._anonymousConsoleProfileIdToTitle = {};
WebInspector.CPUProfileType.instance = this;
- WebInspector.targetManager.addModelListener(WebInspector.CPUProfilerModel, WebInspector.CPUProfilerModel.Events.ConsoleProfileStarted, this._consoleProfileStarted, this);
- WebInspector.targetManager.addModelListener(WebInspector.CPUProfilerModel, WebInspector.CPUProfilerModel.Events.ConsoleProfileFinished, this._consoleProfileFinished, this);
-};
-
-WebInspector.CPUProfileType.TypeId = "CPU";
-
-WebInspector.CPUProfileType.prototype = {
- /**
- * @override
- * @return {string}
- */
- typeName: function()
- {
- return "CPU";
- },
-
- /**
- * @override
- * @return {string}
- */
- fileExtension: function()
- {
- return ".cpuprofile";
- },
-
- get buttonTooltip()
- {
- return this._recording ? WebInspector.UIString("Stop CPU profiling") : WebInspector.UIString("Start CPU profiling");
- },
-
- /**
- * @override
- * @return {boolean}
- */
- buttonClicked: function()
- {
- if (this._recording) {
- this.stopRecordingProfile();
- return false;
- } else {
- this.startRecordingProfile();
- return true;
- }
- },
-
- get treeItemTitle()
- {
- return WebInspector.UIString("CPU PROFILES");
- },
-
- get description()
- {
- return WebInspector.UIString("CPU profiles show where the execution time is spent in your page's JavaScript functions.");
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _consoleProfileStarted: function(event)
- {
- var data = /** @type {!WebInspector.CPUProfilerModel.EventData} */ (event.data);
- var resolvedTitle = data.title;
- if (!resolvedTitle) {
- resolvedTitle = WebInspector.UIString("Profile %s", this._nextAnonymousConsoleProfileNumber++);
- this._anonymousConsoleProfileIdToTitle[data.id] = resolvedTitle;
- }
- this._addMessageToConsole(WebInspector.ConsoleMessage.MessageType.Profile, data.scriptLocation, WebInspector.UIString("Profile '%s' started.", resolvedTitle));
- },
+ WebInspector.targetManager.addModelListener(
+ WebInspector.CPUProfilerModel, WebInspector.CPUProfilerModel.Events.ConsoleProfileStarted,
+ this._consoleProfileStarted, this);
+ WebInspector.targetManager.addModelListener(
+ WebInspector.CPUProfilerModel, WebInspector.CPUProfilerModel.Events.ConsoleProfileFinished,
+ this._consoleProfileFinished, this);
+ }
+
+ /**
+ * @override
+ * @return {string}
+ */
+ typeName() {
+ return 'CPU';
+ }
+
+ /**
+ * @override
+ * @return {string}
+ */
+ fileExtension() {
+ return '.cpuprofile';
+ }
+
+ get buttonTooltip() {
+ return this._recording ? WebInspector.UIString('Stop CPU profiling') : WebInspector.UIString('Start CPU profiling');
+ }
+
+ /**
+ * @override
+ * @return {boolean}
+ */
+ buttonClicked() {
+ if (this._recording) {
+ this.stopRecordingProfile();
+ return false;
+ } else {
+ this.startRecordingProfile();
+ return true;
+ }
+ }
+
+ get treeItemTitle() {
+ return WebInspector.UIString('CPU PROFILES');
+ }
+
+ get description() {
+ return WebInspector.UIString(
+ 'CPU profiles show where the execution time is spent in your page\'s JavaScript functions.');
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _consoleProfileStarted(event) {
+ var data = /** @type {!WebInspector.CPUProfilerModel.EventData} */ (event.data);
+ var resolvedTitle = data.title;
+ if (!resolvedTitle) {
+ resolvedTitle = WebInspector.UIString('Profile %s', this._nextAnonymousConsoleProfileNumber++);
+ this._anonymousConsoleProfileIdToTitle[data.id] = resolvedTitle;
+ }
+ this._addMessageToConsole(
+ WebInspector.ConsoleMessage.MessageType.Profile, data.scriptLocation,
+ WebInspector.UIString('Profile \'%s\' started.', resolvedTitle));
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _consoleProfileFinished(event) {
+ var data = /** @type {!WebInspector.CPUProfilerModel.EventData} */ (event.data);
+ var cpuProfile = /** @type {!ProfilerAgent.Profile} */ (data.cpuProfile);
+ var resolvedTitle = data.title;
+ if (typeof resolvedTitle === 'undefined') {
+ resolvedTitle = this._anonymousConsoleProfileIdToTitle[data.id];
+ delete this._anonymousConsoleProfileIdToTitle[data.id];
+ }
+ var profile = new WebInspector.CPUProfileHeader(data.scriptLocation.target(), this, resolvedTitle);
+ profile.setProtocolProfile(cpuProfile);
+ this.addProfile(profile);
+ this._addMessageToConsole(
+ WebInspector.ConsoleMessage.MessageType.ProfileEnd, data.scriptLocation,
+ WebInspector.UIString('Profile \'%s\' finished.', resolvedTitle));
+ }
+
+ /**
+ * @param {string} type
+ * @param {!WebInspector.DebuggerModel.Location} scriptLocation
+ * @param {string} messageText
+ */
+ _addMessageToConsole(type, scriptLocation, messageText) {
+ var script = scriptLocation.script();
+ var target = scriptLocation.target();
+ var message = new WebInspector.ConsoleMessage(
+ target, WebInspector.ConsoleMessage.MessageSource.ConsoleAPI, WebInspector.ConsoleMessage.MessageLevel.Debug,
+ messageText, type, undefined, undefined, undefined, undefined, [{
+ functionName: '',
+ scriptId: scriptLocation.scriptId,
+ url: script ? script.contentURL() : '',
+ lineNumber: scriptLocation.lineNumber,
+ columnNumber: scriptLocation.columnNumber || 0
+ }]);
+
+ target.consoleModel.addMessage(message);
+ }
+
+ startRecordingProfile() {
+ var target = WebInspector.context.flavor(WebInspector.Target);
+ if (this._profileBeingRecorded || !target)
+ return;
+ var profile = new WebInspector.CPUProfileHeader(target, this);
+ this.setProfileBeingRecorded(profile);
+ WebInspector.targetManager.suspendAllTargets();
+ this.addProfile(profile);
+ profile.updateStatus(WebInspector.UIString('Recording\u2026'));
+ this._recording = true;
+ target.cpuProfilerModel.startRecording();
+ }
+
+ stopRecordingProfile() {
+ this._recording = false;
+ if (!this._profileBeingRecorded || !this._profileBeingRecorded.target())
+ return;
- /**
- * @param {!WebInspector.Event} event
- */
- _consoleProfileFinished: function(event)
- {
- var data = /** @type {!WebInspector.CPUProfilerModel.EventData} */ (event.data);
- var cpuProfile = /** @type {!ProfilerAgent.Profile} */ (data.cpuProfile);
- var resolvedTitle = data.title;
- if (typeof resolvedTitle === "undefined") {
- resolvedTitle = this._anonymousConsoleProfileIdToTitle[data.id];
- delete this._anonymousConsoleProfileIdToTitle[data.id];
- }
- var profile = new WebInspector.CPUProfileHeader(data.scriptLocation.target(), this, resolvedTitle);
- profile.setProtocolProfile(cpuProfile);
- this.addProfile(profile);
- this._addMessageToConsole(WebInspector.ConsoleMessage.MessageType.ProfileEnd, data.scriptLocation, WebInspector.UIString("Profile '%s' finished.", resolvedTitle));
- },
+ var recordedProfile;
/**
- * @param {string} type
- * @param {!WebInspector.DebuggerModel.Location} scriptLocation
- * @param {string} messageText
+ * @param {?ProfilerAgent.Profile} profile
+ * @this {WebInspector.CPUProfileType}
*/
- _addMessageToConsole: function(type, scriptLocation, messageText)
- {
- var script = scriptLocation.script();
- var target = scriptLocation.target();
- var message = new WebInspector.ConsoleMessage(
- target,
- WebInspector.ConsoleMessage.MessageSource.ConsoleAPI,
- WebInspector.ConsoleMessage.MessageLevel.Debug,
- messageText,
- type,
- undefined,
- undefined,
- undefined,
- undefined,
- [{
- functionName: "",
- scriptId: scriptLocation.scriptId,
- url: script ? script.contentURL() : "",
- lineNumber: scriptLocation.lineNumber,
- columnNumber: scriptLocation.columnNumber || 0
- }]);
-
- target.consoleModel.addMessage(message);
- },
-
- startRecordingProfile: function()
- {
- var target = WebInspector.context.flavor(WebInspector.Target);
- if (this._profileBeingRecorded || !target)
- return;
- var profile = new WebInspector.CPUProfileHeader(target, this);
- this.setProfileBeingRecorded(profile);
- WebInspector.targetManager.suspendAllTargets();
- this.addProfile(profile);
- profile.updateStatus(WebInspector.UIString("Recording\u2026"));
- this._recording = true;
- target.cpuProfilerModel.startRecording();
- },
-
- stopRecordingProfile: function()
- {
- this._recording = false;
- if (!this._profileBeingRecorded || !this._profileBeingRecorded.target())
- return;
-
- var recordedProfile;
-
- /**
- * @param {?ProfilerAgent.Profile} profile
- * @this {WebInspector.CPUProfileType}
- */
- function didStopProfiling(profile)
- {
- if (!this._profileBeingRecorded)
- return;
- console.assert(profile);
- this._profileBeingRecorded.setProtocolProfile(profile);
- this._profileBeingRecorded.updateStatus("");
- recordedProfile = this._profileBeingRecorded;
- this.setProfileBeingRecorded(null);
- }
-
- /**
- * @this {WebInspector.CPUProfileType}
- */
- function fireEvent()
- {
- this.dispatchEventToListeners(WebInspector.ProfileType.Events.ProfileComplete, recordedProfile);
- }
-
- this._profileBeingRecorded.target().cpuProfilerModel.stopRecording()
- .then(didStopProfiling.bind(this))
- .then(WebInspector.targetManager.resumeAllTargets.bind(WebInspector.targetManager))
- .then(fireEvent.bind(this));
- },
-
- /**
- * @override
- * @param {string} title
- * @return {!WebInspector.ProfileHeader}
- */
- createProfileLoadedFromFile: function(title)
- {
- return new WebInspector.CPUProfileHeader(null, this, title);
- },
+ function didStopProfiling(profile) {
+ if (!this._profileBeingRecorded)
+ return;
+ console.assert(profile);
+ this._profileBeingRecorded.setProtocolProfile(profile);
+ this._profileBeingRecorded.updateStatus('');
+ recordedProfile = this._profileBeingRecorded;
+ this.setProfileBeingRecorded(null);
+ }
/**
- * @override
+ * @this {WebInspector.CPUProfileType}
*/
- profileBeingRecordedRemoved: function()
- {
- this.stopRecordingProfile();
- },
+ function fireEvent() {
+ this.dispatchEventToListeners(WebInspector.ProfileType.Events.ProfileComplete, recordedProfile);
+ }
- __proto__: WebInspector.ProfileType.prototype
+ this._profileBeingRecorded.target()
+ .cpuProfilerModel.stopRecording()
+ .then(didStopProfiling.bind(this))
+ .then(WebInspector.targetManager.resumeAllTargets.bind(WebInspector.targetManager))
+ .then(fireEvent.bind(this));
+ }
+
+ /**
+ * @override
+ * @param {string} title
+ * @return {!WebInspector.ProfileHeader}
+ */
+ createProfileLoadedFromFile(title) {
+ return new WebInspector.CPUProfileHeader(null, this, title);
+ }
+
+ /**
+ * @override
+ */
+ profileBeingRecordedRemoved() {
+ this.stopRecordingProfile();
+ }
};
+WebInspector.CPUProfileType.TypeId = 'CPU';
+
/**
- * @constructor
- * @extends {WebInspector.WritableProfileHeader}
- * @param {?WebInspector.Target} target
- * @param {!WebInspector.CPUProfileType} type
- * @param {string=} title
+ * @unrestricted
*/
-WebInspector.CPUProfileHeader = function(target, type, title)
-{
- WebInspector.WritableProfileHeader.call(this, target, type, title);
-};
-
-WebInspector.CPUProfileHeader.prototype = {
- /**
- * @override
- * @return {!WebInspector.ProfileView}
- */
- createView: function()
- {
- return new WebInspector.CPUProfileView(this);
- },
-
- /**
- * @return {!ProfilerAgent.Profile}
- */
- protocolProfile: function()
- {
- return this._protocolProfile;
- },
-
- __proto__: WebInspector.WritableProfileHeader.prototype
+WebInspector.CPUProfileHeader = class extends WebInspector.WritableProfileHeader {
+ /**
+ * @param {?WebInspector.Target} target
+ * @param {!WebInspector.CPUProfileType} type
+ * @param {string=} title
+ */
+ constructor(target, type, title) {
+ super(target, type, title);
+ }
+
+ /**
+ * @override
+ * @return {!WebInspector.ProfileView}
+ */
+ createView() {
+ return new WebInspector.CPUProfileView(this);
+ }
+
+ /**
+ * @return {!ProfilerAgent.Profile}
+ */
+ protocolProfile() {
+ return this._protocolProfile;
+ }
};
/**
* @implements {WebInspector.ProfileDataGridNode.Formatter}
- * @constructor
+ * @unrestricted
*/
-WebInspector.CPUProfileView.NodeFormatter = function(profileView)
-{
+WebInspector.CPUProfileView.NodeFormatter = class {
+ constructor(profileView) {
this._profileView = profileView;
+ }
+
+ /**
+ * @override
+ * @param {number} value
+ * @return {string}
+ */
+ formatValue(value) {
+ return WebInspector.UIString('%.1f\u2009ms', value);
+ }
+
+ /**
+ * @override
+ * @param {number} value
+ * @param {!WebInspector.ProfileDataGridNode} node
+ * @return {string}
+ */
+ formatPercent(value, node) {
+ return node.profileNode === this._profileView.profile.idleNode ? '' : WebInspector.UIString('%.2f\u2009%%', value);
+ }
+
+ /**
+ * @override
+ * @param {!WebInspector.ProfileDataGridNode} node
+ * @return {?Element}
+ */
+ linkifyNode(node) {
+ return this._profileView.linkifier().maybeLinkifyConsoleCallFrame(
+ this._profileView.target(), node.profileNode.callFrame, 'profile-node-file');
+ }
};
-WebInspector.CPUProfileView.NodeFormatter.prototype = {
+/**
+ * @unrestricted
+ */
+WebInspector.CPUFlameChartDataProvider = class extends WebInspector.ProfileFlameChartDataProvider {
+ /**
+ * @param {!WebInspector.CPUProfileDataModel} cpuProfile
+ * @param {?WebInspector.Target} target
+ */
+ constructor(cpuProfile, target) {
+ super(target);
+ this._cpuProfile = cpuProfile;
+ }
+
+ /**
+ * @override
+ * @return {!WebInspector.FlameChart.TimelineData}
+ */
+ _calculateTimelineData() {
+ /** @type {!Array.<?WebInspector.CPUFlameChartDataProvider.ChartEntry>} */
+ var entries = [];
+ /** @type {!Array.<number>} */
+ var stack = [];
+ var maxDepth = 5;
+
+ function onOpenFrame() {
+ stack.push(entries.length);
+ // Reserve space for the entry, as they have to be ordered by startTime.
+ // The entry itself will be put there in onCloseFrame.
+ entries.push(null);
+ }
/**
- * @override
- * @param {number} value
- * @return {string}
+ * @param {number} depth
+ * @param {!WebInspector.CPUProfileNode} node
+ * @param {number} startTime
+ * @param {number} totalTime
+ * @param {number} selfTime
*/
- formatValue: function(value)
- {
- return WebInspector.UIString("%.1f\u2009ms", value);
- },
+ function onCloseFrame(depth, node, startTime, totalTime, selfTime) {
+ var index = stack.pop();
+ entries[index] =
+ new WebInspector.CPUFlameChartDataProvider.ChartEntry(depth, totalTime, startTime, selfTime, node);
+ maxDepth = Math.max(maxDepth, depth);
+ }
+ this._cpuProfile.forEachFrame(onOpenFrame, onCloseFrame);
+
+ /** @type {!Array<!WebInspector.CPUProfileNode>} */
+ var entryNodes = new Array(entries.length);
+ var entryLevels = new Uint16Array(entries.length);
+ var entryTotalTimes = new Float32Array(entries.length);
+ var entrySelfTimes = new Float32Array(entries.length);
+ var entryStartTimes = new Float64Array(entries.length);
+ var minimumBoundary = this.minimumBoundary();
+
+ for (var i = 0; i < entries.length; ++i) {
+ var entry = entries[i];
+ entryNodes[i] = entry.node;
+ entryLevels[i] = entry.depth;
+ entryTotalTimes[i] = entry.duration;
+ entryStartTimes[i] = entry.startTime;
+ entrySelfTimes[i] = entry.selfTime;
+ }
+
+ this._maxStackDepth = maxDepth;
+
+ this._timelineData = new WebInspector.FlameChart.TimelineData(entryLevels, entryTotalTimes, entryStartTimes, null);
+
+ /** @type {!Array<!WebInspector.CPUProfileNode>} */
+ this._entryNodes = entryNodes;
+ this._entrySelfTimes = entrySelfTimes;
+
+ return this._timelineData;
+ }
+ /**
+ * @override
+ * @param {number} entryIndex
+ * @return {?Element}
+ */
+ prepareHighlightedEntryInfo(entryIndex) {
+ var timelineData = this._timelineData;
+ var node = this._entryNodes[entryIndex];
+ if (!node)
+ return null;
+
+ var entryInfo = [];
/**
- * @override
- * @param {number} value
- * @param {!WebInspector.ProfileDataGridNode} node
- * @return {string}
+ * @param {string} title
+ * @param {string} value
*/
- formatPercent: function(value, node)
- {
- return node.profileNode === this._profileView.profile.idleNode ? "" : WebInspector.UIString("%.2f\u2009%%", value);
- },
-
+ function pushEntryInfoRow(title, value) {
+ entryInfo.push({title: title, value: value});
+ }
/**
- * @override
- * @param {!WebInspector.ProfileDataGridNode} node
- * @return {?Element}
+ * @param {number} ms
+ * @return {string}
*/
- linkifyNode: function(node)
- {
- return this._profileView.linkifier().maybeLinkifyConsoleCallFrame(this._profileView.target(), node.profileNode.callFrame, "profile-node-file");
+ function millisecondsToString(ms) {
+ if (ms === 0)
+ return '0';
+ if (ms < 1000)
+ return WebInspector.UIString('%.1f\u2009ms', ms);
+ return Number.secondsToString(ms / 1000, true);
}
+ var name = WebInspector.beautifyFunctionName(node.functionName);
+ pushEntryInfoRow(WebInspector.UIString('Name'), name);
+ var selfTime = millisecondsToString(this._entrySelfTimes[entryIndex]);
+ var totalTime = millisecondsToString(timelineData.entryTotalTimes[entryIndex]);
+ pushEntryInfoRow(WebInspector.UIString('Self time'), selfTime);
+ pushEntryInfoRow(WebInspector.UIString('Total time'), totalTime);
+ var linkifier = new WebInspector.Linkifier();
+ var link = linkifier.maybeLinkifyConsoleCallFrame(this._target, node.callFrame);
+ if (link)
+ pushEntryInfoRow(WebInspector.UIString('URL'), link.textContent);
+ linkifier.dispose();
+ pushEntryInfoRow(WebInspector.UIString('Aggregated self time'), Number.secondsToString(node.self / 1000, true));
+ pushEntryInfoRow(WebInspector.UIString('Aggregated total time'), Number.secondsToString(node.total / 1000, true));
+ if (node.deoptReason)
+ pushEntryInfoRow(WebInspector.UIString('Not optimized'), node.deoptReason);
+
+ return WebInspector.ProfileView.buildPopoverTable(entryInfo);
+ }
};
/**
- * @constructor
- * @extends {WebInspector.ProfileFlameChartDataProvider}
- * @param {!WebInspector.CPUProfileDataModel} cpuProfile
- * @param {?WebInspector.Target} target
+ * @unrestricted
*/
-WebInspector.CPUFlameChartDataProvider = function(cpuProfile, target)
-{
- WebInspector.ProfileFlameChartDataProvider.call(this, target);
- this._cpuProfile = cpuProfile;
-};
-
-WebInspector.CPUFlameChartDataProvider.prototype = {
- /**
- * @override
- * @return {!WebInspector.FlameChart.TimelineData}
- */
- _calculateTimelineData: function()
- {
- /**
- * @constructor
- * @param {number} depth
- * @param {number} duration
- * @param {number} startTime
- * @param {number} selfTime
- * @param {!WebInspector.CPUProfileNode} node
- */
- function ChartEntry(depth, duration, startTime, selfTime, node)
- {
- this.depth = depth;
- this.duration = duration;
- this.startTime = startTime;
- this.selfTime = selfTime;
- this.node = node;
- }
-
- /** @type {!Array.<?ChartEntry>} */
- var entries = [];
- /** @type {!Array.<number>} */
- var stack = [];
- var maxDepth = 5;
-
- function onOpenFrame()
- {
- stack.push(entries.length);
- // Reserve space for the entry, as they have to be ordered by startTime.
- // The entry itself will be put there in onCloseFrame.
- entries.push(null);
- }
- /**
- * @param {number} depth
- * @param {!WebInspector.CPUProfileNode} node
- * @param {number} startTime
- * @param {number} totalTime
- * @param {number} selfTime
- */
- function onCloseFrame(depth, node, startTime, totalTime, selfTime)
- {
- var index = stack.pop();
- entries[index] = new ChartEntry(depth, totalTime, startTime, selfTime, node);
- maxDepth = Math.max(maxDepth, depth);
- }
- this._cpuProfile.forEachFrame(onOpenFrame, onCloseFrame);
-
- /** @type {!Array<!WebInspector.CPUProfileNode>} */
- var entryNodes = new Array(entries.length);
- var entryLevels = new Uint16Array(entries.length);
- var entryTotalTimes = new Float32Array(entries.length);
- var entrySelfTimes = new Float32Array(entries.length);
- var entryStartTimes = new Float64Array(entries.length);
- var minimumBoundary = this.minimumBoundary();
-
- for (var i = 0; i < entries.length; ++i) {
- var entry = entries[i];
- entryNodes[i] = entry.node;
- entryLevels[i] = entry.depth;
- entryTotalTimes[i] = entry.duration;
- entryStartTimes[i] = entry.startTime;
- entrySelfTimes[i] = entry.selfTime;
- }
-
- this._maxStackDepth = maxDepth;
-
- this._timelineData = new WebInspector.FlameChart.TimelineData(entryLevels, entryTotalTimes, entryStartTimes, null);
-
- /** @type {!Array<!WebInspector.CPUProfileNode>} */
- this._entryNodes = entryNodes;
- this._entrySelfTimes = entrySelfTimes;
-
- return this._timelineData;
- },
-
- /**
- * @override
- * @param {number} entryIndex
- * @return {?Element}
- */
- prepareHighlightedEntryInfo: function(entryIndex)
- {
- var timelineData = this._timelineData;
- var node = this._entryNodes[entryIndex];
- if (!node)
- return null;
-
- var entryInfo = [];
- /**
- * @param {string} title
- * @param {string} value
- */
- function pushEntryInfoRow(title, value)
- {
- entryInfo.push({ title: title, value: value });
- }
- /**
- * @param {number} ms
- * @return {string}
- */
- function millisecondsToString(ms)
- {
- if (ms === 0)
- return "0";
- if (ms < 1000)
- return WebInspector.UIString("%.1f\u2009ms", ms);
- return Number.secondsToString(ms / 1000, true);
- }
- var name = WebInspector.beautifyFunctionName(node.functionName);
- pushEntryInfoRow(WebInspector.UIString("Name"), name);
- var selfTime = millisecondsToString(this._entrySelfTimes[entryIndex]);
- var totalTime = millisecondsToString(timelineData.entryTotalTimes[entryIndex]);
- pushEntryInfoRow(WebInspector.UIString("Self time"), selfTime);
- pushEntryInfoRow(WebInspector.UIString("Total time"), totalTime);
- var linkifier = new WebInspector.Linkifier();
- var link = linkifier.maybeLinkifyConsoleCallFrame(this._target, node.callFrame);
- if (link)
- pushEntryInfoRow(WebInspector.UIString("URL"), link.textContent);
- linkifier.dispose();
- pushEntryInfoRow(WebInspector.UIString("Aggregated self time"), Number.secondsToString(node.self / 1000, true));
- pushEntryInfoRow(WebInspector.UIString("Aggregated total time"), Number.secondsToString(node.total / 1000, true));
- if (node.deoptReason)
- pushEntryInfoRow(WebInspector.UIString("Not optimized"), node.deoptReason);
-
- return WebInspector.ProfileView.buildPopoverTable(entryInfo);
- },
-
- __proto__: WebInspector.ProfileFlameChartDataProvider.prototype
+WebInspector.CPUFlameChartDataProvider.ChartEntry = class {
+ /**
+ * @param {number} depth
+ * @param {number} duration
+ * @param {number} startTime
+ * @param {number} selfTime
+ * @param {!WebInspector.CPUProfileNode} node
+ */
+ constructor(depth, duration, startTime, selfTime, node) {
+ this.depth = depth;
+ this.duration = duration;
+ this.startTime = startTime;
+ this.selfTime = selfTime;
+ this.node = node;
+ }
};

Powered by Google App Engine
This is Rietveld 408576698