diff options
author | Jannis Pohlmann <jannis.pohlmann@codethink.co.uk> | 2011-12-06 14:57:37 +0100 |
---|---|---|
committer | Jannis Pohlmann <jannis.pohlmann@codethink.co.uk> | 2011-12-06 14:57:37 +0100 |
commit | 468be5a16d9cc16351c04e3b2e2c8d7d0fe88a39 (patch) | |
tree | b09f34e096b13eaebf0307b259951342ddfe5fb0 /morphlib/stopwatch.py | |
parent | cd79d2ba24240c564655f4eed38f51060a256316 (diff) | |
download | morph-468be5a16d9cc16351c04e3b2e2c8d7d0fe88a39.tar.gz |
Add Stopwatch class, write build times to $cache_prefix.meta.
The Stopwatch class does not have unit tests yet and the build times
stored in the cache for system images may be a little too fine-grained
at the moment.
Diffstat (limited to 'morphlib/stopwatch.py')
-rw-r--r-- | morphlib/stopwatch.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/morphlib/stopwatch.py b/morphlib/stopwatch.py new file mode 100644 index 00000000..5fb4c42d --- /dev/null +++ b/morphlib/stopwatch.py @@ -0,0 +1,48 @@ +# Copyright (C) 2011 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +from datetime import datetime + + +class Stopwatch(object): + + def __init__(self): + self.ticks = {} + + def tick(self, reference_object, name): + if not self.ticks.has_key(reference_object): + self.ticks[reference_object] = {} + self.ticks[reference_object][name] = datetime.now() + + def enter(self, reference_object): + # TODO raise error if start already exists + self.tick(reference_object, 'start') + + def leave(self, reference_object): + # TODO raise error if stop already exists + self.tick(reference_object, 'stop') + + def time(self, reference_object, name): + return self.ticks[reference_object][name] + + def start(self, reference_object): + return self.ticks[reference_object]['start'] + + def stop(self, reference_object): + return self.ticks[reference_object]['stop'] + + def delta(self, reference_object): + return self.stop(reference_object) - self.start(reference_object) |