Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
buenaflor committed Jun 18, 2024
1 parent a719da2 commit 0e4d02c
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 2 deletions.
5 changes: 5 additions & 0 deletions flutter/lib/src/span_frame_metrics_collector.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ class SpanFrameMetricsCollector implements PerformanceContinuousCollector {
value.isBefore(endTimestamp) && value.isAfter(span.startTimestamp))
.toList();

if (durations.isEmpty) {
options.logger(SentryLevel.info, 'No frame durations available in frame tracker.');
return {};
}

final slowFrames = durations.where((element) {
final frame = frames[element];
return frame != null && frame > expectedFrameDuration && frame < 700;
Expand Down
3 changes: 2 additions & 1 deletion flutter/test/mocks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ class TestMockSentryNative implements SentryNative {
var numberOfInitCalls = 0;
SentryFlutterOptions? initOptions;
var numberOfCloseCalls = 0;
int? refreshRate = 60;

@override
Future<void> addBreadcrumb(Breadcrumb breadcrumb) async {
Expand Down Expand Up @@ -313,7 +314,7 @@ class TestMockSentryNative implements SentryNative {

@override
Future<int?> displayRefreshRate() {
return Future.value(60);
return Future.value(refreshRate);
}
}

Expand Down
20 changes: 19 additions & 1 deletion flutter/test/span_frame_metrics_collector_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,23 @@ void main() {
expect(sut.isFrameTrackingRegistered, isFalse);
});

test('does not capture frame metrics if refresh rate is not available', () async {
final sut = fixture.sut;
fixture.options.tracesSampleRate = 1.0;
fixture.options.addPerformanceCollector(sut);
fixture.mockSentryNative.refreshRate = null;

final tracer = SentryTracer(
SentryTransactionContext('name', 'op', description: 'tracerDesc'),
fixture.hub);

await Future<void>.delayed(Duration(milliseconds: 800));

await tracer.finish();

expect(tracer.data, isEmpty);
});

test('startFrameCollector collects frame durations within expected range',
() async {
final sut = fixture.sut;
Expand Down Expand Up @@ -216,7 +233,8 @@ class Fixture {
final options = SentryFlutterOptions(dsn: fakeDsn);
late final hub = Hub(options);
final fakeFrameCallbackHandler = FakeFrameCallbackHandler();
final mockSentryNative = TestMockSentryNative();

SpanFrameMetricsCollector get sut => SpanFrameMetricsCollector(options,
frameCallbackHandler: fakeFrameCallbackHandler, native: TestMockSentryNative());
frameCallbackHandler: fakeFrameCallbackHandler, native: mockSentryNative);
}

0 comments on commit 0e4d02c

Please sign in to comment.