Skip to content

Commit 804afbe

Browse files
matanlureyazatech
authored andcommitted
Skip [tool] crash reporting on --local-engine (flutter#172326)
Closes flutter#70238.
1 parent e82ac11 commit 804afbe

File tree

2 files changed

+85
-19
lines changed

2 files changed

+85
-19
lines changed

packages/flutter_tools/lib/runner.dart

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ Future<int> run(
4646
args.removeWhere((String option) => option == '-vv' || option == '-v' || option == '--verbose');
4747
}
4848

49+
final bool usingLocalEngine = args.any((a) => a.startsWith('--local-engine'));
50+
4951
return runInContext<int>(() async {
5052
globals.terminal.applyFeatureFlags(featureFlags);
5153

@@ -121,6 +123,7 @@ Future<int> run(
121123
getVersion,
122124
shutdownHooks,
123125
featureFlags: featureFlags,
126+
usingLocalEngine: usingLocalEngine,
124127
);
125128
}
126129
},
@@ -139,6 +142,7 @@ Future<int> run(
139142
getVersion,
140143
shutdownHooks,
141144
featureFlags: featureFlags,
145+
usingLocalEngine: usingLocalEngine,
142146
);
143147
},
144148
)!;
@@ -153,6 +157,7 @@ Future<int> _handleToolError(
153157
bool reportCrashes,
154158
String Function() getFlutterVersion,
155159
ShutdownHooks shutdownHooks, {
160+
required bool usingLocalEngine,
156161
required FeatureFlags featureFlags,
157162
}) async {
158163
if (error is UsageException) {
@@ -205,25 +210,28 @@ Future<int> _handleToolError(
205210
}
206211

207212
globals.analytics.send(Event.exception(exception: error.runtimeType.toString()));
208-
await asyncGuard(
209-
() async {
210-
final crashReportSender = CrashReportSender(
211-
platform: globals.platform,
212-
logger: globals.logger,
213-
operatingSystemUtils: globals.os,
214-
analytics: globals.analytics,
215-
);
216-
await crashReportSender.sendReport(
217-
error: error,
218-
stackTrace: stackTrace!,
219-
getFlutterVersion: getFlutterVersion,
220-
command: args.join(' '),
221-
);
222-
},
223-
onError: (dynamic error) {
224-
globals.printError('Error sending crash report: $error');
225-
},
226-
);
213+
214+
if (!usingLocalEngine) {
215+
await asyncGuard(
216+
() async {
217+
final crashReportSender = CrashReportSender(
218+
platform: globals.platform,
219+
logger: globals.logger,
220+
operatingSystemUtils: globals.os,
221+
analytics: globals.analytics,
222+
);
223+
await crashReportSender.sendReport(
224+
error: error,
225+
stackTrace: stackTrace!,
226+
getFlutterVersion: getFlutterVersion,
227+
command: args.join(' '),
228+
);
229+
},
230+
onError: (dynamic error) {
231+
globals.printError('Error sending crash report: $error');
232+
},
233+
);
234+
}
227235

228236
globals.printError('Oops; flutter has exited unexpectedly: "$error".');
229237

packages/flutter_tools/test/general.shard/runner/runner_test.dart

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,64 @@ void main() {
120120
},
121121
);
122122

123+
testUsingContext(
124+
'error handling crash report (local engine)',
125+
() async {
126+
fileSystem
127+
.directory('engine')
128+
.childDirectory('src')
129+
.childDirectory('out')
130+
.createSync(recursive: true);
131+
132+
final completer = Completer<void>();
133+
unawaited(
134+
runZonedGuarded<Future<void>?>(
135+
() {
136+
unawaited(
137+
runner.run(
138+
<String>[
139+
'--local-engine=host_debug',
140+
'--local-engine-src-path=./engine/src',
141+
'crash',
142+
],
143+
() => <FlutterCommand>[CrashingFlutterCommand()],
144+
// This flutterVersion disables crash reporting.
145+
flutterVersion: '[user-branch]/',
146+
reportCrashes: true,
147+
shutdownHooks: ShutdownHooks(),
148+
),
149+
);
150+
return null;
151+
},
152+
(Object error, StackTrace stack) {
153+
expect(firstExitCode, isNotNull);
154+
expect(firstExitCode, isNot(0));
155+
expect(error.toString(), 'Exception: test exit');
156+
completer.complete();
157+
},
158+
),
159+
);
160+
await completer.future;
161+
162+
expect(
163+
fakeAnalytics.sentEvents,
164+
isNot(contains(Event.exception(exception: '_Exception'))),
165+
reason: 'Does not send a report when using --local-engine',
166+
);
167+
},
168+
overrides: <Type, Generator>{
169+
Platform: () => FakePlatform(
170+
environment: <String, String>{'FLUTTER_ANALYTICS_LOG_FILE': 'test', 'FLUTTER_ROOT': '/'},
171+
),
172+
FileSystem: () => fileSystem,
173+
ProcessManager: () => FakeProcessManager.any(),
174+
Artifacts: () => Artifacts.test(),
175+
HttpClientFactory: () =>
176+
() => FakeHttpClient.any(),
177+
Analytics: () => fakeAnalytics,
178+
},
179+
);
180+
123181
testUsingContext(
124182
'error handling crash report (bot)',
125183
() async {

0 commit comments

Comments
 (0)