Bug 1456662 - change ccov opt to debug and add an opt build. r?gps draft
authorRaymond FOrbes <rforbes@mozilla.com>
Mon, 07 May 2018 15:27:04 -0700
changeset 792273 17234171215e724ba9dd4db7c5f67d71913b8f55
parent 791919 b1628ac71fcc15797baec6083650bfcde650f190
push id109057
push userbmo:rforbes@mozilla.com
push dateMon, 07 May 2018 23:15:48 +0000
reviewersgps
bugs1456662
milestone61.0a1
Bug 1456662 - change ccov opt to debug and add an opt build. r?gps MozReview-Commit-ID: 1KoeAkJlzD1
browser/config/mozconfigs/linux64/code-coverage
browser/config/mozconfigs/linux64/code-coverage-debug
taskcluster/ci/build/linux.yml
taskcluster/ci/test/talos.yml
taskcluster/ci/test/test-platforms.yml
taskcluster/taskgraph/transforms/tests.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage_debug.py
testing/mozharness/mozharness/mozilla/building/buildbase.py
--- a/browser/config/mozconfigs/linux64/code-coverage
+++ b/browser/config/mozconfigs/linux64/code-coverage
@@ -1,14 +1,14 @@
-. "$topsrcdir/browser/config/mozconfigs/linux64/nightly"
-
-TOOLTOOL_DIR=${TOOLTOOL_DIR:-$topsrcdir}
-
-ac_add_options --disable-install-strip
-ac_add_options --disable-elf-hack
-ac_add_options --enable-debug
-ac_add_options --disable-sandbox
-ac_add_options --disable-profiling
-ac_add_options --enable-coverage
-
-export CFLAGS="--coverage"
-export CXXFLAGS="--coverage"
-export LDFLAGS="--coverage -L$TOOLTOOL_DIR/gtk3/usr/local/lib"
+. "$topsrcdir/browser/config/mozconfigs/linux64/nightly"
+
+TOOLTOOL_DIR=${TOOLTOOL_DIR:-$topsrcdir}
+
+ac_add_options --disable-install-strip
+ac_add_options --disable-elf-hack
+ac_add_options --disable-debug
+ac_add_options --disable-sandbox
+ac_add_options --disable-profiling
+ac_add_options --enable-coverage
+
+export CFLAGS="--coverage"
+export CXXFLAGS="--coverage"
+export LDFLAGS="--coverage -L$TOOLTOOL_DIR/gtk3/usr/local/lib"
new file mode 100644
--- /dev/null
+++ b/browser/config/mozconfigs/linux64/code-coverage-debug
@@ -0,0 +1,14 @@
+. "$topsrcdir/browser/config/mozconfigs/linux64/nightly"
+
+TOOLTOOL_DIR=${TOOLTOOL_DIR:-$topsrcdir}
+
+ac_add_options --disable-install-strip
+ac_add_options --disable-elf-hack
+ac_add_options --enable-debug
+ac_add_options --disable-sandbox
+ac_add_options --disable-profiling
+ac_add_options --enable-coverage
+
+export CFLAGS="--coverage"
+export CXXFLAGS="--coverage"
+export LDFLAGS="--coverage -L$TOOLTOOL_DIR/gtk3/usr/local/lib"
--- a/taskcluster/ci/build/linux.yml
+++ b/taskcluster/ci/build/linux.yml
@@ -861,16 +861,45 @@ linux64-ccov/opt:
         custom-build-variant-cfg: code-coverage
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang-4
         - linux64-rust
         - linux64-gcc
 
+linux64-ccov/debug:
+    description: "Linux64-CCov Debug"
+    index:
+        product: firefox
+        job-name: linux64-ccov-debug
+    treeherder:
+        platform: linux64-ccov/debug
+        symbol: B
+        tier: 2
+    run-on-projects: []
+    worker-type: aws-provisioner-v1/gecko-{level}-b-linux
+    worker:
+        max-run-time: 36000
+    run:
+        using: mozharness
+        actions: [get-secrets build check-test update]
+        config:
+            - builds/releng_base_firefox.py
+            - builds/releng_base_linux_64_builds.py
+        script: "mozharness/scripts/fx_desktop_build.py"
+        secrets: true
+        custom-build-variant-cfg: code-coverage-debug
+        tooltool-downloads: public
+        need-xvfb: true
+    toolchains:
+        - linux64-clang-4
+        - linux64-rust
+        - linux64-gcc
+
 linux64-add-on-devel/opt:
     description: "Linux64 add-on-devel"
     index:
         product: firefox
         job-name: linux64-add-on-devel
     treeherder:
         platform: linux64-add-on-devel/opt
         symbol: B
