mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
130 lines
3.9 KiB
JavaScript
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);
|
|
}
|