[Piglit] [PATCH] tests/deqp: add configuration option to control caselist generation

2019-06-06 Thread Alejandro Piñeiro
Right now, each time any deqp-like profile ask for the case list, it
calls to generate the caselist. As by default it doesn't pass any
parameter, it creates all the possible caselist. And there are some
test sets (like khr_gles) that calls this method several time. On slow
machines this means a significant startup time.

This commit adds a envvar that allows to keep the current
behaviour. But if disabled, if the caselist already exists, compare
the creation times with the deqp binary. If the binary is older that
the caselist, it assumes that the caselist is recent enough, and skips
calling the caselist generation method.
---
 framework/test/deqp.py | 8 
 piglit.conf.example| 6 ++
 2 files changed, 14 insertions(+)

diff --git a/framework/test/deqp.py b/framework/test/deqp.py
index 5db2a922f..aea335079 100644
--- a/framework/test/deqp.py
+++ b/framework/test/deqp.py
@@ -66,6 +66,9 @@ _EXTRA_ARGS = get_option('PIGLIT_DEQP_EXTRA_ARGS',
  ('deqp', 'extra_args'),
  default='').split()
 
+force_caselist_regen = get_option('PIGLIT_DEQP_FORCE_CASELIST_REGEN',
+  ('deqp', 'force_caselist_regen'),
+  default='True')
 
 def select_source(bin_, filename, mustpass, extra_args):
 """Return either the mustpass list or the generated list."""
@@ -116,6 +119,11 @@ def gen_caselist_txt(bin_, caselist, extra_args):
 basedir = os.path.dirname(bin_)
 caselist_path = os.path.join(basedir, caselist)
 
+if (force_caselist_regen == 'False' and
+os.path.exists(caselist_path) and
+os.path.getmtime(caselist_path) > os.path.getmtime(bin_)):
+return caselist_path
+
 # TODO: need to catch some exceptions here...
 with open(os.devnull, 'w') as d:
 env = os.environ.copy()
diff --git a/piglit.conf.example b/piglit.conf.example
index 1877187df..5bb1ddff9 100644
--- a/piglit.conf.example
+++ b/piglit.conf.example
@@ -37,6 +37,12 @@ testB
 ; Options that affect all deqp based suites
 ;extra_args=--deqp-visibility=hidden
 
+; If we regenerate the caselist files everytime we ask them, or if we
+; reuse them if already present and more recent that the deqp
+; binary. The environment variable PIGLIT_DEQP_FORGE_CASELIST_REGEN
+; overrides de value set here.
+; force_caselist_regen=True
+
 [deqp-egl]
 ; Path to the deqp-egl executable
 ; Can be overwritten by PIGLIT_DEQP_EGL_BIN environment variable
-- 
2.19.1

___
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Re: [Piglit] [PATCH] tests/deqp: use --deqp-case when generating case-list

2019-06-06 Thread apinheiro
I have realized that this solution have a big problem. You can pass 
extra args to deqp, so several people are already using it to pass 
--deqp-case through extra args. This patch would affect them.


So Im dropping this patch. sorry for the noise.

On 6/6/19 14:48, Alejandro Piñeiro wrote:

Without this commit, generating the case list is called without any
parameter by default, so it would generate all the caselist, even if
you don't need it, or if you have just called the method before (like
in khr_gles where you call several time gen_caselist).

For the latter an alternative would just check if the caselist files
are already created, and return if they exist. But in that case, we
would need to add a mechanism to force creating them.
---
  framework/test/deqp.py |  6 --
  tests/cts_gl.py| 20 ++--
  tests/cts_gl45.py  |  2 +-
  tests/cts_gles.py  |  9 -
  tests/gtf_gles.py  |  6 +++---
  tests/khr_gl.py| 22 +++---
  tests/khr_gles.py  | 11 +--
  tests/khr_noctx.py |  2 +-
  8 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/framework/test/deqp.py b/framework/test/deqp.py
index 5db2a922f..7c1a82c2a 100644
--- a/framework/test/deqp.py
+++ b/framework/test/deqp.py
@@ -114,7 +114,7 @@ def gen_caselist_txt(bin_, caselist, extra_args):
  #  differ then we cannot pre-generate the caselist on the build host:
  #  we must *dynamically* generate it during the testrun.
  basedir = os.path.dirname(bin_)
-caselist_path = os.path.join(basedir, caselist)
+caselist_path = os.path.join(basedir, caselist + '-cases.txt')
  
  # TODO: need to catch some exceptions here...

  with open(os.devnull, 'w') as d:
@@ -123,8 +123,10 @@ def gen_caselist_txt(bin_, caselist, extra_args):
  env['MESA_GLES_VERSION_OVERRIDE'] = '3.2'
  
  subprocess.check_call(

-[bin_, '--deqp-runmode=txt-caselist'] + extra_args, cwd=basedir,
+[bin_, '--deqp-runmode=txt-caselist' , '--deqp-case=' , caselist, 
'.*']
++ extra_args, cwd=basedir,
  stdout=d, stderr=d, env=env)
+
  assert os.path.exists(caselist_path)
  return caselist_path
  
diff --git a/tests/cts_gl.py b/tests/cts_gl.py

