From b8d0d19a6d410776b53a41e7cae90f68d4b22bb7 Mon Sep 17 00:00:00 2001 From: Rami Ylimäki Date: Wed, 27 Oct 2010 17:25:50 +0300 Subject: composite: Report pixmap usage of client windows to resource extension. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Erkki Seppälä Signed-off-by: Rami Ylimäki Reviewed-by: Mikhail Gusarov Reviewed-by: Tiago Vignatti --- composite/compext.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'composite') diff --git a/composite/compext.c b/composite/compext.c index 940eed1fc..1d4d8bf97 100644 --- a/composite/compext.c +++ b/composite/compext.c @@ -497,6 +497,28 @@ SProcCompositeDispatch(ClientPtr client) return BadRequest; } +/** @see GetDefaultBytes */ +static void +GetCompositeClientWindowBytes(pointer value, XID id, ResourceSizePtr size) +{ + WindowPtr window = value; + + /* Currently only pixmap bytes are reported to clients. */ + size->resourceSize = 0; + + /* Calculate pixmap reference sizes. */ + size->pixmapRefSize = 0; + if (window->redirectDraw != RedirectDrawNone) + { + SizeType pixmapSizeFunc = GetResourceTypeSizeFunc(RT_PIXMAP); + ResourceSizeRec pixmapSize = { 0, 0 }; + ScreenPtr screen = window->drawable.pScreen; + PixmapPtr pixmap = screen->GetWindowPixmap(window); + pixmapSizeFunc(pixmap, pixmap->drawable.id, &pixmapSize); + size->pixmapRefSize += pixmapSize.pixmapRefSize; + } +} + void CompositeExtensionInit(void) { @@ -529,6 +551,9 @@ CompositeExtensionInit(void) if (!CompositeClientWindowType) return; + SetResourceTypeSizeFunc(CompositeClientWindowType, + GetCompositeClientWindowBytes); + CompositeClientSubwindowsType = CreateNewResourceType (FreeCompositeClientSubwindows, "CompositeClientSubwindows"); if (!CompositeClientSubwindowsType) -- cgit v1.2.3