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

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

Issue 803283006: Add a fps-counter widget to some Sky demos (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: 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 | sky/examples/spinning-square.sky » ('j') | sky/examples/touch-demo.sky » ('J')
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
new file mode 100644
index 0000000000000000000000000000000000000000..21fa0a1ce650926588e845120f66547ef7baa1e4
--- /dev/null
+++ b/sky/examples/fps-counter.sky
@@ -0,0 +1,64 @@
+<!--
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+-->
+<import src="/sky/framework/sky-element/sky-element.sky" as="SkyElement" />
+
+<sky-element name="fps-counter" attributes="showHistory:boolean">
+<template>
+ <template if="{{ showHistory }}">
+ <template repeat="{{ history }}">
+ <div>{{ }} ms</div>
+ </template>
+ <div>max = {{ max }} ms</div>
+ </template>
+ <div>fps = {{ framerate }} Hz</div>
+</template>
+<script>
+var kMaxDeltaLength = 10;
+
+module.exports = class extends SkyElement {
+ created() {
+ this.framerate = "...";
+ this.max = 0;
+ this.lastTimeStamp = 0;
+ this.rafId = 0;
+ this.currentDeltaIndex = 0;
+ this.deltas = new Array(kMaxDeltaLength);
+ for (var i = 0; i < kMaxDeltaLength; ++i)
+ this.deltas[i] = 0;
+ this.history = new Array(kMaxDeltaLength);
+ for (var i = 0; i < kMaxDeltaLength; ++i)
+ this.history[i] = 0;
+ }
+ attached() {
+ this.scheduleTick();
+ }
+ detached() {
+ cancelAnimationFrame(this.rafId);
+ this.rafId = 0;
+ }
+ scheduleTick() {
+ this.rafId = requestAnimationFrame(this.tick.bind(this));
+ }
+ tick(timeStamp) {
+ this.scheduleTick();
+ var lastTimeStamp = this.lastTimeStamp;
+ 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);
+ }
+}.register();
+</script>
+</sky-element>
« no previous file with comments | « no previous file | sky/examples/spinning-square.sky » ('j') | sky/examples/touch-demo.sky » ('J')

Powered by Google App Engine
This is Rietveld 408576698