Bug 1471112 - Split mochitest-gl into mochitest-webgl[1,2]-[core,ext] - r=gbrown draft
authorJeff Gilbert <jgilbert@mozilla.com>
Mon, 25 Jun 2018 20:23:33 -0700
changeset 812676 de7148d96fd5f0b7c5dc0c050d7c91eac1abf5ab
parent 812675 76c4d42a192dc7fd31fe893e15ca27a54b7b936c
push id114634
push userbmo:jgilbert@mozilla.com
push dateFri, 29 Jun 2018 19:36:29 +0000
reviewersgbrown
bugs1471112
milestone63.0a1
Bug 1471112 - Split mochitest-gl into mochitest-webgl[1,2]-[core,ext] - r=gbrown Also include webgl2-deqp, which we would like to run eventually, but not yet. MozReview-Commit-ID: CY4hYCI95ws
taskcluster/ci/test/mochitest.yml
taskcluster/ci/test/test-sets.yml
taskcluster/taskgraph/test/test_try_option_syntax.py
testing/mozbase/moztest/moztest/resolve.py
testing/mozharness/configs/android/android_common.py
testing/mozharness/configs/android/android_hw.py
testing/mozharness/configs/unittests/linux_unittest.py
testing/mozharness/configs/unittests/mac_unittest.py
testing/mozharness/configs/unittests/win_taskcluster_unittest.py
testing/mozharness/configs/unittests/win_unittest.py
testing/mozharness/mozharness/mozilla/testing/errors.py
testing/mozharness/mozharness/mozilla/testing/per_test_base.py
testing/mozharness/mozharness/mozilla/testing/testbase.py
--- a/taskcluster/ci/test/mochitest.yml
+++ b/taskcluster/ci/test/mochitest.yml
@@ -338,49 +338,146 @@ mochitest-valgrind:
     # We could re-enable e10s later.
     # There's no intrinsic reason not to use it.
     e10s: false
     allow-software-gl-layers: false
     mozharness:
         mochitest-flavor: plain
         chunked: true
 
-mochitest-webgl:
-    description: "Mochitest webgl run"
-    suite: mochitest/mochitest-gl
-    treeherder-symbol: M(gl)
+mochitest-webgl1-core:
+    description: "Mochitest webgl1-core run"
+    suite: mochitest/mochitest-webgl1-core
+    treeherder-symbol: M(gl1c)
     run-on-projects:
         by-test-platform:
             windows10-64-ccov/.*: []  # Do not run on Windows ccov, see bug 1419475.
             default: built-projects
     virtualization: virtual-with-gpu
-    chunks:
+    e10s:
+        by-test-platform:
+            linux32/debug: both
+            default: true
+    loopback-video: true
+    max-run-time:
         by-test-platform:
-            android-em-7.0-x86/opt: 1
-            android-em.*: 10
-            windows.*: 8
-            default: 3
+            windows.*: 5400
+            default: 3600
+    # Bug 1296733: llvmpipe with mesa 9.2.1 lacks thread safety
+    allow-software-gl-layers: false
+    mozharness:
+        mochitest-flavor: plain
+    tier:
+        by-test-platform:
+            linux64-qr/.*: 1
+            default: default
+
+mochitest-webgl1-ext:
+    description: "Mochitest webgl1-ext run"
+    suite: mochitest/mochitest-webgl1-ext
+    treeherder-symbol: M(gl1e)
+    run-on-projects:
+        by-test-platform:
+            windows10-64-ccov/.*: []  # Do not run on Windows ccov, see bug 1419475.
+            default: built-projects
+    virtualization: virtual-with-gpu
     e10s:
         by-test-platform:
             linux32/debug: both
             default: true
     loopback-video: true
     max-run-time:
         by-test-platform:
             windows.*: 5400
-            android-em.*: 7200
             default: 3600
-    instance-size:
+    # Bug 1296733: llvmpipe with mesa 9.2.1 lacks thread safety
+    allow-software-gl-layers: false
+    mozharness:
+        mochitest-flavor: plain
+    tier:
         by-test-platform:
-            android-em.*: xlarge
+            linux64-qr/.*: 1
             default: default
+
+mochitest-webgl2-core:
+    description: "Mochitest webgl2-core run"
+    suite: mochitest/mochitest-webgl2-core
+    treeherder-symbol: M(gl2c)
+    run-on-projects:
+        by-test-platform:
+            windows10-64-ccov/.*: []  # Do not run on Windows ccov, see bug 1419475.
+            default: built-projects
+    virtualization: virtual-with-gpu
+    e10s:
+        by-test-platform:
+            linux32/debug: both
+            default: true
+    loopback-video: true
+    max-run-time:
+        by-test-platform:
+            windows.*: 5400
+            default: 3600
     # Bug 1296733: llvmpipe with mesa 9.2.1 lacks thread safety
     allow-software-gl-layers: false
     mozharness:
         mochitest-flavor: plain
