{"id":373,"date":"2022-06-30T17:15:24","date_gmt":"2022-07-01T00:15:24","guid":{"rendered":"https:\/\/blog.mozilla.org\/performance\/?p=373"},"modified":"2022-07-04T08:03:58","modified_gmt":"2022-07-04T15:03:58","slug":"introducing-a-new-performance-comparison-tool-perfcompare","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/performance\/2022\/06\/30\/introducing-a-new-performance-comparison-tool-perfcompare\/","title":{"rendered":"Introducing A New Performance Comparison Tool &#8211; PerfCompare"},"content":{"rendered":"<h2><span data-preserver-spaces=\"true\">Introduction<\/span><\/h2>\n<p><span data-preserver-spaces=\"true\">I have been a member of the performance test team for the past two and a half years. During that time, the performance team has had many discussions about improving the developer experience when running performance tests.\u00a0<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">The most significant pain points for developers are that: <\/span><\/p>\n<p><span data-preserver-spaces=\"true\">1) tests are difficult to run, or they don&#8217;t know which tests to run, and <\/span><\/p>\n<p><span data-preserver-spaces=\"true\">2) our tools for comparing these results are complex or confusing.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">One of the tools we currently use is called <a href=\"https:\/\/treeherder.mozilla.org\/perfherder\/alerts?hideDwnToInv=1\">Perfherder<\/a>. Perfherder does many things, such as alerting on performance improvements and regressions, comparing results of performance tests, and graphing those results.<\/span><\/p>\n<div id=\"attachment_377\" style=\"width: 1010px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-377\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-377 size-extra-large\" src=\"http:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-47-21-1000x519.png\" alt=\"perfherder alerts view\" width=\"1000\" height=\"519\" srcset=\"https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-47-21-1000x519.png 1000w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-47-21-300x156.png 300w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-47-21-600x312.png 600w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-47-21-768x399.png 768w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-47-21.png 1269w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><p id=\"caption-attachment-377\" class=\"wp-caption-text\">Perfherder Alerts View<\/p><\/div>\n<p><span data-preserver-spaces=\"true\">Our performance sheriffs use Perfherder Alerts View to investigate possible improvements or regressions. They first determine if the alert is valid and then identify the culprit revision that caused a regression or improvement.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">The sheriff then files a bug in Bugzilla. If it is a regression, a <code>:needinfo<\/code> flag is added for the author of that commit.<\/span><\/p>\n<div id=\"attachment_378\" style=\"width: 1010px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-378\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-378 size-extra-large\" src=\"http:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-49-53-1000x517.png\" alt=\"performance regression bug\" width=\"1000\" height=\"517\" srcset=\"https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-49-53-1000x517.png 1000w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-49-53-300x155.png 300w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-49-53-600x310.png 600w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-49-53-768x397.png 768w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-49-53.png 1060w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><p id=\"caption-attachment-378\" class=\"wp-caption-text\">Example of a performance regression bug<\/p><\/div>\n<p><span data-preserver-spaces=\"true\">The user workflows for the Compare View and Graphs View are usually one of two scenarios:<\/span><\/p>\n<p><span data-preserver-spaces=\"true\"><strong>Scenario A:<\/strong> An engineer is tagged in a regression (or improvement) by a performance sheriff, as described above. The engineer then needs to determine why the patch caused a regression, which can take many iterations of altering code, running tests, and comparing the results.<\/span><\/p>\n<p style=\"text-align: center;\"><span data-preserver-spaces=\"true\"><em>or<\/em>\u00a0<\/span><\/p>\n<p><span data-preserver-spaces=\"true\"><strong>Scenario B:<\/strong> A firefox engineer working on a patch will run performance tests to ensure the latest changes have not caused performance to regress. Once tests are complete, the engineer compares the results before and after those changes were made.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">The proactive approach, Scenario B, is highly preferable to a reactive one, as in Scenario A.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">A primary goal of the performance test team is to simplify and improve the experience of running performance tests and comparing the results. <\/span><\/p>\n<p><span data-preserver-spaces=\"true\">If we succeed in this, I believe we can improve the performance of Firefox as a whole.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\"> By providing better tools and workflows, we will empower our engineers to include performance testing as a part of their standard development process.<\/span><\/p>\n<h2><span data-preserver-spaces=\"true\">Perfherder User Experience<\/span><\/h2>\n<div id=\"attachment_383\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-383\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-383 size-large\" src=\"http:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-13-46-600x290.png\" alt=\"Perfherder search for revision\" width=\"600\" height=\"290\" srcset=\"https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-13-46-600x290.png 600w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-13-46-300x145.png 300w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-13-46-768x372.png 768w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-13-46.png 874w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><p id=\"caption-attachment-383\" class=\"wp-caption-text\">Perfherder Compare View &#8211; Search for Revision<\/p><\/div>\n<div id=\"attachment_384\" style=\"width: 1010px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-384\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-384 size-extra-large\" src=\"http:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-14-16-1000x604.png\" alt=\"perfherder compare results\" width=\"1000\" height=\"604\" srcset=\"https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-14-16-1000x604.png 1000w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-14-16-300x181.png 300w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-14-16-600x362.png 600w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-14-16-768x464.png 768w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-13-14-16.png 1308w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><p id=\"caption-attachment-384\" class=\"wp-caption-text\">Perfherder Compare View &#8211; Comparison Results<\/p><\/div>\n<p><span data-preserver-spaces=\"true\">We have conducted usability testing and user research to identify developer pain points for Perfherder and attempted to address some of these issues. <\/span><\/p>\n<p><span data-preserver-spaces=\"true\">However, sometimes these changes created an even more cluttered UI. Some of these changes included adding a User Guide or more documentation to explain how to use the tools, which is a problematic approach.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">If we need to write more documentation to explain how to use a tool that should be reasonably straightforward, it suggests that there are fundamental weaknesses in our UX design. <\/span><\/p>\n<p><span data-preserver-spaces=\"true\">Perfherder was initially developed for a particular use case and has been expanded to include more features and test harnesses over the years. <\/span><\/p>\n<p><span data-preserver-spaces=\"true\">While it has served its purpose, the time has come to develop a new comparison tool to support the wide range of features that we have added to Perfherder&#8211;and some new ones too!<\/span><\/p>\n<h2><span data-preserver-spaces=\"true\">Introducing PerfCompare<\/span><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-376 size-full\" src=\"http:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-45-00.png\" alt=\"PerfCompare performance comparison tool\" width=\"1001\" height=\"279\" srcset=\"https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-45-00.png 1001w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-45-00-300x84.png 300w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-45-00-600x167.png 600w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-45-00-768x214.png 768w\" sizes=\"(max-width: 1001px) 100vw, 1001px\" \/><\/p>\n<p><span data-preserver-spaces=\"true\">PerfCompare is a performance comparison tool that aims to replace Perfherder Compare View. This is a task I have wanted to undertake for quite some time, but we had a smaller team and lacked the resources to justify a project of this size.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">Although I am an engineer, I am also an artist. I studied art for years, attending a residential arts school my junior year, and (very briefly) pursuing a double major in Computer Engineering and Art. <\/span><\/p>\n<p><span data-preserver-spaces=\"true\">As a career, however, I knew that software engineering was what I wanted to pursue, while art remained an enjoyable pastime.\u00a0<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">As such, I am very opinionated on matters of aesthetics and design. My goal is to create a tool that is easy to use&#8211;but also <em>enjoyable<\/em> to use! <\/span><\/p>\n<p><span data-preserver-spaces=\"true\">I want to create something to delight engineers and make them <strong>want<\/strong> to run performance tests.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">I approached this project with a blank page&#8211;literally! When creating initial designs, I sat in front of a white sheet of paper with a black pen. In my mind, I asked, <em>&#8220;What does the user want to do?&#8221;<\/em> <\/span><\/p>\n<p><span data-preserver-spaces=\"true\">I broke this down into the most simple actions, step by step. I wanted to remove anything unnecessary or confusing, and create a clean and aesthetic UI.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">Since then, three other engineers have joined the project. Together we have been working to create an MVP to announce and demo at the All Hands in September.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">We aim to have a product ready for initial user testing and enroll it in Mozilla&#8217;s foxfooding program.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">While some of these are still under development, below are some highlights of improvements and features we have implemented so far.<\/span><\/p>\n<h2>Highlights<\/h2>\n<ul>\n<li><span data-preserver-spaces=\"true\">List of repositories to select from includes only the most common, rather than an exhaustive list of all repositories.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Users can search by short hash, long hash, or author email, instead of long hash only.<\/span><\/li>\n<\/ul>\n<div id=\"attachment_381\" style=\"width: 1010px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-381\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-381 size-extra-large\" src=\"http:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-52-29-1000x504.png\" alt=\"perfcompare search by email\" width=\"1000\" height=\"504\" srcset=\"https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-52-29-1000x504.png 1000w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-52-29-300x151.png 300w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-52-29-600x302.png 600w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-52-29-768x387.png 768w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-52-29.png 1046w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><p id=\"caption-attachment-381\" class=\"wp-caption-text\">Search for revision by author email<\/p><\/div>\n<ul>\n<li><span data-preserver-spaces=\"true\">When searching for revisions, the results include not just a revision hash and author email, but also the commit message and timestamp, making it easier to differentiate between them.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Users can select up to four revisions to compare instead of just two.<\/span><\/li>\n<\/ul>\n<div id=\"attachment_382\" style=\"width: 1010px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-382\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-382 size-extra-large\" src=\"http:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-57-55-1000x437.png\" alt=\"perfcompare selected revisions\" width=\"1000\" height=\"437\" srcset=\"https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-57-55-1000x437.png 1000w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-57-55-300x131.png 300w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-57-55-600x262.png 600w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-57-55-768x336.png 768w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-57-55.png 1187w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><p id=\"caption-attachment-382\" class=\"wp-caption-text\">Select four revisions to compare<\/p><\/div>\n<ul>\n<li><span data-preserver-spaces=\"true\">We are using icons to represent platform and confidence, with a tooltip that displays more information.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Easier-to-read test names.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">We have removed magnitude of change and repeated header rows for a cleaner UI.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Users can edit selected revisions directly from the Results View instead of navigating back to Search View.<\/span><\/li>\n<\/ul>\n<div id=\"attachment_380\" style=\"width: 1010px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-380\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-380 size-extra-large\" src=\"http:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-53-41-1000x376.png\" alt=\"perfcompare results view\" width=\"1000\" height=\"376\" srcset=\"https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-53-41-1000x376.png 1000w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-53-41-300x113.png 300w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-53-41-600x226.png 600w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-53-41-768x289.png 768w, https:\/\/blog.mozilla.org\/performance\/files\/2022\/06\/Screenshot-from-2022-06-28-12-53-41.png 1209w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><p id=\"caption-attachment-380\" class=\"wp-caption-text\">Example of results view using mock data, showing the platform tooltip<\/p><\/div>\n<p><span data-preserver-spaces=\"true\">While we still have much to do before PerfCompare is ready for user testing, we have made significant progress and look forward to demonstrating our tool in Hawaii!<\/span><\/p>\n<p>If you have any feedback or suggestions, you can find us in the<a href=\"https:\/\/matrix.to\/#\/#perfcompare:mozilla.org\"> #PerfCompare<\/a> matrix channel, or join our <a href=\"https:\/\/matrix.to\/#\/#perfcompare-user-research:mozilla.org\">#PerfCompare User Research<\/a> channel!<\/p>\n<p>Thank you to everyone who has contributed to our user research so far!<\/p>\n<h3>Resources<\/h3>\n<ul>\n<li><a href=\"https:\/\/treeherder.mozilla.org\/perfherder\/comparechooser\">Perfherder Compare View<\/a><\/li>\n<li><a href=\"https:\/\/treeherder.mozilla.org\/perfherder\/compare?originalProject=mozilla-central&amp;originalRevision=3a227a2156b9e38e50c2205803c429e698f16de9&amp;newProject=mozilla-central&amp;newRevision=5563ec0537500a2ac4a38aa9271452b851a0c3ab&amp;framework=1&amp;page=1\">Perfherder Compare &#8211; example comparison<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/mozilla\/perfcompare\">PerfCompare github repository<\/a><\/li>\n<li><a href=\"https:\/\/matrix.to\/#\/#perfcompare:mozilla.org\"> #PerfCompare matrix channel<\/a><\/li>\n<li><a href=\"https:\/\/matrix.to\/#\/#perfcompare-user-research:mozilla.org\">#PerfCompare User Research channel<\/a><\/li>\n<li><a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1754831\"> Bug 1754831 &#8211; [meta] feature requests for improved performance comparison tool<\/a><\/li>\n<li><a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1750983\"> Bug 1750983 &#8211; [meta] developer pain points in performance testing<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introduction I have been a member of the performance test team for the past two and a half years. During that time, the performance team has had many discussions about &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/performance\/2022\/06\/30\/introducing-a-new-performance-comparison-tool-perfcompare\/\">Read more<\/a><\/p>\n","protected":false},"author":1594,"featured_media":376,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[457019,265,457016],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/performance\/wp-json\/wp\/v2\/posts\/373"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/performance\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/performance\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/performance\/wp-json\/wp\/v2\/users\/1594"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/performance\/wp-json\/wp\/v2\/comments?post=373"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/performance\/wp-json\/wp\/v2\/posts\/373\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/performance\/wp-json\/wp\/v2\/media\/376"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/performance\/wp-json\/wp\/v2\/media?parent=373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/performance\/wp-json\/wp\/v2\/categories?post=373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/performance\/wp-json\/wp\/v2\/tags?post=373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}