--- a/taskcluster/ci/test/talos.yml
+++ b/taskcluster/ci/test/talos.yml
@@ -16,17 +16,17 @@ job-defaults:
         config:
             by-test-platform:
                 macosx.*:
                     - talos/mac_config.py
                 windows.*:
                     - talos/windows_config.py
                 windows10-64-ccov/debug:
                     - talos/windows_vm_config.py
-                linux64-ccov/opt:
+                linux64-ccov/*:
                     - talos/linux64_config_taskcluster.py
                 default:
                     - talos/linux_config.py
 
 talos-chrome:
     description: "Talos chrome"
     try-name: chromez
     treeherder-symbol: T(c)
--- a/taskcluster/ci/test/test-platforms.yml
+++ b/taskcluster/ci/test/test-platforms.yml
@@ -106,16 +106,23 @@ linux64-qr/debug:
 
 linux64-ccov/opt:
     build-platform: linux64-ccov/opt
     test-sets:
         - common-tests
         - web-platform-tests
         - awsy
         - talos
+linux64-ccov/debug:
+    build-platform: linux64-ccov/debug
+    test-sets:
+        - common-tests
+        - web-platform-tests
+        - awsy
+        - talos
 linux64-jsdcov/opt:
     build-platform: linux64-jsdcov/opt
     test-sets:
         - jsdcov-code-coverage-tests
 
 ##
 # Windows platforms (matching /windows.*/)
 
--- a/taskcluster/taskgraph/transforms/tests.py
+++ b/taskcluster/taskgraph/transforms/tests.py
@@ -675,17 +675,17 @@ def handle_suite_category(config, tests)
             if not any(arg.startswith(category_arg) for arg in extra):
                 extra.append('{}={}'.format(category_arg, flavor))
 
         yield test
 
 
 @transforms.add
 def enable_code_coverage(config, tests):
