060a31a00c
The IC object's interface is changing all the time and this code is just bitrotting. Rather than trying to keep this updated all the time, let's just use Object.values to print all the key value pairs in the ic object. This looks slightly worse than the previous text format but it has the critical advantage of being broken less often. Change-Id: Ia3580d1ba82a981d8442682f66d6002436e70f42 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2615418 Auto-Submit: Sathya Gunasekaran <gsathya@chromium.org> Commit-Queue: Camillo Bruni <cbruni@chromium.org> Reviewed-by: Camillo Bruni <cbruni@chromium.org> Cr-Commit-Position: refs/heads/master@{#71969}
91 lines
2.2 KiB
JavaScript
91 lines
2.2 KiB
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import { Processor } from "./system-analyzer/processor.mjs";
|
|
import { WebInspector } from "./sourcemap.mjs";
|
|
import { BaseArgumentsProcessor } from "./arguments.mjs";
|
|
|
|
function processArguments(args) {
|
|
const processor = new ArgumentsProcessor(args);
|
|
if (processor.parse()) {
|
|
return processor.result();
|
|
} else {
|
|
processor.printUsageAndExit();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* A thin wrapper around shell's 'read' function showing a file name on error.
|
|
*/
|
|
export function readFile(fileName) {
|
|
try {
|
|
return read(fileName);
|
|
} catch (e) {
|
|
print(fileName + ': ' + (e.message || e));
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
function initSourceMapSupport() {
|
|
// Pull dev tools source maps into our name space.
|
|
SourceMap = WebInspector.SourceMap;
|
|
|
|
// Overwrite the load function to load scripts synchronously.
|
|
SourceMap.load = function(sourceMapURL) {
|
|
const content = readFile(sourceMapURL);
|
|
const sourceMapObject = (JSON.parse(content));
|
|
return new SourceMap(sourceMapURL, sourceMapObject);
|
|
};
|
|
}
|
|
|
|
class ArgumentsProcessor extends BaseArgumentsProcessor {
|
|
getArgsDispatch() {
|
|
return {
|
|
'--range': ['range', 'auto,auto',
|
|
'Specify the range limit as [start],[end]'],
|
|
'--source-map': ['sourceMap', null,
|
|
'Specify the source map that should be used for output']
|
|
};
|
|
}
|
|
getDefaultResults() {
|
|
return {
|
|
logFileName: 'v8.log',
|
|
range: 'auto,auto',
|
|
};
|
|
}
|
|
}
|
|
|
|
const params = processArguments(arguments);
|
|
let sourceMap = null;
|
|
if (params.sourceMap) {
|
|
initSourceMapSupport();
|
|
sourceMap = SourceMap.load(params.sourceMap);
|
|
}
|
|
const processor = new Processor();
|
|
processor.processLogFile(params.logFileName);
|
|
|
|
const typeAccumulator = new Map();
|
|
|
|
const accumulator = {
|
|
__proto__: null,
|
|
LoadGlobalIC: 0,
|
|
StoreGlobalIC: 0,
|
|
LoadIC: 0,
|
|
StoreIC: 0,
|
|
KeyedLoadIC: 0,
|
|
KeyedStoreIC: 0,
|
|
StoreInArrayLiteralIC: 0,
|
|
}
|
|
for (const ic of processor.icTimeline.all) {
|
|
print(Object.values(ic));
|
|
accumulator[ic.type]++;
|
|
}
|
|
|
|
print("========================================");
|
|
for (const key of Object.keys(accumulator)) {
|
|
print(key + ": " + accumulator[key]);
|
|
}
|
|
|
|
|