scripting: Convert to ES module and migrate tests
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2822>
This commit is contained in:
parent
9a2c3da868
commit
3f12f3a87c
@ -5,6 +5,7 @@ overrides:
|
|||||||
- files:
|
- files:
|
||||||
- js/ui/init.js
|
- js/ui/init.js
|
||||||
- js/ui/environment.js
|
- js/ui/environment.js
|
||||||
|
- js/ui/scripting.js
|
||||||
- js/dbusServices/**
|
- js/dbusServices/**
|
||||||
- js/portalHelper/**
|
- js/portalHelper/**
|
||||||
- subprojects/extensions-app/**
|
- subprojects/extensions-app/**
|
||||||
|
@ -44,7 +44,6 @@ const NotificationDaemon = imports.ui.notificationDaemon;
|
|||||||
const WindowAttentionHandler = imports.ui.windowAttentionHandler;
|
const WindowAttentionHandler = imports.ui.windowAttentionHandler;
|
||||||
const Screenshot = imports.ui.screenshot;
|
const Screenshot = imports.ui.screenshot;
|
||||||
const ScreenShield = imports.ui.screenShield;
|
const ScreenShield = imports.ui.screenShield;
|
||||||
const Scripting = imports.ui.scripting;
|
|
||||||
const SessionMode = imports.ui.sessionMode;
|
const SessionMode = imports.ui.sessionMode;
|
||||||
const ShellDBus = imports.ui.shellDBus;
|
const ShellDBus = imports.ui.shellDBus;
|
||||||
const ShellMountOperation = imports.ui.shellMountOperation;
|
const ShellMountOperation = imports.ui.shellMountOperation;
|
||||||
@ -303,9 +302,11 @@ async function _initializeUI() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let Scripting;
|
||||||
let perfModule;
|
let perfModule;
|
||||||
const {automationScript} = global;
|
const {automationScript} = global;
|
||||||
if (automationScript) {
|
if (automationScript) {
|
||||||
|
Scripting = await import('./scripting.js');
|
||||||
perfModule = await import(automationScript.get_uri());
|
perfModule = await import(automationScript.get_uri());
|
||||||
if (perfModule.init)
|
if (perfModule.init)
|
||||||
perfModule.init();
|
perfModule.init();
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
/* exported sleep, waitLeisure, createTestWindow, waitTestWindows,
|
|
||||||
destroyTestWindows, defineScriptEvent, scriptEvent,
|
|
||||||
collectStatistics, runPerfScript, disableHelperAutoExit */
|
|
||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
import Gio from 'gi://Gio';
|
||||||
const GLib = imports.gi.GLib;
|
import GLib from 'gi://GLib';
|
||||||
const Meta = imports.gi.Meta;
|
import Meta from 'gi://Meta';
|
||||||
const Shell = imports.gi.Shell;
|
import Shell from 'gi://Shell';
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
@ -41,7 +38,7 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
|
|||||||
* current script for the specified amount of time. Use as
|
* current script for the specified amount of time. Use as
|
||||||
* 'yield Scripting.sleep(500);'
|
* 'yield Scripting.sleep(500);'
|
||||||
*/
|
*/
|
||||||
function sleep(milliseconds) {
|
export function sleep(milliseconds) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
let id = GLib.timeout_add(GLib.PRIORITY_DEFAULT, milliseconds, () => {
|
let id = GLib.timeout_add(GLib.PRIORITY_DEFAULT, milliseconds, () => {
|
||||||
resolve();
|
resolve();
|
||||||
@ -59,18 +56,19 @@ function sleep(milliseconds) {
|
|||||||
* current script until the shell is completely idle. Use as
|
* current script until the shell is completely idle. Use as
|
||||||
* 'yield Scripting.waitLeisure();'
|
* 'yield Scripting.waitLeisure();'
|
||||||
*/
|
*/
|
||||||
function waitLeisure() {
|
export function waitLeisure() {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
global.run_at_leisure(resolve);
|
global.run_at_leisure(resolve);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const PerfHelperIface = loadInterfaceXML('org.gnome.Shell.PerfHelper');
|
const PerfHelperIface = loadInterfaceXML('org.gnome.Shell.PerfHelper');
|
||||||
var PerfHelperProxy = Gio.DBusProxy.makeProxyWrapper(PerfHelperIface);
|
export const PerfHelperProxy = Gio.DBusProxy.makeProxyWrapper(PerfHelperIface);
|
||||||
|
|
||||||
let _perfHelper = null;
|
let _perfHelper = null;
|
||||||
/** private */
|
|
||||||
async function _getPerfHelper() {
|
/** @private */
|
||||||
|
export async function _getPerfHelper() {
|
||||||
if (_perfHelper == null) {
|
if (_perfHelper == null) {
|
||||||
_perfHelper = await PerfHelperProxy.newAsync(
|
_perfHelper = await PerfHelperProxy.newAsync(
|
||||||
Gio.DBus.session, 'org.gnome.Shell.PerfHelper', '/org/gnome/Shell/PerfHelper');
|
Gio.DBus.session, 'org.gnome.Shell.PerfHelper', '/org/gnome/Shell/PerfHelper');
|
||||||
@ -80,7 +78,8 @@ async function _getPerfHelper() {
|
|||||||
return _perfHelper;
|
return _perfHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _spawnPerfHelper() {
|
/** @private */
|
||||||
|
export function _spawnPerfHelper() {
|
||||||
let path = GLib.getenv('GNOME_SHELL_BUILDDIR') || Config.LIBEXECDIR;
|
let path = GLib.getenv('GNOME_SHELL_BUILDDIR') || Config.LIBEXECDIR;
|
||||||
let command = `${path}/gnome-shell-perf-helper`;
|
let command = `${path}/gnome-shell-perf-helper`;
|
||||||
Util.trySpawnCommandLine(command);
|
Util.trySpawnCommandLine(command);
|
||||||
@ -102,7 +101,7 @@ function _spawnPerfHelper() {
|
|||||||
* because of the normal X asynchronous mapping process, to actually wait
|
* because of the normal X asynchronous mapping process, to actually wait
|
||||||
* until the window has been mapped and exposed, use waitTestWindows().
|
* until the window has been mapped and exposed, use waitTestWindows().
|
||||||
*/
|
*/
|
||||||
async function createTestWindow(params) {
|
export async function createTestWindow(params) {
|
||||||
params = Params.parse(params, {
|
params = Params.parse(params, {
|
||||||
width: 640,
|
width: 640,
|
||||||
height: 480,
|
height: 480,
|
||||||
@ -121,12 +120,13 @@ async function createTestWindow(params) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* waitTestWindows:
|
* waitTestWindows:
|
||||||
|
*
|
||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*
|
*
|
||||||
* Used within an automation script to pause until all windows previously
|
* Used within an automation script to pause until all windows previously
|
||||||
* created with createTestWindow have been mapped and exposed.
|
* created with createTestWindow have been mapped and exposed.
|
||||||
*/
|
*/
|
||||||
async function waitTestWindows() {
|
export async function waitTestWindows() {
|
||||||
let perfHelper = await _getPerfHelper();
|
let perfHelper = await _getPerfHelper();
|
||||||
return perfHelper.WaitWindowsAsync().catch(logError);
|
return perfHelper.WaitWindowsAsync().catch(logError);
|
||||||
}
|
}
|
||||||
@ -141,7 +141,7 @@ async function waitTestWindows() {
|
|||||||
* this doesn't guarantee that Mutter has actually finished the destroy
|
* this doesn't guarantee that Mutter has actually finished the destroy
|
||||||
* process because of normal X asynchronicity.
|
* process because of normal X asynchronicity.
|
||||||
*/
|
*/
|
||||||
async function destroyTestWindows() {
|
export async function destroyTestWindows() {
|
||||||
let perfHelper = await _getPerfHelper();
|
let perfHelper = await _getPerfHelper();
|
||||||
return perfHelper.DestroyWindowsAsync().catch(logError);
|
return perfHelper.DestroyWindowsAsync().catch(logError);
|
||||||
}
|
}
|
||||||
@ -152,7 +152,7 @@ async function destroyTestWindows() {
|
|||||||
* Don't exixt the perf helper after running the script. Instead it will remain
|
* Don't exixt the perf helper after running the script. Instead it will remain
|
||||||
* running until something else makes it exit, e.g. the Wayland socket closing.
|
* running until something else makes it exit, e.g. the Wayland socket closing.
|
||||||
*/
|
*/
|
||||||
async function disableHelperAutoExit() {
|
export async function disableHelperAutoExit() {
|
||||||
let perfHelper = await _getPerfHelper();
|
let perfHelper = await _getPerfHelper();
|
||||||
perfHelper._autoExit = false;
|
perfHelper._autoExit = false;
|
||||||
}
|
}
|
||||||
@ -166,7 +166,7 @@ async function disableHelperAutoExit() {
|
|||||||
* within the 'script' namespace that is reserved for events defined locally
|
* within the 'script' namespace that is reserved for events defined locally
|
||||||
* within a performance automation script
|
* within a performance automation script
|
||||||
*/
|
*/
|
||||||
function defineScriptEvent(name, description) {
|
export function defineScriptEvent(name, description) {
|
||||||
Shell.PerfLog.get_default().define_event(`script.${name}`,
|
Shell.PerfLog.get_default().define_event(`script.${name}`,
|
||||||
description,
|
description,
|
||||||
"");
|
"");
|
||||||
@ -174,12 +174,13 @@ function defineScriptEvent(name, description) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* scriptEvent
|
* scriptEvent
|
||||||
* @param {string} name: Name registered with defineScriptEvent()
|
*
|
||||||
|
* @param {string} name Name registered with defineScriptEvent()
|
||||||
*
|
*
|
||||||
* Convenience function to record a script-local performance event
|
* Convenience function to record a script-local performance event
|
||||||
* previously defined with defineScriptEvent
|
* previously defined with defineScriptEvent
|
||||||
*/
|
*/
|
||||||
function scriptEvent(name) {
|
export function scriptEvent(name) {
|
||||||
Shell.PerfLog.get_default().event(`script.${name}`);
|
Shell.PerfLog.get_default().event(`script.${name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,7 +189,7 @@ function scriptEvent(name) {
|
|||||||
*
|
*
|
||||||
* Convenience function to trigger statistics collection
|
* Convenience function to trigger statistics collection
|
||||||
*/
|
*/
|
||||||
function collectStatistics() {
|
export function collectStatistics() {
|
||||||
Shell.PerfLog.get_default().collect_statistics();
|
Shell.PerfLog.get_default().collect_statistics();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,8 +355,8 @@ async function _runPerfScript(scriptModule, outputFile) {
|
|||||||
*
|
*
|
||||||
* After running the script and collecting statistics from the
|
* After running the script and collecting statistics from the
|
||||||
* event log, GNOME Shell will exit.
|
* event log, GNOME Shell will exit.
|
||||||
**/
|
*/
|
||||||
function runPerfScript(scriptModule, outputFile) {
|
export function runPerfScript(scriptModule, outputFile) {
|
||||||
Shell.PerfLog.get_default().set_enabled(true);
|
Shell.PerfLog.get_default().set_enabled(true);
|
||||||
_spawnPerfHelper();
|
_spawnPerfHelper();
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import St from 'gi://St';
|
|||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
const Scripting = imports.ui.scripting;
|
import * as Scripting from 'resource://org/gnome/shell/ui/scripting.js';
|
||||||
|
|
||||||
// This script tests the most important (basic) functionality of the shell.
|
// This script tests the most important (basic) functionality of the shell.
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
import Clutter from 'gi://Clutter';
|
import Clutter from 'gi://Clutter';
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Scripting = imports.ui.scripting;
|
import * as Scripting from 'resource://org/gnome/shell/ui/scripting.js';
|
||||||
|
|
||||||
/** Run test. */
|
/** Run test. */
|
||||||
export async function run() {
|
export async function run() {
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
import System from 'system';
|
import System from 'system';
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Scripting = imports.ui.scripting;
|
import * as Scripting from 'resource://org/gnome/shell/ui/scripting.js';
|
||||||
|
|
||||||
// This performance script measure the most important (core) performance
|
// This performance script measure the most important (core) performance
|
||||||
// metrics for the shell. By looking at the output metrics of this script
|
// metrics for the shell. By looking at the output metrics of this script
|
||||||
|
@ -6,7 +6,7 @@ import MetaTest from 'gi://MetaTest';
|
|||||||
import Shell from 'gi://Shell';
|
import Shell from 'gi://Shell';
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Scripting = imports.ui.scripting;
|
import * as Scripting from 'resource://org/gnome/shell/ui/scripting.js';
|
||||||
|
|
||||||
// This script tests that the shell handles connecting monitors after startup
|
// This script tests that the shell handles connecting monitors after startup
|
||||||
// is properly handled.
|
// is properly handled.
|
||||||
|
@ -3,7 +3,7 @@ import Clutter from 'gi://Clutter';
|
|||||||
import Gio from 'gi://Gio';
|
import Gio from 'gi://Gio';
|
||||||
import Shell from 'gi://Shell';
|
import Shell from 'gi://Shell';
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Scripting = imports.ui.scripting;
|
import * as Scripting from 'resource://org/gnome/shell/ui/scripting.js';
|
||||||
|
|
||||||
export var METRICS = {
|
export var METRICS = {
|
||||||
timeToDesktop: {
|
timeToDesktop: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user