As usual, lots of great, insightful comments (and thanks for the kudos)…
Jevan on the DWM team gives a nice response to some of the issues raised.
Stephane and Lorenzo ask about battery life, heat, and power management. That’s worthy of a separate post, and I’ll add it to the list of topics. Foreshadowing, let me say that the DWM works hard to be smart about avoiding rendering when and where it’s not necessary, which is critical for power management.
asdf (is that your real name J?) wonders about what I meant by “effectively no more ‘surface lost’ messages from DirectX”. I’m actually not 100% sure on this, but I do believe that there truly aren’t any more of these messages, unless you happen to run out of both system memory and disk-based virtual memory.
Regarding the discussion arc on memory usage with Aleki, Frederik, Princess, and Michael, two buffers are required per window for GDI applications, but not for the reasons surmised. For DirectX/WPF applications, only one buffer is required. I’ll discuss more in the future “Memory Usage in the DWM” topic.
Nevertheless, the prevailing comment about the memory requirements being large are absolutely true… fortunately the graphics cards and integrated systems often do have substantial amounts of memory, and the WDDM does the absolutely critical job of virtualization.
It’s also very important to realize that not all visible windows need to have their memory buffers in graphics memory all the time. For instance, if a window isn’t updating, then it can remain paged out. Similarly, when windows are moved around, only those that are being “unoccluded” or actually moved need to be in memory.
The fact that the DWM does work well in a large variety of usage scenarios and machine configurations is indication that while the memory requirements are large, the system can and does continue to work well.