Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / third_party / typ / typ / stats.py
1 # Copyright 2014 Google Inc. All rights reserved.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #    http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15
16 class Stats(object):
17
18     def __init__(self, status_format, time_fn, size):
19         self.fmt = status_format
20         self.finished = 0
21         self.started = 0
22         self.total = 0
23         self.started_time = time_fn()
24         self._times = []
25         self._size = size
26         self._time = time_fn
27         self._times.append(self.started_time)
28
29     def add_time(self):
30         if len(self._times) > self._size:
31             self._times.pop(0)
32         self._times.append(self._time())
33
34     def format(self):
35         # Too many statements pylint: disable=R0915
36         out = ''
37         p = 0
38         end = len(self.fmt)
39         while p < end:
40             c = self.fmt[p]
41             if c == '%' and p < end - 1:
42                 cn = self.fmt[p + 1]
43                 if cn == 'c':
44                     elapsed = self._times[-1] - self._times[0]
45                     if elapsed > 0:
46                         out += '%5.1f' % ((len(self._times) - 1) / elapsed)
47                     else:
48                         out += '-'
49                 elif cn == 'e':
50                     now = self._time()
51                     assert now >= self.started_time
52                     out += '%-5.3f' % (now - self.started_time)
53                 elif cn == 'f':
54                     out += str(self.finished)
55                 elif cn == 'o':
56                     now = self._time()
57                     if now > self.started_time:
58                         out += '%5.1f' % (self.finished * 1.0 /
59                                           (now - self.started_time))
60                     else:
61                         out += '-'
62                 elif cn == 'p':
63                     if self.total:
64                         out += '%5.1f' % (self.started * 100.0 / self.total)
65                     else:
66                         out += '-'
67                 elif cn == 'r':
68                     out += str(self.started - self.finished)
69                 elif cn == 's':
70                     out += str(self.started)
71                 elif cn == 't':
72                     out += str(self.total)
73                 elif cn == 'u':
74                     out += str(self.total - self.finished)
75                 elif cn == '%':
76                     out += '%'
77                 else:
78                     out += c + cn
79                 p += 2
80             else:
81                 out += c
82                 p += 1
83         return out