Bug 1379603 - enable windows hardware tests on try; r?dustin draft
authorRob Thijssen <rthijssen@mozilla.com>
Mon, 10 Jul 2017 13:15:33 +0300
changeset 606883 b14b52589024f79727559e1d6ffb08c3b856a2c2
parent 602297 d9a144b7b6d994fc9a497c53b13f51a2a654d85e
child 636876 8dd9156dbc837c43742de4c22acc44412e458af8
push id67818
push userrthijssen@mozilla.com
push dateTue, 11 Jul 2017 14:34:58 +0000
reviewersdustin
bugs1379603
milestone56.0a1
Bug 1379603 - enable windows hardware tests on try; r?dustin MozReview-Commit-ID: 2yXsMEFOa00
taskcluster/ci/test/test-platforms.yml
taskcluster/ci/test/test-sets.yml
taskcluster/ci/test/tests.yml
taskcluster/taskgraph/transforms/job/mozharness_test.py
taskcluster/taskgraph/transforms/tests.py
taskcluster/taskgraph/util/workertypes.py
testing/mozharness/configs/talos/windows_taskcluster_config.py
--- a/taskcluster/ci/test/test-platforms.yml
+++ b/taskcluster/ci/test/test-platforms.yml
@@ -127,65 +127,45 @@ linux64-ccov/opt:
 linux64-jsdcov/opt:
     build-platform: linux64-jsdcov/opt
     test-sets:
         - jsdcov-code-coverage-tests
 
 ##
 # Windows platforms (matching /windows.*/)
 
-# win32 vm
-windows7-32-vm/debug:
-    build-platform: win32/debug
-    test-sets:
-        - windows-vm-tests
-        - headless
-windows7-32-vm/opt:
-    build-platform: win32/opt
-    test-sets:
-        - windows-vm-tests
-        - awsy
-        - desktop-screenshot-capture
-        - headless
-
-# win32 gpu
+# win32
 windows7-32/debug:
     build-platform: win32/debug
     test-sets:
-        - windows-gpu-tests
+        - headless
+        - windows-tests
 windows7-32/opt:
     build-platform: win32/opt
     test-sets:
-        - windows-gpu-tests
-        - desktop-screenshot-capture
-
-# win64 vm
-windows10-64-vm/debug:
-    build-platform: win64/debug
-    test-sets:
-        - windows-vm-tests
-        - headless
-windows10-64-vm/opt:
-    build-platform: win64/opt
-    test-sets:
-        - windows-vm-tests
         - awsy
         - desktop-screenshot-capture
         - headless
+        - windows-talos
+        - windows-tests
 
-# win64 gpu
+# win64
 windows10-64/debug:
     build-platform: win64/debug
     test-sets:
-        - windows-gpu-tests
+        - headless
+        - windows-tests
 windows10-64/opt:
     build-platform: win64/opt
     test-sets:
-        - windows-gpu-tests
+        - awsy
         - desktop-screenshot-capture
+        - headless
+        - windows-talos
+        - windows-tests
 
 windows10-64-asan/opt:
     build-platform: win64-asan/opt
     test-sets:
         - common-tests     
 
 ##
 # MacOS X platforms (matching /macosx.*/)
--- a/taskcluster/ci/test/test-sets.yml
+++ b/taskcluster/ci/test/test-sets.yml
@@ -98,48 +98,52 @@ qr-tests:
     - xpcshell
 
 jsdcov-code-coverage-tests:
     - mochitest
     - mochitest-browser-chrome
     - mochitest-devtools-chrome
     - xpcshell
 
-##
-# Test sets still being greened up in various ways
-
-windows-vm-tests:
+windows-tests:
     - cppunit
     - crashtest
     - firefox-ui-functional-local
     - firefox-ui-functional-remote
     - gtest
     - jittest
     - jsreftest
     - marionette
     - mochitest
     - mochitest-a11y
     - mochitest-browser-chrome
+    - mochitest-chrome
+    - mochitest-clipboard
     - mochitest-devtools-chrome
+    - mochitest-gpu
     - mochitest-jetpack
     - mochitest-media
+    - mochitest-webgl
+    - reftest
+    - reftest-no-accel
     - web-platform-tests
     - web-platform-tests-reftests
-    #- xpcshell
+    - xpcshell
 