-    """Enable code coverage for the linux64-ccov/opt & linux64-jsdcov/opt & win64-ccov/debug
+    """Enable code coverage for the linux64-ccov/debug & linux64-ccov/opt & linux64-jsdcov/opt & win64-ccov/debug
     build-platforms"""
     for test in tests:
         if 'ccov' in test['build-platform'] and not test['test-name'].startswith('test-verify'):
             test['mozharness'].setdefault('extra-options', []).append('--code-coverage')
             test['instance-size'] = 'xlarge'
             # Ensure we don't run on inbound/autoland/beta, but if the test is try only, ignore it
             if 'mozilla-central' in test['run-on-projects'] or \
                     test['run-on-projects'] == 'built-projects':
@@ -794,48 +794,48 @@ def split_chunks(config, tests):
 
 def perfile_number_of_chunks(config, type):
     # A rough estimate of how many chunks we need based on simple rules
     # for determining what a test file is.
 
     # TODO: Make this flexible based on coverage vs verify || test type
     tests_per_chunk = 10.0
 
-    if type.startswith('test-verify-wpt'):
-        file_patterns = ['testing/web-platform/tests/**']
-    elif type.startswith('test-verify-gpu'):
-        file_patterns = ['**/*webgl*/**/test_*',
-                         '**/dom/canvas/**/test_*',
-                         '**/gfx/tests/**/test_*',
+    if type.startswith('test-verify-wpt'):
+        file_patterns = ['testing/web-platform/tests/**']
+    elif type.startswith('test-verify-gpu'):
+        file_patterns = ['**/*webgl*/**/test_*',
+                         '**/dom/canvas/**/test_*',
+                         '**/gfx/tests/**/test_*',
                          '**/devtools/canvasdebugger/**/browser_*',
                          '**/reftest*/**']
-    elif type.startswith('test-verify'):
-        file_patterns = ['**/test_*',
-                         '**/browser_*',
-                         '**/crashtest*/**',
-                         'js/src/test/test/',
-                         'js/src/test/non262/',
-                         'js/src/test/test262/']
+    elif type.startswith('test-verify'):
+        file_patterns = ['**/test_*',
+                         '**/browser_*',
+                         '**/crashtest*/**',
+                         'js/src/test/test/',
+                         'js/src/test/non262/',
+                         'js/src/test/test262/']
 
     changed_files = files_changed.get_changed_files(config.params.get('head_repository'),
                                                     config.params.get('head_rev'))
     test_count = 0
-    for pattern in file_patterns:
-        for path in changed_files:
-            if mozpackmatch(path, pattern):
-                gpu = False
-                if type == 'test-verify-e10s':
-                    # file_patterns for test-verify will pick up some gpu tests, lets ignore
-                    # in the case of reftest, we will not have any in the regular case
-                    gpu_dirs = ['dom/canvas', 'gfx/tests', 'devtools/canvasdebugger', 'webgl']
-                    for gdir in gpu_dirs:
-                        if len(path.split(gdir)) > 1:
-                            gpu = True
-
-                if not gpu:
+    for pattern in file_patterns:
+        for path in changed_files:
+            if mozpackmatch(path, pattern):
+                gpu = False
+                if type == 'test-verify-e10s':
+                    # file_patterns for test-verify will pick up some gpu tests, lets ignore
+                    # in the case of reftest, we will not have any in the regular case
+                    gpu_dirs = ['dom/canvas', 'gfx/tests', 'devtools/canvasdebugger', 'webgl']
+                    for gdir in gpu_dirs:
+                        if len(path.split(gdir)) > 1:
+                            gpu = True
+
+                if not gpu:
                     test_count += 1
 
     chunks = test_count/tests_per_chunk
     return int(math.ceil(chunks))
 
 
 @transforms.add
 def allow_software_gl_layers(config, tests):
@@ -943,17 +943,19 @@ def set_worker_type(config, tests):
             else:
                 # the other jobs run on a vm which may or may not be a win10 vm
                 win_worker_type_platform = WINDOWS_WORKER_TYPES[
                     test_platform.split('/')[0]
                 ]
             # now we have the right platform set the worker type accordingly
             test['worker-type'] = win_worker_type_platform[test['virtualization']]
         elif test_platform.startswith('linux') or test_platform.startswith('android'):
-            if test.get('suite', '') == 'talos' and test['build-platform'] != 'linux64-ccov/opt':
+            if test.get('suite', '') == 'talos' and \
+               test['build-platform'] != 'linux64-ccov/opt' and \
+               test['build-platform'] != 'linux64-ccov/opt':
                 test['worker-type'] = 'releng-hardware/gecko-t-linux-talos'
             else:
                 test['worker-type'] = LINUX_WORKER_TYPES[test['instance-size']]
         else:
             raise Exception("unknown test_platform {}".format(test_platform))
 
         yield test
 
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage.py
@@ -1,28 +1,28 @@
-import os
-
-config = {
-    'default_actions': [
-        'clobber',
-        'build',
-        'check-test',
-        'update',  # decided by query_is_nightly()
-    ],
-    'stage_platform': 'linux64-ccov',
-    #### 64 bit build specific #####
-    'env': {
-        'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
-        'DISPLAY': ':2',
-        'HG_SHARE_BASE_DIR': '/builds/hg-shared',
-        'MOZ_OBJDIR': '%(abs_obj_dir)s',
-        'TINDERBOX_OUTPUT': '1',
-        'TOOLTOOL_CACHE': '/builds/tooltool_cache',
-        'TOOLTOOL_HOME': '/builds',
-        'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'LC_ALL': 'C',
-        ## 64 bit specific
-        'PATH': '/usr/local/bin:/bin:\
-/usr/bin:/usr/local/sbin:/usr/sbin:/sbin',
-    },
-    'mozconfig_variant': 'code-coverage',
-    #######################
-}
+import os
+
+config = {
+    'default_actions': [
+        'clobber',
+        'build',
+        'check-test',
+        'update',  # decided by query_is_nightly()
+    ],
+    'stage_platform': 'linux64-ccov',
+    #### 64 bit build specific #####
+    'env': {
+        'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
+        'DISPLAY': ':2',
+        'HG_SHARE_BASE_DIR': '/builds/hg-shared',
+        'MOZ_OBJDIR': '%(abs_obj_dir)s',
+        'TINDERBOX_OUTPUT': '1',
+        'TOOLTOOL_CACHE': '/builds/tooltool_cache',
+        'TOOLTOOL_HOME': '/builds',
+        'MOZ_CRASHREPORTER_NO_REPORT': '1',
+        'LC_ALL': 'C',
+        ## 64 bit specific
+        'PATH': '/usr/local/bin:/bin:\
+/usr/bin:/usr/local/sbin:/usr/sbin:/sbin',
+    },
+    'mozconfig_variant': 'code-coverage',
+    #######################
+}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage_debug.py
@@ -0,0 +1,28 @@
+import os
+
+config = {
+    'default_actions': [
+        'clobber',
+        'build',
+        'check-test',
+        'update',  # decided by query_is_nightly()
+    ],
+    'stage_platform': 'linux64-ccov-debug',
+    #### 64 bit build specific #####
+    'env': {
+        'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
+        'DISPLAY': ':2',
+        'HG_SHARE_BASE_DIR': '/builds/hg-shared',
+        'MOZ_OBJDIR': '%(abs_obj_dir)s',
+        'TINDERBOX_OUTPUT': '1',
+        'TOOLTOOL_CACHE': '/builds/tooltool_cache',
+        'TOOLTOOL_HOME': '/builds',
+        'MOZ_CRASHREPORTER_NO_REPORT': '1',
+        'LC_ALL': 'C',
+        ## 64 bit specific
+        'PATH': '/usr/local/bin:/bin:\
+/usr/bin:/usr/local/sbin:/usr/sbin:/sbin',
+    },
+    'mozconfig_variant': 'code-coverage-debug',
+    #######################
+}
--- a/testing/mozharness/mozharness/mozilla/building/buildbase.py
+++ b/testing/mozharness/mozharness/mozilla/building/buildbase.py
@@ -416,16 +416,17 @@ class BuildOptionParser(object):
         'cross-fuzzing-asan': 'builds/releng_sub_%s_configs/%s_cross_fuzzing_asan.py',
         'cross-artifact': 'builds/releng_sub_%s_configs/%s_cross_artifact.py',
         'debug': 'builds/releng_sub_%s_configs/%s_debug.py',
         'fuzzing-debug': 'builds/releng_sub_%s_configs/%s_fuzzing_debug.py',
         'asan-and-debug': 'builds/releng_sub_%s_configs/%s_asan_and_debug.py',
         'asan-tc-and-debug': 'builds/releng_sub_%s_configs/%s_asan_tc_and_debug.py',
         'stat-and-debug': 'builds/releng_sub_%s_configs/%s_stat_and_debug.py',
         'code-coverage': 'builds/releng_sub_%s_configs/%s_code_coverage.py',
+        'code-coverage-debug': 'builds/releng_sub_%s_configs/%s_code_coverage_debug.py',
         'source': 'builds/releng_sub_%s_configs/%s_source.py',
         'noopt-debug': 'builds/releng_sub_%s_configs/%s_noopt_debug.py',
         'api-16-gradle-dependencies': 'builds/releng_sub_%s_configs/%s_api_16_gradle_dependencies.py',
         'api-16': 'builds/releng_sub_%s_configs/%s_api_16.py',
         'api-16-artifact': 'builds/releng_sub_%s_configs/%s_api_16_artifact.py',
         'api-16-debug': 'builds/releng_sub_%s_configs/%s_api_16_debug.py',
         'api-16-debug-artifact': 'builds/releng_sub_%s_configs/%s_api_16_debug_artifact.py',
         'api-16-gradle': 'builds/releng_sub_%s_configs/%s_api_16_gradle.py',