1
0
mirror of https://github.com/flutter/samples.git synced 2025-11-10 23:08:59 +00:00
Files
samples/web/slide_puzzle/lib/src/frame_nanny.dart
John Ryan 317d459a58 Update web/ samples to work with Flutter SDK (#134)
* add package:http dependency in dad_jokes

* add package:http dependency in filipino_cuisine

* don't build package:http demos until flutter/flutter#34858 is resolved

* update gallery

* update github_dataviz

* update particle_background

* don't build github_dataviz (uses package:http)

* update slide_puzzle

* update spinning_square

* update timeflow

* update vision_challenge

* update charts

* update dad_jokes

* update filipino cuisine

* ignore build output

* update timeflow and vision_challenge

* update slide_puzzle

* don't commit build/ directory

* move preview.png images to assets

* fix path url join

* update readme

* update web/readme.md
2019-09-10 09:49:58 -07:00

64 lines
1.4 KiB
Dart

import 'dart:collection';
class FrameNanny {
static const _bufferSize = 200;
static const _maxFrameDuration = Duration(milliseconds: 34);
final _buffer = ListQueue<Duration>(_bufferSize);
final _watch = Stopwatch();
Duration tick(Duration source) {
_watch.start();
_buffer.add(source);
while (_buffer.length > _bufferSize) {
_buffer.removeFirst();
}
if (source > _maxFrameDuration) {
source = _maxFrameDuration;
}
if (_watch.elapsed > const Duration(seconds: 2)) {
var goodCount = 0;
var sum = const Duration();
Duration best, worst;
for (var e in _buffer) {
sum += e;
if (e <= _maxFrameDuration) {
goodCount++;
}
if (best == null || e < best) {
best = e;
}
if (worst == null || e > worst) {
worst = e;
}
}
_watch.reset();
print([
'**Nanny**',
'${(100 * goodCount / _buffer.length).toStringAsFixed(1)}%',
'<= ${_maxFrameDuration.inMilliseconds}ms',
'best:',
best?.inMilliseconds,
'avg:',
_safeDivide(sum, _buffer.length),
'worst',
worst?.inMilliseconds
].join(' '));
}
return source;
}
}
Object _safeDivide(Duration source, int divisor) {
if (divisor == 0) {
return double.nan;
}
return (source ~/ divisor).inMilliseconds;
}