116 lines
3.2 KiB
C
116 lines
3.2 KiB
C
|
/*
|
||
|
* Copyright © 2000 Keith Packard
|
||
|
*
|
||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||
|
* the above copyright notice appear in all copies and that both that
|
||
|
* copyright notice and this permission notice appear in supporting
|
||
|
* documentation, and that the name of Keith Packard not be used in
|
||
|
* advertising or publicity pertaining to distribution of the software without
|
||
|
* specific, written prior permission. Keith Packard makes no
|
||
|
* representations about the suitability of this software for any purpose. It
|
||
|
* is provided "as is" without express or implied warranty.
|
||
|
*
|
||
|
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||
|
* EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||
|
* PERFORMANCE OF THIS SOFTWARE.
|
||
|
*/
|
||
|
|
||
|
#include "xftint.h"
|
||
|
|
||
|
static Bool _XftConfigInitialized;
|
||
|
|
||
|
_X_EXPORT Bool
|
||
|
XftInit (_Xconst char *config _X_UNUSED)
|
||
|
{
|
||
|
if (_XftConfigInitialized)
|
||
|
return True;
|
||
|
_XftConfigInitialized = True;
|
||
|
if (!FcInit ())
|
||
|
return False;
|
||
|
return True;
|
||
|
}
|
||
|
|
||
|
_X_EXPORT int
|
||
|
XftGetVersion (void)
|
||
|
{
|
||
|
return XftVersion;
|
||
|
}
|
||
|
|
||
|
static struct {
|
||
|
const char *name;
|
||
|
int alloc_count;
|
||
|
size_t alloc_mem;
|
||
|
int free_count;
|
||
|
size_t free_mem;
|
||
|
} XftInUse[XFT_MEM_NUM] = {
|
||
|
{ "XftDraw", 0, 0, 0, 0 }, /* XFT_MEM_DRAW */
|
||
|
{ "XftFont", 0, 0, 0, 0 }, /* XFT_MEM_FONT */
|
||
|
{ "XftFtFile", 0, 0, 0, 0 }, /* XFT_MEM_FILE */
|
||
|
{ "XftGlyph", 0, 0, 0, 0 }, /* XFT_MEM_GLYPH */
|
||
|
};
|
||
|
|
||
|
static int XftAllocCount;
|
||
|
static size_t XftAllocMem;
|
||
|
|
||
|
static int XftFreeCount;
|
||
|
static size_t XftFreeMem;
|
||
|
|
||
|
static const size_t XftMemNotice = 1*1024*1024;
|
||
|
|
||
|
static size_t XftAllocNotify, XftFreeNotify;
|
||
|
|
||
|
_X_HIDDEN void
|
||
|
XftMemReport (void)
|
||
|
{
|
||
|
int i;
|
||
|
printf ("Xft Memory Usage:\n");
|
||
|
printf ("\t Which Alloc Free\n");
|
||
|
printf ("\t count bytes count bytes\n");
|
||
|
for (i = 0; i < XFT_MEM_NUM; i++)
|
||
|
printf ("\t%9.9s%8d%8lu%8d%8lu\n",
|
||
|
XftInUse[i].name,
|
||
|
XftInUse[i].alloc_count, (unsigned long) XftInUse[i].alloc_mem,
|
||
|
XftInUse[i].free_count, (unsigned long) XftInUse[i].free_mem);
|
||
|
printf ("\t%9.9s%8d%8lu%8d%8lu\n",
|
||
|
"Total",
|
||
|
XftAllocCount, (unsigned long) XftAllocMem,
|
||
|
XftFreeCount, (unsigned long) XftFreeMem);
|
||
|
XftAllocNotify = 0;
|
||
|
XftFreeNotify = 0;
|
||
|
}
|
||
|
|
||
|
_X_HIDDEN void
|
||
|
XftMemAlloc (int kind, size_t size)
|
||
|
{
|
||
|
if (XftDebug() & XFT_DBG_MEMORY)
|
||
|
{
|
||
|
XftInUse[kind].alloc_count++;
|
||
|
XftInUse[kind].alloc_mem += size;
|
||
|
XftAllocCount++;
|
||
|
XftAllocMem += size;
|
||
|
XftAllocNotify += size;
|
||
|
if (XftAllocNotify > XftMemNotice)
|
||
|
XftMemReport ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
_X_HIDDEN void
|
||
|
XftMemFree (int kind, size_t size)
|
||
|
{
|
||
|
if (XftDebug() & XFT_DBG_MEMORY)
|
||
|
{
|
||
|
XftInUse[kind].free_count++;
|
||
|
XftInUse[kind].free_mem += size;
|
||
|
XftFreeCount++;
|
||
|
XftFreeMem += size;
|
||
|
XftFreeNotify += size;
|
||
|
if (XftFreeNotify > XftMemNotice)
|
||
|
XftMemReport ();
|
||
|
}
|
||
|
}
|