Closed Bug 465648 Opened 16 years ago Closed 8 years ago

[@font-face] move UpdateFontList into GetFontAt

Categories

(Core :: Graphics, defect, P3)

x86
macOS
defect

Tracking

()

RESOLVED INVALID

People

(Reporter: jtd, Unassigned)

References

Details

Follow up work from bug 457821:
https://bugzilla.mozilla.org/show_bug.cgi?id=457821#c52

Various places within layout and gfx call fontGroup->GetFontAt(0), typically to grab metrics info.  But when a user font set is present, the first font can potentially change, depending upon the state of the user font set.  The check to see whether the internal font list needs to be regenerated is in UpdateFontList.  Currently this is called from outside code but it should probably be called from within GetFontAt code.

Additionally, the code could be smarter about knowing when to regenerate the internal font list we only need to regenerate this when the order will change due to a newly downloaded font (i.e. many font groups may be in a page that contains @font-face rules but do not use any of those user-defined fonts, so changes in the user font set will not affect their state).
Priority: -- → P3
Summary: move UpdateFontList into GetFontAt → [@font-face] move UpdateFontList into GetFontAt
Blocks: 469752
FWIW, i can barely watch a YouTube video on http://www.geek.com/articles/games/skyrim-graphics-comparison-proves-pc-is-superior-20111122/ due to 25.10% of my quadcore being used by firefox.exe, with stack:

xul.dll!?GetFontAt@gfxFontGroup@@UAEPAVgfxFont@@H@Z+0x72e3
xul.dll!?GetFontAt@gfxFontGroup@@UAEPAVgfxFont@@H@Z+0x72ff
xul.dll!?TransformBounds@gfxMatrix@@QBE?AUgfxRect@@ABU2@@Z+0x65b4
xul.dll!?GoodAlignmentLog2@gfxAlphaRecovery@@SAIXZ+0x7fc8
xul.dll!?GoodAlignmentLog2@gfxAlphaRecovery@@SAIXZ+0x5f8f
xul.dll!?SetSpaceGlyph@gfxTextRun@@QAEXPAVgfxFont@@PAVgfxContext@@I@Z+0x17e4
xul.dll!?SetSpaceGlyph@gfxTextRun@@QAEXPAVgfxFont@@PAVgfxContext@@I@Z+0x17ee
xul.dll!?TransformBounds@gfxMatrix@@QBE?AUgfxRect@@ABU2@@Z+0x6b4a
xul.dll!?UpdateFontList@gfxFontGroup@@UAEXXZ+0xd6e0
xul.dll!?UpdateFontList@gfxFontGroup@@UAEXXZ+0xd708
xul.dll!?AllocateStorage@gfxTextRun@@KAPAVCompressedGlyph@1@AAPBXII@Z+0x6cb

64-bit Windows 7 Enterprise on 2.93GHz Xeon + Nvidia Quadro FX 1800. 4.0/6.0 Physical RAM in use. 

Application: Firefox 10.0 (20120129021758)
Operating System: WINNT (x86-msvc)

- BarTab Lite 1.2
- Download Statusbar 0.9.10
- Extension List Dumper 1.15.2
- Firebug 1.9.1
- Firefogg 2.9.19 (Disabled)
- FireFTP 2.0.1
- Flashblock 1.5.15.1
- FromWhereToWhere 0.25.0 (Disabled)
- Memory Fox 7.4
- Mozilla Archive Format 2.0.4
- New Tab JumpStart 0.5a5.4.3
- NoScript 2.2.9
- Places Maintenance 1.3 (Disabled)
- Session History Tree 1.0 (Disabled)
- Session Manager 0.7.8.1
- Showcase 0.9.5.8 (Disabled)
- Tab History Menu 2.1.1 (Disabled)
(In reply to Cees T. from comment #1)
> FWIW, i can barely watch a YouTube video on
> http://www.geek.com/articles/games/skyrim-graphics-comparison-proves-pc-is-
> superior-20111122/ due to 25.10% of my quadcore being used by firefox.exe,
> with stack:
> 
> xul.dll!?GetFontAt@gfxFontGroup@@UAEPAVgfxFont@@H@Z+0x72e3
> xul.dll!?GetFontAt@gfxFontGroup@@UAEPAVgfxFont@@H@Z+0x72ff
> xul.dll!?TransformBounds@gfxMatrix@@QBE?AUgfxRect@@ABU2@@Z+0x65b4
> xul.dll!?GoodAlignmentLog2@gfxAlphaRecovery@@SAIXZ+0x7fc8
> xul.dll!?GoodAlignmentLog2@gfxAlphaRecovery@@SAIXZ+0x5f8f
> xul.dll!?SetSpaceGlyph@gfxTextRun@@QAEXPAVgfxFont@@PAVgfxContext@@I@Z+0x17e4
> xul.dll!?SetSpaceGlyph@gfxTextRun@@QAEXPAVgfxFont@@PAVgfxContext@@I@Z+0x17ee
> xul.dll!?TransformBounds@gfxMatrix@@QBE?AUgfxRect@@ABU2@@Z+0x6b4a
> xul.dll!?UpdateFontList@gfxFontGroup@@UAEXXZ+0xd6e0
> xul.dll!?UpdateFontList@gfxFontGroup@@UAEXXZ+0xd708
> xul.dll!?AllocateStorage@gfxTextRun@@KAPAVCompressedGlyph@1@AAPBXII@Z+0x6cb

I don't think this stack is actually relevant here.... the call sequence it suggests doesn't make any sense, and note the large offsets (+0x....) it shows from the given symbols, which indicate that the stack trace hasn't really been able to find the correct functions.

I'd suggest trying a fresh profile, to see if something among your add-ons may be contributing to the problem you're experiencing.
I think the Memory Fox add-on broke it, as it actually crashed since a long time and that stack was useless: https://crash-stats.mozilla.com/report/index/bp-abcd5ce1-3cd2-4383-a7b7-bcce12120209

I'm currently running with the WinDbg downloaded via the bold link on https://developer.mozilla.org/en/How_to_get_a_stacktrace_with_WinDbg but Process Explorer says it's a 64-bit image.

I did get some stacks from Process Explorer before trying Memory Fox: http://pastebin.com/B0xqVUHN
Cees, please file a separate bug under Video/Audio. (And try a Nightly build)
(In reply to Robert O'Callahan (:roc) (Mozilla Corporation) from comment #4)
> Cees, please file a separate bug under Video/Audio. (And try a Nightly build)

Filed as bug 725993 - Random up to a minute-long unresponsive GUI. I couldn't find the Audio/Video component.
No longer applies to the way the current code works.
Status: NEW → RESOLVED
Closed: 8 years ago
Resolution: --- → INVALID
Assignee: jd.bugzilla → nobody
You need to log in before you can comment on or make changes to this bug.