Skip to content

Commit 6fd0dc6

Browse files
committed
rocpd filter support
1 parent 1e7d013 commit 6fd0dc6

File tree

11 files changed

+369
-94
lines changed

11 files changed

+369
-94
lines changed

source/lib/python/rocpd/__main__.py

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def main(argv=None, config=None):
4444
from . import pftrace
4545
from . import query
4646
from . import summary
47+
from . import filter
4748
from . import time_window
4849
from . import version_info
4950
from .importer import RocpdImportData
@@ -110,6 +111,18 @@ def main(argv=None, config=None):
110111
help="Print the version information and exit",
111112
)
112113

114+
def add_required_args(_parser):
115+
_required_params = _parser.add_argument_group("Required options")
116+
_required_params.add_argument(
117+
"-i",
118+
"--input",
119+
required=True,
120+
type=output_config.check_file_exists,
121+
nargs="+",
122+
help="Input path and filename to one or more database(s), separated by spaces",
123+
)
124+
return _required_params
125+
113126
subparsers = parser.add_subparsers(dest="command")
114127
converter = subparsers.add_parser(
115128
"convert",
@@ -138,16 +151,7 @@ def main(argv=None, config=None):
138151
def get_output_type(val):
139152
return val.lower().replace("perfetto", "pftrace")
140153

141-
# add required options for each subparser
142-
converter_required_params = converter.add_argument_group("Required options")
143-
converter_required_params.add_argument(
144-
"-i",
145-
"--input",
146-
required=True,
147-
type=output_config.check_file_exists,
148-
nargs="+",
149-
help="Input path and filename to one or more database(s)",
150-
)
154+
converter_required_params = add_required_args(converter)
151155
converter_required_params.add_argument(
152156
"-f",
153157
"--output-format",
@@ -159,43 +163,28 @@ def get_output_type(val):
159163
required=True,
160164
)
161165

162-
query_required_params = query_reporter.add_argument_group("Required options")
163-
query_required_params.add_argument(
164-
"-i",
165-
"--input",
166-
required=True,
167-
type=output_config.check_file_exists,
168-
nargs="+",
169-
help="Input path and filename to one or more database(s)",
170-
)
171-
172-
summary_required_params = generate_summary.add_argument_group("Required options")
173-
summary_required_params.add_argument(
174-
"-i",
175-
"--input",
176-
required=True,
177-
type=output_config.check_file_exists,
178-
nargs="+",
179-
help="Input path and filename to one or more database(s)",
180-
)
166+
query_required_params = add_required_args(query_reporter)
167+
summary_required_params = add_required_args(generate_summary)
181168

182169
# converter: add args from any sub-modules
183170
valid_out_config_args = output_config.add_args(converter)
184-
valid_generic_args = output_config.add_generic_args(converter)
185171
valid_pftrace_args = pftrace.add_args(converter)
186172
valid_csv_args = csv.add_args(converter)
187173
valid_otf2_args = otf2.add_args(converter)
188174
valid_time_window_args = time_window.add_args(converter)
175+
valid_filter_args = filter.add_args(converter)
189176

190177
# query: subparser args
191178
valid_out_config_args = output_config.add_args(query_reporter)
192179
valid_query_args = query.add_args(query_reporter)
193180
valid_time_window_args = time_window.add_args(query_reporter)
181+
valid_filter_args = filter.add_args(query_reporter)
194182

195183
# summary: subparser args
196184
valid_io_args = summary.add_io_args(generate_summary)
197185
valid_summary_args = summary.add_args(generate_summary)
198186
valid_time_window_args = time_window.add_args(generate_summary)
187+
valid_filter_args = filter.add_args(generate_summary)
199188

200189
# parse the command line arguments
201190
args = parser.parse_args(argv)
@@ -216,13 +205,11 @@ def get_output_type(val):
216205
if args.command == "convert":
217206
# process the args
218207
out_cfg_args = output_config.process_args(args, valid_out_config_args)
219-
generic_out_cfg_args = output_config.process_generic_args(
220-
args, valid_generic_args
221-
)
222208
pftrace_args = pftrace.process_args(args, valid_pftrace_args)
223209
csv_args = csv.process_args(args, valid_csv_args)
224210
otf2_args = otf2.process_args(args, valid_otf2_args)
225211
window_args = time_window.process_args(args, valid_time_window_args)
212+
filter_args = filter.process_args(args, valid_filter_args)
226213

227214
# now start processing the data. Import the data and merge the views
228215
importData = RocpdImportData(args.input)
@@ -231,9 +218,13 @@ def get_output_type(val):
231218
if window_args is not None:
232219
time_window.apply_time_window(importData, **window_args)
233220

221+
# apply filtering if requested
222+
if filter_args is not None:
223+
filter.check_args(importData, **filter_args)
224+
filter.apply_filter(importData, **filter_args)
225+
234226
all_args = {
235227
**out_cfg_args,
236-
**generic_out_cfg_args,
237228
**pftrace_args,
238229
**csv_args,
239230
**otf2_args,
@@ -254,7 +245,7 @@ def get_output_type(val):
254245

255246
for out_format in args.output_format:
256247
if out_format in format_handlers:
257-
print(f"Converting database(s) to {out_format} format:")
248+
print(f"\nConverting database(s) to {out_format} format...")
258249
format_handlers[out_format](importData, config)
259250
else:
260251
print(f"Warning: Unsupported output format '{out_format}'")
@@ -265,13 +256,18 @@ def get_output_type(val):
265256
query_args = query.process_args(args, valid_query_args)
266257
out_cfg_args = output_config.process_args(args, valid_out_config_args)
267258
window_args = time_window.process_args(args, valid_time_window_args)
259+
filter_args = filter.process_args(args, valid_filter_args)
268260

269-
all_args = {**query_args, **out_cfg_args}
261+
all_args = {
262+
**query_args,
263+
**out_cfg_args,
264+
}
270265

271266
query.execute(
272267
args.input,
273268
args,
274269
window_args=window_args,
270+
filter_args=filter_args,
275271
**all_args,
276272
)
277273

@@ -281,6 +277,7 @@ def get_output_type(val):
281277
summary_args = summary.process_args(args, valid_summary_args)
282278
io_args = output_config.process_args(args, valid_io_args)
283279
window_args = time_window.process_args(args, valid_time_window_args)
280+
filter_args = filter.process_args(args, valid_filter_args)
284281

285282
# now start processing the data. Import the data and merge the views
286283
importData = RocpdImportData(args.input)
@@ -289,6 +286,11 @@ def get_output_type(val):
289286
if window_args is not None:
290287
time_window.apply_time_window(importData, **window_args)
291288

289+
# apply filtering if requested
290+
if filter_args is not None:
291+
filter.check_args(importData, **filter_args)
292+
filter.apply_filter(importData, **filter_args)
293+
292294
all_args = {**summary_args, **io_args}
293295
summary.generate_all_summaries(importData, **all_args)
294296

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/usr/bin/env python3
2+
###############################################################################
3+
# MIT License
4+
#
5+
# Copyright (c) 2023 Advanced Micro Devices, Inc.
6+
#
7+
# Permission is hereby granted, free of charge, to any person obtaining a copy
8+
# of this software and associated documentation files (the "Software"), to deal
9+
# in the Software without restriction, including without limitation the rights
10+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
# copies of the Software, and to permit persons to whom the Software is
12+
# furnished to do so, subject to the following conditions:
13+
#
14+
# The above copyright notice and this permission notice shall be included in
15+
# all copies or substantial portions of the Software.
16+
#
17+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23+
# THE SOFTWARE.
24+
###############################################################################
25+
26+
27+
__all__ = ["RocpdImportData", "connect"]
28+
29+
import sqlite3
30+
31+
try:
32+
from . import libpyrocpd
33+
34+
RocpdImportData = libpyrocpd.RocpdImportData
35+
connect = libpyrocpd.connect
36+
37+
except ImportError:
38+
39+
class RocpdImportData(sqlite3.Connection):
40+
"""Fallback class replicating the interface of libpyrocpd.RocpdImportData."""
41+
42+
def __init__(self, input, dbname=":memory:"):
43+
pass
44+
45+
connect = sqlite3.connect

source/lib/python/rocpd/csv.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
from .importer import RocpdImportData
2727
from .time_window import apply_time_window
28+
from .filter import apply_filter
2829
from . import output_config
2930
from . import libpyrocpd
3031

@@ -33,11 +34,12 @@ def write_csv(importData, config):
3334
return libpyrocpd.write_csv(importData, config)
3435

3536

36-
def execute(input, config=None, window_args=None, **kwargs):
37+
def execute(input, config=None, window_args=None, filter_args=None, **kwargs):
3738

3839
importData = RocpdImportData(input)
3940

4041
apply_time_window(importData, **window_args)
42+
apply_filter(importData, **filter_args)
4143

4244
config = (
4345
output_config.output_config(**kwargs)
@@ -65,7 +67,8 @@ def main(argv=None):
6567
from .time_window import process_args as process_args_time_window
6668
from .output_config import add_args as add_args_output_config
6769
from .output_config import process_args as process_args_output_config
68-
from .output_config import add_generic_args, process_generic_args
70+
from .filter import add_args as add_args_filter
71+
from .filter import process_args as process_args_filter
6972

7073
parser = argparse.ArgumentParser(
7174
description="Convert rocPD to CSV files",
@@ -85,24 +88,23 @@ def main(argv=None):
8588
)
8689

8790
valid_out_config_args = add_args_output_config(parser)
88-
valid_generic_args = add_generic_args(parser)
91+
valid_filter_args = add_args_filter(parser)
8992
valid_time_window_args = add_args_time_window(parser)
9093
valid_csv_args = add_args(parser)
9194

9295
args = parser.parse_args(argv)
9396

9497
out_cfg_args = process_args_output_config(args, valid_out_config_args)
95-
generic_out_cfg_args = process_generic_args(args, valid_generic_args)
98+
filter_args = process_args_filter(args, valid_filter_args)
9699
window_args = process_args_time_window(args, valid_time_window_args)
97100
csv_args = process_args(args, valid_csv_args)
98101

99102
all_args = {
100103
**out_cfg_args,
101-
**generic_out_cfg_args,
102104
**csv_args,
103105
}
104106

105-
execute(args.input, window_args=window_args, **all_args)
107+
execute(args.input, window_args=window_args, filter_args=filter_args, **all_args)
106108

107109

108110
if __name__ == "__main__":

0 commit comments

Comments
 (0)