-
Suggestion
-
Resolution: Unresolved
-
None
-
69
-
Review pages can cause high CPU load. From one client's debugs logs we see that over 13 seconds were spent in rendering review page:
- ~7-8 seconds spent in preparing data for rendering including 2 calls to FRXDO.mapInlineComments() (2.5 secs each)
- ~3 seconds spent in lines rendering (~500 diff regions)
- ~3 seconds spent in comment rendering (~20 comments)
At least 1 superfluous FRXDO.mapInlineComments() call can be avoided
Example stacktrace:
"btpool0-9732" prio=10 tid=0x00007fbe198d3800 nid=0xb74 runnable [0x00007fbdf34ef000] java.lang.Thread.State: RUNNABLE at com.cenqua.fisheye.diff.MyersOND.buildPath(MyersOND.java:123) at com.cenqua.fisheye.diff.MyersOND.diff(MyersOND.java:82) at com.cenqua.fisheye.diff.Diff.diff(Diff.java:8) at com.cenqua.fisheye.diff.DiffHelper.getHunkList(DiffHelper.java:26) at com.cenqua.fisheye.diff.DiffHelper.getHunkList(DiffHelper.java:139) at com.cenqua.crucible.revision.source.Source.getHunkList(Source.java:225) at com.cenqua.crucible.view.FRXDO.getHunkList(FRXDO.java:1273) at com.cenqua.crucible.view.FRXDO.getTetrisGrid(FRXDO.java:744) at com.cenqua.crucible.view.FRXDO.mapInlineComments(FRXDO.java:772) at com.cenqua.crucible.view.FRXDO.<init>(FRXDO.java:201) at com.cenqua.crucible.revision.managers.DefaultContentManager.makeFRXDO(DefaultContentManager.java:107) at com.atlassian.crucible.actions.ReviewBaseAction.makeFRXDO(ReviewBaseAction.java:596) at com.atlassian.crucible.actions.ViewFRXAction.execute(ViewFRXAction.java:184)
2nd example stacktrace:
"btpool0-407" prio=10 tid=0x00002aafc873f000 nid=0x1aac runnable [0x0000000049ba8000] java.lang.Thread.State: RUNNABLE at java.io.RandomAccessFile.length(Native Method) at com.cenqua.fisheye.io.BufferedRandomAccessInputStream.length(BufferedRandomAccessInputStream.java:213) at com.cenqua.fisheye.io.Utf16ERandomAccessIoStream.length(Utf16ERandomAccessIoStream.java:32) at com.cenqua.fisheye.io.BufferedCharSequence.<init>(BufferedCharSequence.java:25) at com.cenqua.fisheye.io.BufferedCharSequence.subSequence(BufferedCharSequence.java:52) at com.cenqua.fisheye.diff.RegionListDiffSequences.getCharSequence(RegionListDiffSequences.java:75) at com.cenqua.fisheye.diff.RegionListDiffSequences.equalImpl(RegionListDiffSequences.java:69) at com.cenqua.fisheye.diff.RegionListDiffSequences.equal(RegionListDiffSequences.java:59) at com.cenqua.fisheye.diff.MyersOND.buildPath(MyersOND.java:123) at com.cenqua.fisheye.diff.MyersOND.diff(MyersOND.java:82) at com.cenqua.fisheye.diff.Diff.diff(Diff.java:8) at com.cenqua.fisheye.diff.EDiff.doDiff(EDiff.java:65) at com.cenqua.fisheye.diff.view.DiffPrinter.setupEdiff(DiffPrinter.java:266) at com.cenqua.fisheye.diff.view.DiffPrinter.access$100(DiffPrinter.java:28) at com.cenqua.fisheye.diff.view.DiffPrinter$1.next(DiffPrinter.java:174) at com.cenqua.fisheye.diff.view.DiffPrinter$1.next(DiffPrinter.java:151) at com.cenqua.crucible.view.DiffDO.mapCommentsToDiff(DiffDO.java:38) at com.cenqua.crucible.view.FRXDO.getLines(FRXDO.java:1245) at com.cenqua.crucible.view.FRXDO.isNoChange(FRXDO.java:1216)