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

Unified Diff: tools/tickprocessor.js

Issue 113101: Don't keep data about JS code that is never executed, optimize static symbols loading (Closed)
Patch Set: Also optimized static symbols loading Created 11 years, 7 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
« tools/codemap.js ('K') | « tools/codemap.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/tickprocessor.js
diff --git a/tools/tickprocessor.js b/tools/tickprocessor.js
index 64020cabbcae83aa4af45c9d7d318b7a706695f2..196daa984adf3cb25e16344d3a67b6c24faa9d6d 100644
--- a/tools/tickprocessor.js
+++ b/tools/tickprocessor.js
@@ -99,10 +99,11 @@ TickProcessor.VmStates = {
TickProcessor.CodeTypes = {
- JS: 0,
- CPP: 1,
- SHARED_LIB: 2
+ CPP: 0,
+ SHARED_LIB: 1
};
+// Otherwise, this is JS-related code. We are not adding it to
+// codeTypes_ map because there can be zillions of them.
TickProcessor.RecordsDispatch = {
@@ -142,7 +143,7 @@ TickProcessor.prototype.isCppCode = function(name) {
TickProcessor.prototype.isJsCode = function(name) {
- return this.codeTypes_[name] == TickProcessor.CodeTypes.JS;
+ return !(name in this.codeTypes_);
};
@@ -220,7 +221,6 @@ TickProcessor.prototype.processSharedLibrary = function(
TickProcessor.prototype.processCodeCreation = function(
type, start, size, name) {
var entry = this.profile_.addCode(type, name, start, size);
- this.setCodeType(entry.getName(), 'JS');
};
@@ -415,8 +415,7 @@ function CppEntriesProvider() {
CppEntriesProvider.prototype.parseVmSymbols = function(
libName, libStart, libEnd, processorFunc) {
- var syms = this.loadSymbols(libName);
- if (syms.length == 0) return;
+ this.loadSymbols(libName);
var prevEntry;
@@ -428,11 +427,12 @@ CppEntriesProvider.prototype.parseVmSymbols = function(
}
}
- for (var i = 0, n = syms.length; i < n; ++i) {
- var line = syms[i];
- var funcInfo = this.parseLine(line);
- if (!funcInfo) {
+ while (true) {
+ var funcInfo = this.parseNextLine();
+ if (funcInfo === null) {
continue;
+ } else if (funcInfo === false) {
+ break;
}
if (funcInfo.start < libStart && funcInfo.start < libEnd - libStart) {
funcInfo.start += libStart;
@@ -445,12 +445,11 @@ CppEntriesProvider.prototype.parseVmSymbols = function(
CppEntriesProvider.prototype.loadSymbols = function(libName) {
- return [];
};
-CppEntriesProvider.prototype.parseLine = function(line) {
- return { name: '', start: 0 };
+CppEntriesProvider.prototype.parseNextLine = function() {
+ return false;
};
@@ -462,6 +461,8 @@ function inherits(childCtor, parentCtor) {
function UnixCppEntriesProvider() {
+ this.symbols = [];
+ this.parsePos = 0;
};
inherits(UnixCppEntriesProvider, CppEntriesProvider);
@@ -470,20 +471,35 @@ UnixCppEntriesProvider.FUNC_RE = /^([0-9a-fA-F]{8}) . (.*)$/;
UnixCppEntriesProvider.prototype.loadSymbols = function(libName) {
- var normalSyms = os.system('nm', ['-C', '-n', libName], -1, -1);
- var dynaSyms = os.system('nm', ['-C', '-n', '-D', libName], -1, -1);
- var syms = (normalSyms + dynaSyms).split('\n');
- return syms;
+ this.symbols = [
+ os.system('nm', ['-C', '-n', libName], -1, -1),
+ os.system('nm', ['-C', '-n', '-D', libName], -1, -1)
+ ];
+ this.parsePos = 0;
};
-UnixCppEntriesProvider.prototype.parseLine = function(line) {
+UnixCppEntriesProvider.prototype.parseNextLine = function() {
+ if (this.symbols.length == 0) {
+ return false;
+ }
+ var lineEndPos = this.symbols[0].indexOf('\n', this.parsePos);
+ if (lineEndPos == -1) {
+ this.symbols.shift();
+ this.parsePos = 0;
+ return this.parseNextLine();
+ }
+
+ var line = this.symbols[0].substring(this.parsePos, lineEndPos);
+ this.parsePos = lineEndPos + 1;
var fields = line.match(UnixCppEntriesProvider.FUNC_RE);
return fields ? { name: fields[2], start: parseInt(fields[1], 16) } : null;
};
function WindowsCppEntriesProvider() {
+ this.symbols = '';
+ this.parsePos = 0;
};
inherits(WindowsCppEntriesProvider, CppEntriesProvider);
@@ -498,13 +514,20 @@ WindowsCppEntriesProvider.FUNC_RE =
WindowsCppEntriesProvider.prototype.loadSymbols = function(libName) {
var fileNameFields = libName.match(WindowsCppEntriesProvider.FILENAME_RE);
// Only try to load symbols for the .exe file.
- if (!fileNameFields) return [];
+ if (!fileNameFields) return;
var mapFileName = fileNameFields[1] + '.map';
- return readFile(mapFileName).split('\r\n');
+ this.symbols = readFile(mapFileName);
};
-WindowsCppEntriesProvider.prototype.parseLine = function(line) {
+WindowsCppEntriesProvider.prototype.parseNextLine = function() {
+ var lineEndPos = this.symbols.indexOf('\r\n', this.parsePos);
+ if (lineEndPos == -1) {
+ return false;
+ }
+
+ var line = this.symbols.substring(this.parsePos, lineEndPos);
+ this.parsePos = lineEndPos + 2;
var fields = line.match(WindowsCppEntriesProvider.FUNC_RE);
return fields ?
{ name: this.unmangleName(fields[1]), start: parseInt(fields[2], 16) } :
« tools/codemap.js ('K') | « tools/codemap.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698