function cycle(options) {
    options || (options = {});

    var clocked,
        divisor,
        minTime,
        period,
        async = options.async,
        bench = options.benchmark,
        count = bench.count,
        deferred = options.deferred,
        times = bench.times;

    // continue, if not aborted between cycles
    if (bench.running) {
      // host `minTime` is set to `Benchmark.options.minTime` in `clock()`
      bench.cycles++;
      clocked = deferred ? deferred.elapsed : clock(bench);
      minTime = bench.minTime;

      if (bench.error) {
        bench.abort();
        bench.emit('error');
      }
    }
    // continue, if not errored
    if (bench.running) {
      // time taken to complete last test cycle
      times.cycle = clocked;
      // seconds per operation
      period = times.period = clocked / count;
      // ops per second
      bench.hz = 1 / period;
      // do we need to do another cycle?
      bench.running = clocked < minTime;
      // avoid working our way up to this next time
      bench.initCount = count;

      if (bench.running) {
        // tests may clock at `0` when `initCount` is a small number,
        // to avoid that we set its count to something a bit higher
        if (!clocked && (divisor = divisors[bench.cycles]) != null) {
          count = floor(4e6 / divisor);
        }
        // calculate how many more iterations it will take to achive the `minTime`
        if (count <= bench.count) {
          count += Math.ceil((minTime - clocked) / period);
        }
        bench.running = count != Infinity;
      }
    }
    // should we exit early?
    if (bench.emit('cycle') === false) {
      bench.abort();
    }
    // figure out what to do next
    if (bench.running) {
      bench.count = count;
      if (deferred) {
        (bench._host || bench).compiled.call(deferred, timer.ns, timer);
      } else {
        call({
          'async': async,
          'benchmark': bench,
          'fn': function() {
            cycle({ 'async': async, 'benchmark': bench });
          }
        });
      }
    } else {
      // fix TraceMonkey bug associated with clock fallbacks
      // http://bugzil.la/509069
      runScript('try{' + uid + '=1;delete ' + uid + '}catch(e){}');
      // done
      bench.emit('complete');
    }
  }
Cycles a benchmark until a run `count` can be established.
@private
@param {Object} options The options object.