Collect build timings on GitHub CI

This will help to investigate slow builds on GitHub.
This commit is contained in:
Martin Robinson 2023-06-21 14:43:11 +02:00
parent befb472c9d
commit e679e1f793
5 changed files with 44 additions and 19 deletions

View file

@ -78,6 +78,14 @@ jobs:
- name: Unit tests - name: Unit tests
if: ${{ inputs.unit-tests }} if: ${{ inputs.unit-tests }}
run: python3 ./mach test-unit --release --with-${{ env.LAYOUT }} run: python3 ./mach test-unit --release --with-${{ env.LAYOUT }}
- name: Rename build timing
run: cp -r target/cargo-timings target/cargo-timings-linux-${{ env.LAYOUT }}
- name: Archive build timing
uses: actions/upload-artifact@v3
with:
name: cargo-timings
# Using a wildcard here ensures that the archive includes the path.
path: target/cargo-timings-*-${{ env.LAYOUT }}
- name: Lockfile check - name: Lockfile check
run: ./etc/ci/lockfile_changed.sh run: ./etc/ci/lockfile_changed.sh
- name: Package - name: Package

View file

@ -70,6 +70,14 @@ jobs:
run: python3 ./mach package --release run: python3 ./mach package --release
- name: Package smoketest - name: Package smoketest
run: ./etc/ci/macos_package_smoketest.sh target/release/servo-tech-demo.dmg run: ./etc/ci/macos_package_smoketest.sh target/release/servo-tech-demo.dmg
- name: Rename build timing
run: cp -r target/cargo-timings target/cargo-timings-macos-${{ env.LAYOUT }}
- name: Archive build timing
uses: actions/upload-artifact@v3
with:
name: cargo-timings
# Using a wildcard here ensures that the archive includes the path.
path: target/cargo-timings-*-${{ env.LAYOUT }}
- name: Upload package - name: Upload package
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
with: with:

View file

@ -72,6 +72,14 @@ jobs:
- name: Unit tests - name: Unit tests
if: ${{ inputs.unit-tests }} if: ${{ inputs.unit-tests }}
run: python mach test-unit --release --with-${{ env.LAYOUT }} run: python mach test-unit --release --with-${{ env.LAYOUT }}
- name: Rename build timing
run: cp C:\a\servo\servo\target\cargo-timings C:\a\servo\servo\target\cargo-timings-windows-${{ env.LAYOUT }} -Recurse
- name: Archive build timing
uses: actions/upload-artifact@v3
with:
name: cargo-timings
# Using a wildcard here ensures that the archive includes the path.
path: target/cargo-timings-*-${{ env.LAYOUT }}
- name: Package - name: Package
run: python mach package --release run: python mach package --release
- name: Upload Package - name: Upload Package

View file

@ -393,9 +393,7 @@ class MachCommands(CommandBase):
expr = "s#libdir=.*#libdir=%s#g" % gst_lib_path expr = "s#libdir=.*#libdir=%s#g" % gst_lib_path
subprocess.call(["perl", "-i", "-pe", expr, pc]) subprocess.call(["perl", "-i", "-pe", expr, pc])
# https://internals.rust-lang.org/t/exploring-crate-graph-build-times-with-cargo-build-ztimings/10975 # Gather Cargo build timings (https://doc.rust-lang.org/cargo/reference/timings.html).
# Prepend so that e.g. `-Ztimings` (which means `-Ztimings=info,html`)
# given on the command line can override it
opts = ["--timings"] + opts opts = ["--timings"] + opts
if very_verbose: if very_verbose:

View file

@ -245,24 +245,27 @@ class MachCommands(CommandBase):
packages.discard('stylo') packages.discard('stylo')
if len(packages) > 0 or len(in_crate_packages) > 0: # Return if there is nothing to do.
args = [] if len(packages) == 0 and len(in_crate_packages) == 0:
for crate in packages: return 0
args += ["-p", "%s_tests" % crate]
for crate in in_crate_packages:
args += ["-p", crate]
args += test_patterns
if nocapture: # Gather Cargo build timings (https://doc.rust-lang.org/cargo/reference/timings.html).
args += ["--", "--nocapture"] args = ["--timings"]
for crate in packages:
args += ["-p", "%s_tests" % crate]
for crate in in_crate_packages:
args += ["-p", crate]
args += test_patterns
err = self.run_cargo_build_like_command("bench" if bench else "test", if nocapture:
args, args += ["--", "--nocapture"]
env=self.build_env(test_unit=True),
with_layout_2020=with_layout_2020, return self.run_cargo_build_like_command(
**kwargs) "bench" if bench else "test",
if err: args,
return err env=self.build_env(test_unit=True),
with_layout_2020=with_layout_2020,
**kwargs)
@Command('test-content', @Command('test-content',
description='Run the content tests', description='Run the content tests',