ManifestGenerator shouldn't need more than 1GB of memory or run for 30 seconds
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 10 Oct 2018 03:15:39 +0000 (03:15 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 10 Oct 2018 03:15:39 +0000 (03:15 +0000)
commit15ff14cf1123e5565abdcb1517efcdace8bb65c3
treee644ef5dabc7191b3d37a298eb6b7eb0693afb11
parent682692e1ef6ea7d9e22293199d7ced7377eb030a
ManifestGenerator shouldn't need more than 1GB of memory or run for 30 seconds
https://bugs.webkit.org/show_bug.cgi?id=190393

Reviewed by Antti Koivisto and unofficially reviewed by Dewei Zhu.

This patch reduces the runtime of /api/manifest from 13s to 7s and reduces the memory requirement from
1GB to 400MB for the internal dashboard in my local testing.

The biggest perf win comes from avoid running a complex query over test_configurations to compute
the latest modified date across different test configuration types ("current" vs. "baseline").
Instead, we now fetch the entire table row by row and compute the latest modified date in memory.

Also call intval in many more places to avoid generating double quotes, which is a pretty significant
proportion of the JSON file size at this point.

Finally, use references in more places to avoid deep copying of arrays.

* public/include/manifest-generator.php:
(ManifestGenerator::generate): Skip the generation of "dashboard" since it's only used by v1 UI.
(ManifestGenerator::tests): Don't copy each row.
(ManifestGenerator::metrics): Ditto.
(ManifestGenerator::platforms): Implement the aforementioned optimization. Instead of grouping
test configurations for a given metric and platform together, fetch them all and do in-memory
processing in PHP. Avoid more copying as well.
(ManifestGenerator::repositories): Avoid more copying.
(ManifestGenerator::bug_trackers): Ditto.
(ManifestGenerator::fetch_triggerables): Ditto.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236996 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Websites/perf.webkit.org/ChangeLog
Websites/perf.webkit.org/public/include/manifest-generator.php