Bug 33732 - <canvas>.getContext('2d') seems to never free memory
Summary: <canvas>.getContext('2d') seems to never free memory
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: New Bugs (show other bugs)
Version: 528+ (Nightly build)
Hardware: Macintosh Intel OS X 10.6
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-01-15 12:57 PST by Simo Kinnunen
Modified: 2010-11-23 23:06 PST (History)
6 users (show)

See Also:


Attachments
Example (301 bytes, text/html)
2010-01-15 12:57 PST, Simo Kinnunen
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Simo Kinnunen 2010-01-15 12:57:00 PST
Created attachment 46705 [details]
Example

Memory allocated for CanvasRenderingContext2D never gets freed. Simply calling getContext('2d') and never doing anything with it nor its <canvas> will eat all your memory. See the attachment for a simple example (and remember to monitor your memory usage).

Creating a canvas element by itself (without accessing the rendering context) doesn't leak any memory.

Firefox exhibits the same "nom nom nom" behavior, but - unlike WebKit - frees the gobbled up memory after a while. I do not know the inner workings of the canvas element, but I take it that there is a reason why neither WebKit nor Firefox free the memory immediately when [from my point of view] it's no longer in use at all; I hope someone can educate me on this one. Would it at least be possible to implement some kind of timed garbage collection?
Comment 1 Oliver Hunt 2010-01-15 13:37:13 PST
Curiously we _do_ do periodic gc, so i wander what's happening.  The logical conclusion is that the canvas is remaining live for some reason...
Comment 2 Oliver Hunt 2010-01-15 13:37:33 PST
(i haven't verified that i see the leakage however)
Comment 3 Sam Weinig 2010-01-15 16:27:06 PST
(In reply to comment #1)
> Curiously we _do_ do periodic gc, so i wander what's happening.  The logical
> conclusion is that the canvas is remaining live for some reason...

I don't believe we actually do a periodic gc.  We do a gc on navigation though.
Comment 4 Simo Kinnunen 2010-02-18 00:30:56 PST
Would someone mind at least confirming the issue?
Comment 5 Adam Barth 2010-02-18 00:40:49 PST
Sure, but we don't usually differentiate between the UNCONFIRMED and the NEW state.
Comment 6 Alexey Proskuryakov 2010-11-23 23:06:14 PST
Is the issue perhaps that CanvasRenderingContext2D doesn't call reportExtraMemoryCost()?