Index: perf_insights/perf_insights/mappers/slice_cost.html |
diff --git a/perf_insights/perf_insights/mappers/slice_cost.html b/perf_insights/perf_insights/mappers/slice_cost.html |
deleted file mode 100644 |
index 6a143492416ce32a189fd2d4457e1ededaa78245..0000000000000000000000000000000000000000 |
--- a/perf_insights/perf_insights/mappers/slice_cost.html |
+++ /dev/null |
@@ -1,184 +0,0 @@ |
-<!DOCTYPE html> |
-<!-- |
-Copyright (c) 2015 The Chromium Authors. All rights reserved. |
-Use of this source code is governed by a BSD-style license that can be |
-found in the LICENSE file. |
---> |
-<link rel="import" href="/perf_insights/mappers/reduce.html"> |
-<link rel="import" href="/tracing/extras/ads/domain_category.html"> |
-<link rel="import" href="/tracing/extras/chrome/slice_title_fixer.html"> |
-<link rel="import" href="/tracing/model/source_info/js_source_info.html"> |
- |
-<script> |
-'use strict'; |
- |
-tr.exportTo('pi.m', function() { |
- var JSSourceState = tr.model.source_info.JSSourceState; |
- |
- function SliceCostInfo() { |
- this.threadGroup = undefined; |
- this.railTypeName = undefined; |
- this.title = undefined; |
- this.domainCategory = undefined; |
- this.domain = undefined; |
- this.userFriendlyCategory = undefined; |
- |
- this.selfTime = 0; |
- this.cpuSelfTime = 0; |
- |
- this.jsTime = 0; |
- this.jsTimeByState = {}; |
- for (var state in JSSourceState) { |
- this.jsTimeByState[JSSourceState[state]] = 0; |
- } |
- this.data = {}; |
- } |
- |
- SliceCostInfo.asReduceTarget = function(key, firstValue) { |
- var sliceCostInfo = new SliceCostInfo(); |
- sliceCostInfo.threadGroup = firstValue.threadGroup; |
- sliceCostInfo.railTypeName = firstValue.railTypeName; |
- sliceCostInfo.title = firstValue.title; |
- sliceCostInfo.domainCategory = firstValue.domainCategory; |
- sliceCostInfo.domain = firstValue.domain; |
- sliceCostInfo.userFriendlyCategory = firstValue.userFriendlyCategory; |
- sliceCostInfo.data = firstValue.data; |
- return sliceCostInfo; |
- }; |
- |
- SliceCostInfo.fromDict = function(d) { |
- var sliceCostInfo = new SliceCostInfo(); |
- sliceCostInfo.threadGroup = d.threadGroup; |
- sliceCostInfo.railTypeName = d.railTypeName; |
- sliceCostInfo.title = d.title; |
- sliceCostInfo.domainCategory = d.domainCategory; |
- sliceCostInfo.domain = d.domain; |
- sliceCostInfo.userFriendlyCategory = d.userFriendlyCategory; |
- sliceCostInfo.selfTime = d.selfTime; |
- sliceCostInfo.cpuSelfTime = d.cpuSelfTime; |
- sliceCostInfo.jsTime = d.jsTime || 0; |
- for (var state in JSSourceState) { |
- if (d.jsTimeByState === undefined) { |
- sliceCostInfo.jsTimeByState[state] = 0; |
- } else { |
- sliceCostInfo.jsTimeByState[JSSourceState[state]] = |
- d.jsTimeByState[JSSourceState[state]] || 0; |
- } |
- } |
- sliceCostInfo.data = d.data; |
- return sliceCostInfo; |
- }; |
- |
- SliceCostInfo.prototype = { |
- push: function(sliceCostKey, threadSlice) { |
- if (threadSlice.selfTime !== undefined) |
- this.selfTime += threadSlice.selfTime; |
- if (threadSlice.cpuSelfTime !== undefined) |
- this.cpuSelfTime += threadSlice.cpuSelfTime; |
- if (threadSlice.jsTime !== undefined) |
- this.jsTime += threadSlice.jsTime; |
- if (threadSlice.jsTimeByState !== undefined) { |
- for (var state in JSSourceState) { |
- this.jsTimeByState[JSSourceState[state]] += |
- threadSlice.jsTimeByState[JSSourceState[state]]; |
- } |
- } |
- }, |
- |
- finalizeAndGetResult: function() { |
- return this; |
- } |
- }; |
- |
- |
- function getSliceCostReport(model, threadGrouping, railTypeNameByGUID, |
- filterFunction, dataCB) { |
- var reduce = new pi.m.StreamingReducer(SliceCostInfo.asReduceTarget); |
- |
- function generateDomainCosts(slice) { |
- // V8.Execute events may generate several sliceCostInfo, based on the |
- // origin of the JS being executed. |
- var range = new tr.b.Range(); |
- slice.addBoundsToRange(range); |
- var filtered = range.filterArray( |
- slice.parentContainer.samples, |
- function(sample) {return sample.start;}); |
- filtered.forEach(function(sample) { |
- var sliceCostInfo = new SliceCostInfo(); |
- sliceCostInfo.threadGroup = threadGrouping.getGroupNameForEvent(slice); |
- sliceCostInfo.railTypeName = railTypeNameByGUID[slice.guid]; |
- |
- var ufc = model.getUserFriendlyCategoryFromEvent(slice); |
- sliceCostInfo.userFriendlyCategory = ufc || 'other'; |
- sliceCostInfo.title = tr.e.chrome.SliceTitleFixer.fromEvent(slice); |
- sliceCostInfo.domain = sample.leafStackFrame.domain; |
- sliceCostInfo.domainCategory = |
- tr.e.ads.DomainCategory.fromDomain(sliceCostInfo.domain); |
- sliceCostInfo.selfTime = sample.weight; |
- sliceCostInfo.cpuSelfTime = sample.weight; |
- if (dataCB !== undefined) |
- sliceCostInfo.data = dataCB(slice); |
- // Let's use the state of the leaf frame. TODO(chiniforooshan): |
- // understand what it means if frames of a sample stack are in different |
- // states (BUG #1542). |
- var sourceInfo = sample.leafStackFrame.sourceInfo; |
- if (sourceInfo === undefined || |
- !(sourceInfo instanceof tr.model.source_info.JSSourceInfo)) { |
- sliceCostInfo.jsTime = sample.weight; |
- sliceCostInfo.jsTimeByState[JSSourceState.UNKNOWN] = sample.weight; |
- } else { |
- sliceCostInfo.jsTimeByState[sourceInfo.state] = sample.weight; |
- } |
- var key = sliceCostInfo.threadGroup + '/' + |
- sliceCostInfo.railTypeName + '/' + |
- sliceCostInfo.title + '/' + |
- sliceCostInfo.domain; |
- reduce.push(key, sliceCostInfo); |
- }); |
- } |
- |
- model.iterateAllEvents(function(event) { |
- if (!(event instanceof tr.model.ThreadSlice)) |
- return; |
- if (filterFunction && !filterFunction(event)) |
- return; |
- |
- var threadSlice = event; |
- if (threadSlice.title === 'V8.Execute') { |
- generateDomainCosts(threadSlice); |
- return; |
- } |
- |
- var sliceCostInfo = new SliceCostInfo(); |
- sliceCostInfo.threadGroup = threadGrouping.getGroupNameForEvent( |
- threadSlice); |
- sliceCostInfo.railTypeName = railTypeNameByGUID[threadSlice.guid]; |
- var ufc = model.getUserFriendlyCategoryFromEvent(threadSlice); |
- sliceCostInfo.userFriendlyCategory = ufc || 'other'; |
- sliceCostInfo.title = tr.e.chrome.SliceTitleFixer.fromEvent(threadSlice); |
- // For all other events, just generate one sliceCostInfo. |
- sliceCostInfo.selfTime = threadSlice.selfTime; |
- sliceCostInfo.cpuSelfTime = threadSlice.cpuSelfTime; |
- if (dataCB !== undefined) |
- sliceCostInfo.data = dataCB(event); |
- |
- var key = sliceCostInfo.threadGroup + '/' + |
- sliceCostInfo.railTypeName + '/' + |
- sliceCostInfo.title; |
- reduce.push(key, sliceCostInfo); |
- }); |
- |
- var sliceCostInfos = []; |
- reduce.finalizeAndIterResults(function(key, sliceCostInfo) { |
- sliceCostInfos.push(sliceCostInfo); |
- }); |
- return sliceCostInfos; |
- } |
- |
- return { |
- SliceCostInfo: SliceCostInfo, |
- |
- getSliceCostReport: getSliceCostReport |
- }; |
-}); |
-</script> |