1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochfunction fib(n) {
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return n < 2 ? 1 : fib(n - 1) + fib(n - 2);
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochfunction eternal_fib() {
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  var started = Date.now();
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  while(true) {
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    fib(20);
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make page responsive by making a break every 100 ms.
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (Date.now() - started >= 100) {
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      setTimeout(eternal_fib, 0);
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return;
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochfunction run_fib() {
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Let the page do initial rendering, then go.
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  setTimeout(eternal_fib, 200);
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
21