Files
atom/src/initialize-benchmark-window.js
2019-05-31 18:33:56 +02:00

130 lines
3.9 KiB
JavaScript

const { remote } = require('electron');
const path = require('path');
const ipcHelpers = require('./ipc-helpers');
const util = require('util');
module.exports = async function() {
const getWindowLoadSettings = require('./get-window-load-settings');
const {
test,
headless,
resourcePath,
benchmarkPaths
} = getWindowLoadSettings();
try {
const Clipboard = require('../src/clipboard');
const ApplicationDelegate = require('../src/application-delegate');
const AtomEnvironment = require('../src/atom-environment');
const TextEditor = require('../src/text-editor');
require('./electron-shims');
const exportsPath = path.join(resourcePath, 'exports');
require('module').globalPaths.push(exportsPath); // Add 'exports' to module search path.
process.env.NODE_PATH = exportsPath; // Set NODE_PATH env variable since tasks may need it.
document.title = 'Benchmarks';
// Allow `document.title` to be assigned in benchmarks without actually changing the window title.
let documentTitle = null;
Object.defineProperty(document, 'title', {
get() {
return documentTitle;
},
set(title) {
documentTitle = title;
}
});
window.addEventListener(
'keydown',
event => {
// Reload: cmd-r / ctrl-r
if ((event.metaKey || event.ctrlKey) && event.keyCode === 82) {
ipcHelpers.call('window-method', 'reload');
}
// Toggle Dev Tools: cmd-alt-i (Mac) / ctrl-shift-i (Linux/Windows)
if (event.keyCode === 73) {
const isDarwin = process.platform === 'darwin';
if (
(isDarwin && event.metaKey && event.altKey) ||
(!isDarwin && event.ctrlKey && event.shiftKey)
) {
ipcHelpers.call('window-method', 'toggleDevTools');
}
}
// Close: cmd-w / ctrl-w
if ((event.metaKey || event.ctrlKey) && event.keyCode === 87) {
ipcHelpers.call('window-method', 'close');
}
// Copy: cmd-c / ctrl-c
if ((event.metaKey || event.ctrlKey) && event.keyCode === 67) {
ipcHelpers.call('window-method', 'copy');
}
},
true
);
const clipboard = new Clipboard();
TextEditor.setClipboard(clipboard);
TextEditor.viewForItem = item => atom.views.getView(item);
const applicationDelegate = new ApplicationDelegate();
const environmentParams = {
applicationDelegate,
window,
document,
clipboard,
configDirPath: process.env.ATOM_HOME,
enablePersistence: false
};
global.atom = new AtomEnvironment(environmentParams);
global.atom.initialize(environmentParams);
// Prevent benchmarks from modifying application menus
global.atom.menu.sendToBrowserProcess = function() {};
if (headless) {
Object.defineProperties(process, {
stdout: { value: remote.process.stdout },
stderr: { value: remote.process.stderr }
});
console.log = function(...args) {
const formatted = util.format(...args);
process.stdout.write(formatted + '\n');
};
console.warn = function(...args) {
const formatted = util.format(...args);
process.stderr.write(formatted + '\n');
};
console.error = function(...args) {
const formatted = util.format(...args);
process.stderr.write(formatted + '\n');
};
} else {
remote.getCurrentWindow().show();
}
const benchmarkRunner = require('../benchmarks/benchmark-runner');
const statusCode = await benchmarkRunner({ test, benchmarkPaths });
if (headless) {
exitWithStatusCode(statusCode);
}
} catch (error) {
if (headless) {
console.error(error.stack || error);
exitWithStatusCode(1);
} else {
ipcHelpers.call('window-method', 'openDevTools');
throw error;
}
}
};
function exitWithStatusCode(statusCode) {
remote.app.emit('will-quit');
remote.process.exit(statusCode);
}