-        chunked:
-            by-test-platform:
-                android-em.*: false
-                default: true
     tier:
         by-test-platform:
             linux64-qr/.*: 1
             default: default
+
+mochitest-webgl2-ext:
+    description: "Mochitest webgl2-ext run"
+    suite: mochitest/mochitest-webgl2-ext
+    treeherder-symbol: M(gl2e)
+    run-on-projects:
+        by-test-platform:
+            windows10-64-ccov/.*: []  # Do not run on Windows ccov, see bug 1419475.
+            default: built-projects
+    virtualization: virtual-with-gpu
+    chunks: 4
+    e10s:
+        by-test-platform:
+            linux32/debug: both
+            default: true
+    loopback-video: true
+    max-run-time:
+        by-test-platform:
+            windows.*: 5400
+            default: 3600
+    # Bug 1296733: llvmpipe with mesa 9.2.1 lacks thread safety
+    allow-software-gl-layers: false
+    mozharness:
+        mochitest-flavor: plain
+        chunked: true
+    tier:
+        by-test-platform:
+            linux64-qr/.*: 1
+            default: default
+
+mochitest-webgl2-deqp:
+    description: "Mochitest webgl2-deqp run"
+    suite: mochitest/mochitest-webgl2-deqp
+    treeherder-symbol: M(gl2d)
+    run-on-projects:
+        by-test-platform:
+            windows10-64-ccov/.*: []  # Do not run on Windows ccov, see bug 1419475.
+            default: []  # Don't run this for now.
+    virtualization: virtual-with-gpu
+    chunks: 4
+    e10s:
+        by-test-platform:
+            linux32/debug: both
+            default: true
+    loopback-video: true
+    max-run-time:
+        by-test-platform:
+            windows.*: 5400
+            default: 3600
+    # Bug 1296733: llvmpipe with mesa 9.2.1 lacks thread safety
+    allow-software-gl-layers: false
+    mozharness:
+        mochitest-flavor: plain
+        chunked: true
+    tier:
+        by-test-platform:
+            linux64-qr/.*: 1
+            default: default
--- a/taskcluster/ci/test/test-sets.yml
+++ b/taskcluster/ci/test/test-sets.yml
@@ -28,17 +28,18 @@ common-tests:
     - mochitest
     - mochitest-a11y
     - mochitest-browser-chrome
     - mochitest-chrome
     - mochitest-clipboard
     - mochitest-devtools-chrome
     - mochitest-gpu
     - mochitest-media
-    - mochitest-webgl
+    - mochitest-webgl1-core
+    - mochitest-webgl1-ext
     - reftest
     - reftest-no-accel
     - telemetry-tests-client
     - test-coverage
     - test-coverage-wpt
     - test-verify
     - test-verify-gpu
     - test-verify-wpt
@@ -104,17 +105,17 @@ linux-qr-tests:
     - crashtest
     - gtest
     - jittest
     - jsreftest
     - mochitest
     - mochitest-a11y
     - mochitest-gpu
     - mochitest-media
-    - mochitest-webgl
+    - mochitest-webgl1-core
     - reftest
     - xpcshell
 
 linux-talos-profiling:
     - talos-bcv-profiling
     - talos-chrome-profiling
     - talos-damp-profiling
     - talos-dromaeojs-profiling
@@ -135,17 +136,17 @@ linux-talos-profiling:
 linux-talos-flex:
     - talos-flex
 
 windows-qr-tests:
     - crashtest
     - mochitest
     - mochitest-gpu
     - mochitest-media
-    - mochitest-webgl
+    - mochitest-webgl1-core
     - reftest
 
 jsdcov-code-coverage-tests:
     - mochitest
     - mochitest-browser-chrome
     - mochitest-devtools-chrome
     - xpcshell
 
@@ -165,17 +166,20 @@ windows-tests:
     - mochitest
     - mochitest-a11y
     - mochitest-browser-chrome
     - mochitest-chrome
     - mochitest-clipboard
     - mochitest-devtools-chrome
     - mochitest-gpu
     - mochitest-media
-    - mochitest-webgl
+    - mochitest-webgl1-core
+    - mochitest-webgl1-ext
+    - mochitest-webgl2-core
+    - mochitest-webgl2-ext
     - reftest
     - reftest-no-accel
     - test-coverage
     - test-coverage-wpt
     - test-verify
     - test-verify-gpu
     - test-verify-wpt
     - web-platform-tests
@@ -234,17 +238,20 @@ macosx64-tests:
     - mochitest
     - mochitest-a11y
     - mochitest-browser-chrome
     - mochitest-chrome
     - mochitest-clipboard
     - mochitest-devtools-chrome
     - mochitest-gpu
     - mochitest-media
-    - mochitest-webgl
+    - mochitest-webgl1-core
+    - mochitest-webgl1-ext
+    - mochitest-webgl2-core
+    # - mochitest-webgl2-ext test timeouts
     - reftest
     - test-verify
     - test-verify-gpu
     - test-verify-wpt
     - web-platform-tests
     - web-platform-tests-reftests
     - xpcshell
 
@@ -302,17 +309,17 @@ linux32-tests:
     - marionette
     - mochitest
     - mochitest-a11y
     - mochitest-browser-chrome
     - mochitest-chrome
     - mochitest-clipboard
     - mochitest-gpu
     - mochitest-media
-    - mochitest-webgl
+    - mochitest-webgl1-core
     - reftest
     - reftest-no-accel
     - web-platform-tests
     - web-platform-tests-reftests
     - web-platform-tests-wdspec
     - xpcshell
 
 linux32-opt-tests:
@@ -332,16 +339,20 @@ android-common-tests:
     # - jittest # not ready yet: bug 1098508
     - jsreftest
     - marionette
     - mochitest
     - mochitest-chrome
     - mochitest-clipboard
     - mochitest-gpu
     - mochitest-media
+    # - mochitest-webgl1-core
+    # - mochitest-webgl1-ext
+    # - mochitest-webgl2-core
+    # - mochitest-webgl2-ext
     - reftest
     - test-verify
     - xpcshell
 
 android-opt-tests:
     # Robocop tests often fail on Debug builds
     - robocop
 
@@ -358,17 +369,17 @@ android-x86-kvm-tests:
     - crashtest
     - geckoview-junit
     - jsreftest
     - mochitest
     # - mochitest-chrome
     - mochitest-clipboard
     - mochitest-gpu
     - mochitest-media
-    # - mochitest-webgl
+    # - mochitest-webgl1-core
     - reftest
     - test-verify
 
 devtools-tests:
     - mochitest-devtools-chrome
 
 mochitest-headless:
     - mochitest-plain-headless
