Skip to content

Commit 48adddf

Browse files
authored
Remove renderer on Dart:io platforms (#1723)
* Remove renderer on dart:io platforms * Tests + changelog * Update CHANGELOG.md * Fix tests * fix more tests
1 parent a97ee7c commit 48adddf

11 files changed

+85
-60
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Fixes
66

7+
- Flutter renderer information was removed on dart:io platforms since it didn't add the correct value ([#1723](https://github.com/getsentry/sentry-dart/pull/1723))
78
- Unsupported types with Expando ([#1690](https://github.com/getsentry/sentry-dart/pull/1690))
89

910
### Features

flutter/lib/src/event_processor/flutter_enricher_event_processor.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ class FlutterEnricherEventProcessor implements EventProcessor {
132132
// ignore: deprecated_member_use
133133
final hasRenderView = _widgetsBinding?.renderViewElement != null;
134134

135+
final renderer = _options.rendererWrapper.getRenderer()?.name;
136+
135137
return <String, String>{
136138
'has_render_view': hasRenderView.toString(),
137139
if (tempDebugBrightnessOverride != null)
@@ -149,7 +151,7 @@ class FlutterEnricherEventProcessor implements EventProcessor {
149151
// Also always fails in tests.
150152
// See https://github.com/flutter/flutter/issues/83919
151153
// 'window_is_visible': _window.viewConfiguration.visible,
152-
'renderer': _options.rendererWrapper.getRenderer().name,
154+
if (renderer != null) 'renderer': renderer,
153155
};
154156
}
155157

flutter/lib/src/event_processor/screenshot_event_processor.dart

+6-3
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@ class ScreenshotEventProcessor implements EventProcessor {
3232
}
3333

3434
final renderer = _options.rendererWrapper.getRenderer();
35-
if (renderer != FlutterRenderer.skia &&
35+
36+
if (_options.platformChecker.isWeb &&
3637
renderer != FlutterRenderer.canvasKit) {
37-
_options.logger(SentryLevel.debug,
38-
'Cannot take screenshot with ${_options.rendererWrapper.getRenderer().name} renderer.');
38+
_options.logger(
39+
SentryLevel.debug,
40+
'Cannot take screenshot with ${renderer?.name} renderer.',
41+
);
3942
return event;
4043
}
4144

flutter/lib/src/renderer/html_renderer.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'dart:js' as js;
22

33
import 'renderer.dart';
44

5-
FlutterRenderer getRenderer() {
5+
FlutterRenderer? getRenderer() {
66
return isCanvasKitRenderer ? FlutterRenderer.canvasKit : FlutterRenderer.html;
77
}
88

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
import 'renderer.dart';
22

3-
FlutterRenderer getRenderer() {
4-
return FlutterRenderer.skia;
5-
}
3+
FlutterRenderer? getRenderer() => null;

flutter/lib/src/renderer/renderer.dart

+9-1
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,22 @@ import 'unknown_renderer.dart'
66

77
@internal
88
class RendererWrapper {
9-
FlutterRenderer getRenderer() {
9+
FlutterRenderer? getRenderer() {
1010
return implementation.getRenderer();
1111
}
1212
}
1313

1414
enum FlutterRenderer {
15+
/// https://skia.org/
1516
skia,
17+
18+
/// https://docs.flutter.dev/perf/impeller
19+
impeller,
20+
21+
/// https://docs.flutter.dev/platform-integration/web/renderers
1622
canvasKit,
23+
24+
/// https://docs.flutter.dev/platform-integration/web/renderers
1725
html,
1826
unknown,
1927
}

flutter/lib/src/sentry_flutter.dart

+1-2
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,7 @@ mixin SentryFlutter {
167167
integrations.add(LoadImageListIntegration(channel));
168168
}
169169
final renderer = options.rendererWrapper.getRenderer();
170-
if (renderer == FlutterRenderer.skia ||
171-
renderer == FlutterRenderer.canvasKit) {
170+
if (!platformChecker.isWeb || renderer == FlutterRenderer.canvasKit) {
172171
integrations.add(ScreenshotIntegration());
173172
}
174173

flutter/test/event_processor/flutter_enricher_event_processor_test.dart

+32-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,38 @@ void main() {
2222
fixture = Fixture();
2323
});
2424

25-
testWidgets('flutter context', (WidgetTester tester) async {
25+
testWidgets('flutter context on dart:io', (WidgetTester tester) async {
26+
if (kIsWeb) {
27+
// widget tests don't support onPlatform config
28+
// https://pub.dev/packages/test#platform-specific-configuration
29+
return;
30+
}
31+
// These two values need to be changed inside the test,
32+
// otherwise the Flutter test framework complains that these
33+
// values are changed outside of a test.
34+
debugBrightnessOverride = Brightness.dark;
35+
debugDefaultTargetPlatformOverride = TargetPlatform.android;
36+
final enricher = fixture.getSut(
37+
binding: () => tester.binding,
38+
);
39+
40+
final event = await enricher.apply(SentryEvent());
41+
42+
debugBrightnessOverride = null;
43+
debugDefaultTargetPlatformOverride = null;
44+
45+
final flutterContext = event?.contexts['flutter_context'];
46+
expect(flutterContext, isNotNull);
47+
expect(flutterContext, isA<Map<String, String>>());
48+
}, skip: !kIsWeb);
49+
50+
testWidgets('flutter context on web', (WidgetTester tester) async {
51+
if (!kIsWeb) {
52+
// widget tests don't support onPlatform config
53+
// https://pub.dev/packages/test#platform-specific-configuration
54+
return;
55+
}
56+
2657
// These two values need to be changed inside the test,
2758
// otherwise the Flutter test framework complains that these
2859
// values are changed outside of a test.

flutter/test/event_processor/screenshot_event_processor_test.dart

+22-19
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@ void main() {
1919
});
2020

2121
Future<void> _addScreenshotAttachment(
22-
WidgetTester tester, FlutterRenderer renderer, bool added,
23-
{int? expectedMaxWidthOrHeight}) async {
22+
WidgetTester tester,
23+
FlutterRenderer? renderer, {
24+
required bool isWeb,
25+
required bool added,
26+
int? expectedMaxWidthOrHeight,
27+
}) async {
2428
// Run with real async https://stackoverflow.com/a/54021863
2529
await tester.runAsync(() async {
26-
final sut = fixture.getSut(renderer);
30+
final sut = fixture.getSut(renderer, isWeb);
2731

2832
await tester.pumpWidget(SentryScreenshotWidget(
2933
child: Text('Catching Pokémon is a snap!',
@@ -48,55 +52,54 @@ void main() {
4852
});
4953
}
5054

51-
testWidgets('adds screenshot attachment with skia renderer', (tester) async {
52-
await _addScreenshotAttachment(tester, FlutterRenderer.skia, true);
55+
testWidgets('adds screenshot attachment dart:io', (tester) async {
56+
await _addScreenshotAttachment(tester, null, added: true, isWeb: false);
5357
});
5458

5559
testWidgets('adds screenshot attachment with canvasKit renderer',
5660
(tester) async {
57-
await _addScreenshotAttachment(tester, FlutterRenderer.canvasKit, true);
61+
await _addScreenshotAttachment(tester, FlutterRenderer.canvasKit,
62+
added: true, isWeb: true);
5863
});
5964

6065
testWidgets('does not add screenshot attachment with html renderer',
6166
(tester) async {
62-
await _addScreenshotAttachment(tester, FlutterRenderer.html, false);
63-
});
64-
65-
testWidgets('does not add screenshot attachment with unknown renderer',
66-
(tester) async {
67-
await _addScreenshotAttachment(tester, FlutterRenderer.unknown, false);
67+
await _addScreenshotAttachment(tester, FlutterRenderer.html,
68+
added: false, isWeb: true);
6869
});
6970

7071
testWidgets('does add screenshot in correct resolution for low',
7172
(tester) async {
7273
final height = SentryScreenshotQuality.low.targetResolution()!;
7374
fixture.options.screenshotQuality = SentryScreenshotQuality.low;
74-
await _addScreenshotAttachment(tester, FlutterRenderer.skia, true,
75-
expectedMaxWidthOrHeight: height);
75+
await _addScreenshotAttachment(tester, null,
76+
added: true, isWeb: false, expectedMaxWidthOrHeight: height);
7677
});
7778

7879
testWidgets('does add screenshot in correct resolution for medium',
7980
(tester) async {
8081
final height = SentryScreenshotQuality.medium.targetResolution()!;
8182
fixture.options.screenshotQuality = SentryScreenshotQuality.medium;
82-
await _addScreenshotAttachment(tester, FlutterRenderer.skia, true,
83-
expectedMaxWidthOrHeight: height);
83+
await _addScreenshotAttachment(tester, null,
84+
added: true, isWeb: false, expectedMaxWidthOrHeight: height);
8485
});
8586

8687
testWidgets('does add screenshot in correct resolution for high',
8788
(tester) async {
8889
final widthOrHeight = SentryScreenshotQuality.high.targetResolution()!;
8990
fixture.options.screenshotQuality = SentryScreenshotQuality.high;
90-
await _addScreenshotAttachment(tester, FlutterRenderer.skia, true,
91-
expectedMaxWidthOrHeight: widthOrHeight);
91+
await _addScreenshotAttachment(tester, null,
92+
added: true, isWeb: false, expectedMaxWidthOrHeight: widthOrHeight);
9293
});
9394
}
9495

9596
class Fixture {
9697
SentryFlutterOptions options = SentryFlutterOptions(dsn: fakeDsn);
9798

98-
ScreenshotEventProcessor getSut(FlutterRenderer flutterRenderer) {
99+
ScreenshotEventProcessor getSut(
100+
FlutterRenderer? flutterRenderer, bool isWeb) {
99101
options.rendererWrapper = MockRendererWrapper(flutterRenderer);
102+
options.platformChecker = MockPlatformChecker(isWebValue: isWeb);
100103
return ScreenshotEventProcessor(options);
101104
}
102105
}

flutter/test/mocks.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -396,10 +396,10 @@ class MockNativeChannel implements SentryNativeBinding {
396396
class MockRendererWrapper implements RendererWrapper {
397397
MockRendererWrapper(this._renderer);
398398

399-
final FlutterRenderer _renderer;
399+
final FlutterRenderer? _renderer;
400400

401401
@override
402-
FlutterRenderer getRenderer() {
402+
FlutterRenderer? getRenderer() {
403403
return _renderer;
404404
}
405405
}

flutter/test/sentry_flutter_test.dart

+7-27
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ void main() {
495495
await Sentry.close();
496496
});
497497

498-
test('installed with skia renderer', () async {
498+
test('installed on io platforms', () async {
499499
List<Integration> integrations = [];
500500

501501
await SentryFlutter.init(
@@ -505,7 +505,8 @@ void main() {
505505
integrations = options.integrations;
506506
},
507507
appRunner: appRunner,
508-
platformChecker: getPlatformChecker(platform: MockPlatform.iOs()),
508+
platformChecker:
509+
getPlatformChecker(platform: MockPlatform.iOs(), isWeb: false),
509510
rendererWrapper: MockRendererWrapper(FlutterRenderer.skia),
510511
);
511512

@@ -528,7 +529,8 @@ void main() {
528529
integrations = options.integrations;
529530
},
530531
appRunner: appRunner,
531-
platformChecker: getPlatformChecker(platform: MockPlatform.iOs()),
532+
platformChecker:
533+
getPlatformChecker(platform: MockPlatform.iOs(), isWeb: true),
532534
rendererWrapper: MockRendererWrapper(FlutterRenderer.canvasKit),
533535
);
534536

@@ -551,7 +553,8 @@ void main() {
551553
integrations = options.integrations;
552554
},
553555
appRunner: appRunner,
554-
platformChecker: getPlatformChecker(platform: MockPlatform.iOs()),
556+
platformChecker:
557+
getPlatformChecker(platform: MockPlatform.iOs(), isWeb: true),
555558
rendererWrapper: MockRendererWrapper(FlutterRenderer.html),
556559
);
557560

@@ -563,29 +566,6 @@ void main() {
563566

564567
await Sentry.close();
565568
}, testOn: 'vm');
566-
567-
test('not installed with unknown renderer', () async {
568-
List<Integration> integrations = [];
569-
570-
await SentryFlutter.init(
571-
(options) async {
572-
options.dsn = fakeDsn;
573-
options.automatedTestMode = true;
574-
integrations = options.integrations;
575-
},
576-
appRunner: appRunner,
577-
platformChecker: getPlatformChecker(platform: MockPlatform.iOs()),
578-
rendererWrapper: MockRendererWrapper(FlutterRenderer.unknown),
579-
);
580-
581-
expect(
582-
integrations
583-
.map((e) => e.runtimeType)
584-
.contains(ScreenshotIntegration),
585-
false);
586-
587-
await Sentry.close();
588-
}, testOn: 'vm');
589569
});
590570

591571
group('initial values', () {

0 commit comments

Comments
 (0)