![electron-roller[bot]](/assets/img/avatar_default.png)
* chore: bump chromium in DEPS to 99.0.4819.0 * chore: update patches * chore: bump chromium in DEPS to 99.0.4824.0 * chore: update patches * chore: bump chromium in DEPS to 99.0.4827.0 * chore: update patches * 3352511: PiP: Add inkdrop and pointer cursor to PiP window buttons3352511
* 3309164: webhid: Show FIDO devices in the chooser if allowed3309164
* 3297868: hid: Add experimental HIDDevice.forget()3297868
* 3362491: [Extensions] Move i18n API to //extensions3362491
* MCC Refactor step0: Allow embedders to register associated_interface binders with RenderFrameHostImpl::associated_registry_.3281481
* 3352616: [Gtk] Remove libgtk from the link-line3352616
* 3249211: Clear-Site-Data support for partitioned cookies3249211
* [Extensions][COIL] Use [allow|block]list in //extensions/common3372668
* Begin ScopedUserPrefUpdate migration to modern base::Value3376154
* [Code Health] Refactor PrefService GetDict + GetList to use base::Value3343526
* 3354997: [CodeHealth] Remove deprecated SetDictionary method3354997
* 3287323: Add LacrosPrefStore for lacros settings3287323
* 3365916: [PA] Clean up remaining lazy commit code3365916
* [MPArch] Target the external protocol error at the responsible frame.3011560
* Pass origin to RegisterNonNetworkSubresourceURLLoaderFactories3350608
* Linux: Send OSCrypt raw encryption key to the Network Service3320484
* [PlzServiceWorker] Remove remaining references to PlzServiceWorker.3359441
* chore: fixup for lint * 3327621: Fix tablet mode detection for Win 11.3327621
* 3342428: ax_mac: move AXTextMarker conversion utils under ui umbrella3342428
* 3353974: Mac: Use base::Feature for overlay features3353974
* chore: bump chromium in DEPS to 99.0.4828.0 * chore: update patches * chore: bump chromium in DEPS to 99.0.4837.0 * chore: update patches * chore: update patches * 3379142: Drop FALLTHROUGH macro Ref:3379142
* 3381749: C++17: Allow use of std::map::try_emplace and std::map::insert_or_assign Ref:3381749
* chore: bump chromium in DEPS to 99.0.4839.0 * chore: update patches * chore: bump chromium in DEPS to 99.0.4840.0 * chore: bump chromium in DEPS to 99.0.4844.0 * 3395881: [api] Deprecate Local<v8::Context> v8::Object::CreationContext() Ref:3395881
* chore: update patches * chore: bump chromium in DEPS to 100.0.4845.0 * chore: update patches * chore: bump chromium in DEPS to 100.0.4847.0 * chore: update patches * chore: bump chromium in DEPS to 100.0.4849.0 * chore: update patches * chore: bump chromium in DEPS to 100.0.4851.0 * chore: bump chromium in DEPS to 100.0.4853.0 * update patches * chore: update patches * update patches * 3383599: Fonts Access: Remove prototype that uses a font picker.3383599
* 3404768: Remove ALLOW_UNUSED macros3404768
* 3374762: Remove ignore_result.h3374762
* 3399305: [unseasoned-pdf] Apply proper frame offsets for touch selections3399305
* 3402210: [Extensions] Don't trigger unload event for already unloaded extension3402210
* 3410912: Combine URLLoaderClient OnReceiveResponse and OnStartLoadingResponseBody.3410912
* 3370428: Make the AuthSchemes policy support dynamic refresh3370428
* 3407603: Finish ScopedUserPrefUpdate migration to modern base::Value3407603
* 3378352: ozone/x11: move code from //ui/p/x11 to //ui/ozone/p/x113378352
* 3370810: Delete chrome/service, AKA the Cloud Print service process.3370810
* chore: bump chromium in DEPS to 100.0.4855.0 * chore: update patches * fixup! 3370810: Delete chrome/service, AKA the Cloud Print service process. * revert 3348007 to fix windows build * 3318572: [Code health] Fix gn check errors in //extensions/browser:*3318572
* fix printing.patch * fix iwyu issue * 3408515: win: Make ShorcutOperation an enum class and modernize names3408515
* 3388333: [UIA] Remove dead code accessibility_misc_utils.h/cc3388333
* fix windows build? i hope * patch gn visibility of //ui/ozone/platform/x11 * missing include base/logging.h * use BUILDFLAG for USE_NSS_CERTS3379123
* defined(OS_*) ==> BUILDFLAG(IS_*) https://bugs.chromium.org/p/chromium/issues/detail?id=1234043 * fixup! 3404768: Remove ALLOW_UNUSED macros * another attempt to fix windows build * temporarily disable the custom scheme service worker test https://github.com/electron/electron/issues/32664 * fix loading mv3 extensions not sure what cl broke this unfort. * fixup! 3404768: Remove ALLOW_UNUSED macros * patch nan3395880
* fix node test * fix nullptr in FindPdfFrame * patch perfetto to fix build issue on win-ia32bc44c3c753
* fix build for linux-x64-testing-no-run-as-node * fix patch * skip <webview>.capturePage() test https://github.com/electron/electron/issues/32705 * test: fix failing tests of focus/blur events of WebContents (#32711) * inherit stdio from app module test child processes this prevents them from timing out due to full stdout buffers * test to see if we can get better logs on windows ci * try again for appveyor log things * skip contentTracing tests on ia32 * ci: disable gpu compositing * drop applied patch * fix merge fail * Revert "ci: disable gpu compositing" This reverts commit 0344129fcb19ea3e87e06c1110d751f22eba3fec. Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org> Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com> Co-authored-by: John Kleinschmidt <jkleinsc@github.com> Co-authored-by: VerteDinde <khammond@slack-corp.com> Co-authored-by: VerteDinde <vertedinde@electronjs.org> Co-authored-by: Jeremy Rose <jeremya@chromium.org> Co-authored-by: Jeremy Rose <nornagon@nornagon.net> Co-authored-by: Cheng Zhao <zcbenz@gmail.com> Co-authored-by: deepak1556 <hop2deep@gmail.com>
145 lines
5.4 KiB
TypeScript
145 lines
5.4 KiB
TypeScript
import { expect } from 'chai';
|
|
import { app, contentTracing, TraceConfig, TraceCategoriesAndOptions } from 'electron/main';
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
import { ifdescribe, delay } from './spec-helpers';
|
|
|
|
// FIXME: The tests are skipped on arm/arm64 and ia32.
|
|
ifdescribe(!(['arm', 'arm64', 'ia32'].includes(process.arch)))('contentTracing', () => {
|
|
const record = async (options: TraceConfig | TraceCategoriesAndOptions, outputFilePath: string | undefined, recordTimeInMilliseconds = 1e1) => {
|
|
await app.whenReady();
|
|
|
|
await contentTracing.startRecording(options);
|
|
await delay(recordTimeInMilliseconds);
|
|
const resultFilePath = await contentTracing.stopRecording(outputFilePath);
|
|
|
|
return resultFilePath;
|
|
};
|
|
|
|
const outputFilePath = path.join(app.getPath('temp'), 'trace.json');
|
|
beforeEach(() => {
|
|
if (fs.existsSync(outputFilePath)) {
|
|
fs.unlinkSync(outputFilePath);
|
|
}
|
|
});
|
|
|
|
describe('startRecording', function () {
|
|
this.timeout(5e3);
|
|
|
|
const getFileSizeInKiloBytes = (filePath: string) => {
|
|
const stats = fs.statSync(filePath);
|
|
const fileSizeInBytes = stats.size;
|
|
const fileSizeInKiloBytes = fileSizeInBytes / 1024;
|
|
return fileSizeInKiloBytes;
|
|
};
|
|
|
|
it('accepts an empty config', async () => {
|
|
const config = {};
|
|
await record(config, outputFilePath);
|
|
|
|
expect(fs.existsSync(outputFilePath)).to.be.true('output exists');
|
|
|
|
const fileSizeInKiloBytes = getFileSizeInKiloBytes(outputFilePath);
|
|
expect(fileSizeInKiloBytes).to.be.above(0,
|
|
`the trace output file is empty, check "${outputFilePath}"`);
|
|
});
|
|
|
|
it('accepts a trace config', async () => {
|
|
// (alexeykuzmin): All categories are excluded on purpose,
|
|
// so only metadata gets into the output file.
|
|
const config = {
|
|
excluded_categories: ['*']
|
|
};
|
|
await record(config, outputFilePath);
|
|
|
|
// If the `excluded_categories` param above is not respected, categories
|
|
// like `node,node.environment` will be included in the output.
|
|
const content = fs.readFileSync(outputFilePath).toString();
|
|
expect(content.includes('"cat":"node,node.environment"')).to.be.false();
|
|
});
|
|
|
|
it('accepts "categoryFilter" and "traceOptions" as a config', async () => {
|
|
// (alexeykuzmin): All categories are excluded on purpose,
|
|
// so only metadata gets into the output file.
|
|
const config = {
|
|
categoryFilter: '__ThisIsANonexistentCategory__',
|
|
traceOptions: ''
|
|
};
|
|
await record(config, outputFilePath);
|
|
|
|
expect(fs.existsSync(outputFilePath)).to.be.true('output exists');
|
|
|
|
// If the `categoryFilter` param above is not respected
|
|
// the file size will be above 50KB.
|
|
const fileSizeInKiloBytes = getFileSizeInKiloBytes(outputFilePath);
|
|
const expectedMaximumFileSize = 10; // Depends on a platform.
|
|
|
|
expect(fileSizeInKiloBytes).to.be.above(0,
|
|
`the trace output file is empty, check "${outputFilePath}"`);
|
|
expect(fileSizeInKiloBytes).to.be.below(expectedMaximumFileSize,
|
|
`the trace output file is suspiciously large (${fileSizeInKiloBytes}KB),
|
|
check "${outputFilePath}"`);
|
|
});
|
|
});
|
|
|
|
describe('stopRecording', function () {
|
|
this.timeout(5e3);
|
|
|
|
it('does not crash on empty string', async () => {
|
|
const options = {
|
|
categoryFilter: '*',
|
|
traceOptions: 'record-until-full,enable-sampling'
|
|
};
|
|
|
|
await contentTracing.startRecording(options);
|
|
const path = await contentTracing.stopRecording('');
|
|
expect(path).to.be.a('string').that.is.not.empty('result path');
|
|
expect(fs.statSync(path).isFile()).to.be.true('output exists');
|
|
});
|
|
|
|
it('calls its callback with a result file path', async () => {
|
|
const resultFilePath = await record(/* options */ {}, outputFilePath);
|
|
expect(resultFilePath).to.be.a('string').and.be.equal(outputFilePath);
|
|
});
|
|
|
|
it('creates a temporary file when an empty string is passed', async function () {
|
|
const resultFilePath = await record(/* options */ {}, /* outputFilePath */ '');
|
|
expect(resultFilePath).to.be.a('string').that.is.not.empty('result path');
|
|
});
|
|
|
|
it('creates a temporary file when no path is passed', async function () {
|
|
const resultFilePath = await record(/* options */ {}, /* outputFilePath */ undefined);
|
|
expect(resultFilePath).to.be.a('string').that.is.not.empty('result path');
|
|
});
|
|
|
|
it('rejects if no trace is happening', async () => {
|
|
await expect(contentTracing.stopRecording()).to.be.rejected();
|
|
});
|
|
});
|
|
|
|
describe('captured events', () => {
|
|
it('include V8 samples from the main process', async function () {
|
|
// This test is flaky on macOS CI.
|
|
this.retries(3);
|
|
|
|
await contentTracing.startRecording({
|
|
categoryFilter: 'disabled-by-default-v8.cpu_profiler',
|
|
traceOptions: 'record-until-full'
|
|
});
|
|
{
|
|
const start = +new Date();
|
|
let n = 0;
|
|
const f = () => {};
|
|
while (+new Date() - start < 200 || n < 500) {
|
|
await delay(0);
|
|
f();
|
|
n++;
|
|
}
|
|
}
|
|
const path = await contentTracing.stopRecording();
|
|
const data = fs.readFileSync(path, 'utf8');
|
|
const parsed = JSON.parse(data);
|
|
expect(parsed.traceEvents.some((x: any) => x.cat === 'disabled-by-default-v8.cpu_profiler' && x.name === 'ProfileChunk')).to.be.true();
|
|
});
|
|
});
|
|
});
|