Closed Bug 1355600 Opened 9 years ago Closed 9 years ago

nsFont destructor takes 9ms to free up memory.

Categories

(Core :: Layout, enhancement, P3)

50 Branch
enhancement

Tracking

()

RESOLVED DUPLICATE of bug 1355595
Performance Impact low

People

(Reporter: jj.evelyn, Unassigned)

References

Details

(Keywords: perf)

From profile [1] it spends time on nsTArray_base<nsTArrayInfallibleAllocator, nsTArray_CopyWithMemutils>::ShrinkCapacity(unsigned long, unsigned long). I'm not sure if there is anything to improve. File this bug for a record. Is this related to bug 1113069? [1] https://perfht.ml/2p4IE6S
9ms / 8.1 seconds is only .1% of the time. It's not obvious to me that this problem is worth dealing with.
No longer depends on: 1355595
No longer blocks: 1244482, 1303751
(In reply to Jeff Muizelaar [:jrmuizel] from comment #1) > 9ms / 8.1 seconds is only .1% of the time. It's not obvious to me that this > problem is worth dealing with. It's more than half our frame budget, though.
(In reply to Ben Kelly [not reviewing due to deadline][:bkelly] from comment #2) > (In reply to Jeff Muizelaar [:jrmuizel] from comment #1) > > 9ms / 8.1 seconds is only .1% of the time. It's not obvious to me that this > > problem is worth dealing with. > > It's more than half our frame budget, though. This isn't happening all at once. It's a bunch of individual samples spread out over 8.1 seconds.
Whiteboard: [qf] → [qf:p3]
Priority: -- → P3
The profile shows ~nsFont being called by "nsTextFrame::ComputeSelectionUnderlineHeight". I was just looking at that function, trying to figure out how it could possibly be instantiating / destructing a nsFont. There's no obvious nsFont involved if you look at the current version of this code. And then I realized, the function was rewritten at some point since that profile was taken. Specifically, it was rewritten in bug 1355595, in this changeset: https://hg.mozilla.org/mozilla-central/rev/abfece312d74 That removed this code: - int32_t defaultFontSize = - aPresContext->AppUnitsToDevPixels(nsStyleFont(aPresContext).mFont.size); - gfxFloat fontSize = std::min(gfxFloat(defaultFontSize), - aFontMetrics.emHeight); The temporary nsStyleFont instance that we create there has a nsFont member-variable. So that's the font that was getting destructed here. In the new version of this code, we don't instantiate a nsStyleFont (and hence don't instantiate a nsFont) -- we just use a persistent one instead, via the aPresContext->GetDefaultFont() API. So, this is just a version of bug 1355595, basically. I'm duping this over to that bug. (Note: while taking a look at this and trying to catch the ~nsFont in a debugger, I ran into a different unnecessary-nsFont-instantiation/destruction bug, and I filed bug 1383925 on that.)
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → DUPLICATE
See Also: → 1383925
Performance Impact: --- → P3
Whiteboard: [qf:p3]
You need to log in before you can comment on or make changes to this bug.