mirror of
https://github.com/reactivecircus/android-emulator-runner.git
synced 2026-09-05 19:39:32 +00:00
Auto detect hardware acceleration on Linux (#254)
This commit is contained in:
@@ -211,10 +211,10 @@ describe('disable-linux-hw-accel validator tests', () => {
|
|||||||
const func = () => {
|
const func = () => {
|
||||||
validator.checkDisableLinuxHardwareAcceleration('yes');
|
validator.checkDisableLinuxHardwareAcceleration('yes');
|
||||||
};
|
};
|
||||||
expect(func).toThrowError(`Input for input.disable-linux-hw-accel should be either 'true' or 'false'.`);
|
expect(func).toThrowError(`Input for input.disable-linux-hw-accel should be either 'true' or 'false' or 'auto'.`);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Validates successfully if disable-linux-hw-accel is either true or false', () => {
|
it('Validates successfully if disable-linux-hw-accel is either true or false or auto', () => {
|
||||||
const func1 = () => {
|
const func1 = () => {
|
||||||
validator.checkDisableLinuxHardwareAcceleration('true');
|
validator.checkDisableLinuxHardwareAcceleration('true');
|
||||||
};
|
};
|
||||||
@@ -224,6 +224,11 @@ describe('disable-linux-hw-accel validator tests', () => {
|
|||||||
validator.checkDisableLinuxHardwareAcceleration('false');
|
validator.checkDisableLinuxHardwareAcceleration('false');
|
||||||
};
|
};
|
||||||
expect(func2).not.toThrow();
|
expect(func2).not.toThrow();
|
||||||
|
|
||||||
|
const func3 = () => {
|
||||||
|
validator.checkDisableLinuxHardwareAcceleration('auto');
|
||||||
|
};
|
||||||
|
expect(func3).not.toThrow();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -43,8 +43,8 @@ inputs:
|
|||||||
description: 'whether to disable spellchecker - `true` or `false`'
|
description: 'whether to disable spellchecker - `true` or `false`'
|
||||||
default: 'false'
|
default: 'false'
|
||||||
disable-linux-hw-accel:
|
disable-linux-hw-accel:
|
||||||
description: 'whether to disable hardware acceleration on Linux machines - `true` or `false`'
|
description: 'whether to disable hardware acceleration on Linux machines - `true` or `false` or `auto`'
|
||||||
default: 'true'
|
default: 'auto'
|
||||||
enable-hw-keyboard:
|
enable-hw-keyboard:
|
||||||
description: 'whether to enable hardware keyboard - `true` or `false`.'
|
description: 'whether to enable hardware keyboard - `true` or `false`.'
|
||||||
default: 'false'
|
default: 'false'
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ function checkDisableSpellchecker(disableSpellchecker) {
|
|||||||
}
|
}
|
||||||
exports.checkDisableSpellchecker = checkDisableSpellchecker;
|
exports.checkDisableSpellchecker = checkDisableSpellchecker;
|
||||||
function checkDisableLinuxHardwareAcceleration(disableLinuxHardwareAcceleration) {
|
function checkDisableLinuxHardwareAcceleration(disableLinuxHardwareAcceleration) {
|
||||||
if (!isValidBoolean(disableLinuxHardwareAcceleration)) {
|
if (!(isValidBoolean(disableLinuxHardwareAcceleration) || disableLinuxHardwareAcceleration === 'auto')) {
|
||||||
throw new Error(`Input for input.disable-linux-hw-accel should be either 'true' or 'false'.`);
|
throw new Error(`Input for input.disable-linux-hw-accel should be either 'true' or 'false' or 'auto'.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.checkDisableLinuxHardwareAcceleration = checkDisableLinuxHardwareAcceleration;
|
exports.checkDisableLinuxHardwareAcceleration = checkDisableLinuxHardwareAcceleration;
|
||||||
|
|||||||
+12
-1
@@ -35,15 +35,23 @@ const emulator_manager_1 = require("./emulator-manager");
|
|||||||
const exec = __importStar(require("@actions/exec"));
|
const exec = __importStar(require("@actions/exec"));
|
||||||
const script_parser_1 = require("./script-parser");
|
const script_parser_1 = require("./script-parser");
|
||||||
const channel_id_mapper_1 = require("./channel-id-mapper");
|
const channel_id_mapper_1 = require("./channel-id-mapper");
|
||||||
|
const fs_1 = require("fs");
|
||||||
function run() {
|
function run() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
console.log(`::group::Configure emulator`);
|
console.log(`::group::Configure emulator`);
|
||||||
|
let linuxSupportKVM = false;
|
||||||
// only support running on macOS or Linux
|
// only support running on macOS or Linux
|
||||||
if (process.platform !== 'darwin') {
|
if (process.platform !== 'darwin') {
|
||||||
if (process.platform === 'linux') {
|
if (process.platform === 'linux') {
|
||||||
|
try {
|
||||||
|
fs_1.accessSync('/dev/kvm', fs_1.constants.R_OK | fs_1.constants.W_OK);
|
||||||
|
linuxSupportKVM = true;
|
||||||
|
}
|
||||||
|
catch (_a) {
|
||||||
console.warn(`You're running a Linux VM where hardware acceleration is not available. Please consider using a macOS VM instead to take advantage of native hardware acceleration support provided by HAXM.`);
|
console.warn(`You're running a Linux VM where hardware acceleration is not available. Please consider using a macOS VM instead to take advantage of native hardware acceleration support provided by HAXM.`);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
throw new Error('Unsupported virtual machine: please use either macos or ubuntu VM.');
|
throw new Error('Unsupported virtual machine: please use either macos or ubuntu VM.');
|
||||||
}
|
}
|
||||||
@@ -102,8 +110,11 @@ function run() {
|
|||||||
const disableSpellchecker = disableSpellcheckerInput === 'true';
|
const disableSpellchecker = disableSpellcheckerInput === 'true';
|
||||||
console.log(`disable spellchecker: ${disableSpellchecker}`);
|
console.log(`disable spellchecker: ${disableSpellchecker}`);
|
||||||
// disable linux hardware acceleration
|
// disable linux hardware acceleration
|
||||||
const disableLinuxHardwareAccelerationInput = core.getInput('disable-linux-hw-accel');
|
let disableLinuxHardwareAccelerationInput = core.getInput('disable-linux-hw-accel');
|
||||||
input_validator_1.checkDisableLinuxHardwareAcceleration(disableLinuxHardwareAccelerationInput);
|
input_validator_1.checkDisableLinuxHardwareAcceleration(disableLinuxHardwareAccelerationInput);
|
||||||
|
if (disableLinuxHardwareAccelerationInput === 'auto' && process.platform === 'linux') {
|
||||||
|
disableLinuxHardwareAccelerationInput = linuxSupportKVM ? 'false' : 'true';
|
||||||
|
}
|
||||||
const disableLinuxHardwareAcceleration = disableLinuxHardwareAccelerationInput === 'true';
|
const disableLinuxHardwareAcceleration = disableLinuxHardwareAccelerationInput === 'true';
|
||||||
console.log(`disable Linux hardware acceleration: ${disableLinuxHardwareAcceleration}`);
|
console.log(`disable Linux hardware acceleration: ${disableLinuxHardwareAcceleration}`);
|
||||||
// enable hardware keyboard
|
// enable hardware keyboard
|
||||||
|
|||||||
@@ -49,8 +49,8 @@ export function checkDisableSpellchecker(disableSpellchecker: string): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function checkDisableLinuxHardwareAcceleration(disableLinuxHardwareAcceleration: string): void {
|
export function checkDisableLinuxHardwareAcceleration(disableLinuxHardwareAcceleration: string): void {
|
||||||
if (!isValidBoolean(disableLinuxHardwareAcceleration)) {
|
if (!(isValidBoolean(disableLinuxHardwareAcceleration) || disableLinuxHardwareAcceleration === 'auto')) {
|
||||||
throw new Error(`Input for input.disable-linux-hw-accel should be either 'true' or 'false'.`);
|
throw new Error(`Input for input.disable-linux-hw-accel should be either 'true' or 'false' or 'auto'.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-1
@@ -17,16 +17,23 @@ import { launchEmulator, killEmulator } from './emulator-manager';
|
|||||||
import * as exec from '@actions/exec';
|
import * as exec from '@actions/exec';
|
||||||
import { parseScript } from './script-parser';
|
import { parseScript } from './script-parser';
|
||||||
import { getChannelId } from './channel-id-mapper';
|
import { getChannelId } from './channel-id-mapper';
|
||||||
|
import { accessSync, constants } from 'fs';
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
try {
|
try {
|
||||||
console.log(`::group::Configure emulator`);
|
console.log(`::group::Configure emulator`);
|
||||||
|
let linuxSupportKVM = false;
|
||||||
// only support running on macOS or Linux
|
// only support running on macOS or Linux
|
||||||
if (process.platform !== 'darwin') {
|
if (process.platform !== 'darwin') {
|
||||||
if (process.platform === 'linux') {
|
if (process.platform === 'linux') {
|
||||||
|
try {
|
||||||
|
accessSync('/dev/kvm', constants.R_OK | constants.W_OK);
|
||||||
|
linuxSupportKVM = true;
|
||||||
|
} catch {
|
||||||
console.warn(
|
console.warn(
|
||||||
`You're running a Linux VM where hardware acceleration is not available. Please consider using a macOS VM instead to take advantage of native hardware acceleration support provided by HAXM.`
|
`You're running a Linux VM where hardware acceleration is not available. Please consider using a macOS VM instead to take advantage of native hardware acceleration support provided by HAXM.`
|
||||||
);
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Error('Unsupported virtual machine: please use either macos or ubuntu VM.');
|
throw new Error('Unsupported virtual machine: please use either macos or ubuntu VM.');
|
||||||
}
|
}
|
||||||
@@ -100,8 +107,11 @@ async function run() {
|
|||||||
console.log(`disable spellchecker: ${disableSpellchecker}`);
|
console.log(`disable spellchecker: ${disableSpellchecker}`);
|
||||||
|
|
||||||
// disable linux hardware acceleration
|
// disable linux hardware acceleration
|
||||||
const disableLinuxHardwareAccelerationInput = core.getInput('disable-linux-hw-accel');
|
let disableLinuxHardwareAccelerationInput = core.getInput('disable-linux-hw-accel');
|
||||||
checkDisableLinuxHardwareAcceleration(disableLinuxHardwareAccelerationInput);
|
checkDisableLinuxHardwareAcceleration(disableLinuxHardwareAccelerationInput);
|
||||||
|
if (disableLinuxHardwareAccelerationInput === 'auto' && process.platform === 'linux') {
|
||||||
|
disableLinuxHardwareAccelerationInput = linuxSupportKVM ? 'false' : 'true';
|
||||||
|
}
|
||||||
const disableLinuxHardwareAcceleration = disableLinuxHardwareAccelerationInput === 'true';
|
const disableLinuxHardwareAcceleration = disableLinuxHardwareAccelerationInput === 'true';
|
||||||
console.log(`disable Linux hardware acceleration: ${disableLinuxHardwareAcceleration}`);
|
console.log(`disable Linux hardware acceleration: ${disableLinuxHardwareAcceleration}`);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user