lldb.formatters.metrics

Package lldb :: Package formatters :: Module metrics |
[hide private]
[frames] | no frames]

# Source Code for Module lldb.formatters.metrics

      1  """
      2  Objective-C runtime wrapper for use by LLDB Python formatters
      3
      4  part of The LLVM Compiler Infrastructure
      5  This file is distributed under the University of Illinois Open Source
      6  License. See LICENSE.TXT for details.
      7  """
      8  import lldb
      9  import time
     10  import datetime
     11  import inspect
     12
     13
     14 -class TimeMetrics:
     15
     16      @staticmethod
     17 -    def generate(label=None):
     18          return TimeMetrics(label)
     19
     20 -    def __init__(self, lbl=None):
     21          self.label = "" if lbl is None else lbl
     22          pass
     23
     24 -    def __enter__(self):
     25          caller = inspect.stack()[1]
     26          self.function = str(caller)
     27          self.enter_time = time.clock()
     28
     29 -    def __exit__(self, a, b, c):
     30          self.exit_time = time.clock()
     31          print("It took " + str(self.exit_time - self.enter_time) +
     32                " time units to run through " + self.function + self.label)
     33          return False
     34
     35
     36 -class Counter:
     37
     38 -    def __init__(self):
     39          self.count = 0
     40          self.list = []
     41
     42 -    def update(self, name):
     43          self.count = self.count + 1
     44          # avoid getting the full dump of this ValueObject just to save its
     45          # metrics
     46          if isinstance(name, lldb.SBValue):
     47              self.list.append(name.GetName())
     48          else:
     49              self.list.append(str(name))
     50
     51 -    def __str__(self):
     52          return str(self.count) + " times, for items [" + str(self.list) + "]"
     53
     54
     55 -class MetricsPrinter_Verbose:
     56
     57 -    def __init__(self, metrics):
     58          self.metrics = metrics
     59
     60 -    def __str__(self):
     61          string = ""
     62          for key, value in self.metrics.metrics.items():
     63              string = string + "metric " + str(key) + ": " + str(value) + "\n"
     64          return string
     65
     66
     67 -class MetricsPrinter_Compact:
     68
     69 -    def __init__(self, metrics):
     70          self.metrics = metrics
     71
     72 -    def __str__(self):
     73          string = ""
     74          for key, value in self.metrics.metrics.items():
     75              string = string + "metric " + \
     76                  str(key) + " was hit " + str(value.count) + " times\n"
     77          return string
     78
     79
     80 -class Metrics:
     81
     82 -    def __init__(self):
     83          self.metrics = {}
     84
     85 -    def add_metric(self, name):
     86          self.metrics[name] = Counter()
     87
     88 -    def metric_hit(self, metric, trigger):
     89          self.metrics[metric].update(trigger)
     90
     91 -    def __getitem__(self, key):
     92          return self.metrics[key]
     93
     94 -    def __getattr__(self, name):
     95          if name == 'compact':
     96              return MetricsPrinter_Compact(self)
     97          if name == 'verbose':
     98              return MetricsPrinter_Verbose(self)
     99          raise AttributeError("%r object has no attribute %r" %
    100                               (type(self).__name__, name))
    101
    102 -    def __str__(self):
    103          return str(self.verbose)
    104
    105 -    def metric_success(self, metric):
    106          total_count = 0
    107          metric_count = self[metric].count
    108          for key, value in self.metrics.items():
    109              total_count = total_count + value.count
    110          if total_count > 0:
    111              return metric_count / float(total_count)
    112          return 0
    113