mirror of
https://github.com/flutter/samples.git
synced 2025-11-11 15:28:44 +00:00
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
This commit is contained in:
63
web/slide_puzzle/lib/src/frame_nanny.dart
Normal file
63
web/slide_puzzle/lib/src/frame_nanny.dart
Normal file
@@ -0,0 +1,63 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user