index 935df7a7c..fa36ea4f9 100644
--- a/tests/cts_gl.py
+++ b/tests/cts_gl.py
@@ -70,24 +70,24 @@ class DEQPCTSTest(deqp.DEQPBaseTest):
  profile = deqp.make_profile(  # pylint: disable=invalid-name
  itertools.chain(
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL30-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL30-CTS', _EXTRA_ARGS)),
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL31-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL31-CTS', _EXTRA_ARGS)),
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL32-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL32-CTS', _EXTRA_ARGS)),
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL33-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL33-CTS', _EXTRA_ARGS)),
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL40-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL40-CTS', _EXTRA_ARGS)),
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL41-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL41-CTS', _EXTRA_ARGS)),
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL42-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL42-CTS', _EXTRA_ARGS)),
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL43-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL43-CTS', _EXTRA_ARGS)),
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL44-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL44-CTS', _EXTRA_ARGS)),
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL45-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL45-CTS', _EXTRA_ARGS)),
  ),
  DEQPCTSTest)
diff --git a/tests/cts_gl45.py b/tests/cts_gl45.py
index d033c3efc..070ed8026 100644
--- a/tests/cts_gl45.py
+++ b/tests/cts_gl45.py
@@ -64,6 +64,6 @@ class DEQPCTSTest(deqp.DEQPBaseTest):
  profile = deqp.make_profile(  # pylint: disable=invalid-name
  itertools.chain(
  deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL45-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL45-CTS', _EXTRA_ARGS)),
  ),
  DEQPCTSTest)
diff --git a/tests/cts_gles.py b/tests/cts_gles.p

[Piglit] [PATCH] tests/deqp: use --deqp-case when generating case-list

2019-06-06 Thread Alejandro Piñeiro
Without this commit, generating the case list is called without any
parameter by default, so it would generate all the caselist, even if
you don't need it, or if you have just called the method before (like
in khr_gles where you call several time gen_caselist).

For the latter an alternative would just check if the caselist files
are already created, and return if they exist. But in that case, we
would need to add a mechanism to force creating them.
---
 framework/test/deqp.py |  6 --
 tests/cts_gl.py| 20 ++--
 tests/cts_gl45.py  |  2 +-
 tests/cts_gles.py  |  9 -
 tests/gtf_gles.py  |  6 +++---
 tests/khr_gl.py| 22 +++---
 tests/khr_gles.py  | 11 +--
 tests/khr_noctx.py |  2 +-
 8 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/framework/test/deqp.py b/framework/test/deqp.py
index 5db2a922f..7c1a82c2a 100644
--- a/framework/test/deqp.py
+++ b/framework/test/deqp.py
@@ -114,7 +114,7 @@ def gen_caselist_txt(bin_, caselist, extra_args):
 #  differ then we cannot pre-generate the caselist on the build host:
 #  we must *dynamically* generate it during the testrun.
 basedir = os.path.dirname(bin_)
-caselist_path = os.path.join(basedir, caselist)
+caselist_path = os.path.join(basedir, caselist + '-cases.txt')
 
 # TODO: need to catch some exceptions here...
 with open(os.devnull, 'w') as d:
@@ -123,8 +123,10 @@ def gen_caselist_txt(bin_, caselist, extra_args):
 env['MESA_GLES_VERSION_OVERRIDE'] = '3.2'
 
 subprocess.check_call(
-[bin_, '--deqp-runmode=txt-caselist'] + extra_args, cwd=basedir,
+[bin_, '--deqp-runmode=txt-caselist' , '--deqp-case=' , caselist, 
'.*']
++ extra_args, cwd=basedir,
 stdout=d, stderr=d, env=env)
+
 assert os.path.exists(caselist_path)
 return caselist_path
 
diff --git a/tests/cts_gl.py b/tests/cts_gl.py
index 935df7a7c..fa36ea4f9 100644
--- a/tests/cts_gl.py
+++ b/tests/cts_gl.py
@@ -70,24 +70,24 @@ class DEQPCTSTest(deqp.DEQPBaseTest):
 profile = deqp.make_profile(  # pylint: disable=invalid-name
 itertools.chain(
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL30-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL30-CTS', _EXTRA_ARGS)),
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL31-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL31-CTS', _EXTRA_ARGS)),
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL32-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL32-CTS', _EXTRA_ARGS)),
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL33-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL33-CTS', _EXTRA_ARGS)),
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL40-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL40-CTS', _EXTRA_ARGS)),
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL41-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL41-CTS', _EXTRA_ARGS)),
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL42-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL42-CTS', _EXTRA_ARGS)),
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL43-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL43-CTS', _EXTRA_ARGS)),
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL44-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL44-CTS', _EXTRA_ARGS)),
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL45-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL45-CTS', _EXTRA_ARGS)),
 ),
 DEQPCTSTest)
diff --git a/tests/cts_gl45.py b/tests/cts_gl45.py
index d033c3efc..070ed8026 100644
--- a/tests/cts_gl45.py
+++ b/tests/cts_gl45.py
@@ -64,6 +64,6 @@ class DEQPCTSTest(deqp.DEQPBaseTest):
 profile = deqp.make_profile(  # pylint: disable=invalid-name
 itertools.chain(
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'GL45-CTS-cases.txt', 
_EXTRA_ARGS)),
+deqp.gen_caselist_txt(_CTS_BIN, 'GL45-CTS', _EXTRA_ARGS)),
 ),
 DEQPCTSTest)
diff --git a/tests/cts_gles.py b/tests/cts_gles.py
index 4ee28a89e..d65a9d56e 100644
--- a/tests/cts_gles.py
+++ b/tests/cts_gles.py
@@ -72,13 +72,12 @@ class DEQPCTSTest(deqp.DEQPBaseTest):
 profile = deqp.make_profile(  # pylint: disable=invalid-name
 itertools.chain(
 deqp.iter_deqp_test_cases(
-deqp.gen_caselist_txt(_CTS_BIN, 'ES2-CTS-cases.txt', _EXTRA_AR