Skip to content

Commit 028b1ae

Browse files
committed
perf: spread sending subscription packets in DemoDataSource(resolves #94)
1 parent 6724a5f commit 028b1ae

File tree

2 files changed

+31
-16
lines changed

2 files changed

+31
-16
lines changed

lib/data/services/data_source/demo_data_source.dart

+30-15
Original file line numberDiff line numberDiff line change
@@ -254,23 +254,38 @@ class DemoDataSource extends DataSource
254254
mockManager.handlePeriodicPackage(package);
255255
}
256256

257-
timer ??= Timer.periodic(
258-
Duration(milliseconds: updatePeriodMillis()),
259-
(timer) async {
260-
for (final element in subscriptionParameters) {
261-
try {
262-
unawaited(mockManager.handleSubscriptionParameterId(element));
263-
} catch (e, s) {
264-
unawaited(
265-
Future<void>.error(
266-
'Got error trying to send a package:\n$e',
267-
s,
268-
),
257+
if (timer == null) {
258+
final updatePeriod = updatePeriodMillis();
259+
timer = Timer.periodic(
260+
Duration(milliseconds: updatePeriod),
261+
(timer) async {
262+
final innerTimerPeriod =
263+
(updatePeriod / subscriptionParameters.length).floor();
264+
for (var i = 0; i < subscriptionParameters.length; i++) {
265+
if (i >= subscriptionParameters.length) {
266+
break;
267+
}
268+
try {
269+
unawaited(
270+
mockManager.handleSubscriptionParameterId(
271+
subscriptionParameters.elementAt(i),
272+
),
273+
);
274+
} catch (e, s) {
275+
unawaited(
276+
Future<void>.error(
277+
'Got error trying to send a package:\n$e',
278+
s,
279+
),
280+
);
281+
}
282+
await Future<void>.delayed(
283+
Duration(milliseconds: innerTimerPeriod),
269284
);
270285
}
271-
}
272-
},
273-
);
286+
},
287+
);
288+
}
274289

275290
return const Result.value(null);
276291
},

lib/domain/data_source/models/developer_tools_parameters.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class DeveloperToolsParameters {
5757
const DeveloperToolsParameters.defaultValues()
5858
: enableRandomErrorGenerationForDemoDataSource = false,
5959
protocolVersion = DataSourceProtocolVersion.subscription,
60-
requestsPeriodInMillis = 800,
60+
requestsPeriodInMillis = 1500,
6161
enableHandshakeResponse = true,
6262
handshakeResponseTimeoutInMillis = 0,
6363
subscriptionParameterIds = const {};

0 commit comments

Comments
 (0)