Firefox Performance Test Engineering 🔥🦊⏱
Who we are
- Dave Hunt [:davehunt] 🇬🇧
- Stephen Donner [:stephend] 🇺🇸
- Rob Wood [:rwood] 🇨🇦
- Greg Mierzwinski [:sparky] 🇨🇦
- Ionuț Goldan [:igoldan] 🇷🇴
- Florian Strugariu [:bebe] 🇷🇴
- Marian Raiciof [:marauder] 🇷🇴
- Alex Ionescu [:alexandrui] 🇷🇴
- Arnold Iakab [:arno__] 🇷🇴
- Alex Irimovici [:air] 🇷🇴
Where to find us
- IRC: #perftest
- Slack: #perftest
What we do
We provide automated testing support for measuring the performance of Firefox products. Here are a few examples of what you can expect our team to be working on.
- Provide advice/troubleshooting related to performance testing or any of our tools and harnesses.
- Develop test plans that involve automation of performance testing.
- Prototype, build, and maintain test harnesses for performance testing.
- Monitoring and reporting of performance regressions.
What we don't do
- Own all performance tests. We work on the test harnesses and tools that are used for performance testing, but the tests themselves are often developed outside of our team. Every test should have an owner, who is responsible for responding to questions related to the test, and may be asked to assist when the test detects a regression.
- Review all performance tests. Similar to test ownership, we enable others to contribute performance tests. We can provide advice and reviews, but do not impose this as a restriction to landing test changes.
- Maintain the infrastructure the tests run on
- Maintain the continuous integration pipeline
- Maintain the reporting tools
Onboarding
You are encouraged to improve the onboarding documentation. If you need to ask questions that are not already covered, please update the documentation so that the next person has a better onboarding experience.
Meetings
- When: Weekly on Wednesdays at 16:00 UTC (08:00 PST, 11:00 EST, 18:00 EET)
- Where: Zoom ID 110-819-485
- Notes: Google Docs
Calendar
There's a Firefox Test Engineering shared calendar (iCal), which is primarily used for PTO and related events.
PTO
Add any PTO to the shared calendar (see above) so the team are aware.
Groups
There's a perftest group, which is invite only, and used for team communications and setting up test accounts. There's also a performance group for general discussion and announcements, and a perfteam group for the performance engineering team. Feel free to sign up to these, and post to them when you have something to share or questions to ask. There is also a perf-sheriffs group for performance sheriffs. For regression summaries, you can subscribe to the pi-monitoring group.
Credentials
There's a shared 1Password vault for credentials that you may need to access. Please submit a request for 1Password from The Hub. Once you have an account and the software set up (available on iOS, Android, Windows, macOS) you can be added you to the team vault.
Additional equipment
You may need additional hardware such as mobile devices, laptops, etc. You can request this equipment from The Hub.
GitHub
We have a GitHub team for simplifying access to repositories. All team members that belong to the Mozilla organisation should be added to this team as maintainers. Other team members will need to be manually granted access to individual repositories as needed.
We have a shared folder in Google Drive.
Sheriffing
Performance sheriffs will need to complete the following:
- Request an LDAP account
- Request commit access:
- Level 1: bug 1398609
- Level 3: bug 1509284
- Request access to Treeherder sheriff group: bug 1506882
- Training (ranked)
- Join the perf-sheriffs Google Group
Review policy
When you push a commit up for review, you should use the following syntax to request review from the perftest review group:
r=#perftest
A single r+ from one reviewer is required for the patch to be allowed to be sent off for integration. More reviewers can pitch in on the same review, and Lando will in this case automatically rewrite the commit message to show who was involved signing off the patch, for example:
Bug 1546611 - Fix "None" checks when validating test manifests; r=perftest,rwood
When you occasionally you have to single out individuals for specific topic expertise, you add an exclamation mark behind the nickname:
r=#perftest,rwood!
This will add the patch to the shared review queue, but also block the review from landing pending Rob's approval. Requested changes by other reviewers will also block the review.
Task Workflow
New requests
New requests can be created via Jira Service Desk (requires account), or Mana.
Triage
Occurs weekly on Mondays at 14:45 UTC using the Untriaged filter.
- Set status to Current Quarter if work is to be considered for the current quarter
- Set due date if there is a deadline, else use last working day in quarter
- Set priority if known to be high or low, else use medium
- Set assignee to be responsible for planning
- Set status to Future Quarter if work is to be considered for next quarter planning
- Set deferred date to bump to a future triage date
Current quarter planning
Occurs regularly using the Needs Planning (me) and Needs Planning filters.
- Create links for blockers, dependencies, etc
- Create subtasks if needed, for each subtask:
- Set priority if known to be high or low, else use medium
- Set assignee to be responsible for development
- Set due date if there is a deadline, else reflect parent task due date
- Create links for blockers, dependencies, etc
- Set time estimate (in weeks)
- If no further planning is needed, set status to Ready
- If no subtasks are created:
- Set assignee to be responsible for development
- Set time estimate (in weeks)
- If no further planning is needed, set status to Ready
Weekly review
Occurs weekly on Mondays at 15:30 UTC using the Blocked, Overdue and Upcoming filters.
- Review due date, priority, and status
Estimates
Occurs regularly using the Needs Estimate (me) and Needs Estimate filters.
- Set time estimate (in weeks)
Next quarter planning
Occurs each quarter using the Future Quarter filter.
- To be considered for the upcoming quarter:
- Set status to Current Quarter
- Set due date if there is a deadline, else use last working day in next quarter
- Set priority if known to be high or low, else use medium
- Set assignee to be responsible for planning
- To be reconsidered for a future quarter leave status as Future Quarter
Current quarter review
Occurs regularly using the Current Quarter filter.
- Determine time (weeks) remaining in quarter
- Review assignee, due date, priority, and status
Development
Occurs whenever we are free to take on new work, using the Ready (me) and Ready filters.
- Set status to Dev
- Raise a tracking bug or issue against the appropriate project
- Add link to the tracking bug or issue
Blocked
Occurs whenever a task is blocked.
- Set status to Blocked
- If task is blocked by other task(s):
- Add link(s) to the blocking task(s)
- Add a comment detailing the circumstances of the blocker(s).
Objectives
2019/H1
- Increase regression detection coverage to page load on Android products including WebView comparisons
- Increase quality standards by measuring and alerting on power usage for Android and ARM64
- Build dashboards to improve visibility of how we are tracking against our release criteria for Android
- Reducing noise in test results and adding annotations to provide clarity of signal for regressions
- Develop measurements and mechanisms for reporting on our tools, policies and documentation for how to improve clarity and efficiency of risk assessments
2019/Q2
- Meet Fenix blocking performance release criteria
- Fenix 1.0 geo mean cold page load time to onload event is >20% faster than Fennec 64 for tp6m reference sites (2019Q1 snapshots) on Fenix reference hardware
- Perform well on priority use cases for Qualcomm's H2 product launches
- Firefox v68 for Windows 10 on ARM battery utilization is within 20% of Edge on Qualcomm 8xx series reference hardware when watching the tp6m YouTube reference video to completion
- The proportion of dropped frames during playback of the tp6m YouTube reference video at 1080p resolution does not exceed 4% on Firefox v68 on the Qualcomm 8xx series reference hardware.
- Firefox v68 for Windows 10 on ARM geomean cold page load time to the onload event is within 20% of Edge for tp6 reference sites on Qualcomm 8xx series reference hardware.
- Meet blocking performance objectives for GeckoView-powered Fire TV pitch
- The proportion of dropped frames during playback of the tp6m 4K YouTube reference video using GeckoView-powered Firefox for Fire TV does not exceed 4% on the Fire TV 4k stick.
- Lay foundation to support performance work in H2
- Develop key metrics and scenarios needed to build CI-integrated tests for at least three of video quality, scroll responsiveness, input responsiveness, memory use, CPU utilization, and heat.
- Make the Firefox desktop browser feel fast and responsive
Projects
Raptor
Raptor is a Python testing framework used to run browser benchmark and browser page-load performance tests. Raptor is cross-browser compatible and is currently running in Mozilla taskcluster production on Firefox Desktop, Firefox Android, and on Google Chromium.
- Owner: Rob Wood [:rwood]
- Source: https://searchfox.org/mozilla-central/source/testing/raptor
- Good first bugs: https://codetribute.mozilla.org/projects/automation?project%3DRaptor
- Documentation: https://wiki.mozilla.org/Performance_sheriffing/Raptor
Talos
Talos is a Python performance testing framework that is usable on Windows, Mac and Linux. Talos is our versatile performance testing framework we use at Mozilla. It was created to serve as a test runner for the existing performance tests that Mozilla was running back in 2007 as well as providing an extensible framework for new tests as they were created.
- Owner: Rob Wood [:rwood], Joel Maher [:jmaher]
- Source: https://searchfox.org/mozilla-central/source/testing/talos
- Good first bugs: https://codetribute.mozilla.org/projects/automation?project%3DTalos
- Documentation: https://wiki.mozilla.org/Performance_sheriffing/Talos
WebPageTest
- Owner: Stephen Donner [:stephend]
- Source: https://github.com/mozilla/wpt-api
- Good first bugs: https://github.com/mozilla/wpt-api/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22
- Documentation: https://mozilla-wpt-api-docs.readthedocs.io/en/master/
Perfherder
Perfherder is an interactive dashboard intended to allow monitoring and analysis of automated performance tests run against Mozilla products (currently Firefox and Firefox for Android). Perfherder is part of the Treeherder project.
- Location: https://treeherder.mozilla.org/perf.html
- Owner: Ionuț Goldan [:igoldan]
- Source: https://github.com/mozilla/treeherder
- Good first bugs: https://codetribute.mozilla.org/projects/reporting?project%3DPerfherder
- User documentation: https://wiki.mozilla.org/EngineeringProductivity/Projects/Perfherder
- Developer documentation: https://treeherder.readthedocs.io/
Dashboards
Firefox Are We Fast Yet Dashboard
Shows a variety of benchmarks, run on a variety of platforms. Meant to be a detailed view of performance.
- Location: https://arewefastyet.com
- Owner: Armen Zambrano Gasparnian [:armen]
- Source: https://github.com/mozilla-frontend-infra/firefox-performance-dashboard
Firefox Health Dashboard
The health dashboard tracks metrics and statistics important for tracking performance improvements. Meant to be a high level view.
- Location: https://health.graphics/
- Owner: Armen Zambrano Gasparnian [:armen], Kyle Lahnakoski [:ekyle]
- Source: https://github.com/mozilla-frontend-infra/firefox-health-dashboard/
- Good first bugs: https://github.com/mozilla-frontend-infra/firefox-health-dashboard/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22