# Copyright 2013 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import logging
import time


class TimeProfile:
  """Class for simple profiling of action, with logging of cost."""

  def __init__(self, description='operation'):
    self._starttime = None
    self._endtime = None
    self._description = description
    self.Start()

  def Start(self):
    self._starttime = time.time()
    self._endtime = None

  def GetDelta(self):
    """Returns the rounded delta.

    Also stops the timer if Stop() has not already been called.
    """
    if self._endtime is None:
      self.Stop(log=False)
    delta = self._endtime - self._starttime
    delta = round(delta, 2) if delta < 10 else round(delta, 1)
    return delta

  def LogResult(self):
    """Logs the result."""
    logging.info('%s seconds to perform %s', self.GetDelta(), self._description)

  def Stop(self, log=True):
    """Stop profiling.

    Args:
      log: Log the delta (defaults to true).
    """
    self._endtime = time.time()
    if log:
      self.LogResult()
