Index: test/mjsunit/tools/profile.js |
diff --git a/test/mjsunit/tools/profile.js b/test/mjsunit/tools/profile.js |
index aaa9aa76c1850d2e01c5afc1986c236d31c3a858..49eef3b0aaa329ec54399e6d7c489762e96c3191 100644 |
--- a/test/mjsunit/tools/profile.js |
+++ b/test/mjsunit/tools/profile.js |
@@ -124,6 +124,10 @@ ProfileTestDriver.prototype.execute = function() { |
this.leave(); |
this.leave(); |
this.leave(); |
+ this.enter('lib2-f1'); |
+ this.enter('lib1-f1'); |
+ this.leave(); |
+ this.leave(); |
this.stay(); |
this.leave(); |
}; |
@@ -149,14 +153,14 @@ function Inherits(childCtor, parentCtor) { |
Driver.prototype.enter = function(func) { |
this.namesTopDown.push(func); |
this.namesBottomUp.unshift(func); |
- assertNoPathExists(this.profile.getTopDownTreeRoot(), this.namesTopDown, |
+ assertNoPathExists(this.profile.getTopDownProfile().getRoot(), this.namesTopDown, |
'pre enter/topDown'); |
- assertNoPathExists(this.profile.getBottomUpTreeRoot(), this.namesBottomUp, |
+ assertNoPathExists(this.profile.getBottomUpProfile().getRoot(), this.namesBottomUp, |
'pre enter/bottomUp'); |
Driver.superClass_.enter.call(this, func); |
- assertPathExists(this.profile.getTopDownTreeRoot(), this.namesTopDown, |
+ assertPathExists(this.profile.getTopDownProfile().getRoot(), this.namesTopDown, |
'post enter/topDown'); |
- assertPathExists(this.profile.getBottomUpTreeRoot(), this.namesBottomUp, |
+ assertPathExists(this.profile.getBottomUpProfile().getRoot(), this.namesBottomUp, |
'post enter/bottomUp'); |
}; |
@@ -196,8 +200,8 @@ function assertNodeWeights(root, path, selfTicks, totalTicks) { |
testDriver.execute(); |
var pathWeights = [ |
- [['lib1-f1'], 1, 14], |
- [['lib1-f1', 'lib1-f2'], 2, 13], |
+ [['lib1-f1'], 1, 16], |
+ [['lib1-f1', 'lib1-f2'], 2, 15], |
[['lib1-f1', 'lib1-f2', 'T: F1'], 2, 11], |
[['lib1-f1', 'lib1-f2', 'T: F1', 'T: F2'], 1, 1], |
[['lib1-f1', 'lib1-f2', 'T: F1', 'lib2-f1'], 2, 3], |
@@ -205,10 +209,12 @@ function assertNodeWeights(root, path, selfTicks, totalTicks) { |
[['lib1-f1', 'lib1-f2', 'T: F1', 'T: F3'], 1, 5], |
[['lib1-f1', 'lib1-f2', 'T: F1', 'T: F3', 'T: F3'], 1, 4], |
[['lib1-f1', 'lib1-f2', 'T: F1', 'T: F3', 'T: F3', 'T: F3'], 1, 1], |
- [['lib1-f1', 'lib1-f2', 'T: F1', 'T: F3', 'T: F3', 'T: F2'], 2, 2] |
+ [['lib1-f1', 'lib1-f2', 'T: F1', 'T: F3', 'T: F3', 'T: F2'], 2, 2], |
+ [['lib1-f1', 'lib1-f2', 'lib2-f1'], 1, 2], |
+ [['lib1-f1', 'lib1-f2', 'lib2-f1', 'lib1-f1'], 1, 1] |
]; |
- var root = testDriver.profile.getTopDownTreeRoot(); |
+ var root = testDriver.profile.getTopDownProfile().getRoot(); |
for (var i = 0; i < pathWeights.length; ++i) { |
var data = pathWeights[i]; |
assertNodeWeights(root, data[0], data[1], data[2]); |
@@ -221,6 +227,7 @@ function assertNodeWeights(root, path, selfTicks, totalTicks) { |
ProfileTestDriver.call(this); |
this.namesTopDown = ['']; |
this.counters = {}; |
+ this.root = null; |
}; |
Inherits(Driver, ProfileTestDriver); |
@@ -262,16 +269,26 @@ function assertNodeWeights(root, path, selfTicks, totalTicks) { |
this.namesTopDown.pop(); |
}; |
+ Driver.prototype.extractRoot = function() { |
+ assertTrue('' in this.counters); |
+ this.root = this.counters['']; |
+ delete this.counters['']; |
+ }; |
+ |
var testDriver = new Driver(); |
testDriver.execute(); |
+ testDriver.extractRoot(); |
var counted = 0; |
for (var c in testDriver.counters) { |
counted++; |
} |
- var flatProfile = |
- testDriver.profile.getFlatProfile().getRoot().exportChildren(); |
+ var flatProfileRoot = testDriver.profile.getFlatProfile().getRoot(); |
+ assertEquals(testDriver.root.self, flatProfileRoot.selfWeight); |
+ assertEquals(testDriver.root.total, flatProfileRoot.totalWeight); |
+ |
+ var flatProfile = flatProfileRoot.exportChildren(); |
assertEquals(counted, flatProfile.length, 'counted vs. flatProfile'); |
for (var i = 0; i < flatProfile.length; ++i) { |
var rec = flatProfile[i]; |
@@ -282,3 +299,50 @@ function assertNodeWeights(root, path, selfTicks, totalTicks) { |
} |
})(); |
+ |
+ |
+(function testFunctionCalleesProfileTicks() { |
+ var testDriver = new ProfileTestDriver(); |
+ testDriver.execute(); |
+ |
+ var pathWeights = [ |
+ [['lib2-f1'], 3, 5], |
+ [['lib2-f1', 'lib2-f1'], 1, 1], |
+ [['lib2-f1', 'lib1-f1'], 1, 1] |
+ ]; |
+ |
+ var profile = testDriver.profile.getTopDownProfile('lib2-f1'); |
+ var root = profile.getRoot(); |
+ for (var i = 0; i < pathWeights.length; ++i) { |
+ var data = pathWeights[i]; |
+ assertNodeWeights(root, data[0], data[1], data[2]); |
+ } |
+})(); |
+ |
+ |
+(function testFunctionFlatProfileTicks() { |
+ var testDriver = new ProfileTestDriver(); |
+ testDriver.execute(); |
+ |
+ var flatWeights = { |
+ 'lib2-f1': [1, 1], |
+ 'lib1-f1': [1, 1] |
+ }; |
+ |
+ var flatProfileRoot = |
+ testDriver.profile.getFlatProfile('lib2-f1').findOrAddChild('lib2-f1'); |
+ assertEquals(3, flatProfileRoot.selfWeight); |
+ assertEquals(5, flatProfileRoot.totalWeight); |
+ |
+ var flatProfile = flatProfileRoot.exportChildren(); |
+ assertEquals(2, flatProfile.length, 'counted vs. flatProfile'); |
+ for (var i = 0; i < flatProfile.length; ++i) { |
+ var rec = flatProfile[i]; |
+ assertTrue(rec.label in flatWeights, 'uncounted: ' + rec.label); |
+ var reference = flatWeights[rec.label]; |
+ assertEquals(reference[0], rec.selfWeight, 'self of ' + rec.label); |
+ assertEquals(reference[1], rec.totalWeight, 'total of ' + rec.label); |
+ } |
+ |
+})(); |
+ |