Skip to content

Commit 50d4e6b

Browse files
authored
Make usb-power an optional package (#2249)
* Make usb-power an optional package * fix
1 parent e4f45d9 commit 50d4e6b

File tree

6 files changed

+174
-47
lines changed

6 files changed

+174
-47
lines changed

lib/android/index.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import { EOL as endOfLine } from 'node:os';
55
import { execa } from 'execa';
66
import { getLogger } from '@sitespeed.io/log';
77
import pkg from '@devicefarmer/adbkit';
8-
import usbPowerProfiler from 'usb-power-profiling/usb-power-profiling.js';
98
const { Adb } = pkg;
109
import get from 'lodash.get';
1110
import { pathToFolder } from '../support/pathToFolder.js';
11+
import { loadUsbPowerProfiler } from '../support/usbPower.js';
1212
const log = getLogger('browsertime.android');
1313
const mkdir = promisify(_mkdir);
1414
const delay = ms => new Promise(res => setTimeout(res, ms));
@@ -474,6 +474,11 @@ export class Android {
474474
}
475475

476476
async getUsbPowerUsageProfile(index, url, result, options, storageManager) {
477+
const usbPowerProfiler = await loadUsbPowerProfiler();
478+
if (!usbPowerProfiler) {
479+
log.info('USB profiler is not installed');
480+
return;
481+
}
477482
let profileData = await usbPowerProfiler.profileFromData();
478483
let destinationFilename = path.join(
479484
await pathToFolder(url, options),
@@ -485,6 +490,11 @@ export class Android {
485490
}
486491

487492
async function getUsbPowerUsage(startTime, endTime) {
493+
const usbPowerProfiler = await loadUsbPowerProfiler();
494+
if (!usbPowerProfiler) {
495+
log.info('USB profiler is not installed');
496+
return;
497+
}
488498
let baselineUsageData = await usbPowerProfiler.getPowerData(
489499
startTime - 2,
490500
endTime - 1

lib/chrome/webdriver/chromium.js

+13-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { unlink as _unlink, rm as _rm } from 'node:fs';
33
import path from 'node:path';
44
import { logging } from 'selenium-webdriver';
55
import { getLogger } from '@sitespeed.io/log';
6-
import usbPowerProfiler from 'usb-power-profiling/usb-power-profiling.js';
76
const log = getLogger('browsertime.chrome');
87
const { Type } = logging;
98
import { longTaskMetrics } from '../longTaskMetrics.js';
@@ -14,6 +13,7 @@ import { toArray } from '../../support/util.js';
1413
import { logging as _logging } from 'selenium-webdriver';
1514
import { parse } from '../traceCategoriesParser.js';
1615
import { pathToFolder } from '../../support/pathToFolder.js';
16+
import { loadUsbPowerProfiler } from '../../support/usbPower.js';
1717
import { ChromeDevtoolsProtocol } from '../chromeDevtoolsProtocol.js';
1818
import { NetworkManager } from '../networkManager.js';
1919
import { Android, isAndroidConfigured } from '../../android/index.js';
@@ -80,7 +80,10 @@ export class Chromium {
8080
await this.android.addDevtoolsFw();
8181

8282
if (this.options.androidUsbPower) {
83-
usbPowerProfiler.startSampling();
83+
const usbPowerProfiler = await loadUsbPowerProfiler();
84+
if (usbPowerProfiler) {
85+
usbPowerProfiler.startSampling();
86+
}
8487
}
8588
}
8689

@@ -171,7 +174,10 @@ export class Chromium {
171174
if (this.options.androidPower) {
172175
await this.android.resetPowerUsage();
173176
} else if (this.options.androidUsbPower) {
174-
await usbPowerProfiler.resetPowerData();
177+
const usbPowerProfiler = await loadUsbPowerProfiler();
178+
if (usbPowerProfiler) {
179+
await usbPowerProfiler.resetPowerData();
180+
}
175181
}
176182
}
177183

@@ -511,7 +517,10 @@ export class Chromium {
511517
if (this.options.androidPower) {
512518
await this.android.stopPowerTesting();
513519
} else if (this.options.androidUsbPower) {
514-
await usbPowerProfiler.stopSampling();
520+
const usbPowerProfiler = await loadUsbPowerProfiler();
521+
if (usbPowerProfiler) {
522+
await usbPowerProfiler.stopSampling();
523+
}
515524
}
516525
}
517526

lib/firefox/webdriver/firefox.js

+13-4
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import { promisify } from 'node:util';
33
import path from 'node:path';
44
import { getLogger } from '@sitespeed.io/log';
55
import get from 'lodash.get';
6-
import usbPowerProfiler from 'usb-power-profiling/usb-power-profiling.js';
76
import { adapters } from 'ff-test-bidi-har-export';
87
import { getEmptyHAR, mergeHars } from '../../support/har/index.js';
8+
import { loadUsbPowerProfiler } from '../../support/usbPower.js';
99
import { pathToFolder } from '../../support/pathToFolder.js';
1010
import { isAndroidConfigured, Android } from '../../android/index.js';
1111
import { adjustVisualProgressTimestamps } from '../../support/util.js';
@@ -75,7 +75,10 @@ export class Firefox {
7575
);
7676

7777
if (isAndroidConfigured(this.options) && this.options.androidUsbPower) {
78-
usbPowerProfiler.startSampling();
78+
const usbPowerProfiler = await loadUsbPowerProfiler();
79+
if (usbPowerProfiler) {
80+
usbPowerProfiler.startSampling();
81+
}
7982
}
8083
}
8184

@@ -144,7 +147,10 @@ export class Firefox {
144147
if (this.options.androidPower) {
145148
await this.android.resetPowerUsage();
146149
} else if (this.options.androidUsbPower) {
147-
await usbPowerProfiler.resetPowerData();
150+
const usbPowerProfiler = await loadUsbPowerProfiler();
151+
if (usbPowerProfiler) {
152+
await usbPowerProfiler.resetPowerData();
153+
}
148154
}
149155
}
150156

@@ -408,7 +414,10 @@ export class Firefox {
408414
if (this.options.androidPower) {
409415
await this.android.stopPowerTesting();
410416
} else if (this.options.androidUsbPower) {
411-
await usbPowerProfiler.stopSampling();
417+
const usbPowerProfiler = await loadUsbPowerProfiler();
418+
if (usbPowerProfiler) {
419+
await usbPowerProfiler.stopSampling();
420+
}
412421
}
413422
}
414423
}

lib/support/usbPower.js

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export async function loadUsbPowerProfiler() {
2+
try {
3+
// usb-power-profiling/usb-power-profiling.js exports a default, so we destructure it
4+
const { default: usbPowerProfiler } = await import(
5+
'usb-power-profiling/usb-power-profiling.js'
6+
);
7+
return usbPowerProfiler;
8+
} catch {
9+
return;
10+
}
11+
}

0 commit comments

Comments
 (0)