[tests] follow up comments on peridic_timer tests

Address comments from Lasse in
https://dart-review.googlesource.com/c/sdk/+/331210. Namely:

* Use 100ms for the interval, so avoid overlap with the safety-margin of 40ms
* Rewrite comment to only discuss the safety margin in terms of an early
  dispatch
* Only use the safety margin on web backends. Unlike timer_test, I am
  using the presence of `dart.library.js` instead. Going forward it's
  possible that dart2wasm hits this issue if it relies on browser's
  timers.

I also copied the changes to lib_2 since flakiness is seen there too.

Change-Id: I71b6365346cccc7667dbe3da809b1bfd192ff38a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/333057
Reviewed-by: Lasse Nielsen <lrn@google.com>
Commit-Queue: Sigmund Cherem <sigmund@google.com>
This commit is contained in:
Sigmund Cherem 2023-11-07 17:47:20 +00:00 committed by Commit Queue
parent 08e15d7495
commit 51fa4aaac8
6 changed files with 42 additions and 18 deletions

View file

@ -14,7 +14,12 @@ expectGTE(min, actual, msg) {
}
main() {
int interval = 50;
int interval = 100;
// Most browsers can trigger timers too early. Test data shows instances where
// timers fire even 15ms early. We add a safety margin to prevent flakiness
// when running this test on affected platforms.
int safetyMargin = const bool.fromEnvironment('dart.library.js') ? 40 : 0;
asyncStart();
var sw = new Stopwatch()..start();
int nextTick = 1;
@ -22,9 +27,7 @@ main() {
expectGTE(nextTick, t.tick, "tick {1} before expect next tick {0}.");
nextTick = t.tick + 1; // Always increment tick by at least one.
int time = sw.elapsedMilliseconds;
// Timers are not exact and can fire early or late (+- 15ms), we add a
// margin of error (40ms) to avoid flakiness.
int minTime = interval * t.tick - 40;
int minTime = interval * t.tick - safetyMargin;
expectGTE(minTime, time, "Actual time {1} before {0} at tick ${t.tick}");
if (t.tick > 20) {
t.cancel();

View file

@ -16,16 +16,19 @@ expectGTE(min, actual, msg) {
}
main() {
int interval = 50;
int interval = 100;
// Most browsers can trigger timers too early. Test data shows instances where
// timers fire even 15ms early. We add a safety margin to prevent flakiness
// when running this test on affected platforms.
int safetyMargin = const bool.fromEnvironment('dart.library.js') ? 40 : 0;
asyncStart();
var sw = new Stopwatch()..start();
int nextTick = 1;
new Timer.periodic(ms * interval, (t) {
expectGTE(nextTick, t.tick, "tick {1} before expect next tick {0}.");
int time = sw.elapsedMilliseconds;
// Timers are not exact and can fire early or late (+- 15ms), we add a
// margin of error (40ms) to avoid flakiness.
int minTime = interval * t.tick - 40;
int minTime = interval * t.tick - safetyMargin;
expectGTE(minTime, time, "Actual time {1} before {0} at tick ${t.tick}");
while (sw.elapsedMilliseconds < time + 3 * interval) {
// idle.

View file

@ -16,7 +16,12 @@ expectGTE(min, actual, msg) {
}
main() {
int interval = 50;
int interval = 100;
// Most browsers can trigger timers too early. Test data shows instances where
// timers fire even 15ms early. We add a safety margin to prevent flakiness
// when running this test on affected platforms.
int safetyMargin = const bool.fromEnvironment('dart.library.js') ? 40 : 0;
asyncStart();
var sw = new Stopwatch()..start();
int nextTick = 1;
@ -25,9 +30,7 @@ main() {
expectGTE(nextTick, t.tick, "tick {1} before expect next tick {0}.");
nextTick += 1;
int time = sw.elapsedMilliseconds;
// Timers are not exact and can fire early or late (+- 15ms), we add a
// margin of error (40ms) to avoid flakiness.
int minTime = interval * t.tick - 40;
int minTime = interval * t.tick - safetyMargin;
expectGTE(minTime, time, "Actual time {1} before {0} at tick ${t.tick}");
if (t.tick > 20) {
running = false;

View file

@ -16,7 +16,12 @@ expectGTE(min, actual, msg) {
}
main() {
int interval = 20;
int interval = 100;
// Most browsers can trigger timers too early. Test data shows instances where
// timers fire even 15ms early. We add a safety margin to prevent flakiness
// when running this test on affected platforms.
int safetyMargin = const bool.fromEnvironment('dart.library.js') ? 40 : 0;
asyncStart();
var sw = new Stopwatch()..start();
int nextTick = 1;
@ -24,7 +29,7 @@ main() {
expectGTE(nextTick, t.tick, "tick {1} before expect next tick {0}.");
nextTick = t.tick + 1; // Always increment tick by at least one.
int time = sw.elapsedMilliseconds;
int minTime = interval * t.tick;
int minTime = interval * t.tick - safetyMargin;
expectGTE(minTime, time, "Actual time {1} before {0} at tick ${t.tick}");
if (t.tick > 20) {
t.cancel();

View file

@ -18,14 +18,19 @@ expectGTE(min, actual, msg) {
}
main() {
int interval = 20;
int interval = 100;
// Most browsers can trigger timers too early. Test data shows instances where
// timers fire even 15ms early. We add a safety margin to prevent flakiness
// when running this test on affected platforms.
int safetyMargin = const bool.fromEnvironment('dart.library.js') ? 40 : 0;
asyncStart();
var sw = new Stopwatch()..start();
int nextTick = 1;
new Timer.periodic(ms * interval, (t) {
expectGTE(nextTick, t.tick, "tick {1} before expect next tick {0}.");
int time = sw.elapsedMilliseconds;
int minTime = interval * t.tick;
int minTime = interval * t.tick - safetyMargin;
expectGTE(minTime, time, "Actual time {1} before {0} at tick ${t.tick}");
while (sw.elapsedMilliseconds < time + 3 * interval) {
// idle.

View file

@ -18,7 +18,12 @@ expectGTE(min, actual, msg) {
}
main() {
int interval = 20;
int interval = 100;
// Most browsers can trigger timers too early. Test data shows instances where
// timers fire even 15ms early. We add a safety margin to prevent flakiness
// when running this test on affected platforms.
int safetyMargin = const bool.fromEnvironment('dart.library.js') ? 40 : 0;
asyncStart();
var sw = new Stopwatch()..start();
int nextTick = 1;
@ -27,7 +32,7 @@ main() {
expectGTE(nextTick, t.tick, "tick {1} before expect next tick {0}.");
nextTick += 1;
int time = sw.elapsedMilliseconds;
int minTime = interval * t.tick;
int minTime = interval * t.tick - safetyMargin;
expectGTE(minTime, time, "Actual time {1} before {0} at tick ${t.tick}");
if (t.tick > 20) {
running = false;