Open Bug 1084086 Opened 10 years ago Updated 5 years ago

Treeherder creates many copies of many strings

Categories

(Tree Management :: Treeherder: Frontend, defect, P3)

defect

Tracking

(Not tracked)

People

(Reporter: n.nethercote, Unassigned)

References

Details

(Keywords: perf, regression)

Attachments

(1 file)

Treeherder uses a fair amount of memory. E.g. after ~15 hours, my current
Treeherder tab is taking up 211 MiB according to about:memory. That's partly
because it just tracks a lot of data, but there is definitely some room for
improvement in the string-handling:

> ├──60.20 MB (06.36%) -- strings
> │  ├──23.04 MB (02.43%) -- (223 tiny)
> │  │  ├───1.26 MB (00.13%) ++ string(length=529, copies=1257, "showJob@https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js:16:14860/naddJobBtnEls@https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js:15:11765/nrenderJobTableRow@https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js:15:16708/ngenerateJobElements@https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js:15:25531/nj.delay/<@https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js:14:20")
> │  │  ├───1.03 MB (00.11%) ++ string(length=40, copies=15030, "102210fe594ee9b33d82058545b1ed14f4c8206e")
> │  │  ├───0.96 MB (00.10%) ── string(length=7, copies=41763, "unknown")/gc-heap/latin1
> │  │  ├───0.68 MB (00.07%) ++ string(length=40, copies=9956, "32faaecac742100f7753f0c1d0aa0add01b4046b")
> │  │  ├───0.68 MB (00.07%) ── string(length=7, copies=29674, "fill me")/gc-heap/latin1
> │  │  ├───0.52 MB (00.05%) ── string(length=3, copies=22697, "x86")/gc-heap/latin1
> │  │  ├───0.44 MB (00.05%) ── string(length=6, copies=19024, "x86_64")/gc-heap/latin1
> │  │  ├───0.43 MB (00.05%) ── string(length=5, copies=18667, "linux")/gc-heap/latin1
> │  │  ├───0.43 MB (00.04%) ── string(length=9, copies=18597, "completed")/gc-heap/latin1
> │  │  ├───0.42 MB (00.04%) ── string(length=9, copies=18352, "scheduler")/gc-heap/latin1
> │  │  ├───0.41 MB (00.04%) ── string(length=9, copies=18017, "Mochitest")/gc-heap/latin1
> │  │  ├───0.40 MB (00.04%) ── string(length=7, copies=17438, "success")/gc-heap/latin1
> │  │  ├───0.36 MB (00.04%) ── string(length=3, copies=15913, "opt")/gc-heap/latin1
> │  │  ├───0.34 MB (00.04%) ── string(length=3, copies=14715, "win")/gc-heap/latin1
> │  │  ├───0.29 MB (00.03%) ── string(length=5, copies=12567, "armv7")/gc-heap/latin1
> │  │  ├───0.27 MB (00.03%) ++ string(length=529, copies=273, "showJob@https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js:16:14860/naddJobBtnEls@https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js:15:11765/nrenderJobTableRow@https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js:15:16871/ngenerateJobElements@https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js:15:25531/nj.delay/<@https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js:14:20")
> │  │  ├───0.27 MB (00.03%) ── string(length=1, copies=11840, "M")/gc-heap/latin1
> │  │  ├───0.24 MB (00.03%) ── string(length=5, copies=10630, "debug")/gc-heap/latin1
> │  │  ├───0.21 MB (00.02%) ── string(length=7, copies=9386, "linux64")/gc-heap/latin1
> │  │  ├───0.20 MB (00.02%) ── string(length=16, copies=6669, "integration test")/gc-heap/latin1
> │  │  ├───0.20 MB (00.02%) ── string(length=4, copies=8676, "span")/gc-heap/two-byte
> │  │  ├───0.20 MB (00.02%) ++ string(length=103, copies=1530, "activeExclusionProfile.flat_exclusion[$rootScope.repoName][jobPlatformArch][jobNameSymbol] is undefined")
> │  │  ├───0.19 MB (00.02%) ── string(length=7, copies=8276, "Reftest")/gc-heap/latin1
> │  │  ├───0.19 MB (00.02%) ── string(length=3, copies=8136, "mac")/gc-heap/latin1
> │  │  ├───0.18 MB (00.02%) ++ string(length=82, copies=1530, "https://treeherder.mozilla.org/ui/js/index.min-6dddf04a9dc1f9e02751d97b0a1ba962.js")
> │  │  ├───0.17 MB (00.02%) ── string(length=1, copies=7566, "?")/gc-heap/latin1
> │  │  ├───0.17 MB (00.02%) ── string(length=7, copies=7504, "linux32")/gc-heap/latin1
> │  │  ├───0.16 MB (00.02%) ── string(length=7, copies=7106, "android")/gc-heap/latin1
> │  │  ├───0.16 MB (00.02%) ── string(length=12, copies=5288, "linux64debug")/gc-heap/latin1
> │  │  ├───0.16 MB (00.02%) ── string(length=10, copies=5168, "linux64opt")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=10, copies=5048, "linux32opt")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=12, copies=5048, "linux32debug")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=12, copies=5048, "windowsxpopt")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=14, copies=5048, "windowsxpdebug")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=13, copies=4928, "b2g-emu-jbopt")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=14, copies=4928, "b2g-emu-icsopt")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=14, copies=4928, "b2g-linux64opt")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=15, copies=4928, "b2g-emu-jbdebug")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=16, copies=4928, "b2g-emu-icsdebug")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=11, copies=4926, "osx-10-8opt")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=12, copies=4926, "b2g-win32opt")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=14, copies=4926, "b2g-win32debug")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=14, copies=4926, "mulet-win32opt")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=1, copies=6453, "R")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=16, copies=4808, "b2g-linux32debug")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=16, copies=4808, "b2g-linux64debug")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=19, copies=4808, "b2g-device-imageopt")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=12, copies=4806, "b2g-osxdebug")/gc-heap/latin1
> │  │  ├───0.15 MB (00.02%) ── string(length=5, copies=6396, "ldren")/gc-heap/latin1
> │  │  ├───0.14 MB (00.02%) ── string(length=18, copies=4688, "android-4-2-x86opt")/gc-heap/latin1
> │  │  ├───0.14 MB (00.02%) ── string(length=13, copies=4686, "osx-10-8debug")/gc-heap/latin1
> │  │  ├───0.14 MB (00.02%) ── string(length=14, copies=4686, "b2g-linux32opt")/gc-heap/latin1
> │  │  ├───0.14 MB (00.01%) ── string(length=14, copies=4568, "windows7-32opt")/gc-heap/latin1
> │  │  ├───0.14 MB (00.01%) ── string(length=14, copies=4568, "windows8-32opt")/gc-heap/latin1
> │  │  ├───0.14 MB (00.01%) ── string(length=10, copies=4566, "b2g-osxopt")/gc-heap/latin1
> │  │  ├───0.14 MB (00.01%) ++ string(length=31, copies=2556, "layout and graphics correctness")
> │  │  ├───0.14 MB (00.01%) ── string(length=4, copies=5936, "SPAN")/gc-heap/two-byte
> │  │  ├───0.14 MB (00.01%) ── string(length=11, copies=4448, "linux64asan")/gc-heap/latin1
> │  │  ├───0.14 MB (00.01%) ── string(length=11, copies=4444, "osx-10-6opt")/gc-heap/latin1
> │  │  ├───0.13 MB (00.01%) ── string(length=3, copies=5665, "b2g")/gc-heap/latin1
> │  │  ├───0.12 MB (00.01%) ++ string(length=24, copies=2286, "Mochitest Browser Chrome")
> │  │  ├───0.12 MB (00.01%) ── string(length=16, copies=3966, "android-2-3debug")/gc-heap/latin1
> │  │  ├───0.12 MB (00.01%) ── string(length=11, copies=5154, "b2g-emu-ics")/gc-heap/latin1
> │  │  ├───0.12 MB (00.01%) ── string(length=11, copies=5138, "windows7-32")/gc-heap/latin1
> │  │  ├───0.12 MB (00.01%) ── string(length=14, copies=3848, "android-2-3opt")/gc-heap/latin1
> │  │  ├───0.11 MB (00.01%) ── string(length=16, copies=3728, "mulet-linux64opt")/gc-heap/latin1
> │  │  ├───0.11 MB (00.01%) ++ string(length=50, copies=1343, "tests-mozilla-inbound-ubuntu64_vm-b2g-emulator-opt")
> │  │  ├───0.11 MB (00.01%) ── string(length=9, copies=4901, "windowsxp")/gc-heap/latin1
> │  │  ├───0.11 MB (00.01%) ── string(length=16, copies=3606, "windows7-32debug")/gc-heap/latin1
> │  │  ├───0.11 MB (00.01%) ── string(length=7, copies=4742, "running")/gc-heap/latin1
> │  │  ├───0.11 MB (00.01%) ── string(length=11, copies=4659, "windows8-32")/gc-heap/latin1
> │  │  ├───0.10 MB (00.01%) ++ string(length=40, copies=1506, "integration test with a standard browser")
> │  │  ├───0.10 MB (00.01%) ── string(length=16, copies=3364, "android-4-0debug")/gc-heap/latin1
> │  │  ├───0.10 MB (00.01%) ++ string(length=33, copies=1463, "Mochitest DevTools Browser Chrome")
> │  │  ├───0.10 MB (00.01%) ++ string(length=46, copies=1407, "tests-mozilla-inbound-ubuntu32_vm-opt-unittest")
> │  │  ├───0.10 MB (00.01%) ── string(length=14, copies=3126, "android-4-0opt")/gc-heap/latin1
> │  │  ├───0.10 MB (00.01%) ── string(length=16, copies=3124, "windows8-32debug")/gc-heap/latin1
> │  │  ├───0.09 MB (00.01%) ── string(length=7, copies=4109, "pending")/gc-heap/latin1
> │  │  ├───0.09 MB (00.01%) ── string(length=8, copies=4005, "osx-10-8")/gc-heap/latin1
> │  │  ├───0.09 MB (00.01%) ── string(length=10, copies=2988, "on$destroy")/gc-heap/latin1
> │  │  ├───0.09 MB (00.01%) ── string(length=17, copies=2988, "$destroyundefined")/gc-heap/latin1
> │  │  ├───0.09 MB (00.01%) ── string(length=8, copies=3906, "osx-10-6")/gc-heap/latin1
> │  │  ├───0.09 MB (00.01%) ── string(length=5, copies=3858, "#text")/gc-heap/two-byte
> │  │  ├───0.09 MB (00.01%) ── string(length=11, copies=3842, "android-4-0")/gc-heap/latin1
> │  │  ├───0.09 MB (00.01%) ++ string(length=46, copies=1243, "tests-mozilla-inbound-ubuntu64_vm-opt-unittest")
> │  │  ├───0.08 MB (00.01%) ++ string(length=32, copies=1230, "multiprocess - integration tests")
> │  │  ├───0.08 MB (00.01%) ── string(length=17, copies=2716, "Talos Performance")/gc-heap/latin1
> │  │  ├───0.08 MB (00.01%) ++ string(length=40, copies=1169, "f69e1b00908837bf0550250abb1645014317e8ec")
> │  │  ├───0.08 MB (00.01%) ++ string(length=48, copies=954, "tests-mozilla-inbound-ubuntu64_vm-debug-unittest")
> │  │  ├───0.08 MB (00.01%) ++ string(length=48, copies=919, "tests-mozilla-inbound-panda_android-opt-unittest")
> │  │  ├───0.08 MB (00.01%) ── string(length=13, copies=2522, "osx-10-6debug")/gc-heap/latin1
> │  │  ├───0.07 MB (00.01%) ── string(length=11, copies=3211, "android-2-3")/gc-heap/latin1
> │  │  ├───0.07 MB (00.01%) ── string(length=14, copies=3100, "Mochitest e10s")/gc-heap/latin1
> │  │  ├───0.07 MB (00.01%) ++ string(length=50, copies=844, "tests-mozilla-inbound-ubuntu64_vm-b2g-emulator-deb")
> │  │  ├───0.07 MB (00.01%) ++ string(length=40, copies=988, "03abd064e50ec12b8c7309950268531d78c63f60")
> │  │  ├───0.06 MB (00.01%) ++ string(length=50, copies=748, "tests-mozilla-inbound-ubuntu64-asan_vm-opt-unittes")
> │  │  ├───0.06 MB (00.01%) ── string(length=1, copies=2725, "T")/gc-heap/latin1
> │  │  ├───0.06 MB (00.01%) ── string(length=13, copies=2034, " filter-shown")/gc-heap/latin1
> │  │  ├───0.06 MB (00.01%) ── string(length=14, copies=2034, " filter-shown ")/gc-heap/latin1
> │  │  ├───0.06 MB (00.01%) ++ string(length=30, copies=1068, "integration test with some XUL")
> │  │  ├───0.06 MB (00.01%) ++ string(length=50, copies=672, "tests-mozilla-inbound-panda_android-debug-unittest")
> │  │  ├───0.06 MB (00.01%) ++ string(length=50, copies=670, "tests-mozilla-inbound-ubuntu64_vm_mobile-opt-unitt")
> │  │  ├───0.06 MB (00.01%) ++ string(length=52, copies=660, "Check UI or the internal JavaScript using marionette")
> │  │  ├───0.05 MB (00.01%) ++ string(length=50, copies=652, "tests-mozilla-inbound-ubuntu64_vm_large-opt-unitte")
> │  │  ├───0.05 MB (00.01%) ++ string(length=26, copies=1003, "Check if crashes on a page")
> │  │  ├───0.05 MB (00.01%) ++ string(length=48, copies=633, "tests-mozilla-inbound-ubuntu32_vm-debug-unittest")
> │  │  ├───0.05 MB (00.01%) ++ string(length=41, copies=771, "integration tests with a standard browser")
> │  │  ├───0.05 MB (00.01%) ── string(length=5, copies=2232, "<span")/gc-heap/two-byte
> │  │  ├───0.05 MB (00.01%) ++ string(length=60, copies=352, " result-status-count text-right btn-purple-count-classified ")
> │  │  ├───0.05 MB (00.01%) ++ string(length=61, copies=344, " result-status-count text-right btn-green-count-unclassified ")
> │  │  ├───0.05 MB (00.01%) ++ string(length=62, copies=336, " result-status-count text-right btn-orange-count-unclassified ")
> │  │  ├───0.05 MB (00.01%) ++ string(length=62, copies=328, " result-status-count text-right btn-yellow-count-unclassified ")
> │  │  ├───0.05 MB (00.00%) ── string(length=13, copies=1533, "filter-shown ")/gc-heap/latin1
> │  │  ├───0.05 MB (00.00%) ── string(length=21, copies=1503, "B2G ICS Emulator opt ")/gc-heap/latin1
> │  │  ├───0.05 MB (00.00%) ++ string(length=62, copies=312, " result-status-count text-right btn-dkgray-count-unclassified ")
> │  │  ├───0.05 MB (00.00%) ++ string(length=62, copies=312, " result-status-count text-right btn-ltgray-count-unclassified ")
> │  │  ├───0.04 MB (00.00%) ── string(length=21, copies=1408, ".result-status-count ")/gc-heap/latin1
> │  │  ├───0.04 MB (00.00%) ── string(length=6, copies=1867, "M-e10s")/gc-heap/latin1
> │  │  ├───0.04 MB (00.00%) ++ string(length=33, copies=613, "tests-mozilla-inbound-win32-talos")
> │  │  ├───0.04 MB (00.00%) ++ string(length=46, copies=589, "tests-mozilla-inbound-snowleopard-opt-unittest")
> │  │  ├───0.04 MB (00.00%) ++ string(length=64, copies=394, "integration test with a standard browser with the devtools frame")
> │  │  ├───0.04 MB (00.00%) ── string(length=1, copies=1576, "1")/gc-heap/latin1
> │  │  ├───0.04 MB (00.00%) ++ string(length=68, copies=363, "Run chrome benchmark suite with Talos, performance testing framework")
> │  │  ├───0.04 MB (00.00%) ++ string(length=62, copies=248, " result-status-count text-right btn-dkblue-count-unclassified ")
> │  │  ├───0.04 MB (00.00%) ── string(length=18, copies=1162, "Build from sources")/gc-heap/latin1
> │  │  ├───0.04 MB (00.00%) ++ string(length=31, copies=661, "Marionette Framework Unit Tests")
> │  │  ├───0.03 MB (00.00%) ── string(length=22, copies=1139, "JavaScript correctness")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=17, copies=1061, "Windows XP debug ")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=1, copies=1414, "B")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ++ string(length=48, copies=385, "tests-mozilla-inbound-snowleopard-debug-unittest")
> │  │  ├───0.03 MB (00.00%) ── string(length=15, copies=1408, "rs-count-number")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=37, copies=1408, ".result-status-count .rs-count-number")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=1, copies=1370, "3")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=23, copies=1026, "B2G ICS Emulator debug ")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=1, copies=1362, "2")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=1, copies=1323, "4")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=11, copies=1298, "b2g-linux64")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=22, copies=938, "W3C Web Platform Tests")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=14, copies=934, "Linux x64 opt ")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=16, copies=933, "Linux x64 debug ")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=1, copies=1230, "5")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=3, copies=1217, "pgo")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ++ string(length=50, copies=328, "tests-mozilla-inbound-ubuntu64_vm-b2gdt-opt-unitte")
> │  │  ├───0.03 MB (00.00%) ++ string(length=61, copies=328, "Run other benchmark with Talos, performance testing framework")
> │  │  ├───0.03 MB (00.00%) ++ string(length=42, copies=397, "run SVG benchmark (animation, performance)")
> │  │  ├───0.03 MB (00.00%) ── string(length=20, copies=889, "Just-In-time feature")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ++ string(length=36, copies=394, "tests-mozilla-inbound-macosx64-talos")
> │  │  ├───0.03 MB (00.00%) ── string(length=10, copies=883, "Linux opt ")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=5, copies=1164, "Build")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=9, copies=1143, "JSReftest")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=10, copies=840, "linux32pgo")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=10, copies=840, "linux64pgo")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=12, copies=840, "mulet-osxopt")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ── string(length=12, copies=840, "windowsxppgo")/gc-heap/latin1
> │  │  ├───0.03 MB (00.00%) ++ string(length=57, copies=176, " result-status-count text-right btn-red-count-classified ")
> │  │  ├───0.03 MB (00.00%) ++ string(length=59, copies=176, " result-status-count text-right btn-red-count-unclassified ")
> │  │  ├───0.03 MB (00.00%) ++ string(length=42, copies=371, "tests-mozilla-inbound-xp-ix-debug-unittest")
> │  │  ├───0.02 MB (00.00%) ── string(length=23, copies=819, "API direct unit testing")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=44, copies=358, "tests-mozilla-inbound-win7-ix-debug-unittest")
> │  │  ├───0.02 MB (00.00%) ── string(length=4, copies=1050, "asan")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=29, copies=443, "Gaia Python Integration Tests")
> │  │  ├───0.02 MB (00.00%) ── string(length=16, copies=771, "Android 4.0 opt ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=42, copies=342, "tests-mozilla-inbound-win7-ix-opt-unittest")
> │  │  ├───0.02 MB (00.00%) ── string(length=9, copies=1002, "Crashtest")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=8, copies=997, "XPCShell")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=40, copies=327, "tests-mozilla-inbound-xp-ix-opt-unittest")
> │  │  ├───0.02 MB (00.00%) ++ string(length=29, copies=415, "Mochitest e10s Browser Chrome")
> │  │  ├───0.02 MB (00.00%) ── string(length=15, copies=726, "Windows XP opt ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=13, copies=720, "b2g-emu-kkopt")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=14, copies=720, "windows7-32pgo")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=14, copies=720, "windows8-32pgo")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=15, copies=720, "b2g-emu-kkdebug")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=21, copies=720, "b2g-device-imagedebug")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=16, copies=712, "Android 2.3 opt ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=18, copies=700, "Android 4.0 debug ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=38, copies=310, "Run Dromaeo JavaScript benchmark suite")
> │  │  ├───0.02 MB (00.00%) ── string(length=23, copies=696, "Android 2.3 opt Reftest")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=16, copies=695, "Windows 7 debug ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=28, copies=925, "B2G ICS Emulator opt Reftest")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=29, copies=925, "B2G ICS Emulator opt Reftest ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=30, copies=925, "B2G ICS Emulator opt Reftest R")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=31, copies=925, "B2G ICS Emulator opt Reftest R ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=162, copies=61, "/n    <span class="platform-group">/n        <span class="disabled job-group" title="Mochitest">M(</span>/n        <span class="job-group-list"></span>)/n    </sp")
> │  │  ├───0.02 MB (00.00%) ── string(length=3, copies=908, "bc2")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=3, copies=896, "bc3")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=3, copies=895, "bc1")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=16, copies=669, "Jetpack SDK Test")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=23, copies=669, "b2g_mozilla-inbound-b2g")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=9, copies=891, "JIT Tests")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=23, copies=659, "Linux debug Mochitest M")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=17, copies=658, "C++ Unitary Tests")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=15, copies=652, "Linux x64 asan ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=41, copies=287, "tests-mozilla-inbound-win8-debug-unittest")
> │  │  ├───0.02 MB (00.00%) ++ string(length=49, copies=234, "tests-mozilla-inbound-mountainlion-debug-unittest")
> │  │  ├───0.02 MB (00.00%) ── string(length=32, copies=840, "B2G ICS Emulator debug Mochitest")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=33, copies=840, "B2G ICS Emulator debug Mochitest ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=34, copies=840, "B2G ICS Emulator debug Mochitest M")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=35, copies=840, "B2G ICS Emulator debug Mochitest M ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=44, copies=840, "B2G ICS Emulator debug Mochitest M Mochitest")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=45, copies=840, "B2G ICS Emulator debug Mochitest M Mochitest ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=1, copies=825, "C")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=1, copies=822, "X")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=33, copies=271, "tests-mozilla-inbound-linux-talos")
> │  │  ├───0.02 MB (00.00%) ── string(length=16, copies=607, "Windows 8 debug ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=38, copies=805, "B2G ICS Emulator opt Reftest R Reftest")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=39, copies=805, "B2G ICS Emulator opt Reftest R Reftest ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=22, copies=602, "B2G Desktop Linux x64 ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=16, copies=600, "OS X 10.6 debug ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=160, copies=53, "/n    <span class="platform-group">/n        <span class="disabled job-group" title="Reftest">R(</span>/n        <span class="job-group-list"></span>)/n    </sp")
> │  │  ├───0.02 MB (00.00%) ++ string(length=35, copies=263, "tests-mozilla-inbound-linux64-talos")
> │  │  ├───0.02 MB (00.00%) ── string(length=2, copies=787, "td")/gc-heap/two-byte
> │  │  ├───0.02 MB (00.00%) ++ string(length=29, copies=331, "performance testing framework")
> │  │  ├───0.02 MB (00.00%) ── string(length=1, copies=760, "J")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=64, copies=120, "<table><tbody><tr><td class="job-row"></td></tr></tbody></table>")
> │  │  ├───0.02 MB (00.00%) ++ string(length=39, copies=253, "tests-mozilla-inbound-win8-opt-unittest")
> │  │  ├───0.02 MB (00.00%) ── string(length=15, copies=750, "Mochitest Other")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=3, copies=748, "oth")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=16, copies=557, "OS X 10.8 debug ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ++ string(length=27, copies=309, "UI-level testing on Android")
> │  │  ├───0.02 MB (00.00%) ++ string(length=46, copies=239, "tests-mozilla-inbound-ubuntu32_vm-pgo-unittest")
> │  │  ├───0.02 MB (00.00%) ── string(length=24, copies=696, "Android 2.3 opt Reftest ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=25, copies=696, "Android 2.3 opt Reftest R")/gc-heap/latin1
> │  │  └───0.02 MB (00.00%) ── string(length=26, copies=696, "Android 2.3 opt Reftest R ")/gc-heap/latin1

Notice particularly the "copies" field, which tells you how many copies of each
of these string is held. E.g. we have 29674 copies of the string "fill me",
which sounds like it could be avoided :)

This data isn't perfectly actionable, but it can often give you good hints.
Strings are created most often when you concatenate strings and when you split
strings. And when you see something like this:

> │  │  ├───0.02 MB (00.00%) ── string(length=32, copies=840, "B2G ICS Emulator debug Mochitest")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=33, copies=840, "B2G ICS Emulator debug Mochitest ")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=34, copies=840, "B2G ICS Emulator debug Mochitest M")/gc-heap/latin1
> │  │  ├───0.02 MB (00.00%) ── string(length=35, copies=840, "B2G ICS Emulator debug Mochitest M ")/gc-heap/latin1

it indicates that you're building up strings one char at a time, which can be very
inefficient. It's often better to build an array of strings and then use
Array.join() to concatenate them all at the end. (Though beware that the array
also uses memory, so often you want to have some kind of class-level array
worker that gets reused for this purpose.)

(The JS engine has some optimizations for such cases, but it's
often more effective to do things in a different way at the JS level.)

If this data alone isn't enough to be helpful, I have some ad hoc profiling
tools that I might be able to get you better data with.
Thank you for filing this :-)
Priority: -- → P2
Déjà vu of bug 920149...
Here are results from my ad hoc JS profiler. Interpreting the results isn't straightforward, so I've annotated the first five entries which hopefully explains what's going on. Please ask if anything is unclear. The first three entries look like easy candidates for improvement.
These results are super useful! Improving the performance of the UI is one of our top priorities at the moment, thanks for doing that :)
Keywords: perf
No longer blocks: treeherder-dev-transition
Keywords: regression
Depends on: 1125245
Priority: P2 → P3
See Also: → 1331399
Component: Treeherder → Treeherder: Frontend
No longer depends on: 1125245
Depends on: 1097101

One way we could mitigate this would be to return jobs with ids for things like job_type, job_group, and other foreign keys. We would hold those in an in-memory item somewhere and use them as lookups where needed.

You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: