Index: chrome/test/data/perf/frame_rate/head.js |
=================================================================== |
--- chrome/test/data/perf/frame_rate/head.js (revision 0) |
+++ chrome/test/data/perf/frame_rate/head.js (revision 0) |
@@ -0,0 +1,100 @@ |
+// Copyright (c) 2011 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. |
+ |
+var __running = false; |
+var __old_title = ""; |
+var __scroll_by = 300; |
+var __raf; |
+ |
+var __t_last; |
+var __t_est; |
+var __t_est_total; |
+var __t_est_squared_total; |
+var __t_count; |
+ |
+function __init_stats() { |
+ __t_last = undefined; |
+ __t_est = undefined; |
+ __t_est_total = 0; |
+ __t_est_squared_total = 0; |
+ __t_count = 0; |
+} |
+__init_stats(); |
+ |
+function __calc_results() { |
+ var M = __t_est_total / __t_count; |
+ var X = __t_est_squared_total / __t_count; |
+ var V = X - M * M; |
+ var S = Math.sqrt(V); |
+ |
+ var R = new Object(); |
+ R.mean = 1000.0 / M; |
+ R.sigma = R.mean - 1000.0 / (M + S); |
+ return R; |
+} |
+ |
+function __scroll_down() { |
+ var y = window.scrollY; |
+ window.scrollBy(0, __scroll_by); |
+ if (window.scrollY == y) |
+ __stop(); |
+} |
+ |
+function __update_fps() { |
+ var t_now = new Date().getTime(); |
+ if (window.__t_last) { |
+ var t_delta = t_now - __t_last; |
+ if (window.__t_est) { |
+ __t_est = (0.1 * __t_est) + (0.9 * t_delta); // low-pass filter |
+ } else { |
+ __t_est = t_delta; |
+ } |
+ var fps = 1000.0 / __t_est; |
+ document.title = "FPS: " + (fps | 0); |
+ |
+ __t_est_total += t_delta; |
+ __t_est_squared_total += t_delta * t_delta; |
+ __t_count++; |
+ } |
+ __t_last = t_now; |
+} |
+ |
+function __sched_update() { |
+ if (!__raf) { |
+ if ("webkitRequestAnimationFrame" in window) |
+ __raf = webkitRequestAnimationFrame; |
+ else if ("mozRequestAnimationFrame" in window) |
+ __raf = mozRequestAnimationFrame; |
+ } |
+ __raf(function() { |
+ if (!__running) |
+ return; |
+ __update_fps(); |
+ __scroll_down(); |
+ __sched_update(); |
+ }); |
+} |
+ |
+function __start() { |
+ if (__running) |
+ return; |
+ __old_title = document.title; |
+ __running = true; |
+ __sched_update(); |
+} |
+ |
+function __stop() { |
+ __running = false; |
+ document.title = __old_title; |
+} |
+ |
+function __reset() { |
+ __stop(); |
+ document.body.scrollTop = 0; |
+ __init_stats(); |
+} |
+ |
+function __force_compositor() { |
+ document.body.style.webkitTransform = "translateZ(0)"; |
+} |