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

Unified Diff: tools/tickprocessor.js

Issue 125256: Implemented processing of compressed log files. (Closed)
Patch Set: Added tests Created 11 years, 6 months 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: tools/tickprocessor.js
diff --git a/tools/tickprocessor.js b/tools/tickprocessor.js
index 3c5fab463b54946b66eebc4404ef8ed0f4b7d676..72d367f1990aab42b80b46435b3e446f8bddd5fd 100644
--- a/tools/tickprocessor.js
+++ b/tools/tickprocessor.js
@@ -52,8 +52,35 @@ function readFile(fileName) {
}
+function inherits(childCtor, parentCtor) {
+ function tempCtor() {};
+ tempCtor.prototype = parentCtor.prototype;
+ childCtor.prototype = new tempCtor();
+};
+
+
function TickProcessor(
cppEntriesProvider, separateIc, ignoreUnknown, stateFilter) {
+ devtools.profiler.LogReader.call(this, {
+ 'shared-library': { parsers: [null, parseInt, parseInt],
+ processor: this.processSharedLibrary },
+ 'code-creation': {
+ parsers: [null, this.createAddressParser('code'), parseInt, null],
+ processor: this.processCodeCreation, backrefs: true },
+ 'code-move': { parsers: [this.createAddressParser('code'),
+ this.createAddressParser('code-move-to')],
+ processor: this.processCodeMove, backrefs: true },
+ 'code-delete': { parsers: [this.createAddressParser('code')],
+ processor: this.processCodeDelete, backrefs: true },
+ 'tick': { parsers: [this.createAddressParser('code'),
+ this.createAddressParser('stack'), parseInt, 'var-args'],
+ processor: this.processTick, backrefs: true },
+ 'profiler': null,
+ // Obsolete row types.
+ 'code-allocate': null,
+ 'begin-code-region': null,
+ 'end-code-region': null });
+
this.cppEntriesProvider_ = cppEntriesProvider;
this.ignoreUnknown_ = ignoreUnknown;
this.stateFilter_ = stateFilter;
@@ -86,8 +113,8 @@ function TickProcessor(
// Count each tick as a time unit.
this.viewBuilder_ = new devtools.profiler.ViewBuilder(1);
this.lastLogFileName_ = null;
- this.aliases_ = {};
};
+inherits(TickProcessor, devtools.profiler.LogReader);
TickProcessor.VmStates = {
@@ -107,27 +134,17 @@ TickProcessor.CodeTypes = {
// codeTypes_ map because there can be zillions of them.
-TickProcessor.RecordsDispatch = {
- 'shared-library': { parsers: [null, parseInt, parseInt],
- processor: 'processSharedLibrary' },
- 'code-creation': { parsers: [null, parseInt, parseInt, null],
- processor: 'processCodeCreation' },
- 'code-move': { parsers: [parseInt, parseInt],
- processor: 'processCodeMove' },
- 'code-delete': { parsers: [parseInt], processor: 'processCodeDelete' },
- 'tick': { parsers: [parseInt, parseInt, parseInt, 'var-args'],
- processor: 'processTick' },
- 'alias': { parsers: [null, null], processor: 'processAlias' },
- 'profiler': null,
- // Obsolete row types.
- 'code-allocate': null,
- 'begin-code-region': null,
- 'end-code-region': null
-};
-
TickProcessor.CALL_PROFILE_CUTOFF_PCT = 2.0;
+/**
+ * @override
+ */
+TickProcessor.prototype.printError = function(str) {
+ print(str);
+};
+
+
TickProcessor.prototype.setCodeType = function(name, type) {
this.codeTypes_[name] = TickProcessor.CodeTypes[type];
};
@@ -151,52 +168,7 @@ TickProcessor.prototype.isJsCode = function(name) {
TickProcessor.prototype.processLogFile = function(fileName) {
this.lastLogFileName_ = fileName;
var contents = readFile(fileName);
- this.processLog(contents.split('\n'));
-};
-
-
-TickProcessor.prototype.processLog = function(lines) {
- var csvParser = new devtools.profiler.CsvParser();
- for (var i = 0, n = lines.length; i < n; ++i) {
- var line = lines[i];
- if (!line) {
- continue;
- }
- var fields = csvParser.parseLine(line);
- this.dispatchLogRow(fields);
- }
-};
-
-
-TickProcessor.prototype.dispatchLogRow = function(fields) {
- // Obtain the dispatch.
- var command = fields[0];
- if (!(command in TickProcessor.RecordsDispatch)) {
- throw new Error('unknown command: ' + command);
- }
- var dispatch = TickProcessor.RecordsDispatch[command];
-
- if (dispatch === null) {
- return;
- }
-
- // Parse fields.
- var parsedFields = [];
- for (var i = 0; i < dispatch.parsers.length; ++i) {
- var parser = dispatch.parsers[i];
- if (parser === null) {
- parsedFields.push(fields[1 + i]);
- } else if (typeof parser == 'function') {
- parsedFields.push(parser(fields[1 + i]));
- } else {
- // var-args
- parsedFields.push(fields.slice(1 + i));
- break;
- }
- }
-
- // Run the processor.
- this[dispatch.processor].apply(this, parsedFields);
+ this.processLogChunk(contents);
};
@@ -214,22 +186,10 @@ TickProcessor.prototype.processSharedLibrary = function(
};
-TickProcessor.prototype.processAlias = function(symbol, expansion) {
- if (expansion in TickProcessor.RecordsDispatch) {
- TickProcessor.RecordsDispatch[symbol] =
- TickProcessor.RecordsDispatch[expansion];
- } else {
- this.aliases_[symbol] = expansion;
- }
-};
-
-
TickProcessor.prototype.processCodeCreation = function(
type, start, size, name) {
- if (type in this.aliases_) {
- type = this.aliases_[type];
- }
- var entry = this.profile_.addCode(type, name, start, size);
+ var entry = this.profile_.addCode(
+ this.expandAlias(type), name, start, size);
};
@@ -256,21 +216,7 @@ TickProcessor.prototype.processTick = function(pc, sp, vmState, stack) {
return;
}
- var fullStack = [pc];
- var prevFrame = pc;
- for (var i = 0, n = stack.length; i < n; ++i) {
- var frame = stack[i];
- var firstChar = frame.charAt(0);
- // Leave only numbers starting with 0x. Filter possible 'overflow' string.
- if (firstChar == '0') {
- fullStack.push(parseInt(frame, 16));
- } else if (firstChar == '+' || firstChar == '-') {
- // An offset from the previous frame.
- prevFrame += parseInt(frame, 16);
- fullStack.push(prevFrame);
- }
- }
- this.profile_.recordTick(fullStack);
+ this.profile_.recordTick(this.processStack(pc, stack));
};
@@ -464,13 +410,6 @@ CppEntriesProvider.prototype.parseNextLine = function() {
};
-function inherits(childCtor, parentCtor) {
- function tempCtor() {};
- tempCtor.prototype = parentCtor.prototype;
- childCtor.prototype = new tempCtor();
-};
-
-
function UnixCppEntriesProvider() {
this.symbols = [];
this.parsePos = 0;
@@ -490,7 +429,7 @@ UnixCppEntriesProvider.prototype.loadSymbols = function(libName) {
];
} catch (e) {
// If the library cannot be found on this system let's not panic.
- this.symbols = [ '', '' ];
+ this.symbols = ['', ''];
}
};
« tools/logreader.js ('K') | « tools/logreader.js ('k') | tools/windows-tick-processor.bat » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698