1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/devtools/server/tests/unit/test_trace_actor-09.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,100 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +/** 1.8 + * Test that self-hosted functions aren't traced and don't add depth. 1.9 + */ 1.10 + 1.11 +var gDebuggee; 1.12 +var gClient; 1.13 +var gTraceClient; 1.14 + 1.15 +function run_test() 1.16 +{ 1.17 + initTestTracerServer(); 1.18 + gDebuggee = addTestGlobal("test-tracer-actor"); 1.19 + gClient = new DebuggerClient(DebuggerServer.connectPipe()); 1.20 + gClient.connect(function() { 1.21 + attachTestTab(gClient, "test-tracer-actor", function(aResponse, aTabClient) { 1.22 + gClient.attachTracer(aResponse.traceActor, function(aResponse, aTraceClient) { 1.23 + gTraceClient = aTraceClient; 1.24 + test_frame_depths(); 1.25 + }); 1.26 + }); 1.27 + }); 1.28 + do_test_pending(); 1.29 +} 1.30 + 1.31 +function test_frame_depths() 1.32 +{ 1.33 + const tracesStopped = promise.defer(); 1.34 + gClient.addListener("traces", (aEvent, { traces }) => { 1.35 + for (let t of traces) { 1.36 + check_trace(t); 1.37 + } 1.38 + tracesStopped.resolve(); 1.39 + }); 1.40 + 1.41 + start_trace() 1.42 + .then(eval_code) 1.43 + .then(() => tracesStopped.promise) 1.44 + .then(stop_trace) 1.45 + .then(function() { 1.46 + finishClient(gClient); 1.47 + }).then(null, error => { 1.48 + do_check_true(false, "Should not get an error, got: " + DevToolsUtils.safeErrorString(error)); 1.49 + }); 1.50 +} 1.51 + 1.52 +function start_trace() 1.53 +{ 1.54 + let deferred = promise.defer(); 1.55 + gTraceClient.startTrace(["depth", "name", "location"], null, function() { deferred.resolve(); }); 1.56 + return deferred.promise; 1.57 +} 1.58 + 1.59 +function eval_code() 1.60 +{ 1.61 + gDebuggee.eval("(" + function iife() { 1.62 + [1].forEach(function noop() {}); 1.63 + for (let x of [1]) {} 1.64 + } + ")()"); 1.65 +} 1.66 + 1.67 +function stop_trace() 1.68 +{ 1.69 + let deferred = promise.defer(); 1.70 + gTraceClient.stopTrace(null, function() { deferred.resolve(); }); 1.71 + return deferred.promise; 1.72 +} 1.73 + 1.74 +function check_trace({ sequence, depth, name, location }) 1.75 +{ 1.76 + if (location) { 1.77 + do_check_true(location.url !== "self-hosted"); 1.78 + } 1.79 + 1.80 + switch(sequence) { 1.81 + case 0: 1.82 + do_check_eq(name, "(eval)"); 1.83 + case 5: 1.84 + do_check_eq(depth, 0); 1.85 + break; 1.86 + 1.87 + case 1: 1.88 + do_check_eq(name, "iife"); 1.89 + case 4: 1.90 + do_check_eq(depth, 1); 1.91 + break; 1.92 + 1.93 + case 2: 1.94 + do_check_eq(name, "noop"); 1.95 + case 3: 1.96 + do_check_eq(depth, 2); 1.97 + break; 1.98 + 1.99 + default: 1.100 + // Should have covered all sequences. 1.101 + do_check_true(false); 1.102 + } 1.103 +}