browser/devtools/profiler/test/head.js

changeset 0
6474c204b198
     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 +}

mercurial