mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-04-12 03:10:03 +00:00

*** to conform to clang-format’s LLVM style. This kind of mass change has *** two obvious implications: Firstly, merging this particular commit into a downstream fork may be a huge effort. Alternatively, it may be worth merging all changes up to this commit, performing the same reformatting operation locally, and then discarding the merge for this particular commit. The commands used to accomplish this reformatting were as follows (with current working directory as the root of the repository): find . \( -iname "*.c" -or -iname "*.cpp" -or -iname "*.h" -or -iname "*.mm" \) -exec clang-format -i {} + find . -iname "*.py" -exec autopep8 --in-place --aggressive --aggressive {} + ; The version of clang-format used was 3.9.0, and autopep8 was 1.2.4. Secondly, “blame” style tools will generally point to this commit instead of a meaningful prior commit. There are alternatives available that will attempt to look through this change and find the appropriate prior commit. YMMV. llvm-svn: 280751
119 lines
3.4 KiB
Python
119 lines
3.4 KiB
Python
from __future__ import absolute_import
|
|
|
|
# System modules
|
|
import time
|
|
|
|
# Third-party modules
|
|
|
|
# LLDB modules
|
|
from .lldbtest import *
|
|
|
|
|
|
class Stopwatch(object):
|
|
"""Stopwatch provides a simple utility to start/stop your stopwatch multiple
|
|
times. Each start/stop is equal to a lap, with its elapsed time accumulated
|
|
while measurment is in progress.
|
|
|
|
When you're ready to start from scratch for another round of measurements,
|
|
be sure to call the reset() method.
|
|
|
|
For example,
|
|
|
|
sw = Stopwatch()
|
|
for i in range(1000):
|
|
with sw:
|
|
# Do some length operations...
|
|
...
|
|
# Get the average time.
|
|
avg_time = sw.avg()
|
|
|
|
# Reset the stopwatch as we are about to perform other kind of operations.
|
|
sw.reset()
|
|
...
|
|
"""
|
|
|
|
#############################################################
|
|
#
|
|
# Context manager interfaces to support the 'with' statement.
|
|
#
|
|
#############################################################
|
|
|
|
def __enter__(self):
|
|
"""
|
|
Context management protocol on entry to the body of the with statement.
|
|
"""
|
|
return self.start()
|
|
|
|
def __exit__(self, type, value, tb):
|
|
"""
|
|
Context management protocol on exit from the body of the with statement.
|
|
"""
|
|
self.stop()
|
|
|
|
def reset(self):
|
|
self.__laps__ = 0
|
|
self.__total_elapsed__ = 0.0
|
|
self.__start__ = None
|
|
self.__stop__ = None
|
|
self.__elapsed__ = 0.0
|
|
self.__nums__ = []
|
|
|
|
def __init__(self):
|
|
self.reset()
|
|
|
|
def start(self):
|
|
if self.__start__ is None:
|
|
self.__start__ = time.time()
|
|
else:
|
|
raise Exception(
|
|
"start() already called, did you forget to stop() first?")
|
|
# Return self to facilitate the context manager __enter__ protocol.
|
|
return self
|
|
|
|
def stop(self):
|
|
if self.__start__ is not None:
|
|
self.__stop__ = time.time()
|
|
elapsed = self.__stop__ - self.__start__
|
|
self.__total_elapsed__ += elapsed
|
|
self.__laps__ += 1
|
|
self.__nums__.append(elapsed)
|
|
self.__start__ = None # Reset __start__ to be None again.
|
|
else:
|
|
raise Exception("stop() called without first start()?")
|
|
|
|
def laps(self):
|
|
"""Gets the number of laps. One lap is equal to a start/stop action."""
|
|
return self.__laps__
|
|
|
|
def avg(self):
|
|
"""Equal to total elapsed time divided by the number of laps."""
|
|
return self.__total_elapsed__ / self.__laps__
|
|
|
|
# def sigma(self):
|
|
# """Return the standard deviation of the available samples."""
|
|
# if self.__laps__ <= 0:
|
|
# return None
|
|
# return numpy.std(self.__nums__)
|
|
|
|
def __str__(self):
|
|
return "Avg: %f (Laps: %d, Total Elapsed Time: %f, min=%f, max=%f)" % (self.avg(
|
|
), self.__laps__, self.__total_elapsed__, min(self.__nums__), max(self.__nums__))
|
|
|
|
|
|
class BenchBase(TestBase):
|
|
"""
|
|
Abstract base class for benchmark tests.
|
|
"""
|
|
|
|
def setUp(self):
|
|
"""Fixture for unittest test case setup."""
|
|
super(BenchBase, self).setUp()
|
|
# TestBase.setUp(self)
|
|
self.stopwatch = Stopwatch()
|
|
|
|
def tearDown(self):
|
|
"""Fixture for unittest test case teardown."""
|
|
super(BenchBase, self).tearDown()
|
|
# TestBase.tearDown(self)
|
|
del self.stopwatch
|