1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/profiler/test/head.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,128 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +let temp = {}; 1.8 + 1.9 +const PROFILER_ENABLED = "devtools.profiler.enabled"; 1.10 +const REMOTE_ENABLED = "devtools.debugger.remote-enabled"; 1.11 +const SHOW_PLATFORM_DATA = "devtools.profiler.ui.show-platform-data"; 1.12 +const PROFILE_IDLE = 0; 1.13 +const PROFILE_RUNNING = 1; 1.14 +const PROFILE_COMPLETED = 2; 1.15 + 1.16 +Cu.import("resource:///modules/devtools/gDevTools.jsm", temp); 1.17 +let gDevTools = temp.gDevTools; 1.18 + 1.19 +Cu.import("resource://gre/modules/devtools/Loader.jsm", temp); 1.20 +let TargetFactory = temp.devtools.TargetFactory; 1.21 + 1.22 +Cu.import("resource://gre/modules/devtools/dbg-server.jsm", temp); 1.23 +let DebuggerServer = temp.DebuggerServer; 1.24 + 1.25 +// Import the GCLI test helper 1.26 +let testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/")); 1.27 +Services.scriptloader.loadSubScript(testDir + "../../../commandline/test/helpers.js", this); 1.28 + 1.29 +gDevTools.testing = true; 1.30 +SimpleTest.registerCleanupFunction(() => { 1.31 + gDevTools.testing = false; 1.32 +}); 1.33 + 1.34 +registerCleanupFunction(function () { 1.35 + helpers = null; 1.36 + Services.prefs.clearUserPref(PROFILER_ENABLED); 1.37 + Services.prefs.clearUserPref(REMOTE_ENABLED); 1.38 + Services.prefs.clearUserPref(SHOW_PLATFORM_DATA); 1.39 + DebuggerServer.destroy(); 1.40 + 1.41 + // These tests use a lot of memory due to GL contexts, so force a GC to help 1.42 + // fragmentation. 1.43 + info("Forcing GC after profiler test."); 1.44 + Cu.forceGC(); 1.45 +}); 1.46 + 1.47 +function getProfileInternals(uid) { 1.48 + let profile = (uid != null) ? gPanel.profiles.get(uid) : gPanel.activeProfile; 1.49 + let win = profile.iframe.contentWindow; 1.50 + let doc = win.document; 1.51 + 1.52 + return [win, doc]; 1.53 +} 1.54 + 1.55 +function getSidebarItem(uid, panel=gPanel) { 1.56 + let profile = panel.profiles.get(uid); 1.57 + return panel.sidebar.getItemByProfile(profile); 1.58 +} 1.59 + 1.60 +function sendFromProfile(uid, msg) { 1.61 + let [win, doc] = getProfileInternals(uid); 1.62 + win.parent.postMessage({ uid: uid, status: msg }, "*"); 1.63 +} 1.64 + 1.65 +function loadTab(url, callback) { 1.66 + let tab = gBrowser.addTab(); 1.67 + gBrowser.selectedTab = tab; 1.68 + loadUrl(url, tab, callback); 1.69 +} 1.70 + 1.71 +function loadUrl(url, tab, callback) { 1.72 + content.location.assign(url); 1.73 + let browser = gBrowser.getBrowserForTab(tab); 1.74 + if (browser.contentDocument.readyState === "complete") { 1.75 + callback(tab, browser); 1.76 + return; 1.77 + } 1.78 + 1.79 + let onLoad = function onLoad() { 1.80 + browser.removeEventListener("load", onLoad, true); 1.81 + callback(tab, browser); 1.82 + }; 1.83 + 1.84 + browser.addEventListener("load", onLoad, true); 1.85 +} 1.86 + 1.87 +function openProfiler(tab, callback) { 1.88 + let target = TargetFactory.forTab(tab); 1.89 + gDevTools.showToolbox(target, "jsprofiler").then(callback); 1.90 +} 1.91 + 1.92 +function openConsole(tab, cb=function(){}) { 1.93 + // This function was borrowed from webconsole/test/head.js 1.94 + let target = TargetFactory.forTab(tab); 1.95 + 1.96 + gDevTools.showToolbox(target, "webconsole").then(function (toolbox) { 1.97 + let hud = toolbox.getCurrentPanel().hud; 1.98 + hud.jsterm._lazyVariablesView = false; 1.99 + cb(hud); 1.100 + }); 1.101 +} 1.102 + 1.103 +function closeProfiler(tab, callback) { 1.104 + let target = TargetFactory.forTab(tab); 1.105 + let toolbox = gDevTools.getToolbox(target); 1.106 + toolbox.destroy().then(callback); 1.107 +} 1.108 + 1.109 +function setUp(url, callback=function(){}) { 1.110 + Services.prefs.setBoolPref(PROFILER_ENABLED, true); 1.111 + 1.112 + loadTab(url, function onTabLoad(tab, browser) { 1.113 + openProfiler(tab, function onProfilerOpen() { 1.114 + let target = TargetFactory.forTab(tab); 1.115 + let panel = gDevTools.getToolbox(target).getPanel("jsprofiler"); 1.116 + callback(tab, browser, panel); 1.117 + }); 1.118 + }); 1.119 +} 1.120 + 1.121 +function tearDown(tab, callback=function(){}) { 1.122 + closeProfiler(tab, function onProfilerClose() { 1.123 + callback(); 1.124 + 1.125 + while (gBrowser.tabs.length > 1) { 1.126 + gBrowser.removeCurrentTab(); 1.127 + } 1.128 + 1.129 + finish(); 1.130 + }); 1.131 +}