@@ -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"\n Converting 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
0 commit comments