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)
Tree Management
Treeherder: Frontend
Tracking
(Not tracked)
NEW
People
(Reporter: n.nethercote, Unassigned)
References
Details
(Keywords: perf, regression)
Attachments
(1 file)
73.26 KB,
text/plain
|
Details |
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.
Comment 1•10 years ago
|
||
Thank you for filing this :-)
Blocks: treeherder-dev-transition, 1067844
Priority: -- → P2
Comment 2•10 years ago
|
||
Déjà vu of bug 920149...
Reporter | ||
Comment 3•10 years ago
|
||
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.
Comment 4•10 years ago
|
||
These results are super useful! Improving the performance of the UI is one of our top priorities at the moment, thanks for doing that :)
Updated•10 years ago
|
No longer blocks: treeherder-dev-transition
Keywords: regression
Updated•10 years ago
|
Priority: P2 → P3
Updated•7 years ago
|
Component: Treeherder → Treeherder: Frontend
Comment 5•5 years ago
|
||
One way we could mitigate this would be to return jobs with id
s 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.
Description
•