xref: /xnu-8792.61.2/tools/lldbmacros/workload.py (revision 42e220869062b56f8d7d0726fd4c88954f87902c)
1from __future__ import absolute_import
2from __future__ import print_function
3
4from xnu import *
5
6@lldb_type_summary(['workload_config_entry_t *'])
7@header("{0: <20s} {1: <40s} {2: <18s} {3: <18s}".format("workload", "id", "default phase", "phases"))
8def GetWorkloadConfigSummary(workload):
9    """ Summarizes workload_config_entry structure
10        params: workload: value - value object representing workload_config_entry
11        returns: str - summary of the workload object
12    """
13    format_string = '{0: <#020x} {1: <40s} {2: <#018x} {2: <#018x}'
14    return format_string.format(workload, str(workload.wce_id), workload.wce_default, workload.wce_phases)
15
16
17@lldb_type_summary(['workload_phase_entry_t *'])
18@header("{0: <20s} {1: <25s} {2: <10s} {3: <10s} {4: <10s} {5: <20s}".format("phase", "id", "flags", "cflags", "tflags", "criticality offset"))
19def GetWorkloadPhaseSummary(phase):
20    """ Summarizes workload_phase_entry structure
21        params: phase: value - value object representing workload_phase_entry
22        returns: str - summary of the workload phase object
23    """
24
25    format_string = '{0: <#020x} {1: <25s} {2: <#010x} {3: <#010x} {4: <#010x} {4: <20d} '
26    return format_string.format(phase, str(phase.wpe_phase), phase.wpe_config.wc_flags, phase.wpe_config.wc_create_flags, phase.wpe_config.wc_thread_group_flags, phase.wpe_config.wc_criticality_offset)
27
28# Macro: showallworkloadconfig
29
30@lldb_command('showallworkloadconfig')
31def ShowAllWorkloadConfig(cmd_args=None, cmd_options={}):
32    """  Routine to print the all workload configurations.
33         Usage: showallworkloadconfig
34    """
35
36    print(GetWorkloadConfigSummary.header)
37    table = kern.globals.workload_config_boot.wlcc_hashtbl
38    mask = kern.globals.workload_config_boot.wlcc_hash_mask
39
40    if table != 0:
41        for i in range(mask + 1):
42            for entry in IterateListEntry(table[i], 'workload_config_entry_t *', 'wce_link'):
43                print(GetWorkloadConfigSummary(entry))
44
45# EndMacro: showallworkloadconfig
46
47
48# Macro: showworkloadconfig
49
50@lldb_command('showworkloadconfig', 'F:')
51def ShowWorkloadConfig(cmd_args=None, cmd_options={}):
52    """  Routine to print a summary listing of given workload config
53         Usage: showworkloadconfig <address of workload config>
54         or   : showworkloadconfig -F <workload config id>
55    """
56
57    if "-F" in cmd_options:
58        print(GetWorkloadConfigSummary.header)
59        table = kern.globals.workload_config_boot.wlcc_hashtbl
60        mask = kern.globals.workload_config_boot.wlcc_hash_mask
61
62        if table != 0:
63            for i in range(mask + 1):
64                for entry in IterateListEntry(table[i], 'workload_config_entry_t *', 'wce_link'):
65                    if cmd_options['-F'] == str(entry.wce_id):
66                        print(GetWorkloadConfigSummary(entry))
67                        return
68    else:
69        if not cmd_args:
70            raise ArgumentError("Invalid arguments passed.")
71        entry = kern.GetValueFromAddress(cmd_args[0], 'workload_config_entry_t *')
72        print(GetWorkloadConfigSummary.header)
73        print(GetWorkloadConfigSummary(entry))
74
75# EndMacro: showworkloadconfig
76
77
78# Macro: showworkloadconfigphases
79
80@lldb_command('showworkloadconfigphases')
81def ShowWorkloadConfigPhases(cmd_args=None, cmd_options={}):
82    """  Routine to print the workload configuration phases of the specified workload config.
83         Usage: showworkloadconfigphases <workload config>
84    """
85
86    if not cmd_args:
87        raise ArgumentError("Invalid arguments passed.")
88
89    print(GetWorkloadPhaseSummary.header)
90
91    entry = kern.GetValueFromAddress(cmd_args[0], 'workload_config_entry_t *')
92    for phase in IterateListEntry(entry.wce_phases, 'workload_phase_entry_t *', 'wpe_link'):
93            print(GetWorkloadPhaseSummary(phase))
94
95# EndMacro: showworkloadconfigphases
96
97