summaryrefslogtreecommitdiffstats
path: root/unit_trace/sanitizer.py
blob: 3245e703d889b02023568363c0b8e6538a4b3028 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
###############################################################################
# Description
###############################################################################

# Sanitize input. (There are a number of goofy issues with the sched_trace
# output.)

###############################################################################
# Public functions
###############################################################################

def sanitizer(stream):

    job_2s_released = [] # list of tasks which have released their job 2s
    jobs_switched_to = []

    for record in stream:

        # Ignore records which are not events (e.g. the num_cpus record)
        if record['record_type'] != 'event':
            yield record
            continue

        # All records with job < 2 are garbage
        if record['job'] < 2:
            continue

        # Some records with job == 2 are garbage
        if record['job']==2:

            # There is a duplicate release of every job 2
            # This will throw away the second one
            if record['type_name'] == 'release':
                if record['pid'] in job_2s_released:
                    continue
                else:
                    job_2s_released.append(record['pid'])

            # Job 2 has a resume that is garbage
            if record['type_name'] == 'resume':
                continue

        # By default, the switch_away for a job (after it has completed)
        # is maked as being for job+1, which has never been switched to.
        # We can correct this if we note which jobs really
        # have been switched to.
        if record['type_name'] == 'switch_to':
            jobs_switched_to.append((record['pid'],record['job']))
        if record['type_name'] == 'switch_away':
            if (record['pid'],record['job']) not in jobs_switched_to:
                record['job'] -= 1

        yield record