This time from my chromium account: On Fri, Nov 27, 2009 at 5:43 PM, Kenneth Russell <k...@chromium.org> wrote: > On Thu, Nov 26, 2009 at 12:32 PM, Jim Roskind <j...@chromium.org> wrote: >> SUMMARY: >> Our handling of bitmap memory may be a fertile ground for saving both >> physical and virtual memory. I'm still investigating this, but I wanted to >> share my thoughts and very preliminary findings so that other's might chime >> in and correct/extend what I'm seeing. >> >> PRELIMINARY DETAILS and thoughts. >> AntonM identified that at least part of the under-counting in the memory >> blame utility appeared because of allocations that took place in >> CreateDIBSection. That routine creates bitmaps that provide backing store >> for the display. The allocations appear to be made in kernel space, even >> though the memory is made accessible to users (Chrome) in data returned by >> this call.. >> a) CreateDIBSection is called in both renderer and in the browser. >> Allocation sizes often reflect the height and width of nearly the entire >> display device, times 4 (32bits per pixel results in 4 bytes per pixel). On >> my machine, this regularly produced allocations in the range of 7+megs. If, >> as I was told by Will Chan, we write to one store and then "swap it into >> place," then each user (tab? embedded video?) may actually need double this >> amount to get their work done. >> b) This function is called a LOT. It would appear that we might almost be >> thrashing allocation and deallocations at times... but I'm still >> investigating. Maybe the debugger was impacting the display... and causing >> an evil feedback loop. > > While investigating > http://code.google.com/p/chromium/issues/detail?id=21921 I observed > that on Windows that when the Chrome window is resized, a Skia canvas > the size of the entire window is allocated and discarded in order to > paint the window background. I don't think this happens during normal > repainting operations but is probably one cause of allocation > thrashing of these objects. If it would be helpful I can try to > reconstruct where this happens but others on this list probably know > where it is off the top of their heads.
That's probably in the browser process in response to a WM_PAINT. The allocation is done in canvas_paint_win.h. -Scott >> c) I'm not completely clear on the lifetime of these large allocations. >> They are to some extent reportedly (re: msdn) released when we call >> DeleteObject, but it is not immediately clear if they are simply put on a >> free list, or decommitted, or fully returned to the OS. I'm also not clear >> on the intended lifetime in the context of Chrome/Webkit, renderers, >> browsers, and plugins. Can we get away with a more minimal set of such >> bitmaps? >> d) We also call CreateDIBSection with really small areas. Specifically, we >> call it with 1 x 1 pixel areas (there is a comment in the code that we'd >> like to ask for a zero size region... but CreateDIBSection reportedly does >> not deal with zero very well). I noticed that the tiny bitmap that is >> returned is always 64K aligned, and I'm *suspicious* that we've actually >> allocated more memory, and I'm sure we've at least fragmented our VM space >> with such tiny allocations. >> e) There is a possibility that we could more directly manage the large >> bitmap storage by calling into CreateDIBSection with pre-allocated areas >> (re: mapped objects). Perhaps I'm confused, but I think we're using these >> bitmaps to allow renderers to write directly to the graphical context (or to >> a secondary backing store that is swapped into place). Perchance such more >> direct memory handling could assure we fragment less, and decommit as much >> as possible. >> In chatting with Will Chan last night, I also heard that JamesR is looking >> at the impact on virtual address space of having a multitude of backing >> store bitmaps active. Will indicated that when a page has a LOT of videos, >> that he was shown that each might require its own bitmap, He said that >> JamesR thought this may be playing a role in our out-of-memory problems by >> exhausting/fragmenting virtual space. >> >> Jim >> >> -- >> Chromium Developers mailing list: chromium-dev@googlegroups.com >> View archives, change email options, or unsubscribe: >> http://groups.google.com/group/chromium-dev > > -- > Chromium Developers mailing list: chromium-dev@googlegroups.com > View archives, change email options, or unsubscribe: > http://groups.google.com/group/chromium-dev > -- Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev