Benchmark #1584
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright 2020 Signal Messenger, LLC | |
# SPDX-License-Identifier: AGPL-3.0-only | |
name: Benchmark | |
on: | |
push: | |
branches: | |
- development | |
- main | |
- '[0-9]+.[0-9]+.x' | |
pull_request: | |
schedule: | |
- cron: '0 */12 * * *' | |
jobs: | |
linux: | |
runs-on: ubuntu-latest-8-cores | |
if: ${{ github.repository == 'signalapp/Signal-Desktop-Private' && (!github.event.schedule || github.ref == 'refs/heads/main') }} | |
timeout-minutes: 30 | |
steps: | |
- name: Get system specs | |
run: lsb_release -a | |
- name: Get other system specs | |
run: uname -a | |
- name: Clone Desktop repo | |
uses: actions/checkout@v4 | |
- name: Setup node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
- name: Install global dependencies | |
run: npm install -g npm@10.2.5 | |
- name: Install xvfb | |
run: sudo apt-get install xvfb libpulse0 | |
- name: Cache Desktop node_modules | |
id: cache-desktop-modules | |
uses: actions/cache@v4 | |
with: | |
path: node_modules | |
key: ${{ runner.os }}-${{ hashFiles('package.json', 'package-lock.json', 'patches/**') }} | |
- name: Install Desktop node_modules | |
if: steps.cache-desktop-modules.outputs.cache-hit != 'true' | |
run: npm ci | |
env: | |
NPM_CONFIG_LOGLEVEL: verbose | |
- name: Build typescript | |
run: npm run generate | |
- name: Bundle | |
run: npm run build:esbuild:prod | |
- name: Create preload cache | |
run: xvfb-run --auto-servernum npm run build:preload-cache | |
- name: Run startup benchmarks | |
run: | | |
set -o pipefail | |
xvfb-run --auto-servernum node ts/test-mock/benchmarks/startup_bench.js | | |
tee benchmark-startup.log | |
timeout-minutes: 10 | |
env: | |
NODE_ENV: production | |
RUN_COUNT: 10 | |
ELECTRON_ENABLE_STACK_DUMPING: on | |
DEBUG: 'mock:benchmarks' | |
ARTIFACTS_DIR: artifacts/startup | |
- name: Run send benchmarks | |
run: | | |
set -o pipefail | |
rm -rf /tmp/mock | |
xvfb-run --auto-servernum node ts/test-mock/benchmarks/send_bench.js | | |
tee benchmark-send.log | |
timeout-minutes: 10 | |
env: | |
NODE_ENV: production | |
RUN_COUNT: 100 | |
ELECTRON_ENABLE_STACK_DUMPING: on | |
# DEBUG: 'mock:benchmarks' | |
ARTIFACTS_DIR: artifacts/send | |
- name: Run group send benchmarks | |
run: | | |
set -o pipefail | |
rm -rf /tmp/mock | |
xvfb-run --auto-servernum node \ | |
ts/test-mock/benchmarks/group_send_bench.js | \ | |
tee benchmark-group-send.log | |
timeout-minutes: 10 | |
env: | |
NODE_ENV: production | |
RUN_COUNT: 100 | |
CONVERSATION_SIZE: 500 | |
ELECTRON_ENABLE_STACK_DUMPING: on | |
# DEBUG: 'mock:benchmarks' | |
ARTIFACTS_DIR: artifacts/group-send | |
- name: Run large group send benchmarks with blocks | |
run: | | |
set -o pipefail | |
rm -rf /tmp/mock | |
xvfb-run --auto-servernum node \ | |
ts/test-mock/benchmarks/group_send_bench.js | \ | |
tee benchmark-large-group-send-with-blocks.log | |
timeout-minutes: 10 | |
env: | |
NODE_ENV: production | |
GROUP_SIZE: 500 | |
CONTACT_COUNT: 500 | |
BLOCKED_COUNT: 10 | |
DISCARD_COUNT: 2 | |
RUN_COUNT: 50 | |
CONVERSATION_SIZE: 500 | |
ELECTRON_ENABLE_STACK_DUMPING: on | |
# DEBUG: 'mock:benchmarks' | |
ARTIFACTS_DIR: artifacts/group-send | |
- name: Run large group send benchmarks with delivery receipts | |
run: | | |
set -o pipefail | |
rm -rf /tmp/mock | |
xvfb-run --auto-servernum node \ | |
ts/test-mock/benchmarks/group_send_bench.js | \ | |
tee benchmark-large-group-send.log | |
timeout-minutes: 10 | |
env: | |
NODE_ENV: production | |
GROUP_SIZE: 500 | |
CONTACT_COUNT: 500 | |
GROUP_DELIVERY_RECEIPTS: 500 | |
DISCARD_COUNT: 2 | |
RUN_COUNT: 20 | |
CONVERSATION_SIZE: 50 | |
ELECTRON_ENABLE_STACK_DUMPING: on | |
# DEBUG: 'mock:benchmarks' | |
ARTIFACTS_DIR: artifacts/large-group-send | |
- name: Run conversation open benchmarks | |
run: | | |
set -o pipefail | |
rm -rf /tmp/mock | |
xvfb-run --auto-servernum node \ | |
ts/test-mock/benchmarks/convo_open_bench.js | \ | |
tee benchmark-convo-open.log | |
timeout-minutes: 10 | |
env: | |
NODE_ENV: production | |
RUN_COUNT: 100 | |
ELECTRON_ENABLE_STACK_DUMPING: on | |
# DEBUG: 'mock:benchmarks' | |
ARTIFACTS_DIR: artifacts/convo-open | |
- name: Run call history search benchmarks | |
run: | | |
set -o pipefail | |
rm -rf /tmp/mock | |
xvfb-run --auto-servernum node \ | |
ts/test-mock/benchmarks/call_history_search_bench.js | \ | |
tee benchmark-call-history-search.log | |
timeout-minutes: 10 | |
env: | |
NODE_ENV: production | |
RUN_COUNT: 100 | |
ELECTRON_ENABLE_STACK_DUMPING: on | |
# DEBUG: 'mock:benchmarks' | |
ARTIFACTS_DIR: artifacts/call-history-search | |
- name: Run backup benchmarks | |
run: | | |
set -o pipefail | |
rm -rf /tmp/mock | |
xvfb-run --auto-servernum node \ | |
ts/test-mock/benchmarks/backup_bench.js | \ | |
tee benchmark-backup.log | |
timeout-minutes: 10 | |
env: | |
NODE_ENV: production | |
ELECTRON_ENABLE_STACK_DUMPING: on | |
# DEBUG: 'mock:benchmarks' | |
ARTIFACTS_DIR: artifacts/backup-bench | |
- name: Upload benchmark logs on failure | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: logs | |
path: artifacts | |
- name: Clone benchmark repo | |
uses: actions/checkout@v4 | |
with: | |
repository: 'signalapp/Signal-Desktop-Benchmarks-Private' | |
path: 'benchmark-results' | |
token: ${{ secrets.AUTOMATED_GITHUB_PAT }} | |
- name: Build benchmark repo | |
working-directory: benchmark-results | |
run: | | |
npm ci | |
npm run build | |
- name: Publish to DataDog | |
working-directory: benchmark-results | |
run: | | |
node ./bin/publish.js ../benchmark-startup.log desktop.ci.performance.startup | |
node ./bin/publish.js ../benchmark-send.log desktop.ci.performance.send | |
node ./bin/publish.js ../benchmark-group-send.log desktop.ci.performance.groupSend | |
node ./bin/publish.js ../benchmark-large-group-send-with-blocks.log desktop.ci.performance.largeGroupSendWithBlocks | |
node ./bin/publish.js ../benchmark-large-group-send.log desktop.ci.performance.largeGroupSend | |
node ./bin/publish.js ../benchmark-convo-open.log desktop.ci.performance.convoOpen | |
node ./bin/publish.js ../benchmark-call-history-search.log desktop.ci.performance.callHistorySearch | |
node ./bin/publish.js ../benchmark-backup.log desktop.ci.performance.backup | |
env: | |
DD_API_KEY: ${{ secrets.DATADOG_API_KEY }} |