Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(353)

Unified Diff: sky/examples/fps-counter.sky

Issue 802153004: Reuse the DOM in the <fps-counter>. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: const. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/examples/fps-counter.sky
diff --git a/sky/examples/fps-counter.sky b/sky/examples/fps-counter.sky
index e560d064f117ce6662959481e16a03c2ef1d1cbb..d9e982041d1e5fa9a8f1dfc96711bf0d403a049b 100644
--- a/sky/examples/fps-counter.sky
+++ b/sky/examples/fps-counter.sky
@@ -8,27 +8,34 @@
<sky-element name="fps-counter" attributes="showHistory:boolean">
<template>
<template if="{{ showHistory }}">
- <template repeat="{{ history }}">
- <div>{{ }} ms</div>
+ <template repeat="{{ deltas }}">
+ <div>{{ roundedValue }} ms</div>
</template>
<div>max = {{ max }} ms</div>
</template>
- <div>fps = {{ framerate }} Hz</div>
+ <div>fps = {{ frameRate }} Hz</div>
</template>
<script>
-var kMaxDeltaLength = 10;
+const kMaxDeltaLength = 10;
+
+class Delta {
+ constructor(value) {
+ this.value = value;
+ this.roundedValue = value.toFixed(2);
+ Object.preventExtensions(this);
+ }
+}
module.exports = class extends SkyElement {
created() {
- this.framerate = "...";
+ this.frameRate = "...";
this.max = 0;
+ this.sum = 0;
this.lastTimeStamp = 0;
this.rafId = 0;
- this.currentDeltaIndex = 0;
- this.deltas = new Array(kMaxDeltaLength);
- this.deltas.fill(0);
- this.history = new Array(kMaxDeltaLength);
- this.history.fill(0);
+ this.deltas = [];
+ for (var i = 0; i < kMaxDeltaLength; ++i)
+ this.deltas[i] = new Delta(0);
}
attached() {
this.scheduleTick();
@@ -38,7 +45,7 @@ module.exports = class extends SkyElement {
this.rafId = 0;
}
scheduleTick() {
- this.rafId = requestAnimationFrame(this.tick.bind(this));
+ this.rafId = requestAnimationFrame(this.tick.bind(this));
}
tick(timeStamp) {
this.scheduleTick();
@@ -46,16 +53,14 @@ module.exports = class extends SkyElement {
this.lastTimeStamp = timeStamp;
if (!lastTimeStamp)
return;
- var delta = timeStamp - lastTimeStamp;
- this.deltas[this.currentDeltaIndex++ % kMaxDeltaLength] = delta;
- for (var i = 0; i < kMaxDeltaLength; ++i) {
- var value = this.deltas[(i + this.currentDeltaIndex) % kMaxDeltaLength];
- this.history[i] = value.toFixed(2);
- }
- var sum = this.deltas.reduce(function(a, b) { return a + b }, 0);
- var avg = sum / kMaxDeltaLength;
- this.framerate = (1000 / avg).toFixed(2);
- this.max = Math.max(delta, this.max).toFixed(2);
+ var delta = new Delta(timeStamp - lastTimeStamp);
+ var removedDelta = this.deltas.shift();
+ this.deltas.push(delta);
+ this.sum -= removedDelta.value;
+ this.sum += delta.value;
+ var avg = this.sum / this.deltas.length;
+ this.frameRate = (1000 / avg).toFixed(2);
+ this.max = Math.max(delta.value, this.max).toFixed(2);
}
}.register();
</script>
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698