Skip to content

Commit

Permalink
finer grained logging of Chromium launch sequence (#135078)
Browse files Browse the repository at this point in the history
Log the details of how Chromium is about to be launched prior to running
the Chromium command, as well as the path to the Chromium executable.

This should improve our understanding of what's happening here:
#132654 (comment)
  • Loading branch information
yjbanov committed Sep 20, 2023
1 parent b433b17 commit d6d2e89
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 28 deletions.
17 changes: 13 additions & 4 deletions packages/flutter_tools/lib/src/web/chrome.dart
Original file line number Diff line number Diff line change
Expand Up @@ -171,14 +171,23 @@ class ChromiumLauncher {
throwToolExit('Only one instance of chrome can be started.');
}

if (_logger.isVerbose) {
_logger.printTrace('Launching Chromium (url = $url, headless = $headless, skipCheck = $skipCheck, debugPort = $debugPort)');
}

final String chromeExecutable = _browserFinder(_platform, _fileSystem);

if (_logger.isVerbose && !_platform.isWindows) {
// The "--version" argument is not supported on Windows.
final ProcessResult versionResult = await _processManager.run(<String>[chromeExecutable, '--version']);
_logger.printTrace('Using ${versionResult.stdout}');
if (_logger.isVerbose) {
_logger.printTrace('Will use Chromium executable at $chromeExecutable');

if (!_platform.isWindows) {
// The "--version" argument is not supported on Windows.
final ProcessResult versionResult = await _processManager.run(<String>[chromeExecutable, '--version']);
_logger.printTrace('Using ${versionResult.stdout}');
}
}


final Directory userDataDir = _fileSystem.systemTempDirectory
.createTempSync('flutter_tools_chrome_device.');

Expand Down
88 changes: 64 additions & 24 deletions packages/flutter_tools/test/web.shard/chrome_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ void main() {
late Platform platform;
late FakeProcessManager processManager;
late OperatingSystemUtils operatingSystemUtils;
late BufferLogger testLogger;

setUp(() {
exceptionHandler = FileExceptionHandler();
Expand All @@ -59,29 +60,86 @@ void main() {
processManager: processManager,
operatingSystemUtils: operatingSystemUtils,
browserFinder: findChromeExecutable,
logger: BufferLogger.test(),
logger: testLogger = BufferLogger.test(),
);
});

Future<Chromium> testLaunchChrome(String userDataDir, FakeProcessManager processManager, ChromiumLauncher chromeLauncher) {
if (testLogger.isVerbose) {
processManager.addCommand(const FakeCommand(
command: <String>[
'example_chrome',
'--version',
],
stdout: 'Chromium 115',
));
}

processManager.addCommand(FakeCommand(
command: <String>[
'example_chrome',
'--user-data-dir=$userDataDir',
'--remote-debugging-port=12345',
...kChromeArgs,
'example_url',
],
stderr: kDevtoolsStderr,
));

return chromeLauncher.launch(
'example_url',
skipCheck: true,
);
}

testWithoutContext('can launch chrome and connect to the devtools', () async {
await expectReturnsNormallyLater(
_testLaunchChrome(
testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand0',
processManager,
chromeLauncher,
)
);
});

testWithoutContext('can launch chrome in verbose mode', () async {
chromeLauncher = ChromiumLauncher(
fileSystem: fileSystem,
platform: platform,
processManager: processManager,
operatingSystemUtils: operatingSystemUtils,
browserFinder: findChromeExecutable,
logger: testLogger = BufferLogger.test(verbose: true),
);

await expectReturnsNormallyLater(
testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand0',
processManager,
chromeLauncher,
)
);

expect(
testLogger.traceText.trim(),
'Launching Chromium (url = example_url, headless = false, skipCheck = true, debugPort = null)\n'
'Will use Chromium executable at example_chrome\n'
'Using Chromium 115\n'
'[CHROME]: \n'
'[CHROME]: \n'
'[CHROME]: DevTools listening',
);
});

testWithoutContext('cannot have two concurrent instances of chrome', () async {
await _testLaunchChrome(
await testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand0',
processManager,
chromeLauncher,
);

await expectToolExitLater(
_testLaunchChrome(
testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand1',
processManager,
chromeLauncher,
Expand All @@ -91,15 +149,15 @@ void main() {
});

testWithoutContext('can launch new chrome after stopping a previous chrome', () async {
final Chromium chrome = await _testLaunchChrome(
final Chromium chrome = await testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand0',
processManager,
chromeLauncher,
);
await chrome.close();

await expectReturnsNormallyLater(
_testLaunchChrome(
testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand1',
processManager,
chromeLauncher,
Expand Down Expand Up @@ -630,24 +688,6 @@ void main() {
});
}

Future<Chromium> _testLaunchChrome(String userDataDir, FakeProcessManager processManager, ChromiumLauncher chromeLauncher) {
processManager.addCommand(FakeCommand(
command: <String>[
'example_chrome',
'--user-data-dir=$userDataDir',
'--remote-debugging-port=12345',
...kChromeArgs,
'example_url',
],
stderr: kDevtoolsStderr,
));

return chromeLauncher.launch(
'example_url',
skipCheck: true,
);
}

/// Fake chrome connection that fails to get tabs a few times.
class FakeChromeConnection extends Fake implements ChromeConnection {

Expand Down

0 comments on commit d6d2e89

Please sign in to comment.