OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [scripts/] [show_delta] - Blame information for rev 81

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
#!/usr/bin/env python
2
#
3
# show_deltas: Read list of printk messages instrumented with
4
# time data, and format with time deltas.
5
#
6
# Also, you can show the times relative to a fixed point.
7
#
8
# Copyright 2003 Sony Corporation
9
#
10
# GPL 2.0 applies.
11
 
12
import sys
13
import string
14
 
15
def usage():
16
        print """usage: show_delta [] 
17
 
18
This program parses the output from a set of printk message lines which
19
have time data prefixed because the CONFIG_PRINTK_TIME option is set, or
20
the kernel command line option "time" is specified. When run with no
21
options, the time information is converted to show the time delta between
22
each printk line and the next.  When run with the '-b' option, all times
23
are relative to a single (base) point in time.
24
 
25
Options:
26
  -h            Show this usage help.
27
  -b    Specify a base for time references.
28
                 can be a number or a string.
29
                If it is a string, the first message line
30
                which matches (at the beginning of the
31
                line) is used as the time reference.
32
 
33
ex: $ dmesg >timefile
34
    $ show_delta -b NET4 timefile
35
 
36
will show times relative to the line in the kernel output
37
starting with "NET4".
38
"""
39
        sys.exit(1)
40
 
41
# returns a tuple containing the seconds and text for each message line
42
# seconds is returned as a float
43
# raise an exception if no timing data was found
44
def get_time(line):
45
        if line[0]!="[":
46
                raise ValueError
47
 
48
        # split on closing bracket
49
        (time_str, rest) = string.split(line[1:],']',1)
50
        time = string.atof(time_str)
51
 
52
        #print "time=", time
53
        return (time, rest)
54
 
55
 
56
# average line looks like:
57
# [    0.084282] VFS: Mounted root (romfs filesystem) readonly
58
# time data is expressed in seconds.useconds,
59
# convert_line adds a delta for each line
60
last_time = 0.0
61
def convert_line(line, base_time):
62
        global last_time
63
 
64
        try:
65
                (time, rest) = get_time(line)
66
        except:
67
                # if any problem parsing time, don't convert anything
68
                return line
69
 
70
        if base_time:
71
                # show time from base
72
                delta = time - base_time
73
        else:
74
                # just show time from last line
75
                delta = time - last_time
76
                last_time = time
77
 
78
        return ("[%5.6f < %5.6f >]" % (time, delta)) + rest
79
 
80
def main():
81
        base_str = ""
82
        filein = ""
83
        for arg in sys.argv[1:]:
84
                if arg=="-b":
85
                        base_str = sys.argv[sys.argv.index("-b")+1]
86
                elif arg=="-h":
87
                        usage()
88
                else:
89
                        filein = arg
90
 
91
        if not filein:
92
                usage()
93
 
94
        try:
95
                lines = open(filein,"r").readlines()
96
        except:
97
                print "Problem opening file: %s" % filein
98
                sys.exit(1)
99
 
100
        if base_str:
101
                print 'base= "%s"' % base_str
102
                # assume a numeric base.  If that fails, try searching
103
                # for a matching line.
104
                try:
105
                        base_time = float(base_str)
106
                except:
107
                        # search for line matching  string
108
                        found = 0
109
                        for line in lines:
110
                                try:
111
                                        (time, rest) = get_time(line)
112
                                except:
113
                                        continue
114
                                if string.find(rest, base_str)==1:
115
                                        base_time = time
116
                                        found = 1
117
                                        # stop at first match
118
                                        break
119
                        if not found:
120
                                print 'Couldn\'t find line matching base pattern "%s"' % base_str
121
                                sys.exit(1)
122
        else:
123
                base_time = 0.0
124
 
125
        for line in lines:
126
                print convert_line(line, base_time),
127
 
128
main()
129
 

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.