diff options
author | 2020-08-03 14:33:06 +0000 | |
---|---|---|
committer | 2020-08-03 14:33:06 +0000 | |
commit | 061da546b983eb767bad15e67af1174fb0bcf31c (patch) | |
tree | 83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/examples/summaries/cocoa/metrics.py | |
parent | Import LLVM 10.0.0 release including clang, lld and lldb. (diff) | |
download | wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip |
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom
tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/examples/summaries/cocoa/metrics.py')
-rw-r--r-- | gnu/llvm/lldb/examples/summaries/cocoa/metrics.py | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/examples/summaries/cocoa/metrics.py b/gnu/llvm/lldb/examples/summaries/cocoa/metrics.py new file mode 100644 index 00000000000..e7fe88e6903 --- /dev/null +++ b/gnu/llvm/lldb/examples/summaries/cocoa/metrics.py @@ -0,0 +1,112 @@ +""" +Objective-C runtime wrapper for use by LLDB Python formatters + +Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +See https://llvm.org/LICENSE.txt for license information. +SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +""" +import lldb +import time +import 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 |