-windows-gpu-tests:
-    - reftest
-    - reftest-no-accel
-    - mochitest-gpu
-    - mochitest-webgl
-
-# these tests currently run on hardware, but may migrate above when validated
-# see https://bugzilla.mozilla.org/show_bug.cgi?id=1280474#c36
-#    - mochitest-chrome
-#    - mochitest-clipboard
+windows-talos:
+    - talos-chrome
+    - talos-dromaeojs
+    - talos-g1
+    - talos-g2
+    - talos-g4
+    - talos-g5
+    - talos-other
+    - talos-perf-reftest
+    - talos-svgr
+    - talos-tp5o
 
 macosx64-tests:
     - cppunit
     - crashtest
     - firefox-ui-functional-local
     - firefox-ui-functional-remote
     - gtest
     - jittest
--- a/taskcluster/ci/test/tests.yml
+++ b/taskcluster/ci/test/tests.yml
@@ -28,17 +28,16 @@ cppunit:
     description: "CPP Unit Tests"
     suite: cppunittest
     treeherder-symbol: tc(Cpp)
     e10s: false
     docker-image: {"in-tree": "desktop1604-test"}
     run-on-projects:
         by-test-platform:
             windows.*: ['mozilla-central', 'try']
-            windows7-32-vm/debug: built-projects
             windows7-32/debug: built-projects
             windows10-64-asan/opt: []  # as an exception to windows.*
             linux64-qr/.*: ['mozilla-central', 'try']
             default: built-projects
     mozharness:
         by-test-platform:
             android.*:
                 script: android_emulator_unittest.py
@@ -177,17 +176,16 @@ gtest:
     suite: gtest
     treeherder-symbol: tc(GTest)
     e10s: false
     instance-size: xlarge
     docker-image: {"in-tree": "desktop1604-test"}
     run-on-projects:
         by-test-platform:
             windows.*: ['mozilla-central', 'try']
-            windows7-32-vm/debug: built-projects
             windows7-32/debug: built-projects
             linux64-qr/.*: ['mozilla-central', 'try']
             default: built-projects
     mozharness:
         script: desktop_unittest.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
@@ -266,17 +264,16 @@ jsreftest:
     max-run-time:
         by-test-platform:
             android.*: 7200
             default: 3600
     run-on-projects:
         by-test-platform:
             windows10-64-asan/opt: built-projects  # exception to windows.*, below
             windows.*: ['mozilla-central', 'try']
-            windows7-32-vm/debug: built-projects
             windows7-32/debug: built-projects
             default: built-projects
     mozharness:
         by-test-platform:
             android.*:
                 script: android_emulator_unittest.py
                 no-read-buildbot-config: true
                 config:
@@ -330,17 +327,16 @@ marionette:
             default: 1
     e10s:
         by-test-platform:
             macosx.*: true
             default: both
     run-on-projects:
         by-test-platform:
             windows.*: ['mozilla-central', 'try']
-            windows7-32-vm/debug: built-projects
             windows7-32/debug: built-projects
             default: built-projects
     mozharness:
         by-test-platform:
             android.*:
                 script: android_emulator_unittest.py
                 no-read-buildbot-config: true
                 config:
@@ -476,17 +472,16 @@ mochitest-a11y:
     suite: mochitest/a11y
     treeherder-symbol: tc-M(a11y)
     loopback-video: true
     e10s: false
     docker-image: {"in-tree": "desktop1604-test"}
     run-on-projects:
         by-test-platform:
             windows.*: ['mozilla-central', 'try']
-            windows7-32-vm/debug: built-projects
             windows7-32/debug: built-projects
             linux64-qr/.*: ['mozilla-central', 'try']
             default: built-projects
     mozharness:
         script: desktop_unittest.py
         no-read-buildbot-config: true
         chunked: false
         mochitest-flavor: a11y
@@ -593,31 +588,32 @@ mochitest-browser-screenshots:
     instance-size: legacy
     allow-software-gl-layers: false
 
 mochitest-chrome:
     description: "Mochitest chrome run"
     suite: mochitest/chrome
     treeherder-symbol: tc-M(c)
     loopback-video: true
