From: mikhail.naganov@gmail.com Date: Mon, 12 Sep 2011 10:42:15 +0000 (+0000) Subject: do not use code deletions X-Git-Tag: upstream/4.7.83~18503 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=81ebd86817b7f88acecd4779214f7a1d9a7f04b5;p=platform%2Fupstream%2Fv8.git do not use code deletions git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9229 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/tools/codemap.js b/tools/codemap.js index dec494a..d7c52e8 100644 --- a/tools/codemap.js +++ b/tools/codemap.js @@ -79,6 +79,7 @@ CodeMap.PAGE_SIZE = * @param {CodeMap.CodeEntry} codeEntry Code entry object. */ CodeMap.prototype.addCode = function(start, codeEntry) { + this.removeAllCoveredNodes_(this.dynamics_, start, start + codeEntry.size); this.dynamics_.insert(start, codeEntry); }; @@ -91,7 +92,9 @@ CodeMap.prototype.addCode = function(start, codeEntry) { * @param {number} to The destination address. */ CodeMap.prototype.moveCode = function(from, to) { + if (from === to) return; var removedNode = this.dynamics_.remove(from); + this.removeAllCoveredNodes_(this.dynamics_, to, to + removedNode.value.size); this.dynamics_.insert(to, removedNode.value); }; @@ -154,6 +157,26 @@ CodeMap.prototype.isAddressBelongsTo_ = function(addr, node) { /** * @private */ +CodeMap.prototype.findAllCoveredNodes_ = function(tree, start, end) { + var result = []; + var addr = end - 1; + while (addr >= start) { + var node = tree.findGreatestLessThan(addr); + if (!node) break; + var start2 = node.key, end2 = node.key + node.value.size; + if (start2 < end && start < end2) { + // Node overlaps with the interval given + result.push(node); + } + addr = node.key - 1; + } + return result; +}; + + +/** + * @private + */ CodeMap.prototype.findInTree_ = function(tree, addr) { var node = tree.findGreatestLessThan(addr); return node && this.isAddressBelongsTo_(addr, node) ? node.value : null; @@ -234,6 +257,14 @@ CodeMap.prototype.getAllLibrariesEntries = function() { }; +CodeMap.prototype.removeAllCoveredNodes_ = function(tree, start, end) { + var covered = this.findAllCoveredNodes_(tree, start, end); + for (var i = 0, l = covered.length; i < l; ++i) { + tree.remove(covered[i].key); + } +}; + + /** * Creates a code entry object. * diff --git a/tools/profile.js b/tools/profile.js index 10a07f8..fe922fa 100644 --- a/tools/profile.js +++ b/tools/profile.js @@ -58,8 +58,7 @@ Profile.prototype.skipThisFunction = function(name) { */ Profile.Operation = { MOVE: 0, - DELETE: 1, - TICK: 2 + TICK: 1 }; @@ -163,15 +162,13 @@ Profile.prototype.addFuncCode = function( func.name = name; } var entry = this.codeMap_.findDynamicEntryByStartAddress(start); - if (entry) { - if (entry.size === size && entry.func === func) { - // Entry state has changed. - entry.state = state; - } - } else { - entry = new Profile.DynamicFuncCodeEntry(size, type, func, state); - this.codeMap_.addCode(start, entry); + if (entry && entry.size === size && entry.func === func) { + // Entry state has changed. + entry.state = state; + return entry; } + entry = new Profile.DynamicFuncCodeEntry(size, type, func, state); + this.codeMap_.addCode(start, entry); return entry; }; @@ -192,20 +189,6 @@ Profile.prototype.moveCode = function(from, to) { /** - * Reports about deletion of a dynamic code entry. - * - * @param {number} start Starting address. - */ -Profile.prototype.deleteCode = function(start) { - try { - this.codeMap_.deleteCode(start); - } catch (e) { - this.handleUnknownCode(Profile.Operation.DELETE, start); - } -}; - - -/** * Reports about moving of a dynamic code entry. * * @param {number} from Current code entry address. diff --git a/tools/tickprocessor.js b/tools/tickprocessor.js index 5f57835..1d058a0 100644 --- a/tools/tickprocessor.js +++ b/tools/tickprocessor.js @@ -77,8 +77,7 @@ function SnapshotLogProcessor() { processor: this.processCodeCreation }, 'code-move': { parsers: [parseInt, parseInt], processor: this.processCodeMove }, - 'code-delete': { parsers: [parseInt], - processor: this.processCodeDelete }, + 'code-delete': null, 'function-creation': null, 'function-move': null, 'function-delete': null, @@ -93,10 +92,6 @@ function SnapshotLogProcessor() { print('Snapshot: Code move event for unknown code: 0x' + addr.toString(16)); break; - case op.DELETE: - print('Snapshot: Code delete event for unknown code: 0x' + - addr.toString(16)); - break; } }; @@ -123,11 +118,6 @@ SnapshotLogProcessor.prototype.processCodeMove = function(from, to) { }; -SnapshotLogProcessor.prototype.processCodeDelete = function(start) { - this.profile_.deleteCode(start); -}; - - SnapshotLogProcessor.prototype.processSnapshotPosition = function(addr, pos) { this.serializedEntries_[pos] = this.profile_.findEntry(addr); }; @@ -155,8 +145,7 @@ function TickProcessor( processor: this.processCodeCreation }, 'code-move': { parsers: [parseInt, parseInt], processor: this.processCodeMove }, - 'code-delete': { parsers: [parseInt], - processor: this.processCodeDelete }, + 'code-delete': null, 'sfi-move': { parsers: [parseInt, parseInt], processor: this.processFunctionMove }, 'snapshot-pos': { parsers: [parseInt, parseInt], @@ -195,9 +184,6 @@ function TickProcessor( case op.MOVE: print('Code move event for unknown code: 0x' + addr.toString(16)); break; - case op.DELETE: - print('Code delete event for unknown code: 0x' + addr.toString(16)); - break; case op.TICK: // Only unknown PCs (the first frame) are reported as unaccounted, // otherwise tick balance will be corrupted (this behavior is compatible @@ -318,11 +304,6 @@ TickProcessor.prototype.processCodeMove = function(from, to) { }; -TickProcessor.prototype.processCodeDelete = function(start) { - this.profile_.deleteCode(start); -}; - - TickProcessor.prototype.processFunctionMove = function(from, to) { this.profile_.moveFunc(from, to); };