diff options
Diffstat (limited to 'examples/summaries/cocoa/metrics.py')
-rw-r--r-- | examples/summaries/cocoa/metrics.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/examples/summaries/cocoa/metrics.py b/examples/summaries/cocoa/metrics.py new file mode 100644 index 000000000000..6b82ff3b3015 --- /dev/null +++ b/examples/summaries/cocoa/metrics.py @@ -0,0 +1,94 @@ +""" +Objective-C runtime wrapper for use by LLDB Python formatters + +part of The LLVM Compiler Infrastructure +This file is distributed under the University of Illinois Open Source +License. See LICENSE.TXT for details. +""" +import lldb +import time, datetime +import inspect + +class TimeMetrics: + @staticmethod + def generate(label=None): + return TimeMetrics(label) + + def __init__(self,lbl=None): + self.label = "" if lbl is None else lbl + pass + + def __enter__(self): + caller = inspect.stack()[1] + self.function = str(caller) + self.enter_time = time.clock() + + def __exit__(self, a,b,c): + self.exit_time = time.clock() + print("It took " + str(self.exit_time - self.enter_time) + " time units to run through " + self.function + self.label) + return False + +class Counter: + def __init__(self): + self.count = 0 + self.list = [] + def update(self,name): + self.count = self.count + 1 + # avoid getting the full dump of this ValueObject just to save its metrics + if isinstance(name,lldb.SBValue): + self.list.append(name.GetName()) + else: + self.list.append(str(name)) + def __str__(self): + return str(self.count) + " times, for items [" + str(self.list) + "]" + +class MetricsPrinter_Verbose: + def __init__(self,metrics): + self.metrics = metrics + def __str__(self): + string = "" + for key,value in self.metrics.metrics.items(): + string = string + "metric " + str(key) + ": " + str(value) + "\n" + return string + +class MetricsPrinter_Compact: + def __init__(self,metrics): + self.metrics = metrics + def __str__(self): + string = "" + for key,value in self.metrics.metrics.items(): + string = string + "metric " + str(key) + " was hit " + str(value.count) + " times\n" + return string + +class Metrics: + def __init__(self): + self.metrics = {} + + def add_metric(self,name): + self.metrics[name] = Counter() + + def metric_hit(self,metric,trigger): + self.metrics[metric].update(trigger) + + def __getitem__(self,key): + return self.metrics[key] + + def __getattr__(self,name): + if name == 'compact': + return MetricsPrinter_Compact(self) + if name == 'verbose': + return MetricsPrinter_Verbose(self) + raise AttributeError("%r object has no attribute %r" % + (type(self).__name__, name)) + + def __str__(self): + return str(self.verbose) + + def metric_success(self,metric): + total_count = 0 + metric_count = self[metric].count + for key,value in self.metrics.items(): + total_count = total_count + value.count + if total_count > 0: + return metric_count / float(total_count) + return 0 |