+    virtualization: hardware
     docker-image: {"in-tree": "desktop1604-test"}
     instance-size:
         by-test-platform:
             android.*: xlarge
             default: default
     chunks:
         by-test-platform:
             android-4.3-arm7-api-15/debug: 4
             android.*: 2
             default: 3
     max-run-time: 3600
     e10s: false
     run-on-projects:
         by-test-platform:
-            windows10.*: []
+            windows.*: ['try']
             default: built-projects
     mozharness:
         by-test-platform:
             android.*:
                 mochitest-flavor: chrome
                 script: android_emulator_unittest.py
                 no-read-buildbot-config: true
                 config:
@@ -671,25 +667,26 @@ mochitest-chrome-style:
         extra-options:
             - --mochitest-suite=chrome-style
 
 mochitest-clipboard:
     description: "Mochitest clipboard run"
     suite: mochitest/clipboard
     treeherder-symbol: tc-M(cl)
     loopback-video: true
+    virtualization: hardware
     docker-image: {"in-tree": "desktop1604-test"}
     instance-size: xlarge
     e10s:
       by-test-platform:
         macosx64/debug: true
         default: both
     run-on-projects:
         by-test-platform:
-            windows10.*: []
+            windows.*: ['try']
             default: built-projects
     mozharness:
         by-test-platform:
             android.*:
                 mochitest-flavor: plain
                 script: android_emulator_unittest.py
                 no-read-buildbot-config: true
                 config:
@@ -733,17 +730,16 @@ mochitest-devtools-chrome:
         by-test-platform:
             windows.*: 8
             macosx.*: 8
             default: 10
     run-on-projects:
         by-test-platform:
             windows10.*: []
             windows7.*: ['mozilla-central', 'try']
-            windows7-32-vm/debug: built-projects
             windows7-32/debug: built-projects
             default: built-projects
     e10s:
         by-test-platform:
             linux64-jsdcov/opt: false
             macosx64/debug: true
             default: both
     mozharness:
@@ -774,16 +770,17 @@ mochitest-devtools-chrome:
     # Bug 1296086: high number of intermittents observed with software GL and large instances
     allow-software-gl-layers: false
 
 mochitest-gpu:
     description: "Mochitest GPU run"
     suite: mochitest/gpu
     treeherder-symbol: tc-M(gpu)
     loopback-video: true
+    virtualization: virtual-with-gpu
     docker-image: {"in-tree": "desktop1604-test"}
     run-on-projects:
         by-test-platform:
             windows10.*: []
             default: built-projects
     e10s:
         by-test-platform:
             windows.*: both
@@ -829,17 +826,16 @@ mochitest-jetpack:
     loopback-video: true
     e10s: false
     max-run-time: 5400
     docker-image: {"in-tree": "desktop1604-test"}
     run-on-projects:
         by-test-platform:
             windows10-64-asan/opt: built-projects  # exception to windows.*, below
             windows.*: ['mozilla-central', 'try']
-            windows7-32-vm/debug: built-projects
             windows7-32/debug: built-projects
             default: built-projects
     mozharness:
         mochitest-flavor: jetpack-package
         script: desktop_unittest.py
         no-read-buildbot-config: true
         chunked: false
         config:
@@ -963,16 +959,17 @@ mochitest-valgrind:
                     - remove_executables.py
         extra-options:
             - --mochitest-suite=valgrind-plain
 
 mochitest-webgl:
     description: "Mochitest webgl run"
     suite: mochitest/mochitest-gl
     treeherder-symbol: tc-M(gl)
+    virtualization: virtual-with-gpu
     docker-image: {"in-tree": "desktop1604-test"}
     run-on-projects:
         by-test-platform:
             windows10.*: []
             default: built-projects
     chunks:
         by-test-platform:
             android.*: 10
@@ -1032,16 +1029,17 @@ reftest:
     run-on-projects:
         by-test-platform:
             windows10.*: []
             default: built-projects
     instance-size:
         by-test-platform:
             android.*: xlarge
             default: default
+    virtualization: virtual-with-gpu
     chunks:
         by-test-platform:
             android-4.3-arm7-api-15/debug: 48
             android.*: 16
             macosx64/opt: 1
             macosx64/debug: 2
             default: 8
     max-run-time:
@@ -1083,16 +1081,17 @@ reftest:
         by-test-platform:
             linux64-qr/.*: 1
             default: default
 
 reftest-no-accel:
     description: "Reftest not accelerated run"
     suite: reftest/reftest-no-accel
     treeherder-symbol: tc-R(Ru)
+    virtualization: virtual-with-gpu
     docker-image: {"in-tree": "desktop1604-test"}
     run-on-projects:
         by-test-platform:
             windows10.*: []
             linux64-qr/.*: ['mozilla-central', 'try']
             default: built-projects
     chunks:
         by-test-platform:
@@ -1182,287 +1181,330 @@ robocop:
         extra-options:
             - --test-suite=robocop
 
 talos-chrome:
     description: "Talos chrome"
     suite: talos
     try-name: chromez
     treeherder-symbol: tc-T(c)
+    virtualization: hardware
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central','try']
             linux64-stylo/.*: ['mozilla-central', 'try']
+            windows.*: ['try']
             default: ['mozilla-beta', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time: 3600
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
         extra-options:
             - --suite=chromez
             - --add-option
             - --webServer,localhost
 
 talos-dromaeojs:
     description: "Talos dromaeojs"
     suite: talos
     try-name: dromaeojs
     treeherder-symbol: tc-T(d)
+    virtualization: hardware
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central','try']
             linux64-stylo/.*: ['mozilla-central', 'try']
+            windows.*: ['try']
             default: ['mozilla-beta', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time: 3600
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
         extra-options:
             - --suite=dromaeojs
             - --add-option
             - --webServer,localhost
 
 talos-g1:
     description: "Talos g1"
     suite: talos
     try-name: g1
     treeherder-symbol: tc-T(g1)
+    virtualization: hardware
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central','try']
             linux64-stylo/.*: ['mozilla-central', 'try']
+            windows.*: ['try']
             default: ['mozilla-beta', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time: 7200
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
         extra-options:
             - --suite=g1
             - --add-option
             - --webServer,localhost
 
 talos-g2:
     description: "Talos g2"
     suite: talos
     try-name: g2
     treeherder-symbol: tc-T(g2)
+    virtualization: hardware
     max-run-time: 7200
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central','try']
             linux64-stylo/.*: ['mozilla-central', 'try']
+            windows.*: ['try']
             default: ['mozilla-beta', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
         extra-options:
             - --suite=g2
             - --add-option
             - --webServer,localhost
 
 talos-g3:
     description: "Talos g3"
     suite: talos
     try-name: g3
     treeherder-symbol: tc-T(g3)
+    virtualization: hardware
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central','try']
             linux64-stylo/.*: ['mozilla-central', 'try']
             default: ['mozilla-beta','mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time: 3600
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
         extra-options:
             - --suite=g3
             - --add-option
             - --webServer,localhost
 
 talos-g4:
     description: "Talos g4"
     suite: talos
     try-name: g4
     treeherder-symbol: tc-T(g4)
+    virtualization: hardware
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central','try']
             linux64-stylo/.*: ['mozilla-central', 'try']
+            windows.*: ['try']
             default: ['mozilla-beta','mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time: 3600
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
         extra-options:
             - --suite=g4
             - --add-option
             - --webServer,localhost
 
 talos-g5:
     description: "Talos g5"
     suite: talos
     try-name: g5
     treeherder-symbol: tc-T(g5)
+    virtualization: hardware
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central','try']
             linux64-stylo/.*: ['mozilla-central', 'try']
+            windows.*: ['try']
             default: ['mozilla-beta', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time: 3600
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
                     - remove_executables.py
         extra-options:
             - --suite=g5
             - --add-option
             - --webServer,localhost
 
 talos-other:
     description: "Talos other"
     suite: talos
     try-name: other
     treeherder-symbol: tc-T(o)
+    virtualization: hardware
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central','try']
             linux64-stylo/.*: ['mozilla-central', 'try']
+            windows.*: ['try']
             default: ['mozilla-beta','mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time: 3600
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
         extra-options:
             - --suite=other
             - --add-option
             - --webServer,localhost
 
 talos-perf-reftest:
     description: "Talos perf-reftest"
     suite: talos
     try-name: perf-reftest
     treeherder-symbol: tc-T(p)
+    virtualization: hardware
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central', 'try']
             linux64-stylo/.*: ['mozilla-central', 'try']
+            windows.*: ['try']
             default: ['mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time: 3600
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
         extra-options:
             - --suite=perf-reftest
 
 talos-svgr:
     description: "Talos svgr"
     suite: talos
     try-name: svgr
     treeherder-symbol: tc-T(s)
+    virtualization: hardware
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central','try']
             linux64-stylo/.*: ['mozilla-central', 'try']
+            windows.*: ['try']
             default: ['mozilla-beta', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time: 3600
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
         extra-options:
             - --suite=svgr
             - --add-option
             - --webServer,localhost
 
 talos-tp5o:
     description: "Talos tp5o"
     suite: talos
     try-name: tp5o
     treeherder-symbol: tc-T(tp)
+    virtualization: hardware
     run-on-projects:
         by-test-platform:
             linux64-stylo-sequential/.*: ['mozilla-central','try']
             linux64-stylo/.*: ['mozilla-central', 'try']
+            windows.*: ['try']
             default: ['mozilla-beta', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time: 3600
     e10s: true
     mozharness:
         script: talos_script.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
+                windows.*:
+                    - talos/windows_taskcluster_config.py
                 default:
                     - talos/linux_config.py
         extra-options:
             - --suite=tp5o
             - --add-option
             - --webServer,localhost
 
 web-platform-tests:
@@ -1480,17 +1522,16 @@ web-platform-tests:
             default: both
     max-run-time: 7200
     instance-size: xlarge
     docker-image: {"in-tree": "desktop1604-test"}
     run-on-projects:
         by-test-platform:
             windows10.*: ['mozilla-central', 'try']
             windows7.*: ['mozilla-central', 'try']
-            windows7-32-vm/debug: built-projects
             windows7-32/debug: built-projects
             default: built-projects
     mozharness:
         script: web_platform_tests.py
         no-read-buildbot-config: true
         chunked: true
         config:
             by-test-platform:
@@ -1514,17 +1555,16 @@ web-platform-tests-reftests:
         by-test-platform:
             macosx.*: true
             default: both
     docker-image: {"in-tree": "desktop1604-test"}
     run-on-projects:
         by-test-platform:
             windows10.*: ['mozilla-central', 'try']
             windows7.*: ['mozilla-central', 'try']
-            windows7-32-vm/debug: built-projects
             windows7-32/debug: built-projects
             default: built-projects
     mozharness:
         script: web_platform_tests.py
         no-read-buildbot-config: true
         config:
             by-test-platform:
                 windows.*:
--- a/taskcluster/taskgraph/transforms/job/mozharness_test.py
+++ b/taskcluster/taskgraph/transforms/job/mozharness_test.py
@@ -27,16 +27,18 @@ BUILDER_NAME_PREFIX = {
     'linux64-jsdcov': 'Ubuntu Code Coverage VM 12.04 x64',
     'linux64-stylo': 'Ubuntu VM 12.04 x64',
     'linux64-devedition-nightly': 'Ubuntu VM 12.04 x64 DevEdition',
     'macosx64': 'Rev7 MacOSX Yosemite 10.10.5',
     'macosx64-devedition': 'Rev7 MacOSX Yosemite 10.10.5 DevEdition',
     'android-4.3-arm7-api-15': 'Android 4.3 armv7 API 15+',
     'android-4.2-x86': 'Android 4.2 x86 Emulator',
     'android-4.3-arm7-api-15-gradle': 'Android 4.3 armv7 API 15+',
+    'win32': 'Windows 7 x86',
+    'win64': 'Windows 10 x64',
 }
 
 test_description_schema = {str(k): v for k, v in test_description_schema.schema.iteritems()}
 
 mozharness_test_run_schema = Schema({
     Required('using'): 'mozharness-test',
     Required('test'): test_description_schema,
 })
--- a/taskcluster/taskgraph/transforms/tests.py
+++ b/taskcluster/taskgraph/transforms/tests.py
@@ -39,25 +39,36 @@ import logging
 # default worker types keyed by instance-size
 LINUX_WORKER_TYPES = {
     'large': 'aws-provisioner-v1/gecko-t-linux-large',
     'xlarge': 'aws-provisioner-v1/gecko-t-linux-xlarge',
     'legacy': 'aws-provisioner-v1/gecko-t-linux-medium',
     'default': 'aws-provisioner-v1/gecko-t-linux-large',
 }
 
-# windows / os x worker types keyed by test-platform
+# windows worker types keyed by test-platform and virtualization
 WINDOWS_WORKER_TYPES = {
-    'windows7-32-vm': 'aws-provisioner-v1/gecko-t-win7-32',
-    'windows7-32': 'aws-provisioner-v1/gecko-t-win7-32-gpu',
-    'windows10-64-vm': 'aws-provisioner-v1/gecko-t-win10-64',
-    'windows10-64': 'aws-provisioner-v1/gecko-t-win10-64-gpu',
-    'windows10-64-asan': 'aws-provisioner-v1/gecko-t-win10-64-gpu',
+    'windows7-32': {
+      'virtual': 'aws-provisioner-v1/gecko-t-win7-32',
+      'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win7-32-gpu',
+      'hardware': 'releng-hardware/gecko-t-win7-32-hw',
+    },
+    'windows10-64': {
+      'virtual': 'aws-provisioner-v1/gecko-t-win10-64',
+      'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win10-64-gpu',
+      'hardware': 'releng-hardware/gecko-t-win10-64-hw',
+    },
+    'windows10-64-asan': {
+      'virtual': 'aws-provisioner-v1/gecko-t-win10-64',
+      'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win10-64-gpu',
+      'hardware': 'releng-hardware/gecko-t-win10-64-hw',
+    },
 }
 
+# os x worker types keyed by test-platform
 MACOSX_WORKER_TYPES = {
     'macosx64': 'releng-hardware/gecko-t-osx-1010',
 }
 
 logger = logging.getLogger(__name__)
 
 transforms = TransformSequence()
 
@@ -138,16 +149,21 @@ test_description_schema = Schema({
     # Whether the task should run with WebRender enabled or not.
     Optional('webrender', default=False): bool,
 
     # The EC2 instance size to run these tests on.
     Required('instance-size', default='default'): optionally_keyed_by(
         'test-platform',
         Any('default', 'large', 'xlarge', 'legacy')),
 
+    # type of virtualization or hardware required by test.
+    Required('virtualization', default='virtual'): optionally_keyed_by(
+        'test-platform',
+        Any('virtual', 'virtual-with-gpu', 'hardware')),
+
     # Whether the task requires loopback audio or video (whatever that may mean
     # on the platform)
     Required('loopback-audio', default=False): bool,
     Required('loopback-video', default=False): bool,
 
     # Whether the test can run using a software GL implementation on Linux
     # using the GL compositor. May not be used with "legacy" sized instances
     # due to poor LLVMPipe performance (bug 1296086).  Defaults to true for
@@ -687,27 +703,29 @@ def parallel_stylo_tests(config, tests):
                               .append('--parallel-stylo-traversal')
             yield test
 
 
 @transforms.add
 def set_worker_type(config, tests):
     """Set the worker type based on the test platform."""
     for test in tests:
-        # during the taskcluuster migration, this is a bit tortured, but it
+        # during the taskcluster migration, this is a bit tortured, but it
         # will get simpler eventually!
         test_platform = test['test-platform']
         if test_platform.startswith('macosx'):
             # note that some portion of these will be allocated to BBB below
             test['worker-type'] = MACOSX_WORKER_TYPES['macosx64']
         elif test_platform.startswith('win'):
-            if test.get('suite', '') == 'talos':
+            if test.get('suite', '') == 'talos' and \
+                    not any('taskcluster' in cfg for cfg in test['mozharness']['config']):
                 test['worker-type'] = 'buildbot-bridge/buildbot-bridge'
             else:
-                test['worker-type'] = WINDOWS_WORKER_TYPES[test_platform.split('/')[0]]
+                test['worker-type'] = \
+                    WINDOWS_WORKER_TYPES[test_platform.split('/')[0]][test['virtualization']]
         elif test_platform.startswith('linux') or test_platform.startswith('android'):
             if test.get('suite', '') == 'talos':
                 if config.config['args'].taskcluster_worker:
                     test['worker-type'] = 'releng-hardware/gecko-t-linux-talos'
                 else:
                     test['worker-type'] = 'buildbot-bridge/buildbot-bridge'
             else:
                 test['worker-type'] = LINUX_WORKER_TYPES[test['instance-size']]
--- a/taskcluster/taskgraph/util/workertypes.py
+++ b/taskcluster/taskgraph/util/workertypes.py
@@ -19,18 +19,20 @@ WORKER_TYPES = {
     'aws-provisioner-v1/gecko-3-b-macosx64': ('docker-worker', 'linux'),
     'aws-provisioner-v1/gecko-3-b-win2012': ('generic-worker', 'windows'),
     'aws-provisioner-v1/gecko-symbol-upload': ('docker-worker', 'linux'),
     'aws-provisioner-v1/gecko-t-linux-large': ('docker-worker', 'linux'),
     'aws-provisioner-v1/gecko-t-linux-medium': ('docker-worker', 'linux'),
     'aws-provisioner-v1/gecko-t-linux-xlarge': ('docker-worker', 'linux'),
     'aws-provisioner-v1/gecko-t-win10-64': ('generic-worker', 'windows'),
     'aws-provisioner-v1/gecko-t-win10-64-gpu': ('generic-worker', 'windows'),
+    'releng-hardware/gecko-t-win10-64-hw': ('generic-worker', 'windows'),
     'aws-provisioner-v1/gecko-t-win7-32': ('generic-worker', 'windows'),
     'aws-provisioner-v1/gecko-t-win7-32-gpu': ('generic-worker', 'windows'),
+    'releng-hardware/gecko-t-win7-32-hw': ('generic-worker', 'windows'),
     'aws-provisioner-v1/taskcluster-generic': ('docker-worker', 'linux'),
     'buildbot-bridge/buildbot-bridge': ('buildbot-bridge', None),
     'invalid/invalid': ('invalid', None),
     'null-provisioner/human-breakpoint': ('push-apk-breakpoint', None),
     'null-provisioner/human-breakpoint': ('push-apk-breakpoint', None),
     'releng-hardware/gecko-t-linux-talos': ('native-engine', 'linux'),
     'scriptworker-prov-v1/balrogworker-v1': ('balrog', None),
     'scriptworker-prov-v1/beetmoverworker-v1': ('beetmover', None),
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/talos/windows_taskcluster_config.py
@@ -0,0 +1,55 @@
+import os
+import socket
+
+PYTHON = sys.executable
+PYTHON_DLL = 'c:/mozilla-build/python/python27.dll'
+VENV_PATH = os.path.join(os.getcwd(), 'venv')
+
+config = {
+    "log_name": "talos",
+    "buildbot_json_path": "buildprops.json",
+    "installer_path": "installer.exe",
+    "virtualenv_path": VENV_PATH,
+    "virtualenv_python_dll": PYTHON_DLL,
+    "pip_index": False,
+    "find_links": [
+        "http://pypi.pub.build.mozilla.org/pub",
+    ],
+    "virtualenv_modules": ['pypiwin32', 'talos', 'mozinstall'],
+    "exes": {
+        'python': PYTHON,
+        'virtualenv': [
+            sys.executable,
+            os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
+        ],
+        'mozinstall': ['%s/scripts/python' % VENV_PATH,
+                       '%s/scripts/mozinstall-script.py' % VENV_PATH],
+        'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg'),
+        'tooltool.py': [PYTHON, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
+    },
+    "title": socket.gethostname().split('.')[0],
+    "default_actions": [
+        "populate-webroot",
+        "create-virtualenv",
+        "install",
+        "setup-mitmproxy",
+        "run-tests",
+    ],
+    "default_blob_upload_servers": [
+        "https://blobupload.elasticbeanstalk.com",
+    ],
+    "blob_uploader_auth_file": 'C:/builds/oauth.txt',
+    "metro_harness_path_frmt": "%(metro_base_path)s/metro/metrotestharness.exe",
+    "download_minidump_stackwalk": True,
+    "tooltool_cache": os.path.join('Y:\\', 'tooltool-cache'),
+    "minidump_stackwalk_path": "win32-minidump_stackwalk.exe",
+    "minidump_tooltool_manifest_path": "config/tooltool-manifests/win32/releng.manifest",
+    "python3_manifest": {
+        "win32": "python3.manifest",
+        "win64": "python3_x64.manifest",
+    },
+    "env": {
+        # python3 requires C runtime, found in firefox installation; see bug 1361732
+        "PATH": "%(PATH)s;%(CD)s\\build\\application\\firefox;"
+    }
+}