// Public: Measure how long a function takes to run.
//
// description - A {String} description that will be logged to the console when
//               the function completes.
// fn - A {Function} to measure the duration of.
//
// Returns the value returned by the given function.
window.measure = function(description, fn) {
  let start = Date.now();
  let value = fn();
  let result = Date.now() - start;
  console.log(description, result);
  return value;
};

// Public: Create a dev tools profile for a function.
//
// description - A {String} description that will be available in the Profiles
//               tab of the dev tools.
// fn - A {Function} to profile.
//
// Returns the value returned by the given function.
window.profile = function(description, fn) {
  window.measure(description, function() {
    console.profile(description);
    let value = fn();
    console.profileEnd(description);
    return value;
  });
};