Add 'headless start' perf test
This tests that GNOME Shell will launch sucessfully despite there being no monitors on startup, and successfully hide and then show the overview, once the monitor is connected. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2623>
This commit is contained in:
parent
4bcbe9be83
commit
9dd3d887d2
@ -37,6 +37,7 @@
|
||||
|
||||
<file>perf/basic.js</file>
|
||||
<file>perf/core.js</file>
|
||||
<file>perf/headlessStart.js</file>
|
||||
<file>perf/hwtest.js</file>
|
||||
|
||||
<file>ui/accessDialog.js</file>
|
||||
|
111
js/perf/headlessStart.js
Normal file
111
js/perf/headlessStart.js
Normal file
@ -0,0 +1,111 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/* exported init, run, finish, script_monitorsChanged, script_overviewHideDone,
|
||||
script_overviewShowDone, METRICS,
|
||||
*/
|
||||
/* eslint camelcase: ["error", { properties: "never", allow: ["^script_"] }] */
|
||||
|
||||
const {GLib, MetaTest, Shell} = imports.gi;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const Scripting = imports.ui.scripting;
|
||||
|
||||
// This script tests that the shell handles connecting monitors after startup
|
||||
// is properly handled.
|
||||
|
||||
var METRICS = {};
|
||||
|
||||
let _testMonitor = null;
|
||||
|
||||
/**
|
||||
* init:
|
||||
*/
|
||||
function init() {
|
||||
global.connect('shutdown', () => {
|
||||
_testMonitor?.destroy();
|
||||
});
|
||||
global.context.connect('started',
|
||||
() => {
|
||||
GLib.timeout_add_seconds(
|
||||
GLib.PRIORITY_LOW, 2,
|
||||
() => {
|
||||
log('Connecting 1280x720 test monitor');
|
||||
_testMonitor = MetaTest.TestMonitor.new(
|
||||
global.context, 1280, 720, 60.0);
|
||||
});
|
||||
});
|
||||
Scripting.defineScriptEvent('monitorsChanged', 'Monitors changed');
|
||||
|
||||
const display = global.display;
|
||||
console.assert(display.get_n_monitors() === 0, 'Not running headless');
|
||||
|
||||
const monitorManager = global.backend.get_monitor_manager();
|
||||
const monitorsChangedHandlerId = monitorManager.connect('monitors-changed',
|
||||
() => {
|
||||
console.assert(display.get_n_monitors() === 1,
|
||||
'Expected a single monitor');
|
||||
Scripting.scriptEvent('monitorsChanged');
|
||||
monitorManager.disconnect(monitorsChangedHandlerId);
|
||||
});
|
||||
Shell.PerfLog.get_default().set_enabled(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* run:
|
||||
*/
|
||||
async function run() {
|
||||
/* eslint-disable no-await-in-loop */
|
||||
Scripting.defineScriptEvent('overviewShowDone', 'Overview finished showing');
|
||||
Scripting.defineScriptEvent('overviewHideDone', 'Overview finished hiding');
|
||||
|
||||
Main.overview.connect('shown',
|
||||
() => Scripting.scriptEvent('overviewShowDone'));
|
||||
Main.overview.connect('hidden',
|
||||
() => Scripting.scriptEvent('overviewHideDone'));
|
||||
|
||||
Main.overview.hide();
|
||||
await Scripting.waitLeisure();
|
||||
|
||||
Main.overview.show();
|
||||
await Scripting.waitLeisure();
|
||||
|
||||
/* eslint-enable no-await-in-loop */
|
||||
}
|
||||
|
||||
let monitorsChanged = false;
|
||||
let overviewHidden = false;
|
||||
let overviewShown = false;
|
||||
|
||||
/**
|
||||
* script_monitorsChanged:
|
||||
*/
|
||||
function script_monitorsChanged() {
|
||||
monitorsChanged = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* script_overviewHideDone:
|
||||
*/
|
||||
function script_overviewHideDone() {
|
||||
overviewHidden = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* script_overviewShowDone:
|
||||
*/
|
||||
function script_overviewShowDone() {
|
||||
overviewShown = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* finish:
|
||||
*/
|
||||
function finish() {
|
||||
if (!monitorsChanged)
|
||||
throw new Error('Monitors never changed');
|
||||
|
||||
if (!overviewHidden)
|
||||
throw new Error('Failed to hide overview');
|
||||
|
||||
if (!overviewShown)
|
||||
throw new Error('Failed to show overview');
|
||||
}
|
@ -40,7 +40,13 @@ foreach test : tests
|
||||
endforeach
|
||||
|
||||
perf_tests = [
|
||||
'basic',
|
||||
{
|
||||
'name': 'basic',
|
||||
},
|
||||
{
|
||||
'name': 'headlessStart',
|
||||
'options': ['--hotplug'],
|
||||
},
|
||||
]
|
||||
|
||||
gvc_typelib_path = fs.parent(libgvc.get_variable('libgvc_gir')[1].full_path())
|
||||
@ -58,11 +64,15 @@ perf_testenv.append('GI_TYPELIB_PATH', gvc_typelib_path, separator: ':')
|
||||
perf_testenv.append('LD_LIBRARY_PATH', libgvc_path, separator: ':')
|
||||
|
||||
foreach perf_test : perf_tests
|
||||
test('perf-' + perf_test, dbus_runner,
|
||||
test_name = perf_test['name']
|
||||
options = perf_test.get('options', [])
|
||||
|
||||
test('perf-' + test_name, dbus_runner,
|
||||
args: [
|
||||
perf_tool,
|
||||
'--headless',
|
||||
'--perf=@0@'.format(perf_test),
|
||||
'--perf=@0@'.format(test_name),
|
||||
options,
|
||||
],
|
||||
is_parallel: false,
|
||||
env: perf_testenv,
|
||||
|
Loading…
Reference in New Issue
Block a user