Index: test/inspector/cpu-profiler/coverage.js |
diff --git a/test/inspector/cpu-profiler/coverage.js b/test/inspector/cpu-profiler/coverage.js |
index 495b53699531f56ee4c489a14e6178094fbc51b9..00d9b3b09f3c0a7d6bd16b3d09ea6c2eaf9121ab 100644 |
--- a/test/inspector/cpu-profiler/coverage.js |
+++ b/test/inspector/cpu-profiler/coverage.js |
@@ -2,12 +2,17 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+// Flags: --allow-natives-syntax |
+ |
var source = |
` |
function fib(x) { |
if (x < 2) return 1; |
return fib(x-1) + fib(x-2); |
} |
+function is_optimized(f) { |
+ return (%GetOptimizationStatus(f) & 16) ? "optimized" : "unoptimized"; |
+} |
(function iife() { |
return 1; |
})(); |
@@ -32,7 +37,8 @@ f(3); |
InspectorTest.log("Test collecting code coverage data with Profiler.collectCoverage."); |
function ClearAndGC() { |
- return Protocol.Runtime.evaluate({ expression: "fib = null;" }).then(GC); |
+ return Protocol.Runtime.evaluate({ expression: "fib = g = f = h = is_optimized = null;" }) |
+ .then(GC); |
} |
function GC() { |
@@ -47,30 +53,30 @@ function LogSorted(message) { |
} |
InspectorTest.runTestSuite([ |
- function testPreciseBaseline(next) |
+ function testPreciseCountBaseline(next) |
{ |
Protocol.Runtime.enable() |
- .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: "0", persistScript: true })) |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: arguments.callee.name, persistScript: true })) |
.then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
.then(GC) |
.then(Protocol.Profiler.enable) |
- .then(Protocol.Profiler.startPreciseCoverage) |
+ .then(() => Protocol.Profiler.startPreciseCoverage({callCount: true})) |
.then(Protocol.Profiler.takePreciseCoverage) |
.then(LogSorted) |
.then(Protocol.Profiler.takePreciseCoverage) |
.then(LogSorted) |
.then(Protocol.Profiler.stopPreciseCoverage) |
- .then(ClearAndGC) |
.then(Protocol.Profiler.disable) |
.then(Protocol.Runtime.disable) |
+ .then(ClearAndGC) |
.then(next); |
}, |
- function testPreciseCoverage(next) |
+ function testPreciseCountCoverage(next) |
{ |
Protocol.Runtime.enable() |
.then(Protocol.Profiler.enable) |
- .then(Protocol.Profiler.startPreciseCoverage) |
- .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: "1", persistScript: true })) |
+ .then(() => Protocol.Profiler.startPreciseCoverage({callCount: true})) |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: arguments.callee.name, persistScript: true })) |
.then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
.then(ClearAndGC) |
.then(InspectorTest.logMessage) |
@@ -78,31 +84,31 @@ InspectorTest.runTestSuite([ |
.then(LogSorted) |
.then(Protocol.Profiler.takePreciseCoverage) |
.then(LogSorted) |
- .then(ClearAndGC) |
.then(Protocol.Profiler.stopPreciseCoverage) |
.then(Protocol.Profiler.disable) |
.then(Protocol.Runtime.disable) |
+ .then(ClearAndGC) |
.then(next); |
}, |
function testPreciseCoverageFail(next) |
{ |
Protocol.Runtime.enable() |
.then(Protocol.Profiler.enable) |
- .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: "2", persistScript: true })) |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: arguments.callee.name, persistScript: true })) |
.then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
.then(InspectorTest.logMessage) |
.then(ClearAndGC) |
.then(Protocol.Profiler.takePreciseCoverage) |
.then(InspectorTest.logMessage) |
- .then(ClearAndGC) |
.then(Protocol.Profiler.disable) |
.then(Protocol.Runtime.disable) |
+ .then(ClearAndGC) |
.then(next); |
}, |
function testBestEffortCoverage(next) |
{ |
Protocol.Runtime.enable() |
- .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: "3", persistScript: true })) |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: arguments.callee.name, persistScript: true })) |
.then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
.then(InspectorTest.logMessage) |
.then(ClearAndGC) |
@@ -110,16 +116,36 @@ InspectorTest.runTestSuite([ |
.then(LogSorted) |
.then(Protocol.Profiler.getBestEffortCoverage) |
.then(LogSorted) |
- .then(ClearAndGC) |
.then(Protocol.Runtime.disable) |
+ .then(ClearAndGC) |
.then(next); |
}, |
- function testBestEffortCoveragePrecise(next) |
+ function testBestEffortCoverageWithPreciseBinaryEnabled(next) |
+ { |
+ Protocol.Runtime.enable() |
+ .then(Protocol.Profiler.enable) |
+ .then(Protocol.Profiler.startPreciseCoverage) |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: arguments.callee.name, persistScript: true })) |
+ .then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
+ .then(InspectorTest.logMessage) |
+ .then(ClearAndGC) |
+ .then(Protocol.Profiler.getBestEffortCoverage) |
+ .then(LogSorted) |
+ .then(Protocol.Profiler.getBestEffortCoverage) |
+ .then(LogSorted) |
+ .then(ClearAndGC) |
+ .then(Protocol.Profiler.stopPreciseCoverage) |
+ .then(Protocol.Profiler.disable) |
+ .then(Protocol.Runtime.disable) |
+ .then(ClearAndGC) |
+ .then(next); |
+ }, |
+ function testBestEffortCoverageWithPreciseCountEnabled(next) |
{ |
Protocol.Runtime.enable() |
.then(Protocol.Profiler.enable) |
- .then(Protocol.Profiler.startPreciseCoverage) |
- .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: "4", persistScript: true })) |
+ .then(() => Protocol.Profiler.startPreciseCoverage({callCount: true})) |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: arguments.callee.name, persistScript: true })) |
.then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
.then(InspectorTest.logMessage) |
.then(ClearAndGC) |
@@ -131,27 +157,55 @@ InspectorTest.runTestSuite([ |
.then(Protocol.Profiler.stopPreciseCoverage) |
.then(Protocol.Profiler.disable) |
.then(Protocol.Runtime.disable) |
+ .then(ClearAndGC) |
.then(next); |
}, |
- function testEnablePreciseCoverageAtPause(next) |
+ function testEnablePreciseCountCoverageAtPause(next) |
{ |
function handleDebuggerPause() { |
Protocol.Profiler.enable() |
- .then(Protocol.Profiler.startPreciseCoverage) |
+ .then(() => Protocol.Profiler.startPreciseCoverage({callCount: true})) |
.then(Protocol.Debugger.resume) |
} |
Protocol.Debugger.enable(); |
Protocol.Debugger.oncePaused().then(handleDebuggerPause); |
Protocol.Runtime.enable() |
- .then(() => Protocol.Runtime.compileScript({ expression: break_source, sourceURL: "5", persistScript: true })) |
+ .then(() => Protocol.Runtime.compileScript({ expression: break_source, sourceURL: arguments.callee.name, persistScript: true })) |
.then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
.then(InspectorTest.logMessage) |
.then(ClearAndGC) |
.then(Protocol.Profiler.takePreciseCoverage) |
.then(LogSorted) |
+ .then(ClearAndGC) |
.then(Protocol.Profiler.stopPreciseCoverage) |
.then(Protocol.Profiler.disable) |
.then(Protocol.Runtime.disable) |
+ .then(Protocol.Debugger.disable) |
+ .then(ClearAndGC) |
+ .then(next); |
+ }, |
+ function testPreciseBinaryCoverage(next) |
+ { |
+ Protocol.Runtime.enable() |
+ .then(Protocol.Profiler.enable) |
+ .then(Protocol.Profiler.startPreciseCoverage) |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: arguments.callee.name, persistScript: true })) |
+ .then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
+ .then(InspectorTest.logMessage) |
+ .then(Protocol.Profiler.takePreciseCoverage) |
+ .then(LogSorted) |
+ .then(() => Protocol.Runtime.evaluate({ expression: "is_optimized(fib)" })) |
+ .then(message => InspectorTest.logMessage(message)) |
+ .then(() => Protocol.Runtime.evaluate({ expression: "fib(20)" })) |
+ .then(message => InspectorTest.logMessage(message)) |
+ .then(() => Protocol.Runtime.evaluate({ expression: "is_optimized(fib)" })) |
+ .then(message => InspectorTest.logMessage(message)) |
+ .then(Protocol.Profiler.takePreciseCoverage) |
+ .then(LogSorted) |
+ .then(Protocol.Profiler.stopPreciseCoverage) |
+ .then(Protocol.Profiler.disable) |
+ .then(Protocol.Runtime.disable) |
+ .then(ClearAndGC) |
.then(next); |
}, |
]); |