--- a/taskcluster/taskgraph/test/test_try_option_syntax.py
+++ b/taskcluster/taskgraph/test/test_try_option_syntax.py
@@ -28,17 +28,21 @@ def talos_task(n, tp, bt='opt'):
         'build_type': bt,
     }, {}))
 
 
 tasks = {k: v for k, v in [
     unittest_task('mochitest-browser-chrome', 'linux/opt'),
     unittest_task('mochitest-browser-chrome-e10s', 'linux64/opt'),
     unittest_task('mochitest-chrome', 'linux/debug', 'debug'),
-    unittest_task('mochitest-webgl', 'linux/debug', 'debug'),
+    unittest_task('mochitest-webgl1-core', 'linux/debug', 'debug'),
+    unittest_task('mochitest-webgl1-ext', 'linux/debug', 'debug'),
+    unittest_task('mochitest-webgl2-core', 'linux/debug', 'debug'),
+    unittest_task('mochitest-webgl2-ext', 'linux/debug', 'debug'),
+    unittest_task('mochitest-webgl2-deqp', 'linux/debug', 'debug'),
     unittest_task('extra1', 'linux', 'debug/opt'),
     unittest_task('extra2', 'win32/opt'),
     unittest_task('crashtest-e10s', 'linux/other'),
     unittest_task('gtest', 'linux64/asan'),
     talos_task('dromaeojs', 'linux64/psan'),
     unittest_task('extra3', 'linux/opt'),
     unittest_task('extra4', 'linux64/debug', 'debug'),
     unittest_task('extra5', 'linux/this'),
@@ -173,41 +177,47 @@ class TestTryOptionSyntax(unittest.TestC
 
     def test_u_all(self):
         "-u all sets unittests=[..whole list..]"
         parameters = {'try_options': parse_message('try: -u all')}
         tos = TryOptionSyntax(parameters, graph_with_jobs, GRAPH_CONFIG)
         self.assertEqual(sorted(tos.unittests), sorted([{'test': t} for t in unittest_tasks]))
 
     def test_u_single(self):
-        "-u mochitest-webgl sets unittests=[mochitest-webgl]"
-        parameters = {'try_options': parse_message('try: -u mochitest-webgl')}
+        "-u mochitest-webgl1-core sets unittests=[mochitest-webgl1-core]"
+        parameters = {'try_options': parse_message('try: -u mochitest-webgl1-core')}
         tos = TryOptionSyntax(parameters, graph_with_jobs, GRAPH_CONFIG)
-        self.assertEqual(sorted(tos.unittests), sorted([{'test': 'mochitest-webgl'}]))
+        self.assertEqual(sorted(tos.unittests), sorted([{'test': 'mochitest-webgl1-core'}]))
 
     def test_u_alias(self):
-        "-u mochitest-gl sets unittests=[mochitest-webgl]"
+        "-u mochitest-gl sets unittests=[mochitest-webgl*]"
         parameters = {'try_options': parse_message('try: -u mochitest-gl')}
         tos = TryOptionSyntax(parameters, graph_with_jobs, GRAPH_CONFIG)
-        self.assertEqual(sorted(tos.unittests), sorted([{'test': 'mochitest-webgl'}]))
+        self.assertEqual(sorted(tos.unittests), sorted([{'test': t} for t in [
+            'mochitest-webgl1-core',
+            'mochitest-webgl1-ext',
+            'mochitest-webgl2-core',
+            'mochitest-webgl2-ext',
+            'mochitest-webgl2-deqp',
+        ]]))
 
     def test_u_multi_alias(self):
         "-u e10s sets unittests=[all e10s unittests]"
         parameters = {'try_options': parse_message('try: -u e10s')}
         tos = TryOptionSyntax(parameters, graph_with_jobs, GRAPH_CONFIG)
         self.assertEqual(sorted(tos.unittests), sorted([
             {'test': t} for t in unittest_tasks if 'e10s' in t
         ]))
 
     def test_u_commas(self):
-        "-u mochitest-webgl,gtest sets unittests=both"
-        parameters = {'try_options': parse_message('try: -u mochitest-webgl,gtest')}
+        "-u mochitest-webgl1-core,gtest sets unittests=both"
+        parameters = {'try_options': parse_message('try: -u mochitest-webgl1-core,gtest')}
         tos = TryOptionSyntax(parameters, graph_with_jobs, GRAPH_CONFIG)
         self.assertEqual(sorted(tos.unittests), sorted([
-            {'test': 'mochitest-webgl'},
+            {'test': 'mochitest-webgl1-core'},
             {'test': 'gtest'},
         ]))
 
     def test_u_chunks(self):
         "-u gtest-3,gtest-4 selects the third and fourth chunk of gtest"
         parameters = {'try_options': parse_message('try: -u gtest-3,gtest-4')}
         tos = TryOptionSyntax(parameters, graph_with_jobs, GRAPH_CONFIG)
         self.assertEqual(sorted(tos.unittests), sorted([
--- a/testing/mozbase/moztest/moztest/resolve.py
+++ b/testing/mozbase/moztest/moztest/resolve.py
@@ -17,16 +17,27 @@ from mozbuild.frontend.reader import Bui
 from mozversioncontrol import get_repository_object
 
 here = os.path.abspath(os.path.dirname(__file__))
 
 
 MOCHITEST_CHUNK_BY_DIR = 4
 MOCHITEST_TOTAL_CHUNKS = 5
 
+
+def WebglSuite(name):
+    return {
+        'aliases': (name,),
+        'mach_command': 'mochitest',
+        'kwargs': {'flavor': 'plain', 'subsuite': name, 'test_paths': None},
+        'task_regex': ['mochitest-' + name + '(?:-e10s)?(?:-1)?$',
+                       'test-verify(?:-gpu)?(?:-e10s)?(?:-1)?$'],
+    }
+
+
 TEST_SUITES = {
     'cppunittest': {
         'aliases': ('cpp',),
         'mach_command': 'cppunittest',
         'kwargs': {'test_file': None},
     },
     'crashtest': {
         'aliases': ('c', 'rc'),
@@ -116,23 +127,21 @@ TEST_SUITES = {
                        'test-verify(?:-e10s)?(?:-1)?$'],
     },
     'mochitest-screenshots': {
         'aliases': ('ss', 'screenshots-chrome'),
         'mach_command': 'mochitest',
         'kwargs': {'flavor': 'browser-chrome', 'subsuite': 'screenshots', 'test_paths': None},
         'task_regex': ['browser-screenshots(?:-e10s)?(?:-1)?$'],
     },
-    'mochitest-webgl': {
-        'aliases': ('webgl',),
-        'mach_command': 'mochitest',
-        'kwargs': {'flavor': 'plain', 'subsuite': 'webgl', 'test_paths': None},
-        'task_regex': ['mochitest-webgl(?:-e10s)?(?:-1)?$',
-                       'test-verify(?:-gpu)?(?:-e10s)?(?:-1)?$'],
-    },
+    'mochitest-webgl1-core': WebglSuite('webgl1-core'),
+    'mochitest-webgl1-ext': WebglSuite('webgl1-ext'),
+    'mochitest-webgl2-core': WebglSuite('webgl2-core'),
+    'mochitest-webgl2-ext': WebglSuite('webgl2-ext'),
+    'mochitest-webgl2-deqp': WebglSuite('webgl2-deqp'),
     'python': {
         'mach_command': 'python-test',
         'kwargs': {'tests': None},
     },
     'reftest': {
         'aliases': ('rr',),
         'mach_command': 'reftest',
         'kwargs': {'tests': None},
@@ -200,17 +209,21 @@ for i in range(1, MOCHITEST_TOTAL_CHUNKS
     ('browser-chrome', 'gpu'): 'mochitest-gpu',
     ('browser-chrome', 'screenshots'): 'mochitest-screenshots',
     ('chrome', 'clipboard'): 'mochitest-clipboard',
     ('chrome', 'gpu'): 'mochitest-gpu',
     ('mochitest', 'clipboard'): 'mochitest-clipboard',
     ('mochitest', 'gpu'): 'mochitest-gpu',
     ('mochitest', 'media'): 'mochitest-media',
     ('mochitest', 'robocop'): 'robocop',
-    ('mochitest', 'webgl'): 'mochitest-webgl',
+    ('mochitest', 'webgl1-core'): 'mochitest-webgl1-core',
+    ('mochitest', 'webgl1-ext'): 'mochitest-webgl1-ext',
+    ('mochitest', 'webgl2-core'): 'mochitest-webgl2-core',
+    ('mochitest', 'webgl2-ext'): 'mochitest-webgl2-ext',
+    ('mochitest', 'webgl2-deqp'): 'mochitest-webgl2-deqp',
 }
 
 
 def get_suite_definition(flavor, subsuite=None, strict=False):
     """Return a suite definition given a flavor and optional subsuite.
 
     If strict is True, a subsuite must have its own entry in TEST_SUITES.
     Otherwise, the entry for 'flavor' will be returned with the 'subsuite'
--- a/testing/mozharness/configs/android/android_common.py
+++ b/testing/mozharness/configs/android/android_common.py
@@ -1,15 +1,36 @@
 # Shared/common mozharness configuration for Android unit tests.
 #
 # This configuration should be combined with platform-specific mozharness
 # configuration such as androidarm_4_3.py, or similar.
 
 import os
 
+
+def WebglSuite(name):
+    return {
+        "run_filename": "runtestsremote.py",
+        "testsdir": "mochitest",
+        "options": [
+            "--app=%(app)s",
+            "--remote-webserver=%(remote_webserver)s",
+            "--xre-path=%(xre_path)s",
+            "--utility-path=%(utility_path)s",
+            "--certificate-path=%(certs_path)s",
+            "--symbols-path=%(symbols_path)s",
+            "--quiet",
+            "--log-raw=%(raw_log_file)s",
+            "--log-errorsummary=%(error_summary_file)s",
+            "--screenshot-on-fail",
+            "--subsuite=" + name,
+        ],
+    }
+
+
 config = {
     "default_actions": [
         'clobber',
         'setup-avds',
         'start-emulator',
         'download-and-extract',
         'create-virtualenv',
         'verify-emulator',
@@ -38,33 +59,21 @@ config = {
                 "--quiet",
                 "--log-raw=%(raw_log_file)s",
                 "--log-errorsummary=%(error_summary_file)s",
                 "--extra-profile-file=fonts",
                 "--extra-profile-file=hyphenation",
                 "--screenshot-on-fail",
             ],
         },
-        "mochitest-gl": {
-            "run_filename": "runtestsremote.py",
-            "testsdir": "mochitest",
-            "options": [
-                "--app=%(app)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--certificate-path=%(certs_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--screenshot-on-fail",
-                "--subsuite=webgl",
-            ],
-        },
+        "mochitest-webgl1-core": WebglSuite("webgl1-core"),
+        "mochitest-webgl2-core": WebglSuite("webgl2-core"),
+        "mochitest-webgl1-ext": WebglSuite("webgl1-ext"),
+        "mochitest-webgl2-ext": WebglSuite("webgl2-ext"),
+        "mochitest-webgl2-deqp": WebglSuite("webgl2-deqp"),
         "mochitest-chrome": {
             "run_filename": "runtestsremote.py",
             "testsdir": "mochitest",
             "options": [
                 "--app=%(app)s",
                 "--remote-webserver=%(remote_webserver)s",
                 "--xre-path=%(xre_path)s",
                 "--utility-path=%(utility_path)s",
--- a/testing/mozharness/configs/android/android_hw.py
+++ b/testing/mozharness/configs/android/android_hw.py
@@ -1,10 +1,36 @@
 import os
 
+
+def WebglSuite(name):
+    return {
+        "run_filename": "runtestsremote.py",
+        "testsdir": "mochitest",
+        "options": [
+            "--app=%(app)s",
+            "--remote-webserver=%(remote_webserver)s",
+            "--xre-path=%(xre_path)s",
+            "--utility-path=%(utility_path)s",
+            "--http-port=%(http_port)s",
+            "--ssl-port=%(ssl_port)s",
+            "--certificate-path=%(certs_path)s",
+            "--symbols-path=%(symbols_path)s",
+            "--quiet",
+            "--log-raw=%(raw_log_file)s",
+            "--log-raw-level=%(log_raw_level)s",
+            "--log-errorsummary=%(error_summary_file)s",
+            "--log-tbpl-level=%(log_tbpl_level)s",
+            "--screenshot-on-fail",
+            "--subsuite=" + name,
+            "--deviceSerial=%(device_serial)s",
+        ]
+    }
+
+
 config = {
     "robocop_package_name": "org.mozilla.roboexample.test",
     "marionette_address": "%(device_ip)s:2828",
     "marionette_test_manifest": "unit-tests.ini",
     "exes": {},
     "log_tbpl_level": "info",
     "log_raw_level": "info",
     "env": {
@@ -52,38 +78,21 @@ config = {
                 "--log-errorsummary=%(error_summary_file)s",
                 "--log-tbpl-level=%(log_tbpl_level)s",
                 "--extra-profile-file=fonts",
                 "--extra-profile-file=hyphenation",
                 "--screenshot-on-fail",
                 "--deviceSerial=%(device_serial)s",
             ],
         },
-        "mochitest-gl": {
-            "run_filename": "runtestsremote.py",
-            "testsdir": "mochitest",
-            "options": [
-                "--app=%(app)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--certificate-path=%(certs_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-raw-level=%(log_raw_level)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--log-tbpl-level=%(log_tbpl_level)s",
-                "--screenshot-on-fail",
-                "--subsuite=webgl",
-                "--deviceSerial=%(device_serial)s",
-            ],
-        },
+        "mochitest-webgl1-core": WebglSuite("webgl1-core"),
+        "mochitest-webgl2-core": WebglSuite("webgl2-core"),
+        "mochitest-webgl1-ext": WebglSuite("webgl1-ext"),
+        "mochitest-webgl2-ext": WebglSuite("webgl2-ext"),
+        "mochitest-webgl2-deqp": WebglSuite("webgl2-deqp"),
         "mochitest-chrome": {
             "run_filename": "runtestsremote.py",
             "testsdir": "mochitest",
             "options": [
                 "--app=%(app)s",
                 "--remote-webserver=%(remote_webserver)s",
                 "--xre-path=%(xre_path)s",
                 "--utility-path=%(utility_path)s",
--- a/testing/mozharness/configs/unittests/linux_unittest.py
+++ b/testing/mozharness/configs/unittests/linux_unittest.py
@@ -177,17 +177,21 @@ config = {
         "browser-chrome": ["--flavor=browser"],
         "browser-chrome-gpu": ["--flavor=browser", "--subsuite=gpu"],
         "browser-chrome-clipboard": ["--flavor=browser", "--subsuite=clipboard"],
         "browser-chrome-chunked": ["--flavor=browser", "--chunk-by-runtime"],
         "browser-chrome-addons": ["--flavor=browser", "--chunk-by-runtime", "--tag=addons"],
         "browser-chrome-coverage": ["--flavor=browser", "--chunk-by-runtime", "--timeout=1200"],
         "browser-chrome-screenshots": ["--flavor=browser", "--subsuite=screenshots"],
         "browser-chrome-instrumentation": ["--flavor=browser"],
-        "mochitest-gl": ["--subsuite=webgl"],
+        "mochitest-webgl1-core": ["--subsuite=webgl1-core"],
+        "mochitest-webgl1-ext": ["--subsuite=webgl1-ext"],
+        "mochitest-webgl2-core": ["--subsuite=webgl2-core"],
+        "mochitest-webgl2-ext": ["--subsuite=webgl2-ext"],
+        "mochitest-webgl2-deqp": ["--subsuite=webgl2-deqp"],
         "mochitest-devtools-chrome": ["--flavor=browser", "--subsuite=devtools"],
         "mochitest-devtools-chrome-chunked": ["--flavor=browser", "--subsuite=devtools", "--chunk-by-runtime"],
         "mochitest-devtools-chrome-coverage": ["--flavor=browser", "--subsuite=devtools", "--chunk-by-runtime", "--timeout=1200"],
         "a11y": ["--flavor=a11y"],
     },
     # local reftest suites
     "all_reftest_suites": {
         "crashtest": {
--- a/testing/mozharness/configs/unittests/mac_unittest.py
+++ b/testing/mozharness/configs/unittests/mac_unittest.py
@@ -141,17 +141,21 @@ config = {
         "chrome-chunked": ["--flavor=chrome", "--chunk-by-dir=4"],
         "browser-chrome": ["--flavor=browser"],
         "browser-chrome-gpu": ["--flavor=browser", "--subsuite=gpu"],
         "browser-chrome-clipboard": ["--flavor=browser", "--subsuite=clipboard"],
         "browser-chrome-chunked": ["--flavor=browser", "--chunk-by-runtime"],
         "browser-chrome-addons": ["--flavor=browser", "--chunk-by-runtime", "--tag=addons"],
         "browser-chrome-screenshots": ["--flavor=browser", "--subsuite=screenshots"],
         "browser-chrome-instrumentation": ["--flavor=browser"],
-        "mochitest-gl": ["--subsuite=webgl"],
+        "mochitest-webgl1-core": ["--subsuite=webgl1-core"],
+        "mochitest-webgl1-ext": ["--subsuite=webgl1-ext"],
+        "mochitest-webgl2-core": ["--subsuite=webgl2-core"],
+        "mochitest-webgl2-ext": ["--subsuite=webgl2-ext"],
+        "mochitest-webgl2-deqp": ["--subsuite=webgl2-deqp"],
         "mochitest-devtools-chrome": ["--flavor=browser", "--subsuite=devtools"],
         "mochitest-devtools-chrome-chunked": ["--flavor=browser", "--subsuite=devtools", "--chunk-by-runtime"],
         "a11y": ["--flavor=a11y"],
     },
     # local reftest suites
     "all_reftest_suites": {
         "crashtest": {
             'options': ["--suite=crashtest"],
--- a/testing/mozharness/configs/unittests/win_taskcluster_unittest.py
+++ b/testing/mozharness/configs/unittests/win_taskcluster_unittest.py
@@ -164,17 +164,21 @@ config = {
         "chrome-chunked": ["--flavor=chrome", "--chunk-by-dir=4"],
         "browser-chrome": ["--flavor=browser"],
         "browser-chrome-gpu": ["--flavor=browser", "--subsuite=gpu"],
         "browser-chrome-clipboard": ["--flavor=browser", "--subsuite=clipboard"],
         "browser-chrome-chunked": ["--flavor=browser", "--chunk-by-runtime"],
         "browser-chrome-addons": ["--flavor=browser", "--chunk-by-runtime", "--tag=addons"],
         "browser-chrome-screenshots": ["--flavor=browser", "--subsuite=screenshots"],
         "browser-chrome-instrumentation": ["--flavor=browser"],
-        "mochitest-gl": ["--subsuite=webgl"],
+        "mochitest-webgl1-core": ["--subsuite=webgl1-core"],
+        "mochitest-webgl1-ext": ["--subsuite=webgl1-ext"],
+        "mochitest-webgl2-core": ["--subsuite=webgl2-core"],
+        "mochitest-webgl2-ext": ["--subsuite=webgl2-ext"],
+        "mochitest-webgl2-deqp": ["--subsuite=webgl2-deqp"],
         "mochitest-devtools-chrome": ["--flavor=browser", "--subsuite=devtools"],
         "mochitest-devtools-chrome-chunked": ["--flavor=browser", "--subsuite=devtools", "--chunk-by-runtime"],
         "mochitest-metro-chrome": ["--flavor=browser", "--metro-immersive"],
         "a11y": ["--flavor=a11y"],
     },
     # local reftest suites
     "all_reftest_suites": {
         "crashtest": {
--- a/testing/mozharness/configs/unittests/win_unittest.py
+++ b/testing/mozharness/configs/unittests/win_unittest.py
@@ -152,17 +152,21 @@ config = {
         "chrome-chunked": ["--flavor=chrome", "--chunk-by-dir=4"],
         "browser-chrome": ["--flavor=browser"],
         "browser-chrome-gpu": ["--flavor=browser", "--subsuite=gpu"],
         "browser-chrome-clipboard": ["--flavor=browser", "--subsuite=clipboard"],
         "browser-chrome-chunked": ["--flavor=browser", "--chunk-by-runtime"],
         "browser-chrome-addons": ["--flavor=browser", "--chunk-by-runtime", "--tag=addons"],
         "browser-chrome-screenshots": ["--flavor=browser", "--subsuite=screenshots"],
         "browser-chrome-instrumentation": ["--flavor=browser"],
-        "mochitest-gl": ["--subsuite=webgl"],
+        "mochitest-webgl1-core": ["--subsuite=webgl1-core"],
+        "mochitest-webgl1-ext": ["--subsuite=webgl1-ext"],
+        "mochitest-webgl2-core": ["--subsuite=webgl2-core"],
+        "mochitest-webgl2-ext": ["--subsuite=webgl2-ext"],
+        "mochitest-webgl2-deqp": ["--subsuite=webgl2-deqp"],
         "mochitest-devtools-chrome": ["--flavor=browser", "--subsuite=devtools"],
         "mochitest-devtools-chrome-chunked": ["--flavor=browser", "--subsuite=devtools", "--chunk-by-runtime"],
         "mochitest-metro-chrome": ["--flavor=browser", "--metro-immersive"],
         "a11y": ["--flavor=a11y"],
     },
     # local reftest suites
     "all_reftest_suites": {
         "crashtest": {
--- a/testing/mozharness/mozharness/mozilla/testing/errors.py
+++ b/testing/mozharness/mozharness/mozilla/testing/errors.py
@@ -23,17 +23,21 @@ from mozharness.base.log import INFO, WA
     'pass_group': "Passed",
     'fail_group': "Failed",
     'known_fail_group': "Todo",
 }
 
 TinderBoxPrintRe = {
     "mochitest_summary": _mochitest_summary,
     "mochitest-chrome_summary": _mochitest_summary,
-    "mochitest-gl_summary": _mochitest_summary,
+    "mochitest-webgl1-core_summary": _mochitest_summary,
+    "mochitest-webgl1-ext_summary": _mochitest_summary,
+    "mochitest-webgl2-core_summary": _mochitest_summary,
+    "mochitest-webgl2-ext_summary": _mochitest_summary,
+    "mochitest-webgl2-deqp_summary": _mochitest_summary,
     "mochitest-media_summary": _mochitest_summary,
     "mochitest-plain-clipboard_summary": _mochitest_summary,
     "mochitest-plain-gpu_summary": _mochitest_summary,
     "marionette_summary": {
         'regex': re.compile(r'''(passed|failed|todo):\ +(\d+)'''),
         'pass_group': "passed",
         'fail_group': "failed",
         'known_fail_group': "todo",
--- a/testing/mozharness/mozharness/mozilla/testing/per_test_base.py
+++ b/testing/mozharness/mozharness/mozilla/testing/per_test_base.py
@@ -107,17 +107,21 @@ class SingleTestMixin(object):
                 ('plain', 'clipboard'): 'plain-clipboard',
                 ('browser-chrome', 'devtools'): 'mochitest-devtools-chrome',
                 ('browser-chrome', 'screenshots'): 'browser-chrome-screenshots',
                 ('plain', 'media'): 'mochitest-media',
                 # below should be on test-verify-gpu job
                 ('browser-chrome', 'gpu'): 'browser-chrome-gpu',
                 ('chrome', 'gpu'): 'chrome-gpu',
                 ('plain', 'gpu'): 'plain-gpu',
-                ('plain', 'webgl'): 'mochitest-gl',
+                ('plain', 'webgl1-core'): 'mochitest-webgl1-core',
+                ('plain', 'webgl1-ext'): 'mochitest-webgl1-ext',
+                ('plain', 'webgl2-core'): 'mochitest-webgl2-core',
+                ('plain', 'webgl2-ext'): 'mochitest-webgl2-ext',
+                ('plain', 'webgl2-deqp'): 'mochitest-webgl2-deqp',
             }
             if entry in subsuite_mapping:
                 suite = subsuite_mapping[entry]
             else:
                 suite = entry[0]
             suite_files = self.suites.get(suite)
             if not suite_files:
                 suite_files = []
--- a/testing/mozharness/mozharness/mozilla/testing/testbase.py
+++ b/testing/mozharness/mozharness/mozilla/testing/testbase.py
@@ -310,17 +310,21 @@ You can set this by specifying --test-ur
         # This is a difference in the convention of the configs more than
         # to how these tests are run, so we pave over these differences here.
         aliases = {
             'robocop': 'mochitest',
             'mochitest-chrome': 'mochitest',
             'mochitest-media': 'mochitest',
             'mochitest-plain-clipboard': 'mochitest',
             'mochitest-plain-gpu': 'mochitest',
-            'mochitest-gl': 'mochitest',
+            'mochitest-webgl1-core': 'mochitest',
+            'mochitest-webgl1-ext': 'mochitest',
+            'mochitest-webgl2-core': 'mochitest',
+            'mochitest-webgl2-ext': 'mochitest',
+            'mochitest-webgl2-deqp': 'mochitest',
             'geckoview': 'mochitest',
             'geckoview-junit': 'mochitest',
             'jsreftest': 'reftest',
             'crashtest': 'reftest',
             'reftest-debug': 'reftest',
             'jsreftest-debug': 'reftest',
             'crashtest-debug': 'reftest',
         }