[igt-dev] [PATCH i-g-t v5 7/7] scripts/test_list.py: optimize check regex
Kamil Konieczny
kamil.konieczny at linux.intel.com
Mon Jul 10 18:27:28 UTC 2023
Hi Mauro,
On 2023-07-10 at 13:53:54 +0200, Mauro Carvalho Chehab wrote:
> From: Mauro Carvalho Chehab <mchehab at kernel.org>
>
> Running re.sub() for an already compiled regex makes it recompile
> again. Change the logic to use the right syntax. While here, also use
> rstrip() to remove \n at the end of read files.
>
> Before:
>
> $ time ./scripts/igt_doc.py --config tests/i915/i915_*json --check --igt build/
>
> real 0m1.492s
> user 0m1.457s
> sys 0m0.030s
>
> After:
> $ time ./scripts/igt_doc.py --config tests/i915/i915_*json --check --igt build/
>
> real 0m0.492s
> user 0m0.473s
> sys 0m0.017s
>
> It is now 3 times faster (measured for i915 driver, which has
> more IGT tests).
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>
Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> ---
> scripts/test_list.py | 22 ++++++++++++----------
> 1 file changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/scripts/test_list.py b/scripts/test_list.py
> index 2c1a6f230fb5..19ed5e5467f5 100755
> --- a/scripts/test_list.py
> +++ b/scripts/test_list.py
> @@ -401,10 +401,10 @@ class TestList:
>
> for filter_field, regex in self.filters.items():
> if filter_field in subtest:
> - if not re.match(regex, subtest[filter_field]):
> + if not regex.match(subtest[filter_field]):
> return True
> elif filter_field in test:
> - if not re.match(regex, test[filter_field]):
> + if not regex.match(test[filter_field]):
> return True
> else:
> return field_not_found_value
> @@ -919,7 +919,7 @@ class TestList:
>
> with open(fname, 'r', encoding='utf8') as handle:
> for line in handle:
> - tests.append(line)
> + tests.append(line.rstrip("\n"))
>
> return sorted(tests)
>
> @@ -938,9 +938,11 @@ class TestList:
>
> doc_subtests = set()
>
> + args_regex = re.compile(r'\<[^\>]+\>')
> +
> for subtest in self.get_subtests()[""]:
> subtest = "@".join(subtest.split("@")[:3])
> - subtest = re.sub(r'\<[^\>]+\>', r'\\d+', subtest)
> + subtest = args_regex.sub(r'\\d+', subtest)
> doc_subtests.add(subtest)
>
> doc_subtests = list(sorted(doc_subtests))
> @@ -957,14 +959,14 @@ class TestList:
> for doc_test in doc_subtests:
> if test_regex != r"":
> test_regex += r"|"
> - test_regex += r'^' + doc_test + r'$'
> + test_regex += doc_test
>
> - test_regex = re.compile(test_regex)
> + test_regex = re.compile(r'^(' + test_regex + r')$')
>
> for doc_test in doc_subtests:
> found = False
> for run_test in run_subtests:
> - if re.match(test_regex, run_test):
> + if test_regex.match(run_test):
> found = True
> break
> if not found:
> @@ -972,7 +974,7 @@ class TestList:
>
> for run_test in run_subtests:
> found = False
> - if re.match(test_regex, run_test):
> + if test_regex.match(run_test):
> found = True
> if not found:
> run_missing.append(run_test)
> @@ -1101,7 +1103,7 @@ class TestList:
> continue
>
> # It is a known section. Parse its contents
> - match = re.match(field_re, file_line)
> + match = field_re.match(file_line)
> if match:
> current_field = self.field_list[match.group(1).lower()]
> match_val = match.group(2)
> @@ -1198,7 +1200,7 @@ class TestList:
> self.doc[current_test]["arg"][arg_ref][cur_arg][cur_arg_element] += match_val
> continue
>
> - re.sub(r"\n$","", file_line)
> + file_line.rstrip(r"\n")
> sys.exit(f"{fname}:{file_ln + 1}: Error: unrecognized line. Need to add field at %s?\n\t==> %s" %
> (self.config_fname, file_line))
>
> --
> 2.40.1
>
More information about the igt-dev
mailing list