| # Copyright (c) 2013 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. |
| |
| import logging |
| import time |
| |
| |
| class TimeProfile(object): |
| """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() |