Last Comment Bug 735550 - unmark gray objects held alive by nsXBLDocGlobalObject of skippable nsXBLDocumentInfo
: unmark gray objects held alive by nsXBLDocGlobalObject of skippable nsXBLDocu...
Status: RESOLVED FIXED
[snappy]
:
Product: Core
Classification: Components
Component: XBL (show other bugs)
: Trunk
: All All
: -- normal (vote)
: mozilla14
Assigned To: Andrew McCreight [:mccr8]
:
Mentors:
Depends on:
Blocks: 716598 722715
  Show dependency treegraph
 
Reported: 2012-03-13 18:38 PDT by Andrew McCreight [:mccr8]
Modified: 2012-03-22 13:46 PDT (History)
5 users (show)
See Also:
Crash Signature:
(edit)
QA Whiteboard:
Iteration: ---
Points: ---
Has Regression Range: ---
Has STR: ---


Attachments
WIP (2.14 KB, patch)
2012-03-14 10:54 PDT, Andrew McCreight [:mccr8]
no flags Details | Diff | Review
mark global held by live XBLDocInfo (2.25 KB, patch)
2012-03-16 16:45 PDT, Andrew McCreight [:mccr8]
bugs: review+
Details | Diff | Review

Description Andrew McCreight [:mccr8] 2012-03-13 18:38:49 PDT
This is another pattern that shows up very frequently on my simple test case of Gmail + error console: there's an nsXBLDocumentInfo that appears to be live, but it contains an nsXBLDocGlobalObject that points to a JSContext that points to another JSContext, which points to an "nsXBLPrototypeScript compilation scope" object, that reaches about 45 JS objects.  I think we can extend the CanSkip function for nsXBLDocumentInfo to reach through that chain and unmarkGray what the JSContext holds onto.  I see about a dozen of these in my CC graph, so that could be another 540 nodes we could get rid of.
Comment 1 Andrew McCreight [:mccr8] 2012-03-13 18:55:49 PDT
I should probably also just make nsXBLDocumentInfo into a skippable class, as there are a dozen or so in the graph with no children.
Comment 2 Andrew McCreight [:mccr8] 2012-03-14 10:54:59 PDT
Created attachment 605841 [details] [diff] [review]
WIP
Comment 3 Andrew McCreight [:mccr8] 2012-03-14 10:56:03 PDT
I just piggybacked on nsXBLDocumentInfo::MarkInCCGeneration instead of turning nsXBLDocumentInfo into a skippable class. I think we should use a more general solution for childless nodes.
Comment 4 Andrew McCreight [:mccr8] 2012-03-16 16:45:25 PDT
Created attachment 606787 [details] [diff] [review]
mark global held by live XBLDocInfo
Comment 5 Andrew McCreight [:mccr8] 2012-03-17 11:20:48 PDT
Comment on attachment 606787 [details] [diff] [review]
mark global held by live XBLDocInfo

This had a good try run with some of my other patches.
https://tbpl.mozilla.org/?tree=Try&rev=869ed959b506

In the medium term, I want to move all of these two unmarking functions that MarkInCCGeneration (unmark protos and unmark script context) into the GC.  If you think it makes sense, Olli, I can just directly do that instead of having this intermediate bug.
Comment 6 Olli Pettay [:smaug] (high review load, please consider other reviewers) 2012-03-18 02:15:31 PDT
Comment on attachment 606787 [details] [diff] [review]
mark global held by live XBLDocInfo

We could do this now.
Comment 7 Andrew McCreight [:mccr8] 2012-03-18 07:19:40 PDT
Thanks for the reviews.

https://hg.mozilla.org/integration/mozilla-inbound/rev/7c0ac8201f4e

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