--- /dev/null
+#!/bin/sh
+
+OUTDIR=$1-$$
+KERNEL=/usr/src/linux-2.6/vmlinux
+
+sudo opcontrol --reset; sudo opcontrol --start --vmlinux=$KERNEL; time ${1+"$@"}; sudo opcontrol --stop
+
+mkdir -p $OUTDIR
+sudo opreport -p /usr/src/linux > $OUTDIR/system.oprofile
+sudo opreport -p /usr/src/linux --symbols > $OUTDIR/system.symbols
+sudo opreport -p /usr/src/linux -c > $OUTDIR/system.callgraph
+sudo opreport -p /usr/src/linux --symbols /home/cworth/opt/xorg/bin/X > $OUTDIR/X.oprofile
+sudo opreport -p /usr/src/linux -c /home/cworth/opt/xorg/bin/X > $OUTDIR/X.callgraph
+sudo opreport -p /usr/src/linux --symbols /home/cworth/opt/xorg/lib/libpixman.so > $OUTDIR/pixman.oprofi
+le
+sudo opreport -p /usr/src/linux -c /home/cworth/opt/xorg/lib/libpixman.so > $OUTDIR/pixman.callgraph
+sudo opreport -p /usr/src/linux --symbols /home/cworth/opt/xorg/lib/xorg/modules/libexa.so > $OUTDIR/lib
+exa.oprofile
+sudo opreport -p /usr/src/linux -c /home/cworth/opt/xorg/lib/xorg/modules/libexa.so > $OUTDIR/libexa.cal
+lgraph
+sudo opreport -p /usr/src/linux --symbols /home/cworth/opt/xorg/lib/xorg/modules/drivers/intel_drv.so >
+$OUTDIR/intel_drv.oprofile
+sudo opreport -p /usr/src/linux -c /home/cworth/opt/xorg/lib/xorg/modules/drivers/intel_drv.so > $OUTDIR
+/intel_drv.callgraph
+sudo opreport -p /usr/src/linux --symbols /lib/libc-2.5.so > $OUTDIR/libc.oprofile
+sudo opreport -p /usr/src/linux -c /lib/libc-2.5.so > $OUTDIR/libc.callgraph
+
+echo "Profile reports saved in $OUTDIR"
--- /dev/null
+[[meta title="Synchronous compositing in the i965 driver"]]
+
+[[tag exa performance xorg]]
+
+A couple of weeks ago I aired [[my_confusion|avoiding_rmw]] about a
+situation in which using EXA with an i965 card was 4 times slower than
+using NoAccel, but that there weren't any large bottlenecks visible in
+the profile at all, (nothing over 5%). And that didn't seem likely at all.
+
+As is [often the
+case](http://en.wikipedia.org/wiki/The_Answer_to_Life,_the_Universe,_and_Everything)
+this wasn't a wrong answer, but was instead a problem with me not
+understanding the question I had asked. I had been profiling over
+enttire runs of mozilla's Trender benchmark, but the 4x slowdown was
+based on the results it reported which measured only the inner loop of
+rendering itself. So my profiles including extraneous computation such
+as page loading that Trender was explicitly not measuring. This was
+actually easy to determine by simply measuring the total runtime of
+Trender and seeing that it slowed down by only 1.5x instead of 4x.
+
+So to get better profiling data, I changed strategy slightly and
+started using an [[on-demand_Trender_technique|trender_bookmark]] that
+Vladimir offered me. It makes it easy to run a one-off Trender loop
+for hundreds of iterations so I can profile exactly the rendering and
+nothing else.
+
+So I used that approach to measure the rendering performance of a
+[worthwhile web page](http://www.gnu.org/licenses/gpl-3.0.html), with
+both NoAccel and EXA, (again with an Intel i965 card). I used my
+standard [profile script](http://cworth.org/bin/profile) to generate
+piles of data.
+
+The trickiest part was then coming up with a reasonable way to
+visualize the data to try to figure out what was going on. My brother,
+[[Richard]], pulled his usual HTML+CSS magic and came up with the
+following for me.
+
+ Note: If you click through to my blog, you'll get to see these charts
+ in their colorful glory. Otherwise, if you're reading this
+ somewhere like http://planet.gnome.org then you'll probably
+ just see the boring list version. But one really cool thing
+ about Richard's hack here is that in the absence of CSS
+ styling this chart does degrade nicely to just list with all the data
+ available. So these charts should be much more accessible than things
+ I've done previously with PNG bar chart images. Plus, I get to
+ embed hyperlinks at all the intuitive spots as well. Anyway, Richard
+ totally rocks for having put this together.
+
+<dl class="chart barchart">
+ <dt>NoAccel (<a href="http://cworth.org/exa/i965/synchronous_composite/NoAccel/timing">14 ms.</a>) <a href="http://cworth.org/exa/i965/synchronous_composite/NoAccel/system.oprofile">system profile</a> <a href="http://cworth.org/exa/i965/synchronous_composite/NoAccel/system.symbols">symbols profile</a></dt>
+ <dd style="width:18%;">
+ <ul>
+ <li class="pixman" style="width:42%;"><a href="http://cworth.org/exa/i965/synchronous_composite/NoAccel/pixman.oprofile">pixman</a> <span>42%</span></li>
+ <li class="libxul" style="width:16%;">libxul <span>16%</span></li>
+ <li class="vmlinux" style="width:16%;">vmlinux <span>16%</span></li>
+ <li class="Xorg" style="width:7%;"><a href="http://cworth.org/exa/i965/synchronous_composite/NoAccel/X.oprofile">Xorg</a> <span>7%</span></li>
+ <li class="libc" style="width:5%;"><a href="http://cworth.org/exa/i965/synchronous_composite/NoAccel/libc.oprofile">libc</a> <span>5%</span></li>
+ <li class="other" style="width:14%">other <span>14%</span></li>
+ </ul>
+ </dd>
+ <dt>EXA (<a href="http://cworth.org/exa/i965/synchronous_composite/EXA/timing">77 ms.</a>) <a href="http://cworth.org/exa/i965/synchronous_composite/EXA/system.oprofile">system profile</a> <a href="http://cworth.org/exa/i965/synchronous_composite/EXA/system.symbols">symbols profile</a></dt>
+ <dd style="width:100%;">
+ <ul>
+ <li class="libc" style="width:30%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA/libc.oprofile">libc</a> <span>30%</span></li>
+ <li class="intel_drv" style="width:19%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA/intel_drv.oprofile">intel_drv</a> <span>19%</span></li>
+ <li class="vmlinux" style="width:16%;">vmlinux <span>16%</span></li>
+ <li class="libxul" style="width:11%;">libxul <span>11%</span></li>
+ <li class="libexa" style="width:6%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA/libexa.oprofile">libexa</a> <span>6%</span></li>
+ <li class="pixman" style="width:5%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA/libexa.oprofile">pixman </a><span>5%</span></li>
+ <li class="Xorg" style="width:4%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA/X.oprofile">Xorg</a> <span>4%</span></li>
+ <li class="other" style="width:9%">other <span>9%</span></li>
+ </ul>
+ </dd>
+</dl>
+
+So there are some big percentages there---much nicer than the little
+4% and 5% things I was seeing a couple of weeks ago. So, yes, it
+definitely helps to know that you're asking the question you mean to
+be. There are several links in the chart above to different profile
+reports. If you drill down the libc profile, you'll see that there's a
+lot of memcpy going on.
+
+An easy guess is that the memcpy is due to pixmap migration due to
+software fallbacks. To verify this guess, I first disabled all pixmap
+migration from video memory to system memory, (which was as simple as
+`if (! can_accel) return;` in `exaDoMigration`. This actually got rid of
+most of the memcpy problem, and didn't cause any incorrect
+rendering. Next I enabled `DEBUG_TRACE_FALL` in `exa_priv.h` to
+identify all fallbacks that were getting hit by the benchmark and I
+put early returns in place to disable them. Unsuprisingly, this did
+cause a lot of incorrect rendering.
+
+And of course, what we really want to do is to find what is triggering
+those fallbacks and accelerate them. But for now, I wanted to see how
+performance would be if we were already at the point that we had no
+software fallbacks at all. Here's what I got:
+
+<dl class="chart barchart">
+ <dt>EXA-no-fallbacks (<a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-fallbacks/timing">58 ms.</a>) <a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-fallbacks/system.oprofile">system profile</a> <a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-fallbacks/system.symbols">symbols profile</a></dt>
+ <dd style="width:75%;">
+ <ul>
+ <li class="vmlinux" style="width:23%;">vmlinux <span>23%</span></li>
+ <li class="intel_drv" style="width:22%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-fallbacks/intel_drv.oprofile">intel_drv </a><span>22%</span></li>
+ <li class="libc" style="width:16%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-fallbacks/libc.oprofile">libc </a><span>16%</span></li>
+ <li class="libxul" style="width:13%;">libxul <span>13%</span></li>
+ <li class="pixman" style="width:9%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-fallbacks/libexa.oprofile">pixman </a><span>9%</span></li>
+ <li class="libexa" style="width:4%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-fallbacks/libexa.oprofile">libexa </a><span>4%</span></li>
+ <li class="Xorg" style="width:4%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-fallbacks/X.oprofile">Xorg </a><span>4%</span></li>
+ <li class="other" style="width:9%">other <span>9%</span></li>
+ </ul>
+ </dd>
+</dl>
+
+<br>So, as hoped, a lot of the libc time went away. But there's still
+a heck of a lot left, as well as kernel system-call time. That's
+clearly in gettimeofday and that's easy to track down to the
+`I830WaitLpRing` function. Fortunately, it's also extremely easy to
+eliminate that system call almost entirely there. The only reason it's
+being called is to ensure that we don't busy-wait forever, (due to a
+video card lockup). So we could call gettimeofday only once every
+several thousand iterations and still detect lockup very
+quickly. Here's a
+[[patch|0001-Elminate-gettimeofday-as-a-hotspot-in-I830WaitLpRing.patch]]
+to do exactly that.
+
+So, now take a look at the performance with this patch attached:
+
+<dl class="chart barchart">
+ <dt>EXA-no-gettimeofday (<a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-gettimeofday/timing">54 ms.</a>) <a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.oprofile">system profile</a> <a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.symbols">symbols profile</a></dt>
+ <dd style="width:70%;">
+ <ul>
+ <li class="intel_drv" style="width:49%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-gettimeofday/intel_drv.oprofile">intel_drv </a><span>49%</span></li>
+ <li class="libxul" style="width:16%;">libxul <span>16%</span></li>
+ <li class="libc" style="width:10%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-gettimeofday/libc.oprofile">libc </a><span>10%</span></li>
+ <li class="pixman" style="width:7%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-gettimeofday/libexa.oprofile">pixman </a><span>7%</span></li>
+ <li class="libexa" style="width:4%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-gettimeofday/libexa.oprofile">libexa </a><span>4%</span></li>
+ <li class="Xorg" style="width:2%;"><a href="http://cworth.org/exa/i965/synchronous_composite/EXA-no-gettimeofday/X.oprofile">Xorg </a><span>2%</span></li>
+ <li class="vmlinux" style="width:2%;">vmlinux <span>2%</span></li>
+ <li class="other" style="width:10%">other <span>10%</span></li>
+ </ul>
+ </dd>
+</dl>
+
+<br>Again, a lot of the libc time was eliminated, and a _huge_ amount
+of the kernel time was eliminated as well. But, sadly, and
+dramatically, the overall performance did not improve much at all. The
+time spent in the Intel driver increased not only in percentage, but
+also increased in absolute timing, taking up almost all of the time
+saved from libc and the kernel.
+
+What's going on here? What's happening is that the driver is spending
+an awful lot of time busy-waiting, and all we did here was to help it
+busy-wait even faster. Now, we know that aren't any software fallbacks
+happening here, so what's all the waiting about? It appears to be
+caused primarily by `i965_prepare_composite` which includes the
+following comment and code:
+
+ /* Because we only have a single static buffer for our state currently,
+ * we have to sync before updating it every time.
+ */
+ i830WaitSync(pScrn);
+
+That is, when we want to render multiple composite operations in
+sequence, instead of doing some nice, pipelined fire-and-forget
+operations, the driver is currently waiting for the previous composite
+operation to entirely complete before starting off another. _And_ it's
+doing that waiting with CPU-burning busy-waiting.
+
+I'll need to learn a bit more about this hardware before I can know
+the right way to fix this, (my, but documentation would certainly be
+helpful about now). For example, it would be easy to setup a circular
+buffer of state structures. But can I get the hardware to tell me when
+composite operations complete so that I can efficiently reuse those?
+Another approach would be to stuff the necessary compositing state
+into the LP ring the same way the compositing commands are being
+sent. Is there any reason not to do that?
+
+Meanwhile, it looks like there's a bunch of state in the strucure that
+needn't be sent every time, (much of it is always constant). So there
+are likely easy ways to improve that as well. I'm definitely looking
+forward to people with more Intel-hardware-specific knowledge helping
+me out here, (or just plain fixing the thing).
+
+Meanwhile, even if the driver time were completely eliminated, the
+rest of the time in this profile would still exceed what was spent in
+the NoAccel case. Some things are plainly working well, such as the
+fact that the pixman time has gone down. Some things are not working
+well, such as the new time being spent in libexa, (which appears to be
+mostly an inefficient approach for computing an LRU heuristic as I
+mentioned earlier). Some of the increased time, such as that of libc,
+might be related to driver problems that we hope to fix.
+
+But one item in particular looks very strange. The libxul code is
+spending signficantly more time in the EXA case than in the NoAccel
+case, when we wouldn't expect it to be aware of the difference at
+all. That will be an interesting thing to track down, (and it sure
+would be nice if that were the biggest thing to worry about right
+now). But clearly we've got a lot of work to do to get the i965
+performing properly with EXA.
--- /dev/null
+From e8c946cb56a9789ce707888a8198a8dd092cca85 Mon Sep 17 00:00:00 2001
+From: Carl Worth <cworth@cworth.org>
+Date: Tue, 10 Jul 2007 00:45:55 -0700
+Subject: [PATCH] Elminate gettimeofday as a hotspot in I830WaitLpRing
+
+---
+ src/i830_accel.c | 47 ++++++++++++++++++++++++-----------------------
+ 1 files changed, 24 insertions(+), 23 deletions(-)
+
+diff --git a/src/i830_accel.c b/src/i830_accel.c
+index 5cbad44..714af5a 100644
+--- a/src/i830_accel.c
++++ b/src/i830_accel.c
+@@ -120,36 +120,37 @@ I830WaitLpRing(ScrnInfoPtr pScrn, int n, int timeout_millis)
+ ring->space += ring->mem->size;
+
+ iters++;
+- now = GetTimeInMillis();
+- if (start == 0 || now < start || ring->head != last_head) {
+- if (I810_DEBUG & DEBUG_VERBOSE_ACCEL)
+- if (now > start)
+- ErrorF("space: %d wanted %d\n", ring->space, n);
+- start = now;
+- last_head = ring->head;
+- } else if (now - start > timeout_millis) {
+- ErrorF("Error in I830WaitLpRing(), timeout for %d seconds\n",
+- timeout_millis/1000);
+- if (IS_I965G(pI830))
+- i965_dump_error_state(pScrn);
+- else
+- i830_dump_error_state(pScrn);
+- ErrorF("space: %d wanted %d\n", ring->space, n);
++ if ((iters & 0xfff) == 0) {
++ now = GetTimeInMillis();
++ if (start == 0 || now < start || ring->head != last_head) {
++ if (I810_DEBUG & DEBUG_VERBOSE_ACCEL)
++ if (now > start)
++ ErrorF("space: %d wanted %d\n", ring->space, n);
++ start = now;
++ last_head = ring->head;
++ } else if (now - start > timeout_millis) {
++ ErrorF("Error in I830WaitLpRing(), timeout for %d seconds\n",
++ timeout_millis/1000);
++ if (IS_I965G(pI830))
++ i965_dump_error_state(pScrn);
++ else
++ i830_dump_error_state(pScrn);
++ ErrorF("space: %d wanted %d\n", ring->space, n);
+ #ifdef XF86DRI
+- if (pI830->directRenderingEnabled) {
+- DRIUnlock(screenInfo.screens[pScrn->scrnIndex]);
+- DRICloseScreen(screenInfo.screens[pScrn->scrnIndex]);
+- }
++ if (pI830->directRenderingEnabled) {
++ DRIUnlock(screenInfo.screens[pScrn->scrnIndex]);
++ DRICloseScreen(screenInfo.screens[pScrn->scrnIndex]);
++ }
+ #endif
+ #ifdef I830_USE_XAA
+- pI830->AccelInfoRec = NULL; /* Stops recursive behavior */
++ pI830->AccelInfoRec = NULL; /* Stops recursive behavior */
+ #endif
+ #ifdef I830_USE_EXA
+- pI830->EXADriverPtr = NULL;
++ pI830->EXADriverPtr = NULL;
+ #endif
+- FatalError("lockup\n");
++ FatalError("lockup\n");
++ }
+ }
+-
+ DELAY(10);
+ }
+
+--
+1.5.2
+
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Dispatch
+2118 36.4168 Xorg GetTimeInMillis
+ 2118 100.000 Xorg GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+569 9.7834 Xorg miComputeCompositeRegion
+ 569 50.2650 Xorg miComputeCompositeRegion [self]
+ 363 32.0671 Xorg miCompositeSourceValidate
+ 81 7.1555 libpixman.so.0.0.0 pixman_region_rectangles
+ 45 3.9753 libpixman.so.0.0.0 pixman_region_n_rects
+ 34 3.0035 Xorg miSpriteSourceValidate
+ 18 1.5901 libpixman.so.0.0.0 pixman_region_not_empty
+ 15 1.3251 Xorg __i686.get_pc_thunk.bx
+ 7 0.6184 libpixman.so.0.0.0 pixman_region_init
+-------------------------------------------------------------------------------
+ 34 15.0442 Xorg miComputeCompositeRegion
+ 192 84.9558 Xorg miCompositeSourceValidate
+295 5.0722 Xorg miSpriteSourceValidate
+ 295 100.000 Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 1 0.8065 Xorg SetPictureClipRects
+ 1 0.8065 Xorg xf86PostMotionEvent
+ 1 0.8065 Xorg WaitForSomething
+ 1 0.8065 Xorg damagePolyFillRect
+ 1 0.8065 Xorg damageDamageBox
+ 1 0.8065 Xorg damageReportPostOp
+ 1 0.8065 Xorg damageDestroyPixmap
+ 1 0.8065 Xorg DamageDestroy
+ 1 0.8065 Xorg damageChangeGC
+ 1 0.8065 Xorg ProcRenderTrapezoids
+ 1 0.8065 Xorg CreatePicture
+ 1 0.8065 Xorg AllocatePicture
+ 1 0.8065 Xorg ValidateOnePicture
+ 1 0.8065 Xorg miCompositeRects
+ 1 0.8065 Xorg ProcCreatePixmap
+ 1 0.8065 Xorg miRegionDestroy
+ 1 0.8065 Xorg miDestroyClip
+ 1 0.8065 Xorg miChangeClip
+ 2 1.6129 Xorg AllocatePixmap
+ 2 1.6129 Xorg SecurityLookupIDByClass
+ 2 1.6129 Xorg ProcFreePixmap
+ 2 1.6129 Xorg damageDamageRegion
+ 2 1.6129 Xorg dixLookupDrawable
+ 2 1.6129 Xorg ProcRenderFreePicture
+ 2 1.6129 Xorg CompositeRects
+ 2 1.6129 Xorg miValidatePicture
+ 2 1.6129 Xorg XaceCatchDispatchProc
+ 3 2.4194 Xorg ProcRenderCompositeGlyphs
+ 3 2.4194 Xorg ValidateGC
+ 3 2.4194 Xorg ProcRenderCreatePicture
+ 4 3.2258 Xorg ValidatePicture
+ 5 4.0323 Xorg ProcRenderDispatch
+ 5 4.0323 Xorg _CallCallbacks
+ 6 4.8387 Xorg XaceCatchExtProc
+ 6 4.8387 Xorg CallCallbacks
+ 7 5.6452 Xorg SecurityLookupIDByType
+ 8 6.4516 Xorg miColorRects
+ 11 8.8710 Xorg Dispatch
+ 12 9.6774 Xorg miCompositeSourceValidate
+ 15 12.0968 Xorg miComputeCompositeRegion
+275 4.7283 Xorg __i686.get_pc_thunk.bx
+ 275 100.000 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg AllocatePixmap
+ 1 7.6923 Xorg miRegionDestroy
+ 1 7.6923 Xorg SetPictureToDefaults
+ 2 15.3846 Xorg DamageDestroy
+ 2 15.3846 Xorg damageDamageRegion
+ 3 23.0769 Xorg miRegionCreate
+ 3 23.0769 Xorg DamageReportDamage
+221 3.7999 Xorg .plt
+ 221 100.000 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 363 100.000 Xorg miComputeCompositeRegion
+176 3.0261 Xorg miCompositeSourceValidate
+ 192 50.5263 Xorg miSpriteSourceValidate
+ 176 46.3158 Xorg miCompositeSourceValidate [self]
+ 12 3.1579 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.3745 Xorg ProcCreatePixmap
+ 1 0.3745 Xorg ProcRenderFillRectangles
+ 1 0.3745 Xorg ProcRenderCompositeGlyphs
+ 5 1.8727 Xorg XaceCatchDispatchProc
+ 7 2.6217 Xorg main
+ 9 3.3708 Xorg dixLookupDrawable
+ 23 8.6142 Xorg SecurityLookupIDByClass
+ 55 20.5993 Xorg Dispatch
+ 55 20.5993 Xorg XaceCatchExtProc
+ 110 41.1985 Xorg SecurityLookupIDByType
+130 2.2352 Xorg XaceHook
+ 130 48.6891 Xorg XaceHook [self]
+ 122 45.6929 Xorg CallCallbacks
+ 15 5.6180 Xorg _CallCallbacks
+-------------------------------------------------------------------------------
+ 5 23.8095 Xorg GetScratchPixmapHeader
+ 16 76.1905 Xorg damageGlyphs
+125 2.1492 Xorg miModifyPixmapHeader
+ 125 100.000 Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 4 4.0816 Xorg ProcRenderCompositeGlyphs
+ 94 95.9184 Xorg FindGlyph
+98 1.6850 Xorg FindGlyphRef
+ 98 100.000 Xorg FindGlyphRef [self]
+-------------------------------------------------------------------------------
+ 1 0.0018 Xorg ProcRenderCompositeGlyphs
+ 55399 99.9982 Xorg CompositeGlyphs
+93 1.5990 Xorg damageGlyphs
+ 55225 99.6787 libexa.so exaGlyphs
+ 93 0.1679 Xorg damageGlyphs [self]
+ 19 0.0343 libexa.so .plt
+ 16 0.0289 Xorg miModifyPixmapHeader
+ 15 0.0271 Xorg damageDamageBox
+ 6 0.0108 libexa.so exaComposite
+ 6 0.0108 libexa.so exaPixmapDirty
+ 6 0.0108 Xorg damageReportPostOp
+ 5 0.0090 libexa.so exaCopyArea
+ 3 0.0054 libextmod.so XvDestroyPixmap
+ 2 0.0036 Xorg GetScratchGC
+ 1 0.0018 Xorg DamageReportDamage
+ 1 0.0018 Xorg getDrawableDamageRef
+ 1 0.0018 Xorg CreatePicture
+ 1 0.0018 Xorg FreeScratchGC
+ 1 0.0018 Xorg ValidateGC
+ 1 0.0018 Xorg FreeScratchPixmapHeader
+ 1 0.0018 Xorg GetScratchPixmapHeader
+-------------------------------------------------------------------------------
+ 2 2.2989 Xorg main
+ 85 97.7011 Xorg Dispatch
+81 1.3927 Xorg ReadRequestFromClient
+ 81 93.1034 Xorg ReadRequestFromClient [self]
+ 5 5.7471 Xorg _XSERVTransRead
+ 1 1.1494 Xorg _XSERVTransSocketRead
+-------------------------------------------------------------------------------
+ 74250 100.000 Xorg main
+68 1.1692 Xorg Dispatch
+ 73458 98.9200 Xorg XaceCatchExtProc
+ 436 0.5871 Xorg XaceCatchDispatchProc
+ 105 0.1414 Xorg WaitForSomething
+ 85 0.1145 Xorg ReadRequestFromClient
+ 68 0.0916 Xorg Dispatch [self]
+ 55 0.0741 Xorg XaceHook
+ 11 0.0148 Xorg __i686.get_pc_thunk.bx
+ 10 0.0135 Xorg CallCallbacks
+ 6 0.0081 Xorg FlushAllOutput
+ 5 0.0067 Xorg ProcRenderDispatch
+ 4 0.0054 libc-2.5.so ___newselect_nocancel
+ 3 0.0040 Xorg ProcFreePixmap
+ 3 0.0040 libc-2.5.so __i686.get_pc_thunk.cx
+ 2 0.0027 Xorg ProcPolySegment
+ 2 0.0027 Xorg GetTimeInMillis
+ 2 0.0027 libc-2.5.so __errno_location
+ 1 0.0013 Xorg ProcSetClipRectangles
+ 1 0.0013 Xorg ProcFreeGC
+ 1 0.0013 Xorg mffs
+ 1 0.0013 Xorg ProcCreatePixmap
+ 1 0.0013 Xorg ProcessInputEvents
+-------------------------------------------------------------------------------
+ 15 14.7059 Xorg XaceHook
+ 87 85.2941 Xorg CallCallbacks
+58 0.9972 Xorg _CallCallbacks
+ 58 56.8627 Xorg _CallCallbacks [self]
+ 27 26.4706 Xorg SecurityCheckResourceIDAccess
+ 12 11.7647 Xorg SecurityCheckExtAccess
+ 5 4.9020 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 2.8571 Xorg damageDamageBox
+ 2 5.7143 Xorg damageReportPostOp
+ 10 28.5714 Xorg DamageReportDamage
+ 22 62.8571 Xorg damageDamageRegion
+56 0.9629 Xorg miUnion
+ 885 90.9558 libpixman.so.0.0.0 pixman_region_union
+ 56 5.7554 Xorg miUnion [self]
+ 14 1.4388 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 8 0.8222 libpixman.so.0.0.0 pixman_op
+ 7 0.7194 libpixman.so.0.0.0 pixman_region_copy
+ 3 0.3083 libpixman.so.0.0.0 .plt
+-------------------------------------------------------------------------------
+ 3 2.7778 Xorg main
+ 105 97.2222 Xorg Dispatch
+54 0.9285 Xorg WaitForSomething
+ 54 50.0000 Xorg WaitForSomething [self]
+ 26 24.0741 Xorg BlockHandler
+ 19 17.5926 Xorg WakeupHandler
+ 3 2.7778 Xorg mffs
+ 3 2.7778 libc-2.5.so gettimeofday
+ 1 0.9259 Xorg __i686.get_pc_thunk.bx
+ 1 0.9259 Xorg NoopDDA
+ 1 0.9259 mouse_drv.so MouseWakeupHandler
+-------------------------------------------------------------------------------
+ 1 0.7576 Xorg damagePolyFillRect
+ 131 99.2424 Xorg damageDamageBox
+48 0.8253 Xorg damageDamageRegion
+ 48 36.3636 Xorg damageDamageRegion [self]
+ 41 31.0606 Xorg miIntersect
+ 22 16.6667 Xorg miUnion
+ 9 6.8182 libpixman.so.0.0.0 pixman_region_intersect
+ 5 3.7879 libpixman.so.0.0.0 pixman_region_union
+ 3 2.2727 Xorg getDrawableDamageRef
+ 2 1.5152 Xorg .plt
+ 2 1.5152 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 1.1494 Xorg miColorRects
+ 9 10.3448 Xorg ProcChangeGC
+ 77 88.5057 Xorg ChangeGC
+48 0.8253 Xorg dixChangeGC
+ 48 55.1724 Xorg dixChangeGC [self]
+ 25 28.7356 Xorg damageChangeGC
+ 13 14.9425 Xorg miBSCheapChangeGC
+ 1 1.1494 Xorg damageChangeClip
+-------------------------------------------------------------------------------
+ 1 0.5587 Xorg ProcRenderSetPictureClipRectangles
+ 2 1.1173 Xorg ProcRenderDispatch
+ 6 3.3520 Xorg ProcRenderTrapezoids
+ 8 4.4693 Xorg ProcFreePixmap
+ 8 4.4693 Xorg ProcRenderComposite
+ 8 4.4693 Xorg ProcRenderChangePicture
+ 9 5.0279 Xorg ProcRenderSetPictureTransform
+ 12 6.7039 Xorg dixLookupGC
+ 14 7.8212 Xorg ProcRenderSetPictureFilter
+ 18 10.0559 Xorg ProcRenderCreatePicture
+ 24 13.4078 Xorg ProcRenderFreePicture
+ 29 16.2011 Xorg ProcRenderFillRectangles
+ 40 22.3464 Xorg ProcRenderCompositeGlyphs
+46 0.7909 Xorg SecurityLookupIDByType
+ 110 61.4525 Xorg XaceHook
+ 46 25.6983 Xorg SecurityLookupIDByType [self]
+ 11 6.1453 Xorg Hash
+ 7 3.9106 Xorg __i686.get_pc_thunk.bx
+ 5 2.7933 Xorg CallCallbacks
+-------------------------------------------------------------------------------
+ 1 0.5882 Xorg XaceCatchDispatchProc
+ 4 2.3529 Xorg ProcFreeGC
+ 69 40.5882 Xorg ProcFreePixmap
+ 96 56.4706 Xorg ProcRenderFreePicture
+44 0.7565 Xorg FreeResource
+ 54 31.7647 Xorg FreePicture
+ 44 25.8824 Xorg dixDestroyPixmap
+ 44 25.8824 Xorg FreeResource [self]
+ 11 6.4706 Xorg Xfree
+ 6 3.5294 Xorg Hash
+ 4 2.3529 Xorg FreeGC
+ 4 2.3529 libextmod.so XvDestroyPixmap
+ 2 1.1765 Xorg FlushClientCaches
+ 1 0.5882 libc-2.5.so free
+-------------------------------------------------------------------------------
+ 1 0.7042 Xorg dixLookupDrawable
+ 1 0.7042 Xorg XaceCatchDispatchProc
+ 3 2.1127 Xorg XaceCatchExtProc
+ 5 3.5211 Xorg SecurityLookupIDByType
+ 10 7.0423 Xorg Dispatch
+ 122 85.9155 Xorg XaceHook
+43 0.7393 Xorg CallCallbacks
+ 87 61.2676 Xorg _CallCallbacks
+ 43 30.2817 Xorg CallCallbacks [self]
+ 6 4.2254 Xorg __i686.get_pc_thunk.bx
+ 4 2.8169 Xorg SecurityCheckResourceIDAccess
+ 2 1.4085 Xorg SecurityCheckExtAccess
+-------------------------------------------------------------------------------
+ 4 11.7647 Xorg SetPictureToDefaults
+ 30 88.2353 Xorg PictureGetFilterId
+34 0.5846 Xorg CompareISOLatin1Lowered
+ 34 100.000 Xorg CompareISOLatin1Lowered [self]
+-------------------------------------------------------------------------------
+ 1 3.1250 Xorg ProcRenderCompositeGlyphs
+ 1 3.1250 Xorg ProcRenderFreePicture
+ 1 3.1250 Xorg ProcRenderCreatePicture
+ 2 6.2500 Xorg SecurityLookupIDByClass
+ 6 18.7500 Xorg FreeResource
+ 10 31.2500 Xorg AddResource
+ 11 34.3750 Xorg SecurityLookupIDByType
+32 0.5502 Xorg Hash
+ 32 100.000 Xorg Hash [self]
+-------------------------------------------------------------------------------
+ 4 5.0000 Xorg ValidatePicture
+ 76 95.0000 Xorg ValidateOnePicture
+32 0.5502 Xorg miValidatePicture
+ 36 45.0000 Xorg miRegionCreate
+ 32 40.0000 Xorg miValidatePicture [self]
+ 4 5.0000 Xorg miIntersect
+ 4 5.0000 Xorg miRegionInit
+ 2 2.5000 Xorg __i686.get_pc_thunk.bx
+ 1 1.2500 Xorg miTranslateRegion
+ 1 1.2500 Xorg Xalloc
+-------------------------------------------------------------------------------
+ 4 12.9032 Xorg CallCallbacks
+ 27 87.0968 Xorg _CallCallbacks
+31 0.5330 Xorg SecurityCheckResourceIDAccess
+ 31 100.000 Xorg SecurityCheckResourceIDAccess [self]
+-------------------------------------------------------------------------------
+ 8 1.4842 Xorg ProcPolyFillRectangle
+ 21 3.8961 Xorg miCompositeRects
+ 35 6.4935 Xorg miCreateAlphaPicture
+ 475 88.1262 Xorg miColorRects
+31 0.5330 Xorg damagePolyFillRect
+ 387 67.8947 libexa.so exaPolyFillRect
+ 105 18.4211 Xorg damageDamageBox
+ 31 5.4386 Xorg damagePolyFillRect [self]
+ 15 2.6316 Xorg damageReportPostOp
+ 7 1.2281 libexa.so exaFillRegionSolid
+ 5 0.8772 Xorg miIntersect
+ 5 0.8772 Xorg miRectsToRegion
+ 4 0.7018 libexa.so .plt
+ 4 0.7018 libexa.so exaGetDrawablePixmap
+ 2 0.3509 Xorg miTranslateRegion
+ 1 0.1754 Xorg __i686.get_pc_thunk.bx
+ 1 0.1754 Xorg miRegionDestroy
+ 1 0.1754 Xorg getDrawableDamageRef
+ 1 0.1754 Xorg DamageReportDamage
+ 1 0.1754 Xorg damageDamageRegion
+-------------------------------------------------------------------------------
+ 1 0.0018 Xorg XaceCatchExtProc
+ 55594 99.9982 Xorg ProcRenderDispatch
+29 0.4986 Xorg ProcRenderCompositeGlyphs
+ 55417 99.6691 Xorg CompositeGlyphs
+ 102 0.1834 Xorg FindGlyph
+ 40 0.0719 Xorg SecurityLookupIDByType
+ 29 0.0522 Xorg ProcRenderCompositeGlyphs [self]
+ 4 0.0072 Xorg FindGlyphRef
+ 3 0.0054 Xorg __i686.get_pc_thunk.bx
+ 3 0.0054 Xorg ValidatePicture
+ 1 0.0018 Xorg Hash
+ 1 0.0018 Xorg XaceHook
+ 1 0.0018 Xorg damageGlyphs
+-------------------------------------------------------------------------------
+ 6 0.0082 Xorg main
+ 73458 99.9918 Xorg Dispatch
+27 0.4642 Xorg XaceCatchExtProc
+ 73339 99.8190 Xorg ProcRenderDispatch
+ 55 0.0749 Xorg XaceHook
+ 27 0.0367 Xorg XaceCatchExtProc [self]
+ 10 0.0136 Xorg ProcRenderSetPictureFilter
+ 7 0.0095 Xorg ProcRenderSetPictureTransform
+ 7 0.0095 Xorg ProcRenderFreePicture
+ 6 0.0082 Xorg __i686.get_pc_thunk.bx
+ 6 0.0082 Xorg ProcRenderCreatePicture
+ 4 0.0054 Xorg GetExtensionEntry
+ 3 0.0041 Xorg CallCallbacks
+ 3 0.0041 Xorg ProcRenderFillRectangles
+ 2 0.0027 Xorg __i686.get_pc_thunk.cx
+ 2 0.0027 Xorg ProcRenderChangePicture
+ 1 0.0014 Xorg ProcRenderCompositeGlyphs
+-------------------------------------------------------------------------------
+25 0.4298 Xorg AllocatePixmap
+ 119 79.8658 Xorg Xalloc
+ 25 16.7785 Xorg AllocatePixmap [self]
+ 2 1.3423 Xorg __i686.get_pc_thunk.bx
+ 2 1.3423 libc-2.5.so malloc
+ 1 0.6711 Xorg .plt
+-------------------------------------------------------------------------------
+ 1 4.0000 Xorg ProcChangeGC
+ 1 4.0000 Xorg ProcRenderChangePicture
+ 2 8.0000 Xorg ProcRenderDispatch
+ 3 12.0000 Xorg miColorRects
+ 5 20.0000 Xorg ProcRenderCreatePicture
+ 13 52.0000 Xorg miRenderColorToPixel
+25 0.4298 Xorg Ones
+ 25 100.000 Xorg Ones [self]
+-------------------------------------------------------------------------------
+ 2 5.2632 Xorg damageGlyphs
+ 36 94.7368 Xorg miColorRects
+24 0.4127 Xorg GetScratchGC
+ 24 55.8140 Xorg GetScratchGC [self]
+ 17 39.5349 Xorg damageChangeClip
+ 2 4.6512 Xorg miBSCheapChangeClip
+-------------------------------------------------------------------------------
+ 1 0.4310 Xorg AllocateGC
+ 1 0.4310 Xorg miValidatePicture
+ 1 0.4310 Xorg miRectAlloc
+ 2 0.8621 Xorg SetClipRects
+ 2 0.8621 Xorg miRectsToRegion
+ 3 1.2931 Xorg miRegionValidate
+ 14 6.0345 Xorg DamageCreate
+ 20 8.6207 Xorg AllocatePicture
+ 22 9.4828 Xorg AddResource
+ 47 20.2586 Xorg miRegionCreate
+ 119 51.2931 Xorg AllocatePixmap
+24 0.4127 Xorg Xalloc
+ 209 87.4477 libc-2.5.so malloc
+ 24 10.0418 Xorg Xalloc [self]
+ 3 1.2552 libc-2.5.so __i686.get_pc_thunk.bx
+ 3 1.2552 libc-2.5.so _int_malloc
+-------------------------------------------------------------------------------
+ 2 8.6957 Xorg miTrapezoidBounds
+ 21 91.3043 Xorg miLineFixedX
+23 0.3955 Xorg __divdi3
+ 23 100.000 Xorg __divdi3 [self]
+-------------------------------------------------------------------------------
+ 6 2.7397 Xorg XaceCatchExtProc
+ 213 97.2603 Xorg ProcRenderDispatch
+20 0.3439 Xorg ProcRenderCreatePicture
+ 91 41.5525 Xorg CreatePicture
+ 44 20.0913 Xorg dixLookupDrawable
+ 24 10.9589 Xorg AddResource
+ 20 9.1324 Xorg ProcRenderCreatePicture [self]
+ 18 8.2192 Xorg SecurityLookupIDByType
+ 5 2.2831 Xorg Ones
+ 4 1.8265 Xorg LegalNewID
+ 3 1.3699 Xorg __i686.get_pc_thunk.bx
+ 3 1.3699 Xorg SetPictureToDefaults
+ 2 0.9132 Xorg SecurityLookupIDByClass
+ 2 0.9132 Xorg miCreatePicture
+ 2 0.9132 Xorg AllocatePicture
+ 1 0.4566 Xorg Hash
+-------------------------------------------------------------------------------
+ 7 35.0000 Xorg damageChangeGC
+ 13 65.0000 Xorg dixChangeGC
+20 0.3439 Xorg miBSCheapChangeGC
+ 20 100.000 Xorg miBSCheapChangeGC [self]
+-------------------------------------------------------------------------------
+ 2 0.2548 Xorg CompositeRects
+ 783 99.7452 Xorg miCompositeRects
+20 0.3439 Xorg miColorRects
+ 475 60.4326 Xorg damagePolyFillRect
+ 105 13.3588 Xorg ValidateGC
+ 87 11.0687 Xorg ChangeGC
+ 36 4.5802 Xorg GetScratchGC
+ 26 3.3079 Xorg miRenderColorToPixel
+ 20 2.5445 Xorg miColorRects [self]
+ 10 1.2723 Xorg miRegionCreate
+ 8 1.0178 Xorg __i686.get_pc_thunk.bx
+ 5 0.6361 libexa.so exaPolyFillRect
+ 3 0.3817 Xorg Ones
+ 2 0.2545 Xorg damageChangeClip
+ 2 0.2545 Xorg damageDamageBox
+ 2 0.2545 Xorg miRegionCopy
+ 1 0.1272 Xorg dixChangeGC
+ 1 0.1272 Xorg FreeScratchGC
+ 1 0.1272 Xorg getDrawableDamageRef
+ 1 0.1272 Xorg damageValidateGC
+ 1 0.1272 libpixman.so.0.0.0 pixman_region_copy
+-------------------------------------------------------------------------------
+ 5 26.3158 Xorg CreatePicture
+ 14 73.6842 Xorg ProcRenderChangePicture
+19 0.3267 Xorg ChangePicture
+ 19 100.000 Xorg ChangePicture [self]
+-------------------------------------------------------------------------------
+ 7 14.5833 Xorg CreatePicture
+ 9 18.7500 Xorg PictureFindFilter
+ 32 66.6667 Xorg SetPictureToDefaults
+18 0.3095 Xorg PictureGetFilterId
+ 30 62.5000 Xorg CompareISOLatin1Lowered
+ 18 37.5000 Xorg PictureGetFilterId [self]
+-------------------------------------------------------------------------------
+ 4 3.3333 Xorg ValidateGC
+ 116 96.6667 Xorg damageValidateGC
+18 0.3095 Xorg miBSCheapValidateGC
+ 87 72.5000 libexa.so exaValidateGC
+ 18 15.0000 Xorg miBSCheapValidateGC [self]
+ 15 12.5000 libfb.so fbValidateGC
+-------------------------------------------------------------------------------
+ 2 6.8966 Xorg SetClipRects
+ 2 6.8966 Xorg ChangeGC
+ 25 86.2069 Xorg dixChangeGC
+17 0.2923 Xorg damageChangeGC
+ 17 58.6207 Xorg damageChangeGC [self]
+ 7 24.1379 Xorg miBSCheapChangeGC
+ 4 13.7931 Xorg miChangeGC
+ 1 3.4483 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.6579 Xorg CompositePicture
+ 2 1.3158 Xorg ProcPolySegment
+ 2 1.3158 Xorg miColorRects
+ 2 1.3158 Xorg damagePolySegment
+ 15 9.8684 Xorg damageGlyphs
+ 25 16.4474 Xorg damageComposite
+ 105 69.0789 Xorg damagePolyFillRect
+17 0.2923 Xorg damageDamageBox
+ 131 86.1842 Xorg damageDamageRegion
+ 17 11.1842 Xorg damageDamageBox [self]
+ 2 1.3158 Xorg miIntersect
+ 1 0.6579 Xorg __i686.get_pc_thunk.bx
+ 1 0.6579 Xorg miUnion
+-------------------------------------------------------------------------------
+ 4 13.3333 Xorg miCompositeRects
+ 26 86.6667 Xorg miColorRects
+17 0.2923 Xorg miRenderColorToPixel
+ 17 56.6667 Xorg miRenderColorToPixel [self]
+ 13 43.3333 Xorg Ones
+-------------------------------------------------------------------------------
+ 5 0.0068 Xorg Dispatch
+ 73339 99.9932 Xorg XaceCatchExtProc
+16 0.2751 Xorg ProcRenderDispatch
+ 55594 75.7866 Xorg ProcRenderCompositeGlyphs
+ 14253 19.4299 Xorg ProcRenderTrapezoids
+ 1981 2.7005 Xorg ProcRenderComposite
+ 1039 1.4164 Xorg ProcRenderFillRectangles
+ 213 0.2904 Xorg ProcRenderCreatePicture
+ 130 0.1772 Xorg ProcRenderFreePicture
+ 45 0.0613 Xorg ProcRenderSetPictureFilter
+ 30 0.0409 Xorg ProcRenderChangePicture
+ 24 0.0327 Xorg ProcRenderSetPictureTransform
+ 16 0.0218 Xorg ProcRenderDispatch [self]
+ 12 0.0164 Xorg ProcRenderSetPictureClipRectangles
+ 5 0.0068 Xorg PictOpValid
+ 5 0.0068 Xorg __i686.get_pc_thunk.bx
+ 3 0.0041 Xorg FindGlyph
+ 2 0.0027 Xorg Ones
+ 2 0.0027 Xorg SecurityLookupIDByType
+ 1 0.0014 Xorg CompositeRects
+ 1 0.0014 Xorg SetPictureFilter
+-------------------------------------------------------------------------------
+ 1 1.1905 Xorg miChangeClip
+ 1 1.1905 Xorg miDestroyPictureClip
+ 2 2.3810 Xorg miRegionValidate
+ 4 4.7619 Xorg miDestroyPicture
+ 11 13.0952 Xorg FreeResource
+ 15 17.8571 Xorg DamageDestroy
+ 25 29.7619 Xorg miRegionDestroy
+ 25 29.7619 Xorg FreePicture
+16 0.2751 Xorg Xfree
+ 81 76.4151 libc-2.5.so free
+ 16 15.0943 Xorg Xfree [self]
+ 6 5.6604 libc-2.5.so _int_free
+ 3 2.8302 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 0.2114 Xorg ProcRenderFillRectangles
+ 944 99.7886 Xorg CompositeRects
+16 0.2751 Xorg miCompositeRects
+ 783 82.7696 Xorg miColorRects
+ 99 10.4651 Xorg CompositePicture
+ 21 2.2199 Xorg damagePolyFillRect
+ 16 1.6913 Xorg miCompositeRects [self]
+ 6 0.6342 Xorg ChangeGC
+ 4 0.4228 Xorg ValidateGC
+ 4 0.4228 Xorg miRenderColorToPixel
+ 4 0.4228 Xorg CreatePicture
+ 4 0.4228 libexa.so exaCreatePixmap
+ 2 0.2114 libextmod.so XvDestroyPixmap
+ 1 0.1057 Xorg __i686.get_pc_thunk.bx
+ 1 0.1057 Xorg FreePicture
+ 1 0.1057 Xorg damageChangeClip
+-------------------------------------------------------------------------------
+ 3 25.0000 Xorg miChangeClip
+ 4 33.3333 Xorg SetPictureClipRects
+ 5 41.6667 Xorg damagePolyFillRect
+15 0.2579 Xorg miRectsToRegion
+ 35 51.4706 Xorg miRegionCreate
+ 15 22.0588 Xorg miRegionValidate
+ 15 22.0588 Xorg miRectsToRegion [self]
+ 2 2.9412 Xorg Xalloc
+ 1 1.4706 Xorg QuickSortRects
+-------------------------------------------------------------------------------
+ 6 6.4516 Xorg miCompositeRects
+ 87 93.5484 Xorg miColorRects
+14 0.2407 Xorg ChangeGC
+ 77 82.7957 Xorg dixChangeGC
+ 14 15.0538 Xorg ChangeGC [self]
+ 2 2.1505 Xorg damageChangeGC
+-------------------------------------------------------------------------------
+ 1 1.0204 Xorg damageGlyphs
+ 2 2.0408 Xorg miCreateAlphaPicture
+ 4 4.0816 Xorg miCompositeRects
+ 91 92.8571 Xorg ProcRenderCreatePicture
+14 0.2407 Xorg CreatePicture
+ 57 50.4425 Xorg SetPictureToDefaults
+ 29 25.6637 Xorg AllocatePicture
+ 14 12.3894 Xorg CreatePicture [self]
+ 7 6.1947 Xorg PictureGetFilterId
+ 5 4.4248 Xorg ChangePicture
+ 1 0.8850 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg ProcCreatePixmap
+ 1 50.0000 Xorg miCreateAlphaPicture
+14 0.2407 Xorg DamageCreate
+ 14 50.0000 Xorg Xalloc
+ 14 50.0000 Xorg DamageCreate [self]
+-------------------------------------------------------------------------------
+ 1 0.5181 Xorg Dispatch
+ 192 99.4819 Xorg XaceCatchDispatchProc
+14 0.2407 Xorg ProcCreatePixmap
+ 131 67.8756 libexa.so exaCreatePixmap
+ 18 9.3264 Xorg AddResource
+ 15 7.7720 Xorg dixLookupDrawable
+ 14 7.2539 Xorg ProcCreatePixmap [self]
+ 4 2.0725 Xorg DamageRegister
+ 3 1.5544 libfb.so fbCreatePixmap
+ 2 1.0363 Xorg DamageSetReportAfterOp
+ 1 0.5181 Xorg __i686.get_pc_thunk.bx
+ 1 0.5181 Xorg LegalNewID
+ 1 0.5181 Xorg XaceHook
+ 1 0.5181 Xorg damageInsertDamage
+ 1 0.5181 Xorg DamageCreate
+ 1 0.5181 libexa.so .plt
+-------------------------------------------------------------------------------
+ 2 14.2857 Xorg CallCallbacks
+ 12 85.7143 Xorg _CallCallbacks
+14 0.2407 Xorg SecurityCheckExtAccess
+ 14 100.000 Xorg SecurityCheckExtAccess [self]
+-------------------------------------------------------------------------------
+ 2 4.8780 Xorg ProcRenderCreatePicture
+ 39 95.1220 Xorg dixLookupDrawable
+14 0.2407 Xorg SecurityLookupIDByClass
+ 23 56.0976 Xorg XaceHook
+ 14 34.1463 Xorg SecurityLookupIDByClass [self]
+ 2 4.8780 Xorg __i686.get_pc_thunk.bx
+ 2 4.8780 Xorg Hash
+-------------------------------------------------------------------------------
+14 0.2407 Xorg damageDestroyPixmap
+ 61 53.5088 libexa.so exaDestroyPixmap
+ 27 23.6842 Xorg DamageDestroy
+ 14 12.2807 Xorg damageDestroyPixmap [self]
+ 6 5.2632 libfb.so fbDestroyPixmap
+ 3 2.6316 Xorg damageRemoveDamage
+ 1 0.8772 Xorg __i686.get_pc_thunk.bx
+ 1 0.8772 libexa.so __i686.get_pc_thunk.bx
+ 1 0.8772 libexa.so exaOffscreenFree
+-------------------------------------------------------------------------------
+ 7 5.1095 Xorg XaceCatchExtProc
+ 130 94.8905 Xorg ProcRenderDispatch
+13 0.2235 Xorg ProcRenderFreePicture
+ 96 70.0730 Xorg FreeResource
+ 24 17.5182 Xorg SecurityLookupIDByType
+ 13 9.4891 Xorg ProcRenderFreePicture [self]
+ 2 1.4599 Xorg __i686.get_pc_thunk.bx
+ 1 0.7299 Xorg Hash
+ 1 0.7299 Xorg FreePicture
+-------------------------------------------------------------------------------
+ 10 18.1818 Xorg XaceCatchExtProc
+ 45 81.8182 Xorg ProcRenderDispatch
+13 0.2235 Xorg ProcRenderSetPictureFilter
+ 27 49.0909 Xorg SetPictureFilter
+ 14 25.4545 Xorg SecurityLookupIDByType
+ 13 23.6364 Xorg ProcRenderSetPictureFilter [self]
+ 1 1.8182 Xorg PictureFindFilter
+-------------------------------------------------------------------------------
+ 3 5.0000 Xorg ProcRenderCreatePicture
+ 57 95.0000 Xorg CreatePicture
+13 0.2235 Xorg SetPictureToDefaults
+ 32 53.3333 Xorg PictureGetFilterId
+ 13 21.6667 Xorg SetPictureToDefaults [self]
+ 10 16.6667 libc-2.5.so strlen
+ 4 6.6667 Xorg CompareISOLatin1Lowered
+ 1 1.6667 Xorg .plt
+-------------------------------------------------------------------------------
+ 9 2.0225 Xorg main
+ 436 97.9775 Xorg Dispatch
+13 0.2235 Xorg XaceCatchDispatchProc
+ 192 43.1461 Xorg ProcCreatePixmap
+ 83 18.6517 Xorg ProcFreePixmap
+ 68 15.2809 Xorg ProcPolySegment
+ 20 4.4944 Xorg ProcSetClipRectangles
+ 17 3.8202 Xorg ProcCopyArea
+ 16 3.5955 Xorg ProcChangeGC
+ 13 2.9213 Xorg XaceCatchDispatchProc [self]
+ 13 2.9213 Xorg ProcPolyFillRectangle
+ 6 1.3483 Xorg ProcFreeGC
+ 5 1.1236 Xorg XaceHook
+ 3 0.6742 Xorg ProcCreateGC
+ 2 0.4494 libexa.so exaCreatePixmap
+ 2 0.4494 Xorg __i686.get_pc_thunk.bx
+ 1 0.2247 Xorg AddResource
+ 1 0.2247 Xorg CallCallbacks
+ 1 0.2247 Xorg dixLookupDrawable
+ 1 0.2247 Xorg FreeResource
+ 1 0.2247 Xorg ProcQueryTree
+-------------------------------------------------------------------------------
+13 0.2235 Xorg miComputeCompositeClip
+ 13 54.1667 Xorg miComputeCompositeClip [self]
+ 4 16.6667 Xorg miTranslateRegion
+ 4 16.6667 Xorg miIntersect
+ 2 8.3333 libpixman.so.0.0.0 pixman_region_translate
+ 1 4.1667 libpixman.so.0.0.0 pixman_region_intersect
+-------------------------------------------------------------------------------
+13 0.2235 Xorg miGlyphExtents
+ 13 100.000 Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 2 3.5714 Xorg damageDamageBox
+ 4 7.1429 Xorg miComputeCompositeClip
+ 4 7.1429 Xorg miValidatePicture
+ 5 8.9286 Xorg damagePolyFillRect
+ 41 73.2143 Xorg damageDamageRegion
+13 0.2235 Xorg miIntersect
+ 49 75.3846 libpixman.so.0.0.0 pixman_region_intersect
+ 13 20.0000 Xorg miIntersect [self]
+ 3 4.6154 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg ProcRenderSetPictureFilter
+ 20 95.2381 Xorg SetPictureFilter
+12 0.2063 Xorg PictureFindFilter
+ 12 57.1429 Xorg PictureFindFilter [self]
+ 9 42.8571 Xorg PictureGetFilterId
+-------------------------------------------------------------------------------
+ 1 0.8333 Xorg damageGlyphs
+ 1 0.8333 Xorg miCreateAlphaPicture
+ 2 1.6667 Xorg ProcCopyArea
+ 3 2.5000 Xorg ProcPolyFillRectangle
+ 4 3.3333 Xorg ProcPolySegment
+ 4 3.3333 Xorg miCompositeRects
+ 105 87.5000 Xorg miColorRects
+12 0.2063 Xorg ValidateGC
+ 126 86.8966 Xorg damageValidateGC
+ 12 8.2759 Xorg ValidateGC [self]
+ 4 2.7586 Xorg miBSCheapValidateGC
+ 3 2.0690 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 2.3256 Xorg XaceCatchDispatchProc
+ 18 41.8605 Xorg ProcCreatePixmap
+ 24 55.8140 Xorg ProcRenderCreatePicture
+11 0.1891 Xorg AddResource
+ 22 51.1628 Xorg Xalloc
+ 11 25.5814 Xorg AddResource [self]
+ 10 23.2558 Xorg Hash
+-------------------------------------------------------------------------------
+ 3 2.8571 Xorg ProcRenderDispatch
+ 102 97.1429 Xorg ProcRenderCompositeGlyphs
+11 0.1891 Xorg FindGlyph
+ 94 89.5238 Xorg FindGlyphRef
+ 11 10.4762 Xorg FindGlyph [self]
+-------------------------------------------------------------------------------
+ 1 0.7874 Xorg miColorRects
+ 126 99.2126 Xorg ValidateGC
+11 0.1891 Xorg damageValidateGC
+ 116 91.3386 Xorg miBSCheapValidateGC
+ 11 8.6614 Xorg damageValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 1.6129 Xorg ProcPolyFillRectangle
+ 1 1.6129 Xorg ProcPolySegment
+ 1 1.6129 Xorg XaceCatchDispatchProc
+ 15 24.1935 Xorg ProcCreatePixmap
+ 44 70.9677 Xorg ProcRenderCreatePicture
+11 0.1891 Xorg dixLookupDrawable
+ 39 62.9032 Xorg SecurityLookupIDByClass
+ 11 17.7419 Xorg dixLookupDrawable [self]
+ 9 14.5161 Xorg XaceHook
+ 2 3.2258 Xorg __i686.get_pc_thunk.bx
+ 1 1.6129 Xorg CallCallbacks
+-------------------------------------------------------------------------------
+ 1 9.0909 Xorg miColorRects
+ 1 9.0909 Xorg CompositeGlyphs
+ 1 9.0909 Xorg DamageRegister
+ 1 9.0909 Xorg damageReportPostOp
+ 1 9.0909 Xorg damagePolyFillRect
+ 1 9.0909 Xorg damageCopyArea
+ 1 9.0909 Xorg damageGlyphs
+ 1 9.0909 Xorg damageComposite
+ 3 27.2727 Xorg damageDamageRegion
+11 0.1891 Xorg getDrawableDamageRef
+ 11 91.6667 Xorg getDrawableDamageRef [self]
+ 1 8.3333 libfb.so fbGetWinPrivateIndex
+-------------------------------------------------------------------------------
+ 1 1.1905 Xorg miChangeClip
+ 2 2.3810 Xorg ValidateOnePicture
+ 10 11.9048 Xorg miColorRects
+ 35 41.6667 Xorg miRectsToRegion
+ 36 42.8571 Xorg miValidatePicture
+11 0.1891 Xorg miRegionCreate
+ 47 55.9524 Xorg Xalloc
+ 14 16.6667 Xorg miRegionInit
+ 11 13.0952 Xorg miRegionCreate [self]
+ 5 5.9524 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 3 3.5714 Xorg .plt
+ 3 3.5714 libc-2.5.so malloc
+ 1 1.1905 libpixman.so.0.0.0 pixman_region_init
+-------------------------------------------------------------------------------
+ 2 6.4516 Xorg ProcRenderCreatePicture
+ 29 93.5484 Xorg CreatePicture
+10 0.1719 Xorg AllocatePicture
+ 20 64.5161 Xorg Xalloc
+ 10 32.2581 Xorg AllocatePicture [self]
+ 1 3.2258 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg ProcCreatePixmap
+10 0.1719 Xorg DamageRegister
+ 10 90.9091 Xorg DamageRegister [self]
+ 1 9.0909 Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 3 0.2879 Xorg XaceCatchExtProc
+ 1039 99.7121 Xorg ProcRenderDispatch
+10 0.1719 Xorg ProcRenderFillRectangles
+ 1000 95.9693 Xorg CompositeRects
+ 29 2.7831 Xorg SecurityLookupIDByType
+ 10 0.9597 Xorg ProcRenderFillRectangles [self]
+ 2 0.1919 Xorg miCompositeRects
+ 1 0.0960 Xorg XaceHook
+-------------------------------------------------------------------------------
+ 11 100.000 Xorg ProcRenderSetPictureTransform
+10 0.1719 Xorg SetPictureTransform
+ 10 90.9091 Xorg SetPictureTransform [self]
+ 1 9.0909 Xorg miChangePictureTransform
+-------------------------------------------------------------------------------
+ 1 1.1236 Xorg CompositePicture
+ 1 1.1236 Xorg CompositeTrapezoids
+ 2 2.2472 Xorg CompositeRects
+ 85 95.5056 Xorg ValidatePicture
+10 0.1719 Xorg ValidateOnePicture
+ 76 85.3933 Xorg miValidatePicture
+ 10 11.2360 Xorg ValidateOnePicture [self]
+ 2 2.2472 Xorg miRegionCreate
+ 1 1.1236 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 27 100.000 Xorg damageDestroyPixmap
+9 0.1547 Xorg DamageDestroy
+ 15 53.5714 Xorg Xfree
+ 9 32.1429 Xorg DamageDestroy [self]
+ 2 7.1429 Xorg .plt
+ 1 3.5714 Xorg __i686.get_pc_thunk.bx
+ 1 3.5714 libc-2.5.so free
+-------------------------------------------------------------------------------
+ 5 45.4545 Xorg main
+ 6 54.5455 Xorg Dispatch
+9 0.1547 Xorg FlushAllOutput
+ 9 81.8182 Xorg FlushAllOutput [self]
+ 1 9.0909 Xorg FlushClient
+ 1 9.0909 libc-2.5.so __i686.get_pc_thunk.cx
+-------------------------------------------------------------------------------
+ 2 6.2500 Xorg XaceCatchExtProc
+ 30 93.7500 Xorg ProcRenderDispatch
+9 0.1547 Xorg ProcRenderChangePicture
+ 14 43.7500 Xorg ChangePicture
+ 9 28.1250 Xorg ProcRenderChangePicture [self]
+ 8 25.0000 Xorg SecurityLookupIDByType
+ 1 3.1250 Xorg Ones
+-------------------------------------------------------------------------------
+ 7 22.5806 Xorg XaceCatchExtProc
+ 24 77.4194 Xorg ProcRenderDispatch
+9 0.1547 Xorg ProcRenderSetPictureTransform
+ 11 35.4839 Xorg SetPictureTransform
+ 9 29.0323 Xorg SecurityLookupIDByType
+ 9 29.0323 Xorg ProcRenderSetPictureTransform [self]
+ 2 6.4516 Xorg miChangePictureTransform
+-------------------------------------------------------------------------------
+ 30 100.000 Xorg miTrapezoidBounds
+9 0.1547 Xorg miLineFixedX
+ 21 70.0000 Xorg __divdi3
+ 9 30.0000 Xorg miLineFixedX [self]
+-------------------------------------------------------------------------------
+ 4 22.2222 Xorg miValidatePicture
+ 14 77.7778 Xorg miRegionCreate
+9 0.1547 Xorg miRegionInit
+ 9 50.0000 Xorg miRegionInit [self]
+ 8 44.4444 libpixman.so.0.0.0 pixman_region_init
+ 1 5.5556 libpixman.so.0.0.0 pixman_region_init_with_extents
+-------------------------------------------------------------------------------
+ 1 3.5714 Xorg ProcRenderDispatch
+ 27 96.4286 Xorg ProcRenderSetPictureFilter
+8 0.1376 Xorg SetPictureFilter
+ 20 71.4286 Xorg PictureFindFilter
+ 8 28.5714 Xorg SetPictureFilter [self]
+-------------------------------------------------------------------------------
+ 1 1.0989 Xorg ProcRenderComposite
+ 3 3.2967 Xorg ProcRenderCompositeGlyphs
+ 8 8.7912 Xorg CompositeTrapezoids
+ 15 16.4835 Xorg CompositePicture
+ 20 21.9780 Xorg CompositeGlyphs
+ 44 48.3516 Xorg CompositeRects
+8 0.1376 Xorg ValidatePicture
+ 85 84.1584 Xorg ValidateOnePicture
+ 8 7.9208 Xorg ValidatePicture [self]
+ 4 3.9604 Xorg __i686.get_pc_thunk.bx
+ 4 3.9604 Xorg miValidatePicture
+-------------------------------------------------------------------------------
+ 40 100.000 Xorg miTrapezoids
+8 0.1376 Xorg miTrapezoidBounds
+ 30 75.0000 Xorg miLineFixedX
+ 8 20.0000 Xorg miTrapezoidBounds [self]
+ 2 5.0000 Xorg __divdi3
+-------------------------------------------------------------------------------
+ 1 5.0000 Xorg damagePolyFillRect
+ 1 5.0000 Xorg damageGlyphs
+ 18 90.0000 Xorg damageReportPostOp
+7 0.1204 Xorg DamageReportDamage
+ 10 50.0000 Xorg miUnion
+ 7 35.0000 Xorg DamageReportDamage [self]
+ 3 15.0000 Xorg .plt
+-------------------------------------------------------------------------------
+ 1 0.0158 Xorg ProcRenderComposite
+ 1 0.0158 Xorg miTrapezoids
+ 6335 99.9684 Xorg CompositePicture
+7 0.1204 Xorg damageComposite
+ 6300 99.4161 libexa.so exaComposite
+ 25 0.3945 Xorg damageDamageBox
+ 7 0.1105 Xorg damageComposite [self]
+ 3 0.0473 Xorg damageReportPostOp
+ 1 0.0158 Xorg getDrawableDamageRef
+ 1 0.0158 libexa.so exaGetDrawablePixmap
+-------------------------------------------------------------------------------
+ 1 0.0999 Xorg ProcRenderDispatch
+ 1000 99.9001 Xorg ProcRenderFillRectangles
+6 0.1032 Xorg CompositeRects
+ 944 94.3057 Xorg miCompositeRects
+ 44 4.3956 Xorg ValidatePicture
+ 6 0.5994 Xorg CompositeRects [self]
+ 2 0.1998 Xorg __i686.get_pc_thunk.bx
+ 2 0.1998 Xorg miColorRects
+ 2 0.1998 Xorg ValidateOnePicture
+ 1 0.0999 Xorg PictureMatchFormat
+-------------------------------------------------------------------------------
+ 1 1.5873 Xorg miCompositeRects
+ 1 1.5873 Xorg ProcRenderFreePicture
+ 7 11.1111 Xorg miTrapezoids
+ 54 85.7143 Xorg FreeResource
+6 0.1032 Xorg FreePicture
+ 49 45.3704 libextmod.so XvDestroyPixmap
+ 25 23.1481 Xorg miDestroyPicture
+ 25 23.1481 Xorg Xfree
+ 6 5.5556 Xorg FreePicture [self]
+ 2 1.8519 libextmod.so __i686.get_pc_thunk.bx
+ 1 0.9259 Xorg miRegionDestroy
+-------------------------------------------------------------------------------
+ 3 3.4884 Xorg Dispatch
+ 83 96.5116 Xorg XaceCatchDispatchProc
+6 0.1032 Xorg ProcFreePixmap
+ 69 80.2326 Xorg FreeResource
+ 8 9.3023 Xorg SecurityLookupIDByType
+ 6 6.9767 Xorg ProcFreePixmap [self]
+ 2 2.3256 Xorg __i686.get_pc_thunk.bx
+ 1 1.1628 Xorg dixDestroyPixmap
+-------------------------------------------------------------------------------
+ 2 7.1429 Xorg CompositeGlyphs
+ 2 7.1429 Xorg damagePolySegment
+ 3 10.7143 Xorg damageComposite
+ 6 21.4286 Xorg damageGlyphs
+ 15 53.5714 Xorg damagePolyFillRect
+6 0.1032 Xorg damageReportPostOp
+ 18 64.2857 Xorg DamageReportDamage
+ 6 21.4286 Xorg damageReportPostOp [self]
+ 2 7.1429 Xorg miUnion
+ 1 3.5714 Xorg __i686.get_pc_thunk.bx
+ 1 3.5714 Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 1 3.8462 Xorg FreePicture
+ 1 3.8462 Xorg damagePolyFillRect
+ 1 3.8462 Xorg miBSCheapDestroyClip
+ 2 7.6923 Xorg miDestroyPictureClip
+ 8 30.7692 Xorg miDestroyClip
+ 13 50.0000 Xorg miDestroyPicture
+6 0.1032 Xorg miRegionDestroy
+ 25 56.8182 Xorg Xfree
+ 6 13.6364 libpixman.so.0.0.0 pixman_region_fini
+ 6 13.6364 Xorg miRegionDestroy [self]
+ 3 6.8182 libc-2.5.so free
+ 2 4.5455 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 2.2727 Xorg .plt
+ 1 2.2727 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 15 100.000 Xorg miRectsToRegion
+6 0.1032 Xorg miRegionValidate
+ 6 40.0000 Xorg miRegionValidate [self]
+ 3 20.0000 Xorg Xalloc
+ 2 13.3333 Xorg miUnionO
+ 2 13.3333 Xorg Xfree
+ 1 6.6667 Xorg QuickSortRects
+ 1 6.6667 Xorg miRectAlloc
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg WakeupHandler
+6 0.1032 Xorg xf86Wakeup
+ 6 100.000 Xorg xf86Wakeup [self]
+-------------------------------------------------------------------------------
+ 99 1.5576 Xorg miCompositeRects
+ 1966 30.9314 Xorg ProcRenderComposite
+ 4291 67.5110 Xorg miTrapezoids
+5 0.0860 Xorg CompositePicture
+ 6335 99.6539 Xorg damageComposite
+ 15 0.2360 Xorg ValidatePicture
+ 5 0.0787 Xorg CompositePicture [self]
+ 1 0.0157 Xorg ValidateOnePicture
+ 1 0.0157 Xorg damageDamageBox
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg miColorRects
+ 1 33.3333 Xorg damageGlyphs
+ 1 33.3333 Xorg miCreateAlphaPicture
+5 0.0860 Xorg FreeScratchGC
+ 5 100.000 Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg ProcCreatePixmap
+ 4 80.0000 Xorg ProcRenderCreatePicture
+5 0.0860 Xorg LegalNewID
+ 5 100.000 Xorg LegalNewID [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg ProcRenderDispatch
+5 0.0860 Xorg PictOpValid
+ 5 100.000 Xorg PictOpValid [self]
+-------------------------------------------------------------------------------
+ 1981 100.000 Xorg ProcRenderDispatch
+5 0.0860 Xorg ProcRenderComposite
+ 1966 99.2428 Xorg CompositePicture
+ 8 0.4038 Xorg SecurityLookupIDByType
+ 5 0.2524 Xorg ProcRenderComposite [self]
+ 1 0.0505 Xorg ValidatePicture
+ 1 0.0505 Xorg damageComposite
+-------------------------------------------------------------------------------
+ 2 7.6923 Xorg GetScratchGC
+ 24 92.3077 Xorg damageChangeClip
+5 0.0860 Xorg miBSCheapChangeClip
+ 19 73.0769 Xorg miChangeClip
+ 5 19.2308 Xorg miBSCheapChangeClip [self]
+ 2 7.6923 Xorg miDestroyClip
+-------------------------------------------------------------------------------
+ 25 100.000 Xorg FreePicture
+5 0.0860 Xorg miDestroyPicture
+ 13 46.4286 Xorg miRegionDestroy
+ 6 21.4286 libpixman.so.0.0.0 pixman_region_fini
+ 5 17.8571 Xorg miDestroyPicture [self]
+ 4 14.2857 Xorg Xfree
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg miValidatePicture
+ 2 28.5714 Xorg damagePolyFillRect
+ 4 57.1429 Xorg miComputeCompositeClip
+5 0.0860 Xorg miTranslateRegion
+ 9 60.0000 libpixman.so.0.0.0 pixman_region_translate
+ 5 33.3333 Xorg miTranslateRegion [self]
+ 1 6.6667 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg miCreateAlphaPicture
+ 2 66.6667 Xorg ProcCreatePixmap
+4 0.0688 Xorg DamageSetReportAfterOp
+ 4 100.000 Xorg DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg XaceCatchExtProc
+4 0.0688 Xorg GetExtensionEntry
+ 4 100.000 Xorg GetExtensionEntry [self]
+-------------------------------------------------------------------------------
+ 2 2.8571 Xorg Dispatch
+ 68 97.1429 Xorg XaceCatchDispatchProc
+4 0.0688 Xorg ProcPolySegment
+ 55 78.5714 Xorg damagePolySegment
+ 4 5.7143 Xorg ValidateGC
+ 4 5.7143 Xorg dixLookupGC
+ 4 5.7143 Xorg ProcPolySegment [self]
+ 2 2.8571 Xorg damageDamageBox
+ 1 1.4286 Xorg dixLookupDrawable
+-------------------------------------------------------------------------------
+ 1 3.3333 Xorg dixChangeGC
+ 1 3.3333 Xorg miCompositeRects
+ 2 6.6667 Xorg miColorRects
+ 9 30.0000 Xorg SetClipRects
+ 17 56.6667 Xorg GetScratchGC
+4 0.0688 Xorg damageChangeClip
+ 24 80.0000 Xorg miBSCheapChangeClip
+ 4 13.3333 Xorg damageChangeClip [self]
+ 2 6.6667 Xorg miChangeClip
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg damageDestroyPixmap
+4 0.0688 Xorg damageRemoveDamage
+ 4 100.000 Xorg damageRemoveDamage [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 Xorg Dispatch
+ 3 75.0000 Xorg WaitForSomething
+4 0.0688 Xorg mffs
+ 4 100.000 Xorg mffs [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg damageChangeGC
+4 0.0688 Xorg miChangeGC
+ 4 100.000 Xorg miChangeGC [self]
+-------------------------------------------------------------------------------
+ 2 14.2857 Xorg miBSCheapChangeClip
+ 12 85.7143 Xorg miChangeClip
+4 0.0688 Xorg miDestroyClip
+ 8 57.1429 Xorg miRegionDestroy
+ 4 28.5714 Xorg miDestroyClip [self]
+ 1 7.1429 Xorg __i686.get_pc_thunk.bx
+ 1 7.1429 libpixman.so.0.0.0 pixman_region_fini
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg ProcFreeGC
+ 2 66.6667 Xorg FreeResource
+3 0.0516 Xorg FlushClientCaches
+ 3 100.000 Xorg FlushClientCaches [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageGlyphs
+3 0.0516 Xorg GetScratchPixmapHeader
+ 5 62.5000 Xorg miModifyPixmapHeader
+ 3 37.5000 Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 16 100.000 Xorg XaceCatchDispatchProc
+3 0.0516 Xorg ProcChangeGC
+ 9 56.2500 Xorg dixChangeGC
+ 3 18.7500 Xorg dixLookupGC
+ 3 18.7500 Xorg ProcChangeGC [self]
+ 1 6.2500 Xorg Ones
+-------------------------------------------------------------------------------
+ 2 9.5238 Xorg damageChangeClip
+ 19 90.4762 Xorg miBSCheapChangeClip
+3 0.0516 Xorg miChangeClip
+ 12 57.1429 Xorg miDestroyClip
+ 3 14.2857 Xorg miRectsToRegion
+ 3 14.2857 Xorg miChangeClip [self]
+ 1 4.7619 Xorg __i686.get_pc_thunk.bx
+ 1 4.7619 Xorg miRegionCreate
+ 1 4.7619 Xorg Xfree
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg SetPictureTransform
+ 2 66.6667 Xorg ProcRenderSetPictureTransform
+3 0.0516 Xorg miChangePictureTransform
+ 3 100.000 Xorg miChangePictureTransform [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg WakeupHandler
+3 0.0516 Xorg xf86VTSwitchPending
+ 3 100.000 Xorg xf86VTSwitchPending [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg compBlockHandler
+2 0.0344 Xorg AnimCurScreenBlockHandler
+ 2 40.0000 Xorg miSpriteBlockHandler
+ 2 40.0000 Xorg AnimCurScreenBlockHandler [self]
+ 1 20.0000 Xorg NoopDDA
+-------------------------------------------------------------------------------
+ 55417 100.000 Xorg ProcRenderCompositeGlyphs
+2 0.0344 Xorg CompositeGlyphs
+ 55399 99.9549 Xorg damageGlyphs
+ 20 0.0361 Xorg ValidatePicture
+ 2 0.0036 Xorg damageReportPostOp
+ 2 0.0036 Xorg CompositeGlyphs [self]
+ 1 0.0018 Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 14245 100.000 Xorg ProcRenderTrapezoids
+2 0.0344 Xorg CompositeTrapezoids
+ 14234 99.9158 Xorg miTrapezoids
+ 8 0.0562 Xorg ValidatePicture
+ 2 0.0140 Xorg CompositeTrapezoids [self]
+ 1 0.0070 Xorg ValidateOnePicture
+ 1 0.0070 libexa.so exaRasterizeTrapezoid
+-------------------------------------------------------------------------------
+2 0.0344 Xorg DamageEmpty
+ 2 100.000 Xorg DamageEmpty [self]
+-------------------------------------------------------------------------------
+2 0.0344 Xorg DamageRegion
+ 2 100.000 Xorg DamageRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageGlyphs
+2 0.0344 Xorg FreeScratchPixmapHeader
+ 2 100.000 Xorg FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg AnimCurScreenBlockHandler
+ 1 50.0000 Xorg WaitForSomething
+2 0.0344 Xorg NoopDDA
+ 2 100.000 Xorg NoopDDA [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg miRegionValidate
+ 1 50.0000 Xorg miRectsToRegion
+2 0.0344 Xorg QuickSortRects
+ 2 100.000 Xorg QuickSortRects [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg XaceCatchExtProc
+2 0.0344 Xorg __i686.get_pc_thunk.cx
+ 2 100.000 Xorg __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcCreatePixmap
+2 0.0344 Xorg damageInsertDamage
+ 2 100.000 Xorg damageInsertDamage [self]
+-------------------------------------------------------------------------------
+ 55 100.000 Xorg ProcPolySegment
+2 0.0344 Xorg damagePolySegment
+ 49 89.0909 libexa.so exaPolySegment
+ 2 3.6364 Xorg damageReportPostOp
+ 2 3.6364 Xorg damageDamageBox
+ 2 3.6364 Xorg damagePolySegment [self]
+-------------------------------------------------------------------------------
+ 1 2.2222 Xorg ProcFreePixmap
+ 44 97.7778 Xorg FreeResource
+2 0.0344 Xorg dixDestroyPixmap
+ 43 95.5556 libextmod.so XvDestroyPixmap
+ 2 4.4444 Xorg dixDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 Xorg ProcRenderSetPictureClipRectangles
+ 3 60.0000 Xorg SetPictureClipRects
+2 0.0344 Xorg miChangePictureClip
+ 3 60.0000 Xorg miDestroyPictureClip
+ 2 40.0000 Xorg miChangePictureClip [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg ProcRenderCreatePicture
+2 0.0344 Xorg miCreatePicture
+ 2 100.000 Xorg miCreatePicture [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg miDestroyGC
+2 0.0344 Xorg miDestroyGCOps
+ 2 100.000 Xorg miDestroyGCOps [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg AnimCurScreenBlockHandler
+2 0.0344 Xorg miSpriteBlockHandler
+ 2 100.000 Xorg miSpriteBlockHandler [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg miRegionValidate
+2 0.0344 Xorg miUnionO
+ 2 100.000 Xorg miUnionO [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg CreateGC
+1 0.0172 Xorg AllocateGC
+ 1 50.0000 Xorg Xalloc
+ 1 50.0000 Xorg AllocateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg CompositeRects
+1 0.0172 Xorg PictureMatchFormat
+ 1 100.000 Xorg PictureMatchFormat [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg Dispatch
+ 6 85.7143 Xorg XaceCatchDispatchProc
+1 0.0172 Xorg ProcFreeGC
+ 4 57.1429 Xorg FreeResource
+ 1 14.2857 Xorg FlushClientCaches
+ 1 14.2857 Xorg dixLookupGC
+ 1 14.2857 Xorg ProcFreeGC [self]
+-------------------------------------------------------------------------------
+ 13 100.000 Xorg XaceCatchDispatchProc
+1 0.0172 Xorg ProcPolyFillRectangle
+ 8 61.5385 Xorg damagePolyFillRect
+ 3 23.0769 Xorg ValidateGC
+ 1 7.6923 Xorg dixLookupDrawable
+ 1 7.6923 Xorg ProcPolyFillRectangle [self]
+-------------------------------------------------------------------------------
+ 12 100.000 Xorg ProcRenderDispatch
+1 0.0172 Xorg ProcRenderSetPictureClipRectangles
+ 8 66.6667 Xorg SetPictureClipRects
+ 2 16.6667 Xorg miChangePictureClip
+ 1 8.3333 Xorg SecurityLookupIDByType
+ 1 8.3333 Xorg ProcRenderSetPictureClipRectangles [self]
+-------------------------------------------------------------------------------
+ 14253 100.000 Xorg ProcRenderDispatch
+1 0.0172 Xorg ProcRenderTrapezoids
+ 14245 99.9439 Xorg CompositeTrapezoids
+ 6 0.0421 Xorg SecurityLookupIDByType
+ 1 0.0070 Xorg __i686.get_pc_thunk.bx
+ 1 0.0070 Xorg ProcRenderTrapezoids [self]
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg Dispatch
+ 20 95.2381 Xorg XaceCatchDispatchProc
+1 0.0172 Xorg ProcSetClipRectangles
+ 17 80.9524 Xorg SetClipRects
+ 3 14.2857 Xorg dixLookupGC
+ 1 4.7619 Xorg ProcSetClipRectangles [self]
+-------------------------------------------------------------------------------
+ 17 100.000 Xorg ProcSetClipRectangles
+1 0.0172 Xorg SetClipRects
+ 9 52.9412 Xorg damageChangeClip
+ 3 17.6471 libc-2.5.so memmove
+ 2 11.7647 Xorg damageChangeGC
+ 2 11.7647 Xorg Xalloc
+ 1 5.8824 Xorg SetClipRects [self]
+-------------------------------------------------------------------------------
+ 19 100.000 Xorg WaitForSomething
+1 0.0172 Xorg WakeupHandler
+ 7 36.8421 libdri.so DRIWakeupHandler
+ 6 31.5789 Xorg xf86Wakeup
+ 3 15.7895 Xorg xf86VTSwitchPending
+ 1 5.2632 libdri.so __i686.get_pc_thunk.bx
+ 1 5.2632 libdri.so DRIDoWakeupHandler
+ 1 5.2632 Xorg WakeupHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcQueryTree
+1 0.0172 Xorg WriteToClient
+ 1 100.000 Xorg WriteToClient [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg CoreProcessPointerEvent
+1 0.0172 Xorg XYToWindow
+ 1 100.000 Xorg XYToWindow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ReadRequestFromClient
+1 0.0172 Xorg _XSERVTransSocketRead
+ 1 100.000 Xorg _XSERVTransSocketRead [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg FlushClient
+1 0.0172 Xorg _XSERVTransWritev
+ 1 100.000 Xorg _XSERVTransWritev [self]
+-------------------------------------------------------------------------------
+ 14 100.000 Xorg ProcCopyArea
+1 0.0172 Xorg damageCopyArea
+ 12 85.7143 libexa.so exaCopyArea
+ 1 7.1429 Xorg getDrawableDamageRef
+ 1 7.1429 Xorg damageCopyArea [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg FreeGC
+1 0.0172 Xorg damageDestroyGC
+ 2 66.6667 Xorg miBSCheapDestroyGC
+ 1 33.3333 Xorg damageDestroyGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageCreateGC
+1 0.0172 Xorg miBSCreateGC
+ 1 100.000 Xorg miBSCreateGC [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg miChangePictureClip
+1 0.0172 Xorg miDestroyPictureClip
+ 2 50.0000 Xorg miRegionDestroy
+ 1 25.0000 Xorg Xfree
+ 1 25.0000 Xorg miDestroyPictureClip [self]
+-------------------------------------------------------------------------------
+ 26 100.000 Xorg WaitForSomething
+0 0 Xorg BlockHandler
+ 19 73.0769 libdri.so DRIBlockHandler
+ 5 19.2308 Xorg compBlockHandler
+ 1 3.8462 mouse_drv.so __i686.get_pc_thunk.bx
+ 1 3.8462 mouse_drv.so MouseBlockHandler
+ 0 0 Xorg BlockHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcessPointerEvent
+0 0 Xorg CoreProcessPointerEvent
+ 1 100.000 Xorg XYToWindow
+ 0 0 Xorg CoreProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg ProcCreateGC
+0 0 Xorg CreateGC
+ 2 66.6667 Xorg AllocateGC
+ 1 33.3333 Xorg damageCreateGC
+ 0 0 Xorg CreateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg FlushAllOutput
+0 0 Xorg FlushClient
+ 1 100.000 Xorg _XSERVTransWritev
+ 0 0 Xorg FlushClient [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg FreeResource
+0 0 Xorg FreeGC
+ 3 75.0000 Xorg damageDestroyGC
+ 1 25.0000 Xorg damageDestroyClip
+ 0 0 Xorg FreeGC [self]
+-------------------------------------------------------------------------------
+ 17 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcCopyArea
+ 14 82.3529 Xorg damageCopyArea
+ 2 11.7647 Xorg ValidateGC
+ 1 5.8824 Xorg dixLookupGC
+ 0 0 Xorg ProcCopyArea [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcCreateGC
+ 3 100.000 Xorg CreateGC
+ 0 0 Xorg ProcCreateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcQueryTree
+ 1 100.000 Xorg WriteToClient
+ 0 0 Xorg ProcQueryTree [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Dispatch
+0 0 Xorg ProcessInputEvents
+ 1 100.000 Xorg mieqProcessInputEvents
+ 0 0 Xorg ProcessInputEvents [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg mieqProcessInputEvents
+0 0 Xorg ProcessPointerEvent
+ 1 100.000 Xorg CoreProcessPointerEvent
+ 0 0 Xorg ProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg ProcRenderSetPictureClipRectangles
+0 0 Xorg SetPictureClipRects
+ 4 50.0000 Xorg miRectsToRegion
+ 3 37.5000 Xorg miChangePictureClip
+ 1 12.5000 Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg SetPictureClipRects [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg ReadRequestFromClient
+0 0 Xorg _XSERVTransRead
+ 3 60.0000 libc-2.5.so __read_nocancel
+ 2 40.0000 libc-2.5.so read
+ 0 0 Xorg _XSERVTransRead [self]
+-------------------------------------------------------------------------------
+0 0 Xorg _start
+ 74263 100.000 libc-2.5.so __libc_start_main
+ 0 0 Xorg _start [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg BlockHandler
+0 0 Xorg compBlockHandler
+ 5 100.000 Xorg AnimCurScreenBlockHandler
+ 0 0 Xorg compBlockHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg CreateGC
+0 0 Xorg damageCreateGC
+ 1 100.000 Xorg miBSCreateGC
+ 0 0 Xorg damageCreateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg FreeGC
+0 0 Xorg damageDestroyClip
+ 1 100.000 Xorg miBSCheapDestroyClip
+ 0 0 Xorg damageDestroyClip [self]
+-------------------------------------------------------------------------------
+ 1 8.3333 Xorg ProcFreeGC
+ 1 8.3333 Xorg ProcCopyArea
+ 3 25.0000 Xorg ProcSetClipRectangles
+ 3 25.0000 Xorg ProcChangeGC
+ 4 33.3333 Xorg ProcPolySegment
+0 0 Xorg dixLookupGC
+ 12 100.000 Xorg SecurityLookupIDByType
+ 0 0 Xorg dixLookupGC [self]
+-------------------------------------------------------------------------------
+0 0 Xorg main
+ 74250 99.9569 Xorg Dispatch
+ 9 0.0121 Xorg XaceCatchDispatchProc
+ 7 0.0094 Xorg XaceHook
+ 6 0.0081 Xorg XaceCatchExtProc
+ 5 0.0067 Xorg FlushAllOutput
+ 3 0.0040 Xorg WaitForSomething
+ 2 0.0027 Xorg ReadRequestFromClient
+ 0 0 Xorg main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageDestroyClip
+0 0 Xorg miBSCheapDestroyClip
+ 1 100.000 Xorg miRegionDestroy
+ 0 0 Xorg miBSCheapDestroyClip [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damageDestroyGC
+0 0 Xorg miBSCheapDestroyGC
+ 2 100.000 Xorg miDestroyGC
+ 0 0 Xorg miBSCheapDestroyGC [self]
+-------------------------------------------------------------------------------
+ 52 100.000 Xorg miTrapezoids
+0 0 Xorg miCreateAlphaPicture
+ 35 67.3077 Xorg damagePolyFillRect
+ 9 17.3077 libexa.so exaCreatePixmap
+ 2 3.8462 Xorg CreatePicture
+ 2 3.8462 libextmod.so XvDestroyPixmap
+ 1 1.9231 Xorg ValidateGC
+ 1 1.9231 Xorg FreeScratchGC
+ 1 1.9231 Xorg DamageSetReportAfterOp
+ 1 1.9231 Xorg DamageCreate
+ 0 0 Xorg miCreateAlphaPicture [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg miBSCheapDestroyGC
+0 0 Xorg miDestroyGC
+ 2 100.000 Xorg miDestroyGCOps
+ 0 0 Xorg miDestroyGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg miRegionValidate
+0 0 Xorg miRectAlloc
+ 1 100.000 Xorg Xalloc
+ 0 0 Xorg miRectAlloc [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg miColorRects
+0 0 Xorg miRegionCopy
+ 2 100.000 libpixman.so.0.0.0 pixman_region_copy
+ 0 0 Xorg miRegionCopy [self]
+-------------------------------------------------------------------------------
+ 14234 100.000 Xorg CompositeTrapezoids
+0 0 Xorg miTrapezoids
+ 9843 69.1416 libexa.so exaRasterizeTrapezoid
+ 4291 30.1419 Xorg CompositePicture
+ 52 0.3653 Xorg miCreateAlphaPicture
+ 40 0.2810 Xorg miTrapezoidBounds
+ 7 0.0492 Xorg FreePicture
+ 1 0.0070 Xorg damageComposite
+ 1 0.0070 libexa.so exaFinishAccess
+ 1 0.0070 libexa.so exaPixmapDirty
+ 0 0 Xorg miTrapezoids [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcessInputEvents
+0 0 Xorg mieqProcessInputEvents
+ 1 100.000 Xorg ProcessPointerEvent
+ 0 0 Xorg mieqProcessInputEvents [self]
+-------------------------------------------------------------------------------
+0 0 Xorg xf86PostMotionEvent
+ 1 100.000 Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg xf86PostMotionEvent [self]
+-------------------------------------------------------------------------------
+0 0 Xorg xf86SIGIO
+ 2 100.000 Xorg xf86SigioReadInput
+ 0 0 Xorg xf86SIGIO [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg xf86SIGIO
+0 0 Xorg xf86SigioReadInput
+ 1 50.0000 mouse_drv.so MouseReadInput
+ 1 50.0000 libc-2.5.so sigismember
+ 0 0 Xorg xf86SigioReadInput [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Dispatch
+0 0 libc-2.5.so ___newselect_nocancel
+ 0 0 libc-2.5.so ___newselect_nocancel [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Dispatch
+0 0 libc-2.5.so __errno_location
+ 0 0 libc-2.5.so __errno_location [self]
+-------------------------------------------------------------------------------
+ 3 50.0000 Xorg Xfree
+ 3 50.0000 Xorg Xalloc
+0 0 libc-2.5.so __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 Xorg FlushAllOutput
+ 3 75.0000 Xorg Dispatch
+0 0 libc-2.5.so __i686.get_pc_thunk.cx
+ 0 0 libc-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 74263 100.000 Xorg _start
+0 0 libc-2.5.so __libc_start_main
+ 0 0 libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg _XSERVTransRead
+0 0 libc-2.5.so __read_nocancel
+ 0 0 libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xfree
+0 0 libc-2.5.so _int_free
+ 0 0 libc-2.5.so _int_free [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xalloc
+0 0 libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 1.1628 Xorg FreeResource
+ 1 1.1628 Xorg DamageDestroy
+ 3 3.4884 Xorg miRegionDestroy
+ 81 94.1860 Xorg Xfree
+0 0 libc-2.5.so free
+ 0 0 libc-2.5.so free [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg WaitForSomething
+0 0 libc-2.5.so gettimeofday
+ 0 0 libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 2 0.9346 Xorg AllocatePixmap
+ 3 1.4019 Xorg miRegionCreate
+ 209 97.6636 Xorg Xalloc
+0 0 libc-2.5.so malloc
+ 0 0 libc-2.5.so malloc [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg SetClipRects
+0 0 libc-2.5.so memmove
+ 0 0 libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg _XSERVTransRead
+0 0 libc-2.5.so read
+ 0 0 libc-2.5.so read [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg xf86SigioReadInput
+0 0 libc-2.5.so sigismember
+ 0 0 libc-2.5.so sigismember [self]
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg SetPictureToDefaults
+0 0 libc-2.5.so strlen
+ 0 0 libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+ 19 100.000 Xorg BlockHandler
+0 0 libdri.so DRIBlockHandler
+ 0 0 libdri.so DRIBlockHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg WakeupHandler
+0 0 libdri.so DRIDoWakeupHandler
+ 0 0 libdri.so DRIDoWakeupHandler [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg WakeupHandler
+0 0 libdri.so DRIWakeupHandler
+ 0 0 libdri.so DRIWakeupHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg WakeupHandler
+0 0 libdri.so __i686.get_pc_thunk.bx
+ 0 0 libdri.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 4.1667 Xorg ProcCreatePixmap
+ 4 16.6667 Xorg damagePolyFillRect
+ 19 79.1667 Xorg damageGlyphs
+0 0 libexa.so .plt
+ 0 0 libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageDestroyPixmap
+0 0 libexa.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 6 0.0951 Xorg damageGlyphs
+ 6300 99.9049 Xorg damageComposite
+0 0 libexa.so exaComposite
+ 0 0 libexa.so exaComposite [self]
+-------------------------------------------------------------------------------
+ 5 29.4118 Xorg damageGlyphs
+ 12 70.5882 Xorg damageCopyArea
+0 0 libexa.so exaCopyArea
+ 0 0 libexa.so exaCopyArea [self]
+-------------------------------------------------------------------------------
+ 2 1.3699 Xorg XaceCatchDispatchProc
+ 4 2.7397 Xorg miCompositeRects
+ 9 6.1644 Xorg miCreateAlphaPicture
+ 131 89.7260 Xorg ProcCreatePixmap
+0 0 libexa.so exaCreatePixmap
+ 0 0 libexa.so exaCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 61 100.000 Xorg damageDestroyPixmap
+0 0 libexa.so exaDestroyPixmap
+ 0 0 libexa.so exaDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg damagePolyFillRect
+0 0 libexa.so exaFillRegionSolid
+ 0 0 libexa.so exaFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg miTrapezoids
+0 0 libexa.so exaFinishAccess
+ 0 0 libexa.so exaFinishAccess [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg damageComposite
+ 4 80.0000 Xorg damagePolyFillRect
+0 0 libexa.so exaGetDrawablePixmap
+ 0 0 libexa.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 55225 100.000 Xorg damageGlyphs
+0 0 libexa.so exaGlyphs
+ 0 0 libexa.so exaGlyphs [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageDestroyPixmap
+0 0 libexa.so exaOffscreenFree
+ 0 0 libexa.so exaOffscreenFree [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg miTrapezoids
+ 6 85.7143 Xorg damageGlyphs
+0 0 libexa.so exaPixmapDirty
+ 0 0 libexa.so exaPixmapDirty [self]
+-------------------------------------------------------------------------------
+ 5 1.2755 Xorg miColorRects
+ 387 98.7245 Xorg damagePolyFillRect
+0 0 libexa.so exaPolyFillRect
+ 0 0 libexa.so exaPolyFillRect [self]
+-------------------------------------------------------------------------------
+ 49 100.000 Xorg damagePolySegment
+0 0 libexa.so exaPolySegment
+ 0 0 libexa.so exaPolySegment [self]
+-------------------------------------------------------------------------------
+ 1 0.0102 Xorg CompositeTrapezoids
+ 9843 99.9898 Xorg miTrapezoids
+0 0 libexa.so exaRasterizeTrapezoid
+ 0 0 libexa.so exaRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 87 100.000 Xorg miBSCheapValidateGC
+0 0 libexa.so exaValidateGC
+ 0 0 libexa.so exaValidateGC [self]
+-------------------------------------------------------------------------------
+ 2 1.9417 Xorg miCompositeRects
+ 2 1.9417 Xorg miCreateAlphaPicture
+ 3 2.9126 Xorg damageGlyphs
+ 4 3.8835 Xorg FreeResource
+ 43 41.7476 Xorg dixDestroyPixmap
+ 49 47.5728 Xorg FreePicture
+0 0 libextmod.so XvDestroyPixmap
+ 0 0 libextmod.so XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg FreePicture
+0 0 libextmod.so __i686.get_pc_thunk.bx
+ 0 0 libextmod.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg ProcCreatePixmap
+0 0 libfb.so fbCreatePixmap
+ 0 0 libfb.so fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg damageDestroyPixmap
+0 0 libfb.so fbDestroyPixmap
+ 0 0 libfb.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg getDrawableDamageRef
+0 0 libfb.so fbGetWinPrivateIndex
+ 0 0 libfb.so fbGetWinPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 15 100.000 Xorg miBSCheapValidateGC
+0 0 libfb.so fbValidateGC
+ 0 0 libfb.so fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg miUnion
+0 0 libpixman.so.0.0.0 .plt
+ 0 0 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+ 1 5.0000 Xorg miTranslateRegion
+ 2 10.0000 Xorg miRegionDestroy
+ 3 15.0000 Xorg miIntersect
+ 14 70.0000 Xorg miUnion
+0 0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg miUnion
+0 0 libpixman.so.0.0.0 pixman_op
+ 0 0 libpixman.so.0.0.0 pixman_op [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 Xorg miColorRects
+ 2 20.0000 Xorg miRegionCopy
+ 7 70.0000 Xorg miUnion
+0 0 libpixman.so.0.0.0 pixman_region_copy
+ 0 0 libpixman.so.0.0.0 pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg miDestroyClip
+ 6 46.1538 Xorg miRegionDestroy
+ 6 46.1538 Xorg miDestroyPicture
+0 0 libpixman.so.0.0.0 pixman_region_fini
+ 0 0 libpixman.so.0.0.0 pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 1 6.2500 Xorg miRegionCreate
+ 7 43.7500 Xorg miComputeCompositeRegion
+ 8 50.0000 Xorg miRegionInit
+0 0 libpixman.so.0.0.0 pixman_region_init
+ 0 0 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg miRegionInit
+ 5 83.3333 Xorg miRegionCreate
+0 0 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 0 0 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+ 1 1.6949 Xorg miComputeCompositeClip
+ 9 15.2542 Xorg damageDamageRegion
+ 49 83.0508 Xorg miIntersect
+0 0 libpixman.so.0.0.0 pixman_region_intersect
+ 0 0 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 45 100.000 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 18 100.000 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 81 100.000 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 2 18.1818 Xorg miComputeCompositeClip
+ 9 81.8182 Xorg miTranslateRegion
+0 0 libpixman.so.0.0.0 pixman_region_translate
+ 0 0 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 5 0.5618 Xorg damageDamageRegion
+ 885 99.4382 Xorg miUnion
+0 0 libpixman.so.0.0.0 pixman_region_union
+ 0 0 libpixman.so.0.0.0 pixman_region_union [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg BlockHandler
+0 0 mouse_drv.so MouseBlockHandler
+ 0 0 mouse_drv.so MouseBlockHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg xf86SigioReadInput
+0 0 mouse_drv.so MouseReadInput
+ 0 0 mouse_drv.so MouseReadInput [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg WaitForSomething
+0 0 mouse_drv.so MouseWakeupHandler
+ 0 0 mouse_drv.so MouseWakeupHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg BlockHandler
+0 0 mouse_drv.so __i686.get_pc_thunk.bx
+ 0 0 mouse_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+2118 36.4168 GetTimeInMillis
+569 9.7834 miComputeCompositeRegion
+295 5.0722 miSpriteSourceValidate
+275 4.7283 __i686.get_pc_thunk.bx
+221 3.7999 .plt
+176 3.0261 miCompositeSourceValidate
+130 2.2352 XaceHook
+125 2.1492 miModifyPixmapHeader
+98 1.6850 FindGlyphRef
+93 1.5990 damageGlyphs
+81 1.3927 ReadRequestFromClient
+68 1.1692 Dispatch
+58 0.9972 _CallCallbacks
+56 0.9629 miUnion
+54 0.9285 WaitForSomething
+48 0.8253 damageDamageRegion
+48 0.8253 dixChangeGC
+46 0.7909 SecurityLookupIDByType
+44 0.7565 FreeResource
+43 0.7393 CallCallbacks
+34 0.5846 CompareISOLatin1Lowered
+32 0.5502 Hash
+32 0.5502 miValidatePicture
+31 0.5330 SecurityCheckResourceIDAccess
+31 0.5330 damagePolyFillRect
+29 0.4986 ProcRenderCompositeGlyphs
+27 0.4642 XaceCatchExtProc
+25 0.4298 AllocatePixmap
+25 0.4298 Ones
+24 0.4127 GetScratchGC
+24 0.4127 Xalloc
+23 0.3955 __divdi3
+20 0.3439 ProcRenderCreatePicture
+20 0.3439 miBSCheapChangeGC
+20 0.3439 miColorRects
+19 0.3267 ChangePicture
+18 0.3095 PictureGetFilterId
+18 0.3095 miBSCheapValidateGC
+17 0.2923 damageChangeGC
+17 0.2923 damageDamageBox
+17 0.2923 miRenderColorToPixel
+16 0.2751 ProcRenderDispatch
+16 0.2751 Xfree
+16 0.2751 miCompositeRects
+15 0.2579 miRectsToRegion
+14 0.2407 ChangeGC
+14 0.2407 CreatePicture
+14 0.2407 DamageCreate
+14 0.2407 ProcCreatePixmap
+14 0.2407 SecurityCheckExtAccess
+14 0.2407 SecurityLookupIDByClass
+14 0.2407 damageDestroyPixmap
+13 0.2235 ProcRenderFreePicture
+13 0.2235 ProcRenderSetPictureFilter
+13 0.2235 SetPictureToDefaults
+13 0.2235 XaceCatchDispatchProc
+13 0.2235 miComputeCompositeClip
+13 0.2235 miGlyphExtents
+13 0.2235 miIntersect
+12 0.2063 PictureFindFilter
+12 0.2063 ValidateGC
+11 0.1891 AddResource
+11 0.1891 FindGlyph
+11 0.1891 damageValidateGC
+11 0.1891 dixLookupDrawable
+11 0.1891 getDrawableDamageRef
+11 0.1891 miRegionCreate
+10 0.1719 AllocatePicture
+10 0.1719 DamageRegister
+10 0.1719 ProcRenderFillRectangles
+10 0.1719 SetPictureTransform
+10 0.1719 ValidateOnePicture
+9 0.1547 DamageDestroy
+9 0.1547 FlushAllOutput
+9 0.1547 ProcRenderChangePicture
+9 0.1547 ProcRenderSetPictureTransform
+9 0.1547 miLineFixedX
+9 0.1547 miRegionInit
+8 0.1376 SetPictureFilter
+8 0.1376 ValidatePicture
+8 0.1376 miTrapezoidBounds
+7 0.1204 DamageReportDamage
+7 0.1204 damageComposite
+6 0.1032 CompositeRects
+6 0.1032 FreePicture
+6 0.1032 ProcFreePixmap
+6 0.1032 damageReportPostOp
+6 0.1032 miRegionDestroy
+6 0.1032 miRegionValidate
+6 0.1032 xf86Wakeup
+5 0.0860 CompositePicture
+5 0.0860 FreeScratchGC
+5 0.0860 LegalNewID
+5 0.0860 PictOpValid
+5 0.0860 ProcRenderComposite
+5 0.0860 miBSCheapChangeClip
+5 0.0860 miDestroyPicture
+5 0.0860 miTranslateRegion
+4 0.0688 DamageSetReportAfterOp
+4 0.0688 GetExtensionEntry
+4 0.0688 ProcPolySegment
+4 0.0688 damageChangeClip
+4 0.0688 damageRemoveDamage
+4 0.0688 mffs
+4 0.0688 miChangeGC
+4 0.0688 miDestroyClip
+3 0.0516 FlushClientCaches
+3 0.0516 GetScratchPixmapHeader
+3 0.0516 ProcChangeGC
+3 0.0516 miChangeClip
+3 0.0516 miChangePictureTransform
+3 0.0516 xf86VTSwitchPending
+2 0.0344 AnimCurScreenBlockHandler
+2 0.0344 CompositeGlyphs
+2 0.0344 CompositeTrapezoids
+2 0.0344 DamageEmpty
+2 0.0344 DamageRegion
+2 0.0344 FreeScratchPixmapHeader
+2 0.0344 NoopDDA
+2 0.0344 QuickSortRects
+2 0.0344 __i686.get_pc_thunk.cx
+2 0.0344 damageInsertDamage
+2 0.0344 damagePolySegment
+2 0.0344 dixDestroyPixmap
+2 0.0344 miChangePictureClip
+2 0.0344 miCreatePicture
+2 0.0344 miDestroyGCOps
+2 0.0344 miSpriteBlockHandler
+2 0.0344 miUnionO
+1 0.0172 AllocateGC
+1 0.0172 PictureMatchFormat
+1 0.0172 ProcFreeGC
+1 0.0172 ProcPolyFillRectangle
+1 0.0172 ProcRenderSetPictureClipRectangles
+1 0.0172 ProcRenderTrapezoids
+1 0.0172 ProcSetClipRectangles
+1 0.0172 SetClipRects
+1 0.0172 WakeupHandler
+1 0.0172 WriteToClient
+1 0.0172 XYToWindow
+1 0.0172 _XSERVTransSocketRead
+1 0.0172 _XSERVTransWritev
+1 0.0172 damageCopyArea
+1 0.0172 damageDestroyGC
+1 0.0172 miBSCreateGC
+1 0.0172 miDestroyPictureClip
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 8 0.0220 intel_drv.so I830EXASync
+ 36397 99.9780 intel_drv.so I830Sync
+19660 64.0245 intel_drv.so I830WaitLpRing
+ 19660 53.9976 intel_drv.so I830WaitLpRing [self]
+ 14583 40.0533 libc-2.5.so gettimeofday
+ 1932 5.3064 Xorg GetTimeInMillis
+ 122 0.3351 Xorg .plt
+ 111 0.3049 Xorg __i686.get_pc_thunk.bx
+ 1 0.0027 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) (no symbols)
+-------------------------------------------------------------------------------
+6287 20.4742 intel_drv.so i965_prepare_composite
+ 35335 78.1402 intel_drv.so i830WaitSync
+ 6287 13.9031 intel_drv.so i965_prepare_composite [self]
+ 2907 6.4286 libc-2.5.so memcpy
+ 280 0.6192 intel_drv.so intel_get_pixmap_offset
+ 113 0.2499 intel_drv.so IntelEmitInvarientState
+ 95 0.2101 intel_drv.so intel_get_pixmap_pitch
+ 55 0.1216 intel_drv.so .plt
+ 52 0.1150 intel_drv.so __i686.get_pc_thunk.bx
+ 20 0.0442 libdri.so __i686.get_pc_thunk.cx
+ 19 0.0420 libdri.so DRIGetSAREAPrivate
+ 15 0.0332 intel_drv.so i965_get_card_format
+ 15 0.0332 libexa.so exaGetPixmapOffset
+ 10 0.0221 libdri.so DRIGetContext
+ 7 0.0155 libexa.so exaWaitSync
+ 5 0.0111 intel_drv.so i965_get_dest_format
+ 5 0.0111 libexa.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+2614 8.5127 intel_drv.so i965_composite
+ 2614 73.6546 intel_drv.so i965_composite [self]
+ 719 20.2592 intel_drv.so i830MarkSync
+ 93 2.6205 intel_drv.so i830_get_transformed_coordinates
+ 60 1.6906 intel_drv.so i830WaitSync
+ 36 1.0144 intel_drv.so __i686.get_pc_thunk.bx
+ 13 0.3663 libexa.so exaMarkSync
+ 9 0.2536 intel_drv.so .plt
+ 5 0.1409 libexa.so exaWaitSync
+-------------------------------------------------------------------------------
+ 37201 100.000 intel_drv.so I830EXASync
+512 1.6674 intel_drv.so I830Sync
+ 36397 97.8072 intel_drv.so I830WaitLpRing
+ 512 1.3759 intel_drv.so I830Sync [self]
+ 184 0.4945 Xorg GetTimeInMillis
+ 114 0.3063 intel_drv.so .plt
+ 6 0.0161 intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 7 3.7838 intel_drv.so I830EXASync
+ 9 4.8649 intel_drv.so i965_composite
+ 55 29.7297 intel_drv.so i965_prepare_composite
+ 114 61.6216 intel_drv.so I830Sync
+277 0.9021 intel_drv.so .plt
+ 277 100.000 intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 5 4.0650 intel_drv.so I830EXASync
+ 6 4.8780 intel_drv.so I830Sync
+ 24 19.5122 intel_drv.so i965_check_composite
+ 36 29.2683 intel_drv.so i965_composite
+ 52 42.2764 intel_drv.so i965_prepare_composite
+162 0.5276 intel_drv.so __i686.get_pc_thunk.bx
+ 162 100.000 intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 60 0.1695 intel_drv.so i965_composite
+ 35335 99.8305 intel_drv.so i965_prepare_composite
+154 0.5015 intel_drv.so i830WaitSync
+ 35271 99.5344 libexa.so exaWaitSync
+ 154 0.4346 intel_drv.so i830WaitSync [self]
+ 7 0.0198 libexa.so __i686.get_pc_thunk.bx
+ 4 0.0113 intel_drv.so I830EXASync
+-------------------------------------------------------------------------------
+140 0.4559 intel_drv.so i965_check_composite
+ 140 48.6111 intel_drv.so i965_check_composite [self]
+ 117 40.6250 intel_drv.so i965_check_composite_texture
+ 24 8.3333 intel_drv.so __i686.get_pc_thunk.bx
+ 7 2.4306 intel_drv.so i965_get_dest_format
+-------------------------------------------------------------------------------
+ 280 100.000 intel_drv.so i965_prepare_composite
+138 0.4494 intel_drv.so intel_get_pixmap_offset
+ 150 50.6757 libexa.so exaGetPixmapOffset
+ 138 46.6216 intel_drv.so intel_get_pixmap_offset [self]
+ 8 2.7027 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 117 100.000 intel_drv.so i965_check_composite
+136 0.4429 intel_drv.so i965_check_composite_texture
+ 136 100.000 intel_drv.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+ 719 100.000 intel_drv.so i965_composite
+114 0.3713 intel_drv.so i830MarkSync
+ 602 83.7274 libexa.so exaMarkSync
+ 114 15.8554 intel_drv.so i830MarkSync [self]
+ 3 0.4172 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 95 100.000 intel_drv.so i965_prepare_composite
+113 0.3680 intel_drv.so intel_get_pixmap_pitch
+ 113 94.1667 intel_drv.so intel_get_pixmap_pitch [self]
+ 7 5.8333 libexa.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+ 93 100.000 intel_drv.so i965_composite
+112 0.3647 intel_drv.so i830_get_transformed_coordinates
+ 112 100.000 intel_drv.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+ 113 100.000 intel_drv.so i965_prepare_composite
+80 0.2605 intel_drv.so IntelEmitInvarientState
+ 80 68.3761 intel_drv.so IntelEmitInvarientState [self]
+ 23 19.6581 libdri.so DRIGetSAREAPrivate
+ 14 11.9658 libdri.so DRIGetContext
+-------------------------------------------------------------------------------
+ 4 100.000 intel_drv.so i830WaitSync
+56 0.1824 intel_drv.so I830EXASync
+ 37201 99.7961 intel_drv.so I830Sync
+ 56 0.1502 intel_drv.so I830EXASync [self]
+ 8 0.0215 intel_drv.so I830WaitLpRing
+ 7 0.0188 intel_drv.so .plt
+ 5 0.0134 intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+55 0.1791 intel_drv.so I830EXASolid
+ 55 91.6667 intel_drv.so I830EXASolid [self]
+ 5 8.3333 libexa.so exaGetPixmapOffset
+-------------------------------------------------------------------------------
+ 5 41.6667 intel_drv.so i965_prepare_composite
+ 7 58.3333 intel_drv.so i965_check_composite
+36 0.1172 intel_drv.so i965_get_dest_format
+ 36 100.000 intel_drv.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+ 15 100.000 intel_drv.so i965_prepare_composite
+20 0.0651 intel_drv.so i965_get_card_format
+ 20 100.000 intel_drv.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+13 0.0423 intel_drv.so I830EXAPrepareSolid
+ 13 86.6667 intel_drv.so I830EXAPrepareSolid [self]
+ 1 6.6667 libexa.so __i686.get_pc_thunk.bx
+ 1 6.6667 libexa.so exaGetPixmapOffset
+-------------------------------------------------------------------------------
+13 0.0423 intel_drv.so i830_done_composite
+ 13 100.000 intel_drv.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+ 6 100.000 intel_drv.so I830DRISwapContext
+7 0.0228 intel_drv.so I830EmitFlush
+ 7 100.000 intel_drv.so I830EmitFlush [self]
+-------------------------------------------------------------------------------
+ 3 100.000 intel_drv.so I830DRISwapContext
+3 0.0098 intel_drv.so I830RefreshRing
+ 3 100.000 intel_drv.so I830RefreshRing [self]
+-------------------------------------------------------------------------------
+2 0.0065 intel_drv.so I830DRISwapContext
+ 6 46.1538 intel_drv.so I830EmitFlush
+ 3 23.0769 intel_drv.so I830RefreshRing
+ 2 15.3846 libdri.so DRIGetSAREAPrivate
+ 2 15.3846 intel_drv.so I830DRISwapContext [self]
+-------------------------------------------------------------------------------
+2 0.0065 intel_drv.so I830EXAPrepareCopy
+ 2 100.000 intel_drv.so I830EXAPrepareCopy [self]
+-------------------------------------------------------------------------------
+1 0.0033 intel_drv.so I830EXADoneSolid
+ 1 100.000 intel_drv.so I830EXADoneSolid [self]
+-------------------------------------------------------------------------------
+ 122 100.000 intel_drv.so I830WaitLpRing
+0 0 Xorg .plt
+ 0 0 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 184 8.6957 intel_drv.so I830Sync
+ 1932 91.3043 intel_drv.so I830WaitLpRing
+0 0 Xorg GetTimeInMillis
+ 0 0 Xorg GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+ 111 100.000 intel_drv.so I830WaitLpRing
+0 0 Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 intel_drv.so I830WaitLpRing
+0 0 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) (no symbols)
+ 0 0 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) (no symbols) [self]
+-------------------------------------------------------------------------------
+ 14583 100.000 intel_drv.so I830WaitLpRing
+0 0 libc-2.5.so gettimeofday
+ 0 0 libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 2907 100.000 intel_drv.so i965_prepare_composite
+0 0 libc-2.5.so memcpy
+ 0 0 libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 10 41.6667 intel_drv.so i965_prepare_composite
+ 14 58.3333 intel_drv.so IntelEmitInvarientState
+0 0 libdri.so DRIGetContext
+ 0 0 libdri.so DRIGetContext [self]
+-------------------------------------------------------------------------------
+ 2 4.5455 intel_drv.so I830DRISwapContext
+ 19 43.1818 intel_drv.so i965_prepare_composite
+ 23 52.2727 intel_drv.so IntelEmitInvarientState
+0 0 libdri.so DRIGetSAREAPrivate
+ 0 0 libdri.so DRIGetSAREAPrivate [self]
+-------------------------------------------------------------------------------
+ 20 100.000 intel_drv.so i965_prepare_composite
+0 0 libdri.so __i686.get_pc_thunk.cx
+ 0 0 libdri.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 5.2632 intel_drv.so I830EXAPrepareSolid
+ 3 15.7895 intel_drv.so i830MarkSync
+ 7 36.8421 intel_drv.so i830WaitSync
+ 8 42.1053 intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 0.5848 intel_drv.so I830EXAPrepareSolid
+ 5 2.9240 intel_drv.so I830EXASolid
+ 15 8.7719 intel_drv.so i965_prepare_composite
+ 150 87.7193 intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so exaGetPixmapOffset
+ 0 0 libexa.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+ 5 41.6667 intel_drv.so i965_prepare_composite
+ 7 58.3333 intel_drv.so intel_get_pixmap_pitch
+0 0 libexa.so exaGetPixmapPitch
+ 0 0 libexa.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+ 13 2.1138 intel_drv.so i965_composite
+ 602 97.8862 intel_drv.so i830MarkSync
+0 0 libexa.so exaMarkSync
+ 0 0 libexa.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+ 5 0.0142 intel_drv.so i965_composite
+ 7 0.0198 intel_drv.so i965_prepare_composite
+ 35271 99.9660 intel_drv.so i830WaitSync
+0 0 libexa.so exaWaitSync
+ 0 0 libexa.so exaWaitSync [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+19660 64.0245 I830WaitLpRing
+6287 20.4742 i965_prepare_composite
+2614 8.5127 i965_composite
+512 1.6674 I830Sync
+277 0.9021 .plt
+162 0.5276 __i686.get_pc_thunk.bx
+154 0.5015 i830WaitSync
+140 0.4559 i965_check_composite
+138 0.4494 intel_get_pixmap_offset
+136 0.4429 i965_check_composite_texture
+114 0.3713 i830MarkSync
+113 0.3680 intel_get_pixmap_pitch
+112 0.3647 i830_get_transformed_coordinates
+80 0.2605 IntelEmitInvarientState
+56 0.1824 I830EXASync
+55 0.1791 I830EXASolid
+36 0.1172 i965_get_dest_format
+20 0.0651 i965_get_card_format
+13 0.0423 I830EXAPrepareSolid
+13 0.0423 i830_done_composite
+7 0.0228 I830EmitFlush
+3 0.0098 I830RefreshRing
+2 0.0065 I830DRISwapContext
+2 0.0065 I830EXAPrepareCopy
+1 0.0033 I830EXADoneSolid
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+14590 65.2738 libc-2.5.so gettimeofday
+ 14590 100.000 libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 3 3.1579 libc-2.5.so _int_realloc
+ 92 96.8421 libc-2.5.so msort_with_tmp
+4545 20.3338 libc-2.5.so memcpy
+ 4545 100.000 libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 1 4.5455 libc-2.5.so fopen@@GLIBC_2.1
+ 1 4.5455 libc-2.5.so strdup
+ 3 13.6364 libc-2.5.so realloc
+ 3 13.6364 libc-2.5.so __fopen_internal
+ 14 63.6364 libc-2.5.so _nl_normalize_codeset
+593 2.6530 libc-2.5.so malloc
+ 593 48.9274 libc-2.5.so malloc [self]
+ 584 48.1848 libc-2.5.so _int_malloc
+ 17 1.4026 libc-2.5.so malloc_hook_ini
+ 9 0.7426 libc-2.5.so __i686.get_pc_thunk.bx
+ 4 0.3300 libc-2.5.so malloc_consolidate
+ 3 0.2475 emacs21-x (no symbols)
+ 1 0.0825 libc-2.5.so ptmalloc_init
+ 1 0.0825 libc-2.5.so mmap
+-------------------------------------------------------------------------------
+ 1 0.1692 libc-2.5.so calloc
+ 6 1.0152 libc-2.5.so _int_realloc
+ 584 98.8156 libc-2.5.so malloc
+538 2.4069 libc-2.5.so _int_malloc
+ 538 88.0524 libc-2.5.so _int_malloc [self]
+ 72 11.7840 libc-2.5.so malloc_consolidate
+ 1 0.1637 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so fclose@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so __nss_database_lookup
+ 1 33.3333 libc-2.5.so closedir
+451 2.0177 libc-2.5.so free
+ 451 64.4286 libc-2.5.so free [self]
+ 238 34.0000 libc-2.5.so _int_free
+ 11 1.5714 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so sigemptyset
+308 1.3780 libc-2.5.so memset
+ 308 100.000 libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+ 1 0.4115 libc-2.5.so fclose@@GLIBC_2.1
+ 4 1.6461 libc-2.5.so _int_realloc
+ 238 97.9424 libc-2.5.so free
+265 1.1856 libc-2.5.so _int_free
+ 265 99.2509 libc-2.5.so _int_free [self]
+ 2 0.7491 libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+197 0.8814 libc-2.5.so memcmp
+ 197 100.000 libc-2.5.so memcmp [self]
+-------------------------------------------------------------------------------
+ 378 24.2775 libc-2.5.so qsort
+ 1179 75.7225 libc-2.5.so msort_with_tmp
+161 0.7203 libc-2.5.so msort_with_tmp
+ 1179 75.7225 libc-2.5.so msort_with_tmp
+ 161 10.3404 libc-2.5.so msort_with_tmp [self]
+ 113 7.2575 libxul.so (no symbols)
+ 92 5.9088 libc-2.5.so memcpy
+ 9 0.5780 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.0642 libc-2.5.so rangecmp
+ 1 0.0642 libc-2.5.so strcmp
+ 1 0.0642 libcairo.so.2.11.3 (no symbols)
+-------------------------------------------------------------------------------
+109 0.4877 libc-2.5.so memmove
+ 109 100.000 libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 1 2.5641 libc-2.5.so setlocale
+ 1 2.5641 libc-2.5.so vfprintf
+ 1 2.5641 libc-2.5.so _int_malloc
+ 1 2.5641 libc-2.5.so vasprintf
+ 6 15.3846 libc-2.5.so mbrtowc
+ 9 23.0769 libc-2.5.so msort_with_tmp
+ 9 23.0769 libc-2.5.so malloc
+ 11 28.2051 libc-2.5.so free
+84 0.3758 libc-2.5.so __i686.get_pc_thunk.bx
+ 84 100.000 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 2 2.4691 libc-2.5.so _int_free
+ 3 3.7037 libc-2.5.so mallopt
+ 4 4.9383 libc-2.5.so malloc
+ 72 88.8889 libc-2.5.so _int_malloc
+81 0.3624 libc-2.5.so malloc_consolidate
+ 81 100.000 libc-2.5.so malloc_consolidate [self]
+-------------------------------------------------------------------------------
+68 0.3042 libc-2.5.so strstr
+ 68 100.000 libc-2.5.so strstr [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so mblen
+52 0.2326 libc-2.5.so mbrtowc
+ 52 46.0177 libc-2.5.so mbrtowc [self]
+ 51 45.1327 libc-2.5.so __gconv_transform_utf8_internal
+ 6 5.3097 libc-2.5.so __i686.get_pc_thunk.bx
+ 2 1.7699 libc-2.5.so _dl_mcount_wrapper_check
+ 2 1.7699 libc-2.5.so __wcsmbs_load_conv
+-------------------------------------------------------------------------------
+ 51 100.000 libc-2.5.so mbrtowc
+51 0.2282 libc-2.5.so __gconv_transform_utf8_internal
+ 51 100.000 libc-2.5.so __gconv_transform_utf8_internal [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so _nl_expand_alias
+ 1 50.0000 libc-2.5.so vasprintf
+49 0.2192 libc-2.5.so strlen
+ 49 100.000 libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+19 0.0850 libc-2.5.so realloc
+ 20 47.6190 libc-2.5.so _int_realloc
+ 19 45.2381 libc-2.5.so realloc [self]
+ 3 7.1429 libc-2.5.so malloc
+-------------------------------------------------------------------------------
+18 0.0805 libc-2.5.so mkdir
+ 18 100.000 libc-2.5.so mkdir [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libc-2.5.so ptmalloc_init
+16 0.0716 libc-2.5.so _dl_addr
+ 16 100.000 libc-2.5.so _dl_addr [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so msort_with_tmp
+ 2 66.6667 libc-2.5.so _nl_make_l10nflist
+14 0.0626 libc-2.5.so strcmp
+ 14 100.000 libc-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+ 20 100.000 libc-2.5.so realloc
+8 0.0358 libc-2.5.so _int_realloc
+ 8 38.0952 libc-2.5.so _int_realloc [self]
+ 6 28.5714 libc-2.5.so _int_malloc
+ 4 19.0476 libc-2.5.so _int_free
+ 3 14.2857 libc-2.5.so memcpy
+-------------------------------------------------------------------------------
+8 0.0358 libc-2.5.so strchr
+ 8 100.000 libc-2.5.so strchr [self]
+-------------------------------------------------------------------------------
+7 0.0313 libc-2.5.so bsearch
+ 7 70.0000 libc-2.5.so bsearch [self]
+ 3 30.0000 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+-------------------------------------------------------------------------------
+6 0.0268 libc-2.5.so __i686.get_pc_thunk.cx
+ 6 100.000 libc-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+5 0.0224 libc-2.5.so __read_nocancel
+ 5 100.000 libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+4 0.0179 libc-2.5.so ___newselect_nocancel
+ 4 100.000 libc-2.5.so ___newselect_nocancel [self]
+-------------------------------------------------------------------------------
+4 0.0179 libc-2.5.so __errno_location
+ 4 100.000 libc-2.5.so __errno_location [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so read_alias_file
+4 0.0179 libc-2.5.so fclose@@GLIBC_2.1
+ 4 50.0000 libc-2.5.so fclose@@GLIBC_2.1 [self]
+ 2 25.0000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 12.5000 libc-2.5.so _int_free
+ 1 12.5000 libc-2.5.so free
+-------------------------------------------------------------------------------
+4 0.0179 libc-2.5.so poll
+ 4 100.000 libc-2.5.so poll [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libc-2.5.so vsprintf
+ 1 25.0000 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 2 50.0000 libc-2.5.so vfprintf
+3 0.0134 libc-2.5.so _IO_default_xsputn
+ 3 75.0000 libc-2.5.so _IO_default_xsputn [self]
+ 1 25.0000 libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+-------------------------------------------------------------------------------
+3 0.0134 libc-2.5.so __close_nocancel
+ 3 100.000 libc-2.5.so __close_nocancel [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so mbrtowc
+3 0.0134 libc-2.5.so _dl_mcount_wrapper_check
+ 3 100.000 libc-2.5.so _dl_mcount_wrapper_check [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so _nl_load_locale_from_archive
+3 0.0134 libc-2.5.so _nl_intern_locale_data
+ 3 100.000 libc-2.5.so _nl_intern_locale_data [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so read_alias_file
+ 2 66.6667 libc-2.5.so _nl_load_locale_from_archive
+3 0.0134 libc-2.5.so qsort
+ 378 97.6744 libc-2.5.so msort_with_tmp
+ 5 1.2920 libxul.so (no symbols)
+ 3 0.7752 libc-2.5.so qsort [self]
+ 1 0.2584 libc-2.5.so sysconf
+-------------------------------------------------------------------------------
+3 0.0134 libc-2.5.so read
+ 3 100.000 libc-2.5.so read [self]
+-------------------------------------------------------------------------------
+3 0.0134 libc-2.5.so sigprocmask
+ 3 100.000 libc-2.5.so sigprocmask [self]
+-------------------------------------------------------------------------------
+3 0.0134 libc-2.5.so strcpy
+ 3 100.000 libc-2.5.so strcpy [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 libc-2.5.so printf
+ 8 88.8889 libc-2.5.so vsprintf
+3 0.0134 libc-2.5.so vfprintf
+ 3 33.3333 libc-2.5.so vfprintf [self]
+ 2 22.2222 libc-2.5.so _itoa_word
+ 2 22.2222 libc-2.5.so _IO_default_xsputn
+ 1 11.1111 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 11.1111 libc-2.5.so __find_specmb
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so _IO_default_xsputn
+ 1 50.0000 libc-2.5.so fwrite
+2 0.0089 libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 2 100.000 libc-2.5.so _IO_file_overflow@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so fgets
+ 2 66.6667 libc-2.5.so _IO_getline
+2 0.0089 libc-2.5.so _IO_getline_info
+ 2 66.6667 libc-2.5.so _IO_getline_info [self]
+ 1 33.3333 libc-2.5.so __uflow
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __rpc_thread_destroy
+2 0.0089 libc-2.5.so __rpc_thread_destroy
+ 2 50.0000 libc-2.5.so __rpc_thread_destroy
+ 2 50.0000 libc-2.5.so __rpc_thread_destroy [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so _IO_getline_info
+ 2 66.6667 libc-2.5.so _IO_getline
+2 0.0089 libc-2.5.so __uflow
+ 2 66.6667 libc-2.5.so __uflow [self]
+ 1 33.3333 libc-2.5.so _IO_default_uflow
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so vfprintf
+2 0.0089 libc-2.5.so _itoa_word
+ 2 100.000 libc-2.5.so _itoa_word [self]
+-------------------------------------------------------------------------------
+2 0.0089 libc-2.5.so ioctl
+ 2 100.000 libc-2.5.so ioctl [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_getline
+2 0.0089 libc-2.5.so memchr
+ 2 100.000 libc-2.5.so memchr [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so malloc
+2 0.0089 libc-2.5.so mmap
+ 2 100.000 libc-2.5.so mmap [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libc-2.5.so sprintf
+2 0.0089 libc-2.5.so vsprintf
+ 8 66.6667 libc-2.5.so vfprintf
+ 2 16.6667 libc-2.5.so vsprintf [self]
+ 1 8.3333 libc-2.5.so _IO_default_xsputn
+ 1 8.3333 libc-2.5.so _IO_str_init_static_internal
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so exit
+1 0.0045 libc-2.5.so _IO_cleanup
+ 1 100.000 libc-2.5.so _IO_cleanup [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so _IO_file_finish@@GLIBC_2.1
+ 1 100.000 libc-2.5.so _IO_file_finish@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_init@@GLIBC_2.1
+1 0.0045 libc-2.5.so _IO_link_in
+ 1 100.000 libc-2.5.so _IO_link_in [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so vsscanf
+1 0.0045 libc-2.5.so _IO_no_init
+ 1 100.000 libc-2.5.so _IO_no_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 0.0045 libc-2.5.so _IO_setb
+ 1 100.000 libc-2.5.so _IO_setb [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_vfscanf
+1 0.0045 libc-2.5.so _IO_sputbackc
+ 1 100.000 libc-2.5.so _IO_sputbackc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so vsprintf
+1 0.0045 libc-2.5.so _IO_str_init_static_internal
+ 1 100.000 libc-2.5.so _IO_str_init_static_internal [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so vsscanf
+1 0.0045 libc-2.5.so _IO_vfscanf
+ 1 50.0000 libc-2.5.so _IO_sputbackc
+ 1 50.0000 libc-2.5.so _IO_vfscanf [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so __ctype_get_mb_cur_max
+ 1 100.000 libc-2.5.so __ctype_get_mb_cur_max [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so vfprintf
+1 0.0045 libc-2.5.so __find_specmb
+ 1 100.000 libc-2.5.so __find_specmb [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so fopen@@GLIBC_2.1
+1 0.0045 libc-2.5.so __fopen_maybe_mmap
+ 1 100.000 libc-2.5.so __fopen_maybe_mmap [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so __fxstat
+ 1 100.000 libc-2.5.so __fxstat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _nl_load_locale_from_archive
+1 0.0045 libc-2.5.so __fxstat64@GLIBC_2.1
+ 1 100.000 libc-2.5.so __fxstat64@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __gconv_find_transform
+1 0.0045 libc-2.5.so __gconv_load_cache
+ 1 100.000 libc-2.5.so __gconv_load_cache [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __gconv_find_transform
+1 0.0045 libc-2.5.so __gconv_lookup_cache
+ 1 100.000 libc-2.5.so __gconv_lookup_cache [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nss_passwd_lookup
+1 0.0045 libc-2.5.so __nss_database_lookup
+ 1 50.0000 libc-2.5.so free
+ 1 50.0000 libc-2.5.so __nss_database_lookup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _nl_find_domain
+1 0.0045 libc-2.5.so __open_nocancel
+ 1 100.000 libc-2.5.so __open_nocancel [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so ptmalloc_init
+1 0.0045 libc-2.5.so __register_atfork
+ 1 100.000 libc-2.5.so __register_atfork [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so __xstat
+ 1 100.000 libc-2.5.so __xstat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _nl_find_domain
+1 0.0045 libc-2.5.so _nl_load_domain
+ 1 100.000 libc-2.5.so _nl_load_domain [self]
+-------------------------------------------------------------------------------
+ 22 100.000 libc-2.5.so _nl_find_locale
+1 0.0045 libc-2.5.so _nl_load_locale_from_archive
+ 15 68.1818 libc-2.5.so _nl_normalize_codeset
+ 3 13.6364 libc-2.5.so _nl_intern_locale_data
+ 2 9.0909 libc-2.5.so qsort
+ 1 4.5455 libc-2.5.so __fxstat64@GLIBC_2.1
+ 1 4.5455 libc-2.5.so _nl_load_locale_from_archive [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so _nl_postload_ctype
+ 1 100.000 libc-2.5.so _nl_postload_ctype [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so sbrk
+1 0.0045 libc-2.5.so brk
+ 1 100.000 libc-2.5.so brk [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so parse_expression
+1 0.0045 libc-2.5.so btowc
+ 1 100.000 libc-2.5.so btowc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so ____strtold_l_internal
+1 0.0045 libc-2.5.so fdatasync
+ 1 100.000 libc-2.5.so fdatasync [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so fflush
+ 1 100.000 libc-2.5.so fflush [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so fork
+ 1 100.000 libc-2.5.so fork [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so ftruncate
+ 1 100.000 libc-2.5.so ftruncate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_seek
+1 0.0045 libc-2.5.so llseek
+ 1 100.000 libc-2.5.so llseek [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so mallopt
+ 3 75.0000 libc-2.5.so malloc_consolidate
+ 1 25.0000 libc-2.5.so mallopt [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so mmap64
+ 1 100.000 libc-2.5.so mmap64 [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so mremap
+ 1 100.000 libc-2.5.so mremap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 0.0045 libc-2.5.so munmap
+ 1 100.000 libc-2.5.so munmap [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so open
+ 1 100.000 libc-2.5.so open [self]
+-------------------------------------------------------------------------------
+ 1 5.5556 libc-2.5.so malloc
+ 17 94.4444 libc-2.5.so malloc_hook_ini
+1 0.0045 libc-2.5.so ptmalloc_init
+ 16 88.8889 libc-2.5.so _dl_addr
+ 1 5.5556 libc-2.5.so __register_atfork
+ 1 5.5556 libc-2.5.so ptmalloc_init [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so putc
+ 1 100.000 libc-2.5.so putc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so msort_with_tmp
+1 0.0045 libc-2.5.so rangecmp
+ 1 100.000 libc-2.5.so rangecmp [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so vsscanf
+1 0.0045 libc-2.5.so rawmemchr
+ 1 100.000 libc-2.5.so rawmemchr [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_search_stub
+1 0.0045 libc-2.5.so re_search_internal
+ 1 100.000 libc-2.5.so re_search_internal [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so setlocale
+ 23 92.0000 libc-2.5.so _nl_find_locale
+ 1 4.0000 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 4.0000 libc-2.5.so setlocale [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so sigaction
+ 1 100.000 libc-2.5.so sigaction [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so sigismember
+ 1 100.000 libc-2.5.so sigismember [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so strcasecmp
+ 1 100.000 libc-2.5.so strcasecmp [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so strcat
+ 1 100.000 libc-2.5.so strcat [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so strncpy
+ 1 100.000 libc-2.5.so strncpy [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so tcgetattr
+ 1 100.000 libc-2.5.so tcgetattr [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so tzset
+1 0.0045 libc-2.5.so tzset_internal
+ 1 100.000 libc-2.5.so tzset_internal [self]
+-------------------------------------------------------------------------------
+1 0.0045 libc-2.5.so writev
+ 1 100.000 libc-2.5.so writev [self]
+-------------------------------------------------------------------------------
+ 74271 100.000 libc-2.5.so __libc_start_main
+0 0 Xorg main
+ 0 0 Xorg main [self]
+-------------------------------------------------------------------------------
+ 1 0.3817 libc-2.5.so _nl_normalize_codeset
+ 1 0.3817 libc-2.5.so _IO_vfwscanf
+ 1 0.3817 libc-2.5.so create_ci_newstate
+ 259 98.8550 libc-2.5.so __libc_start_main
+0 0 bash (no symbols)
+ 0 0 bash (no symbols) [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so __libc_start_main
+0 0 cat (no symbols)
+ 0 0 cat (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 dirname (no symbols)
+ 0 0 dirname (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 2.1739 libc-2.5.so malloc
+ 135 97.8261 libc-2.5.so __libc_start_main
+0 0 emacs21-x (no symbols)
+ 0 0 emacs21-x (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libc-2.5.so exit
+ 3 75.0000 libc-2.5.so __libc_start_main
+0 0 expr (no symbols)
+ 0 0 expr (no symbols) [self]
+-------------------------------------------------------------------------------
+ 901 100.000 libc-2.5.so __libc_start_main
+0 0 firefox-bin (no symbols)
+ 0 0 firefox-bin (no symbols) [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so __libc_start_main
+0 0 gawk (no symbols)
+ 0 0 gawk (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 gconfd-2 (no symbols)
+ 0 0 gconfd-2 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libc-2.5.so __libc_start_main
+0 0 grep (no symbols)
+ 0 0 grep (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 hald-addon-storage (no symbols)
+ 0 0 hald-addon-storage (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 id (no symbols)
+ 0 0 id (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 libc-2.5.so __libc_dlsym
+ 3 60.0000 libc-2.5.so __libc_dlopen_mode
+0 0 ld-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so exit
+0 0 ld-2.5.so _dl_fini
+ 0 0 ld-2.5.so _dl_fini [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so do_sym
+ 2 66.6667 libc-2.5.so do_dlsym
+0 0 ld-2.5.so _dl_lookup_symbol_x
+ 0 0 ld-2.5.so _dl_lookup_symbol_x [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so do_dlopen
+0 0 ld-2.5.so _dl_open
+ 0 0 ld-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 libc-2.5.so _nl_find_locale
+ 8 88.8889 libc-2.5.so __libc_start_main
+0 0 ld-2.5.so _dl_runtime_resolve
+ 0 0 ld-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __uflow
+0 0 libc-2.5.so _IO_default_uflow
+ 1 100.000 libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 0 0 libc-2.5.so _IO_default_uflow [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so fclose@@GLIBC_2.1
+0 0 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so _IO_setb
+ 1 50.0000 libc-2.5.so munmap
+ 0 0 libc-2.5.so _IO_file_close_it@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __fopen_internal
+0 0 libc-2.5.so _IO_file_init@@GLIBC_2.1
+ 1 100.000 libc-2.5.so _IO_link_in
+ 0 0 libc-2.5.so _IO_file_init@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_seekoff_maybe_mmap
+0 0 libc-2.5.so _IO_file_seek
+ 1 100.000 libc-2.5.so llseek
+ 0 0 libc-2.5.so _IO_file_seek [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_seekoff_unlocked
+0 0 libc-2.5.so _IO_file_seekoff_maybe_mmap
+ 1 100.000 libc-2.5.so _IO_file_seek
+ 0 0 libc-2.5.so _IO_file_seekoff_maybe_mmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_default_uflow
+0 0 libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 1 100.000 libc-2.5.so __read_nocancel
+ 0 0 libc-2.5.so _IO_file_underflow@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so fputs
+0 0 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 1 100.000 libc-2.5.so _IO_default_xsputn
+ 0 0 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 libc-2.5.so fgets_unlocked
+ 3 60.0000 libc-2.5.so fgets
+0 0 libc-2.5.so _IO_getline
+ 2 40.0000 libc-2.5.so _IO_getline_info
+ 2 40.0000 libc-2.5.so __uflow
+ 1 20.0000 libc-2.5.so memchr
+ 0 0 libc-2.5.so _IO_getline [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so fgetpos@@GLIBC_2.2
+0 0 libc-2.5.so _IO_seekoff_unlocked
+ 1 100.000 libc-2.5.so _IO_file_seekoff_maybe_mmap
+ 0 0 libc-2.5.so _IO_seekoff_unlocked [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so _IO_vfwscanf
+ 1 100.000 bash (no symbols)
+ 0 0 libc-2.5.so _IO_vfwscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getrlimit64@@GLIBC_2.2
+0 0 libc-2.5.so ____strtold_l_internal
+ 1 100.000 libc-2.5.so fdatasync
+ 0 0 libc-2.5.so ____strtold_l_internal [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so dcgettext
+0 0 libc-2.5.so __dcigettext
+ 7 100.000 libc-2.5.so _nl_find_domain
+ 0 0 libc-2.5.so __dcigettext [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libc-2.5.so fopen@@GLIBC_2.1
+ 3 75.0000 libc-2.5.so fopen64
+0 0 libc-2.5.so __fopen_internal
+ 3 75.0000 libc-2.5.so malloc
+ 1 25.0000 libc-2.5.so _IO_file_init@@GLIBC_2.1
+ 0 0 libc-2.5.so __fopen_internal [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __wcsmbs_load_conv
+0 0 libc-2.5.so __gconv_find_transform
+ 1 50.0000 libc-2.5.so __gconv_load_cache
+ 1 50.0000 libc-2.5.so __gconv_lookup_cache
+ 0 0 libc-2.5.so __gconv_find_transform [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so __nss_lookup_function
+0 0 libc-2.5.so __libc_dlopen_mode
+ 3 100.000 ld-2.5.so _dl_catch_error
+ 0 0 libc-2.5.so __libc_dlopen_mode [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __nss_lookup_function
+0 0 libc-2.5.so __libc_dlsym
+ 2 100.000 ld-2.5.so _dl_catch_error
+ 0 0 libc-2.5.so __libc_dlsym [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so __libc_start_main
+ 74271 90.1675 Xorg main
+ 6704 8.1389 oprofiled (no symbols)
+ 901 1.0938 firefox-bin (no symbols)
+ 259 0.3144 bash (no symbols)
+ 135 0.1639 emacs21-x (no symbols)
+ 23 0.0279 grep (no symbols)
+ 21 0.0255 sudo (no symbols)
+ 12 0.0146 sshd (no symbols)
+ 8 0.0097 ld-2.5.so _dl_runtime_resolve
+ 6 0.0073 ls (no symbols)
+ 6 0.0073 sleep (no symbols)
+ 4 0.0049 mkdir (no symbols)
+ 4 0.0049 cat (no symbols)
+ 4 0.0049 gawk (no symbols)
+ 3 0.0036 expr (no symbols)
+ 2 0.0024 gconfd-2 (no symbols)
+ 2 0.0024 hald-addon-storage (no symbols)
+ 1 0.0012 tr (no symbols)
+ 1 0.0012 id (no symbols)
+ 1 0.0012 dirname (no symbols)
+ 1 0.0012 rm (no symbols)
+ 1 0.0012 mktemp (no symbols)
+ 0 0 libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so gethostbyname
+0 0 libc-2.5.so __nss_hostname_digits_dots
+ 1 100.000 libc-2.5.so __res_maybe_init
+ 0 0 libc-2.5.so __nss_hostname_digits_dots [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+0 0 libc-2.5.so __nss_hosts_lookup
+ 1 100.000 libc-2.5.so __nss_lookup
+ 0 0 libc-2.5.so __nss_hosts_lookup [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libc-2.5.so __nss_hosts_lookup
+ 1 25.0000 libc-2.5.so __nss_shadow_lookup
+ 2 50.0000 libc-2.5.so __nss_passwd_lookup
+0 0 libc-2.5.so __nss_lookup
+ 4 100.000 libc-2.5.so __nss_lookup_function
+ 0 0 libc-2.5.so __nss_lookup [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so __nss_lookup
+0 0 libc-2.5.so __nss_lookup_function
+ 3 60.0000 libc-2.5.so __libc_dlopen_mode
+ 2 40.0000 libc-2.5.so __libc_dlsym
+ 0 0 libc-2.5.so __nss_lookup_function [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 2 66.6667 libc-2.5.so __nss_setent
+0 0 libc-2.5.so __nss_passwd_lookup
+ 2 66.6667 libc-2.5.so __nss_lookup
+ 1 33.3333 libc-2.5.so __nss_database_lookup
+ 0 0 libc-2.5.so __nss_passwd_lookup [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so setpwent
+0 0 libc-2.5.so __nss_setent
+ 2 66.6667 libc-2.5.so __nss_passwd_lookup
+ 1 33.3333 libnss_compat-2.5.so _nss_compat_setpwent
+ 0 0 libc-2.5.so __nss_setent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getspnam_r@@GLIBC_2.1.2
+0 0 libc-2.5.so __nss_shadow_lookup
+ 1 100.000 libc-2.5.so __nss_lookup
+ 0 0 libc-2.5.so __nss_shadow_lookup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nss_hostname_digits_dots
+0 0 libc-2.5.so __res_maybe_init
+ 1 100.000 libc-2.5.so __res_ninit
+ 0 0 libc-2.5.so __res_maybe_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __res_maybe_init
+0 0 libc-2.5.so __res_ninit
+ 1 100.000 libc-2.5.so __res_vinit
+ 0 0 libc-2.5.so __res_ninit [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __res_ninit
+0 0 libc-2.5.so __res_vinit
+ 1 100.000 libc-2.5.so fgets_unlocked
+ 0 0 libc-2.5.so __res_vinit [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so mbrtowc
+0 0 libc-2.5.so __wcsmbs_load_conv
+ 2 100.000 libc-2.5.so __gconv_find_transform
+ 0 0 libc-2.5.so __wcsmbs_load_conv [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so _dl_sym
+ 1 100.000 libc-2.5.so do_sym
+ 0 0 libc-2.5.so _dl_sym [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so _nl_find_domain
+0 0 libc-2.5.so _nl_expand_alias
+ 2 66.6667 libc-2.5.so read_alias_file
+ 1 33.3333 libc-2.5.so strlen
+ 0 0 libc-2.5.so _nl_expand_alias [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so __dcigettext
+0 0 libc-2.5.so _nl_find_domain
+ 3 42.8571 libc-2.5.so _nl_expand_alias
+ 2 28.5714 libc-2.5.so _nl_make_l10nflist
+ 1 14.2857 libc-2.5.so _nl_load_domain
+ 1 14.2857 libc-2.5.so __open_nocancel
+ 0 0 libc-2.5.so _nl_find_domain [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libc-2.5.so setlocale
+0 0 libc-2.5.so _nl_find_locale
+ 22 95.6522 libc-2.5.so _nl_load_locale_from_archive
+ 1 4.3478 ld-2.5.so _dl_runtime_resolve
+ 0 0 libc-2.5.so _nl_find_locale [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so _nl_make_l10nflist
+ 2 66.6667 libc-2.5.so _nl_find_domain
+0 0 libc-2.5.so _nl_make_l10nflist
+ 2 66.6667 libc-2.5.so strcmp
+ 1 33.3333 libc-2.5.so _nl_make_l10nflist
+ 0 0 libc-2.5.so _nl_make_l10nflist [self]
+-------------------------------------------------------------------------------
+ 15 100.000 libc-2.5.so _nl_load_locale_from_archive
+0 0 libc-2.5.so _nl_normalize_codeset
+ 14 93.3333 libc-2.5.so malloc
+ 1 6.6667 bash (no symbols)
+ 0 0 libc-2.5.so _nl_normalize_codeset [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so asprintf
+ 1 100.000 libc-2.5.so vasprintf
+ 0 0 libc-2.5.so asprintf [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so calloc
+ 1 100.000 libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so calloc [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so clone
+ 5 100.000 libpthread-2.5.so start_thread
+ 0 0 libc-2.5.so clone [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so closedir
+ 1 100.000 libc-2.5.so free
+ 0 0 libc-2.5.so closedir [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so create_ci_newstate
+ 1 100.000 bash (no symbols)
+ 0 0 libc-2.5.so create_ci_newstate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so strerror_r
+0 0 libc-2.5.so dcgettext
+ 7 100.000 libc-2.5.so __dcigettext
+ 0 0 libc-2.5.so dcgettext [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so do_dlopen
+ 3 100.000 ld-2.5.so _dl_open
+ 0 0 libc-2.5.so do_dlopen [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so do_dlsym
+ 2 100.000 ld-2.5.so _dl_lookup_symbol_x
+ 0 0 libc-2.5.so do_dlsym [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _dl_sym
+0 0 libc-2.5.so do_sym
+ 1 100.000 ld-2.5.so _dl_lookup_symbol_x
+ 0 0 libc-2.5.so do_sym [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so error
+ 1 100.000 libc-2.5.so error_tail
+ 0 0 libc-2.5.so error [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so error
+0 0 libc-2.5.so error_tail
+ 1 100.000 libc-2.5.so strerror_r
+ 0 0 libc-2.5.so error_tail [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so exit
+ 3 50.0000 ld-2.5.so _dl_fini
+ 1 16.6667 libc-2.5.so _IO_cleanup
+ 1 16.6667 sleep (no symbols)
+ 1 16.6667 expr (no symbols)
+ 0 0 libc-2.5.so exit [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fgetpos@@GLIBC_2.2
+ 1 100.000 libc-2.5.so _IO_seekoff_unlocked
+ 0 0 libc-2.5.so fgetpos@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fgets
+ 3 75.0000 libc-2.5.so _IO_getline
+ 1 25.0000 libc-2.5.so _IO_getline_info
+ 0 0 libc-2.5.so fgets [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so phys_pages_info
+ 1 50.0000 libc-2.5.so __res_vinit
+0 0 libc-2.5.so fgets_unlocked
+ 2 100.000 libc-2.5.so _IO_getline
+ 0 0 libc-2.5.so fgets_unlocked [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fopen64
+ 3 100.000 libc-2.5.so __fopen_internal
+ 0 0 libc-2.5.so fopen64 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fopen@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so __fopen_maybe_mmap
+ 1 33.3333 libc-2.5.so malloc
+ 1 33.3333 libc-2.5.so __fopen_internal
+ 0 0 libc-2.5.so fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fputs
+ 1 100.000 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 0 0 libc-2.5.so fputs [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fwrite
+ 1 100.000 libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 0 0 libc-2.5.so fwrite [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so getgrgid
+ 1 100.000 libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so getgrgid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getgrgid
+0 0 libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+ 1 100.000 libnss_compat-2.5.so _nss_compat_getgrgid_r
+ 0 0 libc-2.5.so getgrgid_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so gethostbyname
+ 2 66.6667 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 1 33.3333 libc-2.5.so __nss_hostname_digits_dots
+ 0 0 libc-2.5.so gethostbyname [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so gethostbyname
+0 0 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 1 50.0000 libc-2.5.so __nss_hosts_lookup
+ 1 50.0000 libnss_files-2.5.so _nss_files_gethostbyname_r
+ 0 0 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so getpwuid
+ 2 100.000 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so getpwuid [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so getpwuid
+0 0 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 1 50.0000 libc-2.5.so __nss_passwd_lookup
+ 1 50.0000 libnss_compat-2.5.so _nss_compat_getpwuid_r
+ 0 0 libc-2.5.so getpwuid_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so vtimes
+0 0 libc-2.5.so getrlimit64@@GLIBC_2.2
+ 1 100.000 libc-2.5.so ____strtold_l_internal
+ 0 0 libc-2.5.so getrlimit64@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so getspnam
+ 1 100.000 libc-2.5.so getspnam_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so getspnam [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getspnam
+0 0 libc-2.5.so getspnam_r@@GLIBC_2.1.2
+ 1 100.000 libc-2.5.so __nss_shadow_lookup
+ 0 0 libc-2.5.so getspnam_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+ 17 100.000 libc-2.5.so malloc
+0 0 libc-2.5.so malloc_hook_ini
+ 17 100.000 libc-2.5.so ptmalloc_init
+ 0 0 libc-2.5.so malloc_hook_ini [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so mblen
+ 1 100.000 libc-2.5.so mbrtowc
+ 0 0 libc-2.5.so mblen [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so mktime
+ 1 100.000 libc-2.5.so tzset
+ 0 0 libc-2.5.so mktime [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so parse_reg_exp
+0 0 libc-2.5.so parse_branch
+ 1 100.000 libc-2.5.so parse_expression
+ 0 0 libc-2.5.so parse_branch [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so parse_branch
+0 0 libc-2.5.so parse_expression
+ 1 100.000 libc-2.5.so btowc
+ 0 0 libc-2.5.so parse_expression [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_compile_internal
+0 0 libc-2.5.so parse_reg_exp
+ 1 100.000 libc-2.5.so parse_branch
+ 0 0 libc-2.5.so parse_reg_exp [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so sysconf
+0 0 libc-2.5.so phys_pages_info
+ 1 100.000 libc-2.5.so fgets_unlocked
+ 0 0 libc-2.5.so phys_pages_info [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so printf
+ 1 100.000 libc-2.5.so vfprintf
+ 0 0 libc-2.5.so printf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_compile_pattern
+0 0 libc-2.5.so re_compile_internal
+ 1 100.000 libc-2.5.so parse_reg_exp
+ 0 0 libc-2.5.so re_compile_internal [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so re_compile_pattern
+ 1 100.000 libc-2.5.so re_compile_internal
+ 0 0 libc-2.5.so re_compile_pattern [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so re_search
+ 1 100.000 libc-2.5.so re_search_stub
+ 0 0 libc-2.5.so re_search [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_search
+0 0 libc-2.5.so re_search_stub
+ 1 100.000 libc-2.5.so re_search_internal
+ 0 0 libc-2.5.so re_search_stub [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so _nl_expand_alias
+0 0 libc-2.5.so read_alias_file
+ 1 50.0000 libc-2.5.so qsort
+ 1 50.0000 libc-2.5.so fclose@@GLIBC_2.1
+ 0 0 libc-2.5.so read_alias_file [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so sbrk
+ 1 100.000 libc-2.5.so brk
+ 0 0 libc-2.5.so sbrk [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so setpwent
+ 3 100.000 libc-2.5.so __nss_setent
+ 0 0 libc-2.5.so setpwent [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so sigemptyset
+ 2 100.000 libc-2.5.so memset
+ 0 0 libc-2.5.so sigemptyset [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so sprintf
+ 12 100.000 libc-2.5.so vsprintf
+ 0 0 libc-2.5.so sprintf [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so sscanf
+ 4 100.000 libc-2.5.so vsscanf
+ 0 0 libc-2.5.so sscanf [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so strdup
+ 1 100.000 libc-2.5.so malloc
+ 0 0 libc-2.5.so strdup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so error_tail
+0 0 libc-2.5.so strerror_r
+ 1 100.000 libc-2.5.so dcgettext
+ 0 0 libc-2.5.so strerror_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so qsort
+0 0 libc-2.5.so sysconf
+ 1 100.000 libc-2.5.so phys_pages_info
+ 0 0 libc-2.5.so sysconf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so mktime
+0 0 libc-2.5.so tzset
+ 1 100.000 libc-2.5.so tzset_internal
+ 0 0 libc-2.5.so tzset [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so asprintf
+0 0 libc-2.5.so vasprintf
+ 1 50.0000 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 50.0000 libc-2.5.so strlen
+ 0 0 libc-2.5.so vasprintf [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so sscanf
+0 0 libc-2.5.so vsscanf
+ 2 50.0000 libc-2.5.so _IO_vfscanf
+ 1 25.0000 libc-2.5.so _IO_no_init
+ 1 25.0000 libc-2.5.so rawmemchr
+ 0 0 libc-2.5.so vsscanf [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so vtimes
+ 1 100.000 libc-2.5.so getrlimit64@@GLIBC_2.2
+ 0 0 libc-2.5.so vtimes [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so msort_with_tmp
+0 0 libcairo.so.2.11.3 (no symbols)
+ 0 0 libcairo.so.2.11.3 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so bsearch
+0 0 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+ 0 0 libgtk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so _nss_compat_getgrgid_r
+ 0 0 libnss_compat-2.5.so _nss_compat_getgrgid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so _nss_compat_getpwuid_r
+ 0 0 libnss_compat-2.5.so _nss_compat_getpwuid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nss_setent
+0 0 libnss_compat-2.5.so _nss_compat_setpwent
+ 0 0 libnss_compat-2.5.so _nss_compat_setpwent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+0 0 libnss_files-2.5.so _nss_files_gethostbyname_r
+ 0 0 libnss_files-2.5.so _nss_files_gethostbyname_r [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so clone
+0 0 libpthread-2.5.so start_thread
+ 0 0 libpthread-2.5.so start_thread [self]
+-------------------------------------------------------------------------------
+ 5 4.2373 libc-2.5.so qsort
+ 113 95.7627 libc-2.5.so msort_with_tmp
+0 0 libxul.so (no symbols)
+ 0 0 libxul.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libc-2.5.so __libc_start_main
+0 0 ls (no symbols)
+ 0 0 ls (no symbols) [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so __libc_start_main
+0 0 mkdir (no symbols)
+ 0 0 mkdir (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 mktemp (no symbols)
+ 0 0 mktemp (no symbols) [self]
+-------------------------------------------------------------------------------
+ 6704 100.000 libc-2.5.so __libc_start_main
+0 0 oprofiled (no symbols)
+ 0 0 oprofiled (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 rm (no symbols)
+ 0 0 rm (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 libc-2.5.so exit
+ 6 85.7143 libc-2.5.so __libc_start_main
+0 0 sleep (no symbols)
+ 0 0 sleep (no symbols) [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libc-2.5.so __libc_start_main
+0 0 sshd (no symbols)
+ 0 0 sshd (no symbols) [self]
+-------------------------------------------------------------------------------
+ 21 100.000 libc-2.5.so __libc_start_main
+0 0 sudo (no symbols)
+ 0 0 sudo (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 tr (no symbols)
+ 0 0 tr (no symbols) [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+14590 65.2738 gettimeofday
+4545 20.3338 memcpy
+593 2.6530 malloc
+538 2.4069 _int_malloc
+451 2.0177 free
+308 1.3780 memset
+265 1.1856 _int_free
+197 0.8814 memcmp
+161 0.7203 msort_with_tmp
+109 0.4877 memmove
+84 0.3758 __i686.get_pc_thunk.bx
+81 0.3624 malloc_consolidate
+68 0.3042 strstr
+52 0.2326 mbrtowc
+51 0.2282 __gconv_transform_utf8_internal
+49 0.2192 strlen
+19 0.0850 realloc
+18 0.0805 mkdir
+16 0.0716 _dl_addr
+14 0.0626 strcmp
+8 0.0358 _int_realloc
+8 0.0358 strchr
+7 0.0313 bsearch
+6 0.0268 __i686.get_pc_thunk.cx
+5 0.0224 __read_nocancel
+4 0.0179 ___newselect_nocancel
+4 0.0179 __errno_location
+4 0.0179 fclose@@GLIBC_2.1
+4 0.0179 poll
+3 0.0134 _IO_default_xsputn
+3 0.0134 __close_nocancel
+3 0.0134 _dl_mcount_wrapper_check
+3 0.0134 _nl_intern_locale_data
+3 0.0134 qsort
+3 0.0134 read
+3 0.0134 sigprocmask
+3 0.0134 strcpy
+3 0.0134 vfprintf
+2 0.0089 _IO_file_overflow@@GLIBC_2.1
+2 0.0089 _IO_getline_info
+2 0.0089 __rpc_thread_destroy
+2 0.0089 __uflow
+2 0.0089 _itoa_word
+2 0.0089 ioctl
+2 0.0089 memchr
+2 0.0089 mmap
+2 0.0089 vsprintf
+1 0.0045 _IO_cleanup
+1 0.0045 _IO_file_finish@@GLIBC_2.1
+1 0.0045 _IO_link_in
+1 0.0045 _IO_no_init
+1 0.0045 _IO_setb
+1 0.0045 _IO_sputbackc
+1 0.0045 _IO_str_init_static_internal
+1 0.0045 _IO_vfscanf
+1 0.0045 __ctype_get_mb_cur_max
+1 0.0045 __find_specmb
+1 0.0045 __fopen_maybe_mmap
+1 0.0045 __fxstat
+1 0.0045 __fxstat64@GLIBC_2.1
+1 0.0045 __gconv_load_cache
+1 0.0045 __gconv_lookup_cache
+1 0.0045 __nss_database_lookup
+1 0.0045 __open_nocancel
+1 0.0045 __register_atfork
+1 0.0045 __xstat
+1 0.0045 _nl_load_domain
+1 0.0045 _nl_load_locale_from_archive
+1 0.0045 _nl_postload_ctype
+1 0.0045 brk
+1 0.0045 btowc
+1 0.0045 fdatasync
+1 0.0045 fflush
+1 0.0045 fork
+1 0.0045 ftruncate
+1 0.0045 llseek
+1 0.0045 mallopt
+1 0.0045 mmap64
+1 0.0045 mremap
+1 0.0045 munmap
+1 0.0045 open
+1 0.0045 ptmalloc_init
+1 0.0045 putc
+1 0.0045 rangecmp
+1 0.0045 rawmemchr
+1 0.0045 re_search_internal
+1 0.0045 setlocale
+1 0.0045 sigaction
+1 0.0045 sigismember
+1 0.0045 strcasecmp
+1 0.0045 strcat
+1 0.0045 strncpy
+1 0.0045 tcgetattr
+1 0.0045 tzset_internal
+1 0.0045 writev
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 4 0.4171 libexa.so exaFillRegionSolid
+ 12 1.2513 libexa.so exaTryDriverComposite
+ 943 98.3316 libexa.so exaDoMigration
+959 15.2999 libexa.so ExaOffscreenMarkUsed
+ 959 100.000 libexa.so ExaOffscreenMarkUsed [self]
+-------------------------------------------------------------------------------
+ 2 2.6316 libexa.so exaFillRegionSolid
+ 12 15.7895 libexa.so exaComposite
+ 62 81.5789 libexa.so exaTryDriverComposite
+691 11.0243 libexa.so exaMarkSync
+ 691 100.000 libexa.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+ 47348 47.3907 libexa.so exaComposite
+ 52562 52.6093 libexa.so exaGlyphs
+617 9.8437 libexa.so exaComposite
+ 53032 49.9242 libexa.so exaTryDriverComposite
+ 47348 44.5733 libexa.so exaComposite
+ 4234 3.9859 libexa.so ExaCheckComposite
+ 617 0.5808 libexa.so exaComposite [self]
+ 459 0.4321 intel_drv.so i965_composite
+ 114 0.1073 intel_drv.so i965_check_composite
+ 101 0.0951 libexa.so exaGetDrawablePixmap
+ 88 0.0828 libexa.so .plt
+ 81 0.0763 libexa.so exaPixmapDirty
+ 31 0.0292 libexa.so exaGetOffscreenPixmap
+ 18 0.0169 libexa.so exaOpReadsDestination
+ 15 0.0141 Xorg miComputeCompositeRegion
+ 13 0.0122 libexa.so __i686.get_pc_thunk.bx
+ 13 0.0122 intel_drv.so i830_done_composite
+ 12 0.0113 libexa.so exaMarkSync
+ 9 0.0085 intel_drv.so i965_get_dest_format
+ 8 0.0075 intel_drv.so i965_check_composite_texture
+ 8 0.0075 libexa.so exaDoMigration
+ 8 0.0075 intel_drv.so i965_prepare_composite
+ 6 0.0056 libexa.so exaGetDrawableDeltas
+ 6 0.0056 intel_drv.so __i686.get_pc_thunk.bx
+ 4 0.0038 Xorg miUnion
+-------------------------------------------------------------------------------
+ 1 0.1779 libexa.so exaPrepareAccess
+ 39 6.9395 libexa.so exaCopyNtoN
+ 47 8.3630 libexa.so exaTryDriverComposite
+ 75 13.3452 libexa.so exaMoveInPixmap
+ 193 34.3416 libexa.so exaGetOffscreenPixmap
+ 207 36.8327 libexa.so exaDoMigration
+563 8.9821 libexa.so exaPixmapIsOffscreen
+ 563 100.000 libexa.so exaPixmapIsOffscreen [self]
+-------------------------------------------------------------------------------
+ 8 0.0151 libexa.so exaGlyphs
+ 53032 99.9849 libexa.so exaComposite
+559 8.9183 libexa.so exaTryDriverComposite
+ 45208 85.2258 intel_drv.so i965_prepare_composite
+ 3090 5.8252 intel_drv.so i965_composite
+ 1691 3.1879 libexa.so exaDoMigration
+ 1117 2.1058 Xorg miComputeCompositeRegion
+ 559 1.0538 libexa.so exaTryDriverComposite [self]
+ 368 0.6938 libexa.so exaGetOffscreenPixmap
+ 163 0.3073 intel_drv.so i965_check_composite
+ 85 0.1602 libexa.so exaGetDrawablePixmap
+ 85 0.1602 intel_drv.so .plt
+ 82 0.1546 libexa.so .plt
+ 78 0.1470 Xorg .plt
+ 62 0.1169 libpixman.so.0.0.0 pixman_region_rectangles
+ 62 0.1169 libexa.so exaMarkSync
+ 47 0.0886 libexa.so exaPixmapIsOffscreen
+ 39 0.0735 intel_drv.so i830WaitSync
+ 26 0.0490 libexa.so __i686.get_pc_thunk.bx
+ 25 0.0471 intel_drv.so intel_get_pixmap_pitch
+ 25 0.0471 intel_drv.so __i686.get_pc_thunk.bx
+ 25 0.0471 libpixman.so.0.0.0 pixman_region_n_rects
+ 24 0.0452 libexa.so exaPixmapIsPinned
+ 19 0.0358 intel_drv.so i830_get_transformed_coordinates
+ 17 0.0320 Xorg miCompositeSourceValidate
+ 17 0.0320 libexa.so exaMoveInPixmap
+ 16 0.0302 intel_drv.so intel_get_pixmap_offset
+ 16 0.0302 libexa.so exaGetDrawableDeltas
+ 15 0.0283 intel_drv.so i965_get_dest_format
+ 15 0.0283 libc-2.5.so memcpy
+ 14 0.0264 libpixman.so.0.0.0 pixman_region_not_empty
+ 13 0.0245 libexa.so __i686.get_pc_thunk.cx
+ 12 0.0226 libexa.so ExaOffscreenMarkUsed
+ 11 0.0207 intel_drv.so i965_check_composite_texture
+ 8 0.0151 Xorg __i686.get_pc_thunk.bx
+ 5 0.0094 intel_drv.so i965_get_card_format
+ 4 0.0075 intel_drv.so IntelEmitInvarientState
+ 1 0.0019 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) (no symbols)
+ 1 0.0019 libexa.so exaOpReadsDestination
+-------------------------------------------------------------------------------
+423 6.7486 libexa.so exaGlyphs
+ 52562 95.1641 libexa.so exaComposite
+ 996 1.8033 libexa.so exaPixmapDirty
+ 643 1.1642 libexa.so exaCopyArea
+ 423 0.7658 libexa.so exaGlyphs [self]
+ 104 0.1883 Xorg miModifyPixmapHeader
+ 92 0.1666 libexa.so exaCreatePixmap
+ 81 0.1467 libexa.so exaDoMigration
+ 69 0.1249 libextmod.so XvDestroyPixmap
+ 45 0.0815 Xorg FreePicture
+ 31 0.0561 Xorg damagePolyFillRect
+ 25 0.0453 Xorg ValidateGC
+ 21 0.0380 libexa.so __i686.get_pc_thunk.bx
+ 16 0.0290 libexa.so .plt
+ 16 0.0290 libexa.so exaGetDrawablePixmap
+ 15 0.0272 Xorg CreatePicture
+ 13 0.0235 Xorg miGlyphExtents
+ 11 0.0199 intel_drv.so i965_check_composite
+ 10 0.0181 Xorg ValidatePicture
+ 8 0.0145 libexa.so exaTryDriverComposite
+ 8 0.0145 libexa.so exaOpReadsDestination
+ 7 0.0127 libfb.so fbDoCopy
+ 7 0.0127 Xorg GetScratchPixmapHeader
+ 5 0.0091 Xorg GetScratchGC
+ 5 0.0091 Xorg __i686.get_pc_thunk.bx
+ 3 0.0054 Xorg miDestroyPicture
+ 3 0.0054 libexa.so exaGetDrawableDeltas
+ 3 0.0054 Xorg miUnion
+ 3 0.0054 Xorg DamageCreate
+ 2 0.0036 Xorg FreeScratchGC
+ 2 0.0036 Xorg DamageRegister
+ 1 0.0018 Xorg miDestroyPictureClip
+ 1 0.0018 Xorg damageInsertDamage
+ 1 0.0018 Xorg FreeScratchPixmapHeader
+ 1 0.0018 libfb.so fbCreatePixmap
+-------------------------------------------------------------------------------
+ 1 0.2160 libexa.so exaFillRegionSolid
+ 17 3.6717 libexa.so exaTryDriverComposite
+ 445 96.1123 libexa.so exaDoMigration
+275 4.3874 libexa.so exaMoveInPixmap
+ 275 59.3952 libexa.so exaMoveInPixmap [self]
+ 75 16.1987 libexa.so exaPixmapIsOffscreen
+ 74 15.9827 libexa.so exaOffscreenAlloc
+ 19 4.1037 libexa.so __i686.get_pc_thunk.bx
+ 9 1.9438 Xorg miUnion
+ 5 1.0799 libexa.so exaPixmapIsPinned
+ 2 0.4320 Xorg __i686.get_pc_thunk.bx
+ 2 0.4320 Xorg DamageEmpty
+ 1 0.2160 Xorg Xalloc
+ 1 0.2160 libpixman.so.0.0.0 pixman_region_union
+-------------------------------------------------------------------------------
+ 4 1.6260 libexa.so exaFillRegionSolid
+ 4 1.6260 libexa.so exaPolyFillRect
+ 16 6.5041 libexa.so exaGetOffscreenPixmap
+ 16 6.5041 libexa.so exaGlyphs
+ 20 8.1301 libexa.so exaCopyNtoN
+ 85 34.5528 libexa.so exaTryDriverComposite
+ 101 41.0569 libexa.so exaComposite
+261 4.1640 libexa.so exaGetDrawablePixmap
+ 261 100.000 libexa.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 1 0.4739 libexa.so exaCopyNtoN
+ 1 0.4739 libexa.so exaPolySegment
+ 1 0.4739 libexa.so exaRasterizeTrapezoid
+ 3 1.4218 libexa.so exaPolyFillRect
+ 4 1.8957 libexa.so exaFillRegionSolid
+ 15 7.1090 libexa.so exaDoMigration
+ 16 7.5829 libexa.so exaGlyphs
+ 82 38.8626 libexa.so exaTryDriverComposite
+ 88 41.7062 libexa.so exaComposite
+258 4.1161 libexa.so .plt
+ 258 100.000 libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 0.0506 libexa.so exaPolyFillRect
+ 8 0.4044 libexa.so exaComposite
+ 80 4.0445 libexa.so exaCopyNtoN
+ 81 4.0950 libexa.so exaGlyphs
+ 117 5.9151 libexa.so exaFillRegionSolid
+ 1691 85.4904 libexa.so exaTryDriverComposite
+252 4.0204 libexa.so exaDoMigration
+ 943 47.6263 libexa.so ExaOffscreenMarkUsed
+ 445 22.4747 libexa.so exaMoveInPixmap
+ 252 12.7273 libexa.so exaDoMigration [self]
+ 207 10.4545 libexa.so exaPixmapIsOffscreen
+ 67 3.3838 libexa.so exaPixmapIsPinned
+ 48 2.4242 libexa.so __i686.get_pc_thunk.bx
+ 15 0.7576 libexa.so .plt
+ 2 0.1010 libexa.so exaOffscreenAlloc
+ 1 0.0505 Xorg miUnion
+-------------------------------------------------------------------------------
+ 1 0.6579 libexa.so exaFillRegionSolid
+ 1 0.6579 libexa.so exaPolyFillRect
+ 2 1.3158 libexa.so exaRasterizeTrapezoid
+ 5 3.2895 libexa.so exaCopyNtoN
+ 13 8.5526 libexa.so exaComposite
+ 16 10.5263 libexa.so exaGetOffscreenPixmap
+ 19 12.5000 libexa.so exaMoveInPixmap
+ 21 13.8158 libexa.so exaGlyphs
+ 26 17.1053 libexa.so exaTryDriverComposite
+ 48 31.5789 libexa.so exaDoMigration
+175 2.7920 libexa.so __i686.get_pc_thunk.bx
+ 175 100.000 libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaFillRegionSolid
+172 2.7441 libexa.so exaGetPixmapOffset
+ 172 100.000 libexa.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+ 2164 100.000 libexa.so exaPrepareAccess
+167 2.6643 libexa.so exaWaitSync
+ 37265 99.5007 intel_drv.so I830EXASync
+ 167 0.4459 libexa.so exaWaitSync [self]
+ 11 0.0294 intel_drv.so I830Sync
+ 5 0.0134 intel_drv.so .plt
+ 4 0.0107 intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 6 1.4423 libexa.so exaPolyFillRect
+ 11 2.6442 libexa.so exaFillRegionSolid
+ 31 7.4519 libexa.so exaComposite
+ 368 88.4615 libexa.so exaTryDriverComposite
+148 2.3612 libexa.so exaGetOffscreenPixmap
+ 193 46.3942 libexa.so exaPixmapIsOffscreen
+ 148 35.5769 libexa.so exaGetOffscreenPixmap [self]
+ 43 10.3365 libexa.so exaGetDrawableDeltas
+ 16 3.8462 libexa.so __i686.get_pc_thunk.bx
+ 16 3.8462 libexa.so exaGetDrawablePixmap
+-------------------------------------------------------------------------------
+ 1 0.0923 libexa.so exaCopyNtoN
+ 5 0.4617 libexa.so exaRasterizeTrapezoid
+ 81 7.4792 libexa.so exaComposite
+ 996 91.9668 libexa.so exaGlyphs
+142 2.2655 libexa.so exaPixmapDirty
+ 921 84.4954 Xorg miUnion
+ 142 13.0275 libexa.so exaPixmapDirty [self]
+ 11 1.0092 Xorg __i686.get_pc_thunk.bx
+ 7 0.6422 Xorg .plt
+ 7 0.6422 libpixman.so.0.0.0 pixman_region_union
+ 2 0.1835 Xorg DamageRegion
+-------------------------------------------------------------------------------
+ 5 4.9505 libexa.so exaCopyNtoN
+ 5 4.9505 libexa.so exaMoveInPixmap
+ 24 23.7624 libexa.so exaTryDriverComposite
+ 67 66.3366 libexa.so exaDoMigration
+101 1.6114 libexa.so exaPixmapIsPinned
+ 101 100.000 libexa.so exaPixmapIsPinned [self]
+-------------------------------------------------------------------------------
+91 1.4518 libexa.so exaCopyNtoN
+ 91 34.7328 libexa.so exaCopyNtoN [self]
+ 80 30.5344 libexa.so exaDoMigration
+ 39 14.8855 libexa.so exaPixmapIsOffscreen
+ 20 7.6336 libexa.so exaGetDrawablePixmap
+ 14 5.3435 libexa.so exaGetDrawableDeltas
+ 5 1.9084 libexa.so __i686.get_pc_thunk.bx
+ 5 1.9084 libexa.so exaPixmapIsPinned
+ 4 1.5267 libexa.so __i686.get_pc_thunk.cx
+ 2 0.7634 intel_drv.so I830EXAPrepareCopy
+ 1 0.3817 libexa.so .plt
+ 1 0.3817 libexa.so exaPixmapDirty
+-------------------------------------------------------------------------------
+ 3 3.4483 libexa.so exaGlyphs
+ 5 5.7471 libexa.so exaPolyFillRect
+ 6 6.8966 libexa.so exaComposite
+ 14 16.0920 libexa.so exaCopyNtoN
+ 16 18.3908 libexa.so exaTryDriverComposite
+ 43 49.4253 libexa.so exaGetOffscreenPixmap
+89 1.4199 libexa.so exaGetDrawableDeltas
+ 89 100.000 libexa.so exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+ 2 2.6316 libexa.so exaDoMigration
+ 74 97.3684 libexa.so exaMoveInPixmap
+72 1.1487 libexa.so exaOffscreenAlloc
+ 72 94.7368 libexa.so exaOffscreenAlloc [self]
+ 4 5.2632 Xorg Xalloc
+-------------------------------------------------------------------------------
+ 643 100.000 libexa.so exaGlyphs
+60 0.9572 libexa.so exaCopyArea
+ 583 88.3333 libfb.so fbDoCopy
+ 60 9.0909 libexa.so exaCopyArea [self]
+ 9 1.3636 Xorg miSpriteSourceValidate
+ 5 0.7576 libfb.so .plt
+ 2 0.3030 libfb.so fbCopyRegion
+ 1 0.1515 libfb.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 46 100.000 libexa.so exaPolySegment
+33 0.5265 libexa.so exaPolyFillRect
+ 245 55.9361 libexa.so exaFillRegionSolid
+ 56 12.7854 Xorg miRectsToRegion
+ 37 8.4475 libpixman.so.0.0.0 pixman_region_fini
+ 33 7.5342 libexa.so exaPolyFillRect [self]
+ 18 4.1096 Xorg miRegionDestroy
+ 9 2.0548 Xorg miIntersect
+ 8 1.8265 intel_drv.so I830EXASolid
+ 7 1.5982 Xorg miTranslateRegion
+ 6 1.3699 libexa.so exaGetOffscreenPixmap
+ 5 1.1416 libexa.so exaGetDrawableDeltas
+ 4 0.9132 libexa.so exaGetDrawablePixmap
+ 3 0.6849 libexa.so .plt
+ 2 0.4566 Xorg __i686.get_pc_thunk.bx
+ 1 0.2283 libexa.so exaDoMigration
+ 1 0.2283 libexa.so __i686.get_pc_thunk.bx
+ 1 0.2283 libpixman.so.0.0.0 pixman_region_intersect
+ 1 0.2283 intel_drv.so I830EXAPrepareSolid
+ 1 0.2283 intel_drv.so I830EXADoneSolid
+-------------------------------------------------------------------------------
+ 31 100.000 libexa.so exaDestroyPixmap
+28 0.4467 libexa.so exaOffscreenFree
+ 28 87.5000 libexa.so exaOffscreenFree [self]
+ 3 9.3750 libexa.so ExaOffscreenMerge
+ 1 3.1250 Xorg Xfree
+-------------------------------------------------------------------------------
+ 1 3.7037 libexa.so exaTryDriverComposite
+ 8 29.6296 libexa.so exaGlyphs
+ 18 66.6667 libexa.so exaComposite
+27 0.4308 libexa.so exaOpReadsDestination
+ 27 100.000 libexa.so exaOpReadsDestination [self]
+-------------------------------------------------------------------------------
+ 92 100.000 libexa.so exaGlyphs
+24 0.3829 libexa.so exaCreatePixmap
+ 177 74.3697 libfb.so fbCreatePixmap
+ 24 10.0840 libexa.so exaCreatePixmap [self]
+ 23 9.6639 Xorg DamageCreate
+ 5 2.1008 Xorg DamageRegister
+ 4 1.6807 libfb.so fbCreatePixmapBpp
+ 2 0.8403 Xorg __i686.get_pc_thunk.bx
+ 1 0.4202 Xorg getDrawableDamageRef
+ 1 0.4202 Xorg DamageSetReportAfterOp
+ 1 0.4202 libfb.so __i686.get_pc_thunk.cx
+-------------------------------------------------------------------------------
+ 1 5.5556 libexa.so exaFillRegionSolid
+ 4 22.2222 libexa.so exaCopyNtoN
+ 13 72.2222 libexa.so exaTryDriverComposite
+18 0.2872 libexa.so __i686.get_pc_thunk.cx
+ 18 100.000 libexa.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaFillRegionSolid
+14 0.2234 libexa.so exaGetPixmapPitch
+ 14 100.000 libexa.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+13 0.2074 libexa.so exaDestroyPixmap
+ 31 46.9697 libexa.so exaOffscreenFree
+ 19 28.7879 libfb.so fbDestroyPixmap
+ 13 19.6970 libexa.so exaDestroyPixmap [self]
+ 3 4.5455 Xorg Xfree
+-------------------------------------------------------------------------------
+ 245 100.000 libexa.so exaPolyFillRect
+13 0.2074 libexa.so exaFillRegionSolid
+ 117 46.4286 libexa.so exaDoMigration
+ 52 20.6349 intel_drv.so I830EXASolid
+ 19 7.5397 libfb.so fbFillRegionSolid
+ 14 5.5556 intel_drv.so I830EXAPrepareSolid
+ 13 5.1587 libexa.so exaFillRegionSolid [self]
+ 11 4.3651 libexa.so exaGetOffscreenPixmap
+ 4 1.5873 intel_drv.so __i686.get_pc_thunk.bx
+ 4 1.5873 libexa.so ExaOffscreenMarkUsed
+ 4 1.5873 libexa.so exaGetDrawablePixmap
+ 4 1.5873 libexa.so .plt
+ 2 0.7937 libexa.so exaMarkSync
+ 2 0.7937 intel_drv.so .plt
+ 2 0.7937 libexa.so exaGetPixmapPitch
+ 1 0.3968 libexa.so exaMoveInPixmap
+ 1 0.3968 libexa.so exaGetPixmapOffset
+ 1 0.3968 libexa.so __i686.get_pc_thunk.cx
+ 1 0.3968 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+9 0.1436 libexa.so exaValidateGC
+ 69 79.3103 libfb.so fbValidateGC
+ 9 10.3448 libexa.so exaValidateGC [self]
+ 4 4.5977 libfb.so __i686.get_pc_thunk.cx
+ 3 3.4483 libfb.so fbGetGCPrivateIndex
+ 2 2.2989 Xorg miComputeCompositeClip
+-------------------------------------------------------------------------------
+8 0.1276 libexa.so exaRasterizeTrapezoid
+ 8364 84.9482 libfb.so fbRasterizeTrapezoid
+ 1459 14.8182 libexa.so exaPrepareAccess
+ 8 0.0813 libexa.so exaRasterizeTrapezoid [self]
+ 5 0.0508 libexa.so exaPixmapDirty
+ 2 0.0203 libexa.so __i686.get_pc_thunk.bx
+ 2 0.0203 libexa.so exaFinishAccess
+ 2 0.0203 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 2 0.0203 libfb.so .plt
+ 1 0.0102 libexa.so .plt
+ 1 0.0102 libpixman.so.0.0.0 pixman_image_unref
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaRasterizeTrapezoid
+3 0.0479 libexa.so exaFinishAccess
+ 3 100.000 libexa.so exaFinishAccess [self]
+-------------------------------------------------------------------------------
+2 0.0319 libexa.so exaPolySegment
+ 46 93.8776 libexa.so exaPolyFillRect
+ 2 4.0816 libexa.so exaPolySegment [self]
+ 1 2.0408 libexa.so .plt
+-------------------------------------------------------------------------------
+ 707 32.6408 libexa.so ExaCheckComposite
+ 1459 67.3592 libexa.so exaRasterizeTrapezoid
+1 0.0160 libexa.so exaPrepareAccess
+ 2164 99.9077 libexa.so exaWaitSync
+ 1 0.0462 libexa.so exaPixmapIsOffscreen
+ 1 0.0462 libexa.so exaPrepareAccess [self]
+-------------------------------------------------------------------------------
+ 1 1.1628 libexa.so ExaOffscreenMerge
+ 7 8.1395 libexa.so exaPixmapDirty
+ 78 90.6977 libexa.so exaTryDriverComposite
+0 0 Xorg .plt
+ 0 0 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 15 100.000 libexa.so exaGlyphs
+0 0 Xorg CreatePicture
+ 0 0 Xorg CreatePicture [self]
+-------------------------------------------------------------------------------
+ 3 11.5385 libexa.so exaGlyphs
+ 23 88.4615 libexa.so exaCreatePixmap
+0 0 Xorg DamageCreate
+ 0 0 Xorg DamageCreate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaMoveInPixmap
+0 0 Xorg DamageEmpty
+ 0 0 Xorg DamageEmpty [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaPixmapDirty
+0 0 Xorg DamageRegion
+ 0 0 Xorg DamageRegion [self]
+-------------------------------------------------------------------------------
+ 2 28.5714 libexa.so exaGlyphs
+ 5 71.4286 libexa.so exaCreatePixmap
+0 0 Xorg DamageRegister
+ 0 0 Xorg DamageRegister [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaCreatePixmap
+0 0 Xorg DamageSetReportAfterOp
+ 0 0 Xorg DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 45 100.000 libexa.so exaGlyphs
+0 0 Xorg FreePicture
+ 0 0 Xorg FreePicture [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaGlyphs
+0 0 Xorg FreeScratchGC
+ 0 0 Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaGlyphs
+0 0 Xorg FreeScratchPixmapHeader
+ 0 0 Xorg FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libexa.so exaGlyphs
+0 0 Xorg GetScratchGC
+ 0 0 Xorg GetScratchGC [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libexa.so exaGlyphs
+0 0 Xorg GetScratchPixmapHeader
+ 0 0 Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so exaGlyphs
+0 0 Xorg ValidateGC
+ 0 0 Xorg ValidateGC [self]
+-------------------------------------------------------------------------------
+ 10 100.000 libexa.so exaGlyphs
+0 0 Xorg ValidatePicture
+ 0 0 Xorg ValidatePicture [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libexa.so exaMoveInPixmap
+ 4 80.0000 libexa.so exaOffscreenAlloc
+0 0 Xorg Xalloc
+ 0 0 Xorg Xalloc [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 libexa.so exaOffscreenFree
+ 2 33.3333 libexa.so ExaOffscreenMerge
+ 3 50.0000 libexa.so exaDestroyPixmap
+0 0 Xorg Xfree
+ 0 0 Xorg Xfree [self]
+-------------------------------------------------------------------------------
+ 2 6.6667 libexa.so exaCreatePixmap
+ 2 6.6667 libexa.so exaPolyFillRect
+ 2 6.6667 libexa.so exaMoveInPixmap
+ 5 16.6667 libexa.so exaGlyphs
+ 8 26.6667 libexa.so exaTryDriverComposite
+ 11 36.6667 libexa.so exaPixmapDirty
+0 0 Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaGlyphs
+0 0 Xorg damageInsertDamage
+ 0 0 Xorg damageInsertDamage [self]
+-------------------------------------------------------------------------------
+ 31 100.000 libexa.so exaGlyphs
+0 0 Xorg damagePolyFillRect
+ 0 0 Xorg damagePolyFillRect [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaCreatePixmap
+0 0 Xorg getDrawableDamageRef
+ 0 0 Xorg getDrawableDamageRef [self]
+-------------------------------------------------------------------------------
+ 17 100.000 libexa.so exaTryDriverComposite
+0 0 Xorg miCompositeSourceValidate
+ 0 0 Xorg miCompositeSourceValidate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaValidateGC
+0 0 Xorg miComputeCompositeClip
+ 0 0 Xorg miComputeCompositeClip [self]
+-------------------------------------------------------------------------------
+ 15 1.3251 libexa.so exaComposite
+ 1117 98.6749 libexa.so exaTryDriverComposite
+0 0 Xorg miComputeCompositeRegion
+ 0 0 Xorg miComputeCompositeRegion [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so exaGlyphs
+0 0 Xorg miDestroyPicture
+ 0 0 Xorg miDestroyPicture [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaGlyphs
+0 0 Xorg miDestroyPictureClip
+ 0 0 Xorg miDestroyPictureClip [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libexa.so exaGlyphs
+0 0 Xorg miGlyphExtents
+ 0 0 Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miIntersect
+ 0 0 Xorg miIntersect [self]
+-------------------------------------------------------------------------------
+ 104 100.000 libexa.so exaGlyphs
+0 0 Xorg miModifyPixmapHeader
+ 0 0 Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 56 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miRectsToRegion
+ 0 0 Xorg miRectsToRegion [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miRegionDestroy
+ 0 0 Xorg miRegionDestroy [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libexa.so exaCopyArea
+0 0 Xorg miSpriteSourceValidate
+ 0 0 Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miTranslateRegion
+ 0 0 Xorg miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 1 0.1066 libexa.so exaDoMigration
+ 3 0.3198 libexa.so exaGlyphs
+ 4 0.4264 libexa.so exaComposite
+ 9 0.9595 libexa.so exaMoveInPixmap
+ 921 98.1876 libexa.so exaPixmapDirty
+0 0 Xorg miUnion
+ 0 0 Xorg miUnion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaTryDriverComposite
+0 0 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) (no symbols)
+ 0 0 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 2.1739 libexa.so exaFillRegionSolid
+ 5 5.4348 libexa.so exaWaitSync
+ 85 92.3913 libexa.so exaTryDriverComposite
+0 0 intel_drv.so .plt
+ 0 0 intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaPolyFillRect
+0 0 intel_drv.so I830EXADoneSolid
+ 0 0 intel_drv.so I830EXADoneSolid [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaCopyNtoN
+0 0 intel_drv.so I830EXAPrepareCopy
+ 0 0 intel_drv.so I830EXAPrepareCopy [self]
+-------------------------------------------------------------------------------
+ 1 6.6667 libexa.so exaPolyFillRect
+ 14 93.3333 libexa.so exaFillRegionSolid
+0 0 intel_drv.so I830EXAPrepareSolid
+ 0 0 intel_drv.so I830EXAPrepareSolid [self]
+-------------------------------------------------------------------------------
+ 8 13.3333 libexa.so exaPolyFillRect
+ 52 86.6667 libexa.so exaFillRegionSolid
+0 0 intel_drv.so I830EXASolid
+ 0 0 intel_drv.so I830EXASolid [self]
+-------------------------------------------------------------------------------
+ 37265 100.000 libexa.so exaWaitSync
+0 0 intel_drv.so I830EXASync
+ 0 0 intel_drv.so I830EXASync [self]
+-------------------------------------------------------------------------------
+ 11 100.000 libexa.so exaWaitSync
+0 0 intel_drv.so I830Sync
+ 0 0 intel_drv.so I830Sync [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so IntelEmitInvarientState
+ 0 0 intel_drv.so IntelEmitInvarientState [self]
+-------------------------------------------------------------------------------
+ 4 10.2564 libexa.so exaWaitSync
+ 4 10.2564 libexa.so exaFillRegionSolid
+ 6 15.3846 libexa.so exaComposite
+ 25 64.1026 libexa.so exaTryDriverComposite
+0 0 intel_drv.so __i686.get_pc_thunk.bx
+ 0 0 intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 39 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i830WaitSync
+ 0 0 intel_drv.so i830WaitSync [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libexa.so exaComposite
+0 0 intel_drv.so i830_done_composite
+ 0 0 intel_drv.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i830_get_transformed_coordinates
+ 0 0 intel_drv.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+ 11 3.8194 libexa.so exaGlyphs
+ 114 39.5833 libexa.so exaComposite
+ 163 56.5972 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_check_composite
+ 0 0 intel_drv.so i965_check_composite [self]
+-------------------------------------------------------------------------------
+ 8 42.1053 libexa.so exaComposite
+ 11 57.8947 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_check_composite_texture
+ 0 0 intel_drv.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+ 459 12.9332 libexa.so exaComposite
+ 3090 87.0668 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_composite
+ 0 0 intel_drv.so i965_composite [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_get_card_format
+ 0 0 intel_drv.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+ 9 37.5000 libexa.so exaComposite
+ 15 62.5000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_get_dest_format
+ 0 0 intel_drv.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+ 8 0.0177 libexa.so exaComposite
+ 45208 99.9823 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_prepare_composite
+ 0 0 intel_drv.so i965_prepare_composite [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so intel_get_pixmap_offset
+ 0 0 intel_drv.so intel_get_pixmap_offset [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so intel_get_pixmap_pitch
+ 0 0 intel_drv.so intel_get_pixmap_pitch [self]
+-------------------------------------------------------------------------------
+ 15 100.000 libexa.so exaTryDriverComposite
+0 0 libc-2.5.so memcpy
+ 0 0 libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 4234 100.000 libexa.so exaComposite
+0 0 libexa.so ExaCheckComposite
+ 3528 83.3058 libfb.so fbComposite
+ 707 16.6942 libexa.so exaPrepareAccess
+ 0 0 libexa.so ExaCheckComposite [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so exaOffscreenFree
+0 0 libexa.so ExaOffscreenMerge
+ 2 66.6667 Xorg Xfree
+ 1 33.3333 Xorg .plt
+ 0 0 libexa.so ExaOffscreenMerge [self]
+-------------------------------------------------------------------------------
+ 69 100.000 libexa.so exaGlyphs
+0 0 libextmod.so XvDestroyPixmap
+ 0 0 libextmod.so XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 28.5714 libexa.so exaRasterizeTrapezoid
+ 5 71.4286 libexa.so exaCopyArea
+0 0 libfb.so .plt
+ 0 0 libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaCopyArea
+0 0 libfb.so __i686.get_pc_thunk.bx
+ 0 0 libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libexa.so exaCreatePixmap
+ 4 80.0000 libexa.so exaValidateGC
+0 0 libfb.so __i686.get_pc_thunk.cx
+ 0 0 libfb.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 3528 100.000 libexa.so ExaCheckComposite
+0 0 libfb.so fbComposite
+ 0 0 libfb.so fbComposite [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaCopyArea
+0 0 libfb.so fbCopyRegion
+ 0 0 libfb.so fbCopyRegion [self]
+-------------------------------------------------------------------------------
+ 1 0.5618 libexa.so exaGlyphs
+ 177 99.4382 libexa.so exaCreatePixmap
+0 0 libfb.so fbCreatePixmap
+ 0 0 libfb.so fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so exaCreatePixmap
+0 0 libfb.so fbCreatePixmapBpp
+ 0 0 libfb.so fbCreatePixmapBpp [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libexa.so exaDestroyPixmap
+0 0 libfb.so fbDestroyPixmap
+ 0 0 libfb.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 7 1.1864 libexa.so exaGlyphs
+ 583 98.8136 libexa.so exaCopyArea
+0 0 libfb.so fbDoCopy
+ 0 0 libfb.so fbDoCopy [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libexa.so exaFillRegionSolid
+0 0 libfb.so fbFillRegionSolid
+ 0 0 libfb.so fbFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so exaValidateGC
+0 0 libfb.so fbGetGCPrivateIndex
+ 0 0 libfb.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 8364 100.000 libexa.so exaRasterizeTrapezoid
+0 0 libfb.so fbRasterizeTrapezoid
+ 0 0 libfb.so fbRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 69 100.000 libexa.so exaValidateGC
+0 0 libfb.so fbValidateGC
+ 0 0 libfb.so fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 pixman_image_unref
+ 0 0 libpixman.so.0.0.0 pixman_image_unref [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 0 0 libpixman.so.0.0.0 pixman_rasterize_trapezoid [self]
+-------------------------------------------------------------------------------
+ 37 100.000 libexa.so exaPolyFillRect
+0 0 libpixman.so.0.0.0 pixman_region_fini
+ 0 0 libpixman.so.0.0.0 pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaPolyFillRect
+0 0 libpixman.so.0.0.0 pixman_region_intersect
+ 0 0 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 14 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 62 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 libexa.so exaMoveInPixmap
+ 7 87.5000 libexa.so exaPixmapDirty
+0 0 libpixman.so.0.0.0 pixman_region_union
+ 0 0 libpixman.so.0.0.0 pixman_region_union [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+959 15.2999 ExaOffscreenMarkUsed
+691 11.0243 exaMarkSync
+617 9.8437 exaComposite
+563 8.9821 exaPixmapIsOffscreen
+559 8.9183 exaTryDriverComposite
+423 6.7486 exaGlyphs
+275 4.3874 exaMoveInPixmap
+261 4.1640 exaGetDrawablePixmap
+258 4.1161 .plt
+252 4.0204 exaDoMigration
+175 2.7920 __i686.get_pc_thunk.bx
+172 2.7441 exaGetPixmapOffset
+167 2.6643 exaWaitSync
+148 2.3612 exaGetOffscreenPixmap
+142 2.2655 exaPixmapDirty
+101 1.6114 exaPixmapIsPinned
+91 1.4518 exaCopyNtoN
+89 1.4199 exaGetDrawableDeltas
+72 1.1487 exaOffscreenAlloc
+60 0.9572 exaCopyArea
+33 0.5265 exaPolyFillRect
+28 0.4467 exaOffscreenFree
+27 0.4308 exaOpReadsDestination
+24 0.3829 exaCreatePixmap
+18 0.2872 __i686.get_pc_thunk.cx
+14 0.2234 exaGetPixmapPitch
+13 0.2074 exaDestroyPixmap
+13 0.2074 exaFillRegionSolid
+9 0.1436 exaValidateGC
+8 0.1276 exaRasterizeTrapezoid
+3 0.0479 exaFinishAccess
+2 0.0319 exaPolySegment
+1 0.0160 exaPrepareAccess
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 8265 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+7975 63.0235 libpixman.so.0.0.0 pixman_rasterize_edges
+ 7975 96.4912 libpixman.so.0.0.0 pixman_rasterize_edges [self]
+ 290 3.5088 libc-2.5.so memset
+-------------------------------------------------------------------------------
+ 1714 100.000 libpixman.so.0.0.0 pixman_composite_rect_general
+1714 13.5451 libpixman.so.0.0.0 fbCombineInU
+ 1714 100.000 libpixman.so.0.0.0 fbCombineInU [self]
+-------------------------------------------------------------------------------
+ 1245 100.000 libpixman.so.0.0.0 fbFetch
+1245 9.8388 libpixman.so.0.0.0 fbFetch_a1
+ 1245 100.000 libpixman.so.0.0.0 fbFetch_a1 [self]
+-------------------------------------------------------------------------------
+ 531 100.000 libpixman.so.0.0.0 pixman_composite_rect_general
+531 4.1963 libpixman.so.0.0.0 mmxCombineOverU
+ 531 100.000 libpixman.so.0.0.0 mmxCombineOverU [self]
+-------------------------------------------------------------------------------
+ 700 100.000 libpixman.so.0.0.0 pixman_region_union
+347 2.7422 libpixman.so.0.0.0 pixman_op
+ 347 49.0113 libpixman.so.0.0.0 pixman_op [self]
+ 159 22.4576 libpixman.so.0.0.0 pixman_rect_alloc
+ 68 9.6045 libc-2.5.so free
+ 63 8.8983 libpixman.so.0.0.0 pixman_region_unionO
+ 37 5.2260 libc-2.5.so memmove
+ 23 3.2486 libc-2.5.so malloc
+ 4 0.5650 libc-2.5.so _int_free
+ 3 0.4237 libc-2.5.so __i686.get_pc_thunk.bx
+ 2 0.2825 libpixman.so.0.0.0 .plt
+ 2 0.2825 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+160 1.2644 libpixman.so.0.0.0 pixman_region_union
+ 700 77.9510 libpixman.so.0.0.0 pixman_op
+ 160 17.8174 libpixman.so.0.0.0 pixman_region_union [self]
+ 13 1.4477 libpixman.so.0.0.0 pixman_region_copy
+ 11 1.2249 libc-2.5.so memmove
+ 6 0.6682 libc-2.5.so free
+ 5 0.5568 libpixman.so.0.0.0 pixman_region_unionO
+ 2 0.2227 libpixman.so.0.0.0 pixman_rect_alloc
+ 1 0.1114 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+143 1.1301 libpixman.so.0.0.0 pixman_region_rectangles
+ 143 100.000 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+70 0.5532 libpixman.so.0.0.0 pixman_region_n_rects
+ 70 100.000 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 5 7.3529 libpixman.so.0.0.0 pixman_region_union
+ 63 92.6471 libpixman.so.0.0.0 pixman_op
+68 0.5374 libpixman.so.0.0.0 pixman_region_unionO
+ 68 100.000 libpixman.so.0.0.0 pixman_region_unionO [self]
+-------------------------------------------------------------------------------
+60 0.4742 libpixman.so.0.0.0 pixman_region_intersect
+ 60 100.000 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 libpixman.so.0.0.0 pixman_image_unref
+ 3 60.0000 libpixman.so.0.0.0 pixman_image_create_bits
+55 0.4346 libpixman.so.0.0.0 pixman_region_fini
+ 55 98.2143 libpixman.so.0.0.0 pixman_region_fini [self]
+ 1 1.7857 libc-2.5.so _int_free
+-------------------------------------------------------------------------------
+ 2 1.2422 libpixman.so.0.0.0 pixman_region_union
+ 159 98.7578 libpixman.so.0.0.0 pixman_op
+39 0.3082 libpixman.so.0.0.0 pixman_rect_alloc
+ 110 68.3230 libc-2.5.so malloc
+ 39 24.2236 libpixman.so.0.0.0 pixman_rect_alloc [self]
+ 7 4.3478 libc-2.5.so _int_malloc
+ 5 3.1056 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+32 0.2529 libpixman.so.0.0.0 pixman_region_not_empty
+ 32 100.000 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libpixman.so.0.0.0 pixman_region_union
+ 1 25.0000 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 2 50.0000 libpixman.so.0.0.0 pixman_op
+26 0.2055 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 26 100.000 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libpixman.so.0.0.0 pixman_region_union
+22 0.1739 libpixman.so.0.0.0 pixman_region_copy
+ 22 95.6522 libpixman.so.0.0.0 pixman_region_copy [self]
+ 1 4.3478 libc-2.5.so free
+-------------------------------------------------------------------------------
+ 1264 100.000 libpixman.so.0.0.0 pixman_composite_rect_general
+19 0.1502 libpixman.so.0.0.0 fbFetch
+ 1245 98.4968 libpixman.so.0.0.0 fbFetch_a1
+ 19 1.5032 libpixman.so.0.0.0 fbFetch [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libpixman.so.0.0.0 allocate_image
+19 0.1502 libpixman.so.0.0.0 pixman_region_init
+ 19 100.000 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 3526 100.000 libpixman.so.0.0.0 pixman_image_composite_rect
+17 0.1343 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1714 48.5965 libpixman.so.0.0.0 fbCombineInU
+ 1264 35.8378 libpixman.so.0.0.0 fbFetch
+ 531 15.0553 libpixman.so.0.0.0 mmxCombineOverU
+ 17 0.4820 libpixman.so.0.0.0 pixman_composite_rect_general [self]
+ 1 0.0284 libpixman.so.0.0.0 fbFetchSolid
+-------------------------------------------------------------------------------
+ 1 8.3333 libpixman.so.0.0.0 pixman_edge_init
+ 3 25.0000 libpixman.so.0.0.0 pixman_edge_step
+ 8 66.6667 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+12 0.0948 libpixman.so.0.0.0 __divdi3
+ 12 100.000 libpixman.so.0.0.0 __divdi3 [self]
+-------------------------------------------------------------------------------
+11 0.0869 libpixman.so.0.0.0 pixman_region_translate
+ 11 100.000 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 2 40.0000 libpixman.so.0.0.0 pixman_op
+ 2 40.0000 libpixman.so.0.0.0 pixman_image_create_bits
+10 0.0790 libpixman.so.0.0.0 .plt
+ 10 100.000 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libpixman.so.0.0.0 pixman_edge_init
+10 0.0790 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 10 55.5556 libpixman.so.0.0.0 _pixman_edge_tMultiInit [self]
+ 8 44.4444 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+ 35 100.000 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+9 0.0711 libpixman.so.0.0.0 pixman_edge_init
+ 18 51.4286 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 9 25.7143 libpixman.so.0.0.0 pixman_edge_init [self]
+ 7 20.0000 libpixman.so.0.0.0 pixman_edge_step
+ 1 2.8571 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+ 45 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+9 0.0711 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 35 76.0870 libpixman.so.0.0.0 pixman_edge_init
+ 9 19.5652 libpixman.so.0.0.0 pixman_line_fixed_edge_init [self]
+ 1 2.1739 libpixman.so.0.0.0 .plt
+ 1 2.1739 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 7 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+9 0.0711 libpixman.so.0.0.0 pixman_sample_floor_y
+ 9 100.000 libpixman.so.0.0.0 pixman_sample_floor_y [self]
+-------------------------------------------------------------------------------
+8 0.0632 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 8265 99.2197 libpixman.so.0.0.0 pixman_rasterize_edges
+ 45 0.5402 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 8 0.0960 libpixman.so.0.0.0 pixman_rasterize_trapezoid [self]
+ 7 0.0840 libpixman.so.0.0.0 pixman_sample_floor_y
+ 4 0.0480 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 1 0.0120 libc-2.5.so memset
+-------------------------------------------------------------------------------
+6 0.0474 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 6 100.000 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+5 0.0395 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 5 100.000 libpixman.so.0.0.0 pixman_sample_ceil_y [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libpixman.so.0.0.0 pixman_edge_init
+4 0.0316 libpixman.so.0.0.0 pixman_edge_step
+ 4 57.1429 libpixman.so.0.0.0 pixman_edge_step [self]
+ 3 42.8571 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+4 0.0316 libpixman.so.0.0.0 pixman_image_create_bits
+ 6 33.3333 libpixman.so.0.0.0 allocate_image
+ 4 22.2222 libpixman.so.0.0.0 pixman_image_create_bits [self]
+ 3 16.6667 libpixman.so.0.0.0 pixman_region_fini
+ 3 16.6667 libpixman.so.0.0.0 reset_clip_region
+ 2 11.1111 libpixman.so.0.0.0 .plt
+-------------------------------------------------------------------------------
+ 6 100.000 libpixman.so.0.0.0 pixman_image_create_bits
+3 0.0237 libpixman.so.0.0.0 allocate_image
+ 3 50.0000 libpixman.so.0.0.0 pixman_region_init
+ 3 50.0000 libpixman.so.0.0.0 allocate_image [self]
+-------------------------------------------------------------------------------
+3 0.0237 libpixman.so.0.0.0 pixman_image_unref
+ 3 60.0000 libpixman.so.0.0.0 pixman_image_unref [self]
+ 2 40.0000 libpixman.so.0.0.0 pixman_region_fini
+-------------------------------------------------------------------------------
+ 3 100.000 libpixman.so.0.0.0 pixman_image_create_bits
+3 0.0237 libpixman.so.0.0.0 reset_clip_region
+ 3 100.000 libpixman.so.0.0.0 reset_clip_region [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_composite_rect_general
+1 0.0079 libpixman.so.0.0.0 fbFetchSolid
+ 1 100.000 libpixman.so.0.0.0 fbFetchSolid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_image_composite
+1 0.0079 libpixman.so.0.0.0 pixman_compute_composite_region
+ 1 100.000 libpixman.so.0.0.0 pixman_compute_composite_region [self]
+-------------------------------------------------------------------------------
+ 3527 100.000 libpixman.so.0.0.0 pixman_image_composite
+1 0.0079 libpixman.so.0.0.0 pixman_image_composite_rect
+ 3526 99.9716 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1 0.0284 libpixman.so.0.0.0 pixman_image_composite_rect [self]
+-------------------------------------------------------------------------------
+1 0.0079 libpixman.so.0.0.0 pixman_image_set_clip_region
+ 1 100.000 libpixman.so.0.0.0 pixman_image_set_clip_region [self]
+-------------------------------------------------------------------------------
+1 0.0079 libpixman.so.0.0.0 pixman_image_set_component_alpha
+ 1 100.000 libpixman.so.0.0.0 pixman_image_set_component_alpha [self]
+-------------------------------------------------------------------------------
+1 0.0079 libpixman.so.0.0.0 pixman_image_set_repeat
+ 1 100.000 libpixman.so.0.0.0 pixman_image_set_repeat [self]
+-------------------------------------------------------------------------------
+ 3 37.5000 libpixman.so.0.0.0 pixman_op
+ 5 62.5000 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libpixman.so.0.0.0 pixman_region_fini
+ 4 80.0000 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so _int_free
+ 0 0 libc-2.5.so _int_free [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 1.3333 libpixman.so.0.0.0 pixman_region_copy
+ 6 8.0000 libpixman.so.0.0.0 pixman_region_union
+ 68 90.6667 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so free
+ 0 0 libc-2.5.so free [self]
+-------------------------------------------------------------------------------
+ 23 17.2932 libpixman.so.0.0.0 pixman_op
+ 110 82.7068 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so malloc
+ 0 0 libc-2.5.so malloc [self]
+-------------------------------------------------------------------------------
+ 11 22.9167 libpixman.so.0.0.0 pixman_region_union
+ 37 77.0833 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so memmove
+ 0 0 libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 1 0.3436 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 290 99.6564 libpixman.so.0.0.0 pixman_rasterize_edges
+0 0 libc-2.5.so memset
+ 0 0 libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+0 0 libpixman.so.0.0.0 pixman_image_composite
+ 3527 99.9717 libpixman.so.0.0.0 pixman_image_composite_rect
+ 1 0.0283 libpixman.so.0.0.0 pixman_compute_composite_region
+ 0 0 libpixman.so.0.0.0 pixman_image_composite [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+7975 63.0235 pixman_rasterize_edges
+1714 13.5451 fbCombineInU
+1245 9.8388 fbFetch_a1
+531 4.1963 mmxCombineOverU
+347 2.7422 pixman_op
+160 1.2644 pixman_region_union
+143 1.1301 pixman_region_rectangles
+70 0.5532 pixman_region_n_rects
+68 0.5374 pixman_region_unionO
+60 0.4742 pixman_region_intersect
+55 0.4346 pixman_region_fini
+39 0.3082 pixman_rect_alloc
+32 0.2529 pixman_region_not_empty
+26 0.2055 __i686.get_pc_thunk.bx
+22 0.1739 pixman_region_copy
+19 0.1502 fbFetch
+19 0.1502 pixman_region_init
+17 0.1343 pixman_composite_rect_general
+12 0.0948 __divdi3
+11 0.0869 pixman_region_translate
+10 0.0790 .plt
+10 0.0790 _pixman_edge_tMultiInit
+9 0.0711 pixman_edge_init
+9 0.0711 pixman_line_fixed_edge_init
+9 0.0711 pixman_sample_floor_y
+8 0.0632 pixman_rasterize_trapezoid
+6 0.0474 pixman_region_init_with_extents
+5 0.0395 pixman_sample_ceil_y
+4 0.0316 pixman_edge_step
+4 0.0316 pixman_image_create_bits
+3 0.0237 allocate_image
+3 0.0237 pixman_image_unref
+3 0.0237 reset_clip_region
+1 0.0079 fbFetchSolid
+1 0.0079 pixman_compute_composite_region
+1 0.0079 pixman_image_composite_rect
+1 0.0079 pixman_image_set_clip_region
+1 0.0079 pixman_image_set_component_alpha
+1 0.0079 pixman_image_set_repeat
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name app name symbol name
+-------------------------------------------------------------------------------
+ 8 0.0220 intel_drv.so intel_drv.so I830EXASync
+ 36397 99.9780 intel_drv.so intel_drv.so I830Sync
+19660 13.8546 intel_drv.so intel_drv.so I830WaitLpRing
+ 19660 53.9976 intel_drv.so intel_drv.so I830WaitLpRing [self]
+ 14583 40.0533 libc-2.5.so intel_drv.so gettimeofday
+ 1932 5.3064 Xorg intel_drv.so GetTimeInMillis
+ 122 0.3351 Xorg intel_drv.so .plt
+ 111 0.3049 Xorg intel_drv.so __i686.get_pc_thunk.bx
+ 1 0.0027 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) intel_drv.so (no symbols)
+-------------------------------------------------------------------------------
+17904 12.6172 libxul.so libxul.so (no symbols)
+ 17904 100.000 libxul.so libxul.so (no symbols) [self]
+-------------------------------------------------------------------------------
+15478 10.9075 vmlinux vmlinux system_call
+ 15478 100.000 vmlinux vmlinux system_call [self]
+-------------------------------------------------------------------------------
+14590 10.2817 libc-2.5.so libc-2.5.so gettimeofday
+ 14590 100.000 libc-2.5.so libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 8265 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+7975 5.6201 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+ 7975 96.4912 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges [self]
+ 290 3.5088 libc-2.5.so libpixman.so.0.0.0 memset
+-------------------------------------------------------------------------------
+6626 4.6694 oprofiled oprofiled (no symbols)
+ 6626 100.000 oprofiled oprofiled (no symbols) [self]
+-------------------------------------------------------------------------------
+6287 4.4305 intel_drv.so intel_drv.so i965_prepare_composite
+ 35335 78.1402 intel_drv.so intel_drv.so i830WaitSync
+ 6287 13.9031 intel_drv.so intel_drv.so i965_prepare_composite [self]
+ 2907 6.4286 libc-2.5.so intel_drv.so memcpy
+ 280 0.6192 intel_drv.so intel_drv.so intel_get_pixmap_offset
+ 113 0.2499 intel_drv.so intel_drv.so IntelEmitInvarientState
+ 95 0.2101 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+ 55 0.1216 intel_drv.so intel_drv.so .plt
+ 52 0.1150 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 20 0.0442 libdri.so intel_drv.so __i686.get_pc_thunk.cx
+ 19 0.0420 libdri.so intel_drv.so DRIGetSAREAPrivate
+ 15 0.0332 intel_drv.so intel_drv.so i965_get_card_format
+ 15 0.0332 libexa.so intel_drv.so exaGetPixmapOffset
+ 10 0.0221 libdri.so intel_drv.so DRIGetContext
+ 7 0.0155 libexa.so intel_drv.so exaWaitSync
+ 5 0.0111 intel_drv.so intel_drv.so i965_get_dest_format
+ 5 0.0111 libexa.so intel_drv.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+5779 4.0725 vmlinux vmlinux do_gettimeofday
+ 5779 100.000 vmlinux vmlinux do_gettimeofday [self]
+-------------------------------------------------------------------------------
+ 3 3.1579 libc-2.5.so libc-2.5.so _int_realloc
+ 92 96.8421 libc-2.5.so libc-2.5.so msort_with_tmp
+4545 3.2029 libc-2.5.so libc-2.5.so memcpy
+ 4545 100.000 libc-2.5.so libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+2750 1.9380 vmlinux vmlinux read_tsc
+ 2750 100.000 vmlinux vmlinux read_tsc [self]
+-------------------------------------------------------------------------------
+2614 1.8421 intel_drv.so intel_drv.so i965_composite
+ 2614 73.6546 intel_drv.so intel_drv.so i965_composite [self]
+ 719 20.2592 intel_drv.so intel_drv.so i830MarkSync
+ 93 2.6205 intel_drv.so intel_drv.so i830_get_transformed_coordinates
+ 60 1.6906 intel_drv.so intel_drv.so i830WaitSync
+ 36 1.0144 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 13 0.3663 libexa.so intel_drv.so exaMarkSync
+ 9 0.2536 intel_drv.so intel_drv.so .plt
+ 5 0.1409 libexa.so intel_drv.so exaWaitSync
+-------------------------------------------------------------------------------
+2596 1.8294 vmlinux vmlinux __copy_to_user_ll
+ 2596 100.000 vmlinux vmlinux __copy_to_user_ll [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg Dispatch
+2118 1.4926 Xorg Xorg GetTimeInMillis
+ 2118 100.000 Xorg Xorg GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+ 1714 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+1714 1.2079 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+ 1714 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU [self]
+-------------------------------------------------------------------------------
+1383 0.9746 oprofile.ko oprofile sync_buffer
+ 1383 100.000 oprofile.ko oprofile sync_buffer [self]
+-------------------------------------------------------------------------------
+ 1245 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+1245 0.8774 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1
+ 1245 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1 [self]
+-------------------------------------------------------------------------------
+1225 0.8633 vmlinux vmlinux restore_nocheck
+ 1225 100.000 vmlinux vmlinux restore_nocheck [self]
+-------------------------------------------------------------------------------
+ 4 0.4171 libexa.so libexa.so exaFillRegionSolid
+ 12 1.2513 libexa.so libexa.so exaTryDriverComposite
+ 943 98.3316 libexa.so libexa.so exaDoMigration
+959 0.6758 libexa.so libexa.so ExaOffscreenMarkUsed
+ 959 100.000 libexa.so libexa.so ExaOffscreenMarkUsed [self]
+-------------------------------------------------------------------------------
+691 0.4870 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols)
+ 691 100.000 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 2.6316 libexa.so libexa.so exaFillRegionSolid
+ 12 15.7895 libexa.so libexa.so exaComposite
+ 62 81.5789 libexa.so libexa.so exaTryDriverComposite
+691 0.4870 libexa.so libexa.so exaMarkSync
+ 691 100.000 libexa.so libexa.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+631 0.4447 vmlinux vmlinux find_vma
+ 631 100.000 vmlinux vmlinux find_vma [self]
+-------------------------------------------------------------------------------
+ 47348 47.3907 libexa.so libexa.so exaComposite
+ 52562 52.6093 libexa.so libexa.so exaGlyphs
+617 0.4348 libexa.so libexa.so exaComposite
+ 53032 49.9242 libexa.so libexa.so exaTryDriverComposite
+ 47348 44.5733 libexa.so libexa.so exaComposite
+ 4234 3.9859 libexa.so libexa.so ExaCheckComposite
+ 617 0.5808 libexa.so libexa.so exaComposite [self]
+ 459 0.4321 intel_drv.so libexa.so i965_composite
+ 114 0.1073 intel_drv.so libexa.so i965_check_composite
+ 101 0.0951 libexa.so libexa.so exaGetDrawablePixmap
+ 88 0.0828 libexa.so libexa.so .plt
+ 81 0.0763 libexa.so libexa.so exaPixmapDirty
+ 31 0.0292 libexa.so libexa.so exaGetOffscreenPixmap
+ 18 0.0169 libexa.so libexa.so exaOpReadsDestination
+ 15 0.0141 Xorg libexa.so miComputeCompositeRegion
+ 13 0.0122 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 13 0.0122 intel_drv.so libexa.so i830_done_composite
+ 12 0.0113 libexa.so libexa.so exaMarkSync
+ 9 0.0085 intel_drv.so libexa.so i965_get_dest_format
+ 8 0.0075 intel_drv.so libexa.so i965_check_composite_texture
+ 8 0.0075 intel_drv.so libexa.so i965_prepare_composite
+ 8 0.0075 libexa.so libexa.so exaDoMigration
+ 6 0.0056 libexa.so libexa.so exaGetDrawableDeltas
+ 6 0.0056 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 4 0.0038 Xorg libexa.so miUnion
+-------------------------------------------------------------------------------
+611 0.4306 vmlinux vmlinux syscall_exit
+ 611 100.000 vmlinux vmlinux syscall_exit [self]
+-------------------------------------------------------------------------------
+ 1 4.5455 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 1 4.5455 libc-2.5.so libc-2.5.so strdup
+ 3 13.6364 libc-2.5.so libc-2.5.so realloc
+ 3 13.6364 libc-2.5.so libc-2.5.so __fopen_internal
+ 14 63.6364 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+593 0.4179 libc-2.5.so libc-2.5.so malloc
+ 593 48.9274 libc-2.5.so libc-2.5.so malloc [self]
+ 584 48.1848 libc-2.5.so libc-2.5.so _int_malloc
+ 17 1.4026 libc-2.5.so libc-2.5.so malloc_hook_ini
+ 9 0.7426 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 4 0.3300 libc-2.5.so libc-2.5.so malloc_consolidate
+ 3 0.2475 emacs21-x libc-2.5.so (no symbols)
+ 1 0.0825 libc-2.5.so libc-2.5.so mmap
+ 1 0.0825 libc-2.5.so libc-2.5.so ptmalloc_init
+-------------------------------------------------------------------------------
+577 0.4066 vmlinux vmlinux sys_gettimeofday
+ 577 100.000 vmlinux vmlinux sys_gettimeofday [self]
+-------------------------------------------------------------------------------
+569 0.4010 Xorg Xorg miComputeCompositeRegion
+ 569 50.2650 Xorg Xorg miComputeCompositeRegion [self]
+ 363 32.0671 Xorg Xorg miCompositeSourceValidate
+ 81 7.1555 libpixman.so.0.0.0 Xorg pixman_region_rectangles
+ 45 3.9753 libpixman.so.0.0.0 Xorg pixman_region_n_rects
+ 34 3.0035 Xorg Xorg miSpriteSourceValidate
+ 18 1.5901 libpixman.so.0.0.0 Xorg pixman_region_not_empty
+ 15 1.3251 Xorg Xorg __i686.get_pc_thunk.bx
+ 7 0.6184 libpixman.so.0.0.0 Xorg pixman_region_init
+-------------------------------------------------------------------------------
+ 1 0.1779 libexa.so libexa.so exaPrepareAccess
+ 39 6.9395 libexa.so libexa.so exaCopyNtoN
+ 47 8.3630 libexa.so libexa.so exaTryDriverComposite
+ 75 13.3452 libexa.so libexa.so exaMoveInPixmap
+ 193 34.3416 libexa.so libexa.so exaGetOffscreenPixmap
+ 207 36.8327 libexa.so libexa.so exaDoMigration
+563 0.3968 libexa.so libexa.so exaPixmapIsOffscreen
+ 563 100.000 libexa.so libexa.so exaPixmapIsOffscreen [self]
+-------------------------------------------------------------------------------
+ 8 0.0151 libexa.so libexa.so exaGlyphs
+ 53032 99.9849 libexa.so libexa.so exaComposite
+559 0.3939 libexa.so libexa.so exaTryDriverComposite
+ 45208 85.2258 intel_drv.so libexa.so i965_prepare_composite
+ 3090 5.8252 intel_drv.so libexa.so i965_composite
+ 1691 3.1879 libexa.so libexa.so exaDoMigration
+ 1117 2.1058 Xorg libexa.so miComputeCompositeRegion
+ 559 1.0538 libexa.so libexa.so exaTryDriverComposite [self]
+ 368 0.6938 libexa.so libexa.so exaGetOffscreenPixmap
+ 163 0.3073 intel_drv.so libexa.so i965_check_composite
+ 85 0.1602 intel_drv.so libexa.so .plt
+ 85 0.1602 libexa.so libexa.so exaGetDrawablePixmap
+ 82 0.1546 libexa.so libexa.so .plt
+ 78 0.1470 Xorg libexa.so .plt
+ 62 0.1169 libpixman.so.0.0.0 libexa.so pixman_region_rectangles
+ 62 0.1169 libexa.so libexa.so exaMarkSync
+ 47 0.0886 libexa.so libexa.so exaPixmapIsOffscreen
+ 39 0.0735 intel_drv.so libexa.so i830WaitSync
+ 26 0.0490 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 25 0.0471 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 25 0.0471 libpixman.so.0.0.0 libexa.so pixman_region_n_rects
+ 25 0.0471 intel_drv.so libexa.so intel_get_pixmap_pitch
+ 24 0.0452 libexa.so libexa.so exaPixmapIsPinned
+ 19 0.0358 intel_drv.so libexa.so i830_get_transformed_coordinates
+ 17 0.0320 Xorg libexa.so miCompositeSourceValidate
+ 17 0.0320 libexa.so libexa.so exaMoveInPixmap
+ 16 0.0302 libexa.so libexa.so exaGetDrawableDeltas
+ 16 0.0302 intel_drv.so libexa.so intel_get_pixmap_offset
+ 15 0.0283 libc-2.5.so libexa.so memcpy
+ 15 0.0283 intel_drv.so libexa.so i965_get_dest_format
+ 14 0.0264 libpixman.so.0.0.0 libexa.so pixman_region_not_empty
+ 13 0.0245 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 12 0.0226 libexa.so libexa.so ExaOffscreenMarkUsed
+ 11 0.0207 intel_drv.so libexa.so i965_check_composite_texture
+ 8 0.0151 Xorg libexa.so __i686.get_pc_thunk.bx
+ 5 0.0094 intel_drv.so libexa.so i965_get_card_format
+ 4 0.0075 intel_drv.so libexa.so IntelEmitInvarientState
+ 1 0.0019 libexa.so libexa.so exaOpReadsDestination
+ 1 0.0019 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) libexa.so (no symbols)
+-------------------------------------------------------------------------------
+ 1 0.1692 libc-2.5.so libc-2.5.so calloc
+ 6 1.0152 libc-2.5.so libc-2.5.so _int_realloc
+ 584 98.8156 libc-2.5.so libc-2.5.so malloc
+538 0.3791 libc-2.5.so libc-2.5.so _int_malloc
+ 538 88.0524 libc-2.5.so libc-2.5.so _int_malloc [self]
+ 72 11.7840 libc-2.5.so libc-2.5.so malloc_consolidate
+ 1 0.1637 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 531 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+531 0.3742 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+ 531 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU [self]
+-------------------------------------------------------------------------------
+515 0.3629 oprofile.ko oprofile add_event_entry
+ 515 100.000 oprofile.ko oprofile add_event_entry [self]
+-------------------------------------------------------------------------------
+ 37201 100.000 intel_drv.so intel_drv.so I830EXASync
+512 0.3608 intel_drv.so intel_drv.so I830Sync
+ 36397 97.8072 intel_drv.so intel_drv.so I830WaitLpRing
+ 512 1.3759 intel_drv.so intel_drv.so I830Sync [self]
+ 184 0.4945 Xorg intel_drv.so GetTimeInMillis
+ 114 0.3063 intel_drv.so intel_drv.so .plt
+ 6 0.0161 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+473 0.3333 vmlinux vmlinux copy_to_user
+ 473 100.000 vmlinux vmlinux copy_to_user [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so libc-2.5.so __nss_database_lookup
+ 1 33.3333 libc-2.5.so libc-2.5.so closedir
+451 0.3178 libc-2.5.so libc-2.5.so free
+ 451 64.4286 libc-2.5.so libc-2.5.so free [self]
+ 238 34.0000 libc-2.5.so libc-2.5.so _int_free
+ 11 1.5714 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+423 0.2981 libexa.so libexa.so exaGlyphs
+ 52562 95.1641 libexa.so libexa.so exaComposite
+ 996 1.8033 libexa.so libexa.so exaPixmapDirty
+ 643 1.1642 libexa.so libexa.so exaCopyArea
+ 423 0.7658 libexa.so libexa.so exaGlyphs [self]
+ 104 0.1883 Xorg libexa.so miModifyPixmapHeader
+ 92 0.1666 libexa.so libexa.so exaCreatePixmap
+ 81 0.1467 libexa.so libexa.so exaDoMigration
+ 69 0.1249 libextmod.so libexa.so XvDestroyPixmap
+ 45 0.0815 Xorg libexa.so FreePicture
+ 31 0.0561 Xorg libexa.so damagePolyFillRect
+ 25 0.0453 Xorg libexa.so ValidateGC
+ 21 0.0380 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 16 0.0290 libexa.so libexa.so exaGetDrawablePixmap
+ 16 0.0290 libexa.so libexa.so .plt
+ 15 0.0272 Xorg libexa.so CreatePicture
+ 13 0.0235 Xorg libexa.so miGlyphExtents
+ 11 0.0199 intel_drv.so libexa.so i965_check_composite
+ 10 0.0181 Xorg libexa.so ValidatePicture
+ 8 0.0145 libexa.so libexa.so exaOpReadsDestination
+ 8 0.0145 libexa.so libexa.so exaTryDriverComposite
+ 7 0.0127 libfb.so libexa.so fbDoCopy
+ 7 0.0127 Xorg libexa.so GetScratchPixmapHeader
+ 5 0.0091 Xorg libexa.so GetScratchGC
+ 5 0.0091 Xorg libexa.so __i686.get_pc_thunk.bx
+ 3 0.0054 Xorg libexa.so DamageCreate
+ 3 0.0054 libexa.so libexa.so exaGetDrawableDeltas
+ 3 0.0054 Xorg libexa.so miDestroyPicture
+ 3 0.0054 Xorg libexa.so miUnion
+ 2 0.0036 Xorg libexa.so DamageRegister
+ 2 0.0036 Xorg libexa.so FreeScratchGC
+ 1 0.0018 Xorg libexa.so damageInsertDamage
+ 1 0.0018 Xorg libexa.so miDestroyPictureClip
+ 1 0.0018 Xorg libexa.so FreeScratchPixmapHeader
+ 1 0.0018 libfb.so libexa.so fbCreatePixmap
+-------------------------------------------------------------------------------
+365 0.2572 vmlinux vmlinux restore_all
+ 365 100.000 vmlinux vmlinux restore_all [self]
+-------------------------------------------------------------------------------
+ 700 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+347 0.2445 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 347 49.0113 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op [self]
+ 159 22.4576 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+ 68 9.6045 libc-2.5.so libpixman.so.0.0.0 free
+ 63 8.8983 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+ 37 5.2260 libc-2.5.so libpixman.so.0.0.0 memmove
+ 23 3.2486 libc-2.5.so libpixman.so.0.0.0 malloc
+ 4 0.5650 libc-2.5.so libpixman.so.0.0.0 _int_free
+ 3 0.4237 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 2 0.2825 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 2 0.2825 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+319 0.2248 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols)
+ 319 100.000 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so sigemptyset
+308 0.2171 libc-2.5.so libc-2.5.so memset
+ 308 100.000 libc-2.5.so libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+298 0.2100 libmozjs.so libmozjs.so (no symbols)
+ 298 100.000 libmozjs.so libmozjs.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 34 15.0442 Xorg Xorg miComputeCompositeRegion
+ 192 84.9558 Xorg Xorg miCompositeSourceValidate
+295 0.2079 Xorg Xorg miSpriteSourceValidate
+ 295 100.000 Xorg Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+290 0.2044 vmlinux vmlinux cond_resched
+ 290 100.000 vmlinux vmlinux cond_resched [self]
+-------------------------------------------------------------------------------
+283 0.1994 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols)
+ 283 100.000 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 7 3.7838 intel_drv.so intel_drv.so I830EXASync
+ 9 4.8649 intel_drv.so intel_drv.so i965_composite
+ 55 29.7297 intel_drv.so intel_drv.so i965_prepare_composite
+ 114 61.6216 intel_drv.so intel_drv.so I830Sync
+277 0.1952 intel_drv.so intel_drv.so .plt
+ 277 100.000 intel_drv.so intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 0.8065 Xorg Xorg SetPictureClipRects
+ 1 0.8065 Xorg Xorg xf86PostMotionEvent
+ 1 0.8065 Xorg Xorg WaitForSomething
+ 1 0.8065 Xorg Xorg damagePolyFillRect
+ 1 0.8065 Xorg Xorg damageDamageBox
+ 1 0.8065 Xorg Xorg damageReportPostOp
+ 1 0.8065 Xorg Xorg damageDestroyPixmap
+ 1 0.8065 Xorg Xorg DamageDestroy
+ 1 0.8065 Xorg Xorg damageChangeGC
+ 1 0.8065 Xorg Xorg ProcRenderTrapezoids
+ 1 0.8065 Xorg Xorg CreatePicture
+ 1 0.8065 Xorg Xorg AllocatePicture
+ 1 0.8065 Xorg Xorg ValidateOnePicture
+ 1 0.8065 Xorg Xorg miCompositeRects
+ 1 0.8065 Xorg Xorg ProcCreatePixmap
+ 1 0.8065 Xorg Xorg miRegionDestroy
+ 1 0.8065 Xorg Xorg miDestroyClip
+ 1 0.8065 Xorg Xorg miChangeClip
+ 2 1.6129 Xorg Xorg AllocatePixmap
+ 2 1.6129 Xorg Xorg SecurityLookupIDByClass
+ 2 1.6129 Xorg Xorg ProcFreePixmap
+ 2 1.6129 Xorg Xorg damageDamageRegion
+ 2 1.6129 Xorg Xorg dixLookupDrawable
+ 2 1.6129 Xorg Xorg ProcRenderFreePicture
+ 2 1.6129 Xorg Xorg CompositeRects
+ 2 1.6129 Xorg Xorg miValidatePicture
+ 2 1.6129 Xorg Xorg XaceCatchDispatchProc
+ 3 2.4194 Xorg Xorg ProcRenderCompositeGlyphs
+ 3 2.4194 Xorg Xorg ValidateGC
+ 3 2.4194 Xorg Xorg ProcRenderCreatePicture
+ 4 3.2258 Xorg Xorg ValidatePicture
+ 5 4.0323 Xorg Xorg ProcRenderDispatch
+ 5 4.0323 Xorg Xorg _CallCallbacks
+ 6 4.8387 Xorg Xorg XaceCatchExtProc
+ 6 4.8387 Xorg Xorg CallCallbacks
+ 7 5.6452 Xorg Xorg SecurityLookupIDByType
+ 8 6.4516 Xorg Xorg miColorRects
+ 11 8.8710 Xorg Xorg Dispatch
+ 12 9.6774 Xorg Xorg miCompositeSourceValidate
+ 15 12.0968 Xorg Xorg miComputeCompositeRegion
+275 0.1938 Xorg Xorg __i686.get_pc_thunk.bx
+ 275 100.000 Xorg Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 0.2160 libexa.so libexa.so exaFillRegionSolid
+ 17 3.6717 libexa.so libexa.so exaTryDriverComposite
+ 445 96.1123 libexa.so libexa.so exaDoMigration
+275 0.1938 libexa.so libexa.so exaMoveInPixmap
+ 275 59.3952 libexa.so libexa.so exaMoveInPixmap [self]
+ 75 16.1987 libexa.so libexa.so exaPixmapIsOffscreen
+ 74 15.9827 libexa.so libexa.so exaOffscreenAlloc
+ 19 4.1037 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 9 1.9438 Xorg libexa.so miUnion
+ 5 1.0799 libexa.so libexa.so exaPixmapIsPinned
+ 2 0.4320 Xorg libexa.so __i686.get_pc_thunk.bx
+ 2 0.4320 Xorg libexa.so DamageEmpty
+ 1 0.2160 Xorg libexa.so Xalloc
+ 1 0.2160 libpixman.so.0.0.0 libexa.so pixman_region_union
+-------------------------------------------------------------------------------
+268 0.1889 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols)
+ 268 100.000 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 0.4115 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+ 4 1.6461 libc-2.5.so libc-2.5.so _int_realloc
+ 238 97.9424 libc-2.5.so libc-2.5.so free
+265 0.1867 libc-2.5.so libc-2.5.so _int_free
+ 265 99.2509 libc-2.5.so libc-2.5.so _int_free [self]
+ 2 0.7491 libc-2.5.so libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+ 4 1.6260 libexa.so libexa.so exaFillRegionSolid
+ 4 1.6260 libexa.so libexa.so exaPolyFillRect
+ 16 6.5041 libexa.so libexa.so exaGetOffscreenPixmap
+ 16 6.5041 libexa.so libexa.so exaGlyphs
+ 20 8.1301 libexa.so libexa.so exaCopyNtoN
+ 85 34.5528 libexa.so libexa.so exaTryDriverComposite
+ 101 41.0569 libexa.so libexa.so exaComposite
+261 0.1839 libexa.so libexa.so exaGetDrawablePixmap
+ 261 100.000 libexa.so libexa.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 1 0.4739 libexa.so libexa.so exaCopyNtoN
+ 1 0.4739 libexa.so libexa.so exaPolySegment
+ 1 0.4739 libexa.so libexa.so exaRasterizeTrapezoid
+ 3 1.4218 libexa.so libexa.so exaPolyFillRect
+ 4 1.8957 libexa.so libexa.so exaFillRegionSolid
+ 15 7.1090 libexa.so libexa.so exaDoMigration
+ 16 7.5829 libexa.so libexa.so exaGlyphs
+ 82 38.8626 libexa.so libexa.so exaTryDriverComposite
+ 88 41.7062 libexa.so libexa.so exaComposite
+258 0.1818 libexa.so libexa.so .plt
+ 258 100.000 libexa.so libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 0.0506 libexa.so libexa.so exaPolyFillRect
+ 8 0.4044 libexa.so libexa.so exaComposite
+ 80 4.0445 libexa.so libexa.so exaCopyNtoN
+ 81 4.0950 libexa.so libexa.so exaGlyphs
+ 117 5.9151 libexa.so libexa.so exaFillRegionSolid
+ 1691 85.4904 libexa.so libexa.so exaTryDriverComposite
+252 0.1776 libexa.so libexa.so exaDoMigration
+ 943 47.6263 libexa.so libexa.so ExaOffscreenMarkUsed
+ 445 22.4747 libexa.so libexa.so exaMoveInPixmap
+ 252 12.7273 libexa.so libexa.so exaDoMigration [self]
+ 207 10.4545 libexa.so libexa.so exaPixmapIsOffscreen
+ 67 3.3838 libexa.so libexa.so exaPixmapIsPinned
+ 48 2.4242 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 15 0.7576 libexa.so libexa.so .plt
+ 2 0.1010 libexa.so libexa.so exaOffscreenAlloc
+ 1 0.0505 Xorg libexa.so miUnion
+-------------------------------------------------------------------------------
+243 0.1712 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols)
+ 243 100.000 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg Xorg AllocatePixmap
+ 1 7.6923 Xorg Xorg miRegionDestroy
+ 1 7.6923 Xorg Xorg SetPictureToDefaults
+ 2 15.3846 Xorg Xorg DamageDestroy
+ 2 15.3846 Xorg Xorg damageDamageRegion
+ 3 23.0769 Xorg Xorg miRegionCreate
+ 3 23.0769 Xorg Xorg DamageReportDamage
+221 0.1557 Xorg Xorg .plt
+ 221 100.000 Xorg Xorg .plt [self]
+-------------------------------------------------------------------------------
+197 0.1388 libc-2.5.so libc-2.5.so memcmp
+ 197 100.000 libc-2.5.so libc-2.5.so memcmp [self]
+-------------------------------------------------------------------------------
+197 0.1388 libnspr4.so libnspr4.so (no symbols)
+ 197 100.000 libnspr4.so libnspr4.so (no symbols) [self]
+-------------------------------------------------------------------------------
+189 0.1332 libfb.so libfb.so fbDoCopy
+ 325 54.9915 libfb.so libfb.so fbCopyRegion
+ 189 31.9797 libfb.so libfb.so fbDoCopy [self]
+ 60 10.1523 Xorg libfb.so miSpriteSourceValidate
+ 11 1.8613 libexa.so libfb.so exaCopyNtoN
+ 6 1.0152 Xorg libfb.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 363 100.000 Xorg Xorg miComputeCompositeRegion
+176 0.1240 Xorg Xorg miCompositeSourceValidate
+ 192 50.5263 Xorg Xorg miSpriteSourceValidate
+ 176 46.3158 Xorg Xorg miCompositeSourceValidate [self]
+ 12 3.1579 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.6579 libexa.so libexa.so exaFillRegionSolid
+ 1 0.6579 libexa.so libexa.so exaPolyFillRect
+ 2 1.3158 libexa.so libexa.so exaRasterizeTrapezoid
+ 5 3.2895 libexa.so libexa.so exaCopyNtoN
+ 13 8.5526 libexa.so libexa.so exaComposite
+ 16 10.5263 libexa.so libexa.so exaGetOffscreenPixmap
+ 19 12.5000 libexa.so libexa.so exaMoveInPixmap
+ 21 13.8158 libexa.so libexa.so exaGlyphs
+ 26 17.1053 libexa.so libexa.so exaTryDriverComposite
+ 48 31.5789 libexa.so libexa.so exaDoMigration
+175 0.1233 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 175 100.000 libexa.so libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+175 0.1233 libm-2.5.so libm-2.5.so floor
+ 175 100.000 libm-2.5.so libm-2.5.so floor [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaFillRegionSolid
+172 0.1212 libexa.so libexa.so exaGetPixmapOffset
+ 172 100.000 libexa.so libexa.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+ 2164 100.000 libexa.so libexa.so exaPrepareAccess
+167 0.1177 libexa.so libexa.so exaWaitSync
+ 37265 99.5007 intel_drv.so libexa.so I830EXASync
+ 167 0.4459 libexa.so libexa.so exaWaitSync [self]
+ 11 0.0294 intel_drv.so libexa.so I830Sync
+ 5 0.0134 intel_drv.so libexa.so .plt
+ 4 0.0107 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 5 4.0650 intel_drv.so intel_drv.so I830EXASync
+ 6 4.8780 intel_drv.so intel_drv.so I830Sync
+ 24 19.5122 intel_drv.so intel_drv.so i965_check_composite
+ 36 29.2683 intel_drv.so intel_drv.so i965_composite
+ 52 42.2764 intel_drv.so intel_drv.so i965_prepare_composite
+162 0.1142 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 162 100.000 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 378 24.2775 libc-2.5.so libc-2.5.so qsort
+ 1179 75.7225 libc-2.5.so libc-2.5.so msort_with_tmp
+161 0.1135 libc-2.5.so libc-2.5.so msort_with_tmp
+ 1179 75.7225 libc-2.5.so libc-2.5.so msort_with_tmp
+ 161 10.3404 libc-2.5.so libc-2.5.so msort_with_tmp [self]
+ 113 7.2575 libxul.so libc-2.5.so (no symbols)
+ 92 5.9088 libc-2.5.so libc-2.5.so memcpy
+ 9 0.5780 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.0642 libc-2.5.so libc-2.5.so strcmp
+ 1 0.0642 libc-2.5.so libc-2.5.so rangecmp
+ 1 0.0642 libcairo.so.2.11.3 libc-2.5.so (no symbols)
+-------------------------------------------------------------------------------
+160 0.1128 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 700 77.9510 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 160 17.8174 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union [self]
+ 13 1.4477 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+ 11 1.2249 libc-2.5.so libpixman.so.0.0.0 memmove
+ 6 0.6682 libc-2.5.so libpixman.so.0.0.0 free
+ 5 0.5568 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+ 2 0.2227 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+ 1 0.1114 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+158 0.1113 bash bash (no symbols)
+ 158 100.000 bash bash (no symbols) [self]
+-------------------------------------------------------------------------------
+ 60 0.1695 intel_drv.so intel_drv.so i965_composite
+ 35335 99.8305 intel_drv.so intel_drv.so i965_prepare_composite
+154 0.1085 intel_drv.so intel_drv.so i830WaitSync
+ 35271 99.5344 libexa.so intel_drv.so exaWaitSync
+ 154 0.4346 intel_drv.so intel_drv.so i830WaitSync [self]
+ 7 0.0198 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+ 4 0.0113 intel_drv.so intel_drv.so I830EXASync
+-------------------------------------------------------------------------------
+153 0.1078 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols)
+ 153 100.000 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 6 1.4423 libexa.so libexa.so exaPolyFillRect
+ 11 2.6442 libexa.so libexa.so exaFillRegionSolid
+ 31 7.4519 libexa.so libexa.so exaComposite
+ 368 88.4615 libexa.so libexa.so exaTryDriverComposite
+148 0.1043 libexa.so libexa.so exaGetOffscreenPixmap
+ 193 46.3942 libexa.so libexa.so exaPixmapIsOffscreen
+ 148 35.5769 libexa.so libexa.so exaGetOffscreenPixmap [self]
+ 43 10.3365 libexa.so libexa.so exaGetDrawableDeltas
+ 16 3.8462 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 16 3.8462 libexa.so libexa.so exaGetDrawablePixmap
+-------------------------------------------------------------------------------
+145 0.1022 vmlinux vmlinux mwait_idle_with_hints
+ 145 100.000 vmlinux vmlinux mwait_idle_with_hints [self]
+-------------------------------------------------------------------------------
+143 0.1008 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles
+ 143 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 1 0.0923 libexa.so libexa.so exaCopyNtoN
+ 5 0.4617 libexa.so libexa.so exaRasterizeTrapezoid
+ 81 7.4792 libexa.so libexa.so exaComposite
+ 996 91.9668 libexa.so libexa.so exaGlyphs
+142 0.1001 libexa.so libexa.so exaPixmapDirty
+ 921 84.4954 Xorg libexa.so miUnion
+ 142 13.0275 libexa.so libexa.so exaPixmapDirty [self]
+ 11 1.0092 Xorg libexa.so __i686.get_pc_thunk.bx
+ 7 0.6422 Xorg libexa.so .plt
+ 7 0.6422 libpixman.so.0.0.0 libexa.so pixman_region_union
+ 2 0.1835 Xorg libexa.so DamageRegion
+-------------------------------------------------------------------------------
+140 0.0987 intel_drv.so intel_drv.so i965_check_composite
+ 140 48.6111 intel_drv.so intel_drv.so i965_check_composite [self]
+ 117 40.6250 intel_drv.so intel_drv.so i965_check_composite_texture
+ 24 8.3333 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 7 2.4306 intel_drv.so intel_drv.so i965_get_dest_format
+-------------------------------------------------------------------------------
+ 280 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+138 0.0973 intel_drv.so intel_drv.so intel_get_pixmap_offset
+ 150 50.6757 libexa.so intel_drv.so exaGetPixmapOffset
+ 138 46.6216 intel_drv.so intel_drv.so intel_get_pixmap_offset [self]
+ 8 2.7027 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+138 0.0973 vmlinux vmlinux __d_lookup
+ 138 100.000 vmlinux vmlinux __d_lookup [self]
+-------------------------------------------------------------------------------
+ 117 100.000 intel_drv.so intel_drv.so i965_check_composite
+136 0.0958 intel_drv.so intel_drv.so i965_check_composite_texture
+ 136 100.000 intel_drv.so intel_drv.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+ 1 0.3745 Xorg Xorg ProcCreatePixmap
+ 1 0.3745 Xorg Xorg ProcRenderFillRectangles
+ 1 0.3745 Xorg Xorg ProcRenderCompositeGlyphs
+ 5 1.8727 Xorg Xorg XaceCatchDispatchProc
+ 7 2.6217 Xorg Xorg main
+ 9 3.3708 Xorg Xorg dixLookupDrawable
+ 23 8.6142 Xorg Xorg SecurityLookupIDByClass
+ 55 20.5993 Xorg Xorg Dispatch
+ 55 20.5993 Xorg Xorg XaceCatchExtProc
+ 110 41.1985 Xorg Xorg SecurityLookupIDByType
+130 0.0916 Xorg Xorg XaceHook
+ 130 48.6891 Xorg Xorg XaceHook [self]
+ 122 45.6929 Xorg Xorg CallCallbacks
+ 15 5.6180 Xorg Xorg _CallCallbacks
+-------------------------------------------------------------------------------
+ 5 23.8095 Xorg Xorg GetScratchPixmapHeader
+ 16 76.1905 Xorg Xorg damageGlyphs
+125 0.0881 Xorg Xorg miModifyPixmapHeader
+ 125 100.000 Xorg Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 719 100.000 intel_drv.so intel_drv.so i965_composite
+114 0.0803 intel_drv.so intel_drv.so i830MarkSync
+ 602 83.7274 libexa.so intel_drv.so exaMarkSync
+ 114 15.8554 intel_drv.so intel_drv.so i830MarkSync [self]
+ 3 0.4172 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 95 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+113 0.0796 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+ 113 94.1667 intel_drv.so intel_drv.so intel_get_pixmap_pitch [self]
+ 7 5.8333 libexa.so intel_drv.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+ 93 100.000 intel_drv.so intel_drv.so i965_composite
+112 0.0789 intel_drv.so intel_drv.so i830_get_transformed_coordinates
+ 112 100.000 intel_drv.so intel_drv.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+109 0.0768 libc-2.5.so libc-2.5.so memmove
+ 109 100.000 libc-2.5.so libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+108 0.0761 oprofile.ko oprofile add_sample_entry
+ 108 100.000 oprofile.ko oprofile add_sample_entry [self]
+-------------------------------------------------------------------------------
+108 0.0761 vmlinux vmlinux syscall_call
+ 108 100.000 vmlinux vmlinux syscall_call [self]
+-------------------------------------------------------------------------------
+106 0.0747 emacs21-x emacs21-x (no symbols)
+ 106 100.000 emacs21-x emacs21-x (no symbols) [self]
+-------------------------------------------------------------------------------
+105 0.0740 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+ 105 100.000 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5 4.9505 libexa.so libexa.so exaCopyNtoN
+ 5 4.9505 libexa.so libexa.so exaMoveInPixmap
+ 24 23.7624 libexa.so libexa.so exaTryDriverComposite
+ 67 66.3366 libexa.so libexa.so exaDoMigration
+101 0.0712 libexa.so libexa.so exaPixmapIsPinned
+ 101 100.000 libexa.so libexa.so exaPixmapIsPinned [self]
+-------------------------------------------------------------------------------
+ 4 4.0816 Xorg Xorg ProcRenderCompositeGlyphs
+ 94 95.9184 Xorg Xorg FindGlyph
+98 0.0691 Xorg Xorg FindGlyphRef
+ 98 100.000 Xorg Xorg FindGlyphRef [self]
+-------------------------------------------------------------------------------
+ 1 0.0018 Xorg Xorg ProcRenderCompositeGlyphs
+ 55399 99.9982 Xorg Xorg CompositeGlyphs
+93 0.0655 Xorg Xorg damageGlyphs
+ 55225 99.6787 libexa.so Xorg exaGlyphs
+ 93 0.1679 Xorg Xorg damageGlyphs [self]
+ 19 0.0343 libexa.so Xorg .plt
+ 16 0.0289 Xorg Xorg miModifyPixmapHeader
+ 15 0.0271 Xorg Xorg damageDamageBox
+ 6 0.0108 libexa.so Xorg exaComposite
+ 6 0.0108 libexa.so Xorg exaPixmapDirty
+ 6 0.0108 Xorg Xorg damageReportPostOp
+ 5 0.0090 libexa.so Xorg exaCopyArea
+ 3 0.0054 libextmod.so Xorg XvDestroyPixmap
+ 2 0.0036 Xorg Xorg GetScratchGC
+ 1 0.0018 Xorg Xorg DamageReportDamage
+ 1 0.0018 Xorg Xorg getDrawableDamageRef
+ 1 0.0018 Xorg Xorg CreatePicture
+ 1 0.0018 Xorg Xorg FreeScratchGC
+ 1 0.0018 Xorg Xorg ValidateGC
+ 1 0.0018 Xorg Xorg FreeScratchPixmapHeader
+ 1 0.0018 Xorg Xorg GetScratchPixmapHeader
+-------------------------------------------------------------------------------
+91 0.0641 libexa.so libexa.so exaCopyNtoN
+ 91 34.7328 libexa.so libexa.so exaCopyNtoN [self]
+ 80 30.5344 libexa.so libexa.so exaDoMigration
+ 39 14.8855 libexa.so libexa.so exaPixmapIsOffscreen
+ 20 7.6336 libexa.so libexa.so exaGetDrawablePixmap
+ 14 5.3435 libexa.so libexa.so exaGetDrawableDeltas
+ 5 1.9084 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 5 1.9084 libexa.so libexa.so exaPixmapIsPinned
+ 4 1.5267 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 2 0.7634 intel_drv.so libexa.so I830EXAPrepareCopy
+ 1 0.3817 libexa.so libexa.so .plt
+ 1 0.3817 libexa.so libexa.so exaPixmapDirty
+-------------------------------------------------------------------------------
+91 0.0641 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock
+ 91 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock [self]
+-------------------------------------------------------------------------------
+ 3 3.4483 libexa.so libexa.so exaGlyphs
+ 5 5.7471 libexa.so libexa.so exaPolyFillRect
+ 6 6.8966 libexa.so libexa.so exaComposite
+ 14 16.0920 libexa.so libexa.so exaCopyNtoN
+ 16 18.3908 libexa.so libexa.so exaTryDriverComposite
+ 43 49.4253 libexa.so libexa.so exaGetOffscreenPixmap
+89 0.0627 libexa.so libexa.so exaGetDrawableDeltas
+ 89 100.000 libexa.so libexa.so exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+89 0.0627 vmlinux vmlinux page_fault
+ 89 100.000 vmlinux vmlinux page_fault [self]
+-------------------------------------------------------------------------------
+ 1 2.5641 libc-2.5.so libc-2.5.so setlocale
+ 1 2.5641 libc-2.5.so libc-2.5.so vfprintf
+ 1 2.5641 libc-2.5.so libc-2.5.so _int_malloc
+ 1 2.5641 libc-2.5.so libc-2.5.so vasprintf
+ 6 15.3846 libc-2.5.so libc-2.5.so mbrtowc
+ 9 23.0769 libc-2.5.so libc-2.5.so malloc
+ 9 23.0769 libc-2.5.so libc-2.5.so msort_with_tmp
+ 11 28.2051 libc-2.5.so libc-2.5.so free
+84 0.0592 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 84 100.000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+83 0.0585 vmlinux vmlinux timer_interrupt
+ 83 100.000 vmlinux vmlinux timer_interrupt [self]
+-------------------------------------------------------------------------------
+ 2 2.2989 Xorg Xorg main
+ 85 97.7011 Xorg Xorg Dispatch
+81 0.0571 Xorg Xorg ReadRequestFromClient
+ 81 93.1034 Xorg Xorg ReadRequestFromClient [self]
+ 5 5.7471 Xorg Xorg _XSERVTransRead
+ 1 1.1494 Xorg Xorg _XSERVTransSocketRead
+-------------------------------------------------------------------------------
+ 2 2.4691 libc-2.5.so libc-2.5.so _int_free
+ 3 3.7037 libc-2.5.so libc-2.5.so mallopt
+ 4 4.9383 libc-2.5.so libc-2.5.so malloc
+ 72 88.8889 libc-2.5.so libc-2.5.so _int_malloc
+81 0.0571 libc-2.5.so libc-2.5.so malloc_consolidate
+ 81 100.000 libc-2.5.so libc-2.5.so malloc_consolidate [self]
+-------------------------------------------------------------------------------
+ 113 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+80 0.0564 intel_drv.so intel_drv.so IntelEmitInvarientState
+ 80 68.3761 intel_drv.so intel_drv.so IntelEmitInvarientState [self]
+ 23 19.6581 libdri.so intel_drv.so DRIGetSAREAPrivate
+ 14 11.9658 libdri.so intel_drv.so DRIGetContext
+-------------------------------------------------------------------------------
+79 0.0557 vmlinux vmlinux __link_path_walk
+ 79 100.000 vmlinux vmlinux __link_path_walk [self]
+-------------------------------------------------------------------------------
+78 0.0550 libgcc_s.so.1 libgcc_s.so.1 (no symbols)
+ 78 100.000 libgcc_s.so.1 libgcc_s.so.1 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 2.6316 libexa.so libexa.so exaDoMigration
+ 74 97.3684 libexa.so libexa.so exaMoveInPixmap
+72 0.0507 libexa.so libexa.so exaOffscreenAlloc
+ 72 94.7368 libexa.so libexa.so exaOffscreenAlloc [self]
+ 4 5.2632 Xorg libexa.so Xalloc
+-------------------------------------------------------------------------------
+70 0.0493 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects
+ 70 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 74250 100.000 Xorg Xorg main
+68 0.0479 Xorg Xorg Dispatch
+ 73458 98.9200 Xorg Xorg XaceCatchExtProc
+ 436 0.5871 Xorg Xorg XaceCatchDispatchProc
+ 105 0.1414 Xorg Xorg WaitForSomething
+ 85 0.1145 Xorg Xorg ReadRequestFromClient
+ 68 0.0916 Xorg Xorg Dispatch [self]
+ 55 0.0741 Xorg Xorg XaceHook
+ 11 0.0148 Xorg Xorg __i686.get_pc_thunk.bx
+ 10 0.0135 Xorg Xorg CallCallbacks
+ 6 0.0081 Xorg Xorg FlushAllOutput
+ 5 0.0067 Xorg Xorg ProcRenderDispatch
+ 4 0.0054 libc-2.5.so Xorg ___newselect_nocancel
+ 3 0.0040 Xorg Xorg ProcFreePixmap
+ 3 0.0040 libc-2.5.so Xorg __i686.get_pc_thunk.cx
+ 2 0.0027 Xorg Xorg ProcPolySegment
+ 2 0.0027 Xorg Xorg GetTimeInMillis
+ 2 0.0027 libc-2.5.so Xorg __errno_location
+ 1 0.0013 Xorg Xorg ProcSetClipRectangles
+ 1 0.0013 Xorg Xorg ProcFreeGC
+ 1 0.0013 Xorg Xorg mffs
+ 1 0.0013 Xorg Xorg ProcCreatePixmap
+ 1 0.0013 Xorg Xorg ProcessInputEvents
+-------------------------------------------------------------------------------
+68 0.0479 libc-2.5.so libc-2.5.so strstr
+ 68 100.000 libc-2.5.so libc-2.5.so strstr [self]
+-------------------------------------------------------------------------------
+ 5 7.3529 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 63 92.6471 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+68 0.0479 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+ 68 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO [self]
+-------------------------------------------------------------------------------
+62 0.0437 vmlinux vmlinux no_singlestep
+ 62 100.000 vmlinux vmlinux no_singlestep [self]
+-------------------------------------------------------------------------------
+61 0.0430 libfb.so libfb.so fbValidateGC
+ 61 72.6190 libfb.so libfb.so fbValidateGC [self]
+ 22 26.1905 Xorg libfb.so miComputeCompositeClip
+ 1 1.1905 Xorg libfb.so miTranslateRegion
+-------------------------------------------------------------------------------
+61 0.0430 vmlinux vmlinux _atomic_dec_and_lock
+ 61 100.000 vmlinux vmlinux _atomic_dec_and_lock [self]
+-------------------------------------------------------------------------------
+ 643 100.000 libexa.so libexa.so exaGlyphs
+60 0.0423 libexa.so libexa.so exaCopyArea
+ 583 88.3333 libfb.so libexa.so fbDoCopy
+ 60 9.0909 libexa.so libexa.so exaCopyArea [self]
+ 9 1.3636 Xorg libexa.so miSpriteSourceValidate
+ 5 0.7576 libfb.so libexa.so .plt
+ 2 0.3030 libfb.so libexa.so fbCopyRegion
+ 1 0.1515 libfb.so libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+60 0.0423 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect
+ 60 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 56 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+60 0.0423 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+ 60 100.000 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt [self]
+-------------------------------------------------------------------------------
+ 15 14.7059 Xorg Xorg XaceHook
+ 87 85.2941 Xorg Xorg CallCallbacks
+58 0.0409 Xorg Xorg _CallCallbacks
+ 58 56.8627 Xorg Xorg _CallCallbacks [self]
+ 27 26.4706 Xorg Xorg SecurityCheckResourceIDAccess
+ 12 11.7647 Xorg Xorg SecurityCheckExtAccess
+ 5 4.9020 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 2.8571 Xorg Xorg damageDamageBox
+ 2 5.7143 Xorg Xorg damageReportPostOp
+ 10 28.5714 Xorg Xorg DamageReportDamage
+ 22 62.8571 Xorg Xorg damageDamageRegion
+56 0.0395 Xorg Xorg miUnion
+ 885 90.9558 libpixman.so.0.0.0 Xorg pixman_region_union
+ 56 5.7554 Xorg Xorg miUnion [self]
+ 14 1.4388 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 8 0.8222 libpixman.so.0.0.0 Xorg pixman_op
+ 7 0.7194 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 3 0.3083 libpixman.so.0.0.0 Xorg .plt
+-------------------------------------------------------------------------------
+ 4 100.000 intel_drv.so intel_drv.so i830WaitSync
+56 0.0395 intel_drv.so intel_drv.so I830EXASync
+ 37201 99.7961 intel_drv.so intel_drv.so I830Sync
+ 56 0.1502 intel_drv.so intel_drv.so I830EXASync [self]
+ 8 0.0215 intel_drv.so intel_drv.so I830WaitLpRing
+ 7 0.0188 intel_drv.so intel_drv.so .plt
+ 5 0.0134 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+55 0.0388 intel_drv.so intel_drv.so I830EXASolid
+ 55 91.6667 intel_drv.so intel_drv.so I830EXASolid [self]
+ 5 8.3333 libexa.so intel_drv.so exaGetPixmapOffset
+-------------------------------------------------------------------------------
+ 2 40.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+ 3 60.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+55 0.0388 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 55 98.2143 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini [self]
+ 1 1.7857 libc-2.5.so libpixman.so.0.0.0 _int_free
+-------------------------------------------------------------------------------
+ 3 2.7778 Xorg Xorg main
+ 105 97.2222 Xorg Xorg Dispatch
+54 0.0381 Xorg Xorg WaitForSomething
+ 54 50.0000 Xorg Xorg WaitForSomething [self]
+ 26 24.0741 Xorg Xorg BlockHandler
+ 19 17.5926 Xorg Xorg WakeupHandler
+ 3 2.7778 Xorg Xorg mffs
+ 3 2.7778 libc-2.5.so Xorg gettimeofday
+ 1 0.9259 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.9259 Xorg Xorg NoopDDA
+ 1 0.9259 mouse_drv.so Xorg MouseWakeupHandler
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so mblen
+52 0.0366 libc-2.5.so libc-2.5.so mbrtowc
+ 52 46.0177 libc-2.5.so libc-2.5.so mbrtowc [self]
+ 51 45.1327 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal
+ 6 5.3097 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 2 1.7699 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check
+ 2 1.7699 libc-2.5.so libc-2.5.so __wcsmbs_load_conv
+-------------------------------------------------------------------------------
+52 0.0366 vmlinux vmlinux __copy_from_user_ll
+ 52 100.000 vmlinux vmlinux __copy_from_user_ll [self]
+-------------------------------------------------------------------------------
+ 51 100.000 libc-2.5.so libc-2.5.so mbrtowc
+51 0.0359 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal
+ 51 100.000 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so _nl_expand_alias
+ 1 50.0000 libc-2.5.so libc-2.5.so vasprintf
+49 0.0345 libc-2.5.so libc-2.5.so strlen
+ 49 100.000 libc-2.5.so libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+ 1 0.7576 Xorg Xorg damagePolyFillRect
+ 131 99.2424 Xorg Xorg damageDamageBox
+48 0.0338 Xorg Xorg damageDamageRegion
+ 48 36.3636 Xorg Xorg damageDamageRegion [self]
+ 41 31.0606 Xorg Xorg miIntersect
+ 22 16.6667 Xorg Xorg miUnion
+ 9 6.8182 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 5 3.7879 libpixman.so.0.0.0 Xorg pixman_region_union
+ 3 2.2727 Xorg Xorg getDrawableDamageRef
+ 2 1.5152 Xorg Xorg .plt
+ 2 1.5152 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 1.1494 Xorg Xorg miColorRects
+ 9 10.3448 Xorg Xorg ProcChangeGC
+ 77 88.5057 Xorg Xorg ChangeGC
+48 0.0338 Xorg Xorg dixChangeGC
+ 48 55.1724 Xorg Xorg dixChangeGC [self]
+ 25 28.7356 Xorg Xorg damageChangeGC
+ 13 14.9425 Xorg Xorg miBSCheapChangeGC
+ 1 1.1494 Xorg Xorg damageChangeClip
+-------------------------------------------------------------------------------
+48 0.0338 libextmod.so libextmod.so XvDestroyPixmap
+ 114 65.8960 Xorg libextmod.so damageDestroyPixmap
+ 48 27.7457 libextmod.so libextmod.so XvDestroyPixmap [self]
+ 5 2.8902 libexa.so libextmod.so exaDestroyPixmap
+ 4 2.3121 Xorg libextmod.so __i686.get_pc_thunk.bx
+ 1 0.5780 Xorg libextmod.so damageRemoveDamage
+ 1 0.5780 Xorg libextmod.so DamageDestroy
+-------------------------------------------------------------------------------
+ 1 0.5587 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 2 1.1173 Xorg Xorg ProcRenderDispatch
+ 6 3.3520 Xorg Xorg ProcRenderTrapezoids
+ 8 4.4693 Xorg Xorg ProcFreePixmap
+ 8 4.4693 Xorg Xorg ProcRenderComposite
+ 8 4.4693 Xorg Xorg ProcRenderChangePicture
+ 9 5.0279 Xorg Xorg ProcRenderSetPictureTransform
+ 12 6.7039 Xorg Xorg dixLookupGC
+ 14 7.8212 Xorg Xorg ProcRenderSetPictureFilter
+ 18 10.0559 Xorg Xorg ProcRenderCreatePicture
+ 24 13.4078 Xorg Xorg ProcRenderFreePicture
+ 29 16.2011 Xorg Xorg ProcRenderFillRectangles
+ 40 22.3464 Xorg Xorg ProcRenderCompositeGlyphs
+46 0.0324 Xorg Xorg SecurityLookupIDByType
+ 110 61.4525 Xorg Xorg XaceHook
+ 46 25.6983 Xorg Xorg SecurityLookupIDByType [self]
+ 11 6.1453 Xorg Xorg Hash
+ 7 3.9106 Xorg Xorg __i686.get_pc_thunk.bx
+ 5 2.7933 Xorg Xorg CallCallbacks
+-------------------------------------------------------------------------------
+ 1 100.000 libdri.so libdri.so DRIDoBlockHandler
+45 0.0317 libdri.so libdri.so DRIGetSAREAPrivate
+ 45 100.000 libdri.so libdri.so DRIGetSAREAPrivate [self]
+-------------------------------------------------------------------------------
+ 1 0.5882 Xorg Xorg XaceCatchDispatchProc
+ 4 2.3529 Xorg Xorg ProcFreeGC
+ 69 40.5882 Xorg Xorg ProcFreePixmap
+ 96 56.4706 Xorg Xorg ProcRenderFreePicture
+44 0.0310 Xorg Xorg FreeResource
+ 54 31.7647 Xorg Xorg FreePicture
+ 44 25.8824 Xorg Xorg dixDestroyPixmap
+ 44 25.8824 Xorg Xorg FreeResource [self]
+ 11 6.4706 Xorg Xorg Xfree
+ 6 3.5294 Xorg Xorg Hash
+ 4 2.3529 Xorg Xorg FreeGC
+ 4 2.3529 libextmod.so Xorg XvDestroyPixmap
+ 2 1.1765 Xorg Xorg FlushClientCaches
+ 1 0.5882 libc-2.5.so Xorg free
+-------------------------------------------------------------------------------
+ 1 0.7042 Xorg Xorg dixLookupDrawable
+ 1 0.7042 Xorg Xorg XaceCatchDispatchProc
+ 3 2.1127 Xorg Xorg XaceCatchExtProc
+ 5 3.5211 Xorg Xorg SecurityLookupIDByType
+ 10 7.0423 Xorg Xorg Dispatch
+ 122 85.9155 Xorg Xorg XaceHook
+43 0.0303 Xorg Xorg CallCallbacks
+ 87 61.2676 Xorg Xorg _CallCallbacks
+ 43 30.2817 Xorg Xorg CallCallbacks [self]
+ 6 4.2254 Xorg Xorg __i686.get_pc_thunk.bx
+ 4 2.8169 Xorg Xorg SecurityCheckResourceIDAccess
+ 2 1.4085 Xorg Xorg SecurityCheckExtAccess
+-------------------------------------------------------------------------------
+ 2 1.2422 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 159 98.7578 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+39 0.0275 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+ 110 68.3230 libc-2.5.so libpixman.so.0.0.0 malloc
+ 39 24.2236 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc [self]
+ 7 4.3478 libc-2.5.so libpixman.so.0.0.0 _int_malloc
+ 5 3.1056 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+38 0.0268 vmlinux vmlinux memcmp
+ 38 100.000 vmlinux vmlinux memcmp [self]
+-------------------------------------------------------------------------------
+ 5 41.6667 intel_drv.so intel_drv.so i965_prepare_composite
+ 7 58.3333 intel_drv.so intel_drv.so i965_check_composite
+36 0.0254 intel_drv.so intel_drv.so i965_get_dest_format
+ 36 100.000 intel_drv.so intel_drv.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+36 0.0254 jbd.ko jbd journal_add_journal_head
+ 36 100.000 jbd.ko jbd journal_add_journal_head [self]
+-------------------------------------------------------------------------------
+ 325 100.000 libfb.so libfb.so fbDoCopy
+35 0.0247 libfb.so libfb.so fbCopyRegion
+ 251 76.7584 libexa.so libfb.so exaCopyNtoN
+ 35 10.7034 libfb.so libfb.so fbCopyRegion [self]
+ 23 7.0336 libexa.so libfb.so .plt
+ 10 3.0581 libexa.so libfb.so exaGetDrawablePixmap
+ 3 0.9174 libexa.so libfb.so __i686.get_pc_thunk.bx
+ 2 0.6116 libexa.so libfb.so exaGetDrawableDeltas
+ 2 0.6116 libexa.so libfb.so exaDoMigration
+ 1 0.3058 libexa.so libfb.so exaPixmapIsOffscreen
+-------------------------------------------------------------------------------
+35 0.0247 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols)
+ 35 100.000 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols) [self]
+-------------------------------------------------------------------------------
+35 0.0247 vmlinux vmlinux apic_timer_interrupt
+ 35 100.000 vmlinux vmlinux apic_timer_interrupt [self]
+-------------------------------------------------------------------------------
+ 4 11.7647 Xorg Xorg SetPictureToDefaults
+ 30 88.2353 Xorg Xorg PictureGetFilterId
+34 0.0240 Xorg Xorg CompareISOLatin1Lowered
+ 34 100.000 Xorg Xorg CompareISOLatin1Lowered [self]
+-------------------------------------------------------------------------------
+34 0.0240 vmlinux vmlinux kmem_cache_alloc
+ 34 100.000 vmlinux vmlinux kmem_cache_alloc [self]
+-------------------------------------------------------------------------------
+34 0.0240 vmlinux vmlinux kmem_cache_free
+ 34 100.000 vmlinux vmlinux kmem_cache_free [self]
+-------------------------------------------------------------------------------
+ 46 100.000 libexa.so libexa.so exaPolySegment
+33 0.0233 libexa.so libexa.so exaPolyFillRect
+ 245 55.9361 libexa.so libexa.so exaFillRegionSolid
+ 56 12.7854 Xorg libexa.so miRectsToRegion
+ 37 8.4475 libpixman.so.0.0.0 libexa.so pixman_region_fini
+ 33 7.5342 libexa.so libexa.so exaPolyFillRect [self]
+ 18 4.1096 Xorg libexa.so miRegionDestroy
+ 9 2.0548 Xorg libexa.so miIntersect
+ 8 1.8265 intel_drv.so libexa.so I830EXASolid
+ 7 1.5982 Xorg libexa.so miTranslateRegion
+ 6 1.3699 libexa.so libexa.so exaGetOffscreenPixmap
+ 5 1.1416 libexa.so libexa.so exaGetDrawableDeltas
+ 4 0.9132 libexa.so libexa.so exaGetDrawablePixmap
+ 3 0.6849 libexa.so libexa.so .plt
+ 2 0.4566 Xorg libexa.so __i686.get_pc_thunk.bx
+ 1 0.2283 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 1 0.2283 intel_drv.so libexa.so I830EXAPrepareSolid
+ 1 0.2283 intel_drv.so libexa.so I830EXADoneSolid
+ 1 0.2283 libpixman.so.0.0.0 libexa.so pixman_region_intersect
+ 1 0.2283 libexa.so libexa.so exaDoMigration
+-------------------------------------------------------------------------------
+33 0.0233 sysprof_module sysprof_module (no symbols)
+ 33 100.000 sysprof_module sysprof_module (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 3.1250 Xorg Xorg ProcRenderCompositeGlyphs
+ 1 3.1250 Xorg Xorg ProcRenderFreePicture
+ 1 3.1250 Xorg Xorg ProcRenderCreatePicture
+ 2 6.2500 Xorg Xorg SecurityLookupIDByClass
+ 6 18.7500 Xorg Xorg FreeResource
+ 10 31.2500 Xorg Xorg AddResource
+ 11 34.3750 Xorg Xorg SecurityLookupIDByType
+32 0.0226 Xorg Xorg Hash
+ 32 100.000 Xorg Xorg Hash [self]
+-------------------------------------------------------------------------------
+ 4 5.0000 Xorg Xorg ValidatePicture
+ 76 95.0000 Xorg Xorg ValidateOnePicture
+32 0.0226 Xorg Xorg miValidatePicture
+ 36 45.0000 Xorg Xorg miRegionCreate
+ 32 40.0000 Xorg Xorg miValidatePicture [self]
+ 4 5.0000 Xorg Xorg miIntersect
+ 4 5.0000 Xorg Xorg miRegionInit
+ 2 2.5000 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.2500 Xorg Xorg miTranslateRegion
+ 1 1.2500 Xorg Xorg Xalloc
+-------------------------------------------------------------------------------
+32 0.0226 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty
+ 32 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+32 0.0226 vmlinux vmlinux __find_get_block
+ 32 100.000 vmlinux vmlinux __find_get_block [self]
+-------------------------------------------------------------------------------
+ 4 12.9032 Xorg Xorg CallCallbacks
+ 27 87.0968 Xorg Xorg _CallCallbacks
+31 0.0218 Xorg Xorg SecurityCheckResourceIDAccess
+ 31 100.000 Xorg Xorg SecurityCheckResourceIDAccess [self]
+-------------------------------------------------------------------------------
+ 8 1.4842 Xorg Xorg ProcPolyFillRectangle
+ 21 3.8961 Xorg Xorg miCompositeRects
+ 35 6.4935 Xorg Xorg miCreateAlphaPicture
+ 475 88.1262 Xorg Xorg miColorRects
+31 0.0218 Xorg Xorg damagePolyFillRect
+ 387 67.8947 libexa.so Xorg exaPolyFillRect
+ 105 18.4211 Xorg Xorg damageDamageBox
+ 31 5.4386 Xorg Xorg damagePolyFillRect [self]
+ 15 2.6316 Xorg Xorg damageReportPostOp
+ 7 1.2281 libexa.so Xorg exaFillRegionSolid
+ 5 0.8772 Xorg Xorg miIntersect
+ 5 0.8772 Xorg Xorg miRectsToRegion
+ 4 0.7018 libexa.so Xorg .plt
+ 4 0.7018 libexa.so Xorg exaGetDrawablePixmap
+ 2 0.3509 Xorg Xorg miTranslateRegion
+ 1 0.1754 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.1754 Xorg Xorg miRegionDestroy
+ 1 0.1754 Xorg Xorg getDrawableDamageRef
+ 1 0.1754 Xorg Xorg DamageReportDamage
+ 1 0.1754 Xorg Xorg damageDamageRegion
+-------------------------------------------------------------------------------
+ 1 0.0018 Xorg Xorg XaceCatchExtProc
+ 55594 99.9982 Xorg Xorg ProcRenderDispatch
+29 0.0204 Xorg Xorg ProcRenderCompositeGlyphs
+ 55417 99.6691 Xorg Xorg CompositeGlyphs
+ 102 0.1834 Xorg Xorg FindGlyph
+ 40 0.0719 Xorg Xorg SecurityLookupIDByType
+ 29 0.0522 Xorg Xorg ProcRenderCompositeGlyphs [self]
+ 4 0.0072 Xorg Xorg FindGlyphRef
+ 3 0.0054 Xorg Xorg __i686.get_pc_thunk.bx
+ 3 0.0054 Xorg Xorg ValidatePicture
+ 1 0.0018 Xorg Xorg Hash
+ 1 0.0018 Xorg Xorg XaceHook
+ 1 0.0018 Xorg Xorg damageGlyphs
+-------------------------------------------------------------------------------
+ 31 100.000 libexa.so libexa.so exaDestroyPixmap
+28 0.0197 libexa.so libexa.so exaOffscreenFree
+ 28 87.5000 libexa.so libexa.so exaOffscreenFree [self]
+ 3 9.3750 libexa.so libexa.so ExaOffscreenMerge
+ 1 3.1250 Xorg libexa.so Xfree
+-------------------------------------------------------------------------------
+ 6 0.0082 Xorg Xorg main
+ 73458 99.9918 Xorg Xorg Dispatch
+27 0.0190 Xorg Xorg XaceCatchExtProc
+ 73339 99.8190 Xorg Xorg ProcRenderDispatch
+ 55 0.0749 Xorg Xorg XaceHook
+ 27 0.0367 Xorg Xorg XaceCatchExtProc [self]
+ 10 0.0136 Xorg Xorg ProcRenderSetPictureFilter
+ 7 0.0095 Xorg Xorg ProcRenderSetPictureTransform
+ 7 0.0095 Xorg Xorg ProcRenderFreePicture
+ 6 0.0082 Xorg Xorg __i686.get_pc_thunk.bx
+ 6 0.0082 Xorg Xorg ProcRenderCreatePicture
+ 4 0.0054 Xorg Xorg GetExtensionEntry
+ 3 0.0041 Xorg Xorg CallCallbacks
+ 3 0.0041 Xorg Xorg ProcRenderFillRectangles
+ 2 0.0027 Xorg Xorg __i686.get_pc_thunk.cx
+ 2 0.0027 Xorg Xorg ProcRenderChangePicture
+ 1 0.0014 Xorg Xorg ProcRenderCompositeGlyphs
+-------------------------------------------------------------------------------
+27 0.0190 jbd.ko jbd journal_dirty_metadata
+ 27 100.000 jbd.ko jbd journal_dirty_metadata [self]
+-------------------------------------------------------------------------------
+27 0.0190 jbd.ko jbd journal_put_journal_head
+ 27 100.000 jbd.ko jbd journal_put_journal_head [self]
+-------------------------------------------------------------------------------
+27 0.0190 jbd.ko jbd start_this_handle
+ 27 100.000 jbd.ko jbd start_this_handle [self]
+-------------------------------------------------------------------------------
+ 1 3.7037 libexa.so libexa.so exaTryDriverComposite
+ 8 29.6296 libexa.so libexa.so exaGlyphs
+ 18 66.6667 libexa.so libexa.so exaComposite
+27 0.0190 libexa.so libexa.so exaOpReadsDestination
+ 27 100.000 libexa.so libexa.so exaOpReadsDestination [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 1 25.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 2 50.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+26 0.0183 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 26 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+26 0.0183 vmlinux vmlinux __handle_mm_fault
+ 26 100.000 vmlinux vmlinux __handle_mm_fault [self]
+-------------------------------------------------------------------------------
+25 0.0176 Xorg Xorg AllocatePixmap
+ 119 79.8658 Xorg Xorg Xalloc
+ 25 16.7785 Xorg Xorg AllocatePixmap [self]
+ 2 1.3423 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 1.3423 libc-2.5.so Xorg malloc
+ 1 0.6711 Xorg Xorg .plt
+-------------------------------------------------------------------------------
+ 1 4.0000 Xorg Xorg ProcChangeGC
+ 1 4.0000 Xorg Xorg ProcRenderChangePicture
+ 2 8.0000 Xorg Xorg ProcRenderDispatch
+ 3 12.0000 Xorg Xorg miColorRects
+ 5 20.0000 Xorg Xorg ProcRenderCreatePicture
+ 13 52.0000 Xorg Xorg miRenderColorToPixel
+25 0.0176 Xorg Xorg Ones
+ 25 100.000 Xorg Xorg Ones [self]
+-------------------------------------------------------------------------------
+25 0.0176 vmlinux vmlinux hrtimer_run_queues
+ 25 100.000 vmlinux vmlinux hrtimer_run_queues [self]
+-------------------------------------------------------------------------------
+25 0.0176 vmlinux vmlinux schedule
+ 25 100.000 vmlinux vmlinux schedule [self]
+-------------------------------------------------------------------------------
+ 2 5.2632 Xorg Xorg damageGlyphs
+ 36 94.7368 Xorg Xorg miColorRects
+24 0.0169 Xorg Xorg GetScratchGC
+ 24 55.8140 Xorg Xorg GetScratchGC [self]
+ 17 39.5349 Xorg Xorg damageChangeClip
+ 2 4.6512 Xorg Xorg miBSCheapChangeClip
+-------------------------------------------------------------------------------
+ 1 0.4310 Xorg Xorg AllocateGC
+ 1 0.4310 Xorg Xorg miValidatePicture
+ 1 0.4310 Xorg Xorg miRectAlloc
+ 2 0.8621 Xorg Xorg SetClipRects
+ 2 0.8621 Xorg Xorg miRectsToRegion
+ 3 1.2931 Xorg Xorg miRegionValidate
+ 14 6.0345 Xorg Xorg DamageCreate
+ 20 8.6207 Xorg Xorg AllocatePicture
+ 22 9.4828 Xorg Xorg AddResource
+ 47 20.2586 Xorg Xorg miRegionCreate
+ 119 51.2931 Xorg Xorg AllocatePixmap
+24 0.0169 Xorg Xorg Xalloc
+ 209 87.4477 libc-2.5.so Xorg malloc
+ 24 10.0418 Xorg Xorg Xalloc [self]
+ 3 1.2552 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+ 3 1.2552 libc-2.5.so Xorg _int_malloc
+-------------------------------------------------------------------------------
+24 0.0169 libdri.so libdri.so DRIGetContext
+ 24 100.000 libdri.so libdri.so DRIGetContext [self]
+-------------------------------------------------------------------------------
+ 92 100.000 libexa.so libexa.so exaGlyphs
+24 0.0169 libexa.so libexa.so exaCreatePixmap
+ 177 74.3697 libfb.so libexa.so fbCreatePixmap
+ 24 10.0840 libexa.so libexa.so exaCreatePixmap [self]
+ 23 9.6639 Xorg libexa.so DamageCreate
+ 5 2.1008 Xorg libexa.so DamageRegister
+ 4 1.6807 libfb.so libexa.so fbCreatePixmapBpp
+ 2 0.8403 Xorg libexa.so __i686.get_pc_thunk.bx
+ 1 0.4202 Xorg libexa.so getDrawableDamageRef
+ 1 0.4202 Xorg libexa.so DamageSetReportAfterOp
+ 1 0.4202 libfb.so libexa.so __i686.get_pc_thunk.cx
+-------------------------------------------------------------------------------
+ 2 8.6957 Xorg Xorg miTrapezoidBounds
+ 21 91.3043 Xorg Xorg miLineFixedX
+23 0.0162 Xorg Xorg __divdi3
+ 23 100.000 Xorg Xorg __divdi3 [self]
+-------------------------------------------------------------------------------
+23 0.0162 libm-2.5.so libm-2.5.so ceil
+ 23 100.000 libm-2.5.so libm-2.5.so ceil [self]
+-------------------------------------------------------------------------------
+ 44 100.000 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+22 0.0155 ld-2.5.so ld-2.5.so do_lookup_x
+ 22 50.0000 ld-2.5.so ld-2.5.so do_lookup_x [self]
+ 18 40.9091 ld-2.5.so ld-2.5.so check_match.7793
+ 2 4.5455 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 1 2.2727 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx
+ 1 2.2727 ld-2.5.so ld-2.5.so strcmp
+-------------------------------------------------------------------------------
+ 13 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+22 0.0155 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+ 22 95.6522 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy [self]
+ 1 4.3478 libc-2.5.so libpixman.so.0.0.0 free
+-------------------------------------------------------------------------------
+21 0.0148 ext3.ko ext3 ext3_mark_iloc_dirty
+ 21 100.000 ext3.ko ext3 ext3_mark_iloc_dirty [self]
+-------------------------------------------------------------------------------
+21 0.0148 vmlinux vmlinux unmap_vmas
+ 21 100.000 vmlinux vmlinux unmap_vmas [self]
+-------------------------------------------------------------------------------
+ 6 2.7397 Xorg Xorg XaceCatchExtProc
+ 213 97.2603 Xorg Xorg ProcRenderDispatch
+20 0.0141 Xorg Xorg ProcRenderCreatePicture
+ 91 41.5525 Xorg Xorg CreatePicture
+ 44 20.0913 Xorg Xorg dixLookupDrawable
+ 24 10.9589 Xorg Xorg AddResource
+ 20 9.1324 Xorg Xorg ProcRenderCreatePicture [self]
+ 18 8.2192 Xorg Xorg SecurityLookupIDByType
+ 5 2.2831 Xorg Xorg Ones
+ 4 1.8265 Xorg Xorg LegalNewID
+ 3 1.3699 Xorg Xorg __i686.get_pc_thunk.bx
+ 3 1.3699 Xorg Xorg SetPictureToDefaults
+ 2 0.9132 Xorg Xorg SecurityLookupIDByClass
+ 2 0.9132 Xorg Xorg miCreatePicture
+ 2 0.9132 Xorg Xorg AllocatePicture
+ 1 0.4566 Xorg Xorg Hash
+-------------------------------------------------------------------------------
+ 7 35.0000 Xorg Xorg damageChangeGC
+ 13 65.0000 Xorg Xorg dixChangeGC
+20 0.0141 Xorg Xorg miBSCheapChangeGC
+ 20 100.000 Xorg Xorg miBSCheapChangeGC [self]
+-------------------------------------------------------------------------------
+ 2 0.2548 Xorg Xorg CompositeRects
+ 783 99.7452 Xorg Xorg miCompositeRects
+20 0.0141 Xorg Xorg miColorRects
+ 475 60.4326 Xorg Xorg damagePolyFillRect
+ 105 13.3588 Xorg Xorg ValidateGC
+ 87 11.0687 Xorg Xorg ChangeGC
+ 36 4.5802 Xorg Xorg GetScratchGC
+ 26 3.3079 Xorg Xorg miRenderColorToPixel
+ 20 2.5445 Xorg Xorg miColorRects [self]
+ 10 1.2723 Xorg Xorg miRegionCreate
+ 8 1.0178 Xorg Xorg __i686.get_pc_thunk.bx
+ 5 0.6361 libexa.so Xorg exaPolyFillRect
+ 3 0.3817 Xorg Xorg Ones
+ 2 0.2545 Xorg Xorg damageChangeClip
+ 2 0.2545 Xorg Xorg damageDamageBox
+ 2 0.2545 Xorg Xorg miRegionCopy
+ 1 0.1272 Xorg Xorg dixChangeGC
+ 1 0.1272 Xorg Xorg FreeScratchGC
+ 1 0.1272 Xorg Xorg getDrawableDamageRef
+ 1 0.1272 Xorg Xorg damageValidateGC
+ 1 0.1272 libpixman.so.0.0.0 Xorg pixman_region_copy
+-------------------------------------------------------------------------------
+ 15 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+20 0.0141 intel_drv.so intel_drv.so i965_get_card_format
+ 20 100.000 intel_drv.so intel_drv.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+20 0.0141 libdri.so libdri.so __i686.get_pc_thunk.cx
+ 20 100.000 libdri.so libdri.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+20 0.0141 vmlinux vmlinux do_wp_page
+ 20 100.000 vmlinux vmlinux do_wp_page [self]
+-------------------------------------------------------------------------------
+ 5 26.3158 Xorg Xorg CreatePicture
+ 14 73.6842 Xorg Xorg ProcRenderChangePicture
+19 0.0134 Xorg Xorg ChangePicture
+ 19 100.000 Xorg Xorg ChangePicture [self]
+-------------------------------------------------------------------------------
+19 0.0134 libc-2.5.so libc-2.5.so realloc
+ 20 47.6190 libc-2.5.so libc-2.5.so _int_realloc
+ 19 45.2381 libc-2.5.so libc-2.5.so realloc [self]
+ 3 7.1429 libc-2.5.so libc-2.5.so malloc
+-------------------------------------------------------------------------------
+ 19 100.000 libfb.so libfb.so fbFillRegionSolid
+19 0.0134 libfb.so libfb.so fbSolid
+ 19 100.000 libfb.so libfb.so fbSolid [self]
+-------------------------------------------------------------------------------
+ 1264 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+19 0.0134 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+ 1245 98.4968 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1
+ 19 1.5032 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+19 0.0134 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+ 19 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+19 0.0134 vmlinux vmlinux __block_write_full_page
+ 19 100.000 vmlinux vmlinux __block_write_full_page [self]
+-------------------------------------------------------------------------------
+19 0.0134 vmlinux vmlinux find_get_pages_tag
+ 19 100.000 vmlinux vmlinux find_get_pages_tag [self]
+-------------------------------------------------------------------------------
+19 0.0134 vmlinux vmlinux kunmap_atomic
+ 19 100.000 vmlinux vmlinux kunmap_atomic [self]
+-------------------------------------------------------------------------------
+ 7 14.5833 Xorg Xorg CreatePicture
+ 9 18.7500 Xorg Xorg PictureFindFilter
+ 32 66.6667 Xorg Xorg SetPictureToDefaults
+18 0.0127 Xorg Xorg PictureGetFilterId
+ 30 62.5000 Xorg Xorg CompareISOLatin1Lowered
+ 18 37.5000 Xorg Xorg PictureGetFilterId [self]
+-------------------------------------------------------------------------------
+ 4 3.3333 Xorg Xorg ValidateGC
+ 116 96.6667 Xorg Xorg damageValidateGC
+18 0.0127 Xorg Xorg miBSCheapValidateGC
+ 87 72.5000 libexa.so Xorg exaValidateGC
+ 18 15.0000 Xorg Xorg miBSCheapValidateGC [self]
+ 15 12.5000 libfb.so Xorg fbValidateGC
+-------------------------------------------------------------------------------
+18 0.0127 jbd.ko jbd journal_commit_transaction
+ 18 100.000 jbd.ko jbd journal_commit_transaction [self]
+-------------------------------------------------------------------------------
+18 0.0127 jbd.ko jbd journal_stop
+ 18 100.000 jbd.ko jbd journal_stop [self]
+-------------------------------------------------------------------------------
+18 0.0127 libc-2.5.so libc-2.5.so mkdir
+ 18 100.000 libc-2.5.so libc-2.5.so mkdir [self]
+-------------------------------------------------------------------------------
+ 1 5.5556 libexa.so libexa.so exaFillRegionSolid
+ 4 22.2222 libexa.so libexa.so exaCopyNtoN
+ 13 72.2222 libexa.so libexa.so exaTryDriverComposite
+18 0.0127 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 18 100.000 libexa.so libexa.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+18 0.0127 vmlinux vmlinux __copy_from_user_ll_nozero
+ 18 100.000 vmlinux vmlinux __copy_from_user_ll_nozero [self]
+-------------------------------------------------------------------------------
+ 2 6.8966 Xorg Xorg SetClipRects
+ 2 6.8966 Xorg Xorg ChangeGC
+ 25 86.2069 Xorg Xorg dixChangeGC
+17 0.0120 Xorg Xorg damageChangeGC
+ 17 58.6207 Xorg Xorg damageChangeGC [self]
+ 7 24.1379 Xorg Xorg miBSCheapChangeGC
+ 4 13.7931 Xorg Xorg miChangeGC
+ 1 3.4483 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.6579 Xorg Xorg CompositePicture
+ 2 1.3158 Xorg Xorg ProcPolySegment
+ 2 1.3158 Xorg Xorg miColorRects
+ 2 1.3158 Xorg Xorg damagePolySegment
+ 15 9.8684 Xorg Xorg damageGlyphs
+ 25 16.4474 Xorg Xorg damageComposite
+ 105 69.0789 Xorg Xorg damagePolyFillRect
+17 0.0120 Xorg Xorg damageDamageBox
+ 131 86.1842 Xorg Xorg damageDamageRegion
+ 17 11.1842 Xorg Xorg damageDamageBox [self]
+ 2 1.3158 Xorg Xorg miIntersect
+ 1 0.6579 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.6579 Xorg Xorg miUnion
+-------------------------------------------------------------------------------
+ 4 13.3333 Xorg Xorg miCompositeRects
+ 26 86.6667 Xorg Xorg miColorRects
+17 0.0120 Xorg Xorg miRenderColorToPixel
+ 17 56.6667 Xorg Xorg miRenderColorToPixel [self]
+ 13 43.3333 Xorg Xorg Ones
+-------------------------------------------------------------------------------
+17 0.0120 libfb.so libfb.so fbCreatePixmap
+ 157 86.7403 libfb.so libfb.so fbCreatePixmapBpp
+ 17 9.3923 libfb.so libfb.so fbCreatePixmap [self]
+ 5 2.7624 Xorg libfb.so AllocatePixmap
+ 2 1.1050 libfb.so libfb.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3526 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+17 0.0120 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1714 48.5965 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+ 1264 35.8378 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+ 531 15.0553 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+ 17 0.4820 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general [self]
+ 1 0.0284 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchSolid
+-------------------------------------------------------------------------------
+17 0.0120 vmlinux vmlinux do_lookup
+ 17 100.000 vmlinux vmlinux do_lookup [self]
+-------------------------------------------------------------------------------
+17 0.0120 vmlinux vmlinux find_get_page
+ 17 100.000 vmlinux vmlinux find_get_page [self]
+-------------------------------------------------------------------------------
+17 0.0120 vmlinux vmlinux strncpy_from_user
+ 17 100.000 vmlinux vmlinux strncpy_from_user [self]
+-------------------------------------------------------------------------------
+ 5 0.0068 Xorg Xorg Dispatch
+ 73339 99.9932 Xorg Xorg XaceCatchExtProc
+16 0.0113 Xorg Xorg ProcRenderDispatch
+ 55594 75.7866 Xorg Xorg ProcRenderCompositeGlyphs
+ 14253 19.4299 Xorg Xorg ProcRenderTrapezoids
+ 1981 2.7005 Xorg Xorg ProcRenderComposite
+ 1039 1.4164 Xorg Xorg ProcRenderFillRectangles
+ 213 0.2904 Xorg Xorg ProcRenderCreatePicture
+ 130 0.1772 Xorg Xorg ProcRenderFreePicture
+ 45 0.0613 Xorg Xorg ProcRenderSetPictureFilter
+ 30 0.0409 Xorg Xorg ProcRenderChangePicture
+ 24 0.0327 Xorg Xorg ProcRenderSetPictureTransform
+ 16 0.0218 Xorg Xorg ProcRenderDispatch [self]
+ 12 0.0164 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 5 0.0068 Xorg Xorg PictOpValid
+ 5 0.0068 Xorg Xorg __i686.get_pc_thunk.bx
+ 3 0.0041 Xorg Xorg FindGlyph
+ 2 0.0027 Xorg Xorg Ones
+ 2 0.0027 Xorg Xorg SecurityLookupIDByType
+ 1 0.0014 Xorg Xorg CompositeRects
+ 1 0.0014 Xorg Xorg SetPictureFilter
+-------------------------------------------------------------------------------
+ 1 1.1905 Xorg Xorg miChangeClip
+ 1 1.1905 Xorg Xorg miDestroyPictureClip
+ 2 2.3810 Xorg Xorg miRegionValidate
+ 4 4.7619 Xorg Xorg miDestroyPicture
+ 11 13.0952 Xorg Xorg FreeResource
+ 15 17.8571 Xorg Xorg DamageDestroy
+ 25 29.7619 Xorg Xorg miRegionDestroy
+ 25 29.7619 Xorg Xorg FreePicture
+16 0.0113 Xorg Xorg Xfree
+ 81 76.4151 libc-2.5.so Xorg free
+ 16 15.0943 Xorg Xorg Xfree [self]
+ 6 5.6604 libc-2.5.so Xorg _int_free
+ 3 2.8302 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 0.2114 Xorg Xorg ProcRenderFillRectangles
+ 944 99.7886 Xorg Xorg CompositeRects
+16 0.0113 Xorg Xorg miCompositeRects
+ 783 82.7696 Xorg Xorg miColorRects
+ 99 10.4651 Xorg Xorg CompositePicture
+ 21 2.2199 Xorg Xorg damagePolyFillRect
+ 16 1.6913 Xorg Xorg miCompositeRects [self]
+ 6 0.6342 Xorg Xorg ChangeGC
+ 4 0.4228 Xorg Xorg ValidateGC
+ 4 0.4228 Xorg Xorg miRenderColorToPixel
+ 4 0.4228 Xorg Xorg CreatePicture
+ 4 0.4228 libexa.so Xorg exaCreatePixmap
+ 2 0.2114 libextmod.so Xorg XvDestroyPixmap
+ 1 0.1057 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.1057 Xorg Xorg FreePicture
+ 1 0.1057 Xorg Xorg damageChangeClip
+-------------------------------------------------------------------------------
+16 0.0113 jbd.ko jbd do_get_write_access
+ 16 100.000 jbd.ko jbd do_get_write_access [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libc-2.5.so libc-2.5.so ptmalloc_init
+16 0.0113 libc-2.5.so libc-2.5.so _dl_addr
+ 16 100.000 libc-2.5.so libc-2.5.so _dl_addr [self]
+-------------------------------------------------------------------------------
+16 0.0113 vmlinux vmlinux do_page_fault
+ 16 100.000 vmlinux vmlinux do_page_fault [self]
+-------------------------------------------------------------------------------
+ 3 25.0000 Xorg Xorg miChangeClip
+ 4 33.3333 Xorg Xorg SetPictureClipRects
+ 5 41.6667 Xorg Xorg damagePolyFillRect
+15 0.0106 Xorg Xorg miRectsToRegion
+ 35 51.4706 Xorg Xorg miRegionCreate
+ 15 22.0588 Xorg Xorg miRegionValidate
+ 15 22.0588 Xorg Xorg miRectsToRegion [self]
+ 2 2.9412 Xorg Xorg Xalloc
+ 1 1.4706 Xorg Xorg QuickSortRects
+-------------------------------------------------------------------------------
+15 0.0106 jbd.ko jbd __journal_file_buffer
+ 15 100.000 jbd.ko jbd __journal_file_buffer [self]
+-------------------------------------------------------------------------------
+ 1 6.6667 ld-2.5.so ld-2.5.so do_lookup_x
+ 5 33.3333 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 9 60.0000 ld-2.5.so ld-2.5.so check_match.7793
+15 0.0106 ld-2.5.so ld-2.5.so strcmp
+ 15 100.000 ld-2.5.so ld-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+ 157 100.000 libfb.so libfb.so fbCreatePixmap
+15 0.0106 libfb.so libfb.so fbCreatePixmapBpp
+ 144 89.4410 Xorg libfb.so AllocatePixmap
+ 15 9.3168 libfb.so libfb.so fbCreatePixmapBpp [self]
+ 2 1.2422 Xorg libfb.so Xalloc
+-------------------------------------------------------------------------------
+15 0.0106 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+ 56 76.7123 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+ 15 20.5479 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock [self]
+ 2 2.7397 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+15 0.0106 vmlinux vmlinux find_next_zero_bit
+ 15 100.000 vmlinux vmlinux find_next_zero_bit [self]
+-------------------------------------------------------------------------------
+15 0.0106 vmlinux vmlinux radix_tree_tag_clear
+ 15 100.000 vmlinux vmlinux radix_tree_tag_clear [self]
+-------------------------------------------------------------------------------
+15 0.0106 vmlinux vmlinux run_timer_softirq
+ 15 100.000 vmlinux vmlinux run_timer_softirq [self]
+-------------------------------------------------------------------------------
+15 0.0106 vmlinux vmlinux test_set_page_writeback
+ 15 100.000 vmlinux vmlinux test_set_page_writeback [self]
+-------------------------------------------------------------------------------
+ 6 6.4516 Xorg Xorg miCompositeRects
+ 87 93.5484 Xorg Xorg miColorRects
+14 0.0099 Xorg Xorg ChangeGC
+ 77 82.7957 Xorg Xorg dixChangeGC
+ 14 15.0538 Xorg Xorg ChangeGC [self]
+ 2 2.1505 Xorg Xorg damageChangeGC
+-------------------------------------------------------------------------------
+ 1 1.0204 Xorg Xorg damageGlyphs
+ 2 2.0408 Xorg Xorg miCreateAlphaPicture
+ 4 4.0816 Xorg Xorg miCompositeRects
+ 91 92.8571 Xorg Xorg ProcRenderCreatePicture
+14 0.0099 Xorg Xorg CreatePicture
+ 57 50.4425 Xorg Xorg SetPictureToDefaults
+ 29 25.6637 Xorg Xorg AllocatePicture
+ 14 12.3894 Xorg Xorg CreatePicture [self]
+ 7 6.1947 Xorg Xorg PictureGetFilterId
+ 5 4.4248 Xorg Xorg ChangePicture
+ 1 0.8850 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg Xorg ProcCreatePixmap
+ 1 50.0000 Xorg Xorg miCreateAlphaPicture
+14 0.0099 Xorg Xorg DamageCreate
+ 14 50.0000 Xorg Xorg Xalloc
+ 14 50.0000 Xorg Xorg DamageCreate [self]
+-------------------------------------------------------------------------------
+ 1 0.5181 Xorg Xorg Dispatch
+ 192 99.4819 Xorg Xorg XaceCatchDispatchProc
+14 0.0099 Xorg Xorg ProcCreatePixmap
+ 131 67.8756 libexa.so Xorg exaCreatePixmap
+ 18 9.3264 Xorg Xorg AddResource
+ 15 7.7720 Xorg Xorg dixLookupDrawable
+ 14 7.2539 Xorg Xorg ProcCreatePixmap [self]
+ 4 2.0725 Xorg Xorg DamageRegister
+ 3 1.5544 libfb.so Xorg fbCreatePixmap
+ 2 1.0363 Xorg Xorg DamageSetReportAfterOp
+ 1 0.5181 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.5181 Xorg Xorg LegalNewID
+ 1 0.5181 Xorg Xorg XaceHook
+ 1 0.5181 Xorg Xorg damageInsertDamage
+ 1 0.5181 Xorg Xorg DamageCreate
+ 1 0.5181 libexa.so Xorg .plt
+-------------------------------------------------------------------------------
+ 2 14.2857 Xorg Xorg CallCallbacks
+ 12 85.7143 Xorg Xorg _CallCallbacks
+14 0.0099 Xorg Xorg SecurityCheckExtAccess
+ 14 100.000 Xorg Xorg SecurityCheckExtAccess [self]
+-------------------------------------------------------------------------------
+ 2 4.8780 Xorg Xorg ProcRenderCreatePicture
+ 39 95.1220 Xorg Xorg dixLookupDrawable
+14 0.0099 Xorg Xorg SecurityLookupIDByClass
+ 23 56.0976 Xorg Xorg XaceHook
+ 14 34.1463 Xorg Xorg SecurityLookupIDByClass [self]
+ 2 4.8780 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 4.8780 Xorg Xorg Hash
+-------------------------------------------------------------------------------
+14 0.0099 Xorg Xorg damageDestroyPixmap
+ 61 53.5088 libexa.so Xorg exaDestroyPixmap
+ 27 23.6842 Xorg Xorg DamageDestroy
+ 14 12.2807 Xorg Xorg damageDestroyPixmap [self]
+ 6 5.2632 libfb.so Xorg fbDestroyPixmap
+ 3 2.6316 Xorg Xorg damageRemoveDamage
+ 1 0.8772 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.8772 libexa.so Xorg __i686.get_pc_thunk.bx
+ 1 0.8772 libexa.so Xorg exaOffscreenFree
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so msort_with_tmp
+ 2 66.6667 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+14 0.0099 libc-2.5.so libc-2.5.so strcmp
+ 14 100.000 libc-2.5.so libc-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaFillRegionSolid
+14 0.0099 libexa.so libexa.so exaGetPixmapPitch
+ 14 100.000 libexa.so libexa.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+14 0.0099 vmlinux vmlinux __brelse
+ 14 100.000 vmlinux vmlinux __brelse [self]
+-------------------------------------------------------------------------------
+14 0.0099 vmlinux vmlinux find_busiest_group
+ 14 100.000 vmlinux vmlinux find_busiest_group [self]
+-------------------------------------------------------------------------------
+14 0.0099 vmlinux vmlinux get_page_from_freelist
+ 14 100.000 vmlinux vmlinux get_page_from_freelist [self]
+-------------------------------------------------------------------------------
+ 7 5.1095 Xorg Xorg XaceCatchExtProc
+ 130 94.8905 Xorg Xorg ProcRenderDispatch
+13 0.0092 Xorg Xorg ProcRenderFreePicture
+ 96 70.0730 Xorg Xorg FreeResource
+ 24 17.5182 Xorg Xorg SecurityLookupIDByType
+ 13 9.4891 Xorg Xorg ProcRenderFreePicture [self]
+ 2 1.4599 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.7299 Xorg Xorg Hash
+ 1 0.7299 Xorg Xorg FreePicture
+-------------------------------------------------------------------------------
+ 10 18.1818 Xorg Xorg XaceCatchExtProc
+ 45 81.8182 Xorg Xorg ProcRenderDispatch
+13 0.0092 Xorg Xorg ProcRenderSetPictureFilter
+ 27 49.0909 Xorg Xorg SetPictureFilter
+ 14 25.4545 Xorg Xorg SecurityLookupIDByType
+ 13 23.6364 Xorg Xorg ProcRenderSetPictureFilter [self]
+ 1 1.8182 Xorg Xorg PictureFindFilter
+-------------------------------------------------------------------------------
+ 3 5.0000 Xorg Xorg ProcRenderCreatePicture
+ 57 95.0000 Xorg Xorg CreatePicture
+13 0.0092 Xorg Xorg SetPictureToDefaults
+ 32 53.3333 Xorg Xorg PictureGetFilterId
+ 13 21.6667 Xorg Xorg SetPictureToDefaults [self]
+ 10 16.6667 libc-2.5.so Xorg strlen
+ 4 6.6667 Xorg Xorg CompareISOLatin1Lowered
+ 1 1.6667 Xorg Xorg .plt
+-------------------------------------------------------------------------------
+ 9 2.0225 Xorg Xorg main
+ 436 97.9775 Xorg Xorg Dispatch
+13 0.0092 Xorg Xorg XaceCatchDispatchProc
+ 192 43.1461 Xorg Xorg ProcCreatePixmap
+ 83 18.6517 Xorg Xorg ProcFreePixmap
+ 68 15.2809 Xorg Xorg ProcPolySegment
+ 20 4.4944 Xorg Xorg ProcSetClipRectangles
+ 17 3.8202 Xorg Xorg ProcCopyArea
+ 16 3.5955 Xorg Xorg ProcChangeGC
+ 13 2.9213 Xorg Xorg XaceCatchDispatchProc [self]
+ 13 2.9213 Xorg Xorg ProcPolyFillRectangle
+ 6 1.3483 Xorg Xorg ProcFreeGC
+ 5 1.1236 Xorg Xorg XaceHook
+ 3 0.6742 Xorg Xorg ProcCreateGC
+ 2 0.4494 libexa.so Xorg exaCreatePixmap
+ 2 0.4494 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.2247 Xorg Xorg AddResource
+ 1 0.2247 Xorg Xorg CallCallbacks
+ 1 0.2247 Xorg Xorg dixLookupDrawable
+ 1 0.2247 Xorg Xorg FreeResource
+ 1 0.2247 Xorg Xorg ProcQueryTree
+-------------------------------------------------------------------------------
+13 0.0092 Xorg Xorg miComputeCompositeClip
+ 13 54.1667 Xorg Xorg miComputeCompositeClip [self]
+ 4 16.6667 Xorg Xorg miTranslateRegion
+ 4 16.6667 Xorg Xorg miIntersect
+ 2 8.3333 libpixman.so.0.0.0 Xorg pixman_region_translate
+ 1 4.1667 libpixman.so.0.0.0 Xorg pixman_region_intersect
+-------------------------------------------------------------------------------
+13 0.0092 Xorg Xorg miGlyphExtents
+ 13 100.000 Xorg Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 2 3.5714 Xorg Xorg damageDamageBox
+ 4 7.1429 Xorg Xorg miComputeCompositeClip
+ 4 7.1429 Xorg Xorg miValidatePicture
+ 5 8.9286 Xorg Xorg damagePolyFillRect
+ 41 73.2143 Xorg Xorg damageDamageRegion
+13 0.0092 Xorg Xorg miIntersect
+ 49 75.3846 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 13 20.0000 Xorg Xorg miIntersect [self]
+ 3 4.6154 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+13 0.0092 intel_drv.so intel_drv.so I830EXAPrepareSolid
+ 13 86.6667 intel_drv.so intel_drv.so I830EXAPrepareSolid [self]
+ 1 6.6667 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+ 1 6.6667 libexa.so intel_drv.so exaGetPixmapOffset
+-------------------------------------------------------------------------------
+13 0.0092 intel_drv.so intel_drv.so i830_done_composite
+ 13 100.000 intel_drv.so intel_drv.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+13 0.0092 jbd.ko jbd journal_cancel_revoke
+ 13 100.000 jbd.ko jbd journal_cancel_revoke [self]
+-------------------------------------------------------------------------------
+13 0.0092 jbd.ko jbd journal_clean_one_cp_list
+ 13 100.000 jbd.ko jbd journal_clean_one_cp_list [self]
+-------------------------------------------------------------------------------
+13 0.0092 libexa.so libexa.so exaDestroyPixmap
+ 31 46.9697 libexa.so libexa.so exaOffscreenFree
+ 19 28.7879 libfb.so libexa.so fbDestroyPixmap
+ 13 19.6970 libexa.so libexa.so exaDestroyPixmap [self]
+ 3 4.5455 Xorg libexa.so Xfree
+-------------------------------------------------------------------------------
+ 245 100.000 libexa.so libexa.so exaPolyFillRect
+13 0.0092 libexa.so libexa.so exaFillRegionSolid
+ 117 46.4286 libexa.so libexa.so exaDoMigration
+ 52 20.6349 intel_drv.so libexa.so I830EXASolid
+ 19 7.5397 libfb.so libexa.so fbFillRegionSolid
+ 14 5.5556 intel_drv.so libexa.so I830EXAPrepareSolid
+ 13 5.1587 libexa.so libexa.so exaFillRegionSolid [self]
+ 11 4.3651 libexa.so libexa.so exaGetOffscreenPixmap
+ 4 1.5873 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 4 1.5873 libexa.so libexa.so .plt
+ 4 1.5873 libexa.so libexa.so ExaOffscreenMarkUsed
+ 4 1.5873 libexa.so libexa.so exaGetDrawablePixmap
+ 2 0.7937 libexa.so libexa.so exaMarkSync
+ 2 0.7937 libexa.so libexa.so exaGetPixmapPitch
+ 2 0.7937 intel_drv.so libexa.so .plt
+ 1 0.3968 libexa.so libexa.so exaMoveInPixmap
+ 1 0.3968 libexa.so libexa.so exaGetPixmapOffset
+ 1 0.3968 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 1 0.3968 libexa.so libexa.so __i686.get_pc_thunk.cx
+-------------------------------------------------------------------------------
+13 0.0092 libm-2.5.so libm-2.5.so cos
+ 13 100.000 libm-2.5.so libm-2.5.so cos [self]
+-------------------------------------------------------------------------------
+13 0.0092 libm-2.5.so libm-2.5.so sin
+ 13 100.000 libm-2.5.so libm-2.5.so sin [self]
+-------------------------------------------------------------------------------
+13 0.0092 vmlinux vmlinux do_path_lookup
+ 13 100.000 vmlinux vmlinux do_path_lookup [self]
+-------------------------------------------------------------------------------
+13 0.0092 vmlinux vmlinux fget_light
+ 13 100.000 vmlinux vmlinux fget_light [self]
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg Xorg ProcRenderSetPictureFilter
+ 20 95.2381 Xorg Xorg SetPictureFilter
+12 0.0085 Xorg Xorg PictureFindFilter
+ 12 57.1429 Xorg Xorg PictureFindFilter [self]
+ 9 42.8571 Xorg Xorg PictureGetFilterId
+-------------------------------------------------------------------------------
+ 1 0.8333 Xorg Xorg damageGlyphs
+ 1 0.8333 Xorg Xorg miCreateAlphaPicture
+ 2 1.6667 Xorg Xorg ProcCopyArea
+ 3 2.5000 Xorg Xorg ProcPolyFillRectangle
+ 4 3.3333 Xorg Xorg ProcPolySegment
+ 4 3.3333 Xorg Xorg miCompositeRects
+ 105 87.5000 Xorg Xorg miColorRects
+12 0.0085 Xorg Xorg ValidateGC
+ 126 86.8966 Xorg Xorg damageValidateGC
+ 12 8.2759 Xorg Xorg ValidateGC [self]
+ 4 2.7586 Xorg Xorg miBSCheapValidateGC
+ 3 2.0690 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+12 0.0085 ext3.ko ext3 __ext3_get_inode_loc
+ 12 100.000 ext3.ko ext3 __ext3_get_inode_loc [self]
+-------------------------------------------------------------------------------
+12 0.0085 ext3.ko ext3 bget_one
+ 12 100.000 ext3.ko ext3 bget_one [self]
+-------------------------------------------------------------------------------
+12 0.0085 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols)
+ 12 100.000 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 8.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 3 25.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 8 66.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+12 0.0085 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+ 12 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3 [self]
+-------------------------------------------------------------------------------
+12 0.0085 vmlinux vmlinux cache_alloc_refill
+ 12 100.000 vmlinux vmlinux cache_alloc_refill [self]
+-------------------------------------------------------------------------------
+12 0.0085 vmlinux vmlinux dput
+ 12 100.000 vmlinux vmlinux dput [self]
+-------------------------------------------------------------------------------
+12 0.0085 vmlinux vmlinux generic_writepages
+ 12 100.000 vmlinux vmlinux generic_writepages [self]
+-------------------------------------------------------------------------------
+ 1 2.3256 Xorg Xorg XaceCatchDispatchProc
+ 18 41.8605 Xorg Xorg ProcCreatePixmap
+ 24 55.8140 Xorg Xorg ProcRenderCreatePicture
+11 0.0078 Xorg Xorg AddResource
+ 22 51.1628 Xorg Xorg Xalloc
+ 11 25.5814 Xorg Xorg AddResource [self]
+ 10 23.2558 Xorg Xorg Hash
+-------------------------------------------------------------------------------
+ 3 2.8571 Xorg Xorg ProcRenderDispatch
+ 102 97.1429 Xorg Xorg ProcRenderCompositeGlyphs
+11 0.0078 Xorg Xorg FindGlyph
+ 94 89.5238 Xorg Xorg FindGlyphRef
+ 11 10.4762 Xorg Xorg FindGlyph [self]
+-------------------------------------------------------------------------------
+ 1 0.7874 Xorg Xorg miColorRects
+ 126 99.2126 Xorg Xorg ValidateGC
+11 0.0078 Xorg Xorg damageValidateGC
+ 116 91.3386 Xorg Xorg miBSCheapValidateGC
+ 11 8.6614 Xorg Xorg damageValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 1.6129 Xorg Xorg ProcPolyFillRectangle
+ 1 1.6129 Xorg Xorg ProcPolySegment
+ 1 1.6129 Xorg Xorg XaceCatchDispatchProc
+ 15 24.1935 Xorg Xorg ProcCreatePixmap
+ 44 70.9677 Xorg Xorg ProcRenderCreatePicture
+11 0.0078 Xorg Xorg dixLookupDrawable
+ 39 62.9032 Xorg Xorg SecurityLookupIDByClass
+ 11 17.7419 Xorg Xorg dixLookupDrawable [self]
+ 9 14.5161 Xorg Xorg XaceHook
+ 2 3.2258 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.6129 Xorg Xorg CallCallbacks
+-------------------------------------------------------------------------------
+ 1 9.0909 Xorg Xorg miColorRects
+ 1 9.0909 Xorg Xorg CompositeGlyphs
+ 1 9.0909 Xorg Xorg DamageRegister
+ 1 9.0909 Xorg Xorg damageReportPostOp
+ 1 9.0909 Xorg Xorg damagePolyFillRect
+ 1 9.0909 Xorg Xorg damageCopyArea
+ 1 9.0909 Xorg Xorg damageGlyphs
+ 1 9.0909 Xorg Xorg damageComposite
+ 3 27.2727 Xorg Xorg damageDamageRegion
+11 0.0078 Xorg Xorg getDrawableDamageRef
+ 11 91.6667 Xorg Xorg getDrawableDamageRef [self]
+ 1 8.3333 libfb.so Xorg fbGetWinPrivateIndex
+-------------------------------------------------------------------------------
+ 1 1.1905 Xorg Xorg miChangeClip
+ 2 2.3810 Xorg Xorg ValidateOnePicture
+ 10 11.9048 Xorg Xorg miColorRects
+ 35 41.6667 Xorg Xorg miRectsToRegion
+ 36 42.8571 Xorg Xorg miValidatePicture
+11 0.0078 Xorg Xorg miRegionCreate
+ 47 55.9524 Xorg Xorg Xalloc
+ 14 16.6667 Xorg Xorg miRegionInit
+ 11 13.0952 Xorg Xorg miRegionCreate [self]
+ 5 5.9524 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+ 3 3.5714 Xorg Xorg .plt
+ 3 3.5714 libc-2.5.so Xorg malloc
+ 1 1.1905 libpixman.so.0.0.0 Xorg pixman_region_init
+-------------------------------------------------------------------------------
+11 0.0078 ext3.ko ext3 ext3_try_to_allocate
+ 11 100.000 ext3.ko ext3 ext3_try_to_allocate [self]
+-------------------------------------------------------------------------------
+11 0.0078 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate
+ 11 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+11 0.0078 vmlinux vmlinux __follow_mount
+ 11 100.000 vmlinux vmlinux __follow_mount [self]
+-------------------------------------------------------------------------------
+11 0.0078 vmlinux vmlinux free_block
+ 11 100.000 vmlinux vmlinux free_block [self]
+-------------------------------------------------------------------------------
+11 0.0078 vmlinux vmlinux generic_permission
+ 11 100.000 vmlinux vmlinux generic_permission [self]
+-------------------------------------------------------------------------------
+ 2 6.4516 Xorg Xorg ProcRenderCreatePicture
+ 29 93.5484 Xorg Xorg CreatePicture
+10 0.0070 Xorg Xorg AllocatePicture
+ 20 64.5161 Xorg Xorg Xalloc
+ 10 32.2581 Xorg Xorg AllocatePicture [self]
+ 1 3.2258 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg ProcCreatePixmap
+10 0.0070 Xorg Xorg DamageRegister
+ 10 90.9091 Xorg Xorg DamageRegister [self]
+ 1 9.0909 Xorg Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 3 0.2879 Xorg Xorg XaceCatchExtProc
+ 1039 99.7121 Xorg Xorg ProcRenderDispatch
+10 0.0070 Xorg Xorg ProcRenderFillRectangles
+ 1000 95.9693 Xorg Xorg CompositeRects
+ 29 2.7831 Xorg Xorg SecurityLookupIDByType
+ 10 0.9597 Xorg Xorg ProcRenderFillRectangles [self]
+ 2 0.1919 Xorg Xorg miCompositeRects
+ 1 0.0960 Xorg Xorg XaceHook
+-------------------------------------------------------------------------------
+ 11 100.000 Xorg Xorg ProcRenderSetPictureTransform
+10 0.0070 Xorg Xorg SetPictureTransform
+ 10 90.9091 Xorg Xorg SetPictureTransform [self]
+ 1 9.0909 Xorg Xorg miChangePictureTransform
+-------------------------------------------------------------------------------
+ 1 1.1236 Xorg Xorg CompositePicture
+ 1 1.1236 Xorg Xorg CompositeTrapezoids
+ 2 2.2472 Xorg Xorg CompositeRects
+ 85 95.5056 Xorg Xorg ValidatePicture
+10 0.0070 Xorg Xorg ValidateOnePicture
+ 76 85.3933 Xorg Xorg miValidatePicture
+ 10 11.2360 Xorg Xorg ValidateOnePicture [self]
+ 2 2.2472 Xorg Xorg miRegionCreate
+ 1 1.1236 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+10 0.0070 jbd.ko jbd journal_dirty_data
+ 10 100.000 jbd.ko jbd journal_dirty_data [self]
+-------------------------------------------------------------------------------
+ 1 5.2632 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 18 94.7368 ld-2.5.so ld-2.5.so do_lookup_x
+10 0.0070 ld-2.5.so ld-2.5.so check_match.7793
+ 10 52.6316 ld-2.5.so ld-2.5.so check_match.7793 [self]
+ 9 47.3684 ld-2.5.so ld-2.5.so strcmp
+-------------------------------------------------------------------------------
+ 1 20.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 2 40.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 2 40.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+10 0.0070 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 10 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+10 0.0070 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 10 55.5556 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit [self]
+ 8 44.4444 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+10 0.0070 vmlinux vmlinux block_read_full_page
+ 10 100.000 vmlinux vmlinux block_read_full_page [self]
+-------------------------------------------------------------------------------
+10 0.0070 vmlinux vmlinux block_write_full_page
+ 10 100.000 vmlinux vmlinux block_write_full_page [self]
+-------------------------------------------------------------------------------
+10 0.0070 vmlinux vmlinux do_select
+ 10 100.000 vmlinux vmlinux do_select [self]
+-------------------------------------------------------------------------------
+10 0.0070 vmlinux vmlinux permission
+ 10 100.000 vmlinux vmlinux permission [self]
+-------------------------------------------------------------------------------
+10 0.0070 vmlinux vmlinux unix_stream_sendmsg
+ 10 100.000 vmlinux vmlinux unix_stream_sendmsg [self]
+-------------------------------------------------------------------------------
+ 27 100.000 Xorg Xorg damageDestroyPixmap
+9 0.0063 Xorg Xorg DamageDestroy
+ 15 53.5714 Xorg Xorg Xfree
+ 9 32.1429 Xorg Xorg DamageDestroy [self]
+ 2 7.1429 Xorg Xorg .plt
+ 1 3.5714 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 3.5714 libc-2.5.so Xorg free
+-------------------------------------------------------------------------------
+ 5 45.4545 Xorg Xorg main
+ 6 54.5455 Xorg Xorg Dispatch
+9 0.0063 Xorg Xorg FlushAllOutput
+ 9 81.8182 Xorg Xorg FlushAllOutput [self]
+ 1 9.0909 Xorg Xorg FlushClient
+ 1 9.0909 libc-2.5.so Xorg __i686.get_pc_thunk.cx
+-------------------------------------------------------------------------------
+ 2 6.2500 Xorg Xorg XaceCatchExtProc
+ 30 93.7500 Xorg Xorg ProcRenderDispatch
+9 0.0063 Xorg Xorg ProcRenderChangePicture
+ 14 43.7500 Xorg Xorg ChangePicture
+ 9 28.1250 Xorg Xorg ProcRenderChangePicture [self]
+ 8 25.0000 Xorg Xorg SecurityLookupIDByType
+ 1 3.1250 Xorg Xorg Ones
+-------------------------------------------------------------------------------
+ 7 22.5806 Xorg Xorg XaceCatchExtProc
+ 24 77.4194 Xorg Xorg ProcRenderDispatch
+9 0.0063 Xorg Xorg ProcRenderSetPictureTransform
+ 11 35.4839 Xorg Xorg SetPictureTransform
+ 9 29.0323 Xorg Xorg SecurityLookupIDByType
+ 9 29.0323 Xorg Xorg ProcRenderSetPictureTransform [self]
+ 2 6.4516 Xorg Xorg miChangePictureTransform
+-------------------------------------------------------------------------------
+ 30 100.000 Xorg Xorg miTrapezoidBounds
+9 0.0063 Xorg Xorg miLineFixedX
+ 21 70.0000 Xorg Xorg __divdi3
+ 9 30.0000 Xorg Xorg miLineFixedX [self]
+-------------------------------------------------------------------------------
+ 4 22.2222 Xorg Xorg miValidatePicture
+ 14 77.7778 Xorg Xorg miRegionCreate
+9 0.0063 Xorg Xorg miRegionInit
+ 9 50.0000 Xorg Xorg miRegionInit [self]
+ 8 44.4444 libpixman.so.0.0.0 Xorg pixman_region_init
+ 1 5.5556 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+-------------------------------------------------------------------------------
+9 0.0063 jbd.ko jbd __journal_temp_unlink_buffer
+ 9 100.000 jbd.ko jbd __journal_temp_unlink_buffer [self]
+-------------------------------------------------------------------------------
+ 20 39.2157 ld-2.5.so ld-2.5.so _dl_fixup
+ 31 60.7843 ld-2.5.so ld-2.5.so _dl_relocate_object
+9 0.0063 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 44 81.4815 ld-2.5.so ld-2.5.so do_lookup_x
+ 9 16.6667 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x [self]
+ 1 1.8519 ld-2.5.so ld-2.5.so check_match.7793
+-------------------------------------------------------------------------------
+9 0.0063 libexa.so libexa.so exaValidateGC
+ 69 79.3103 libfb.so libexa.so fbValidateGC
+ 9 10.3448 libexa.so libexa.so exaValidateGC [self]
+ 4 4.5977 libfb.so libexa.so __i686.get_pc_thunk.cx
+ 3 3.4483 libfb.so libexa.so fbGetGCPrivateIndex
+ 2 2.2989 Xorg libexa.so miComputeCompositeClip
+-------------------------------------------------------------------------------
+9 0.0063 libfb.so libfb.so fbDestroyPixmap
+ 16 64.0000 Xorg libfb.so Xfree
+ 9 36.0000 libfb.so libfb.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 35 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+9 0.0063 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 18 51.4286 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 9 25.7143 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init [self]
+ 7 20.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 1 2.8571 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+ 45 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+9 0.0063 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 35 76.0870 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 9 19.5652 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init [self]
+ 1 2.1739 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 1 2.1739 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 7 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+9 0.0063 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+ 9 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y [self]
+-------------------------------------------------------------------------------
+9 0.0063 libplds4.so libplds4.so (no symbols)
+ 9 100.000 libplds4.so libplds4.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+9 0.0063 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+ 9 100.000 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+9 0.0063 vmlinux vmlinux __dec_zone_page_state
+ 9 100.000 vmlinux vmlinux __dec_zone_page_state [self]
+-------------------------------------------------------------------------------
+9 0.0063 vmlinux vmlinux __kmalloc
+ 9 100.000 vmlinux vmlinux __kmalloc [self]
+-------------------------------------------------------------------------------
+9 0.0063 vmlinux vmlinux irq_entries_start
+ 9 100.000 vmlinux vmlinux irq_entries_start [self]
+-------------------------------------------------------------------------------
+9 0.0063 vmlinux vmlinux link_path_walk
+ 9 100.000 vmlinux vmlinux link_path_walk [self]
+-------------------------------------------------------------------------------
+9 0.0063 vmlinux vmlinux page_remove_rmap
+ 9 100.000 vmlinux vmlinux page_remove_rmap [self]
+-------------------------------------------------------------------------------
+9 0.0063 vmlinux vmlinux radix_tree_tag_set
+ 9 100.000 vmlinux vmlinux radix_tree_tag_set [self]
+-------------------------------------------------------------------------------
+9 0.0063 vmlinux vmlinux release_pages
+ 9 100.000 vmlinux vmlinux release_pages [self]
+-------------------------------------------------------------------------------
+ 1 3.5714 Xorg Xorg ProcRenderDispatch
+ 27 96.4286 Xorg Xorg ProcRenderSetPictureFilter
+8 0.0056 Xorg Xorg SetPictureFilter
+ 20 71.4286 Xorg Xorg PictureFindFilter
+ 8 28.5714 Xorg Xorg SetPictureFilter [self]
+-------------------------------------------------------------------------------
+ 1 1.0989 Xorg Xorg ProcRenderComposite
+ 3 3.2967 Xorg Xorg ProcRenderCompositeGlyphs
+ 8 8.7912 Xorg Xorg CompositeTrapezoids
+ 15 16.4835 Xorg Xorg CompositePicture
+ 20 21.9780 Xorg Xorg CompositeGlyphs
+ 44 48.3516 Xorg Xorg CompositeRects
+8 0.0056 Xorg Xorg ValidatePicture
+ 85 84.1584 Xorg Xorg ValidateOnePicture
+ 8 7.9208 Xorg Xorg ValidatePicture [self]
+ 4 3.9604 Xorg Xorg __i686.get_pc_thunk.bx
+ 4 3.9604 Xorg Xorg miValidatePicture
+-------------------------------------------------------------------------------
+ 40 100.000 Xorg Xorg miTrapezoids
+8 0.0056 Xorg Xorg miTrapezoidBounds
+ 30 75.0000 Xorg Xorg miLineFixedX
+ 8 20.0000 Xorg Xorg miTrapezoidBounds [self]
+ 2 5.0000 Xorg Xorg __divdi3
+-------------------------------------------------------------------------------
+ 20 100.000 libc-2.5.so libc-2.5.so realloc
+8 0.0056 libc-2.5.so libc-2.5.so _int_realloc
+ 8 38.0952 libc-2.5.so libc-2.5.so _int_realloc [self]
+ 6 28.5714 libc-2.5.so libc-2.5.so _int_malloc
+ 4 19.0476 libc-2.5.so libc-2.5.so _int_free
+ 3 14.2857 libc-2.5.so libc-2.5.so memcpy
+-------------------------------------------------------------------------------
+8 0.0056 libc-2.5.so libc-2.5.so strchr
+ 8 100.000 libc-2.5.so libc-2.5.so strchr [self]
+-------------------------------------------------------------------------------
+8 0.0056 libexa.so libexa.so exaRasterizeTrapezoid
+ 8364 84.9482 libfb.so libexa.so fbRasterizeTrapezoid
+ 1459 14.8182 libexa.so libexa.so exaPrepareAccess
+ 8 0.0813 libexa.so libexa.so exaRasterizeTrapezoid [self]
+ 5 0.0508 libexa.so libexa.so exaPixmapDirty
+ 2 0.0203 libpixman.so.0.0.0 libexa.so pixman_rasterize_trapezoid
+ 2 0.0203 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 2 0.0203 libexa.so libexa.so exaFinishAccess
+ 2 0.0203 libfb.so libexa.so .plt
+ 1 0.0102 libpixman.so.0.0.0 libexa.so pixman_image_unref
+ 1 0.0102 libexa.so libexa.so .plt
+-------------------------------------------------------------------------------
+8 0.0056 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 8265 99.2197 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+ 45 0.5402 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 8 0.0960 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid [self]
+ 7 0.0840 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+ 4 0.0480 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 1 0.0120 libc-2.5.so libpixman.so.0.0.0 memset
+-------------------------------------------------------------------------------
+8 0.0056 libpthread-2.5.so libpthread-2.5.so pthread_getspecific
+ 8 100.000 libpthread-2.5.so libpthread-2.5.so pthread_getspecific [self]
+-------------------------------------------------------------------------------
+8 0.0056 vmlinux vmlinux __wake_up
+ 8 100.000 vmlinux vmlinux __wake_up [self]
+-------------------------------------------------------------------------------
+8 0.0056 vmlinux vmlinux ahci_interrupt
+ 8 100.000 vmlinux vmlinux ahci_interrupt [self]
+-------------------------------------------------------------------------------
+8 0.0056 vmlinux vmlinux remove_wait_queue
+ 8 100.000 vmlinux vmlinux remove_wait_queue [self]
+-------------------------------------------------------------------------------
+8 0.0056 vmlinux vmlinux test_clear_page_writeback
+ 8 100.000 vmlinux vmlinux test_clear_page_writeback [self]
+-------------------------------------------------------------------------------
+ 1 5.0000 Xorg Xorg damagePolyFillRect
+ 1 5.0000 Xorg Xorg damageGlyphs
+ 18 90.0000 Xorg Xorg damageReportPostOp
+7 0.0049 Xorg Xorg DamageReportDamage
+ 10 50.0000 Xorg Xorg miUnion
+ 7 35.0000 Xorg Xorg DamageReportDamage [self]
+ 3 15.0000 Xorg Xorg .plt
+-------------------------------------------------------------------------------
+ 1 0.0158 Xorg Xorg ProcRenderComposite
+ 1 0.0158 Xorg Xorg miTrapezoids
+ 6335 99.9684 Xorg Xorg CompositePicture
+7 0.0049 Xorg Xorg damageComposite
+ 6300 99.4161 libexa.so Xorg exaComposite
+ 25 0.3945 Xorg Xorg damageDamageBox
+ 7 0.1105 Xorg Xorg damageComposite [self]
+ 3 0.0473 Xorg Xorg damageReportPostOp
+ 1 0.0158 Xorg Xorg getDrawableDamageRef
+ 1 0.0158 libexa.so Xorg exaGetDrawablePixmap
+-------------------------------------------------------------------------------
+7 0.0049 ext3.ko ext3 ext3_get_blocks_handle
+ 7 100.000 ext3.ko ext3 ext3_get_blocks_handle [self]
+-------------------------------------------------------------------------------
+7 0.0049 ext3.ko ext3 ext3_new_inode
+ 7 100.000 ext3.ko ext3 ext3_new_inode [self]
+-------------------------------------------------------------------------------
+ 6 100.000 intel_drv.so intel_drv.so I830DRISwapContext
+7 0.0049 intel_drv.so intel_drv.so I830EmitFlush
+ 7 100.000 intel_drv.so intel_drv.so I830EmitFlush [self]
+-------------------------------------------------------------------------------
+7 0.0049 libc-2.5.so libc-2.5.so bsearch
+ 7 70.0000 libc-2.5.so libc-2.5.so bsearch [self]
+ 3 30.0000 libgtk-x11-2.0.so.0.1000.12 libc-2.5.so (no symbols)
+-------------------------------------------------------------------------------
+7 0.0049 libcrypto.so.0.9.8 libcrypto.so.0.9.8 (no symbols)
+ 7 100.000 libcrypto.so.0.9.8 libcrypto.so.0.9.8 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 libdri.so libdri.so DRIBlockHandler
+ 6 85.7143 libdri.so libdri.so DRIDoBlockHandler
+7 0.0049 libdri.so libdri.so DRIUnlock
+ 7 100.000 libdri.so libdri.so DRIUnlock [self]
+-------------------------------------------------------------------------------
+7 0.0049 libfb.so libfb.so .plt
+ 7 100.000 libfb.so libfb.so .plt [self]
+-------------------------------------------------------------------------------
+7 0.0049 libm-2.5.so libm-2.5.so tan
+ 7 100.000 libm-2.5.so libm-2.5.so tan [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux __find_get_block_slow
+ 7 100.000 vmlinux vmlinux __find_get_block_slow [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux __insert_inode_hash
+ 7 100.000 vmlinux vmlinux __insert_inode_hash [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux __wake_up_bit
+ 7 100.000 vmlinux vmlinux __wake_up_bit [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux copy_page_range
+ 7 100.000 vmlinux vmlinux copy_page_range [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux core_sys_select
+ 7 100.000 vmlinux vmlinux core_sys_select [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux handle_edge_irq
+ 7 100.000 vmlinux vmlinux handle_edge_irq [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux radix_tree_lookup
+ 7 100.000 vmlinux vmlinux radix_tree_lookup [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux rebalance_tick
+ 7 100.000 vmlinux vmlinux rebalance_tick [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux sched_clock
+ 7 100.000 vmlinux vmlinux sched_clock [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux softlockup_tick
+ 7 100.000 vmlinux vmlinux softlockup_tick [self]
+-------------------------------------------------------------------------------
+7 0.0049 vmlinux vmlinux unix_stream_recvmsg
+ 7 100.000 vmlinux vmlinux unix_stream_recvmsg [self]
+-------------------------------------------------------------------------------
+ 1 0.0999 Xorg Xorg ProcRenderDispatch
+ 1000 99.9001 Xorg Xorg ProcRenderFillRectangles
+6 0.0042 Xorg Xorg CompositeRects
+ 944 94.3057 Xorg Xorg miCompositeRects
+ 44 4.3956 Xorg Xorg ValidatePicture
+ 6 0.5994 Xorg Xorg CompositeRects [self]
+ 2 0.1998 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 0.1998 Xorg Xorg miColorRects
+ 2 0.1998 Xorg Xorg ValidateOnePicture
+ 1 0.0999 Xorg Xorg PictureMatchFormat
+-------------------------------------------------------------------------------
+ 1 1.5873 Xorg Xorg miCompositeRects
+ 1 1.5873 Xorg Xorg ProcRenderFreePicture
+ 7 11.1111 Xorg Xorg miTrapezoids
+ 54 85.7143 Xorg Xorg FreeResource
+6 0.0042 Xorg Xorg FreePicture
+ 49 45.3704 libextmod.so Xorg XvDestroyPixmap
+ 25 23.1481 Xorg Xorg miDestroyPicture
+ 25 23.1481 Xorg Xorg Xfree
+ 6 5.5556 Xorg Xorg FreePicture [self]
+ 2 1.8519 libextmod.so Xorg __i686.get_pc_thunk.bx
+ 1 0.9259 Xorg Xorg miRegionDestroy
+-------------------------------------------------------------------------------
+ 3 3.4884 Xorg Xorg Dispatch
+ 83 96.5116 Xorg Xorg XaceCatchDispatchProc
+6 0.0042 Xorg Xorg ProcFreePixmap
+ 69 80.2326 Xorg Xorg FreeResource
+ 8 9.3023 Xorg Xorg SecurityLookupIDByType
+ 6 6.9767 Xorg Xorg ProcFreePixmap [self]
+ 2 2.3256 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.1628 Xorg Xorg dixDestroyPixmap
+-------------------------------------------------------------------------------
+ 2 7.1429 Xorg Xorg CompositeGlyphs
+ 2 7.1429 Xorg Xorg damagePolySegment
+ 3 10.7143 Xorg Xorg damageComposite
+ 6 21.4286 Xorg Xorg damageGlyphs
+ 15 53.5714 Xorg Xorg damagePolyFillRect
+6 0.0042 Xorg Xorg damageReportPostOp
+ 18 64.2857 Xorg Xorg DamageReportDamage
+ 6 21.4286 Xorg Xorg damageReportPostOp [self]
+ 2 7.1429 Xorg Xorg miUnion
+ 1 3.5714 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 3.5714 Xorg Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 1 3.8462 Xorg Xorg FreePicture
+ 1 3.8462 Xorg Xorg damagePolyFillRect
+ 1 3.8462 Xorg Xorg miBSCheapDestroyClip
+ 2 7.6923 Xorg Xorg miDestroyPictureClip
+ 8 30.7692 Xorg Xorg miDestroyClip
+ 13 50.0000 Xorg Xorg miDestroyPicture
+6 0.0042 Xorg Xorg miRegionDestroy
+ 25 56.8182 Xorg Xorg Xfree
+ 6 13.6364 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 6 13.6364 Xorg Xorg miRegionDestroy [self]
+ 3 6.8182 libc-2.5.so Xorg free
+ 2 4.5455 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 1 2.2727 Xorg Xorg .plt
+ 1 2.2727 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 15 100.000 Xorg Xorg miRectsToRegion
+6 0.0042 Xorg Xorg miRegionValidate
+ 6 40.0000 Xorg Xorg miRegionValidate [self]
+ 3 20.0000 Xorg Xorg Xalloc
+ 2 13.3333 Xorg Xorg miUnionO
+ 2 13.3333 Xorg Xorg Xfree
+ 1 6.6667 Xorg Xorg QuickSortRects
+ 1 6.6667 Xorg Xorg miRectAlloc
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg WakeupHandler
+6 0.0042 Xorg Xorg xf86Wakeup
+ 6 100.000 Xorg Xorg xf86Wakeup [self]
+-------------------------------------------------------------------------------
+6 0.0042 ext3.ko ext3 ext3_ordered_writepage
+ 6 100.000 ext3.ko ext3 ext3_ordered_writepage [self]
+-------------------------------------------------------------------------------
+6 0.0042 ext3.ko ext3 ext3_test_allocatable
+ 6 100.000 ext3.ko ext3 ext3_test_allocatable [self]
+-------------------------------------------------------------------------------
+6 0.0042 ext3.ko ext3 walk_page_buffers
+ 6 100.000 ext3.ko ext3 walk_page_buffers [self]
+-------------------------------------------------------------------------------
+6 0.0042 jbd.ko jbd __journal_remove_journal_head
+ 6 100.000 jbd.ko jbd __journal_remove_journal_head [self]
+-------------------------------------------------------------------------------
+6 0.0042 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx
+ 6 100.000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+6 0.0042 libm-2.5.so libm-2.5.so floorf
+ 6 100.000 libm-2.5.so libm-2.5.so floorf [self]
+-------------------------------------------------------------------------------
+6 0.0042 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 6 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux __mark_inode_dirty
+ 6 100.000 vmlinux vmlinux __mark_inode_dirty [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux account_user_time
+ 6 100.000 vmlinux vmlinux account_user_time [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux clear_page_dirty_for_io
+ 6 100.000 vmlinux vmlinux clear_page_dirty_for_io [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux d_alloc
+ 6 100.000 vmlinux vmlinux d_alloc [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux dnotify_parent
+ 6 100.000 vmlinux vmlinux dnotify_parent [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux do_mmap_pgoff
+ 6 100.000 vmlinux vmlinux do_mmap_pgoff [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux memcpy
+ 6 100.000 vmlinux vmlinux memcpy [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux mutex_lock
+ 6 100.000 vmlinux vmlinux mutex_lock [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux page_address
+ 6 100.000 vmlinux vmlinux page_address [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux page_waitqueue
+ 6 100.000 vmlinux vmlinux page_waitqueue [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux sock_aio_write
+ 6 100.000 vmlinux vmlinux sock_aio_write [self]
+-------------------------------------------------------------------------------
+6 0.0042 vmlinux vmlinux task_rq_lock
+ 6 100.000 vmlinux vmlinux task_rq_lock [self]
+-------------------------------------------------------------------------------
+ 99 1.5576 Xorg Xorg miCompositeRects
+ 1966 30.9314 Xorg Xorg ProcRenderComposite
+ 4291 67.5110 Xorg Xorg miTrapezoids
+5 0.0035 Xorg Xorg CompositePicture
+ 6335 99.6539 Xorg Xorg damageComposite
+ 15 0.2360 Xorg Xorg ValidatePicture
+ 5 0.0787 Xorg Xorg CompositePicture [self]
+ 1 0.0157 Xorg Xorg ValidateOnePicture
+ 1 0.0157 Xorg Xorg damageDamageBox
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg miColorRects
+ 1 33.3333 Xorg Xorg damageGlyphs
+ 1 33.3333 Xorg Xorg miCreateAlphaPicture
+5 0.0035 Xorg Xorg FreeScratchGC
+ 5 100.000 Xorg Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg Xorg ProcCreatePixmap
+ 4 80.0000 Xorg Xorg ProcRenderCreatePicture
+5 0.0035 Xorg Xorg LegalNewID
+ 5 100.000 Xorg Xorg LegalNewID [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg ProcRenderDispatch
+5 0.0035 Xorg Xorg PictOpValid
+ 5 100.000 Xorg Xorg PictOpValid [self]
+-------------------------------------------------------------------------------
+ 1981 100.000 Xorg Xorg ProcRenderDispatch
+5 0.0035 Xorg Xorg ProcRenderComposite
+ 1966 99.2428 Xorg Xorg CompositePicture
+ 8 0.4038 Xorg Xorg SecurityLookupIDByType
+ 5 0.2524 Xorg Xorg ProcRenderComposite [self]
+ 1 0.0505 Xorg Xorg ValidatePicture
+ 1 0.0505 Xorg Xorg damageComposite
+-------------------------------------------------------------------------------
+ 2 7.6923 Xorg Xorg GetScratchGC
+ 24 92.3077 Xorg Xorg damageChangeClip
+5 0.0035 Xorg Xorg miBSCheapChangeClip
+ 19 73.0769 Xorg Xorg miChangeClip
+ 5 19.2308 Xorg Xorg miBSCheapChangeClip [self]
+ 2 7.6923 Xorg Xorg miDestroyClip
+-------------------------------------------------------------------------------
+ 25 100.000 Xorg Xorg FreePicture
+5 0.0035 Xorg Xorg miDestroyPicture
+ 13 46.4286 Xorg Xorg miRegionDestroy
+ 6 21.4286 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 5 17.8571 Xorg Xorg miDestroyPicture [self]
+ 4 14.2857 Xorg Xorg Xfree
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg Xorg miValidatePicture
+ 2 28.5714 Xorg Xorg damagePolyFillRect
+ 4 57.1429 Xorg Xorg miComputeCompositeClip
+5 0.0035 Xorg Xorg miTranslateRegion
+ 9 60.0000 libpixman.so.0.0.0 Xorg pixman_region_translate
+ 5 33.3333 Xorg Xorg miTranslateRegion [self]
+ 1 6.6667 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+5 0.0035 ext3.ko ext3 ext3_get_group_desc
+ 5 100.000 ext3.ko ext3 ext3_get_group_desc [self]
+-------------------------------------------------------------------------------
+5 0.0035 ext3.ko ext3 ext3_new_blocks
+ 5 100.000 ext3.ko ext3 ext3_new_blocks [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+5 0.0035 libc-2.5.so libc-2.5.so __read_nocancel
+ 5 100.000 libc-2.5.so libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+5 0.0035 libfb.so libfb.so __i686.get_pc_thunk.cx
+ 5 100.000 libfb.so libfb.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 4.5455 libfb.so libfb.so fbComposite
+ 21 95.4545 libfb.so libfb.so fbRasterizeTrapezoid
+5 0.0035 libfb.so libfb.so image_from_pict
+ 15 68.1818 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 5 22.7273 libfb.so libfb.so image_from_pict [self]
+ 1 4.5455 libpixman.so.0.0.0 libfb.so .plt
+ 1 4.5455 libpixman.so.0.0.0 libfb.so pixman_image_set_component_alpha
+-------------------------------------------------------------------------------
+ 4 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+5 0.0035 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 5 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y [self]
+-------------------------------------------------------------------------------
+5 0.0035 libpthread-2.5.so libpthread-2.5.so pthread_self
+ 5 100.000 libpthread-2.5.so libpthread-2.5.so pthread_self [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux __alloc_skb
+ 5 100.000 vmlinux vmlinux __alloc_skb [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux __do_softirq
+ 5 100.000 vmlinux vmlinux __do_softirq [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux __pollwait
+ 5 100.000 vmlinux vmlinux __pollwait [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux __rcu_pending
+ 5 100.000 vmlinux vmlinux __rcu_pending [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux bit_waitqueue
+ 5 100.000 vmlinux vmlinux bit_waitqueue [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux do_softirq
+ 5 100.000 vmlinux vmlinux do_softirq [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux do_sync_write
+ 5 100.000 vmlinux vmlinux do_sync_write [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux drain_array
+ 5 100.000 vmlinux vmlinux drain_array [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux error_code
+ 5 100.000 vmlinux vmlinux error_code [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux filemap_nopage
+ 5 100.000 vmlinux vmlinux filemap_nopage [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux flush_tlb_page
+ 5 100.000 vmlinux vmlinux flush_tlb_page [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux kmem_cache_zalloc
+ 5 100.000 vmlinux vmlinux kmem_cache_zalloc [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux mutex_unlock
+ 5 100.000 vmlinux vmlinux mutex_unlock [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux nr_active
+ 5 100.000 vmlinux vmlinux nr_active [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux page_add_file_rmap
+ 5 100.000 vmlinux vmlinux page_add_file_rmap [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux run_posix_cpu_timers
+ 5 100.000 vmlinux vmlinux run_posix_cpu_timers [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux scheduler_tick
+ 5 100.000 vmlinux vmlinux scheduler_tick [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux sock_def_readable
+ 5 100.000 vmlinux vmlinux sock_def_readable [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux sock_poll
+ 5 100.000 vmlinux vmlinux sock_poll [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux up_read
+ 5 100.000 vmlinux vmlinux up_read [self]
+-------------------------------------------------------------------------------
+5 0.0035 vmlinux vmlinux vfs_permission
+ 5 100.000 vmlinux vmlinux vfs_permission [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg miCreateAlphaPicture
+ 2 66.6667 Xorg Xorg ProcCreatePixmap
+4 0.0028 Xorg Xorg DamageSetReportAfterOp
+ 4 100.000 Xorg Xorg DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg XaceCatchExtProc
+4 0.0028 Xorg Xorg GetExtensionEntry
+ 4 100.000 Xorg Xorg GetExtensionEntry [self]
+-------------------------------------------------------------------------------
+ 2 2.8571 Xorg Xorg Dispatch
+ 68 97.1429 Xorg Xorg XaceCatchDispatchProc
+4 0.0028 Xorg Xorg ProcPolySegment
+ 55 78.5714 Xorg Xorg damagePolySegment
+ 4 5.7143 Xorg Xorg ValidateGC
+ 4 5.7143 Xorg Xorg dixLookupGC
+ 4 5.7143 Xorg Xorg ProcPolySegment [self]
+ 2 2.8571 Xorg Xorg damageDamageBox
+ 1 1.4286 Xorg Xorg dixLookupDrawable
+-------------------------------------------------------------------------------
+ 1 3.3333 Xorg Xorg dixChangeGC
+ 1 3.3333 Xorg Xorg miCompositeRects
+ 2 6.6667 Xorg Xorg miColorRects
+ 9 30.0000 Xorg Xorg SetClipRects
+ 17 56.6667 Xorg Xorg GetScratchGC
+4 0.0028 Xorg Xorg damageChangeClip
+ 24 80.0000 Xorg Xorg miBSCheapChangeClip
+ 4 13.3333 Xorg Xorg damageChangeClip [self]
+ 2 6.6667 Xorg Xorg miChangeClip
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg damageDestroyPixmap
+4 0.0028 Xorg Xorg damageRemoveDamage
+ 4 100.000 Xorg Xorg damageRemoveDamage [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 Xorg Xorg Dispatch
+ 3 75.0000 Xorg Xorg WaitForSomething
+4 0.0028 Xorg Xorg mffs
+ 4 100.000 Xorg Xorg mffs [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg damageChangeGC
+4 0.0028 Xorg Xorg miChangeGC
+ 4 100.000 Xorg Xorg miChangeGC [self]
+-------------------------------------------------------------------------------
+ 2 14.2857 Xorg Xorg miBSCheapChangeClip
+ 12 85.7143 Xorg Xorg miChangeClip
+4 0.0028 Xorg Xorg miDestroyClip
+ 8 57.1429 Xorg Xorg miRegionDestroy
+ 4 28.5714 Xorg Xorg miDestroyClip [self]
+ 1 7.1429 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 7.1429 libpixman.so.0.0.0 Xorg pixman_region_fini
+-------------------------------------------------------------------------------
+4 0.0028 ehci-hcd.ko ehci_hcd ehci_hub_status_data
+ 4 100.000 ehci-hcd.ko ehci_hcd ehci_hub_status_data [self]
+-------------------------------------------------------------------------------
+4 0.0028 ext3.ko ext3 ext3_mkdir
+ 4 100.000 ext3.ko ext3 ext3_mkdir [self]
+-------------------------------------------------------------------------------
+4 0.0028 ext3.ko ext3 ext3_permission
+ 4 100.000 ext3.ko ext3 ext3_permission [self]
+-------------------------------------------------------------------------------
+4 0.0028 ext3.ko ext3 ext3_truncate
+ 4 100.000 ext3.ko ext3 ext3_truncate [self]
+-------------------------------------------------------------------------------
+4 0.0028 jbd.ko jbd journal_remove_journal_head
+ 4 100.000 jbd.ko jbd journal_remove_journal_head [self]
+-------------------------------------------------------------------------------
+4 0.0028 jbd.ko jbd journal_start
+ 4 100.000 jbd.ko jbd journal_start [self]
+-------------------------------------------------------------------------------
+ 48 100.000 ld-2.5.so ld-2.5.so _dl_sysdep_start
+4 0.0028 ld-2.5.so ld-2.5.so dl_main
+ 28 58.3333 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 9 18.7500 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 4 8.3333 ld-2.5.so ld-2.5.so dl_main [self]
+ 3 6.2500 ld-2.5.so ld-2.5.so _dl_receive_error
+ 2 4.1667 ld-2.5.so ld-2.5.so _dl_init_paths
+ 1 2.0833 ld-2.5.so ld-2.5.so _dl_add_to_slotinfo
+ 1 2.0833 ld-2.5.so ld-2.5.so init_tls
+-------------------------------------------------------------------------------
+4 0.0028 libc-2.5.so libc-2.5.so ___newselect_nocancel
+ 4 100.000 libc-2.5.so libc-2.5.so ___newselect_nocancel [self]
+-------------------------------------------------------------------------------
+4 0.0028 libc-2.5.so libc-2.5.so __errno_location
+ 4 100.000 libc-2.5.so libc-2.5.so __errno_location [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so read_alias_file
+4 0.0028 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+ 4 50.0000 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1 [self]
+ 2 25.0000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 12.5000 libc-2.5.so libc-2.5.so _int_free
+ 1 12.5000 libc-2.5.so libc-2.5.so free
+-------------------------------------------------------------------------------
+4 0.0028 libc-2.5.so libc-2.5.so poll
+ 4 100.000 libc-2.5.so libc-2.5.so poll [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+4 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 4 57.1429 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step [self]
+ 3 42.8571 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+4 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+ 6 33.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 4 22.2222 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits [self]
+ 3 16.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 3 16.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+ 2 11.1111 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+-------------------------------------------------------------------------------
+4 0.0028 libpthread-2.5.so libpthread-2.5.so __errno_location
+ 4 100.000 libpthread-2.5.so libpthread-2.5.so __errno_location [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux __first_cpu
+ 4 100.000 vmlinux vmlinux __first_cpu [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux __pagevec_lru_add_active
+ 4 100.000 vmlinux vmlinux __pagevec_lru_add_active [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux ahci_qc_issue
+ 4 100.000 vmlinux vmlinux ahci_qc_issue [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux arch_get_unmapped_area_topdown
+ 4 100.000 vmlinux vmlinux arch_get_unmapped_area_topdown [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux create_empty_buffers
+ 4 100.000 vmlinux vmlinux create_empty_buffers [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux do_mpage_readpage
+ 4 100.000 vmlinux vmlinux do_mpage_readpage [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux do_timer
+ 4 100.000 vmlinux vmlinux do_timer [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux find_next_bit
+ 4 100.000 vmlinux vmlinux find_next_bit [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux find_vma_prepare
+ 4 100.000 vmlinux vmlinux find_vma_prepare [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux find_vma_prev
+ 4 100.000 vmlinux vmlinux find_vma_prev [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux irq_exit
+ 4 100.000 vmlinux vmlinux irq_exit [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux normal_poll
+ 4 100.000 vmlinux vmlinux normal_poll [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux percpu_counter_mod
+ 4 100.000 vmlinux vmlinux percpu_counter_mod [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux put_page
+ 4 100.000 vmlinux vmlinux put_page [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux radix_tree_gang_lookup_tag
+ 4 100.000 vmlinux vmlinux radix_tree_gang_lookup_tag [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux scsi_prep_fn
+ 4 100.000 vmlinux vmlinux scsi_prep_fn [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux sock_alloc_send_skb
+ 4 100.000 vmlinux vmlinux sock_alloc_send_skb [self]
+-------------------------------------------------------------------------------
+4 0.0028 vmlinux vmlinux strnlen_user
+ 4 100.000 vmlinux vmlinux strnlen_user [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg ProcFreeGC
+ 2 66.6667 Xorg Xorg FreeResource
+3 0.0021 Xorg Xorg FlushClientCaches
+ 3 100.000 Xorg Xorg FlushClientCaches [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageGlyphs
+3 0.0021 Xorg Xorg GetScratchPixmapHeader
+ 5 62.5000 Xorg Xorg miModifyPixmapHeader
+ 3 37.5000 Xorg Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 16 100.000 Xorg Xorg XaceCatchDispatchProc
+3 0.0021 Xorg Xorg ProcChangeGC
+ 9 56.2500 Xorg Xorg dixChangeGC
+ 3 18.7500 Xorg Xorg dixLookupGC
+ 3 18.7500 Xorg Xorg ProcChangeGC [self]
+ 1 6.2500 Xorg Xorg Ones
+-------------------------------------------------------------------------------
+ 2 9.5238 Xorg Xorg damageChangeClip
+ 19 90.4762 Xorg Xorg miBSCheapChangeClip
+3 0.0021 Xorg Xorg miChangeClip
+ 12 57.1429 Xorg Xorg miDestroyClip
+ 3 14.2857 Xorg Xorg miRectsToRegion
+ 3 14.2857 Xorg Xorg miChangeClip [self]
+ 1 4.7619 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 4.7619 Xorg Xorg miRegionCreate
+ 1 4.7619 Xorg Xorg Xfree
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg SetPictureTransform
+ 2 66.6667 Xorg Xorg ProcRenderSetPictureTransform
+3 0.0021 Xorg Xorg miChangePictureTransform
+ 3 100.000 Xorg Xorg miChangePictureTransform [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg WakeupHandler
+3 0.0021 Xorg Xorg xf86VTSwitchPending
+ 3 100.000 Xorg Xorg xf86VTSwitchPending [self]
+-------------------------------------------------------------------------------
+3 0.0021 ext3.ko ext3 ext3_find_entry
+ 3 100.000 ext3.ko ext3 ext3_find_entry [self]
+-------------------------------------------------------------------------------
+3 0.0021 ext3.ko ext3 ext3_journal_start_sb
+ 3 100.000 ext3.ko ext3 ext3_journal_start_sb [self]
+-------------------------------------------------------------------------------
+3 0.0021 grep grep (no symbols)
+ 3 100.000 grep grep (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 intel_drv.so intel_drv.so I830DRISwapContext
+3 0.0021 intel_drv.so intel_drv.so I830RefreshRing
+ 3 100.000 intel_drv.so intel_drv.so I830RefreshRing [self]
+-------------------------------------------------------------------------------
+ 6 17.6471 ld-2.5.so ld-2.5.so dl_open_worker
+ 28 82.3529 ld-2.5.so ld-2.5.so dl_main
+3 0.0021 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 31 91.1765 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 3 8.8235 ld-2.5.so ld-2.5.so _dl_relocate_object [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libc-2.5.so libc-2.5.so vsprintf
+ 1 25.0000 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 2 50.0000 libc-2.5.so libc-2.5.so vfprintf
+3 0.0021 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 3 75.0000 libc-2.5.so libc-2.5.so _IO_default_xsputn [self]
+ 1 25.0000 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+-------------------------------------------------------------------------------
+3 0.0021 libc-2.5.so libc-2.5.so __close_nocancel
+ 3 100.000 libc-2.5.so libc-2.5.so __close_nocancel [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so mbrtowc
+3 0.0021 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check
+ 3 100.000 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+3 0.0021 libc-2.5.so libc-2.5.so _nl_intern_locale_data
+ 3 100.000 libc-2.5.so libc-2.5.so _nl_intern_locale_data [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so read_alias_file
+ 2 66.6667 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+3 0.0021 libc-2.5.so libc-2.5.so qsort
+ 378 97.6744 libc-2.5.so libc-2.5.so msort_with_tmp
+ 5 1.2920 libxul.so libc-2.5.so (no symbols)
+ 3 0.7752 libc-2.5.so libc-2.5.so qsort [self]
+ 1 0.2584 libc-2.5.so libc-2.5.so sysconf
+-------------------------------------------------------------------------------
+3 0.0021 libc-2.5.so libc-2.5.so read
+ 3 100.000 libc-2.5.so libc-2.5.so read [self]
+-------------------------------------------------------------------------------
+3 0.0021 libc-2.5.so libc-2.5.so sigprocmask
+ 3 100.000 libc-2.5.so libc-2.5.so sigprocmask [self]
+-------------------------------------------------------------------------------
+3 0.0021 libc-2.5.so libc-2.5.so strcpy
+ 3 100.000 libc-2.5.so libc-2.5.so strcpy [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 libc-2.5.so libc-2.5.so printf
+ 8 88.8889 libc-2.5.so libc-2.5.so vsprintf
+3 0.0021 libc-2.5.so libc-2.5.so vfprintf
+ 3 33.3333 libc-2.5.so libc-2.5.so vfprintf [self]
+ 2 22.2222 libc-2.5.so libc-2.5.so _itoa_word
+ 2 22.2222 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 1 11.1111 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 1 11.1111 libc-2.5.so libc-2.5.so __find_specmb
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaRasterizeTrapezoid
+3 0.0021 libexa.so libexa.so exaFinishAccess
+ 3 100.000 libexa.so libexa.so exaFinishAccess [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbCreatePixmap
+3 0.0021 libfb.so libfb.so __i686.get_pc_thunk.bx
+ 3 100.000 libfb.so libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+3 0.0021 libfb.so libfb.so fbGetGCPrivateIndex
+ 3 100.000 libfb.so libfb.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+3 0.0021 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 3 50.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+ 3 50.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image [self]
+-------------------------------------------------------------------------------
+3 0.0021 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+ 3 60.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref [self]
+ 2 40.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+-------------------------------------------------------------------------------
+ 3 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+3 0.0021 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+ 3 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __write_nocancel
+3 0.0021 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel
+ 3 100.000 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel [self]
+-------------------------------------------------------------------------------
+3 0.0021 uhci-hcd.ko uhci_hcd uhci_check_ports
+ 3 100.000 uhci-hcd.ko uhci_hcd uhci_check_ports [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux __block_prepare_write
+ 3 100.000 vmlinux vmlinux __block_prepare_write [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux __end_that_request_first
+ 3 100.000 vmlinux vmlinux __end_that_request_first [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux __generic_file_aio_write_nolock
+ 3 100.000 vmlinux vmlinux __generic_file_aio_write_nolock [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux __next_cpu
+ 3 100.000 vmlinux vmlinux __next_cpu [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux __set_page_dirty_nobuffers
+ 3 100.000 vmlinux vmlinux __set_page_dirty_nobuffers [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux __writeback_single_inode
+ 3 100.000 vmlinux vmlinux __writeback_single_inode [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux add_wait_queue
+ 3 100.000 vmlinux vmlinux add_wait_queue [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux ahci_qc_prep
+ 3 100.000 vmlinux vmlinux ahci_qc_prep [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux blk_rq_map_sg
+ 3 100.000 vmlinux vmlinux blk_rq_map_sg [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux clocksource_get_next
+ 3 100.000 vmlinux vmlinux clocksource_get_next [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux copy_process
+ 3 100.000 vmlinux vmlinux copy_process [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux copy_strings
+ 3 100.000 vmlinux vmlinux copy_strings [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux dec_zone_page_state
+ 3 100.000 vmlinux vmlinux dec_zone_page_state [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux down_read_trylock
+ 3 100.000 vmlinux vmlinux down_read_trylock [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux end_page_writeback
+ 3 100.000 vmlinux vmlinux end_page_writeback [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux fget
+ 3 100.000 vmlinux vmlinux fget [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux free_hot_cold_page
+ 3 100.000 vmlinux vmlinux free_hot_cold_page [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux generic_file_open
+ 3 100.000 vmlinux vmlinux generic_file_open [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux get_task_mm
+ 3 100.000 vmlinux vmlinux get_task_mm [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux inode_change_ok
+ 3 100.000 vmlinux vmlinux inode_change_ok [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux internal_add_timer
+ 3 100.000 vmlinux vmlinux internal_add_timer [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux kfree
+ 3 100.000 vmlinux vmlinux kfree [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux move_native_irq
+ 3 100.000 vmlinux vmlinux move_native_irq [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux note_interrupt
+ 3 100.000 vmlinux vmlinux note_interrupt [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux notifier_call_chain
+ 3 100.000 vmlinux vmlinux notifier_call_chain [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux number
+ 3 100.000 vmlinux vmlinux number [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux page_mkclean
+ 3 100.000 vmlinux vmlinux page_mkclean [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux rcu_pending
+ 3 100.000 vmlinux vmlinux rcu_pending [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux rw_verify_area
+ 3 100.000 vmlinux vmlinux rw_verify_area [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux search_extable
+ 3 100.000 vmlinux vmlinux search_extable [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux tty_ldisc_try
+ 3 100.000 vmlinux vmlinux tty_ldisc_try [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux unlock_buffer
+ 3 100.000 vmlinux vmlinux unlock_buffer [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux unlock_page
+ 3 100.000 vmlinux vmlinux unlock_page [self]
+-------------------------------------------------------------------------------
+3 0.0021 vmlinux vmlinux update_process_times
+ 3 100.000 vmlinux vmlinux update_process_times [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg compBlockHandler
+2 0.0014 Xorg Xorg AnimCurScreenBlockHandler
+ 2 40.0000 Xorg Xorg miSpriteBlockHandler
+ 2 40.0000 Xorg Xorg AnimCurScreenBlockHandler [self]
+ 1 20.0000 Xorg Xorg NoopDDA
+-------------------------------------------------------------------------------
+ 55417 100.000 Xorg Xorg ProcRenderCompositeGlyphs
+2 0.0014 Xorg Xorg CompositeGlyphs
+ 55399 99.9549 Xorg Xorg damageGlyphs
+ 20 0.0361 Xorg Xorg ValidatePicture
+ 2 0.0036 Xorg Xorg damageReportPostOp
+ 2 0.0036 Xorg Xorg CompositeGlyphs [self]
+ 1 0.0018 Xorg Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 14245 100.000 Xorg Xorg ProcRenderTrapezoids
+2 0.0014 Xorg Xorg CompositeTrapezoids
+ 14234 99.9158 Xorg Xorg miTrapezoids
+ 8 0.0562 Xorg Xorg ValidatePicture
+ 2 0.0140 Xorg Xorg CompositeTrapezoids [self]
+ 1 0.0070 Xorg Xorg ValidateOnePicture
+ 1 0.0070 libexa.so Xorg exaRasterizeTrapezoid
+-------------------------------------------------------------------------------
+2 0.0014 Xorg Xorg DamageEmpty
+ 2 100.000 Xorg Xorg DamageEmpty [self]
+-------------------------------------------------------------------------------
+2 0.0014 Xorg Xorg DamageRegion
+ 2 100.000 Xorg Xorg DamageRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageGlyphs
+2 0.0014 Xorg Xorg FreeScratchPixmapHeader
+ 2 100.000 Xorg Xorg FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg Xorg AnimCurScreenBlockHandler
+ 1 50.0000 Xorg Xorg WaitForSomething
+2 0.0014 Xorg Xorg NoopDDA
+ 2 100.000 Xorg Xorg NoopDDA [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg Xorg miRegionValidate
+ 1 50.0000 Xorg Xorg miRectsToRegion
+2 0.0014 Xorg Xorg QuickSortRects
+ 2 100.000 Xorg Xorg QuickSortRects [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg XaceCatchExtProc
+2 0.0014 Xorg Xorg __i686.get_pc_thunk.cx
+ 2 100.000 Xorg Xorg __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcCreatePixmap
+2 0.0014 Xorg Xorg damageInsertDamage
+ 2 100.000 Xorg Xorg damageInsertDamage [self]
+-------------------------------------------------------------------------------
+ 55 100.000 Xorg Xorg ProcPolySegment
+2 0.0014 Xorg Xorg damagePolySegment
+ 49 89.0909 libexa.so Xorg exaPolySegment
+ 2 3.6364 Xorg Xorg damageReportPostOp
+ 2 3.6364 Xorg Xorg damageDamageBox
+ 2 3.6364 Xorg Xorg damagePolySegment [self]
+-------------------------------------------------------------------------------
+ 1 2.2222 Xorg Xorg ProcFreePixmap
+ 44 97.7778 Xorg Xorg FreeResource
+2 0.0014 Xorg Xorg dixDestroyPixmap
+ 43 95.5556 libextmod.so Xorg XvDestroyPixmap
+ 2 4.4444 Xorg Xorg dixDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 3 60.0000 Xorg Xorg SetPictureClipRects
+2 0.0014 Xorg Xorg miChangePictureClip
+ 3 60.0000 Xorg Xorg miDestroyPictureClip
+ 2 40.0000 Xorg Xorg miChangePictureClip [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg ProcRenderCreatePicture
+2 0.0014 Xorg Xorg miCreatePicture
+ 2 100.000 Xorg Xorg miCreatePicture [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg miDestroyGC
+2 0.0014 Xorg Xorg miDestroyGCOps
+ 2 100.000 Xorg Xorg miDestroyGCOps [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg AnimCurScreenBlockHandler
+2 0.0014 Xorg Xorg miSpriteBlockHandler
+ 2 100.000 Xorg Xorg miSpriteBlockHandler [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg miRegionValidate
+2 0.0014 Xorg Xorg miUnionO
+ 2 100.000 Xorg Xorg miUnionO [self]
+-------------------------------------------------------------------------------
+2 0.0014 e1000.ko e1000 e1000_irq_enable
+ 2 100.000 e1000.ko e1000 e1000_irq_enable [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 __ext3_journal_stop
+ 2 100.000 ext3.ko ext3 __ext3_journal_stop [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_add_entry
+ 2 100.000 ext3.ko ext3 ext3_add_entry [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_alloc_inode
+ 2 100.000 ext3.ko ext3 ext3_alloc_inode [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_create
+ 2 100.000 ext3.ko ext3 ext3_create [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_free_blocks_sb
+ 2 100.000 ext3.ko ext3 ext3_free_blocks_sb [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_get_inode_loc
+ 2 100.000 ext3.ko ext3 ext3_get_inode_loc [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_init_acl
+ 2 100.000 ext3.ko ext3 ext3_init_acl [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_try_to_allocate_with_rsv
+ 2 100.000 ext3.ko ext3 ext3_try_to_allocate_with_rsv [self]
+-------------------------------------------------------------------------------
+2 0.0014 hald-addon-storage hald-addon-storage (no symbols)
+ 2 100.000 hald-addon-storage hald-addon-storage (no symbols) [self]
+-------------------------------------------------------------------------------
+2 0.0014 intel_drv.so intel_drv.so I830DRISwapContext
+ 6 46.1538 intel_drv.so intel_drv.so I830EmitFlush
+ 3 23.0769 intel_drv.so intel_drv.so I830RefreshRing
+ 2 15.3846 libdri.so intel_drv.so DRIGetSAREAPrivate
+ 2 15.3846 intel_drv.so intel_drv.so I830DRISwapContext [self]
+-------------------------------------------------------------------------------
+2 0.0014 intel_drv.so intel_drv.so I830EXAPrepareCopy
+ 2 100.000 intel_drv.so intel_drv.so I830EXAPrepareCopy [self]
+-------------------------------------------------------------------------------
+2 0.0014 jbd.ko jbd journal_end_buffer_io_sync
+ 2 100.000 jbd.ko jbd journal_end_buffer_io_sync [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_init_paths
+2 0.0014 ld-2.5.so ld-2.5.so _dl_important_hwcaps
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_important_hwcaps [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 ld-2.5.so ld-2.5.so dl_open_worker
+ 9 90.0000 ld-2.5.so ld-2.5.so dl_main
+2 0.0014 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 8 80.0000 ld-2.5.so ld-2.5.so _dl_catch_error
+ 2 20.0000 ld-2.5.so ld-2.5.so _dl_map_object_deps [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 ld-2.5.so ld-2.5.so _dl_check_all_versions
+ 2 28.5714 ld-2.5.so ld-2.5.so do_lookup_x
+ 2 28.5714 ld-2.5.so ld-2.5.so _dl_check_map_versions
+ 2 28.5714 ld-2.5.so ld-2.5.so _dl_map_object
+2 0.0014 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 5 71.4286 ld-2.5.so ld-2.5.so strcmp
+ 2 28.5714 ld-2.5.so ld-2.5.so _dl_name_match_p [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_fini
+2 0.0014 ld-2.5.so ld-2.5.so _dl_sort_fini
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_sort_fini [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+2 0.0014 ld-2.5.so ld-2.5.so memset
+ 2 100.000 ld-2.5.so ld-2.5.so memset [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 1 50.0000 libc-2.5.so libc-2.5.so fwrite
+2 0.0014 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so fgets
+ 2 66.6667 libc-2.5.so libc-2.5.so _IO_getline
+2 0.0014 libc-2.5.so libc-2.5.so _IO_getline_info
+ 2 66.6667 libc-2.5.so libc-2.5.so _IO_getline_info [self]
+ 1 33.3333 libc-2.5.so libc-2.5.so __uflow
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __rpc_thread_destroy
+2 0.0014 libc-2.5.so libc-2.5.so __rpc_thread_destroy
+ 2 50.0000 libc-2.5.so libc-2.5.so __rpc_thread_destroy
+ 2 50.0000 libc-2.5.so libc-2.5.so __rpc_thread_destroy [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so _IO_getline_info
+ 2 66.6667 libc-2.5.so libc-2.5.so _IO_getline
+2 0.0014 libc-2.5.so libc-2.5.so __uflow
+ 2 66.6667 libc-2.5.so libc-2.5.so __uflow [self]
+ 1 33.3333 libc-2.5.so libc-2.5.so _IO_default_uflow
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so vfprintf
+2 0.0014 libc-2.5.so libc-2.5.so _itoa_word
+ 2 100.000 libc-2.5.so libc-2.5.so _itoa_word [self]
+-------------------------------------------------------------------------------
+2 0.0014 libc-2.5.so libc-2.5.so ioctl
+ 2 100.000 libc-2.5.so libc-2.5.so ioctl [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_getline
+2 0.0014 libc-2.5.so libc-2.5.so memchr
+ 2 100.000 libc-2.5.so libc-2.5.so memchr [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so malloc
+2 0.0014 libc-2.5.so libc-2.5.so mmap
+ 2 100.000 libc-2.5.so libc-2.5.so mmap [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libc-2.5.so libc-2.5.so sprintf
+2 0.0014 libc-2.5.so libc-2.5.so vsprintf
+ 8 66.6667 libc-2.5.so libc-2.5.so vfprintf
+ 2 16.6667 libc-2.5.so libc-2.5.so vsprintf [self]
+ 1 8.3333 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 1 8.3333 libc-2.5.so libc-2.5.so _IO_str_init_static_internal
+-------------------------------------------------------------------------------
+ 16 100.000 libdri.so libdri.so DRIBlockHandler
+2 0.0014 libdri.so libdri.so DRIDoBlockHandler
+ 6 37.5000 intel_drv.so libdri.so I830DRISwapContext
+ 6 37.5000 libdri.so libdri.so DRIUnlock
+ 2 12.5000 libdri.so libdri.so DRIDoBlockHandler [self]
+ 1 6.2500 intel_drv.so libdri.so I830EmitFlush
+ 1 6.2500 libdri.so libdri.so DRIGetSAREAPrivate
+-------------------------------------------------------------------------------
+2 0.0014 libexa.so libexa.so exaPolySegment
+ 46 93.8776 libexa.so libexa.so exaPolyFillRect
+ 2 4.0816 libexa.so libexa.so exaPolySegment [self]
+ 1 2.0408 libexa.so libexa.so .plt
+-------------------------------------------------------------------------------
+2 0.0014 libextmod.so libextmod.so __i686.get_pc_thunk.bx
+ 2 100.000 libextmod.so libextmod.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+2 0.0014 libpthread-2.5.so libpthread-2.5.so pthread_cond_signal@@GLIBC_2.3.2
+ 2 100.000 libpthread-2.5.so libpthread-2.5.so pthread_cond_signal@@GLIBC_2.3.2 [self]
+-------------------------------------------------------------------------------
+2 0.0014 sshd sshd (no symbols)
+ 2 100.000 sshd sshd (no symbols) [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux __alloc_pages
+ 2 100.000 vmlinux vmlinux __alloc_pages [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux __ata_qc_complete
+ 2 100.000 vmlinux vmlinux __ata_qc_complete [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux __pte_alloc
+ 2 100.000 vmlinux vmlinux __pte_alloc [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux __rmqueue
+ 2 100.000 vmlinux vmlinux __rmqueue [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux __switch_to
+ 2 100.000 vmlinux vmlinux __switch_to [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux _local_bh_enable
+ 2 100.000 vmlinux vmlinux _local_bh_enable [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux ahci_start_engine
+ 2 100.000 vmlinux vmlinux ahci_start_engine [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux alloc_inode
+ 2 100.000 vmlinux vmlinux alloc_inode [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux ata_qc_complete_multiple
+ 2 100.000 vmlinux vmlinux ata_qc_complete_multiple [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux ata_qc_issue
+ 2 100.000 vmlinux vmlinux ata_qc_issue [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux cp_new_stat64
+ 2 100.000 vmlinux vmlinux cp_new_stat64 [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux delayed_work_timer_fn
+ 2 100.000 vmlinux vmlinux delayed_work_timer_fn [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux do_sys_ftruncate
+ 2 100.000 vmlinux vmlinux do_sys_ftruncate [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux do_sys_poll
+ 2 100.000 vmlinux vmlinux do_sys_poll [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux end_bio_bh_io_sync
+ 2 100.000 vmlinux vmlinux end_bio_bh_io_sync [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux enqueue_task
+ 2 100.000 vmlinux vmlinux enqueue_task [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux expand_files
+ 2 100.000 vmlinux vmlinux expand_files [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux find_mergeable_anon_vma
+ 2 100.000 vmlinux vmlinux find_mergeable_anon_vma [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux flush_tlb_mm
+ 2 100.000 vmlinux vmlinux flush_tlb_mm [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux free_pgd_range
+ 2 100.000 vmlinux vmlinux free_pgd_range [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux generic_file_buffered_write
+ 2 100.000 vmlinux vmlinux generic_file_buffered_write [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux get_empty_filp
+ 2 100.000 vmlinux vmlinux get_empty_filp [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux get_unmapped_area
+ 2 100.000 vmlinux vmlinux get_unmapped_area [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux get_unused_fd
+ 2 100.000 vmlinux vmlinux get_unused_fd [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux getname
+ 2 100.000 vmlinux vmlinux getname [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux groups_search
+ 2 100.000 vmlinux vmlinux groups_search [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux inc_zone_page_state
+ 2 100.000 vmlinux vmlinux inc_zone_page_state [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux inode_add_bytes
+ 2 100.000 vmlinux vmlinux inode_add_bytes [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux iret_exc
+ 2 100.000 vmlinux vmlinux iret_exc [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux lock_timer_base
+ 2 100.000 vmlinux vmlinux lock_timer_base [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux mark_page_accessed
+ 2 100.000 vmlinux vmlinux mark_page_accessed [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux may_open
+ 2 100.000 vmlinux vmlinux may_open [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux mmput
+ 2 100.000 vmlinux vmlinux mmput [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux new_inode
+ 2 100.000 vmlinux vmlinux new_inode [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux open_namei
+ 2 100.000 vmlinux vmlinux open_namei [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux poll_freewait
+ 2 100.000 vmlinux vmlinux poll_freewait [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux profile_tick
+ 2 100.000 vmlinux vmlinux profile_tick [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux queue_delayed_work
+ 2 100.000 vmlinux vmlinux queue_delayed_work [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux radix_tree_insert
+ 2 100.000 vmlinux vmlinux radix_tree_insert [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux raise_softirq
+ 2 100.000 vmlinux vmlinux raise_softirq [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux remove_vma
+ 2 100.000 vmlinux vmlinux remove_vma [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux ret_from_exception
+ 2 100.000 vmlinux vmlinux ret_from_exception [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux scsi_dispatch_cmd
+ 2 100.000 vmlinux vmlinux scsi_dispatch_cmd [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux scsi_request_fn
+ 2 100.000 vmlinux vmlinux scsi_request_fn [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux smp_apic_timer_interrupt
+ 2 100.000 vmlinux vmlinux smp_apic_timer_interrupt [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sock_wfree
+ 2 100.000 vmlinux vmlinux sock_wfree [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sys_close
+ 2 100.000 vmlinux vmlinux sys_close [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sys_mkdir
+ 2 100.000 vmlinux vmlinux sys_mkdir [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sys_mkdirat
+ 2 100.000 vmlinux vmlinux sys_mkdirat [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sys_select
+ 2 100.000 vmlinux vmlinux sys_select [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux touch_atime
+ 2 100.000 vmlinux vmlinux touch_atime [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux tty_ldisc_deref
+ 2 100.000 vmlinux vmlinux tty_ldisc_deref [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux unix_poll
+ 2 100.000 vmlinux vmlinux unix_poll [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux up_write
+ 2 100.000 vmlinux vmlinux up_write [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vfs_getattr
+ 2 100.000 vmlinux vmlinux vfs_getattr [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vfs_read
+ 2 100.000 vmlinux vmlinux vfs_read [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vfs_write
+ 2 100.000 vmlinux vmlinux vfs_write [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vma_adjust
+ 2 100.000 vmlinux vmlinux vma_adjust [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vmtruncate
+ 2 100.000 vmlinux vmlinux vmtruncate [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vsnprintf
+ 2 100.000 vmlinux vmlinux vsnprintf [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux wake_up_inode
+ 2 100.000 vmlinux vmlinux wake_up_inode [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux zone_watermark_ok
+ 2 100.000 vmlinux vmlinux zone_watermark_ok [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg CreateGC
+1 7.0e-04 Xorg Xorg AllocateGC
+ 1 50.0000 Xorg Xorg Xalloc
+ 1 50.0000 Xorg Xorg AllocateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg CompositeRects
+1 7.0e-04 Xorg Xorg PictureMatchFormat
+ 1 100.000 Xorg Xorg PictureMatchFormat [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg Xorg Dispatch
+ 6 85.7143 Xorg Xorg XaceCatchDispatchProc
+1 7.0e-04 Xorg Xorg ProcFreeGC
+ 4 57.1429 Xorg Xorg FreeResource
+ 1 14.2857 Xorg Xorg FlushClientCaches
+ 1 14.2857 Xorg Xorg dixLookupGC
+ 1 14.2857 Xorg Xorg ProcFreeGC [self]
+-------------------------------------------------------------------------------
+ 13 100.000 Xorg Xorg XaceCatchDispatchProc
+1 7.0e-04 Xorg Xorg ProcPolyFillRectangle
+ 8 61.5385 Xorg Xorg damagePolyFillRect
+ 3 23.0769 Xorg Xorg ValidateGC
+ 1 7.6923 Xorg Xorg dixLookupDrawable
+ 1 7.6923 Xorg Xorg ProcPolyFillRectangle [self]
+-------------------------------------------------------------------------------
+ 12 100.000 Xorg Xorg ProcRenderDispatch
+1 7.0e-04 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 8 66.6667 Xorg Xorg SetPictureClipRects
+ 2 16.6667 Xorg Xorg miChangePictureClip
+ 1 8.3333 Xorg Xorg SecurityLookupIDByType
+ 1 8.3333 Xorg Xorg ProcRenderSetPictureClipRectangles [self]
+-------------------------------------------------------------------------------
+ 14253 100.000 Xorg Xorg ProcRenderDispatch
+1 7.0e-04 Xorg Xorg ProcRenderTrapezoids
+ 14245 99.9439 Xorg Xorg CompositeTrapezoids
+ 6 0.0421 Xorg Xorg SecurityLookupIDByType
+ 1 0.0070 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.0070 Xorg Xorg ProcRenderTrapezoids [self]
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg Xorg Dispatch
+ 20 95.2381 Xorg Xorg XaceCatchDispatchProc
+1 7.0e-04 Xorg Xorg ProcSetClipRectangles
+ 17 80.9524 Xorg Xorg SetClipRects
+ 3 14.2857 Xorg Xorg dixLookupGC
+ 1 4.7619 Xorg Xorg ProcSetClipRectangles [self]
+-------------------------------------------------------------------------------
+ 17 100.000 Xorg Xorg ProcSetClipRectangles
+1 7.0e-04 Xorg Xorg SetClipRects
+ 9 52.9412 Xorg Xorg damageChangeClip
+ 3 17.6471 libc-2.5.so Xorg memmove
+ 2 11.7647 Xorg Xorg damageChangeGC
+ 2 11.7647 Xorg Xorg Xalloc
+ 1 5.8824 Xorg Xorg SetClipRects [self]
+-------------------------------------------------------------------------------
+ 19 100.000 Xorg Xorg WaitForSomething
+1 7.0e-04 Xorg Xorg WakeupHandler
+ 7 36.8421 libdri.so Xorg DRIWakeupHandler
+ 6 31.5789 Xorg Xorg xf86Wakeup
+ 3 15.7895 Xorg Xorg xf86VTSwitchPending
+ 1 5.2632 libdri.so Xorg __i686.get_pc_thunk.bx
+ 1 5.2632 libdri.so Xorg DRIDoWakeupHandler
+ 1 5.2632 Xorg Xorg WakeupHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcQueryTree
+1 7.0e-04 Xorg Xorg WriteToClient
+ 1 100.000 Xorg Xorg WriteToClient [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg CoreProcessPointerEvent
+1 7.0e-04 Xorg Xorg XYToWindow
+ 1 100.000 Xorg Xorg XYToWindow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ReadRequestFromClient
+1 7.0e-04 Xorg Xorg _XSERVTransSocketRead
+ 1 100.000 Xorg Xorg _XSERVTransSocketRead [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg FlushClient
+1 7.0e-04 Xorg Xorg _XSERVTransWritev
+ 1 100.000 Xorg Xorg _XSERVTransWritev [self]
+-------------------------------------------------------------------------------
+ 14 100.000 Xorg Xorg ProcCopyArea
+1 7.0e-04 Xorg Xorg damageCopyArea
+ 12 85.7143 libexa.so Xorg exaCopyArea
+ 1 7.1429 Xorg Xorg getDrawableDamageRef
+ 1 7.1429 Xorg Xorg damageCopyArea [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg FreeGC
+1 7.0e-04 Xorg Xorg damageDestroyGC
+ 2 66.6667 Xorg Xorg miBSCheapDestroyGC
+ 1 33.3333 Xorg Xorg damageDestroyGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageCreateGC
+1 7.0e-04 Xorg Xorg miBSCreateGC
+ 1 100.000 Xorg Xorg miBSCreateGC [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg miChangePictureClip
+1 7.0e-04 Xorg Xorg miDestroyPictureClip
+ 2 50.0000 Xorg Xorg miRegionDestroy
+ 1 25.0000 Xorg Xorg Xfree
+ 1 25.0000 Xorg Xorg miDestroyPictureClip [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 cat cat (no symbols)
+ 1 100.000 cat cat (no symbols) [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 dirname dirname (no symbols)
+ 1 100.000 dirname dirname (no symbols) [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 e1000.ko e1000 e1000_intr
+ 1 100.000 e1000.ko e1000 e1000_intr [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 e1000.ko e1000 e1000_xmit_frame
+ 1 100.000 e1000.ko e1000 e1000_xmit_frame [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 add_dirent_to_buf
+ 1 100.000 ext3.ko ext3 add_dirent_to_buf [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 bput_one
+ 1 100.000 ext3.ko ext3 bput_one [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_block_to_path
+ 1 100.000 ext3.ko ext3 ext3_block_to_path [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_check_dir_entry
+ 1 100.000 ext3.ko ext3 ext3_check_dir_entry [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_clear_blocks
+ 1 100.000 ext3.ko ext3 ext3_clear_blocks [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_free_data
+ 1 100.000 ext3.ko ext3 ext3_free_data [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_get_block
+ 1 100.000 ext3.ko ext3 ext3_get_block [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_getblk
+ 1 100.000 ext3.ko ext3 ext3_getblk [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_journal_dirty_data
+ 1 100.000 ext3.ko ext3 ext3_journal_dirty_data [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_lookup
+ 1 100.000 ext3.ko ext3 ext3_lookup [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_mark_inode_dirty
+ 1 100.000 ext3.ko ext3 ext3_mark_inode_dirty [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_ordered_commit_write
+ 1 100.000 ext3.ko ext3 ext3_ordered_commit_write [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_orphan_add
+ 1 100.000 ext3.ko ext3 ext3_orphan_add [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_orphan_del
+ 1 100.000 ext3.ko ext3 ext3_orphan_del [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_set_inode_flags
+ 1 100.000 ext3.ko ext3 ext3_set_inode_flags [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_setattr
+ 1 100.000 ext3.ko ext3 ext3_setattr [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 ext3_writepage_trans_blocks
+ 1 100.000 ext3.ko ext3 ext3_writepage_trans_blocks [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ext3.ko ext3 read_inode_bitmap
+ 1 100.000 ext3.ko ext3 read_inode_bitmap [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 gawk gawk (no symbols)
+ 1 100.000 gawk gawk (no symbols) [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 gconfd-2 gconfd-2 (no symbols)
+ 1 100.000 gconfd-2 gconfd-2 (no symbols) [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 intel_drv.so intel_drv.so I830EXADoneSolid
+ 1 100.000 intel_drv.so intel_drv.so I830EXADoneSolid [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd __journal_unfile_buffer
+ 1 100.000 jbd.ko jbd __journal_unfile_buffer [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd __log_space_left
+ 1 100.000 jbd.ko jbd __log_space_left [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd find_revoke_record
+ 1 100.000 jbd.ko jbd find_revoke_record [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd inverted_lock
+ 1 100.000 jbd.ko jbd inverted_lock [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd journal_blocks_per_page
+ 1 100.000 jbd.ko jbd journal_blocks_per_page [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd journal_get_create_access
+ 1 100.000 jbd.ko jbd journal_get_create_access [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd journal_get_undo_access
+ 1 100.000 jbd.ko jbd journal_get_undo_access [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd journal_get_write_access
+ 1 100.000 jbd.ko jbd journal_get_write_access [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd journal_invalidatepage
+ 1 100.000 jbd.ko jbd journal_invalidatepage [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd journal_write_metadata_buffer
+ 1 100.000 jbd.ko jbd journal_write_metadata_buffer [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 jbd.ko jbd kjournald
+ 1 100.000 jbd.ko jbd kjournald [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+1 7.0e-04 ld-2.5.so ld-2.5.so ___fxstat64
+ 1 100.000 ld-2.5.so ld-2.5.so ___fxstat64 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so do_lookup_x
+1 7.0e-04 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx
+ 1 100.000 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so dl_main
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_add_to_slotinfo
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_add_to_slotinfo [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so init_tls
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_allocate_tls_storage
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_allocate_tls_storage [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_cache_libcmp
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_cache_libcmp [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 ld-2.5.so ld-2.5.so dl_open_worker
+ 2 66.6667 ld-2.5.so ld-2.5.so _dl_check_all_versions
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_check_map_versions
+ 2 66.6667 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 1 33.3333 ld-2.5.so ld-2.5.so _dl_check_map_versions [self]
+-------------------------------------------------------------------------------
+ 21 100.000 ld-2.5.so ld-2.5.so _dl_runtime_resolve
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_fixup
+ 20 95.2381 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 1 4.7619 ld-2.5.so ld-2.5.so _dl_fixup [self]
+-------------------------------------------------------------------------------
+ 7 100.000 ld-2.5.so ld-2.5.so _dl_start_user
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_init_internal
+ 6 85.7143 ld-2.5.so ld-2.5.so call_init
+ 1 14.2857 ld-2.5.so ld-2.5.so _dl_init_internal [self]
+-------------------------------------------------------------------------------
+ 4 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+ 2 50.0000 ld-2.5.so ld-2.5.so memset
+ 1 25.0000 ld-2.5.so ld-2.5.so ___fxstat64
+ 1 25.0000 ld-2.5.so ld-2.5.so _dl_map_object_from_fd [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_start
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_setup_hash
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_setup_hash [self]
+-------------------------------------------------------------------------------
+ 51 100.000 ld-2.5.so ld-2.5.so _dl_start_user
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_start
+ 49 96.0784 ld-2.5.so ld-2.5.so _dl_sysdep_start
+ 1 1.9608 ld-2.5.so ld-2.5.so _dl_setup_hash
+ 1 1.9608 ld-2.5.so ld-2.5.so _dl_start [self]
+-------------------------------------------------------------------------------
+ 49 100.000 ld-2.5.so ld-2.5.so _dl_start
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_sysdep_start
+ 48 97.9592 ld-2.5.so ld-2.5.so dl_main
+ 1 2.0408 ld-2.5.so ld-2.5.so _dl_sysdep_start [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+1 7.0e-04 ld-2.5.so ld-2.5.so close
+ 1 100.000 ld-2.5.so ld-2.5.so close [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so dl_open_worker
+1 7.0e-04 ld-2.5.so ld-2.5.so index
+ 1 100.000 ld-2.5.so ld-2.5.so index [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so openaux
+1 7.0e-04 ld-2.5.so ld-2.5.so malloc
+ 1 100.000 ld-2.5.so ld-2.5.so malloc [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 ld-2.5.so ld-2.5.so mmap
+ 1 100.000 ld-2.5.so ld-2.5.so mmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so exit
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_cleanup
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_cleanup [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_file_finish@@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_finish@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_init@@GLIBC_2.1
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_link_in
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_link_in [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so vsscanf
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_no_init
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_no_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_setb
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_setb [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_vfscanf
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_sputbackc
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_sputbackc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so vsprintf
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_str_init_static_internal
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_str_init_static_internal [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so vsscanf
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_vfscanf
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_sputbackc
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_vfscanf [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so __ctype_get_mb_cur_max
+ 1 100.000 libc-2.5.so libc-2.5.so __ctype_get_mb_cur_max [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so vfprintf
+1 7.0e-04 libc-2.5.so libc-2.5.so __find_specmb
+ 1 100.000 libc-2.5.so libc-2.5.so __find_specmb [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+1 7.0e-04 libc-2.5.so libc-2.5.so __fopen_maybe_mmap
+ 1 100.000 libc-2.5.so libc-2.5.so __fopen_maybe_mmap [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so __fxstat
+ 1 100.000 libc-2.5.so libc-2.5.so __fxstat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+1 7.0e-04 libc-2.5.so libc-2.5.so __fxstat64@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so __fxstat64@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_find_transform
+1 7.0e-04 libc-2.5.so libc-2.5.so __gconv_load_cache
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_load_cache [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_find_transform
+1 7.0e-04 libc-2.5.so libc-2.5.so __gconv_lookup_cache
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_lookup_cache [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+1 7.0e-04 libc-2.5.so libc-2.5.so __nss_database_lookup
+ 1 50.0000 libc-2.5.so libc-2.5.so free
+ 1 50.0000 libc-2.5.so libc-2.5.so __nss_database_lookup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_find_domain
+1 7.0e-04 libc-2.5.so libc-2.5.so __open_nocancel
+ 1 100.000 libc-2.5.so libc-2.5.so __open_nocancel [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so ptmalloc_init
+1 7.0e-04 libc-2.5.so libc-2.5.so __register_atfork
+ 1 100.000 libc-2.5.so libc-2.5.so __register_atfork [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so __xstat
+ 1 100.000 libc-2.5.so libc-2.5.so __xstat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_find_domain
+1 7.0e-04 libc-2.5.so libc-2.5.so _nl_load_domain
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_load_domain [self]
+-------------------------------------------------------------------------------
+ 22 100.000 libc-2.5.so libc-2.5.so _nl_find_locale
+1 7.0e-04 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+ 15 68.1818 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 3 13.6364 libc-2.5.so libc-2.5.so _nl_intern_locale_data
+ 2 9.0909 libc-2.5.so libc-2.5.so qsort
+ 1 4.5455 libc-2.5.so libc-2.5.so __fxstat64@GLIBC_2.1
+ 1 4.5455 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so _nl_postload_ctype
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_postload_ctype [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so sbrk
+1 7.0e-04 libc-2.5.so libc-2.5.so brk
+ 1 100.000 libc-2.5.so libc-2.5.so brk [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so parse_expression
+1 7.0e-04 libc-2.5.so libc-2.5.so btowc
+ 1 100.000 libc-2.5.so libc-2.5.so btowc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so ____strtold_l_internal
+1 7.0e-04 libc-2.5.so libc-2.5.so fdatasync
+ 1 100.000 libc-2.5.so libc-2.5.so fdatasync [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so fflush
+ 1 100.000 libc-2.5.so libc-2.5.so fflush [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so fork
+ 1 100.000 libc-2.5.so libc-2.5.so fork [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so ftruncate
+ 1 100.000 libc-2.5.so libc-2.5.so ftruncate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_seek
+1 7.0e-04 libc-2.5.so libc-2.5.so llseek
+ 1 100.000 libc-2.5.so libc-2.5.so llseek [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so mallopt
+ 3 75.0000 libc-2.5.so libc-2.5.so malloc_consolidate
+ 1 25.0000 libc-2.5.so libc-2.5.so mallopt [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so mmap64
+ 1 100.000 libc-2.5.so libc-2.5.so mmap64 [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so mremap
+ 1 100.000 libc-2.5.so libc-2.5.so mremap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 7.0e-04 libc-2.5.so libc-2.5.so munmap
+ 1 100.000 libc-2.5.so libc-2.5.so munmap [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so open
+ 1 100.000 libc-2.5.so libc-2.5.so open [self]
+-------------------------------------------------------------------------------
+ 1 5.5556 libc-2.5.so libc-2.5.so malloc
+ 17 94.4444 libc-2.5.so libc-2.5.so malloc_hook_ini
+1 7.0e-04 libc-2.5.so libc-2.5.so ptmalloc_init
+ 16 88.8889 libc-2.5.so libc-2.5.so _dl_addr
+ 1 5.5556 libc-2.5.so libc-2.5.so __register_atfork
+ 1 5.5556 libc-2.5.so libc-2.5.so ptmalloc_init [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so putc
+ 1 100.000 libc-2.5.so libc-2.5.so putc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so msort_with_tmp
+1 7.0e-04 libc-2.5.so libc-2.5.so rangecmp
+ 1 100.000 libc-2.5.so libc-2.5.so rangecmp [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so vsscanf
+1 7.0e-04 libc-2.5.so libc-2.5.so rawmemchr
+ 1 100.000 libc-2.5.so libc-2.5.so rawmemchr [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_search_stub
+1 7.0e-04 libc-2.5.so libc-2.5.so re_search_internal
+ 1 100.000 libc-2.5.so libc-2.5.so re_search_internal [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so setlocale
+ 23 92.0000 libc-2.5.so libc-2.5.so _nl_find_locale
+ 1 4.0000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 1 4.0000 libc-2.5.so libc-2.5.so setlocale [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so sigaction
+ 1 100.000 libc-2.5.so libc-2.5.so sigaction [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so sigismember
+ 1 100.000 libc-2.5.so libc-2.5.so sigismember [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so strcasecmp
+ 1 100.000 libc-2.5.so libc-2.5.so strcasecmp [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so strcat
+ 1 100.000 libc-2.5.so libc-2.5.so strcat [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so strncpy
+ 1 100.000 libc-2.5.so libc-2.5.so strncpy [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so tcgetattr
+ 1 100.000 libc-2.5.so libc-2.5.so tcgetattr [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so tzset
+1 7.0e-04 libc-2.5.so libc-2.5.so tzset_internal
+ 1 100.000 libc-2.5.so libc-2.5.so tzset_internal [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libc-2.5.so libc-2.5.so writev
+ 1 100.000 libc-2.5.so libc-2.5.so writev [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libdri.so libdri.so DRIBlockHandler
+ 16 84.2105 libdri.so libdri.so DRIDoBlockHandler
+ 1 5.2632 intel_drv.so libdri.so I830DRISwapContext
+ 1 5.2632 libdri.so libdri.so DRIUnlock
+ 1 5.2632 libdri.so libdri.so DRIBlockHandler [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libdri.so libdri.so DRIWakeupHandler
+1 7.0e-04 libdri.so libdri.so DRIDoWakeupHandler
+ 6 75.0000 intel_drv.so libdri.so I830DRISwapContext
+ 1 12.5000 libdri.so libdri.so DRILock
+ 1 12.5000 libdri.so libdri.so DRIDoWakeupHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libdri.so libdri.so DRIDoWakeupHandler
+1 7.0e-04 libdri.so libdri.so DRILock
+ 1 100.000 libdri.so libdri.so DRILock [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libdri.so libdri.so __i686.get_pc_thunk.bx
+ 1 100.000 libdri.so libdri.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 707 32.6408 libexa.so libexa.so ExaCheckComposite
+ 1459 67.3592 libexa.so libexa.so exaRasterizeTrapezoid
+1 7.0e-04 libexa.so libexa.so exaPrepareAccess
+ 2164 99.9077 libexa.so libexa.so exaWaitSync
+ 1 0.0462 libexa.so libexa.so exaPixmapIsOffscreen
+ 1 0.0462 libexa.so libexa.so exaPrepareAccess [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libfb.so libfb.so fbComposite
+ 3527 99.9150 libpixman.so.0.0.0 libfb.so pixman_image_composite
+ 1 0.0283 libpixman.so.0.0.0 libfb.so pixman_image_set_clip_region
+ 1 0.0283 libfb.so libfb.so image_from_pict
+ 1 0.0283 libfb.so libfb.so fbComposite [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libfb.so libfb.so fbGetWinPrivateIndex
+ 1 100.000 libfb.so libfb.so fbGetWinPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getgrgid_r
+1 7.0e-04 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libpam.so.0.79 libpam.so.0.79 (no symbols)
+ 1 100.000 libpam.so.0.79 libpam.so.0.79 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchSolid
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchSolid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region [self]
+-------------------------------------------------------------------------------
+ 3527 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 3526 99.9716 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1 0.0284 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_clip_region
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_clip_region [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_component_alpha
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_component_alpha [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_repeat
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_repeat [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.cx
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libpthread-2.5.so libpthread-2.5.so __read_nocancel
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libpthread-2.5.so libpthread-2.5.so write
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so write [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libselinux.so.1 libselinux.so.1 (no symbols)
+ 1 100.000 libselinux.so.1 libselinux.so.1 (no symbols) [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 libsepol.so.1 libsepol.so.1 (no symbols)
+ 1 100.000 libsepol.so.1 libsepol.so.1 (no symbols) [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 locale-archive locale-archive (no symbols)
+ 1 100.000 locale-archive locale-archive (no symbols) [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 mouse_drv.so mouse_drv.so MouseBlockHandler
+ 1 100.000 mouse_drv.so mouse_drv.so MouseBlockHandler [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 mouse_drv.so mouse_drv.so MouseWakeupHandler
+ 1 100.000 mouse_drv.so mouse_drv.so MouseWakeupHandler [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 mouse_drv.so mouse_drv.so __i686.get_pc_thunk.bx
+ 1 100.000 mouse_drv.so mouse_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 oprofile.ko oprofile process_task_mortuary
+ 1 100.000 oprofile.ko oprofile process_task_mortuary [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 oprofile.ko oprofile wq_sync_buffer
+ 1 100.000 oprofile.ko oprofile wq_sync_buffer [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 sd_mod.ko sd_mod sd_init_command
+ 1 100.000 sd_mod.ko sd_mod sd_init_command [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 sleep sleep (no symbols)
+ 1 100.000 sleep sleep (no symbols) [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 uhci-hcd.ko uhci_hcd uhci_get_current_frame_number
+ 1 100.000 uhci-hcd.ko uhci_hcd uhci_get_current_frame_number [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 uhci-hcd.ko uhci_hcd uhci_scan_schedule
+ 1 100.000 uhci-hcd.ko uhci_hcd uhci_scan_schedule [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 usbhid.ko usbhid hid_input_report
+ 1 100.000 usbhid.ko usbhid hid_input_report [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __blkdev_put
+ 1 100.000 vmlinux vmlinux __blkdev_put [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __cleanup_sighand
+ 1 100.000 vmlinux vmlinux __cleanup_sighand [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __d_path
+ 1 100.000 vmlinux vmlinux __d_path [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __d_rehash
+ 1 100.000 vmlinux vmlinux __d_rehash [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __dequeue_signal
+ 1 100.000 vmlinux vmlinux __dequeue_signal [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __group_complete_signal
+ 1 100.000 vmlinux vmlinux __group_complete_signal [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __inc_zone_state
+ 1 100.000 vmlinux vmlinux __inc_zone_state [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __lookup_hash
+ 1 100.000 vmlinux vmlinux __lookup_hash [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __make_request
+ 1 100.000 vmlinux vmlinux __make_request [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __mmdrop
+ 1 100.000 vmlinux vmlinux __mmdrop [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __mod_timer
+ 1 100.000 vmlinux vmlinux __mod_timer [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __page_set_anon_rmap
+ 1 100.000 vmlinux vmlinux __page_set_anon_rmap [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __path_lookup_intent_open
+ 1 100.000 vmlinux vmlinux __path_lookup_intent_open [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __put_user_4
+ 1 100.000 vmlinux vmlinux __put_user_4 [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __rb_rotate_right
+ 1 100.000 vmlinux vmlinux __rb_rotate_right [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __remove_from_page_cache
+ 1 100.000 vmlinux vmlinux __remove_from_page_cache [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __tasklet_schedule
+ 1 100.000 vmlinux vmlinux __tasklet_schedule [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __vma_link_rb
+ 1 100.000 vmlinux vmlinux __vma_link_rb [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux __wake_up_common
+ 1 100.000 vmlinux vmlinux __wake_up_common [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux account_system_time
+ 1 100.000 vmlinux vmlinux account_system_time [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux activate_page
+ 1 100.000 vmlinux vmlinux activate_page [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux add_to_page_cache_lru
+ 1 100.000 vmlinux vmlinux add_to_page_cache_lru [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ahci_fill_cmd_slot
+ 1 100.000 vmlinux vmlinux ahci_fill_cmd_slot [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ahci_scr_read
+ 1 100.000 vmlinux vmlinux ahci_scr_read [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux alloc_buffer_head
+ 1 100.000 vmlinux vmlinux alloc_buffer_head [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux as_add_request
+ 1 100.000 vmlinux vmlinux as_add_request [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux as_add_rq_rb
+ 1 100.000 vmlinux vmlinux as_add_rq_rb [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux as_merged_request
+ 1 100.000 vmlinux vmlinux as_merged_request [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ata_do_eh
+ 1 100.000 vmlinux vmlinux ata_do_eh [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ata_find_dev
+ 1 100.000 vmlinux vmlinux ata_find_dev [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ata_qc_new_init
+ 1 100.000 vmlinux vmlinux ata_qc_new_init [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ata_tf_to_fis
+ 1 100.000 vmlinux vmlinux ata_tf_to_fis [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux balance_dirty_pages_ratelimited_nr
+ 1 100.000 vmlinux vmlinux balance_dirty_pages_ratelimited_nr [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux balanced_irq
+ 1 100.000 vmlinux vmlinux balanced_irq [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux bictcp_cong_avoid
+ 1 100.000 vmlinux vmlinux bictcp_cong_avoid [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux bio_alloc_bioset
+ 1 100.000 vmlinux vmlinux bio_alloc_bioset [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux bio_init
+ 1 100.000 vmlinux vmlinux bio_init [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux bio_put
+ 1 100.000 vmlinux vmlinux bio_put [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux blk_complete_request
+ 1 100.000 vmlinux vmlinux blk_complete_request [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux blk_execute_rq
+ 1 100.000 vmlinux vmlinux blk_execute_rq [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux blk_put_request
+ 1 100.000 vmlinux vmlinux blk_put_request [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux blocking_notifier_call_chain
+ 1 100.000 vmlinux vmlinux blocking_notifier_call_chain [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux bmap
+ 1 100.000 vmlinux vmlinux bmap [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux can_vma_merge_after
+ 1 100.000 vmlinux vmlinux can_vma_merge_after [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux cap_vm_enough_memory
+ 1 100.000 vmlinux vmlinux cap_vm_enough_memory [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux cdrom_ioctl
+ 1 100.000 vmlinux vmlinux cdrom_ioctl [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux cdrom_release
+ 1 100.000 vmlinux vmlinux cdrom_release [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux clear_user
+ 1 100.000 vmlinux vmlinux clear_user [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux common_interrupt
+ 1 100.000 vmlinux vmlinux common_interrupt [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux cpu_idle
+ 1 100.000 vmlinux vmlinux cpu_idle [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux d_free
+ 1 100.000 vmlinux vmlinux d_free [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux d_instantiate
+ 1 100.000 vmlinux vmlinux d_instantiate [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux d_path
+ 1 100.000 vmlinux vmlinux d_path [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux do_brk
+ 1 100.000 vmlinux vmlinux do_brk [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux do_exit
+ 1 100.000 vmlinux vmlinux do_exit [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux do_munmap
+ 1 100.000 vmlinux vmlinux do_munmap [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux do_readv_writev
+ 1 100.000 vmlinux vmlinux do_readv_writev [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux do_sys_open
+ 1 100.000 vmlinux vmlinux do_sys_open [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux down_read
+ 1 100.000 vmlinux vmlinux down_read [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux dup_fd
+ 1 100.000 vmlinux vmlinux dup_fd [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux elv_next_request
+ 1 100.000 vmlinux vmlinux elv_next_request [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux end_buffer_async_write
+ 1 100.000 vmlinux vmlinux end_buffer_async_write [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux eth_type_trans
+ 1 100.000 vmlinux vmlinux eth_type_trans [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux exec_keys
+ 1 100.000 vmlinux vmlinux exec_keys [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux fd_install
+ 1 100.000 vmlinux vmlinux fd_install [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux file_read_actor
+ 1 100.000 vmlinux vmlinux file_read_actor [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux fixup_exception
+ 1 100.000 vmlinux vmlinux fixup_exception [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux flush_thread
+ 1 100.000 vmlinux vmlinux flush_thread [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux free_poll_entry
+ 1 100.000 vmlinux vmlinux free_poll_entry [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux generic_delete_inode
+ 1 100.000 vmlinux vmlinux generic_delete_inode [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux generic_fillattr
+ 1 100.000 vmlinux vmlinux generic_fillattr [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux generic_make_request
+ 1 100.000 vmlinux vmlinux generic_make_request [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux get_dcookie
+ 1 100.000 vmlinux vmlinux get_dcookie [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux get_signal_to_deliver
+ 1 100.000 vmlinux vmlinux get_signal_to_deliver [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux get_vmalloc_info
+ 1 100.000 vmlinux vmlinux get_vmalloc_info [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux half_md4_transform
+ 1 100.000 vmlinux vmlinux half_md4_transform [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux handle_IRQ_event
+ 1 100.000 vmlinux vmlinux handle_IRQ_event [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux hrtimer_try_to_cancel
+ 1 100.000 vmlinux vmlinux hrtimer_try_to_cancel [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux hweight32
+ 1 100.000 vmlinux vmlinux hweight32 [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux idle_cpu
+ 1 100.000 vmlinux vmlinux idle_cpu [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux init_waitqueue_head
+ 1 100.000 vmlinux vmlinux init_waitqueue_head [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux inode_setattr
+ 1 100.000 vmlinux vmlinux inode_setattr [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux inotify_dentry_parent_queue_event
+ 1 100.000 vmlinux vmlinux inotify_dentry_parent_queue_event [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ioprio_best
+ 1 100.000 vmlinux vmlinux ioprio_best [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ioread32
+ 1 100.000 vmlinux vmlinux ioread32 [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ip_rcv
+ 1 100.000 vmlinux vmlinux ip_rcv [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ip_route_input
+ 1 100.000 vmlinux vmlinux ip_route_input [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux iput
+ 1 100.000 vmlinux vmlinux iput [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux kmap_atomic
+ 1 100.000 vmlinux vmlinux kmap_atomic [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux kthread_should_stop
+ 1 100.000 vmlinux vmlinux kthread_should_stop [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux ll_rw_block
+ 1 100.000 vmlinux vmlinux ll_rw_block [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux local_bh_enable_ip
+ 1 100.000 vmlinux vmlinux local_bh_enable_ip [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux lookup_create
+ 1 100.000 vmlinux vmlinux lookup_create [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux lru_add_drain
+ 1 100.000 vmlinux vmlinux lru_add_drain [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux lru_cache_add
+ 1 100.000 vmlinux vmlinux lru_cache_add [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux mapping_tagged
+ 1 100.000 vmlinux vmlinux mapping_tagged [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux math_state_restore
+ 1 100.000 vmlinux vmlinux math_state_restore [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux memcpy_fromiovec
+ 1 100.000 vmlinux vmlinux memcpy_fromiovec [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux memcpy_toiovec
+ 1 100.000 vmlinux vmlinux memcpy_toiovec [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux mempool_alloc
+ 1 100.000 vmlinux vmlinux mempool_alloc [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux mm_init
+ 1 100.000 vmlinux vmlinux mm_init [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux mpage_readpage
+ 1 100.000 vmlinux vmlinux mpage_readpage [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux n_tty_chars_in_buffer
+ 1 100.000 vmlinux vmlinux n_tty_chars_in_buffer [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux pagevec_lookup_tag
+ 1 100.000 vmlinux vmlinux pagevec_lookup_tag [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux pipe_poll
+ 1 100.000 vmlinux vmlinux pipe_poll [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux prio_tree_left
+ 1 100.000 vmlinux vmlinux prio_tree_left [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux prio_tree_next
+ 1 100.000 vmlinux vmlinux prio_tree_next [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux proc_delete_inode
+ 1 100.000 vmlinux vmlinux proc_delete_inode [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux proc_lookup
+ 1 100.000 vmlinux vmlinux proc_lookup [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux profile_hit
+ 1 100.000 vmlinux vmlinux profile_hit [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux profile_pc
+ 1 100.000 vmlinux vmlinux profile_pc [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux pty_write
+ 1 100.000 vmlinux vmlinux pty_write [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux rb_insert_color
+ 1 100.000 vmlinux vmlinux rb_insert_color [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux rb_next
+ 1 100.000 vmlinux vmlinux rb_next [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux recalc_bh_state
+ 1 100.000 vmlinux vmlinux recalc_bh_state [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux remove_from_page_cache
+ 1 100.000 vmlinux vmlinux remove_from_page_cache [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux resume_userspace
+ 1 100.000 vmlinux vmlinux resume_userspace [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux run_workqueue
+ 1 100.000 vmlinux vmlinux run_workqueue [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux rw_copy_check_uvector
+ 1 100.000 vmlinux vmlinux rw_copy_check_uvector [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux sata_scr_read
+ 1 100.000 vmlinux vmlinux sata_scr_read [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux scsi_decide_disposition
+ 1 100.000 vmlinux vmlinux scsi_decide_disposition [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux scsi_error_handler
+ 1 100.000 vmlinux vmlinux scsi_error_handler [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux scsi_execute
+ 1 100.000 vmlinux vmlinux scsi_execute [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux scsi_get_command
+ 1 100.000 vmlinux vmlinux scsi_get_command [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux scsi_run_queue
+ 1 100.000 vmlinux vmlinux scsi_run_queue [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux search_binary_handler
+ 1 100.000 vmlinux vmlinux search_binary_handler [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux search_exception_tables
+ 1 100.000 vmlinux vmlinux search_exception_tables [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux send_IPI_mask_bitmask
+ 1 100.000 vmlinux vmlinux send_IPI_mask_bitmask [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux set_page_dirty_balance
+ 1 100.000 vmlinux vmlinux set_page_dirty_balance [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux sha_transform
+ 1 100.000 vmlinux vmlinux sha_transform [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux show_map_internal
+ 1 100.000 vmlinux vmlinux show_map_internal [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux sigprocmask
+ 1 100.000 vmlinux vmlinux sigprocmask [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux skb_dequeue
+ 1 100.000 vmlinux vmlinux skb_dequeue [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux skb_queue_tail
+ 1 100.000 vmlinux vmlinux skb_queue_tail [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux smp_send_timer_broadcast_ipi
+ 1 100.000 vmlinux vmlinux smp_send_timer_broadcast_ipi [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux sock_aio_read
+ 1 100.000 vmlinux vmlinux sock_aio_read [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux sr_open
+ 1 100.000 vmlinux vmlinux sr_open [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux static_prio_timeslice
+ 1 100.000 vmlinux vmlinux static_prio_timeslice [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux sync_sb_inodes
+ 1 100.000 vmlinux vmlinux sync_sb_inodes [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux sys_mmap2
+ 1 100.000 vmlinux vmlinux sys_mmap2 [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux sys_read
+ 1 100.000 vmlinux vmlinux sys_read [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux sys_rt_sigprocmask
+ 1 100.000 vmlinux vmlinux sys_rt_sigprocmask [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux sys_write
+ 1 100.000 vmlinux vmlinux sys_write [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux tasklet_action
+ 1 100.000 vmlinux vmlinux tasklet_action [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux tcp_v4_rcv
+ 1 100.000 vmlinux vmlinux tcp_v4_rcv [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux tcp_v4_send_check
+ 1 100.000 vmlinux vmlinux tcp_v4_send_check [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux timespec_trunc
+ 1 100.000 vmlinux vmlinux timespec_trunc [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux try_to_free_buffers
+ 1 100.000 vmlinux vmlinux try_to_free_buffers [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux tsc_update_callback
+ 1 100.000 vmlinux vmlinux tsc_update_callback [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux tty_paranoia_check
+ 1 100.000 vmlinux vmlinux tty_paranoia_check [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux tty_poll
+ 1 100.000 vmlinux vmlinux tty_poll [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux tty_read
+ 1 100.000 vmlinux vmlinux tty_read [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux unix_ioctl
+ 1 100.000 vmlinux vmlinux unix_ioctl [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux unix_write_space
+ 1 100.000 vmlinux vmlinux unix_write_space [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux unlink_file_vma
+ 1 100.000 vmlinux vmlinux unlink_file_vma [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux unmap_region
+ 1 100.000 vmlinux vmlinux unmap_region [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux vfs_llseek
+ 1 100.000 vmlinux vmlinux vfs_llseek [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux vfs_mkdir
+ 1 100.000 vmlinux vmlinux vfs_mkdir [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux vfs_rename
+ 1 100.000 vmlinux vmlinux vfs_rename [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux vm_normal_page
+ 1 100.000 vmlinux vmlinux vm_normal_page [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux vma_link
+ 1 100.000 vmlinux vmlinux vma_link [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux vma_prio_tree_add
+ 1 100.000 vmlinux vmlinux vma_prio_tree_add [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux wake_up_bit
+ 1 100.000 vmlinux vmlinux wake_up_bit [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux wake_up_new_task
+ 1 100.000 vmlinux vmlinux wake_up_new_task [self]
+-------------------------------------------------------------------------------
+1 7.0e-04 vmlinux vmlinux worker_thread
+ 1 100.000 vmlinux vmlinux worker_thread [self]
+-------------------------------------------------------------------------------
+ 26 100.000 Xorg Xorg WaitForSomething
+0 0 Xorg Xorg BlockHandler
+ 19 73.0769 libdri.so Xorg DRIBlockHandler
+ 5 19.2308 Xorg Xorg compBlockHandler
+ 1 3.8462 mouse_drv.so Xorg __i686.get_pc_thunk.bx
+ 1 3.8462 mouse_drv.so Xorg MouseBlockHandler
+ 0 0 Xorg Xorg BlockHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcessPointerEvent
+0 0 Xorg Xorg CoreProcessPointerEvent
+ 1 100.000 Xorg Xorg XYToWindow
+ 0 0 Xorg Xorg CoreProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg ProcCreateGC
+0 0 Xorg Xorg CreateGC
+ 2 66.6667 Xorg Xorg AllocateGC
+ 1 33.3333 Xorg Xorg damageCreateGC
+ 0 0 Xorg Xorg CreateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg FlushAllOutput
+0 0 Xorg Xorg FlushClient
+ 1 100.000 Xorg Xorg _XSERVTransWritev
+ 0 0 Xorg Xorg FlushClient [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg FreeResource
+0 0 Xorg Xorg FreeGC
+ 3 75.0000 Xorg Xorg damageDestroyGC
+ 1 25.0000 Xorg Xorg damageDestroyClip
+ 0 0 Xorg Xorg FreeGC [self]
+-------------------------------------------------------------------------------
+ 17 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcCopyArea
+ 14 82.3529 Xorg Xorg damageCopyArea
+ 2 11.7647 Xorg Xorg ValidateGC
+ 1 5.8824 Xorg Xorg dixLookupGC
+ 0 0 Xorg Xorg ProcCopyArea [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcCreateGC
+ 3 100.000 Xorg Xorg CreateGC
+ 0 0 Xorg Xorg ProcCreateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcQueryTree
+ 1 100.000 Xorg Xorg WriteToClient
+ 0 0 Xorg Xorg ProcQueryTree [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg Dispatch
+0 0 Xorg Xorg ProcessInputEvents
+ 1 100.000 Xorg Xorg mieqProcessInputEvents
+ 0 0 Xorg Xorg ProcessInputEvents [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg mieqProcessInputEvents
+0 0 Xorg Xorg ProcessPointerEvent
+ 1 100.000 Xorg Xorg CoreProcessPointerEvent
+ 0 0 Xorg Xorg ProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg Xorg ProcRenderSetPictureClipRectangles
+0 0 Xorg Xorg SetPictureClipRects
+ 4 50.0000 Xorg Xorg miRectsToRegion
+ 3 37.5000 Xorg Xorg miChangePictureClip
+ 1 12.5000 Xorg Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg Xorg SetPictureClipRects [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg ReadRequestFromClient
+0 0 Xorg Xorg _XSERVTransRead
+ 3 60.0000 libc-2.5.so Xorg __read_nocancel
+ 2 40.0000 libc-2.5.so Xorg read
+ 0 0 Xorg Xorg _XSERVTransRead [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg _start
+ 74263 100.000 libc-2.5.so Xorg __libc_start_main
+ 0 0 Xorg Xorg _start [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg BlockHandler
+0 0 Xorg Xorg compBlockHandler
+ 5 100.000 Xorg Xorg AnimCurScreenBlockHandler
+ 0 0 Xorg Xorg compBlockHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg CreateGC
+0 0 Xorg Xorg damageCreateGC
+ 1 100.000 Xorg Xorg miBSCreateGC
+ 0 0 Xorg Xorg damageCreateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg FreeGC
+0 0 Xorg Xorg damageDestroyClip
+ 1 100.000 Xorg Xorg miBSCheapDestroyClip
+ 0 0 Xorg Xorg damageDestroyClip [self]
+-------------------------------------------------------------------------------
+ 1 8.3333 Xorg Xorg ProcFreeGC
+ 1 8.3333 Xorg Xorg ProcCopyArea
+ 3 25.0000 Xorg Xorg ProcSetClipRectangles
+ 3 25.0000 Xorg Xorg ProcChangeGC
+ 4 33.3333 Xorg Xorg ProcPolySegment
+0 0 Xorg Xorg dixLookupGC
+ 12 100.000 Xorg Xorg SecurityLookupIDByType
+ 0 0 Xorg Xorg dixLookupGC [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg main
+ 74250 99.9569 Xorg Xorg Dispatch
+ 9 0.0121 Xorg Xorg XaceCatchDispatchProc
+ 7 0.0094 Xorg Xorg XaceHook
+ 6 0.0081 Xorg Xorg XaceCatchExtProc
+ 5 0.0067 Xorg Xorg FlushAllOutput
+ 3 0.0040 Xorg Xorg WaitForSomething
+ 2 0.0027 Xorg Xorg ReadRequestFromClient
+ 0 0 Xorg Xorg main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageDestroyClip
+0 0 Xorg Xorg miBSCheapDestroyClip
+ 1 100.000 Xorg Xorg miRegionDestroy
+ 0 0 Xorg Xorg miBSCheapDestroyClip [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damageDestroyGC
+0 0 Xorg Xorg miBSCheapDestroyGC
+ 2 100.000 Xorg Xorg miDestroyGC
+ 0 0 Xorg Xorg miBSCheapDestroyGC [self]
+-------------------------------------------------------------------------------
+ 52 100.000 Xorg Xorg miTrapezoids
+0 0 Xorg Xorg miCreateAlphaPicture
+ 35 67.3077 Xorg Xorg damagePolyFillRect
+ 9 17.3077 libexa.so Xorg exaCreatePixmap
+ 2 3.8462 Xorg Xorg CreatePicture
+ 2 3.8462 libextmod.so Xorg XvDestroyPixmap
+ 1 1.9231 Xorg Xorg ValidateGC
+ 1 1.9231 Xorg Xorg FreeScratchGC
+ 1 1.9231 Xorg Xorg DamageSetReportAfterOp
+ 1 1.9231 Xorg Xorg DamageCreate
+ 0 0 Xorg Xorg miCreateAlphaPicture [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg miBSCheapDestroyGC
+0 0 Xorg Xorg miDestroyGC
+ 2 100.000 Xorg Xorg miDestroyGCOps
+ 0 0 Xorg Xorg miDestroyGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg miRegionValidate
+0 0 Xorg Xorg miRectAlloc
+ 1 100.000 Xorg Xorg Xalloc
+ 0 0 Xorg Xorg miRectAlloc [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg miColorRects
+0 0 Xorg Xorg miRegionCopy
+ 2 100.000 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 0 0 Xorg Xorg miRegionCopy [self]
+-------------------------------------------------------------------------------
+ 14234 100.000 Xorg Xorg CompositeTrapezoids
+0 0 Xorg Xorg miTrapezoids
+ 9843 69.1416 libexa.so Xorg exaRasterizeTrapezoid
+ 4291 30.1419 Xorg Xorg CompositePicture
+ 52 0.3653 Xorg Xorg miCreateAlphaPicture
+ 40 0.2810 Xorg Xorg miTrapezoidBounds
+ 7 0.0492 Xorg Xorg FreePicture
+ 1 0.0070 Xorg Xorg damageComposite
+ 1 0.0070 libexa.so Xorg exaFinishAccess
+ 1 0.0070 libexa.so Xorg exaPixmapDirty
+ 0 0 Xorg Xorg miTrapezoids [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcessInputEvents
+0 0 Xorg Xorg mieqProcessInputEvents
+ 1 100.000 Xorg Xorg ProcessPointerEvent
+ 0 0 Xorg Xorg mieqProcessInputEvents [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg xf86PostMotionEvent
+ 1 100.000 Xorg Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg Xorg xf86PostMotionEvent [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg xf86SIGIO
+ 2 100.000 Xorg Xorg xf86SigioReadInput
+ 0 0 Xorg Xorg xf86SIGIO [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg xf86SIGIO
+0 0 Xorg Xorg xf86SigioReadInput
+ 1 50.0000 mouse_drv.so Xorg MouseReadInput
+ 1 50.0000 libc-2.5.so Xorg sigismember
+ 0 0 Xorg Xorg xf86SigioReadInput [self]
+-------------------------------------------------------------------------------
+ 122 100.000 intel_drv.so intel_drv.so I830WaitLpRing
+0 0 Xorg intel_drv.so .plt
+ 0 0 Xorg intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 184 8.6957 intel_drv.so intel_drv.so I830Sync
+ 1932 91.3043 intel_drv.so intel_drv.so I830WaitLpRing
+0 0 Xorg intel_drv.so GetTimeInMillis
+ 0 0 Xorg intel_drv.so GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+ 111 100.000 intel_drv.so intel_drv.so I830WaitLpRing
+0 0 Xorg intel_drv.so __i686.get_pc_thunk.bx
+ 0 0 Xorg intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 74271 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 Xorg libc-2.5.so main
+ 0 0 Xorg libc-2.5.so main [self]
+-------------------------------------------------------------------------------
+ 1 1.1628 libexa.so libexa.so ExaOffscreenMerge
+ 7 8.1395 libexa.so libexa.so exaPixmapDirty
+ 78 90.6977 libexa.so libexa.so exaTryDriverComposite
+0 0 Xorg libexa.so .plt
+ 0 0 Xorg libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 15 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so CreatePicture
+ 0 0 Xorg libexa.so CreatePicture [self]
+-------------------------------------------------------------------------------
+ 3 11.5385 libexa.so libexa.so exaGlyphs
+ 23 88.4615 libexa.so libexa.so exaCreatePixmap
+0 0 Xorg libexa.so DamageCreate
+ 0 0 Xorg libexa.so DamageCreate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaMoveInPixmap
+0 0 Xorg libexa.so DamageEmpty
+ 0 0 Xorg libexa.so DamageEmpty [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaPixmapDirty
+0 0 Xorg libexa.so DamageRegion
+ 0 0 Xorg libexa.so DamageRegion [self]
+-------------------------------------------------------------------------------
+ 2 28.5714 libexa.so libexa.so exaGlyphs
+ 5 71.4286 libexa.so libexa.so exaCreatePixmap
+0 0 Xorg libexa.so DamageRegister
+ 0 0 Xorg libexa.so DamageRegister [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaCreatePixmap
+0 0 Xorg libexa.so DamageSetReportAfterOp
+ 0 0 Xorg libexa.so DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 45 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so FreePicture
+ 0 0 Xorg libexa.so FreePicture [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so FreeScratchGC
+ 0 0 Xorg libexa.so FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so FreeScratchPixmapHeader
+ 0 0 Xorg libexa.so FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so GetScratchGC
+ 0 0 Xorg libexa.so GetScratchGC [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so GetScratchPixmapHeader
+ 0 0 Xorg libexa.so GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so ValidateGC
+ 0 0 Xorg libexa.so ValidateGC [self]
+-------------------------------------------------------------------------------
+ 10 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so ValidatePicture
+ 0 0 Xorg libexa.so ValidatePicture [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libexa.so libexa.so exaMoveInPixmap
+ 4 80.0000 libexa.so libexa.so exaOffscreenAlloc
+0 0 Xorg libexa.so Xalloc
+ 0 0 Xorg libexa.so Xalloc [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 libexa.so libexa.so exaOffscreenFree
+ 2 33.3333 libexa.so libexa.so ExaOffscreenMerge
+ 3 50.0000 libexa.so libexa.so exaDestroyPixmap
+0 0 Xorg libexa.so Xfree
+ 0 0 Xorg libexa.so Xfree [self]
+-------------------------------------------------------------------------------
+ 2 6.6667 libexa.so libexa.so exaCreatePixmap
+ 2 6.6667 libexa.so libexa.so exaPolyFillRect
+ 2 6.6667 libexa.so libexa.so exaMoveInPixmap
+ 5 16.6667 libexa.so libexa.so exaGlyphs
+ 8 26.6667 libexa.so libexa.so exaTryDriverComposite
+ 11 36.6667 libexa.so libexa.so exaPixmapDirty
+0 0 Xorg libexa.so __i686.get_pc_thunk.bx
+ 0 0 Xorg libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so damageInsertDamage
+ 0 0 Xorg libexa.so damageInsertDamage [self]
+-------------------------------------------------------------------------------
+ 31 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so damagePolyFillRect
+ 0 0 Xorg libexa.so damagePolyFillRect [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaCreatePixmap
+0 0 Xorg libexa.so getDrawableDamageRef
+ 0 0 Xorg libexa.so getDrawableDamageRef [self]
+-------------------------------------------------------------------------------
+ 17 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 Xorg libexa.so miCompositeSourceValidate
+ 0 0 Xorg libexa.so miCompositeSourceValidate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaValidateGC
+0 0 Xorg libexa.so miComputeCompositeClip
+ 0 0 Xorg libexa.so miComputeCompositeClip [self]
+-------------------------------------------------------------------------------
+ 15 1.3251 libexa.so libexa.so exaComposite
+ 1117 98.6749 libexa.so libexa.so exaTryDriverComposite
+0 0 Xorg libexa.so miComputeCompositeRegion
+ 0 0 Xorg libexa.so miComputeCompositeRegion [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so miDestroyPicture
+ 0 0 Xorg libexa.so miDestroyPicture [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so miDestroyPictureClip
+ 0 0 Xorg libexa.so miDestroyPictureClip [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so miGlyphExtents
+ 0 0 Xorg libexa.so miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miIntersect
+ 0 0 Xorg libexa.so miIntersect [self]
+-------------------------------------------------------------------------------
+ 104 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so miModifyPixmapHeader
+ 0 0 Xorg libexa.so miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 56 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miRectsToRegion
+ 0 0 Xorg libexa.so miRectsToRegion [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miRegionDestroy
+ 0 0 Xorg libexa.so miRegionDestroy [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libexa.so libexa.so exaCopyArea
+0 0 Xorg libexa.so miSpriteSourceValidate
+ 0 0 Xorg libexa.so miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miTranslateRegion
+ 0 0 Xorg libexa.so miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 1 0.1066 libexa.so libexa.so exaDoMigration
+ 3 0.3198 libexa.so libexa.so exaGlyphs
+ 4 0.4264 libexa.so libexa.so exaComposite
+ 9 0.9595 libexa.so libexa.so exaMoveInPixmap
+ 921 98.1876 libexa.so libexa.so exaPixmapDirty
+0 0 Xorg libexa.so miUnion
+ 0 0 Xorg libexa.so miUnion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 Xorg libextmod.so DamageDestroy
+ 0 0 Xorg libextmod.so DamageDestroy [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 Xorg libextmod.so __i686.get_pc_thunk.bx
+ 0 0 Xorg libextmod.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 114 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 Xorg libextmod.so damageDestroyPixmap
+ 0 0 Xorg libextmod.so damageDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 Xorg libextmod.so damageRemoveDamage
+ 0 0 Xorg libextmod.so damageRemoveDamage [self]
+-------------------------------------------------------------------------------
+ 5 3.3557 libfb.so libfb.so fbCreatePixmap
+ 144 96.6443 libfb.so libfb.so fbCreatePixmapBpp
+0 0 Xorg libfb.so AllocatePixmap
+ 0 0 Xorg libfb.so AllocatePixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbCreatePixmapBpp
+0 0 Xorg libfb.so Xalloc
+ 0 0 Xorg libfb.so Xalloc [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libfb.so libfb.so fbDestroyPixmap
+0 0 Xorg libfb.so Xfree
+ 0 0 Xorg libfb.so Xfree [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libfb.so libfb.so fbDoCopy
+0 0 Xorg libfb.so __i686.get_pc_thunk.bx
+ 0 0 Xorg libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 22 100.000 libfb.so libfb.so fbValidateGC
+0 0 Xorg libfb.so miComputeCompositeClip
+ 0 0 Xorg libfb.so miComputeCompositeClip [self]
+-------------------------------------------------------------------------------
+ 60 100.000 libfb.so libfb.so fbDoCopy
+0 0 Xorg libfb.so miSpriteSourceValidate
+ 0 0 Xorg libfb.so miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbValidateGC
+0 0 Xorg libfb.so miTranslateRegion
+ 0 0 Xorg libfb.so miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 mouse_drv.so mouse_drv.so MouseDoPostEvent
+0 0 Xorg mouse_drv.so xf86PostMotionEvent
+ 0 0 Xorg mouse_drv.so xf86PostMotionEvent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 intel_drv.so intel_drv.so I830WaitLpRing
+0 0 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) intel_drv.so (no symbols)
+ 0 0 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) intel_drv.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) libexa.so (no symbols)
+ 0 0 anon (tgid:4263 range:0xb7f4d000-0xb7f4e000) libexa.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 0.3817 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 1 0.3817 libc-2.5.so libc-2.5.so _IO_vfwscanf
+ 1 0.3817 libc-2.5.so libc-2.5.so create_ci_newstate
+ 259 98.8550 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 bash libc-2.5.so (no symbols)
+ 0 0 bash libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 cat libc-2.5.so (no symbols)
+ 0 0 cat libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 dirname libc-2.5.so (no symbols)
+ 0 0 dirname libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 2.1739 libc-2.5.so libc-2.5.so malloc
+ 135 97.8261 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 emacs21-x libc-2.5.so (no symbols)
+ 0 0 emacs21-x libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libc-2.5.so libc-2.5.so exit
+ 3 75.0000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 expr libc-2.5.so (no symbols)
+ 0 0 expr libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 901 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 firefox-bin libc-2.5.so (no symbols)
+ 0 0 firefox-bin libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 gawk libc-2.5.so (no symbols)
+ 0 0 gawk libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 gconfd-2 libc-2.5.so (no symbols)
+ 0 0 gconfd-2 libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 grep libc-2.5.so (no symbols)
+ 0 0 grep libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 hald-addon-storage libc-2.5.so (no symbols)
+ 0 0 hald-addon-storage libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 id libc-2.5.so (no symbols)
+ 0 0 id libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 libdri.so libdri.so DRIBlockHandler
+ 6 46.1538 libdri.so libdri.so DRIDoBlockHandler
+ 6 46.1538 libdri.so libdri.so DRIDoWakeupHandler
+0 0 intel_drv.so libdri.so I830DRISwapContext
+ 0 0 intel_drv.so libdri.so I830DRISwapContext [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libdri.so libdri.so DRIDoBlockHandler
+0 0 intel_drv.so libdri.so I830EmitFlush
+ 0 0 intel_drv.so libdri.so I830EmitFlush [self]
+-------------------------------------------------------------------------------
+ 2 2.1739 libexa.so libexa.so exaFillRegionSolid
+ 5 5.4348 libexa.so libexa.so exaWaitSync
+ 85 92.3913 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so .plt
+ 0 0 intel_drv.so libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 intel_drv.so libexa.so I830EXADoneSolid
+ 0 0 intel_drv.so libexa.so I830EXADoneSolid [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaCopyNtoN
+0 0 intel_drv.so libexa.so I830EXAPrepareCopy
+ 0 0 intel_drv.so libexa.so I830EXAPrepareCopy [self]
+-------------------------------------------------------------------------------
+ 1 6.6667 libexa.so libexa.so exaPolyFillRect
+ 14 93.3333 libexa.so libexa.so exaFillRegionSolid
+0 0 intel_drv.so libexa.so I830EXAPrepareSolid
+ 0 0 intel_drv.so libexa.so I830EXAPrepareSolid [self]
+-------------------------------------------------------------------------------
+ 8 13.3333 libexa.so libexa.so exaPolyFillRect
+ 52 86.6667 libexa.so libexa.so exaFillRegionSolid
+0 0 intel_drv.so libexa.so I830EXASolid
+ 0 0 intel_drv.so libexa.so I830EXASolid [self]
+-------------------------------------------------------------------------------
+ 37265 100.000 libexa.so libexa.so exaWaitSync
+0 0 intel_drv.so libexa.so I830EXASync
+ 0 0 intel_drv.so libexa.so I830EXASync [self]
+-------------------------------------------------------------------------------
+ 11 100.000 libexa.so libexa.so exaWaitSync
+0 0 intel_drv.so libexa.so I830Sync
+ 0 0 intel_drv.so libexa.so I830Sync [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so IntelEmitInvarientState
+ 0 0 intel_drv.so libexa.so IntelEmitInvarientState [self]
+-------------------------------------------------------------------------------
+ 4 10.2564 libexa.so libexa.so exaWaitSync
+ 4 10.2564 libexa.so libexa.so exaFillRegionSolid
+ 6 15.3846 libexa.so libexa.so exaComposite
+ 25 64.1026 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 0 0 intel_drv.so libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 39 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i830WaitSync
+ 0 0 intel_drv.so libexa.so i830WaitSync [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libexa.so libexa.so exaComposite
+0 0 intel_drv.so libexa.so i830_done_composite
+ 0 0 intel_drv.so libexa.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i830_get_transformed_coordinates
+ 0 0 intel_drv.so libexa.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+ 11 3.8194 libexa.so libexa.so exaGlyphs
+ 114 39.5833 libexa.so libexa.so exaComposite
+ 163 56.5972 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_check_composite
+ 0 0 intel_drv.so libexa.so i965_check_composite [self]
+-------------------------------------------------------------------------------
+ 8 42.1053 libexa.so libexa.so exaComposite
+ 11 57.8947 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_check_composite_texture
+ 0 0 intel_drv.so libexa.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+ 459 12.9332 libexa.so libexa.so exaComposite
+ 3090 87.0668 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_composite
+ 0 0 intel_drv.so libexa.so i965_composite [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_get_card_format
+ 0 0 intel_drv.so libexa.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+ 9 37.5000 libexa.so libexa.so exaComposite
+ 15 62.5000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_get_dest_format
+ 0 0 intel_drv.so libexa.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+ 8 0.0177 libexa.so libexa.so exaComposite
+ 45208 99.9823 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_prepare_composite
+ 0 0 intel_drv.so libexa.so i965_prepare_composite [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so intel_get_pixmap_offset
+ 0 0 intel_drv.so libexa.so intel_get_pixmap_offset [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so intel_get_pixmap_pitch
+ 0 0 intel_drv.so libexa.so intel_get_pixmap_pitch [self]
+-------------------------------------------------------------------------------
+ 8 44.4444 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 10 55.5556 ld-2.5.so ld-2.5.so _dl_open
+0 0 ld-2.5.so ld-2.5.so _dl_catch_error
+ 10 32.2581 ld-2.5.so ld-2.5.so dl_open_worker
+ 8 25.8065 ld-2.5.so ld-2.5.so openaux
+ 7 22.5806 libdl-2.5.so ld-2.5.so dlopen_doit
+ 3 9.6774 libc-2.5.so ld-2.5.so do_dlopen
+ 2 6.4516 libc-2.5.so ld-2.5.so do_dlsym
+ 1 3.2258 libdl-2.5.so ld-2.5.so dlsym_doit
+ 0 0 ld-2.5.so ld-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 3 100.000 ld-2.5.so ld-2.5.so version_check_doit
+0 0 ld-2.5.so ld-2.5.so _dl_check_all_versions
+ 2 66.6667 ld-2.5.so ld-2.5.so _dl_check_map_versions
+ 1 33.3333 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 0 0 ld-2.5.so ld-2.5.so _dl_check_all_versions [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_fini
+ 2 66.6667 ld-2.5.so ld-2.5.so _dl_sort_fini
+ 1 33.3333 libdl-2.5.so ld-2.5.so .fini
+ 0 0 ld-2.5.so ld-2.5.so _dl_fini [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so dl_main
+0 0 ld-2.5.so ld-2.5.so _dl_init_paths
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_important_hwcaps
+ 0 0 ld-2.5.so ld-2.5.so _dl_init_paths [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+0 0 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_cache_libcmp
+ 0 0 ld-2.5.so ld-2.5.so _dl_load_cache_lookup [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 ld-2.5.so ld-2.5.so dl_open_worker
+ 7 87.5000 ld-2.5.so ld-2.5.so openaux
+0 0 ld-2.5.so ld-2.5.so _dl_map_object
+ 4 50.0000 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+ 2 25.0000 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 1 12.5000 ld-2.5.so ld-2.5.so close
+ 1 12.5000 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+ 0 0 ld-2.5.so ld-2.5.so _dl_map_object [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_open
+ 10 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so ld-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 3 100.000 ld-2.5.so ld-2.5.so dl_main
+0 0 ld-2.5.so ld-2.5.so _dl_receive_error
+ 3 100.000 ld-2.5.so ld-2.5.so version_check_doit
+ 0 0 ld-2.5.so ld-2.5.so _dl_receive_error [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_runtime_resolve
+ 21 100.000 ld-2.5.so ld-2.5.so _dl_fixup
+ 0 0 ld-2.5.so ld-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_start_user
+ 51 87.9310 ld-2.5.so ld-2.5.so _dl_start
+ 7 12.0690 ld-2.5.so ld-2.5.so _dl_init_internal
+ 0 0 ld-2.5.so ld-2.5.so _dl_start_user [self]
+-------------------------------------------------------------------------------
+ 6 100.000 ld-2.5.so ld-2.5.so _dl_init_internal
+0 0 ld-2.5.so ld-2.5.so call_init
+ 6 100.000 libselinux.so.1 ld-2.5.so (no symbols)
+ 0 0 ld-2.5.so ld-2.5.so call_init [self]
+-------------------------------------------------------------------------------
+ 10 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 ld-2.5.so ld-2.5.so dl_open_worker
+ 6 60.0000 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 1 10.0000 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 1 10.0000 ld-2.5.so ld-2.5.so _dl_check_map_versions
+ 1 10.0000 ld-2.5.so ld-2.5.so index
+ 1 10.0000 ld-2.5.so ld-2.5.so _dl_map_object
+ 0 0 ld-2.5.so ld-2.5.so dl_open_worker [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so dl_main
+0 0 ld-2.5.so ld-2.5.so init_tls
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_allocate_tls_storage
+ 0 0 ld-2.5.so ld-2.5.so init_tls [self]
+-------------------------------------------------------------------------------
+ 8 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 ld-2.5.so ld-2.5.so openaux
+ 7 87.5000 ld-2.5.so ld-2.5.so _dl_map_object
+ 1 12.5000 ld-2.5.so ld-2.5.so malloc
+ 0 0 ld-2.5.so ld-2.5.so openaux [self]
+-------------------------------------------------------------------------------
+ 3 100.000 ld-2.5.so ld-2.5.so _dl_receive_error
+0 0 ld-2.5.so ld-2.5.so version_check_doit
+ 3 100.000 ld-2.5.so ld-2.5.so _dl_check_all_versions
+ 0 0 ld-2.5.so ld-2.5.so version_check_doit [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 libc-2.5.so libc-2.5.so __libc_dlsym
+ 3 60.0000 libc-2.5.so libc-2.5.so __libc_dlopen_mode
+0 0 ld-2.5.so libc-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so libc-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so exit
+0 0 ld-2.5.so libc-2.5.so _dl_fini
+ 0 0 ld-2.5.so libc-2.5.so _dl_fini [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so do_sym
+ 2 66.6667 libc-2.5.so libc-2.5.so do_dlsym
+0 0 ld-2.5.so libc-2.5.so _dl_lookup_symbol_x
+ 0 0 ld-2.5.so libc-2.5.so _dl_lookup_symbol_x [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so do_dlopen
+0 0 ld-2.5.so libc-2.5.so _dl_open
+ 0 0 ld-2.5.so libc-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 libc-2.5.so libc-2.5.so _nl_find_locale
+ 8 88.8889 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 ld-2.5.so libc-2.5.so _dl_runtime_resolve
+ 0 0 ld-2.5.so libc-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libdl-2.5.so libdl-2.5.so _dlerror_run
+0 0 ld-2.5.so libdl-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so libdl-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libdl-2.5.so libdl-2.5.so dlopen_doit
+0 0 ld-2.5.so libdl-2.5.so _dl_open
+ 0 0 ld-2.5.so libdl-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libdl-2.5.so libdl-2.5.so .fini
+0 0 ld-2.5.so libdl-2.5.so _dl_runtime_resolve
+ 0 0 ld-2.5.so libdl-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg Dispatch
+0 0 libc-2.5.so Xorg ___newselect_nocancel
+ 0 0 libc-2.5.so Xorg ___newselect_nocancel [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg Dispatch
+0 0 libc-2.5.so Xorg __errno_location
+ 0 0 libc-2.5.so Xorg __errno_location [self]
+-------------------------------------------------------------------------------
+ 3 50.0000 Xorg Xorg Xfree
+ 3 50.0000 Xorg Xorg Xalloc
+0 0 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 Xorg Xorg FlushAllOutput
+ 3 75.0000 Xorg Xorg Dispatch
+0 0 libc-2.5.so Xorg __i686.get_pc_thunk.cx
+ 0 0 libc-2.5.so Xorg __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 74263 100.000 Xorg Xorg _start
+0 0 libc-2.5.so Xorg __libc_start_main
+ 0 0 libc-2.5.so Xorg __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg _XSERVTransRead
+0 0 libc-2.5.so Xorg __read_nocancel
+ 0 0 libc-2.5.so Xorg __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg _int_free
+ 0 0 libc-2.5.so Xorg _int_free [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg Xalloc
+0 0 libc-2.5.so Xorg _int_malloc
+ 0 0 libc-2.5.so Xorg _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 1.1628 Xorg Xorg FreeResource
+ 1 1.1628 Xorg Xorg DamageDestroy
+ 3 3.4884 Xorg Xorg miRegionDestroy
+ 81 94.1860 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg free
+ 0 0 libc-2.5.so Xorg free [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg WaitForSomething
+0 0 libc-2.5.so Xorg gettimeofday
+ 0 0 libc-2.5.so Xorg gettimeofday [self]
+-------------------------------------------------------------------------------
+ 2 0.9346 Xorg Xorg AllocatePixmap
+ 3 1.4019 Xorg Xorg miRegionCreate
+ 209 97.6636 Xorg Xorg Xalloc
+0 0 libc-2.5.so Xorg malloc
+ 0 0 libc-2.5.so Xorg malloc [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg SetClipRects
+0 0 libc-2.5.so Xorg memmove
+ 0 0 libc-2.5.so Xorg memmove [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg _XSERVTransRead
+0 0 libc-2.5.so Xorg read
+ 0 0 libc-2.5.so Xorg read [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg xf86SigioReadInput
+0 0 libc-2.5.so Xorg sigismember
+ 0 0 libc-2.5.so Xorg sigismember [self]
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg Xorg SetPictureToDefaults
+0 0 libc-2.5.so Xorg strlen
+ 0 0 libc-2.5.so Xorg strlen [self]
+-------------------------------------------------------------------------------
+ 14583 100.000 intel_drv.so intel_drv.so I830WaitLpRing
+0 0 libc-2.5.so intel_drv.so gettimeofday
+ 0 0 libc-2.5.so intel_drv.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 2907 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+0 0 libc-2.5.so intel_drv.so memcpy
+ 0 0 libc-2.5.so intel_drv.so memcpy [self]
+-------------------------------------------------------------------------------
+ 3 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 libc-2.5.so ld-2.5.so do_dlopen
+ 0 0 libc-2.5.so ld-2.5.so do_dlopen [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 libc-2.5.so ld-2.5.so do_dlsym
+ 0 0 libc-2.5.so ld-2.5.so do_dlsym [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __uflow
+0 0 libc-2.5.so libc-2.5.so _IO_default_uflow
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so _IO_default_uflow [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+0 0 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_setb
+ 1 50.0000 libc-2.5.so libc-2.5.so munmap
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __fopen_internal
+0 0 libc-2.5.so libc-2.5.so _IO_file_init@@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_link_in
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_init@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_seekoff_maybe_mmap
+0 0 libc-2.5.so libc-2.5.so _IO_file_seek
+ 1 100.000 libc-2.5.so libc-2.5.so llseek
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_seek [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_seekoff_unlocked
+0 0 libc-2.5.so libc-2.5.so _IO_file_seekoff_maybe_mmap
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_seek
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_seekoff_maybe_mmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_default_uflow
+0 0 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so __read_nocancel
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so fputs
+0 0 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 libc-2.5.so libc-2.5.so fgets_unlocked
+ 3 60.0000 libc-2.5.so libc-2.5.so fgets
+0 0 libc-2.5.so libc-2.5.so _IO_getline
+ 2 40.0000 libc-2.5.so libc-2.5.so _IO_getline_info
+ 2 40.0000 libc-2.5.so libc-2.5.so __uflow
+ 1 20.0000 libc-2.5.so libc-2.5.so memchr
+ 0 0 libc-2.5.so libc-2.5.so _IO_getline [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so fgetpos@@GLIBC_2.2
+0 0 libc-2.5.so libc-2.5.so _IO_seekoff_unlocked
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_seekoff_maybe_mmap
+ 0 0 libc-2.5.so libc-2.5.so _IO_seekoff_unlocked [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so _IO_vfwscanf
+ 1 100.000 bash libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so _IO_vfwscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getrlimit64@@GLIBC_2.2
+0 0 libc-2.5.so libc-2.5.so ____strtold_l_internal
+ 1 100.000 libc-2.5.so libc-2.5.so fdatasync
+ 0 0 libc-2.5.so libc-2.5.so ____strtold_l_internal [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so libc-2.5.so dcgettext
+0 0 libc-2.5.so libc-2.5.so __dcigettext
+ 7 100.000 libc-2.5.so libc-2.5.so _nl_find_domain
+ 0 0 libc-2.5.so libc-2.5.so __dcigettext [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 3 75.0000 libc-2.5.so libc-2.5.so fopen64
+0 0 libc-2.5.so libc-2.5.so __fopen_internal
+ 3 75.0000 libc-2.5.so libc-2.5.so malloc
+ 1 25.0000 libc-2.5.so libc-2.5.so _IO_file_init@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so __fopen_internal [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __wcsmbs_load_conv
+0 0 libc-2.5.so libc-2.5.so __gconv_find_transform
+ 1 50.0000 libc-2.5.so libc-2.5.so __gconv_load_cache
+ 1 50.0000 libc-2.5.so libc-2.5.so __gconv_lookup_cache
+ 0 0 libc-2.5.so libc-2.5.so __gconv_find_transform [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so __nss_lookup_function
+0 0 libc-2.5.so libc-2.5.so __libc_dlopen_mode
+ 3 100.000 ld-2.5.so libc-2.5.so _dl_catch_error
+ 0 0 libc-2.5.so libc-2.5.so __libc_dlopen_mode [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __nss_lookup_function
+0 0 libc-2.5.so libc-2.5.so __libc_dlsym
+ 2 100.000 ld-2.5.so libc-2.5.so _dl_catch_error
+ 0 0 libc-2.5.so libc-2.5.so __libc_dlsym [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so __libc_start_main
+ 74271 90.1675 Xorg libc-2.5.so main
+ 6704 8.1389 oprofiled libc-2.5.so (no symbols)
+ 901 1.0938 firefox-bin libc-2.5.so (no symbols)
+ 259 0.3144 bash libc-2.5.so (no symbols)
+ 135 0.1639 emacs21-x libc-2.5.so (no symbols)
+ 23 0.0279 grep libc-2.5.so (no symbols)
+ 21 0.0255 sudo libc-2.5.so (no symbols)
+ 12 0.0146 sshd libc-2.5.so (no symbols)
+ 8 0.0097 ld-2.5.so libc-2.5.so _dl_runtime_resolve
+ 6 0.0073 sleep libc-2.5.so (no symbols)
+ 6 0.0073 ls libc-2.5.so (no symbols)
+ 4 0.0049 cat libc-2.5.so (no symbols)
+ 4 0.0049 gawk libc-2.5.so (no symbols)
+ 4 0.0049 mkdir libc-2.5.so (no symbols)
+ 3 0.0036 expr libc-2.5.so (no symbols)
+ 2 0.0024 gconfd-2 libc-2.5.so (no symbols)
+ 2 0.0024 hald-addon-storage libc-2.5.so (no symbols)
+ 1 0.0012 mktemp libc-2.5.so (no symbols)
+ 1 0.0012 rm libc-2.5.so (no symbols)
+ 1 0.0012 id libc-2.5.so (no symbols)
+ 1 0.0012 dirname libc-2.5.so (no symbols)
+ 1 0.0012 tr libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so gethostbyname
+0 0 libc-2.5.so libc-2.5.so __nss_hostname_digits_dots
+ 1 100.000 libc-2.5.so libc-2.5.so __res_maybe_init
+ 0 0 libc-2.5.so libc-2.5.so __nss_hostname_digits_dots [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+0 0 libc-2.5.so libc-2.5.so __nss_hosts_lookup
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_lookup
+ 0 0 libc-2.5.so libc-2.5.so __nss_hosts_lookup [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libc-2.5.so libc-2.5.so __nss_hosts_lookup
+ 1 25.0000 libc-2.5.so libc-2.5.so __nss_shadow_lookup
+ 2 50.0000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+0 0 libc-2.5.so libc-2.5.so __nss_lookup
+ 4 100.000 libc-2.5.so libc-2.5.so __nss_lookup_function
+ 0 0 libc-2.5.so libc-2.5.so __nss_lookup [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so __nss_lookup
+0 0 libc-2.5.so libc-2.5.so __nss_lookup_function
+ 3 60.0000 libc-2.5.so libc-2.5.so __libc_dlopen_mode
+ 2 40.0000 libc-2.5.so libc-2.5.so __libc_dlsym
+ 0 0 libc-2.5.so libc-2.5.so __nss_lookup_function [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 2 66.6667 libc-2.5.so libc-2.5.so __nss_setent
+0 0 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+ 2 66.6667 libc-2.5.so libc-2.5.so __nss_lookup
+ 1 33.3333 libc-2.5.so libc-2.5.so __nss_database_lookup
+ 0 0 libc-2.5.so libc-2.5.so __nss_passwd_lookup [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so setpwent
+0 0 libc-2.5.so libc-2.5.so __nss_setent
+ 2 66.6667 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+ 1 33.3333 libnss_compat-2.5.so libc-2.5.so _nss_compat_setpwent
+ 0 0 libc-2.5.so libc-2.5.so __nss_setent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getspnam_r@@GLIBC_2.1.2
+0 0 libc-2.5.so libc-2.5.so __nss_shadow_lookup
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_lookup
+ 0 0 libc-2.5.so libc-2.5.so __nss_shadow_lookup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_hostname_digits_dots
+0 0 libc-2.5.so libc-2.5.so __res_maybe_init
+ 1 100.000 libc-2.5.so libc-2.5.so __res_ninit
+ 0 0 libc-2.5.so libc-2.5.so __res_maybe_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __res_maybe_init
+0 0 libc-2.5.so libc-2.5.so __res_ninit
+ 1 100.000 libc-2.5.so libc-2.5.so __res_vinit
+ 0 0 libc-2.5.so libc-2.5.so __res_ninit [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __res_ninit
+0 0 libc-2.5.so libc-2.5.so __res_vinit
+ 1 100.000 libc-2.5.so libc-2.5.so fgets_unlocked
+ 0 0 libc-2.5.so libc-2.5.so __res_vinit [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so mbrtowc
+0 0 libc-2.5.so libc-2.5.so __wcsmbs_load_conv
+ 2 100.000 libc-2.5.so libc-2.5.so __gconv_find_transform
+ 0 0 libc-2.5.so libc-2.5.so __wcsmbs_load_conv [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so _dl_sym
+ 1 100.000 libc-2.5.so libc-2.5.so do_sym
+ 0 0 libc-2.5.so libc-2.5.so _dl_sym [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so _nl_find_domain
+0 0 libc-2.5.so libc-2.5.so _nl_expand_alias
+ 2 66.6667 libc-2.5.so libc-2.5.so read_alias_file
+ 1 33.3333 libc-2.5.so libc-2.5.so strlen
+ 0 0 libc-2.5.so libc-2.5.so _nl_expand_alias [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so libc-2.5.so __dcigettext
+0 0 libc-2.5.so libc-2.5.so _nl_find_domain
+ 3 42.8571 libc-2.5.so libc-2.5.so _nl_expand_alias
+ 2 28.5714 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+ 1 14.2857 libc-2.5.so libc-2.5.so _nl_load_domain
+ 1 14.2857 libc-2.5.so libc-2.5.so __open_nocancel
+ 0 0 libc-2.5.so libc-2.5.so _nl_find_domain [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libc-2.5.so libc-2.5.so setlocale
+0 0 libc-2.5.so libc-2.5.so _nl_find_locale
+ 22 95.6522 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+ 1 4.3478 ld-2.5.so libc-2.5.so _dl_runtime_resolve
+ 0 0 libc-2.5.so libc-2.5.so _nl_find_locale [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+ 2 66.6667 libc-2.5.so libc-2.5.so _nl_find_domain
+0 0 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+ 2 66.6667 libc-2.5.so libc-2.5.so strcmp
+ 1 33.3333 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+ 0 0 libc-2.5.so libc-2.5.so _nl_make_l10nflist [self]
+-------------------------------------------------------------------------------
+ 15 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+0 0 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 14 93.3333 libc-2.5.so libc-2.5.so malloc
+ 1 6.6667 bash libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so _nl_normalize_codeset [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so asprintf
+ 1 100.000 libc-2.5.so libc-2.5.so vasprintf
+ 0 0 libc-2.5.so libc-2.5.so asprintf [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so calloc
+ 1 100.000 libc-2.5.so libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so libc-2.5.so calloc [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so clone
+ 5 100.000 libpthread-2.5.so libc-2.5.so start_thread
+ 0 0 libc-2.5.so libc-2.5.so clone [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so closedir
+ 1 100.000 libc-2.5.so libc-2.5.so free
+ 0 0 libc-2.5.so libc-2.5.so closedir [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so create_ci_newstate
+ 1 100.000 bash libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so create_ci_newstate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so strerror_r
+0 0 libc-2.5.so libc-2.5.so dcgettext
+ 7 100.000 libc-2.5.so libc-2.5.so __dcigettext
+ 0 0 libc-2.5.so libc-2.5.so dcgettext [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so do_dlopen
+ 3 100.000 ld-2.5.so libc-2.5.so _dl_open
+ 0 0 libc-2.5.so libc-2.5.so do_dlopen [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so do_dlsym
+ 2 100.000 ld-2.5.so libc-2.5.so _dl_lookup_symbol_x
+ 0 0 libc-2.5.so libc-2.5.so do_dlsym [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _dl_sym
+0 0 libc-2.5.so libc-2.5.so do_sym
+ 1 100.000 ld-2.5.so libc-2.5.so _dl_lookup_symbol_x
+ 0 0 libc-2.5.so libc-2.5.so do_sym [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so error
+ 1 100.000 libc-2.5.so libc-2.5.so error_tail
+ 0 0 libc-2.5.so libc-2.5.so error [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so error
+0 0 libc-2.5.so libc-2.5.so error_tail
+ 1 100.000 libc-2.5.so libc-2.5.so strerror_r
+ 0 0 libc-2.5.so libc-2.5.so error_tail [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so exit
+ 3 50.0000 ld-2.5.so libc-2.5.so _dl_fini
+ 1 16.6667 sleep libc-2.5.so (no symbols)
+ 1 16.6667 libc-2.5.so libc-2.5.so _IO_cleanup
+ 1 16.6667 expr libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so exit [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fgetpos@@GLIBC_2.2
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_seekoff_unlocked
+ 0 0 libc-2.5.so libc-2.5.so fgetpos@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fgets
+ 3 75.0000 libc-2.5.so libc-2.5.so _IO_getline
+ 1 25.0000 libc-2.5.so libc-2.5.so _IO_getline_info
+ 0 0 libc-2.5.so libc-2.5.so fgets [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so phys_pages_info
+ 1 50.0000 libc-2.5.so libc-2.5.so __res_vinit
+0 0 libc-2.5.so libc-2.5.so fgets_unlocked
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_getline
+ 0 0 libc-2.5.so libc-2.5.so fgets_unlocked [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fopen64
+ 3 100.000 libc-2.5.so libc-2.5.so __fopen_internal
+ 0 0 libc-2.5.so libc-2.5.so fopen64 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so libc-2.5.so malloc
+ 1 33.3333 libc-2.5.so libc-2.5.so __fopen_maybe_mmap
+ 1 33.3333 libc-2.5.so libc-2.5.so __fopen_internal
+ 0 0 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fputs
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so fputs [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fwrite
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so fwrite [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so getgrgid
+ 1 100.000 libc-2.5.so libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so libc-2.5.so getgrgid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getgrgid
+0 0 libc-2.5.so libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+ 1 100.000 libnss_compat-2.5.so libc-2.5.so _nss_compat_getgrgid_r
+ 0 0 libc-2.5.so libc-2.5.so getgrgid_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so gethostbyname
+ 2 66.6667 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 1 33.3333 libc-2.5.so libc-2.5.so __nss_hostname_digits_dots
+ 0 0 libc-2.5.so libc-2.5.so gethostbyname [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so gethostbyname
+0 0 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 1 50.0000 libc-2.5.so libc-2.5.so __nss_hosts_lookup
+ 1 50.0000 libnss_files-2.5.so libc-2.5.so _nss_files_gethostbyname_r
+ 0 0 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so getpwuid
+ 2 100.000 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so libc-2.5.so getpwuid [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so getpwuid
+0 0 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 1 50.0000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+ 1 50.0000 libnss_compat-2.5.so libc-2.5.so _nss_compat_getpwuid_r
+ 0 0 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so vtimes
+0 0 libc-2.5.so libc-2.5.so getrlimit64@@GLIBC_2.2
+ 1 100.000 libc-2.5.so libc-2.5.so ____strtold_l_internal
+ 0 0 libc-2.5.so libc-2.5.so getrlimit64@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so getspnam
+ 1 100.000 libc-2.5.so libc-2.5.so getspnam_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so libc-2.5.so getspnam [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getspnam
+0 0 libc-2.5.so libc-2.5.so getspnam_r@@GLIBC_2.1.2
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_shadow_lookup
+ 0 0 libc-2.5.so libc-2.5.so getspnam_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+ 17 100.000 libc-2.5.so libc-2.5.so malloc
+0 0 libc-2.5.so libc-2.5.so malloc_hook_ini
+ 17 100.000 libc-2.5.so libc-2.5.so ptmalloc_init
+ 0 0 libc-2.5.so libc-2.5.so malloc_hook_ini [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so mblen
+ 1 100.000 libc-2.5.so libc-2.5.so mbrtowc
+ 0 0 libc-2.5.so libc-2.5.so mblen [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so mktime
+ 1 100.000 libc-2.5.so libc-2.5.so tzset
+ 0 0 libc-2.5.so libc-2.5.so mktime [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so parse_reg_exp
+0 0 libc-2.5.so libc-2.5.so parse_branch
+ 1 100.000 libc-2.5.so libc-2.5.so parse_expression
+ 0 0 libc-2.5.so libc-2.5.so parse_branch [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so parse_branch
+0 0 libc-2.5.so libc-2.5.so parse_expression
+ 1 100.000 libc-2.5.so libc-2.5.so btowc
+ 0 0 libc-2.5.so libc-2.5.so parse_expression [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_compile_internal
+0 0 libc-2.5.so libc-2.5.so parse_reg_exp
+ 1 100.000 libc-2.5.so libc-2.5.so parse_branch
+ 0 0 libc-2.5.so libc-2.5.so parse_reg_exp [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so sysconf
+0 0 libc-2.5.so libc-2.5.so phys_pages_info
+ 1 100.000 libc-2.5.so libc-2.5.so fgets_unlocked
+ 0 0 libc-2.5.so libc-2.5.so phys_pages_info [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so printf
+ 1 100.000 libc-2.5.so libc-2.5.so vfprintf
+ 0 0 libc-2.5.so libc-2.5.so printf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_compile_pattern
+0 0 libc-2.5.so libc-2.5.so re_compile_internal
+ 1 100.000 libc-2.5.so libc-2.5.so parse_reg_exp
+ 0 0 libc-2.5.so libc-2.5.so re_compile_internal [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so re_compile_pattern
+ 1 100.000 libc-2.5.so libc-2.5.so re_compile_internal
+ 0 0 libc-2.5.so libc-2.5.so re_compile_pattern [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so re_search
+ 1 100.000 libc-2.5.so libc-2.5.so re_search_stub
+ 0 0 libc-2.5.so libc-2.5.so re_search [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_search
+0 0 libc-2.5.so libc-2.5.so re_search_stub
+ 1 100.000 libc-2.5.so libc-2.5.so re_search_internal
+ 0 0 libc-2.5.so libc-2.5.so re_search_stub [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so _nl_expand_alias
+0 0 libc-2.5.so libc-2.5.so read_alias_file
+ 1 50.0000 libc-2.5.so libc-2.5.so qsort
+ 1 50.0000 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so read_alias_file [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so sbrk
+ 1 100.000 libc-2.5.so libc-2.5.so brk
+ 0 0 libc-2.5.so libc-2.5.so sbrk [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so setpwent
+ 3 100.000 libc-2.5.so libc-2.5.so __nss_setent
+ 0 0 libc-2.5.so libc-2.5.so setpwent [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so sigemptyset
+ 2 100.000 libc-2.5.so libc-2.5.so memset
+ 0 0 libc-2.5.so libc-2.5.so sigemptyset [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so sprintf
+ 12 100.000 libc-2.5.so libc-2.5.so vsprintf
+ 0 0 libc-2.5.so libc-2.5.so sprintf [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so sscanf
+ 4 100.000 libc-2.5.so libc-2.5.so vsscanf
+ 0 0 libc-2.5.so libc-2.5.so sscanf [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so strdup
+ 1 100.000 libc-2.5.so libc-2.5.so malloc
+ 0 0 libc-2.5.so libc-2.5.so strdup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so error_tail
+0 0 libc-2.5.so libc-2.5.so strerror_r
+ 1 100.000 libc-2.5.so libc-2.5.so dcgettext
+ 0 0 libc-2.5.so libc-2.5.so strerror_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so qsort
+0 0 libc-2.5.so libc-2.5.so sysconf
+ 1 100.000 libc-2.5.so libc-2.5.so phys_pages_info
+ 0 0 libc-2.5.so libc-2.5.so sysconf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so mktime
+0 0 libc-2.5.so libc-2.5.so tzset
+ 1 100.000 libc-2.5.so libc-2.5.so tzset_internal
+ 0 0 libc-2.5.so libc-2.5.so tzset [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so asprintf
+0 0 libc-2.5.so libc-2.5.so vasprintf
+ 1 50.0000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 1 50.0000 libc-2.5.so libc-2.5.so strlen
+ 0 0 libc-2.5.so libc-2.5.so vasprintf [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so sscanf
+0 0 libc-2.5.so libc-2.5.so vsscanf
+ 2 50.0000 libc-2.5.so libc-2.5.so _IO_vfscanf
+ 1 25.0000 libc-2.5.so libc-2.5.so _IO_no_init
+ 1 25.0000 libc-2.5.so libc-2.5.so rawmemchr
+ 0 0 libc-2.5.so libc-2.5.so vsscanf [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so vtimes
+ 1 100.000 libc-2.5.so libc-2.5.so getrlimit64@@GLIBC_2.2
+ 0 0 libc-2.5.so libc-2.5.so vtimes [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libdl-2.5.so libdl-2.5.so dlsym_doit
+0 0 libc-2.5.so libdl-2.5.so _dl_sym
+ 0 0 libc-2.5.so libdl-2.5.so _dl_sym [self]
+-------------------------------------------------------------------------------
+ 15 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libc-2.5.so libexa.so memcpy
+ 0 0 libc-2.5.so libexa.so memcpy [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+0 0 libc-2.5.so libnss_compat-2.5.so __nss_lookup_function
+ 0 0 libc-2.5.so libnss_compat-2.5.so __nss_lookup_function [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so internal_getpwuid_r
+0 0 libc-2.5.so libnss_compat-2.5.so fgetpos@@GLIBC_2.2
+ 0 0 libc-2.5.so libnss_compat-2.5.so fgetpos@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_files-2.5.so libnss_files-2.5.so _nss_files_gethostbyname_r
+0 0 libc-2.5.so libnss_files-2.5.so strcasecmp
+ 0 0 libc-2.5.so libnss_files-2.5.so strcasecmp [self]
+-------------------------------------------------------------------------------
+ 3 37.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 5 62.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 4 80.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so libpixman.so.0.0.0 _int_free
+ 0 0 libc-2.5.so libpixman.so.0.0.0 _int_free [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so libpixman.so.0.0.0 _int_malloc
+ 0 0 libc-2.5.so libpixman.so.0.0.0 _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 1.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+ 6 8.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 68 90.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so libpixman.so.0.0.0 free
+ 0 0 libc-2.5.so libpixman.so.0.0.0 free [self]
+-------------------------------------------------------------------------------
+ 23 17.2932 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 110 82.7068 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so libpixman.so.0.0.0 malloc
+ 0 0 libc-2.5.so libpixman.so.0.0.0 malloc [self]
+-------------------------------------------------------------------------------
+ 11 22.9167 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 37 77.0833 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so libpixman.so.0.0.0 memmove
+ 0 0 libc-2.5.so libpixman.so.0.0.0 memmove [self]
+-------------------------------------------------------------------------------
+ 1 0.3436 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 290 99.6564 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+0 0 libc-2.5.so libpixman.so.0.0.0 memset
+ 0 0 libc-2.5.so libpixman.so.0.0.0 memset [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so msort_with_tmp
+0 0 libcairo.so.2.11.3 libc-2.5.so (no symbols)
+ 0 0 libcairo.so.2.11.3 libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_fini
+0 0 libdl-2.5.so ld-2.5.so .fini
+ 0 0 libdl-2.5.so ld-2.5.so .fini [self]
+-------------------------------------------------------------------------------
+ 7 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 libdl-2.5.so ld-2.5.so dlopen_doit
+ 0 0 libdl-2.5.so ld-2.5.so dlopen_doit [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 libdl-2.5.so ld-2.5.so dlsym_doit
+ 0 0 libdl-2.5.so ld-2.5.so dlsym_doit [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so .fini
+ 1 100.000 ld-2.5.so libdl-2.5.so _dl_runtime_resolve
+ 0 0 libdl-2.5.so libdl-2.5.so .fini [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 libdl-2.5.so libdl-2.5.so dlsym
+ 7 87.5000 libdl-2.5.so libdl-2.5.so dlopen@@GLIBC_2.1
+0 0 libdl-2.5.so libdl-2.5.so _dlerror_run
+ 8 100.000 ld-2.5.so libdl-2.5.so _dl_catch_error
+ 0 0 libdl-2.5.so libdl-2.5.so _dlerror_run [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlopen@@GLIBC_2.1
+ 7 100.000 libdl-2.5.so libdl-2.5.so _dlerror_run
+ 0 0 libdl-2.5.so libdl-2.5.so dlopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlopen_doit
+ 7 100.000 ld-2.5.so libdl-2.5.so _dl_open
+ 0 0 libdl-2.5.so libdl-2.5.so dlopen_doit [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlsym
+ 1 100.000 libdl-2.5.so libdl-2.5.so _dlerror_run
+ 0 0 libdl-2.5.so libdl-2.5.so dlsym [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlsym_doit
+ 1 100.000 libc-2.5.so libdl-2.5.so _dl_sym
+ 0 0 libdl-2.5.so libdl-2.5.so dlsym_doit [self]
+-------------------------------------------------------------------------------
+ 19 100.000 Xorg Xorg BlockHandler
+0 0 libdri.so Xorg DRIBlockHandler
+ 0 0 libdri.so Xorg DRIBlockHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg WakeupHandler
+0 0 libdri.so Xorg DRIDoWakeupHandler
+ 0 0 libdri.so Xorg DRIDoWakeupHandler [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg Xorg WakeupHandler
+0 0 libdri.so Xorg DRIWakeupHandler
+ 0 0 libdri.so Xorg DRIWakeupHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg WakeupHandler
+0 0 libdri.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libdri.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 10 41.6667 intel_drv.so intel_drv.so i965_prepare_composite
+ 14 58.3333 intel_drv.so intel_drv.so IntelEmitInvarientState
+0 0 libdri.so intel_drv.so DRIGetContext
+ 0 0 libdri.so intel_drv.so DRIGetContext [self]
+-------------------------------------------------------------------------------
+ 2 4.5455 intel_drv.so intel_drv.so I830DRISwapContext
+ 19 43.1818 intel_drv.so intel_drv.so i965_prepare_composite
+ 23 52.2727 intel_drv.so intel_drv.so IntelEmitInvarientState
+0 0 libdri.so intel_drv.so DRIGetSAREAPrivate
+ 0 0 libdri.so intel_drv.so DRIGetSAREAPrivate [self]
+-------------------------------------------------------------------------------
+ 20 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+0 0 libdri.so intel_drv.so __i686.get_pc_thunk.cx
+ 0 0 libdri.so intel_drv.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+0 0 libdri.so libdri.so DRIWakeupHandler
+ 7 100.000 libdri.so libdri.so DRIDoWakeupHandler
+ 0 0 libdri.so libdri.so DRIWakeupHandler [self]
+-------------------------------------------------------------------------------
+ 1 4.1667 Xorg Xorg ProcCreatePixmap
+ 4 16.6667 Xorg Xorg damagePolyFillRect
+ 19 79.1667 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg .plt
+ 0 0 libexa.so Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageDestroyPixmap
+0 0 libexa.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libexa.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 6 0.0951 Xorg Xorg damageGlyphs
+ 6300 99.9049 Xorg Xorg damageComposite
+0 0 libexa.so Xorg exaComposite
+ 0 0 libexa.so Xorg exaComposite [self]
+-------------------------------------------------------------------------------
+ 5 29.4118 Xorg Xorg damageGlyphs
+ 12 70.5882 Xorg Xorg damageCopyArea
+0 0 libexa.so Xorg exaCopyArea
+ 0 0 libexa.so Xorg exaCopyArea [self]
+-------------------------------------------------------------------------------
+ 2 1.3699 Xorg Xorg XaceCatchDispatchProc
+ 4 2.7397 Xorg Xorg miCompositeRects
+ 9 6.1644 Xorg Xorg miCreateAlphaPicture
+ 131 89.7260 Xorg Xorg ProcCreatePixmap
+0 0 libexa.so Xorg exaCreatePixmap
+ 0 0 libexa.so Xorg exaCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 61 100.000 Xorg Xorg damageDestroyPixmap
+0 0 libexa.so Xorg exaDestroyPixmap
+ 0 0 libexa.so Xorg exaDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg Xorg damagePolyFillRect
+0 0 libexa.so Xorg exaFillRegionSolid
+ 0 0 libexa.so Xorg exaFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg miTrapezoids
+0 0 libexa.so Xorg exaFinishAccess
+ 0 0 libexa.so Xorg exaFinishAccess [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg Xorg damageComposite
+ 4 80.0000 Xorg Xorg damagePolyFillRect
+0 0 libexa.so Xorg exaGetDrawablePixmap
+ 0 0 libexa.so Xorg exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 55225 100.000 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg exaGlyphs
+ 0 0 libexa.so Xorg exaGlyphs [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageDestroyPixmap
+0 0 libexa.so Xorg exaOffscreenFree
+ 0 0 libexa.so Xorg exaOffscreenFree [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg Xorg miTrapezoids
+ 6 85.7143 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg exaPixmapDirty
+ 0 0 libexa.so Xorg exaPixmapDirty [self]
+-------------------------------------------------------------------------------
+ 5 1.2755 Xorg Xorg miColorRects
+ 387 98.7245 Xorg Xorg damagePolyFillRect
+0 0 libexa.so Xorg exaPolyFillRect
+ 0 0 libexa.so Xorg exaPolyFillRect [self]
+-------------------------------------------------------------------------------
+ 49 100.000 Xorg Xorg damagePolySegment
+0 0 libexa.so Xorg exaPolySegment
+ 0 0 libexa.so Xorg exaPolySegment [self]
+-------------------------------------------------------------------------------
+ 1 0.0102 Xorg Xorg CompositeTrapezoids
+ 9843 99.9898 Xorg Xorg miTrapezoids
+0 0 libexa.so Xorg exaRasterizeTrapezoid
+ 0 0 libexa.so Xorg exaRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 87 100.000 Xorg Xorg miBSCheapValidateGC
+0 0 libexa.so Xorg exaValidateGC
+ 0 0 libexa.so Xorg exaValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 5.2632 intel_drv.so intel_drv.so I830EXAPrepareSolid
+ 3 15.7895 intel_drv.so intel_drv.so i830MarkSync
+ 7 36.8421 intel_drv.so intel_drv.so i830WaitSync
+ 8 42.1053 intel_drv.so intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 0.5848 intel_drv.so intel_drv.so I830EXAPrepareSolid
+ 5 2.9240 intel_drv.so intel_drv.so I830EXASolid
+ 15 8.7719 intel_drv.so intel_drv.so i965_prepare_composite
+ 150 87.7193 intel_drv.so intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so intel_drv.so exaGetPixmapOffset
+ 0 0 libexa.so intel_drv.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+ 5 41.6667 intel_drv.so intel_drv.so i965_prepare_composite
+ 7 58.3333 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+0 0 libexa.so intel_drv.so exaGetPixmapPitch
+ 0 0 libexa.so intel_drv.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+ 13 2.1138 intel_drv.so intel_drv.so i965_composite
+ 602 97.8862 intel_drv.so intel_drv.so i830MarkSync
+0 0 libexa.so intel_drv.so exaMarkSync
+ 0 0 libexa.so intel_drv.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+ 5 0.0142 intel_drv.so intel_drv.so i965_composite
+ 7 0.0198 intel_drv.so intel_drv.so i965_prepare_composite
+ 35271 99.9660 intel_drv.so intel_drv.so i830WaitSync
+0 0 libexa.so intel_drv.so exaWaitSync
+ 0 0 libexa.so intel_drv.so exaWaitSync [self]
+-------------------------------------------------------------------------------
+ 4234 100.000 libexa.so libexa.so exaComposite
+0 0 libexa.so libexa.so ExaCheckComposite
+ 3528 83.3058 libfb.so libexa.so fbComposite
+ 707 16.6942 libexa.so libexa.so exaPrepareAccess
+ 0 0 libexa.so libexa.so ExaCheckComposite [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so libexa.so exaOffscreenFree
+0 0 libexa.so libexa.so ExaOffscreenMerge
+ 2 66.6667 Xorg libexa.so Xfree
+ 1 33.3333 Xorg libexa.so .plt
+ 0 0 libexa.so libexa.so ExaOffscreenMerge [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 libexa.so libextmod.so exaDestroyPixmap
+ 0 0 libexa.so libextmod.so exaDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so .plt
+ 0 0 libexa.so libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 11 4.1985 libfb.so libfb.so fbDoCopy
+ 251 95.8015 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaCopyNtoN
+ 0 0 libexa.so libfb.so exaCopyNtoN [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaDoMigration
+ 0 0 libexa.so libfb.so exaDoMigration [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaGetDrawableDeltas
+ 0 0 libexa.so libfb.so exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+ 10 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaGetDrawablePixmap
+ 0 0 libexa.so libfb.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaPixmapIsOffscreen
+ 0 0 libexa.so libfb.so exaPixmapIsOffscreen [self]
+-------------------------------------------------------------------------------
+ 2 1.9417 Xorg Xorg miCompositeRects
+ 2 1.9417 Xorg Xorg miCreateAlphaPicture
+ 3 2.9126 Xorg Xorg damageGlyphs
+ 4 3.8835 Xorg Xorg FreeResource
+ 43 41.7476 Xorg Xorg dixDestroyPixmap
+ 49 47.5728 Xorg Xorg FreePicture
+0 0 libextmod.so Xorg XvDestroyPixmap
+ 0 0 libextmod.so Xorg XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg FreePicture
+0 0 libextmod.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libextmod.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 69 100.000 libexa.so libexa.so exaGlyphs
+0 0 libextmod.so libexa.so XvDestroyPixmap
+ 0 0 libextmod.so libexa.so XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg ProcCreatePixmap
+0 0 libfb.so Xorg fbCreatePixmap
+ 0 0 libfb.so Xorg fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg damageDestroyPixmap
+0 0 libfb.so Xorg fbDestroyPixmap
+ 0 0 libfb.so Xorg fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg getDrawableDamageRef
+0 0 libfb.so Xorg fbGetWinPrivateIndex
+ 0 0 libfb.so Xorg fbGetWinPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 15 100.000 Xorg Xorg miBSCheapValidateGC
+0 0 libfb.so Xorg fbValidateGC
+ 0 0 libfb.so Xorg fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 2 28.5714 libexa.so libexa.so exaRasterizeTrapezoid
+ 5 71.4286 libexa.so libexa.so exaCopyArea
+0 0 libfb.so libexa.so .plt
+ 0 0 libfb.so libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaCopyArea
+0 0 libfb.so libexa.so __i686.get_pc_thunk.bx
+ 0 0 libfb.so libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libexa.so libexa.so exaCreatePixmap
+ 4 80.0000 libexa.so libexa.so exaValidateGC
+0 0 libfb.so libexa.so __i686.get_pc_thunk.cx
+ 0 0 libfb.so libexa.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 3528 100.000 libexa.so libexa.so ExaCheckComposite
+0 0 libfb.so libexa.so fbComposite
+ 0 0 libfb.so libexa.so fbComposite [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaCopyArea
+0 0 libfb.so libexa.so fbCopyRegion
+ 0 0 libfb.so libexa.so fbCopyRegion [self]
+-------------------------------------------------------------------------------
+ 1 0.5618 libexa.so libexa.so exaGlyphs
+ 177 99.4382 libexa.so libexa.so exaCreatePixmap
+0 0 libfb.so libexa.so fbCreatePixmap
+ 0 0 libfb.so libexa.so fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so libexa.so exaCreatePixmap
+0 0 libfb.so libexa.so fbCreatePixmapBpp
+ 0 0 libfb.so libexa.so fbCreatePixmapBpp [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libexa.so libexa.so exaDestroyPixmap
+0 0 libfb.so libexa.so fbDestroyPixmap
+ 0 0 libfb.so libexa.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 7 1.1864 libexa.so libexa.so exaGlyphs
+ 583 98.8136 libexa.so libexa.so exaCopyArea
+0 0 libfb.so libexa.so fbDoCopy
+ 0 0 libfb.so libexa.so fbDoCopy [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libexa.so libexa.so exaFillRegionSolid
+0 0 libfb.so libexa.so fbFillRegionSolid
+ 0 0 libfb.so libexa.so fbFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so libexa.so exaValidateGC
+0 0 libfb.so libexa.so fbGetGCPrivateIndex
+ 0 0 libfb.so libexa.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 8364 100.000 libexa.so libexa.so exaRasterizeTrapezoid
+0 0 libfb.so libexa.so fbRasterizeTrapezoid
+ 0 0 libfb.so libexa.so fbRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 69 100.000 libexa.so libexa.so exaValidateGC
+0 0 libfb.so libexa.so fbValidateGC
+ 0 0 libfb.so libexa.so fbValidateGC [self]
+-------------------------------------------------------------------------------
+0 0 libfb.so libfb.so fbFillRegionSolid
+ 19 100.000 libfb.so libfb.so fbSolid
+ 0 0 libfb.so libfb.so fbFillRegionSolid [self]
+-------------------------------------------------------------------------------
+0 0 libfb.so libfb.so fbRasterizeTrapezoid
+ 8328 99.5577 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid
+ 21 0.2510 libfb.so libfb.so image_from_pict
+ 4 0.0478 libpixman.so.0.0.0 libfb.so pixman_image_unref
+ 3 0.0359 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 2 0.0239 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx
+ 2 0.0239 libpixman.so.0.0.0 libfb.so pixman_sample_floor_y
+ 1 0.0120 libpixman.so.0.0.0 libfb.so .plt
+ 1 0.0120 libpixman.so.0.0.0 libfb.so pixman_region_fini
+ 1 0.0120 libpixman.so.0.0.0 libfb.so pixman_image_set_repeat
+ 1 0.0120 libpixman.so.0.0.0 libfb.so pixman_sample_ceil_y
+ 1 0.0120 libpixman.so.0.0.0 libfb.so pixman_line_fixed_edge_init
+ 0 0 libfb.so libfb.so fbRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so bsearch
+0 0 libgtk-x11-2.0.so.0.1000.12 libc-2.5.so (no symbols)
+ 0 0 libgtk-x11-2.0.so.0.1000.12 libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libpthread-2.5.so libpthread-2.5.so start_thread
+0 0 libnspr4.so libpthread-2.5.so (no symbols)
+ 0 0 libnspr4.so libpthread-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getgrgid_r
+ 0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getgrgid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getpwuid_r
+ 0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getpwuid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_setent
+0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_setpwent
+ 0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_setpwent [self]
+-------------------------------------------------------------------------------
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getgrgid_r
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getgrgid_r [self]
+-------------------------------------------------------------------------------
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so internal_getpwuid_r
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r [self]
+-------------------------------------------------------------------------------
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_setpwent
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_setpwent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_setpwent
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+ 1 100.000 libc-2.5.so libnss_compat-2.5.so __nss_lookup_function
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so internal_getpwuid_r
+ 1 100.000 libc-2.5.so libnss_compat-2.5.so fgetpos@@GLIBC_2.2
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so internal_getpwuid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+0 0 libnss_files-2.5.so libc-2.5.so _nss_files_gethostbyname_r
+ 0 0 libnss_files-2.5.so libc-2.5.so _nss_files_gethostbyname_r [self]
+-------------------------------------------------------------------------------
+0 0 libnss_files-2.5.so libnss_files-2.5.so _nss_files_gethostbyname_r
+ 1 100.000 libc-2.5.so libnss_files-2.5.so strcasecmp
+ 0 0 libnss_files-2.5.so libnss_files-2.5.so _nss_files_gethostbyname_r [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg .plt
+ 0 0 libpixman.so.0.0.0 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 5.0000 Xorg Xorg miTranslateRegion
+ 2 10.0000 Xorg Xorg miRegionDestroy
+ 3 15.0000 Xorg Xorg miIntersect
+ 14 70.0000 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg pixman_op
+ 0 0 libpixman.so.0.0.0 Xorg pixman_op [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 Xorg Xorg miColorRects
+ 2 20.0000 Xorg Xorg miRegionCopy
+ 7 70.0000 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg Xorg miDestroyClip
+ 6 46.1538 Xorg Xorg miRegionDestroy
+ 6 46.1538 Xorg Xorg miDestroyPicture
+0 0 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 1 6.2500 Xorg Xorg miRegionCreate
+ 7 43.7500 Xorg Xorg miComputeCompositeRegion
+ 8 50.0000 Xorg Xorg miRegionInit
+0 0 libpixman.so.0.0.0 Xorg pixman_region_init
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg Xorg miRegionInit
+ 5 83.3333 Xorg Xorg miRegionCreate
+0 0 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+ 1 1.6949 Xorg Xorg miComputeCompositeClip
+ 9 15.2542 Xorg Xorg damageDamageRegion
+ 49 83.0508 Xorg Xorg miIntersect
+0 0 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 45 100.000 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 18 100.000 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 81 100.000 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 2 18.1818 Xorg Xorg miComputeCompositeClip
+ 9 81.8182 Xorg Xorg miTranslateRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_translate
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 5 0.5618 Xorg Xorg damageDamageRegion
+ 885 99.4382 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_union
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_union [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libexa.so pixman_image_unref
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_image_unref [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libexa.so pixman_rasterize_trapezoid
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_rasterize_trapezoid [self]
+-------------------------------------------------------------------------------
+ 37 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_fini
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_intersect
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 14 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 62 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 libexa.so libexa.so exaMoveInPixmap
+ 7 87.5000 libexa.so libexa.so exaPixmapDirty
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_union
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_union [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libfb.so libfb.so image_from_pict
+ 1 50.0000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so .plt
+ 0 0 libpixman.so.0.0.0 libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 3527 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_composite
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_composite [self]
+-------------------------------------------------------------------------------
+ 3 16.6667 libfb.so libfb.so fbRasterizeTrapezoid
+ 15 83.3333 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_create_bits [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_clip_region
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_clip_region [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_component_alpha
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_component_alpha [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_repeat
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_repeat [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_unref
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_unref [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_line_fixed_edge_init
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_line_fixed_edge_init [self]
+-------------------------------------------------------------------------------
+ 8328 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_region_fini
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_sample_ceil_y
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_sample_ceil_y [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_sample_floor_y
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_sample_floor_y [self]
+-------------------------------------------------------------------------------
+0 0 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+ 3527 99.9717 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 1 0.0283 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+ 0 0 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so clone
+0 0 libpthread-2.5.so libc-2.5.so start_thread
+ 0 0 libpthread-2.5.so libc-2.5.so start_thread [self]
+-------------------------------------------------------------------------------
+0 0 libpthread-2.5.so libpthread-2.5.so __write_nocancel
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel
+ 0 0 libpthread-2.5.so libpthread-2.5.so __write_nocancel [self]
+-------------------------------------------------------------------------------
+0 0 libpthread-2.5.so libpthread-2.5.so start_thread
+ 5 100.000 libnspr4.so libpthread-2.5.so (no symbols)
+ 0 0 libpthread-2.5.so libpthread-2.5.so start_thread [self]
+-------------------------------------------------------------------------------
+ 6 100.000 ld-2.5.so ld-2.5.so call_init
+0 0 libselinux.so.1 ld-2.5.so (no symbols)
+ 0 0 libselinux.so.1 ld-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5 4.2373 libc-2.5.so libc-2.5.so qsort
+ 113 95.7627 libc-2.5.so libc-2.5.so msort_with_tmp
+0 0 libxul.so libc-2.5.so (no symbols)
+ 0 0 libxul.so libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 ls libc-2.5.so (no symbols)
+ 0 0 ls libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 mkdir libc-2.5.so (no symbols)
+ 0 0 mkdir libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 mktemp libc-2.5.so (no symbols)
+ 0 0 mktemp libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg BlockHandler
+0 0 mouse_drv.so Xorg MouseBlockHandler
+ 0 0 mouse_drv.so Xorg MouseBlockHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg xf86SigioReadInput
+0 0 mouse_drv.so Xorg MouseReadInput
+ 0 0 mouse_drv.so Xorg MouseReadInput [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg WaitForSomething
+0 0 mouse_drv.so Xorg MouseWakeupHandler
+ 0 0 mouse_drv.so Xorg MouseWakeupHandler [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg BlockHandler
+0 0 mouse_drv.so Xorg __i686.get_pc_thunk.bx
+ 0 0 mouse_drv.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 mouse_drv.so mouse_drv.so MousePostEvent
+0 0 mouse_drv.so mouse_drv.so MouseDoPostEvent
+ 1 100.000 Xorg mouse_drv.so xf86PostMotionEvent
+ 0 0 mouse_drv.so mouse_drv.so MouseDoPostEvent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 mouse_drv.so mouse_drv.so MouseReadInput
+0 0 mouse_drv.so mouse_drv.so MousePostEvent
+ 1 100.000 mouse_drv.so mouse_drv.so MouseDoPostEvent
+ 0 0 mouse_drv.so mouse_drv.so MousePostEvent [self]
+-------------------------------------------------------------------------------
+0 0 mouse_drv.so mouse_drv.so MouseReadInput
+ 1 100.000 mouse_drv.so mouse_drv.so MousePostEvent
+ 0 0 mouse_drv.so mouse_drv.so MouseReadInput [self]
+-------------------------------------------------------------------------------
+ 6704 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 oprofiled libc-2.5.so (no symbols)
+ 0 0 oprofiled libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 rm libc-2.5.so (no symbols)
+ 0 0 rm libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 libc-2.5.so libc-2.5.so exit
+ 6 85.7143 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 sleep libc-2.5.so (no symbols)
+ 0 0 sleep libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 sshd libc-2.5.so (no symbols)
+ 0 0 sshd libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 21 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 sudo libc-2.5.so (no symbols)
+ 0 0 sudo libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 tr libc-2.5.so (no symbols)
+ 0 0 tr libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+CPU_CLK_UNHALT...|
+ samples| %|
+------------------
+ 33083 23.3140 vmlinux
+ 30707 21.6396 intel_drv.so
+ 22352 15.7517 libc-2.5.so
+ 17904 12.6172 libxul.so
+ 12654 8.9174 libpixman.so.0.0.0
+ 6626 4.6694 oprofiled
+ 6268 4.4171 libexa.so
+ 5816 4.0986 Xorg
+ 2008 1.4151 oprofile
+ 691 0.4870 libXrender.so.1.3.0
+ 370 0.2607 libfb.so
+ 319 0.2248 libgobject-2.0.so.0.1200.12
+ 298 0.2100 libmozjs.so
+ 283 0.1994 libgdk-x11-2.0.so.0.1000.12
+ 268 0.1889 libX11.so.6.2.0
+ 256 0.1804 jbd
+ 243 0.1712 libcairo.so.2.11.3
+ 237 0.1670 libm-2.5.so
+ 200 0.1409 libpthread-2.5.so
+ 197 0.1388 libnspr4.so
+ 158 0.1113 bash
+ 153 0.1078 libglib-2.0.so.0.1200.12
+ 150 0.1057 ext3
+ 106 0.0747 emacs21-x
+ 105 0.0740 libgtk-x11-2.0.so.0.1000.12
+ 102 0.0719 libdri.so
+ 89 0.0627 ld-2.5.so
+ 78 0.0550 libgcc_s.so.1
+ 50 0.0352 libextmod.so
+ 35 0.0247 libstdc++.so.6.0.9
+ 33 0.0233 sysprof_module
+ 12 0.0085 libgthread-2.0.so.0.1200.12
+ 9 0.0063 libplds4.so
+ 7 0.0049 libcrypto.so.0.9.8
+ 5 0.0035 uhci_hcd
+ 4 0.0028 e1000
+ 4 0.0028 ehci_hcd
+ 3 0.0021 grep
+ 3 0.0021 mouse_drv.so
+ 2 0.0014 hald-addon-storage
+ 2 0.0014 sshd
+ 1 7.0e-04 cat
+ 1 7.0e-04 sleep
+ 1 7.0e-04 libnss_compat-2.5.so
+ 1 7.0e-04 libpam.so.0.79
+ 1 7.0e-04 libselinux.so.1
+ 1 7.0e-04 libsepol.so.1
+ 1 7.0e-04 sd_mod
+ 1 7.0e-04 usbhid
+ 1 7.0e-04 dirname
+ 1 7.0e-04 gawk
+ 1 7.0e-04 gconfd-2
+ 1 7.0e-04 locale-archive
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name app name symbol name
+19660 13.8546 intel_drv.so intel_drv.so I830WaitLpRing
+17904 12.6172 libxul.so libxul.so (no symbols)
+15478 10.9075 vmlinux vmlinux system_call
+14590 10.2817 libc-2.5.so libc-2.5.so gettimeofday
+7975 5.6201 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+6626 4.6694 oprofiled oprofiled (no symbols)
+6287 4.4305 intel_drv.so intel_drv.so i965_prepare_composite
+5779 4.0725 vmlinux vmlinux do_gettimeofday
+4545 3.2029 libc-2.5.so libc-2.5.so memcpy
+2750 1.9380 vmlinux vmlinux read_tsc
+2614 1.8421 intel_drv.so intel_drv.so i965_composite
+2596 1.8294 vmlinux vmlinux __copy_to_user_ll
+2118 1.4926 Xorg Xorg GetTimeInMillis
+1714 1.2079 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+1383 0.9746 oprofile.ko oprofile sync_buffer
+1245 0.8774 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1
+1225 0.8633 vmlinux vmlinux restore_nocheck
+959 0.6758 libexa.so libexa.so ExaOffscreenMarkUsed
+691 0.4870 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols)
+691 0.4870 libexa.so libexa.so exaMarkSync
+631 0.4447 vmlinux vmlinux find_vma
+617 0.4348 libexa.so libexa.so exaComposite
+611 0.4306 vmlinux vmlinux syscall_exit
+593 0.4179 libc-2.5.so libc-2.5.so malloc
+577 0.4066 vmlinux vmlinux sys_gettimeofday
+569 0.4010 Xorg Xorg miComputeCompositeRegion
+563 0.3968 libexa.so libexa.so exaPixmapIsOffscreen
+559 0.3939 libexa.so libexa.so exaTryDriverComposite
+538 0.3791 libc-2.5.so libc-2.5.so _int_malloc
+531 0.3742 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+515 0.3629 oprofile.ko oprofile add_event_entry
+512 0.3608 intel_drv.so intel_drv.so I830Sync
+473 0.3333 vmlinux vmlinux copy_to_user
+451 0.3178 libc-2.5.so libc-2.5.so free
+423 0.2981 libexa.so libexa.so exaGlyphs
+365 0.2572 vmlinux vmlinux restore_all
+347 0.2445 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+319 0.2248 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols)
+308 0.2171 libc-2.5.so libc-2.5.so memset
+298 0.2100 libmozjs.so libmozjs.so (no symbols)
+295 0.2079 Xorg Xorg miSpriteSourceValidate
+290 0.2044 vmlinux vmlinux cond_resched
+283 0.1994 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols)
+277 0.1952 intel_drv.so intel_drv.so .plt
+275 0.1938 Xorg Xorg __i686.get_pc_thunk.bx
+275 0.1938 libexa.so libexa.so exaMoveInPixmap
+268 0.1889 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols)
+265 0.1867 libc-2.5.so libc-2.5.so _int_free
+261 0.1839 libexa.so libexa.so exaGetDrawablePixmap
+258 0.1818 libexa.so libexa.so .plt
+252 0.1776 libexa.so libexa.so exaDoMigration
+243 0.1712 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols)
+221 0.1557 Xorg Xorg .plt
+197 0.1388 libc-2.5.so libc-2.5.so memcmp
+197 0.1388 libnspr4.so libnspr4.so (no symbols)
+189 0.1332 libfb.so libfb.so fbDoCopy
+176 0.1240 Xorg Xorg miCompositeSourceValidate
+175 0.1233 libexa.so libexa.so __i686.get_pc_thunk.bx
+175 0.1233 libm-2.5.so libm-2.5.so floor
+172 0.1212 libexa.so libexa.so exaGetPixmapOffset
+167 0.1177 libexa.so libexa.so exaWaitSync
+162 0.1142 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+161 0.1135 libc-2.5.so libc-2.5.so msort_with_tmp
+160 0.1128 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+158 0.1113 bash bash (no symbols)
+154 0.1085 intel_drv.so intel_drv.so i830WaitSync
+153 0.1078 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols)
+148 0.1043 libexa.so libexa.so exaGetOffscreenPixmap
+145 0.1022 vmlinux vmlinux mwait_idle_with_hints
+143 0.1008 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles
+142 0.1001 libexa.so libexa.so exaPixmapDirty
+140 0.0987 intel_drv.so intel_drv.so i965_check_composite
+138 0.0973 intel_drv.so intel_drv.so intel_get_pixmap_offset
+138 0.0973 vmlinux vmlinux __d_lookup
+136 0.0958 intel_drv.so intel_drv.so i965_check_composite_texture
+130 0.0916 Xorg Xorg XaceHook
+125 0.0881 Xorg Xorg miModifyPixmapHeader
+114 0.0803 intel_drv.so intel_drv.so i830MarkSync
+113 0.0796 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+112 0.0789 intel_drv.so intel_drv.so i830_get_transformed_coordinates
+109 0.0768 libc-2.5.so libc-2.5.so memmove
+108 0.0761 oprofile.ko oprofile add_sample_entry
+108 0.0761 vmlinux vmlinux syscall_call
+106 0.0747 emacs21-x emacs21-x (no symbols)
+105 0.0740 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+101 0.0712 libexa.so libexa.so exaPixmapIsPinned
+98 0.0691 Xorg Xorg FindGlyphRef
+93 0.0655 Xorg Xorg damageGlyphs
+91 0.0641 libexa.so libexa.so exaCopyNtoN
+91 0.0641 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock
+89 0.0627 libexa.so libexa.so exaGetDrawableDeltas
+89 0.0627 vmlinux vmlinux page_fault
+84 0.0592 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+83 0.0585 vmlinux vmlinux timer_interrupt
+81 0.0571 Xorg Xorg ReadRequestFromClient
+81 0.0571 libc-2.5.so libc-2.5.so malloc_consolidate
+80 0.0564 intel_drv.so intel_drv.so IntelEmitInvarientState
+79 0.0557 vmlinux vmlinux __link_path_walk
+78 0.0550 libgcc_s.so.1 libgcc_s.so.1 (no symbols)
+72 0.0507 libexa.so libexa.so exaOffscreenAlloc
+70 0.0493 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects
+68 0.0479 Xorg Xorg Dispatch
+68 0.0479 libc-2.5.so libc-2.5.so strstr
+68 0.0479 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+62 0.0437 vmlinux vmlinux no_singlestep
+61 0.0430 libfb.so libfb.so fbValidateGC
+61 0.0430 vmlinux vmlinux _atomic_dec_and_lock
+60 0.0423 libexa.so libexa.so exaCopyArea
+60 0.0423 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect
+60 0.0423 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+58 0.0409 Xorg Xorg _CallCallbacks
+56 0.0395 Xorg Xorg miUnion
+56 0.0395 intel_drv.so intel_drv.so I830EXASync
+55 0.0388 intel_drv.so intel_drv.so I830EXASolid
+55 0.0388 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+54 0.0381 Xorg Xorg WaitForSomething
+52 0.0366 libc-2.5.so libc-2.5.so mbrtowc
+52 0.0366 vmlinux vmlinux __copy_from_user_ll
+51 0.0359 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal
+49 0.0345 libc-2.5.so libc-2.5.so strlen
+48 0.0338 Xorg Xorg damageDamageRegion
+48 0.0338 Xorg Xorg dixChangeGC
+48 0.0338 libextmod.so libextmod.so XvDestroyPixmap
+46 0.0324 Xorg Xorg SecurityLookupIDByType
+45 0.0317 libdri.so libdri.so DRIGetSAREAPrivate
+44 0.0310 Xorg Xorg FreeResource
+43 0.0303 Xorg Xorg CallCallbacks
+39 0.0275 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+38 0.0268 vmlinux vmlinux memcmp
+36 0.0254 intel_drv.so intel_drv.so i965_get_dest_format
+36 0.0254 jbd.ko jbd journal_add_journal_head
+35 0.0247 libfb.so libfb.so fbCopyRegion
+35 0.0247 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols)
+35 0.0247 vmlinux vmlinux apic_timer_interrupt
+34 0.0240 Xorg Xorg CompareISOLatin1Lowered
+34 0.0240 vmlinux vmlinux kmem_cache_alloc
+34 0.0240 vmlinux vmlinux kmem_cache_free
+33 0.0233 libexa.so libexa.so exaPolyFillRect
+33 0.0233 sysprof_module sysprof_module (no symbols)
+32 0.0226 Xorg Xorg Hash
+32 0.0226 Xorg Xorg miValidatePicture
+32 0.0226 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty
+32 0.0226 vmlinux vmlinux __find_get_block
+31 0.0218 Xorg Xorg SecurityCheckResourceIDAccess
+31 0.0218 Xorg Xorg damagePolyFillRect
+29 0.0204 Xorg Xorg ProcRenderCompositeGlyphs
+28 0.0197 libexa.so libexa.so exaOffscreenFree
+27 0.0190 Xorg Xorg XaceCatchExtProc
+27 0.0190 jbd.ko jbd journal_dirty_metadata
+27 0.0190 jbd.ko jbd journal_put_journal_head
+27 0.0190 jbd.ko jbd start_this_handle
+27 0.0190 libexa.so libexa.so exaOpReadsDestination
+26 0.0183 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+26 0.0183 vmlinux vmlinux __handle_mm_fault
+25 0.0176 Xorg Xorg AllocatePixmap
+25 0.0176 Xorg Xorg Ones
+25 0.0176 vmlinux vmlinux hrtimer_run_queues
+25 0.0176 vmlinux vmlinux schedule
+24 0.0169 Xorg Xorg GetScratchGC
+24 0.0169 Xorg Xorg Xalloc
+24 0.0169 libdri.so libdri.so DRIGetContext
+24 0.0169 libexa.so libexa.so exaCreatePixmap
+23 0.0162 Xorg Xorg __divdi3
+23 0.0162 libm-2.5.so libm-2.5.so ceil
+22 0.0155 ld-2.5.so ld-2.5.so do_lookup_x
+22 0.0155 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+21 0.0148 ext3.ko ext3 ext3_mark_iloc_dirty
+21 0.0148 vmlinux vmlinux unmap_vmas
+20 0.0141 Xorg Xorg ProcRenderCreatePicture
+20 0.0141 Xorg Xorg miBSCheapChangeGC
+20 0.0141 Xorg Xorg miColorRects
+20 0.0141 intel_drv.so intel_drv.so i965_get_card_format
+20 0.0141 libdri.so libdri.so __i686.get_pc_thunk.cx
+20 0.0141 vmlinux vmlinux do_wp_page
+19 0.0134 Xorg Xorg ChangePicture
+19 0.0134 libc-2.5.so libc-2.5.so realloc
+19 0.0134 libfb.so libfb.so fbSolid
+19 0.0134 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+19 0.0134 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+19 0.0134 vmlinux vmlinux __block_write_full_page
+19 0.0134 vmlinux vmlinux find_get_pages_tag
+19 0.0134 vmlinux vmlinux kunmap_atomic
+18 0.0127 Xorg Xorg PictureGetFilterId
+18 0.0127 Xorg Xorg miBSCheapValidateGC
+18 0.0127 jbd.ko jbd journal_commit_transaction
+18 0.0127 jbd.ko jbd journal_stop
+18 0.0127 libc-2.5.so libc-2.5.so mkdir
+18 0.0127 libexa.so libexa.so __i686.get_pc_thunk.cx
+18 0.0127 vmlinux vmlinux __copy_from_user_ll_nozero
+17 0.0120 Xorg Xorg damageChangeGC
+17 0.0120 Xorg Xorg damageDamageBox
+17 0.0120 Xorg Xorg miRenderColorToPixel
+17 0.0120 libfb.so libfb.so fbCreatePixmap
+17 0.0120 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+17 0.0120 vmlinux vmlinux do_lookup
+17 0.0120 vmlinux vmlinux find_get_page
+17 0.0120 vmlinux vmlinux strncpy_from_user
+16 0.0113 Xorg Xorg ProcRenderDispatch
+16 0.0113 Xorg Xorg Xfree
+16 0.0113 Xorg Xorg miCompositeRects
+16 0.0113 jbd.ko jbd do_get_write_access
+16 0.0113 libc-2.5.so libc-2.5.so _dl_addr
+16 0.0113 vmlinux vmlinux do_page_fault
+15 0.0106 Xorg Xorg miRectsToRegion
+15 0.0106 jbd.ko jbd __journal_file_buffer
+15 0.0106 ld-2.5.so ld-2.5.so strcmp
+15 0.0106 libfb.so libfb.so fbCreatePixmapBpp
+15 0.0106 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+15 0.0106 vmlinux vmlinux find_next_zero_bit
+15 0.0106 vmlinux vmlinux radix_tree_tag_clear
+15 0.0106 vmlinux vmlinux run_timer_softirq
+15 0.0106 vmlinux vmlinux test_set_page_writeback
+14 0.0099 Xorg Xorg ChangeGC
+14 0.0099 Xorg Xorg CreatePicture
+14 0.0099 Xorg Xorg DamageCreate
+14 0.0099 Xorg Xorg ProcCreatePixmap
+14 0.0099 Xorg Xorg SecurityCheckExtAccess
+14 0.0099 Xorg Xorg SecurityLookupIDByClass
+14 0.0099 Xorg Xorg damageDestroyPixmap
+14 0.0099 libc-2.5.so libc-2.5.so strcmp
+14 0.0099 libexa.so libexa.so exaGetPixmapPitch
+14 0.0099 vmlinux vmlinux __brelse
+14 0.0099 vmlinux vmlinux find_busiest_group
+14 0.0099 vmlinux vmlinux get_page_from_freelist
+13 0.0092 Xorg Xorg ProcRenderFreePicture
+13 0.0092 Xorg Xorg ProcRenderSetPictureFilter
+13 0.0092 Xorg Xorg SetPictureToDefaults
+13 0.0092 Xorg Xorg XaceCatchDispatchProc
+13 0.0092 Xorg Xorg miComputeCompositeClip
+13 0.0092 Xorg Xorg miGlyphExtents
+13 0.0092 Xorg Xorg miIntersect
+13 0.0092 intel_drv.so intel_drv.so I830EXAPrepareSolid
+13 0.0092 intel_drv.so intel_drv.so i830_done_composite
+13 0.0092 jbd.ko jbd journal_cancel_revoke
+13 0.0092 jbd.ko jbd journal_clean_one_cp_list
+13 0.0092 libexa.so libexa.so exaDestroyPixmap
+13 0.0092 libexa.so libexa.so exaFillRegionSolid
+13 0.0092 libm-2.5.so libm-2.5.so cos
+13 0.0092 libm-2.5.so libm-2.5.so sin
+13 0.0092 vmlinux vmlinux do_path_lookup
+13 0.0092 vmlinux vmlinux fget_light
+12 0.0085 Xorg Xorg PictureFindFilter
+12 0.0085 Xorg Xorg ValidateGC
+12 0.0085 ext3.ko ext3 __ext3_get_inode_loc
+12 0.0085 ext3.ko ext3 bget_one
+12 0.0085 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols)
+12 0.0085 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+12 0.0085 vmlinux vmlinux cache_alloc_refill
+12 0.0085 vmlinux vmlinux dput
+12 0.0085 vmlinux vmlinux generic_writepages
+11 0.0078 Xorg Xorg AddResource
+11 0.0078 Xorg Xorg FindGlyph
+11 0.0078 Xorg Xorg damageValidateGC
+11 0.0078 Xorg Xorg dixLookupDrawable
+11 0.0078 Xorg Xorg getDrawableDamageRef
+11 0.0078 Xorg Xorg miRegionCreate
+11 0.0078 ext3.ko ext3 ext3_try_to_allocate
+11 0.0078 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate
+11 0.0078 vmlinux vmlinux __follow_mount
+11 0.0078 vmlinux vmlinux free_block
+11 0.0078 vmlinux vmlinux generic_permission
+10 0.0070 Xorg Xorg AllocatePicture
+10 0.0070 Xorg Xorg DamageRegister
+10 0.0070 Xorg Xorg ProcRenderFillRectangles
+10 0.0070 Xorg Xorg SetPictureTransform
+10 0.0070 Xorg Xorg ValidateOnePicture
+10 0.0070 jbd.ko jbd journal_dirty_data
+10 0.0070 ld-2.5.so ld-2.5.so check_match.7793
+10 0.0070 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+10 0.0070 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+10 0.0070 vmlinux vmlinux block_read_full_page
+10 0.0070 vmlinux vmlinux block_write_full_page
+10 0.0070 vmlinux vmlinux do_select
+10 0.0070 vmlinux vmlinux permission
+10 0.0070 vmlinux vmlinux unix_stream_sendmsg
+9 0.0063 Xorg Xorg DamageDestroy
+9 0.0063 Xorg Xorg FlushAllOutput
+9 0.0063 Xorg Xorg ProcRenderChangePicture
+9 0.0063 Xorg Xorg ProcRenderSetPictureTransform
+9 0.0063 Xorg Xorg miLineFixedX
+9 0.0063 Xorg Xorg miRegionInit
+9 0.0063 jbd.ko jbd __journal_temp_unlink_buffer
+9 0.0063 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+9 0.0063 libexa.so libexa.so exaValidateGC
+9 0.0063 libfb.so libfb.so fbDestroyPixmap
+9 0.0063 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+9 0.0063 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+9 0.0063 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+9 0.0063 libplds4.so libplds4.so (no symbols)
+9 0.0063 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+9 0.0063 vmlinux vmlinux __dec_zone_page_state
+9 0.0063 vmlinux vmlinux __kmalloc
+9 0.0063 vmlinux vmlinux irq_entries_start
+9 0.0063 vmlinux vmlinux link_path_walk
+9 0.0063 vmlinux vmlinux page_remove_rmap
+9 0.0063 vmlinux vmlinux radix_tree_tag_set
+9 0.0063 vmlinux vmlinux release_pages
+8 0.0056 Xorg Xorg SetPictureFilter
+8 0.0056 Xorg Xorg ValidatePicture
+8 0.0056 Xorg Xorg miTrapezoidBounds
+8 0.0056 libc-2.5.so libc-2.5.so _int_realloc
+8 0.0056 libc-2.5.so libc-2.5.so strchr
+8 0.0056 libexa.so libexa.so exaRasterizeTrapezoid
+8 0.0056 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+8 0.0056 libpthread-2.5.so libpthread-2.5.so pthread_getspecific
+8 0.0056 vmlinux vmlinux __wake_up
+8 0.0056 vmlinux vmlinux ahci_interrupt
+8 0.0056 vmlinux vmlinux remove_wait_queue
+8 0.0056 vmlinux vmlinux test_clear_page_writeback
+7 0.0049 Xorg Xorg DamageReportDamage
+7 0.0049 Xorg Xorg damageComposite
+7 0.0049 ext3.ko ext3 ext3_get_blocks_handle
+7 0.0049 ext3.ko ext3 ext3_new_inode
+7 0.0049 intel_drv.so intel_drv.so I830EmitFlush
+7 0.0049 libc-2.5.so libc-2.5.so bsearch
+7 0.0049 libcrypto.so.0.9.8 libcrypto.so.0.9.8 (no symbols)
+7 0.0049 libdri.so libdri.so DRIUnlock
+7 0.0049 libfb.so libfb.so .plt
+7 0.0049 libm-2.5.so libm-2.5.so tan
+7 0.0049 vmlinux vmlinux __find_get_block_slow
+7 0.0049 vmlinux vmlinux __insert_inode_hash
+7 0.0049 vmlinux vmlinux __wake_up_bit
+7 0.0049 vmlinux vmlinux copy_page_range
+7 0.0049 vmlinux vmlinux core_sys_select
+7 0.0049 vmlinux vmlinux handle_edge_irq
+7 0.0049 vmlinux vmlinux radix_tree_lookup
+7 0.0049 vmlinux vmlinux rebalance_tick
+7 0.0049 vmlinux vmlinux sched_clock
+7 0.0049 vmlinux vmlinux softlockup_tick
+7 0.0049 vmlinux vmlinux unix_stream_recvmsg
+6 0.0042 Xorg Xorg CompositeRects
+6 0.0042 Xorg Xorg FreePicture
+6 0.0042 Xorg Xorg ProcFreePixmap
+6 0.0042 Xorg Xorg damageReportPostOp
+6 0.0042 Xorg Xorg miRegionDestroy
+6 0.0042 Xorg Xorg miRegionValidate
+6 0.0042 Xorg Xorg xf86Wakeup
+6 0.0042 ext3.ko ext3 ext3_ordered_writepage
+6 0.0042 ext3.ko ext3 ext3_test_allocatable
+6 0.0042 ext3.ko ext3 walk_page_buffers
+6 0.0042 jbd.ko jbd __journal_remove_journal_head
+6 0.0042 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx
+6 0.0042 libm-2.5.so libm-2.5.so floorf
+6 0.0042 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents
+6 0.0042 vmlinux vmlinux __mark_inode_dirty
+6 0.0042 vmlinux vmlinux account_user_time
+6 0.0042 vmlinux vmlinux clear_page_dirty_for_io
+6 0.0042 vmlinux vmlinux d_alloc
+6 0.0042 vmlinux vmlinux dnotify_parent
+6 0.0042 vmlinux vmlinux do_mmap_pgoff
+6 0.0042 vmlinux vmlinux memcpy
+6 0.0042 vmlinux vmlinux mutex_lock
+6 0.0042 vmlinux vmlinux page_address
+6 0.0042 vmlinux vmlinux page_waitqueue
+6 0.0042 vmlinux vmlinux sock_aio_write
+6 0.0042 vmlinux vmlinux task_rq_lock
+5 0.0035 Xorg Xorg CompositePicture
+5 0.0035 Xorg Xorg FreeScratchGC
+5 0.0035 Xorg Xorg LegalNewID
+5 0.0035 Xorg Xorg PictOpValid
+5 0.0035 Xorg Xorg ProcRenderComposite
+5 0.0035 Xorg Xorg miBSCheapChangeClip
+5 0.0035 Xorg Xorg miDestroyPicture
+5 0.0035 Xorg Xorg miTranslateRegion
+5 0.0035 ext3.ko ext3 ext3_get_group_desc
+5 0.0035 ext3.ko ext3 ext3_new_blocks
+5 0.0035 libc-2.5.so libc-2.5.so __read_nocancel
+5 0.0035 libfb.so libfb.so __i686.get_pc_thunk.cx
+5 0.0035 libfb.so libfb.so image_from_pict
+5 0.0035 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+5 0.0035 libpthread-2.5.so libpthread-2.5.so pthread_self
+5 0.0035 vmlinux vmlinux __alloc_skb
+5 0.0035 vmlinux vmlinux __do_softirq
+5 0.0035 vmlinux vmlinux __pollwait
+5 0.0035 vmlinux vmlinux __rcu_pending
+5 0.0035 vmlinux vmlinux bit_waitqueue
+5 0.0035 vmlinux vmlinux do_softirq
+5 0.0035 vmlinux vmlinux do_sync_write
+5 0.0035 vmlinux vmlinux drain_array
+5 0.0035 vmlinux vmlinux error_code
+5 0.0035 vmlinux vmlinux filemap_nopage
+5 0.0035 vmlinux vmlinux flush_tlb_page
+5 0.0035 vmlinux vmlinux kmem_cache_zalloc
+5 0.0035 vmlinux vmlinux mutex_unlock
+5 0.0035 vmlinux vmlinux nr_active
+5 0.0035 vmlinux vmlinux page_add_file_rmap
+5 0.0035 vmlinux vmlinux run_posix_cpu_timers
+5 0.0035 vmlinux vmlinux scheduler_tick
+5 0.0035 vmlinux vmlinux sock_def_readable
+5 0.0035 vmlinux vmlinux sock_poll
+5 0.0035 vmlinux vmlinux up_read
+5 0.0035 vmlinux vmlinux vfs_permission
+4 0.0028 Xorg Xorg DamageSetReportAfterOp
+4 0.0028 Xorg Xorg GetExtensionEntry
+4 0.0028 Xorg Xorg ProcPolySegment
+4 0.0028 Xorg Xorg damageChangeClip
+4 0.0028 Xorg Xorg damageRemoveDamage
+4 0.0028 Xorg Xorg mffs
+4 0.0028 Xorg Xorg miChangeGC
+4 0.0028 Xorg Xorg miDestroyClip
+4 0.0028 ehci-hcd.ko ehci_hcd ehci_hub_status_data
+4 0.0028 ext3.ko ext3 ext3_mkdir
+4 0.0028 ext3.ko ext3 ext3_permission
+4 0.0028 ext3.ko ext3 ext3_truncate
+4 0.0028 jbd.ko jbd journal_remove_journal_head
+4 0.0028 jbd.ko jbd journal_start
+4 0.0028 ld-2.5.so ld-2.5.so dl_main
+4 0.0028 libc-2.5.so libc-2.5.so ___newselect_nocancel
+4 0.0028 libc-2.5.so libc-2.5.so __errno_location
+4 0.0028 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+4 0.0028 libc-2.5.so libc-2.5.so poll
+4 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+4 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+4 0.0028 libpthread-2.5.so libpthread-2.5.so __errno_location
+4 0.0028 vmlinux vmlinux __first_cpu
+4 0.0028 vmlinux vmlinux __pagevec_lru_add_active
+4 0.0028 vmlinux vmlinux ahci_qc_issue
+4 0.0028 vmlinux vmlinux arch_get_unmapped_area_topdown
+4 0.0028 vmlinux vmlinux create_empty_buffers
+4 0.0028 vmlinux vmlinux do_mpage_readpage
+4 0.0028 vmlinux vmlinux do_timer
+4 0.0028 vmlinux vmlinux find_next_bit
+4 0.0028 vmlinux vmlinux find_vma_prepare
+4 0.0028 vmlinux vmlinux find_vma_prev
+4 0.0028 vmlinux vmlinux irq_exit
+4 0.0028 vmlinux vmlinux normal_poll
+4 0.0028 vmlinux vmlinux percpu_counter_mod
+4 0.0028 vmlinux vmlinux put_page
+4 0.0028 vmlinux vmlinux radix_tree_gang_lookup_tag
+4 0.0028 vmlinux vmlinux scsi_prep_fn
+4 0.0028 vmlinux vmlinux sock_alloc_send_skb
+4 0.0028 vmlinux vmlinux strnlen_user
+3 0.0021 Xorg Xorg FlushClientCaches
+3 0.0021 Xorg Xorg GetScratchPixmapHeader
+3 0.0021 Xorg Xorg ProcChangeGC
+3 0.0021 Xorg Xorg miChangeClip
+3 0.0021 Xorg Xorg miChangePictureTransform
+3 0.0021 Xorg Xorg xf86VTSwitchPending
+3 0.0021 ext3.ko ext3 ext3_find_entry
+3 0.0021 ext3.ko ext3 ext3_journal_start_sb
+3 0.0021 grep grep (no symbols)
+3 0.0021 intel_drv.so intel_drv.so I830RefreshRing
+3 0.0021 ld-2.5.so ld-2.5.so _dl_relocate_object
+3 0.0021 libc-2.5.so libc-2.5.so _IO_default_xsputn
+3 0.0021 libc-2.5.so libc-2.5.so __close_nocancel
+3 0.0021 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check
+3 0.0021 libc-2.5.so libc-2.5.so _nl_intern_locale_data
+3 0.0021 libc-2.5.so libc-2.5.so qsort
+3 0.0021 libc-2.5.so libc-2.5.so read
+3 0.0021 libc-2.5.so libc-2.5.so sigprocmask
+3 0.0021 libc-2.5.so libc-2.5.so strcpy
+3 0.0021 libc-2.5.so libc-2.5.so vfprintf
+3 0.0021 libexa.so libexa.so exaFinishAccess
+3 0.0021 libfb.so libfb.so __i686.get_pc_thunk.bx
+3 0.0021 libfb.so libfb.so fbGetGCPrivateIndex
+3 0.0021 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+3 0.0021 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+3 0.0021 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+3 0.0021 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel
+3 0.0021 uhci-hcd.ko uhci_hcd uhci_check_ports
+3 0.0021 vmlinux vmlinux __block_prepare_write
+3 0.0021 vmlinux vmlinux __end_that_request_first
+3 0.0021 vmlinux vmlinux __generic_file_aio_write_nolock
+3 0.0021 vmlinux vmlinux __next_cpu
+3 0.0021 vmlinux vmlinux __set_page_dirty_nobuffers
+3 0.0021 vmlinux vmlinux __writeback_single_inode
+3 0.0021 vmlinux vmlinux add_wait_queue
+3 0.0021 vmlinux vmlinux ahci_qc_prep
+3 0.0021 vmlinux vmlinux blk_rq_map_sg
+3 0.0021 vmlinux vmlinux clocksource_get_next
+3 0.0021 vmlinux vmlinux copy_process
+3 0.0021 vmlinux vmlinux copy_strings
+3 0.0021 vmlinux vmlinux dec_zone_page_state
+3 0.0021 vmlinux vmlinux down_read_trylock
+3 0.0021 vmlinux vmlinux end_page_writeback
+3 0.0021 vmlinux vmlinux fget
+3 0.0021 vmlinux vmlinux free_hot_cold_page
+3 0.0021 vmlinux vmlinux generic_file_open
+3 0.0021 vmlinux vmlinux get_task_mm
+3 0.0021 vmlinux vmlinux inode_change_ok
+3 0.0021 vmlinux vmlinux internal_add_timer
+3 0.0021 vmlinux vmlinux kfree
+3 0.0021 vmlinux vmlinux move_native_irq
+3 0.0021 vmlinux vmlinux note_interrupt
+3 0.0021 vmlinux vmlinux notifier_call_chain
+3 0.0021 vmlinux vmlinux number
+3 0.0021 vmlinux vmlinux page_mkclean
+3 0.0021 vmlinux vmlinux rcu_pending
+3 0.0021 vmlinux vmlinux rw_verify_area
+3 0.0021 vmlinux vmlinux search_extable
+3 0.0021 vmlinux vmlinux tty_ldisc_try
+3 0.0021 vmlinux vmlinux unlock_buffer
+3 0.0021 vmlinux vmlinux unlock_page
+3 0.0021 vmlinux vmlinux update_process_times
+2 0.0014 Xorg Xorg AnimCurScreenBlockHandler
+2 0.0014 Xorg Xorg CompositeGlyphs
+2 0.0014 Xorg Xorg CompositeTrapezoids
+2 0.0014 Xorg Xorg DamageEmpty
+2 0.0014 Xorg Xorg DamageRegion
+2 0.0014 Xorg Xorg FreeScratchPixmapHeader
+2 0.0014 Xorg Xorg NoopDDA
+2 0.0014 Xorg Xorg QuickSortRects
+2 0.0014 Xorg Xorg __i686.get_pc_thunk.cx
+2 0.0014 Xorg Xorg damageInsertDamage
+2 0.0014 Xorg Xorg damagePolySegment
+2 0.0014 Xorg Xorg dixDestroyPixmap
+2 0.0014 Xorg Xorg miChangePictureClip
+2 0.0014 Xorg Xorg miCreatePicture
+2 0.0014 Xorg Xorg miDestroyGCOps
+2 0.0014 Xorg Xorg miSpriteBlockHandler
+2 0.0014 Xorg Xorg miUnionO
+2 0.0014 e1000.ko e1000 e1000_irq_enable
+2 0.0014 ext3.ko ext3 __ext3_journal_stop
+2 0.0014 ext3.ko ext3 ext3_add_entry
+2 0.0014 ext3.ko ext3 ext3_alloc_inode
+2 0.0014 ext3.ko ext3 ext3_create
+2 0.0014 ext3.ko ext3 ext3_free_blocks_sb
+2 0.0014 ext3.ko ext3 ext3_get_inode_loc
+2 0.0014 ext3.ko ext3 ext3_init_acl
+2 0.0014 ext3.ko ext3 ext3_try_to_allocate_with_rsv
+2 0.0014 hald-addon-storage hald-addon-storage (no symbols)
+2 0.0014 intel_drv.so intel_drv.so I830DRISwapContext
+2 0.0014 intel_drv.so intel_drv.so I830EXAPrepareCopy
+2 0.0014 jbd.ko jbd journal_end_buffer_io_sync
+2 0.0014 ld-2.5.so ld-2.5.so _dl_important_hwcaps
+2 0.0014 ld-2.5.so ld-2.5.so _dl_map_object_deps
+2 0.0014 ld-2.5.so ld-2.5.so _dl_name_match_p
+2 0.0014 ld-2.5.so ld-2.5.so _dl_sort_fini
+2 0.0014 ld-2.5.so ld-2.5.so memset
+2 0.0014 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+2 0.0014 libc-2.5.so libc-2.5.so _IO_getline_info
+2 0.0014 libc-2.5.so libc-2.5.so __rpc_thread_destroy
+2 0.0014 libc-2.5.so libc-2.5.so __uflow
+2 0.0014 libc-2.5.so libc-2.5.so _itoa_word
+2 0.0014 libc-2.5.so libc-2.5.so ioctl
+2 0.0014 libc-2.5.so libc-2.5.so memchr
+2 0.0014 libc-2.5.so libc-2.5.so mmap
+2 0.0014 libc-2.5.so libc-2.5.so vsprintf
+2 0.0014 libdri.so libdri.so DRIDoBlockHandler
+2 0.0014 libexa.so libexa.so exaPolySegment
+2 0.0014 libextmod.so libextmod.so __i686.get_pc_thunk.bx
+2 0.0014 libpthread-2.5.so libpthread-2.5.so pthread_cond_signal@@GLIBC_2.3.2
+2 0.0014 sshd sshd (no symbols)
+2 0.0014 vmlinux vmlinux __alloc_pages
+2 0.0014 vmlinux vmlinux __ata_qc_complete
+2 0.0014 vmlinux vmlinux __pte_alloc
+2 0.0014 vmlinux vmlinux __rmqueue
+2 0.0014 vmlinux vmlinux __switch_to
+2 0.0014 vmlinux vmlinux _local_bh_enable
+2 0.0014 vmlinux vmlinux ahci_start_engine
+2 0.0014 vmlinux vmlinux alloc_inode
+2 0.0014 vmlinux vmlinux ata_qc_complete_multiple
+2 0.0014 vmlinux vmlinux ata_qc_issue
+2 0.0014 vmlinux vmlinux cp_new_stat64
+2 0.0014 vmlinux vmlinux delayed_work_timer_fn
+2 0.0014 vmlinux vmlinux do_sys_ftruncate
+2 0.0014 vmlinux vmlinux do_sys_poll
+2 0.0014 vmlinux vmlinux end_bio_bh_io_sync
+2 0.0014 vmlinux vmlinux enqueue_task
+2 0.0014 vmlinux vmlinux expand_files
+2 0.0014 vmlinux vmlinux find_mergeable_anon_vma
+2 0.0014 vmlinux vmlinux flush_tlb_mm
+2 0.0014 vmlinux vmlinux free_pgd_range
+2 0.0014 vmlinux vmlinux generic_file_buffered_write
+2 0.0014 vmlinux vmlinux get_empty_filp
+2 0.0014 vmlinux vmlinux get_unmapped_area
+2 0.0014 vmlinux vmlinux get_unused_fd
+2 0.0014 vmlinux vmlinux getname
+2 0.0014 vmlinux vmlinux groups_search
+2 0.0014 vmlinux vmlinux inc_zone_page_state
+2 0.0014 vmlinux vmlinux inode_add_bytes
+2 0.0014 vmlinux vmlinux iret_exc
+2 0.0014 vmlinux vmlinux lock_timer_base
+2 0.0014 vmlinux vmlinux mark_page_accessed
+2 0.0014 vmlinux vmlinux may_open
+2 0.0014 vmlinux vmlinux mmput
+2 0.0014 vmlinux vmlinux new_inode
+2 0.0014 vmlinux vmlinux open_namei
+2 0.0014 vmlinux vmlinux poll_freewait
+2 0.0014 vmlinux vmlinux profile_tick
+2 0.0014 vmlinux vmlinux queue_delayed_work
+2 0.0014 vmlinux vmlinux radix_tree_insert
+2 0.0014 vmlinux vmlinux raise_softirq
+2 0.0014 vmlinux vmlinux remove_vma
+2 0.0014 vmlinux vmlinux ret_from_exception
+2 0.0014 vmlinux vmlinux scsi_dispatch_cmd
+2 0.0014 vmlinux vmlinux scsi_request_fn
+2 0.0014 vmlinux vmlinux smp_apic_timer_interrupt
+2 0.0014 vmlinux vmlinux sock_wfree
+2 0.0014 vmlinux vmlinux sys_close
+2 0.0014 vmlinux vmlinux sys_mkdir
+2 0.0014 vmlinux vmlinux sys_mkdirat
+2 0.0014 vmlinux vmlinux sys_select
+2 0.0014 vmlinux vmlinux touch_atime
+2 0.0014 vmlinux vmlinux tty_ldisc_deref
+2 0.0014 vmlinux vmlinux unix_poll
+2 0.0014 vmlinux vmlinux up_write
+2 0.0014 vmlinux vmlinux vfs_getattr
+2 0.0014 vmlinux vmlinux vfs_read
+2 0.0014 vmlinux vmlinux vfs_write
+2 0.0014 vmlinux vmlinux vma_adjust
+2 0.0014 vmlinux vmlinux vmtruncate
+2 0.0014 vmlinux vmlinux vsnprintf
+2 0.0014 vmlinux vmlinux wake_up_inode
+2 0.0014 vmlinux vmlinux zone_watermark_ok
+1 7.0e-04 Xorg Xorg AllocateGC
+1 7.0e-04 Xorg Xorg PictureMatchFormat
+1 7.0e-04 Xorg Xorg ProcFreeGC
+1 7.0e-04 Xorg Xorg ProcPolyFillRectangle
+1 7.0e-04 Xorg Xorg ProcRenderSetPictureClipRectangles
+1 7.0e-04 Xorg Xorg ProcRenderTrapezoids
+1 7.0e-04 Xorg Xorg ProcSetClipRectangles
+1 7.0e-04 Xorg Xorg SetClipRects
+1 7.0e-04 Xorg Xorg WakeupHandler
+1 7.0e-04 Xorg Xorg WriteToClient
+1 7.0e-04 Xorg Xorg XYToWindow
+1 7.0e-04 Xorg Xorg _XSERVTransSocketRead
+1 7.0e-04 Xorg Xorg _XSERVTransWritev
+1 7.0e-04 Xorg Xorg damageCopyArea
+1 7.0e-04 Xorg Xorg damageDestroyGC
+1 7.0e-04 Xorg Xorg miBSCreateGC
+1 7.0e-04 Xorg Xorg miDestroyPictureClip
+1 7.0e-04 cat cat (no symbols)
+1 7.0e-04 dirname dirname (no symbols)
+1 7.0e-04 e1000.ko e1000 e1000_intr
+1 7.0e-04 e1000.ko e1000 e1000_xmit_frame
+1 7.0e-04 ext3.ko ext3 add_dirent_to_buf
+1 7.0e-04 ext3.ko ext3 bput_one
+1 7.0e-04 ext3.ko ext3 ext3_block_to_path
+1 7.0e-04 ext3.ko ext3 ext3_check_dir_entry
+1 7.0e-04 ext3.ko ext3 ext3_clear_blocks
+1 7.0e-04 ext3.ko ext3 ext3_free_data
+1 7.0e-04 ext3.ko ext3 ext3_get_block
+1 7.0e-04 ext3.ko ext3 ext3_getblk
+1 7.0e-04 ext3.ko ext3 ext3_journal_dirty_data
+1 7.0e-04 ext3.ko ext3 ext3_lookup
+1 7.0e-04 ext3.ko ext3 ext3_mark_inode_dirty
+1 7.0e-04 ext3.ko ext3 ext3_ordered_commit_write
+1 7.0e-04 ext3.ko ext3 ext3_orphan_add
+1 7.0e-04 ext3.ko ext3 ext3_orphan_del
+1 7.0e-04 ext3.ko ext3 ext3_set_inode_flags
+1 7.0e-04 ext3.ko ext3 ext3_setattr
+1 7.0e-04 ext3.ko ext3 ext3_writepage_trans_blocks
+1 7.0e-04 ext3.ko ext3 read_inode_bitmap
+1 7.0e-04 gawk gawk (no symbols)
+1 7.0e-04 gconfd-2 gconfd-2 (no symbols)
+1 7.0e-04 intel_drv.so intel_drv.so I830EXADoneSolid
+1 7.0e-04 jbd.ko jbd __journal_unfile_buffer
+1 7.0e-04 jbd.ko jbd __log_space_left
+1 7.0e-04 jbd.ko jbd find_revoke_record
+1 7.0e-04 jbd.ko jbd inverted_lock
+1 7.0e-04 jbd.ko jbd journal_blocks_per_page
+1 7.0e-04 jbd.ko jbd journal_get_create_access
+1 7.0e-04 jbd.ko jbd journal_get_undo_access
+1 7.0e-04 jbd.ko jbd journal_get_write_access
+1 7.0e-04 jbd.ko jbd journal_invalidatepage
+1 7.0e-04 jbd.ko jbd journal_write_metadata_buffer
+1 7.0e-04 jbd.ko jbd kjournald
+1 7.0e-04 ld-2.5.so ld-2.5.so ___fxstat64
+1 7.0e-04 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_add_to_slotinfo
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_allocate_tls_storage
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_cache_libcmp
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_check_map_versions
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_fixup
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_init_internal
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_setup_hash
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_start
+1 7.0e-04 ld-2.5.so ld-2.5.so _dl_sysdep_start
+1 7.0e-04 ld-2.5.so ld-2.5.so close
+1 7.0e-04 ld-2.5.so ld-2.5.so index
+1 7.0e-04 ld-2.5.so ld-2.5.so malloc
+1 7.0e-04 ld-2.5.so ld-2.5.so mmap
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_cleanup
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_file_finish@@GLIBC_2.1
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_link_in
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_no_init
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_setb
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_sputbackc
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_str_init_static_internal
+1 7.0e-04 libc-2.5.so libc-2.5.so _IO_vfscanf
+1 7.0e-04 libc-2.5.so libc-2.5.so __ctype_get_mb_cur_max
+1 7.0e-04 libc-2.5.so libc-2.5.so __find_specmb
+1 7.0e-04 libc-2.5.so libc-2.5.so __fopen_maybe_mmap
+1 7.0e-04 libc-2.5.so libc-2.5.so __fxstat
+1 7.0e-04 libc-2.5.so libc-2.5.so __fxstat64@GLIBC_2.1
+1 7.0e-04 libc-2.5.so libc-2.5.so __gconv_load_cache
+1 7.0e-04 libc-2.5.so libc-2.5.so __gconv_lookup_cache
+1 7.0e-04 libc-2.5.so libc-2.5.so __nss_database_lookup
+1 7.0e-04 libc-2.5.so libc-2.5.so __open_nocancel
+1 7.0e-04 libc-2.5.so libc-2.5.so __register_atfork
+1 7.0e-04 libc-2.5.so libc-2.5.so __xstat
+1 7.0e-04 libc-2.5.so libc-2.5.so _nl_load_domain
+1 7.0e-04 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+1 7.0e-04 libc-2.5.so libc-2.5.so _nl_postload_ctype
+1 7.0e-04 libc-2.5.so libc-2.5.so brk
+1 7.0e-04 libc-2.5.so libc-2.5.so btowc
+1 7.0e-04 libc-2.5.so libc-2.5.so fdatasync
+1 7.0e-04 libc-2.5.so libc-2.5.so fflush
+1 7.0e-04 libc-2.5.so libc-2.5.so fork
+1 7.0e-04 libc-2.5.so libc-2.5.so ftruncate
+1 7.0e-04 libc-2.5.so libc-2.5.so llseek
+1 7.0e-04 libc-2.5.so libc-2.5.so mallopt
+1 7.0e-04 libc-2.5.so libc-2.5.so mmap64
+1 7.0e-04 libc-2.5.so libc-2.5.so mremap
+1 7.0e-04 libc-2.5.so libc-2.5.so munmap
+1 7.0e-04 libc-2.5.so libc-2.5.so open
+1 7.0e-04 libc-2.5.so libc-2.5.so ptmalloc_init
+1 7.0e-04 libc-2.5.so libc-2.5.so putc
+1 7.0e-04 libc-2.5.so libc-2.5.so rangecmp
+1 7.0e-04 libc-2.5.so libc-2.5.so rawmemchr
+1 7.0e-04 libc-2.5.so libc-2.5.so re_search_internal
+1 7.0e-04 libc-2.5.so libc-2.5.so setlocale
+1 7.0e-04 libc-2.5.so libc-2.5.so sigaction
+1 7.0e-04 libc-2.5.so libc-2.5.so sigismember
+1 7.0e-04 libc-2.5.so libc-2.5.so strcasecmp
+1 7.0e-04 libc-2.5.so libc-2.5.so strcat
+1 7.0e-04 libc-2.5.so libc-2.5.so strncpy
+1 7.0e-04 libc-2.5.so libc-2.5.so tcgetattr
+1 7.0e-04 libc-2.5.so libc-2.5.so tzset_internal
+1 7.0e-04 libc-2.5.so libc-2.5.so writev
+1 7.0e-04 libdri.so libdri.so DRIBlockHandler
+1 7.0e-04 libdri.so libdri.so DRIDoWakeupHandler
+1 7.0e-04 libdri.so libdri.so DRILock
+1 7.0e-04 libdri.so libdri.so __i686.get_pc_thunk.bx
+1 7.0e-04 libexa.so libexa.so exaPrepareAccess
+1 7.0e-04 libfb.so libfb.so fbComposite
+1 7.0e-04 libfb.so libfb.so fbGetWinPrivateIndex
+1 7.0e-04 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+1 7.0e-04 libpam.so.0.79 libpam.so.0.79 (no symbols)
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchSolid
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_clip_region
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_component_alpha
+1 7.0e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_repeat
+1 7.0e-04 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.cx
+1 7.0e-04 libpthread-2.5.so libpthread-2.5.so __read_nocancel
+1 7.0e-04 libpthread-2.5.so libpthread-2.5.so write
+1 7.0e-04 libselinux.so.1 libselinux.so.1 (no symbols)
+1 7.0e-04 libsepol.so.1 libsepol.so.1 (no symbols)
+1 7.0e-04 locale-archive locale-archive (no symbols)
+1 7.0e-04 mouse_drv.so mouse_drv.so MouseBlockHandler
+1 7.0e-04 mouse_drv.so mouse_drv.so MouseWakeupHandler
+1 7.0e-04 mouse_drv.so mouse_drv.so __i686.get_pc_thunk.bx
+1 7.0e-04 oprofile.ko oprofile process_task_mortuary
+1 7.0e-04 oprofile.ko oprofile wq_sync_buffer
+1 7.0e-04 sd_mod.ko sd_mod sd_init_command
+1 7.0e-04 sleep sleep (no symbols)
+1 7.0e-04 uhci-hcd.ko uhci_hcd uhci_get_current_frame_number
+1 7.0e-04 uhci-hcd.ko uhci_hcd uhci_scan_schedule
+1 7.0e-04 usbhid.ko usbhid hid_input_report
+1 7.0e-04 vmlinux vmlinux __blkdev_put
+1 7.0e-04 vmlinux vmlinux __cleanup_sighand
+1 7.0e-04 vmlinux vmlinux __d_path
+1 7.0e-04 vmlinux vmlinux __d_rehash
+1 7.0e-04 vmlinux vmlinux __dequeue_signal
+1 7.0e-04 vmlinux vmlinux __group_complete_signal
+1 7.0e-04 vmlinux vmlinux __inc_zone_state
+1 7.0e-04 vmlinux vmlinux __lookup_hash
+1 7.0e-04 vmlinux vmlinux __make_request
+1 7.0e-04 vmlinux vmlinux __mmdrop
+1 7.0e-04 vmlinux vmlinux __mod_timer
+1 7.0e-04 vmlinux vmlinux __page_set_anon_rmap
+1 7.0e-04 vmlinux vmlinux __path_lookup_intent_open
+1 7.0e-04 vmlinux vmlinux __put_user_4
+1 7.0e-04 vmlinux vmlinux __rb_rotate_right
+1 7.0e-04 vmlinux vmlinux __remove_from_page_cache
+1 7.0e-04 vmlinux vmlinux __tasklet_schedule
+1 7.0e-04 vmlinux vmlinux __vma_link_rb
+1 7.0e-04 vmlinux vmlinux __wake_up_common
+1 7.0e-04 vmlinux vmlinux account_system_time
+1 7.0e-04 vmlinux vmlinux activate_page
+1 7.0e-04 vmlinux vmlinux add_to_page_cache_lru
+1 7.0e-04 vmlinux vmlinux ahci_fill_cmd_slot
+1 7.0e-04 vmlinux vmlinux ahci_scr_read
+1 7.0e-04 vmlinux vmlinux alloc_buffer_head
+1 7.0e-04 vmlinux vmlinux as_add_request
+1 7.0e-04 vmlinux vmlinux as_add_rq_rb
+1 7.0e-04 vmlinux vmlinux as_merged_request
+1 7.0e-04 vmlinux vmlinux ata_do_eh
+1 7.0e-04 vmlinux vmlinux ata_find_dev
+1 7.0e-04 vmlinux vmlinux ata_qc_new_init
+1 7.0e-04 vmlinux vmlinux ata_tf_to_fis
+1 7.0e-04 vmlinux vmlinux balance_dirty_pages_ratelimited_nr
+1 7.0e-04 vmlinux vmlinux balanced_irq
+1 7.0e-04 vmlinux vmlinux bictcp_cong_avoid
+1 7.0e-04 vmlinux vmlinux bio_alloc_bioset
+1 7.0e-04 vmlinux vmlinux bio_init
+1 7.0e-04 vmlinux vmlinux bio_put
+1 7.0e-04 vmlinux vmlinux blk_complete_request
+1 7.0e-04 vmlinux vmlinux blk_execute_rq
+1 7.0e-04 vmlinux vmlinux blk_put_request
+1 7.0e-04 vmlinux vmlinux blocking_notifier_call_chain
+1 7.0e-04 vmlinux vmlinux bmap
+1 7.0e-04 vmlinux vmlinux can_vma_merge_after
+1 7.0e-04 vmlinux vmlinux cap_vm_enough_memory
+1 7.0e-04 vmlinux vmlinux cdrom_ioctl
+1 7.0e-04 vmlinux vmlinux cdrom_release
+1 7.0e-04 vmlinux vmlinux clear_user
+1 7.0e-04 vmlinux vmlinux common_interrupt
+1 7.0e-04 vmlinux vmlinux cpu_idle
+1 7.0e-04 vmlinux vmlinux d_free
+1 7.0e-04 vmlinux vmlinux d_instantiate
+1 7.0e-04 vmlinux vmlinux d_path
+1 7.0e-04 vmlinux vmlinux do_brk
+1 7.0e-04 vmlinux vmlinux do_exit
+1 7.0e-04 vmlinux vmlinux do_munmap
+1 7.0e-04 vmlinux vmlinux do_readv_writev
+1 7.0e-04 vmlinux vmlinux do_sys_open
+1 7.0e-04 vmlinux vmlinux down_read
+1 7.0e-04 vmlinux vmlinux dup_fd
+1 7.0e-04 vmlinux vmlinux elv_next_request
+1 7.0e-04 vmlinux vmlinux end_buffer_async_write
+1 7.0e-04 vmlinux vmlinux eth_type_trans
+1 7.0e-04 vmlinux vmlinux exec_keys
+1 7.0e-04 vmlinux vmlinux fd_install
+1 7.0e-04 vmlinux vmlinux file_read_actor
+1 7.0e-04 vmlinux vmlinux fixup_exception
+1 7.0e-04 vmlinux vmlinux flush_thread
+1 7.0e-04 vmlinux vmlinux free_poll_entry
+1 7.0e-04 vmlinux vmlinux generic_delete_inode
+1 7.0e-04 vmlinux vmlinux generic_fillattr
+1 7.0e-04 vmlinux vmlinux generic_make_request
+1 7.0e-04 vmlinux vmlinux get_dcookie
+1 7.0e-04 vmlinux vmlinux get_signal_to_deliver
+1 7.0e-04 vmlinux vmlinux get_vmalloc_info
+1 7.0e-04 vmlinux vmlinux half_md4_transform
+1 7.0e-04 vmlinux vmlinux handle_IRQ_event
+1 7.0e-04 vmlinux vmlinux hrtimer_try_to_cancel
+1 7.0e-04 vmlinux vmlinux hweight32
+1 7.0e-04 vmlinux vmlinux idle_cpu
+1 7.0e-04 vmlinux vmlinux init_waitqueue_head
+1 7.0e-04 vmlinux vmlinux inode_setattr
+1 7.0e-04 vmlinux vmlinux inotify_dentry_parent_queue_event
+1 7.0e-04 vmlinux vmlinux ioprio_best
+1 7.0e-04 vmlinux vmlinux ioread32
+1 7.0e-04 vmlinux vmlinux ip_rcv
+1 7.0e-04 vmlinux vmlinux ip_route_input
+1 7.0e-04 vmlinux vmlinux iput
+1 7.0e-04 vmlinux vmlinux kmap_atomic
+1 7.0e-04 vmlinux vmlinux kthread_should_stop
+1 7.0e-04 vmlinux vmlinux ll_rw_block
+1 7.0e-04 vmlinux vmlinux local_bh_enable_ip
+1 7.0e-04 vmlinux vmlinux lookup_create
+1 7.0e-04 vmlinux vmlinux lru_add_drain
+1 7.0e-04 vmlinux vmlinux lru_cache_add
+1 7.0e-04 vmlinux vmlinux mapping_tagged
+1 7.0e-04 vmlinux vmlinux math_state_restore
+1 7.0e-04 vmlinux vmlinux memcpy_fromiovec
+1 7.0e-04 vmlinux vmlinux memcpy_toiovec
+1 7.0e-04 vmlinux vmlinux mempool_alloc
+1 7.0e-04 vmlinux vmlinux mm_init
+1 7.0e-04 vmlinux vmlinux mpage_readpage
+1 7.0e-04 vmlinux vmlinux n_tty_chars_in_buffer
+1 7.0e-04 vmlinux vmlinux pagevec_lookup_tag
+1 7.0e-04 vmlinux vmlinux pipe_poll
+1 7.0e-04 vmlinux vmlinux prio_tree_left
+1 7.0e-04 vmlinux vmlinux prio_tree_next
+1 7.0e-04 vmlinux vmlinux proc_delete_inode
+1 7.0e-04 vmlinux vmlinux proc_lookup
+1 7.0e-04 vmlinux vmlinux profile_hit
+1 7.0e-04 vmlinux vmlinux profile_pc
+1 7.0e-04 vmlinux vmlinux pty_write
+1 7.0e-04 vmlinux vmlinux rb_insert_color
+1 7.0e-04 vmlinux vmlinux rb_next
+1 7.0e-04 vmlinux vmlinux recalc_bh_state
+1 7.0e-04 vmlinux vmlinux remove_from_page_cache
+1 7.0e-04 vmlinux vmlinux resume_userspace
+1 7.0e-04 vmlinux vmlinux run_workqueue
+1 7.0e-04 vmlinux vmlinux rw_copy_check_uvector
+1 7.0e-04 vmlinux vmlinux sata_scr_read
+1 7.0e-04 vmlinux vmlinux scsi_decide_disposition
+1 7.0e-04 vmlinux vmlinux scsi_error_handler
+1 7.0e-04 vmlinux vmlinux scsi_execute
+1 7.0e-04 vmlinux vmlinux scsi_get_command
+1 7.0e-04 vmlinux vmlinux scsi_run_queue
+1 7.0e-04 vmlinux vmlinux search_binary_handler
+1 7.0e-04 vmlinux vmlinux search_exception_tables
+1 7.0e-04 vmlinux vmlinux send_IPI_mask_bitmask
+1 7.0e-04 vmlinux vmlinux set_page_dirty_balance
+1 7.0e-04 vmlinux vmlinux sha_transform
+1 7.0e-04 vmlinux vmlinux show_map_internal
+1 7.0e-04 vmlinux vmlinux sigprocmask
+1 7.0e-04 vmlinux vmlinux skb_dequeue
+1 7.0e-04 vmlinux vmlinux skb_queue_tail
+1 7.0e-04 vmlinux vmlinux smp_send_timer_broadcast_ipi
+1 7.0e-04 vmlinux vmlinux sock_aio_read
+1 7.0e-04 vmlinux vmlinux sr_open
+1 7.0e-04 vmlinux vmlinux static_prio_timeslice
+1 7.0e-04 vmlinux vmlinux sync_sb_inodes
+1 7.0e-04 vmlinux vmlinux sys_mmap2
+1 7.0e-04 vmlinux vmlinux sys_read
+1 7.0e-04 vmlinux vmlinux sys_rt_sigprocmask
+1 7.0e-04 vmlinux vmlinux sys_write
+1 7.0e-04 vmlinux vmlinux tasklet_action
+1 7.0e-04 vmlinux vmlinux tcp_v4_rcv
+1 7.0e-04 vmlinux vmlinux tcp_v4_send_check
+1 7.0e-04 vmlinux vmlinux timespec_trunc
+1 7.0e-04 vmlinux vmlinux try_to_free_buffers
+1 7.0e-04 vmlinux vmlinux tsc_update_callback
+1 7.0e-04 vmlinux vmlinux tty_paranoia_check
+1 7.0e-04 vmlinux vmlinux tty_poll
+1 7.0e-04 vmlinux vmlinux tty_read
+1 7.0e-04 vmlinux vmlinux unix_ioctl
+1 7.0e-04 vmlinux vmlinux unix_write_space
+1 7.0e-04 vmlinux vmlinux unlink_file_vma
+1 7.0e-04 vmlinux vmlinux unmap_region
+1 7.0e-04 vmlinux vmlinux vfs_llseek
+1 7.0e-04 vmlinux vmlinux vfs_mkdir
+1 7.0e-04 vmlinux vmlinux vfs_rename
+1 7.0e-04 vmlinux vmlinux vm_normal_page
+1 7.0e-04 vmlinux vmlinux vma_link
+1 7.0e-04 vmlinux vmlinux vma_prio_tree_add
+1 7.0e-04 vmlinux vmlinux wake_up_bit
+1 7.0e-04 vmlinux vmlinux wake_up_new_task
+1 7.0e-04 vmlinux vmlinux worker_thread
--- /dev/null
+Average: 58.264
+Raw: 4,4,4,168,4,4,160,4,4,159,4,5,149,4,148,4,4,159,4,4,162,4,4,157,5,139,4,5,157,4,5,159,4,4,156,5,138,5,4,161,5,4,160,4,4,158,5,141,4,4,156,4,5,160,4,4,161,4,5,135,100,4,4,159,4,4,155,5,139,5,4,161,5,4,159,5,4,158,4,141,5,4,156,5,4,160,5,4,160,4,4,137,99,4,4,160,4,4,156,4,140,5,4,160,5,4,160,5,4,158,4,141,5,4,156,4,4,160,4,4,161,4,4,137,99,4,4,159,4,4,156,4,139,4,4,162,4,4,161,4,4,158,4,141,5,4,155,5,4,160,5,4,161,4,4,135,99,4,4,159,4,5,155,4,140,4,5,161,4,4,160,4,4,158,4,142,5,4,155,4,5,161,4,4,160,5,4,136,99,4,4,160,4,4,156,4,140,5,4,161,4,4,161,4,4,158,4,142,4,4,156,4,5,160,4,5,160,4,4,137,99,4,4,159,5,4,155,4,140,4,5,161,4,4,161,4,5,157,4,142,4,4,156,5,4,159,5,4,160,4,4,135,99,4,4,159,4,5,156,4,139,5,4,162,4,4,160,4,4,158,5,141,4,5,155,4,5,161,4,4,161,4,5,135,99,4,5,159,5,4,155,4,141,4,4,162,4,4,160,5
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+296 14.6029 Xorg miComputeCompositeRegion
+ 296 47.1338 Xorg miComputeCompositeRegion [self]
+ 214 34.0764 Xorg miCompositeSourceValidate
+ 51 8.1210 libpixman.so.0.0.0 pixman_region_rectangles
+ 24 3.8217 libpixman.so.0.0.0 pixman_region_n_rects
+ 19 3.0255 Xorg miSpriteSourceValidate
+ 11 1.7516 Xorg __i686.get_pc_thunk.bx
+ 8 1.2739 libpixman.so.0.0.0 pixman_region_not_empty
+ 4 0.6369 libpixman.so.0.0.0 pixman_region_init
+ 1 0.1592 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 19 15.9664 Xorg miComputeCompositeRegion
+ 100 84.0336 Xorg miCompositeSourceValidate
+140 6.9068 Xorg miSpriteSourceValidate
+ 140 100.000 Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 214 100.000 Xorg miComputeCompositeRegion
+106 5.2294 Xorg miCompositeSourceValidate
+ 106 48.8479 Xorg miCompositeSourceValidate [self]
+ 100 46.0829 Xorg miSpriteSourceValidate
+ 11 5.0691 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 1.4085 Xorg damagePolyFillRect
+ 1 1.4085 Xorg damageDamageRegion
+ 1 1.4085 Xorg ProcRenderCreatePicture
+ 1 1.4085 Xorg ProcRenderComposite
+ 1 1.4085 Xorg ProcRenderSetPictureFilter
+ 1 1.4085 Xorg FreePicture
+ 1 1.4085 Xorg ValidateOnePicture
+ 1 1.4085 Xorg miTrapezoidBounds
+ 1 1.4085 Xorg miValidatePicture
+ 1 1.4085 Xorg XaceCatchDispatchProc
+ 1 1.4085 Xorg AllocatePixmap
+ 1 1.4085 Xorg miRectsToRegion
+ 1 1.4085 Xorg ValidateGC
+ 1 1.4085 Xorg dixLookupDrawable
+ 2 2.8169 Xorg SecurityLookupIDByType
+ 2 2.8169 Xorg AddResource
+ 2 2.8169 Xorg _CallCallbacks
+ 2 2.8169 Xorg CompositeRects
+ 2 2.8169 Xorg CompositeGlyphs
+ 2 2.8169 Xorg ValidatePicture
+ 2 2.8169 Xorg miColorRects
+ 2 2.8169 Xorg miRegionCreate
+ 3 4.2254 Xorg ProcRenderCompositeGlyphs
+ 3 4.2254 Xorg XaceCatchExtProc
+ 4 5.6338 Xorg ProcRenderDispatch
+ 4 5.6338 Xorg CallCallbacks
+ 5 7.0423 Xorg Dispatch
+ 11 15.4930 Xorg miComputeCompositeRegion
+ 11 15.4930 Xorg miCompositeSourceValidate
+97 4.7854 Xorg __i686.get_pc_thunk.bx
+ 97 100.000 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 4 4.5455 Xorg ProcRenderCompositeGlyphs
+ 84 95.4545 Xorg FindGlyph
+88 4.3414 Xorg FindGlyphRef
+ 88 100.000 Xorg FindGlyphRef [self]
+-------------------------------------------------------------------------------
+ 1 0.5587 Xorg ProcRenderCompositeGlyphs
+ 1 0.5587 Xorg ProcRenderCreatePicture
+ 3 1.6760 Xorg XaceCatchDispatchProc
+ 5 2.7933 Xorg dixLookupDrawable
+ 8 4.4693 Xorg main
+ 12 6.7039 Xorg SecurityLookupIDByClass
+ 32 17.8771 Xorg Dispatch
+ 40 22.3464 Xorg XaceCatchExtProc
+ 77 43.0168 Xorg SecurityLookupIDByType
+74 3.6507 Xorg XaceHook
+ 92 51.3966 Xorg CallCallbacks
+ 74 41.3408 Xorg XaceHook [self]
+ 13 7.2626 Xorg _CallCallbacks
+-------------------------------------------------------------------------------
+ 4 36.3636 Xorg GetScratchPixmapHeader
+ 7 63.6364 Xorg damageGlyphs
+66 3.2560 Xorg miModifyPixmapHeader
+ 66 100.000 Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 50802 100.000 Xorg CompositeGlyphs
+61 3.0094 Xorg damageGlyphs
+ 50684 99.7599 libexa.so exaGlyphs
+ 61 0.1201 Xorg damageGlyphs [self]
+ 11 0.0217 libexa.so exaComposite
+ 10 0.0197 Xorg damageDamageBox
+ 7 0.0138 libexa.so .plt
+ 7 0.0138 Xorg miModifyPixmapHeader
+ 4 0.0079 libexa.so exaCopyArea
+ 4 0.0079 Xorg damageReportPostOp
+ 3 0.0059 libexa.so exaCreatePixmap
+ 2 0.0039 Xorg miGlyphExtents
+ 2 0.0039 Xorg GetScratchGC
+ 2 0.0039 libexa.so exaPixmapDirty
+ 2 0.0039 Xorg FreeScratchGC
+ 2 0.0039 Xorg FreeScratchPixmapHeader
+ 1 0.0020 Xorg DamageReportDamage
+ 1 0.0020 Xorg FreePicture
+ 1 0.0020 Xorg damagePolyFillRect
+ 1 0.0020 Xorg ValidateGC
+ 1 0.0020 Xorg GetScratchPixmapHeader
+-------------------------------------------------------------------------------
+ 1 1.5152 Xorg main
+ 65 98.4848 Xorg Dispatch
+60 2.9600 Xorg ReadRequestFromClient
+ 60 90.9091 Xorg ReadRequestFromClient [self]
+ 5 7.5758 Xorg _XSERVTransRead
+ 1 1.5152 Xorg _XSERVTransSocketRead
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg SetClipRects
+ 1 20.0000 Xorg miRegionCreate
+ 1 20.0000 Xorg miValidatePicture
+ 2 40.0000 Xorg damageDamageRegion
+50 2.4667 Xorg .plt
+ 50 100.000 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 0.7246 Xorg ProcFreePixmap
+ 1 0.7246 Xorg ProcRenderSetPictureClipRectangles
+ 2 1.4493 Xorg ProcRenderTrapezoids
+ 5 3.6232 Xorg ProcRenderComposite
+ 6 4.3478 Xorg ProcRenderDispatch
+ 7 5.0725 Xorg ProcRenderChangePicture
+ 10 7.2464 Xorg ProcRenderSetPictureTransform
+ 11 7.9710 Xorg dixLookupGC
+ 13 9.4203 Xorg ProcRenderCreatePicture
+ 15 10.8696 Xorg ProcRenderFillRectangles
+ 17 12.3188 Xorg ProcRenderSetPictureFilter
+ 22 15.9420 Xorg ProcRenderFreePicture
+ 28 20.2899 Xorg ProcRenderCompositeGlyphs
+40 1.9734 Xorg SecurityLookupIDByType
+ 77 55.7971 Xorg XaceHook
+ 40 28.9855 Xorg SecurityLookupIDByType [self]
+ 15 10.8696 Xorg Hash
+ 4 2.8986 Xorg CallCallbacks
+ 2 1.4493 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 62687 100.000 Xorg main
+37 1.8254 Xorg Dispatch
+ 62277 99.3333 Xorg XaceCatchExtProc
+ 261 0.4163 Xorg XaceCatchDispatchProc
+ 65 0.1037 Xorg ReadRequestFromClient
+ 37 0.0590 Xorg Dispatch [self]
+ 32 0.0510 Xorg XaceHook
+ 5 0.0080 Xorg __i686.get_pc_thunk.bx
+ 5 0.0080 Xorg ProcFreePixmap
+ 5 0.0080 Xorg ProcRenderDispatch
+ 3 0.0048 Xorg CallCallbacks
+ 3 0.0048 Xorg WaitForSomething
+ 1 0.0016 Xorg ProcCopyArea
+ 1 0.0016 Xorg ProcChangeGC
+-------------------------------------------------------------------------------
+ 5 13.8889 Xorg CallCallbacks
+ 31 86.1111 Xorg _CallCallbacks
+36 1.7760 Xorg SecurityCheckResourceIDAccess
+ 36 100.000 Xorg SecurityCheckResourceIDAccess [self]
+-------------------------------------------------------------------------------
+ 4 0.0078 Xorg XaceCatchExtProc
+ 50967 99.9922 Xorg ProcRenderDispatch
+30 1.4800 Xorg ProcRenderCompositeGlyphs
+ 50816 99.6783 Xorg CompositeGlyphs
+ 96 0.1883 Xorg FindGlyph
+ 30 0.0588 Xorg ProcRenderCompositeGlyphs [self]
+ 28 0.0549 Xorg SecurityLookupIDByType
+ 4 0.0078 Xorg FindGlyphRef
+ 3 0.0059 Xorg __i686.get_pc_thunk.bx
+ 2 0.0039 Xorg ValidatePicture
+ 1 0.0020 Xorg XaceHook
+-------------------------------------------------------------------------------
+ 13 17.1053 Xorg XaceHook
+ 63 82.8947 Xorg CallCallbacks
+30 1.4800 Xorg _CallCallbacks
+ 31 40.7895 Xorg SecurityCheckResourceIDAccess
+ 30 39.4737 Xorg _CallCallbacks [self]
+ 13 17.1053 Xorg SecurityCheckExtAccess
+ 2 2.6316 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 1.0000 Xorg XaceCatchExtProc
+ 3 3.0000 Xorg Dispatch
+ 4 4.0000 Xorg SecurityLookupIDByType
+ 92 92.0000 Xorg XaceHook
+27 1.3320 Xorg CallCallbacks
+ 63 63.0000 Xorg _CallCallbacks
+ 27 27.0000 Xorg CallCallbacks [self]
+ 5 5.0000 Xorg SecurityCheckResourceIDAccess
+ 4 4.0000 Xorg __i686.get_pc_thunk.bx
+ 1 1.0000 Xorg SecurityCheckExtAccess
+-------------------------------------------------------------------------------
+ 1 0.9901 Xorg ProcRenderDispatch
+ 1 0.9901 Xorg ProcFreeGC
+ 37 36.6337 Xorg ProcFreePixmap
+ 62 61.3861 Xorg ProcRenderFreePicture
+27 1.3320 Xorg FreeResource
+ 33 32.6733 Xorg FreePicture
+ 27 26.7327 Xorg FreeResource [self]
+ 24 23.7624 Xorg dixDestroyPixmap
+ 8 7.9208 Xorg Xfree
+ 4 3.9604 Xorg FlushClientCaches
+ 3 2.9703 Xorg miDestroyPicture
+ 1 0.9901 Xorg Hash
+ 1 0.9901 Xorg FreeGC
+-------------------------------------------------------------------------------
+ 1 3.7037 Xorg FreeResource
+ 1 3.7037 Xorg ProcCreatePixmap
+ 1 3.7037 Xorg ProcRenderSetPictureTransform
+ 1 3.7037 Xorg ProcRenderCreatePicture
+ 2 7.4074 Xorg SecurityLookupIDByClass
+ 3 11.1111 Xorg AddResource
+ 3 11.1111 Xorg ProcRenderFreePicture
+ 15 55.5556 Xorg SecurityLookupIDByType
+27 1.3320 Xorg Hash
+ 27 100.000 Xorg Hash [self]
+-------------------------------------------------------------------------------
+ 2 8.0000 Xorg damageReportPostOp
+ 3 12.0000 Xorg damageDamageBox
+ 9 36.0000 Xorg DamageReportDamage
+ 11 44.0000 Xorg damageDamageRegion
+27 1.3320 Xorg miUnion
+ 422 92.3414 libpixman.so.0.0.0 pixman_region_union
+ 27 5.9081 Xorg miUnion [self]
+ 4 0.8753 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 3 0.6565 libpixman.so.0.0.0 pixman_region_copy
+ 1 0.2188 libpixman.so.0.0.0 .plt
+-------------------------------------------------------------------------------
+ 6 15.3846 Xorg ProcChangeGC
+ 33 84.6154 Xorg ChangeGC
+24 1.1840 Xorg dixChangeGC
+ 24 61.5385 Xorg dixChangeGC [self]
+ 12 30.7692 Xorg damageChangeGC
+ 2 5.1282 Xorg damageChangeClip
+ 1 2.5641 Xorg miBSCheapChangeGC
+-------------------------------------------------------------------------------
+ 22 100.000 Xorg PictureGetFilterId
+22 1.0853 Xorg CompareISOLatin1Lowered
+ 22 100.000 Xorg CompareISOLatin1Lowered [self]
+-------------------------------------------------------------------------------
+ 2 0.0032 Xorg main
+ 62277 99.9968 Xorg Dispatch
+22 1.0853 Xorg XaceCatchExtProc
+ 62190 99.8427 Xorg ProcRenderDispatch
+ 40 0.0642 Xorg XaceHook
+ 22 0.0353 Xorg XaceCatchExtProc [self]
+ 6 0.0096 Xorg ProcRenderCreatePicture
+ 5 0.0080 Xorg GetExtensionEntry
+ 5 0.0080 Xorg ProcRenderFillRectangles
+ 5 0.0080 Xorg ProcRenderChangePicture
+ 4 0.0064 Xorg ProcRenderCompositeGlyphs
+ 3 0.0048 Xorg __i686.get_pc_thunk.bx
+ 2 0.0032 Xorg __i686.get_pc_thunk.cx
+ 2 0.0032 Xorg ProcRenderFreePicture
+ 1 0.0016 Xorg CallCallbacks
+ 1 0.0016 Xorg ProcRenderSetPictureFilter
+ 1 0.0016 Xorg ProcRenderSetPictureTransform
+ 1 0.0016 Xorg ProcRenderSetPictureClipRectangles
+-------------------------------------------------------------------------------
+ 48 100.000 Xorg damageDamageBox
+21 1.0360 Xorg damageDamageRegion
+ 21 43.7500 Xorg damageDamageRegion [self]
+ 11 22.9167 Xorg miUnion
+ 10 20.8333 Xorg miIntersect
+ 2 4.1667 Xorg .plt
+ 2 4.1667 libpixman.so.0.0.0 pixman_region_intersect
+ 1 2.0833 Xorg __i686.get_pc_thunk.bx
+ 1 2.0833 libpixman.so.0.0.0 pixman_region_union
+-------------------------------------------------------------------------------
+20 0.9867 Xorg miComputeCompositeClip
+ 20 83.3333 Xorg miComputeCompositeClip [self]
+ 3 12.5000 Xorg miTranslateRegion
+ 1 4.1667 Xorg miIntersect
+-------------------------------------------------------------------------------
+ 1 0.3106 Xorg damageGlyphs
+ 6 1.8634 Xorg ProcPolyFillRectangle
+ 7 2.1739 Xorg miCompositeRects
+ 8 2.4845 Xorg miCreateAlphaPicture
+ 300 93.1677 Xorg miColorRects
+17 0.8387 Xorg damagePolyFillRect
+ 269 79.5858 libexa.so exaPolyFillRect
+ 31 9.1716 Xorg damageDamageBox
+ 17 5.0296 Xorg damagePolyFillRect [self]
+ 11 3.2544 Xorg damageReportPostOp
+ 2 0.5917 libexa.so exaFillRegionSolid
+ 1 0.2959 Xorg __i686.get_pc_thunk.bx
+ 1 0.2959 Xorg miTranslateRegion
+ 1 0.2959 Xorg miIntersect
+ 1 0.2959 Xorg miRegionDestroy
+ 1 0.2959 Xorg miRectsToRegion
+ 1 0.2959 Xorg getDrawableDamageRef
+ 1 0.2959 libexa.so .plt
+ 1 0.2959 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 13.3333 Xorg ProcRenderDispatch
+ 5 33.3333 Xorg CreatePicture
+ 8 53.3333 Xorg ProcRenderChangePicture
+16 0.7893 Xorg ChangePicture
+ 16 100.000 Xorg ChangePicture [self]
+-------------------------------------------------------------------------------
+ 1 2.6316 Xorg SetPictureFilter
+ 2 5.2632 Xorg CreatePicture
+ 6 15.7895 Xorg PictureFindFilter
+ 29 76.3158 Xorg SetPictureToDefaults
+16 0.7893 Xorg PictureGetFilterId
+ 22 57.8947 Xorg CompareISOLatin1Lowered
+ 16 42.1053 Xorg PictureGetFilterId [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damageGlyphs
+16 0.7893 Xorg miGlyphExtents
+ 16 100.000 Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 3 3.0303 Xorg ProcRenderDispatch
+ 96 96.9697 Xorg ProcRenderCompositeGlyphs
+15 0.7400 Xorg FindGlyph
+ 84 84.8485 Xorg FindGlyphRef
+ 15 15.1515 Xorg FindGlyph [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg FreePicture
+ 1 50.0000 Xorg miCreateAlphaPicture
+15 0.7400 Xorg damageDestroyPixmap
+ 45 66.1765 libexa.so exaDestroyPixmap
+ 15 22.0588 Xorg damageDestroyPixmap [self]
+ 5 7.3529 Xorg DamageDestroy
+ 2 2.9412 Xorg Xfree
+ 1 1.4706 libfb.so fbDestroyPixmap
+-------------------------------------------------------------------------------
+ 1 0.2257 Xorg CompositeRects
+ 442 99.7743 Xorg miCompositeRects
+15 0.7400 Xorg miColorRects
+ 300 67.4157 Xorg damagePolyFillRect
+ 47 10.5618 Xorg ValidateGC
+ 37 8.3146 Xorg ChangeGC
+ 17 3.8202 Xorg GetScratchGC
+ 15 3.3708 Xorg miColorRects [self]
+ 10 2.2472 Xorg miRenderColorToPixel
+ 7 1.5730 Xorg miRegionCreate
+ 4 0.8989 Xorg miRegionCopy
+ 3 0.6742 Xorg FreeScratchGC
+ 2 0.4494 Xorg __i686.get_pc_thunk.bx
+ 1 0.2247 Xorg damageValidateGC
+ 1 0.2247 Xorg damageDamageBox
+ 1 0.2247 libexa.so exaPolyFillRect
+-------------------------------------------------------------------------------
+ 6 4.3165 Xorg XaceCatchExtProc
+ 133 95.6835 Xorg ProcRenderDispatch
+14 0.6907 Xorg ProcRenderCreatePicture
+ 68 48.9209 Xorg CreatePicture
+ 23 16.5468 Xorg dixLookupDrawable
+ 14 10.0719 Xorg ProcRenderCreatePicture [self]
+ 13 9.3525 Xorg SecurityLookupIDByType
+ 10 7.1942 Xorg AddResource
+ 5 3.5971 Xorg LegalNewID
+ 1 0.7194 Xorg __i686.get_pc_thunk.bx
+ 1 0.7194 Xorg Hash
+ 1 0.7194 Xorg SecurityLookupIDByClass
+ 1 0.7194 Xorg Ones
+ 1 0.7194 Xorg XaceHook
+ 1 0.7194 Xorg miCreatePicture
+-------------------------------------------------------------------------------
+ 1 7.1429 Xorg CallCallbacks
+ 13 92.8571 Xorg _CallCallbacks
+14 0.6907 Xorg SecurityCheckExtAccess
+ 14 100.000 Xorg SecurityCheckExtAccess [self]
+-------------------------------------------------------------------------------
+13 0.6413 Xorg AllocatePixmap
+ 67 82.7160 Xorg Xalloc
+ 13 16.0494 Xorg AllocatePixmap [self]
+ 1 1.2346 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 1.3514 Xorg ProcRenderDispatch
+ 2 2.7027 Xorg miCreateAlphaPicture
+ 3 4.0541 Xorg miCompositeRects
+ 68 91.8919 Xorg ProcRenderCreatePicture
+12 0.5920 Xorg CreatePicture
+ 51 52.0408 Xorg SetPictureToDefaults
+ 27 27.5510 Xorg AllocatePicture
+ 12 12.2449 Xorg CreatePicture [self]
+ 5 5.1020 Xorg ChangePicture
+ 2 2.0408 Xorg PictureGetFilterId
+ 1 1.0204 Xorg Xalloc
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg ProcCreatePixmap
+12 0.5920 Xorg DamageCreate
+ 15 55.5556 Xorg Xalloc
+ 12 44.4444 Xorg DamageCreate [self]
+-------------------------------------------------------------------------------
+ 1 8.3333 Xorg miTrapezoidBounds
+ 11 91.6667 Xorg miLineFixedX
+12 0.5920 Xorg __divdi3
+ 12 100.000 Xorg __divdi3 [self]
+-------------------------------------------------------------------------------
+10 0.4933 Xorg DamageRegion
+ 10 100.000 Xorg DamageRegion [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg CompositeRects
+ 2 33.3333 Xorg damageGlyphs
+ 3 50.0000 Xorg miColorRects
+10 0.4933 Xorg FreeScratchGC
+ 10 100.000 Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 5 0.0080 Xorg Dispatch
+ 62190 99.9920 Xorg XaceCatchExtProc
+10 0.4933 Xorg ProcRenderDispatch
+ 50967 81.9405 Xorg ProcRenderCompositeGlyphs
+ 8299 13.3424 Xorg ProcRenderTrapezoids
+ 2022 3.2508 Xorg ProcRenderComposite
+ 566 0.9100 Xorg ProcRenderFillRectangles
+ 133 0.2138 Xorg ProcRenderCreatePicture
+ 87 0.1399 Xorg ProcRenderFreePicture
+ 46 0.0740 Xorg ProcRenderSetPictureFilter
+ 21 0.0338 Xorg ProcRenderSetPictureTransform
+ 18 0.0289 Xorg ProcRenderChangePicture
+ 10 0.0161 Xorg ProcRenderDispatch [self]
+ 8 0.0129 Xorg ProcRenderSetPictureClipRectangles
+ 6 0.0096 Xorg SecurityLookupIDByType
+ 4 0.0064 Xorg __i686.get_pc_thunk.bx
+ 3 0.0048 Xorg FindGlyph
+ 2 0.0032 Xorg ChangePicture
+ 2 0.0032 Xorg SetPictureTransform
+ 2 0.0032 Xorg Ones
+ 1 0.0016 Xorg CreatePicture
+ 1 0.0016 Xorg CompositeGlyphs
+ 1 0.0016 Xorg SetPictureFilter
+ 1 0.0016 Xorg FreeResource
+-------------------------------------------------------------------------------
+ 5 0.8757 Xorg XaceCatchExtProc
+ 566 99.1243 Xorg ProcRenderDispatch
+10 0.4933 Xorg ProcRenderFillRectangles
+ 545 95.4466 Xorg CompositeRects
+ 15 2.6270 Xorg SecurityLookupIDByType
+ 10 1.7513 Xorg ProcRenderFillRectangles [self]
+ 1 0.1751 Xorg miCompositeRects
+-------------------------------------------------------------------------------
+ 1 4.3478 Xorg ProcRenderDispatch
+ 22 95.6522 Xorg ProcRenderSetPictureFilter
+10 0.4933 Xorg SetPictureFilter
+ 12 52.1739 Xorg PictureFindFilter
+ 10 43.4783 Xorg SetPictureFilter [self]
+ 1 4.3478 Xorg PictureGetFilterId
+-------------------------------------------------------------------------------
+ 2 20.0000 Xorg ProcRenderDispatch
+ 8 80.0000 Xorg ProcRenderSetPictureTransform
+10 0.4933 Xorg SetPictureTransform
+ 10 100.000 Xorg SetPictureTransform [self]
+-------------------------------------------------------------------------------
+ 3 7.1429 Xorg CompositeRects
+ 39 92.8571 Xorg ValidatePicture
+10 0.4933 Xorg ValidateOnePicture
+ 31 73.8095 Xorg miValidatePicture
+ 10 23.8095 Xorg ValidateOnePicture [self]
+ 1 2.3810 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.6897 Xorg AllocateGC
+ 1 0.6897 Xorg miRectsToRegion
+ 1 0.6897 Xorg CreatePicture
+ 2 1.3793 Xorg SetClipRects
+ 2 1.3793 Xorg miRegionValidate
+ 5 3.4483 Xorg AddResource
+ 15 10.3448 Xorg DamageCreate
+ 23 15.8621 Xorg AllocatePicture
+ 28 19.3103 Xorg miRegionCreate
+ 67 46.2069 Xorg AllocatePixmap
+10 0.4933 Xorg Xalloc
+ 136 89.4737 libc-2.5.so malloc
+ 10 6.5789 Xorg Xalloc [self]
+ 4 2.6316 libc-2.5.so __i686.get_pc_thunk.bx
+ 2 1.3158 libc-2.5.so _int_malloc
+-------------------------------------------------------------------------------
+ 1 2.0000 Xorg miRegionValidate
+ 2 4.0000 Xorg miDestroyPicture
+ 2 4.0000 Xorg damageDestroyPixmap
+ 3 6.0000 Xorg DamageDestroy
+ 8 16.0000 Xorg FreeResource
+ 14 28.0000 Xorg FreePicture
+ 20 40.0000 Xorg miRegionDestroy
+10 0.4933 Xorg Xfree
+ 61 82.4324 libc-2.5.so free
+ 10 13.5135 Xorg Xfree [self]
+ 2 2.7027 libc-2.5.so _int_free
+ 1 1.3514 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg ProcRenderCreatePicture
+ 2 22.2222 Xorg ProcRenderDispatch
+ 6 66.6667 Xorg miRenderColorToPixel
+9 0.4440 Xorg Ones
+ 9 100.000 Xorg Ones [self]
+-------------------------------------------------------------------------------
+ 117 100.000 Xorg XaceCatchDispatchProc
+9 0.4440 Xorg ProcCreatePixmap
+ 81 69.2308 libexa.so exaCreatePixmap
+ 9 7.6923 Xorg ProcCreatePixmap [self]
+ 8 6.8376 Xorg AddResource
+ 5 4.2735 Xorg dixLookupDrawable
+ 5 4.2735 libexa.so __i686.get_pc_thunk.bx
+ 3 2.5641 Xorg DamageSetReportAfterOp
+ 2 1.7094 Xorg LegalNewID
+ 2 1.7094 Xorg DamageCreate
+ 1 0.8547 Xorg Hash
+ 1 0.8547 libexa.so .plt
+-------------------------------------------------------------------------------
+ 1 6.6667 Xorg SetClipRects
+ 2 13.3333 Xorg ChangeGC
+ 12 80.0000 Xorg dixChangeGC
+9 0.4440 Xorg damageChangeGC
+ 9 60.0000 Xorg damageChangeGC [self]
+ 6 40.0000 Xorg miChangeGC
+-------------------------------------------------------------------------------
+ 1 0.1908 Xorg ProcRenderFillRectangles
+ 523 99.8092 Xorg CompositeRects
+9 0.4440 Xorg miCompositeRects
+ 442 84.3511 Xorg miColorRects
+ 49 9.3511 Xorg CompositePicture
+ 9 1.7176 Xorg miCompositeRects [self]
+ 7 1.3359 Xorg damagePolyFillRect
+ 3 0.5725 Xorg ValidateGC
+ 3 0.5725 Xorg ChangeGC
+ 3 0.5725 Xorg CreatePicture
+ 3 0.5725 libexa.so exaCreatePixmap
+ 1 0.1908 Xorg GetScratchGC
+ 1 0.1908 Xorg miRegionCopy
+ 1 0.1908 Xorg miRegionCreate
+ 1 0.1908 Xorg miRenderColorToPixel
+ 1 0.1908 Xorg damageChangeClip
+-------------------------------------------------------------------------------
+ 31 100.000 Xorg ValidateOnePicture
+9 0.4440 Xorg miValidatePicture
+ 19 61.2903 Xorg miRegionCreate
+ 9 29.0323 Xorg miValidatePicture [self]
+ 1 3.2258 Xorg .plt
+ 1 3.2258 Xorg __i686.get_pc_thunk.bx
+ 1 3.2258 Xorg miTranslateRegion
+-------------------------------------------------------------------------------
+ 8 44.4444 Xorg ProcCreatePixmap
+ 10 55.5556 Xorg ProcRenderCreatePicture
+8 0.3947 Xorg AddResource
+ 8 44.4444 Xorg AddResource [self]
+ 5 27.7778 Xorg Xalloc
+ 3 16.6667 Xorg Hash
+ 2 11.1111 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 2.4390 Xorg damageGlyphs
+ 7 17.0732 Xorg miTrapezoids
+ 33 80.4878 Xorg FreeResource
+8 0.3947 Xorg FreePicture
+ 27 39.7059 libextmod.so XvDestroyPixmap
+ 14 20.5882 Xorg miDestroyPicture
+ 14 20.5882 Xorg Xfree
+ 8 11.7647 Xorg FreePicture [self]
+ 2 2.9412 Xorg miRegionDestroy
+ 1 1.4706 Xorg __i686.get_pc_thunk.bx
+ 1 1.4706 Xorg damageDestroyPixmap
+ 1 1.4706 Xorg miDestroyPictureClip
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg miCompositeRects
+ 1 4.7619 Xorg miCreateAlphaPicture
+ 2 9.5238 Xorg damageGlyphs
+ 17 80.9524 Xorg miColorRects
+8 0.3947 Xorg GetScratchGC
+ 12 57.1429 Xorg damageChangeClip
+ 8 38.0952 Xorg GetScratchGC [self]
+ 1 4.7619 Xorg miBSCheapChangeClip
+-------------------------------------------------------------------------------
+ 2 14.2857 Xorg ProcRenderSetPictureFilter
+ 12 85.7143 Xorg SetPictureFilter
+8 0.3947 Xorg PictureFindFilter
+ 8 57.1429 Xorg PictureFindFilter [self]
+ 6 42.8571 Xorg PictureGetFilterId
+-------------------------------------------------------------------------------
+ 1 4.5455 Xorg ProcRenderCreatePicture
+ 21 95.4545 Xorg dixLookupDrawable
+8 0.3947 Xorg SecurityLookupIDByClass
+ 12 54.5455 Xorg XaceHook
+ 8 36.3636 Xorg SecurityLookupIDByClass [self]
+ 2 9.0909 Xorg Hash
+-------------------------------------------------------------------------------
+ 51 100.000 Xorg CreatePicture
+8 0.3947 Xorg SetPictureToDefaults
+ 29 56.8627 Xorg PictureGetFilterId
+ 14 27.4510 libc-2.5.so strlen
+ 8 15.6863 Xorg SetPictureToDefaults [self]
+-------------------------------------------------------------------------------
+ 19 100.000 Xorg miTrapezoidBounds
+8 0.3947 Xorg miLineFixedX
+ 11 57.8947 Xorg __divdi3
+ 8 42.1053 Xorg miLineFixedX [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg damagePolyFillRect
+ 3 33.3333 Xorg miChangeClip
+ 5 55.5556 Xorg SetPictureClipRects
+8 0.3947 Xorg miRectsToRegion
+ 18 47.3684 Xorg miRegionCreate
+ 10 26.3158 Xorg miRegionValidate
+ 8 21.0526 Xorg miRectsToRegion [self]
+ 1 2.6316 Xorg __i686.get_pc_thunk.bx
+ 1 2.6316 Xorg Xalloc
+-------------------------------------------------------------------------------
+ 2 28.5714 Xorg ProcCreatePixmap
+ 5 71.4286 Xorg ProcRenderCreatePicture
+7 0.3453 Xorg LegalNewID
+ 7 100.000 Xorg LegalNewID [self]
+-------------------------------------------------------------------------------
+ 5 21.7391 Xorg XaceCatchExtProc
+ 18 78.2609 Xorg ProcRenderDispatch
+7 0.3453 Xorg ProcRenderChangePicture
+ 8 34.7826 Xorg ChangePicture
+ 7 30.4348 Xorg SecurityLookupIDByType
+ 7 30.4348 Xorg ProcRenderChangePicture [self]
+ 1 4.3478 Xorg miChangePicture
+-------------------------------------------------------------------------------
+ 1 1.2346 Xorg miColorRects
+ 80 98.7654 Xorg ValidateGC
+7 0.3453 Xorg damageValidateGC
+ 73 89.0244 Xorg miBSCheapValidateGC
+ 7 8.5366 Xorg damageValidateGC [self]
+ 2 2.4390 libexa.so exaValidateGC
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg miRectsToRegion
+7 0.3453 Xorg miRegionValidate
+ 7 63.6364 Xorg miRegionValidate [self]
+ 2 18.1818 Xorg Xalloc
+ 1 9.0909 Xorg QuickSortRects
+ 1 9.0909 Xorg Xfree
+-------------------------------------------------------------------------------
+ 5 11.3636 Xorg Dispatch
+ 39 88.6364 Xorg XaceCatchDispatchProc
+6 0.2960 Xorg ProcFreePixmap
+ 37 84.0909 Xorg FreeResource
+ 6 13.6364 Xorg ProcFreePixmap [self]
+ 1 2.2727 Xorg SecurityLookupIDByType
+-------------------------------------------------------------------------------
+ 1 0.0480 Xorg ProcRenderComposite
+ 2084 99.9520 Xorg CompositePicture
+6 0.2960 Xorg damageComposite
+ 2063 98.9448 libexa.so exaComposite
+ 11 0.5276 Xorg damageDamageBox
+ 6 0.2878 Xorg damageComposite [self]
+ 3 0.1439 Xorg damageReportPostOp
+ 2 0.0959 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 3.0303 Xorg ProcPolyFillRectangle
+ 1 3.0303 Xorg ProcCopyArea
+ 1 3.0303 Xorg XaceCatchDispatchProc
+ 2 6.0606 Xorg ProcPolySegment
+ 5 15.1515 Xorg ProcCreatePixmap
+ 23 69.6970 Xorg ProcRenderCreatePicture
+6 0.2960 Xorg dixLookupDrawable
+ 21 63.6364 Xorg SecurityLookupIDByClass
+ 6 18.1818 Xorg dixLookupDrawable [self]
+ 5 15.1515 Xorg XaceHook
+ 1 3.0303 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg damageReportPostOp
+ 1 16.6667 Xorg damagePolyFillRect
+ 1 16.6667 Xorg damageCopyArea
+ 3 50.0000 Xorg DamageRegister
+6 0.2960 Xorg getDrawableDamageRef
+ 6 100.000 Xorg getDrawableDamageRef [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg damageChangeGC
+6 0.2960 Xorg miChangeGC
+ 6 100.000 Xorg miChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg miComputeCompositeClip
+ 1 7.6923 Xorg damageDamageBox
+ 1 7.6923 Xorg damagePolyFillRect
+ 10 76.9231 Xorg damageDamageRegion
+6 0.2960 Xorg miIntersect
+ 11 57.8947 libpixman.so.0.0.0 pixman_region_intersect
+ 6 31.5789 Xorg miIntersect [self]
+ 2 10.5263 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3 7.5000 Xorg miCompositeRects
+ 37 92.5000 Xorg miColorRects
+5 0.2467 Xorg ChangeGC
+ 33 82.5000 Xorg dixChangeGC
+ 5 12.5000 Xorg ChangeGC [self]
+ 2 5.0000 Xorg damageChangeGC
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg ProcCreatePixmap
+5 0.2467 Xorg DamageSetReportAfterOp
+ 5 100.000 Xorg DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg XaceCatchExtProc
+5 0.2467 Xorg GetExtensionEntry
+ 5 100.000 Xorg GetExtensionEntry [self]
+-------------------------------------------------------------------------------
+ 3 1.1364 Xorg main
+ 261 98.8636 Xorg Dispatch
+5 0.2467 Xorg XaceCatchDispatchProc
+ 117 44.3182 Xorg ProcCreatePixmap
+ 45 17.0455 Xorg ProcPolySegment
+ 39 14.7727 Xorg ProcFreePixmap
+ 15 5.6818 Xorg ProcSetClipRectangles
+ 11 4.1667 Xorg ProcPolyFillRectangle
+ 11 4.1667 Xorg ProcChangeGC
+ 8 3.0303 Xorg ProcCopyArea
+ 5 1.8939 Xorg XaceCatchDispatchProc [self]
+ 4 1.5152 Xorg ProcCreateGC
+ 3 1.1364 Xorg XaceHook
+ 2 0.7576 Xorg ProcFreeGC
+ 1 0.3788 Xorg __i686.get_pc_thunk.bx
+ 1 0.3788 Xorg dixLookupGC
+ 1 0.3788 Xorg dixLookupDrawable
+ 1 0.3788 libexa.so exaCreatePixmap
+-------------------------------------------------------------------------------
+ 1 1.3514 Xorg ValidateGC
+ 73 98.6486 Xorg damageValidateGC
+5 0.2467 Xorg miBSCheapValidateGC
+ 67 90.5405 libexa.so exaValidateGC
+ 5 6.7568 Xorg miBSCheapValidateGC [self]
+ 2 2.7027 libfb.so fbValidateGC
+-------------------------------------------------------------------------------
+ 1 2.2222 Xorg miCompositeRects
+ 7 15.5556 Xorg miColorRects
+ 18 40.0000 Xorg miRectsToRegion
+ 19 42.2222 Xorg miValidatePicture
+5 0.2467 Xorg miRegionCreate
+ 28 60.8696 Xorg Xalloc
+ 9 19.5652 Xorg miRegionInit
+ 5 10.8696 Xorg miRegionCreate [self]
+ 2 4.3478 Xorg __i686.get_pc_thunk.bx
+ 1 2.1739 Xorg .plt
+ 1 2.1739 libpixman.so.0.0.0 pixman_region_init_with_extents
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg damagePolyFillRect
+ 2 9.5238 Xorg FreePicture
+ 2 9.5238 Xorg miDestroyPictureClip
+ 7 33.3333 Xorg miDestroyClip
+ 9 42.8571 Xorg miDestroyPicture
+5 0.2467 Xorg miRegionDestroy
+ 20 45.4545 Xorg Xfree
+ 17 38.6364 libpixman.so.0.0.0 pixman_region_fini
+ 5 11.3636 Xorg miRegionDestroy [self]
+ 1 2.2727 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 2.2727 libc-2.5.so free
+-------------------------------------------------------------------------------
+ 9 100.000 Xorg miRegionCreate
+5 0.2467 Xorg miRegionInit
+ 5 55.5556 Xorg miRegionInit [self]
+ 3 33.3333 libpixman.so.0.0.0 pixman_region_init
+ 1 11.1111 libpixman.so.0.0.0 pixman_region_init_with_extents
+-------------------------------------------------------------------------------
+ 1 9.0909 Xorg miCompositeRects
+ 10 90.9091 Xorg miColorRects
+5 0.2467 Xorg miRenderColorToPixel
+ 6 54.5455 Xorg Ones
+ 5 45.4545 Xorg miRenderColorToPixel [self]
+-------------------------------------------------------------------------------
+ 27 100.000 Xorg CreatePicture
+4 0.1973 Xorg AllocatePicture
+ 23 85.1852 Xorg Xalloc
+ 4 14.8148 Xorg AllocatePicture [self]
+-------------------------------------------------------------------------------
+ 31 1.4804 Xorg miTrapezoids
+ 49 2.3400 Xorg miCompositeRects
+ 2014 96.1796 Xorg ProcRenderComposite
+4 0.1973 Xorg CompositePicture
+ 2084 99.5224 Xorg damageComposite
+ 6 0.2865 Xorg ValidatePicture
+ 4 0.1910 Xorg CompositePicture [self]
+-------------------------------------------------------------------------------
+ 1 7.1429 Xorg damageGlyphs
+ 13 92.8571 Xorg damageReportPostOp
+4 0.1973 Xorg DamageReportDamage
+ 9 64.2857 Xorg miUnion
+ 4 28.5714 Xorg DamageReportDamage [self]
+ 1 7.1429 libpixman.so.0.0.0 pixman_region_union
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg FreeResource
+4 0.1973 Xorg FlushClientCaches
+ 4 100.000 Xorg FlushClientCaches [self]
+-------------------------------------------------------------------------------
+ 1 2.1277 Xorg XaceCatchExtProc
+ 46 97.8723 Xorg ProcRenderDispatch
+4 0.1973 Xorg ProcRenderSetPictureFilter
+ 22 46.8085 Xorg SetPictureFilter
+ 17 36.1702 Xorg SecurityLookupIDByType
+ 4 8.5106 Xorg ProcRenderSetPictureFilter [self]
+ 2 4.2553 Xorg PictureFindFilter
+ 1 2.1277 Xorg __i686.get_pc_thunk.bx
+ 1 2.1277 Xorg miChangePictureFilter
+-------------------------------------------------------------------------------
+ 3 20.0000 Xorg damageChangeClip
+ 12 80.0000 Xorg miBSCheapChangeClip
+4 0.1973 Xorg miChangeClip
+ 8 53.3333 Xorg miDestroyClip
+ 4 26.6667 Xorg miChangeClip [self]
+ 3 20.0000 Xorg miRectsToRegion
+-------------------------------------------------------------------------------
+ 3 17.6471 Xorg FreeResource
+ 14 82.3529 Xorg FreePicture
+4 0.1973 Xorg miDestroyPicture
+ 9 52.9412 Xorg miRegionDestroy
+ 4 23.5294 Xorg miDestroyPicture [self]
+ 2 11.7647 Xorg Xfree
+ 2 11.7647 libpixman.so.0.0.0 pixman_region_fini
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg damageDestroyPixmap
+3 0.1480 Xorg DamageDestroy
+ 3 50.0000 Xorg Xfree
+ 3 50.0000 Xorg DamageDestroy [self]
+-------------------------------------------------------------------------------
+3 0.1480 Xorg DamageEmpty
+ 3 100.000 Xorg DamageEmpty [self]
+-------------------------------------------------------------------------------
+ 1 1.6393 Xorg damageGlyphs
+ 1 1.6393 Xorg miCreateAlphaPicture
+ 2 3.2787 Xorg ProcCopyArea
+ 3 4.9180 Xorg ProcPolyFillRectangle
+ 3 4.9180 Xorg miCompositeRects
+ 4 6.5574 Xorg ProcPolySegment
+ 47 77.0492 Xorg miColorRects
+3 0.1480 Xorg ValidateGC
+ 80 94.1176 Xorg damageValidateGC
+ 3 3.5294 Xorg ValidateGC [self]
+ 1 1.1765 Xorg __i686.get_pc_thunk.bx
+ 1 1.1765 Xorg miBSCheapValidateGC
+-------------------------------------------------------------------------------
+ 2 5.4054 Xorg ProcRenderCompositeGlyphs
+ 6 16.2162 Xorg CompositePicture
+ 14 37.8378 Xorg CompositeRects
+ 15 40.5405 Xorg CompositeGlyphs
+3 0.1480 Xorg ValidatePicture
+ 39 88.6364 Xorg ValidateOnePicture
+ 3 6.8182 Xorg ValidatePicture [self]
+ 2 4.5455 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 1.8182 Xorg miColorRects
+ 2 3.6364 Xorg damagePolySegment
+ 10 18.1818 Xorg damageGlyphs
+ 11 20.0000 Xorg damageComposite
+ 31 56.3636 Xorg damagePolyFillRect
+3 0.1480 Xorg damageDamageBox
+ 48 87.2727 Xorg damageDamageRegion
+ 3 5.4545 Xorg miUnion
+ 3 5.4545 Xorg damageDamageBox [self]
+ 1 1.8182 Xorg miIntersect
+-------------------------------------------------------------------------------
+ 1 5.2632 Xorg damagePolySegment
+ 3 15.7895 Xorg damageComposite
+ 4 21.0526 Xorg damageGlyphs
+ 11 57.8947 Xorg damagePolyFillRect
+3 0.1480 Xorg damageReportPostOp
+ 13 68.4211 Xorg DamageReportDamage
+ 3 15.7895 Xorg damageReportPostOp [self]
+ 2 10.5263 Xorg miUnion
+ 1 5.2632 Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 1 6.6667 Xorg GetScratchGC
+ 14 93.3333 Xorg damageChangeClip
+3 0.1480 Xorg miBSCheapChangeClip
+ 12 80.0000 Xorg miChangeClip
+ 3 20.0000 Xorg miBSCheapChangeClip [self]
+-------------------------------------------------------------------------------
+ 24 100.000 Xorg miTrapezoids
+3 0.1480 Xorg miTrapezoidBounds
+ 19 79.1667 Xorg miLineFixedX
+ 3 12.5000 Xorg miTrapezoidBounds [self]
+ 1 4.1667 Xorg __i686.get_pc_thunk.bx
+ 1 4.1667 Xorg __divdi3
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg CreateGC
+2 0.0987 Xorg AllocateGC
+ 2 66.6667 Xorg AllocateGC [self]
+ 1 33.3333 Xorg Xalloc
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damageGlyphs
+2 0.0987 Xorg FreeScratchPixmapHeader
+ 2 100.000 Xorg FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 2 2.2472 Xorg XaceCatchExtProc
+ 87 97.7528 Xorg ProcRenderDispatch
+2 0.0987 Xorg ProcRenderFreePicture
+ 62 69.6629 Xorg FreeResource
+ 22 24.7191 Xorg SecurityLookupIDByType
+ 3 3.3708 Xorg Hash
+ 2 2.2472 Xorg ProcRenderFreePicture [self]
+-------------------------------------------------------------------------------
+ 1 4.5455 Xorg XaceCatchExtProc
+ 21 95.4545 Xorg ProcRenderDispatch
+2 0.0987 Xorg ProcRenderSetPictureTransform
+ 10 45.4545 Xorg SecurityLookupIDByType
+ 8 36.3636 Xorg SetPictureTransform
+ 2 9.0909 Xorg ProcRenderSetPictureTransform [self]
+ 1 4.5455 Xorg Hash
+ 1 4.5455 Xorg miChangePictureTransform
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg ProcSetClipRectangles
+2 0.0987 Xorg SetClipRects
+ 3 30.0000 Xorg damageChangeClip
+ 2 20.0000 Xorg Xalloc
+ 2 20.0000 Xorg SetClipRects [self]
+ 1 10.0000 Xorg .plt
+ 1 10.0000 Xorg VerifyRectOrder
+ 1 10.0000 Xorg damageChangeGC
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Dispatch
+2 0.0987 Xorg WaitForSomething
+ 2 66.6667 Xorg WaitForSomething [self]
+ 1 33.3333 libc-2.5.so gettimeofday
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg ReadRequestFromClient
+ 1 50.0000 Xorg _XSERVTransRead
+2 0.0987 Xorg _XSERVTransSocketRead
+ 2 100.000 Xorg _XSERVTransSocketRead [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg XaceCatchExtProc
+2 0.0987 Xorg __i686.get_pc_thunk.cx
+ 2 100.000 Xorg __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+2 0.0987 Xorg damageRemoveDamage
+ 2 100.000 Xorg damageRemoveDamage [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg ProcCopyArea
+ 1 7.6923 Xorg XaceCatchDispatchProc
+ 1 7.6923 Xorg ProcFreeGC
+ 1 7.6923 Xorg ProcPolySegment
+ 4 30.7692 Xorg ProcSetClipRectangles
+ 5 38.4615 Xorg ProcChangeGC
+2 0.0987 Xorg dixLookupGC
+ 11 84.6154 Xorg SecurityLookupIDByType
+ 2 15.3846 Xorg dixLookupGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcRenderCreatePicture
+2 0.0987 Xorg miCreatePicture
+ 2 100.000 Xorg miCreatePicture [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg miValidatePicture
+ 1 20.0000 Xorg damagePolyFillRect
+ 3 60.0000 Xorg miComputeCompositeClip
+2 0.0987 Xorg miTranslateRegion
+ 7 77.7778 libpixman.so.0.0.0 pixman_region_translate
+ 2 22.2222 Xorg miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 1 0.0020 Xorg ProcRenderDispatch
+ 50816 99.9980 Xorg ProcRenderCompositeGlyphs
+1 0.0493 Xorg CompositeGlyphs
+ 50802 99.9646 Xorg damageGlyphs
+ 15 0.0295 Xorg ValidatePicture
+ 2 0.0039 Xorg __i686.get_pc_thunk.bx
+ 1 0.0020 Xorg CompositeGlyphs [self]
+-------------------------------------------------------------------------------
+ 545 100.000 Xorg ProcRenderFillRectangles
+1 0.0493 Xorg CompositeRects
+ 523 95.9633 Xorg miCompositeRects
+ 14 2.5688 Xorg ValidatePicture
+ 3 0.5505 Xorg ValidateOnePicture
+ 2 0.3670 Xorg __i686.get_pc_thunk.bx
+ 1 0.1835 Xorg FreeScratchGC
+ 1 0.1835 Xorg miColorRects
+ 1 0.1835 Xorg CompositeRects [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg ProcCreateGC
+1 0.0493 Xorg CreateGC
+ 3 75.0000 Xorg AllocateGC
+ 1 25.0000 Xorg CreateGC [self]
+-------------------------------------------------------------------------------
+1 0.0493 Xorg DamageRegister
+ 3 75.0000 Xorg getDrawableDamageRef
+ 1 25.0000 Xorg DamageRegister [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg FreeResource
+1 0.0493 Xorg FreeGC
+ 1 100.000 Xorg FreeGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageGlyphs
+1 0.0493 Xorg GetScratchPixmapHeader
+ 4 80.0000 Xorg miModifyPixmapHeader
+ 1 20.0000 Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+1 0.0493 Xorg GetTimeInMillis
+ 1 100.000 Xorg GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+ 1 8.3333 Xorg Dispatch
+ 11 91.6667 Xorg XaceCatchDispatchProc
+1 0.0493 Xorg ProcChangeGC
+ 6 50.0000 Xorg dixChangeGC
+ 5 41.6667 Xorg dixLookupGC
+ 1 8.3333 Xorg ProcChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg Dispatch
+ 8 88.8889 Xorg XaceCatchDispatchProc
+1 0.0493 Xorg ProcCopyArea
+ 4 44.4444 Xorg damageCopyArea
+ 2 22.2222 Xorg ValidateGC
+ 1 11.1111 Xorg dixLookupGC
+ 1 11.1111 Xorg dixLookupDrawable
+ 1 11.1111 Xorg ProcCopyArea [self]
+-------------------------------------------------------------------------------
+ 11 100.000 Xorg XaceCatchDispatchProc
+1 0.0493 Xorg ProcPolyFillRectangle
+ 6 54.5455 Xorg damagePolyFillRect
+ 3 27.2727 Xorg ValidateGC
+ 1 9.0909 Xorg dixLookupDrawable
+ 1 9.0909 Xorg ProcPolyFillRectangle [self]
+-------------------------------------------------------------------------------
+ 2022 100.000 Xorg ProcRenderDispatch
+1 0.0493 Xorg ProcRenderComposite
+ 2014 99.6044 Xorg CompositePicture
+ 5 0.2473 Xorg SecurityLookupIDByType
+ 1 0.0495 Xorg __i686.get_pc_thunk.bx
+ 1 0.0495 Xorg damageComposite
+ 1 0.0495 Xorg ProcRenderComposite [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg XaceCatchExtProc
+ 8 88.8889 Xorg ProcRenderDispatch
+1 0.0493 Xorg ProcRenderSetPictureClipRectangles
+ 7 77.7778 Xorg SetPictureClipRects
+ 1 11.1111 Xorg SecurityLookupIDByType
+ 1 11.1111 Xorg ProcRenderSetPictureClipRectangles [self]
+-------------------------------------------------------------------------------
+ 15 100.000 Xorg XaceCatchDispatchProc
+1 0.0493 Xorg ProcSetClipRectangles
+ 10 66.6667 Xorg SetClipRects
+ 4 26.6667 Xorg dixLookupGC
+ 1 6.6667 Xorg ProcSetClipRectangles [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg miRegionValidate
+1 0.0493 Xorg QuickSortRects
+ 1 100.000 Xorg QuickSortRects [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg SetClipRects
+1 0.0493 Xorg VerifyRectOrder
+ 1 100.000 Xorg VerifyRectOrder [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg ReadRequestFromClient
+1 0.0493 Xorg _XSERVTransRead
+ 3 60.0000 libc-2.5.so __read_nocancel
+ 1 20.0000 Xorg _XSERVTransSocketRead
+ 1 20.0000 Xorg _XSERVTransRead [self]
+-------------------------------------------------------------------------------
+ 1 5.5556 Xorg miCompositeRects
+ 2 11.1111 Xorg dixChangeGC
+ 3 16.6667 Xorg SetClipRects
+ 12 66.6667 Xorg GetScratchGC
+1 0.0493 Xorg damageChangeClip
+ 14 77.7778 Xorg miBSCheapChangeClip
+ 3 16.6667 Xorg miChangeClip
+ 1 5.5556 Xorg damageChangeClip [self]
+-------------------------------------------------------------------------------
+1 0.0493 Xorg damageInsertDamage
+ 1 100.000 Xorg damageInsertDamage [self]
+-------------------------------------------------------------------------------
+ 38 100.000 Xorg ProcPolySegment
+1 0.0493 Xorg damagePolySegment
+ 34 89.4737 libexa.so exaPolySegment
+ 2 5.2632 Xorg damageDamageBox
+ 1 2.6316 Xorg damageReportPostOp
+ 1 2.6316 Xorg damagePolySegment [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg dixChangeGC
+1 0.0493 Xorg miBSCheapChangeGC
+ 1 100.000 Xorg miBSCheapChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcRenderChangePicture
+1 0.0493 Xorg miChangePicture
+ 1 100.000 Xorg miChangePicture [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg SetPictureClipRects
+1 0.0493 Xorg miChangePictureClip
+ 1 50.0000 Xorg miDestroyPictureClip
+ 1 50.0000 Xorg miChangePictureClip [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcRenderSetPictureFilter
+1 0.0493 Xorg miChangePictureFilter
+ 1 100.000 Xorg miChangePictureFilter [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcRenderSetPictureTransform
+1 0.0493 Xorg miChangePictureTransform
+ 1 100.000 Xorg miChangePictureTransform [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg miChangeClip
+1 0.0493 Xorg miDestroyClip
+ 7 87.5000 Xorg miRegionDestroy
+ 1 12.5000 Xorg miDestroyClip [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg miCompositeRects
+ 4 80.0000 Xorg miColorRects
+1 0.0493 Xorg miRegionCopy
+ 4 80.0000 libpixman.so.0.0.0 pixman_region_copy
+ 1 20.0000 Xorg miRegionCopy [self]
+-------------------------------------------------------------------------------
+ 8299 100.000 Xorg CompositeTrapezoids
+1 0.0493 Xorg miTrapezoids
+ 8213 98.9637 libexa.so exaRasterizeTrapezoid
+ 31 0.3735 Xorg CompositePicture
+ 24 0.2892 Xorg miTrapezoidBounds
+ 20 0.2410 Xorg miCreateAlphaPicture
+ 7 0.0843 Xorg FreePicture
+ 2 0.0241 libexa.so exaPixmapDirty
+ 1 0.0120 libexa.so .plt
+ 1 0.0120 Xorg miTrapezoids [self]
+-------------------------------------------------------------------------------
+1 0.0493 anon (tgid:28734 range:0xb7f37000-0xb7f38000) (no symbols)
+ 1 100.000 anon (tgid:28734 range:0xb7f37000-0xb7f38000) (no symbols) [self]
+-------------------------------------------------------------------------------
+ 8297 100.000 Xorg ProcRenderTrapezoids
+0 0 Xorg CompositeTrapezoids
+ 8299 100.000 Xorg miTrapezoids
+ 0 0 Xorg CompositeTrapezoids [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcCreateGC
+ 4 100.000 Xorg CreateGC
+ 0 0 Xorg ProcCreateGC [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcFreeGC
+ 1 50.0000 Xorg FreeResource
+ 1 50.0000 Xorg dixLookupGC
+ 0 0 Xorg ProcFreeGC [self]
+-------------------------------------------------------------------------------
+ 45 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcPolySegment
+ 38 84.4444 Xorg damagePolySegment
+ 4 8.8889 Xorg ValidateGC
+ 2 4.4444 Xorg dixLookupDrawable
+ 1 2.2222 Xorg dixLookupGC
+ 0 0 Xorg ProcPolySegment [self]
+-------------------------------------------------------------------------------
+ 8299 100.000 Xorg ProcRenderDispatch
+0 0 Xorg ProcRenderTrapezoids
+ 8297 99.9759 Xorg CompositeTrapezoids
+ 2 0.0241 Xorg SecurityLookupIDByType
+ 0 0 Xorg ProcRenderTrapezoids [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg ProcRenderSetPictureClipRectangles
+0 0 Xorg SetPictureClipRects
+ 5 71.4286 Xorg miRectsToRegion
+ 2 28.5714 Xorg miChangePictureClip
+ 0 0 Xorg SetPictureClipRects [self]
+-------------------------------------------------------------------------------
+0 0 Xorg _start
+ 62686 100.000 libc-2.5.so __libc_start_main
+ 0 0 Xorg _start [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg ProcCopyArea
+0 0 Xorg damageCopyArea
+ 3 75.0000 libexa.so exaCopyArea
+ 1 25.0000 Xorg getDrawableDamageRef
+ 0 0 Xorg damageCopyArea [self]
+-------------------------------------------------------------------------------
+ 24 100.000 Xorg FreeResource
+0 0 Xorg dixDestroyPixmap
+ 24 100.000 libextmod.so XvDestroyPixmap
+ 0 0 Xorg dixDestroyPixmap [self]
+-------------------------------------------------------------------------------
+0 0 Xorg main
+ 62687 99.9777 Xorg Dispatch
+ 8 0.0128 Xorg XaceHook
+ 3 0.0048 Xorg XaceCatchDispatchProc
+ 2 0.0032 Xorg XaceCatchExtProc
+ 1 0.0016 Xorg ReadRequestFromClient
+ 0 0 Xorg main [self]
+-------------------------------------------------------------------------------
+ 20 100.000 Xorg miTrapezoids
+0 0 Xorg miCreateAlphaPicture
+ 8 40.0000 Xorg damagePolyFillRect
+ 5 25.0000 libexa.so exaCreatePixmap
+ 2 10.0000 Xorg CreatePicture
+ 2 10.0000 libextmod.so XvDestroyPixmap
+ 1 5.0000 Xorg ValidateGC
+ 1 5.0000 Xorg GetScratchGC
+ 1 5.0000 Xorg damageDestroyPixmap
+ 0 0 Xorg miCreateAlphaPicture [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg miChangePictureClip
+ 1 50.0000 Xorg FreePicture
+0 0 Xorg miDestroyPictureClip
+ 2 100.000 Xorg miRegionDestroy
+ 0 0 Xorg miDestroyPictureClip [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg Xfree
+ 4 80.0000 Xorg Xalloc
+0 0 libc-2.5.so __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 62686 100.000 Xorg _start
+0 0 libc-2.5.so __libc_start_main
+ 0 0 libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg _XSERVTransRead
+0 0 libc-2.5.so __read_nocancel
+ 0 0 libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xfree
+0 0 libc-2.5.so _int_free
+ 0 0 libc-2.5.so _int_free [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xalloc
+0 0 libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 1.6129 Xorg miRegionDestroy
+ 61 98.3871 Xorg Xfree
+0 0 libc-2.5.so free
+ 0 0 libc-2.5.so free [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg WaitForSomething
+0 0 libc-2.5.so gettimeofday
+ 0 0 libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 136 100.000 Xorg Xalloc
+0 0 libc-2.5.so malloc
+ 0 0 libc-2.5.so malloc [self]
+-------------------------------------------------------------------------------
+ 14 100.000 Xorg SetPictureToDefaults
+0 0 libc-2.5.so strlen
+ 0 0 libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 Xorg ProcCreatePixmap
+ 1 10.0000 Xorg miTrapezoids
+ 1 10.0000 Xorg damagePolyFillRect
+ 7 70.0000 Xorg damageGlyphs
+0 0 libexa.so .plt
+ 0 0 libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg damagePolyFillRect
+ 2 25.0000 Xorg damageComposite
+ 5 62.5000 Xorg ProcCreatePixmap
+0 0 libexa.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 11 0.5304 Xorg damageGlyphs
+ 2063 99.4696 Xorg damageComposite
+0 0 libexa.so exaComposite
+ 0 0 libexa.so exaComposite [self]
+-------------------------------------------------------------------------------
+ 3 42.8571 Xorg damageCopyArea
+ 4 57.1429 Xorg damageGlyphs
+0 0 libexa.so exaCopyArea
+ 0 0 libexa.so exaCopyArea [self]
+-------------------------------------------------------------------------------
+ 1 1.0753 Xorg XaceCatchDispatchProc
+ 3 3.2258 Xorg miCompositeRects
+ 3 3.2258 Xorg damageGlyphs
+ 5 5.3763 Xorg miCreateAlphaPicture
+ 81 87.0968 Xorg ProcCreatePixmap
+0 0 libexa.so exaCreatePixmap
+ 0 0 libexa.so exaCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 45 100.000 Xorg damageDestroyPixmap
+0 0 libexa.so exaDestroyPixmap
+ 0 0 libexa.so exaDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damagePolyFillRect
+0 0 libexa.so exaFillRegionSolid
+ 0 0 libexa.so exaFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 50684 100.000 Xorg damageGlyphs
+0 0 libexa.so exaGlyphs
+ 0 0 libexa.so exaGlyphs [self]
+-------------------------------------------------------------------------------
+ 2 50.0000 Xorg miTrapezoids
+ 2 50.0000 Xorg damageGlyphs
+0 0 libexa.so exaPixmapDirty
+ 0 0 libexa.so exaPixmapDirty [self]
+-------------------------------------------------------------------------------
+ 1 0.3704 Xorg miColorRects
+ 269 99.6296 Xorg damagePolyFillRect
+0 0 libexa.so exaPolyFillRect
+ 0 0 libexa.so exaPolyFillRect [self]
+-------------------------------------------------------------------------------
+ 34 100.000 Xorg damagePolySegment
+0 0 libexa.so exaPolySegment
+ 0 0 libexa.so exaPolySegment [self]
+-------------------------------------------------------------------------------
+ 8213 100.000 Xorg miTrapezoids
+0 0 libexa.so exaRasterizeTrapezoid
+ 0 0 libexa.so exaRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 2 2.8986 Xorg damageValidateGC
+ 67 97.1014 Xorg miBSCheapValidateGC
+0 0 libexa.so exaValidateGC
+ 0 0 libexa.so exaValidateGC [self]
+-------------------------------------------------------------------------------
+ 2 3.7736 Xorg miCreateAlphaPicture
+ 24 45.2830 Xorg dixDestroyPixmap
+ 27 50.9434 Xorg FreePicture
+0 0 libextmod.so XvDestroyPixmap
+ 0 0 libextmod.so XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageDestroyPixmap
+0 0 libfb.so fbDestroyPixmap
+ 0 0 libfb.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg miBSCheapValidateGC
+0 0 libfb.so fbValidateGC
+ 0 0 libfb.so fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg miUnion
+0 0 libpixman.so.0.0.0 .plt
+ 0 0 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg miRegionDestroy
+ 1 12.5000 Xorg miComputeCompositeRegion
+ 2 25.0000 Xorg miIntersect
+ 4 50.0000 Xorg miUnion
+0 0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 3 42.8571 Xorg miUnion
+ 4 57.1429 Xorg miRegionCopy
+0 0 libpixman.so.0.0.0 pixman_region_copy
+ 0 0 libpixman.so.0.0.0 pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 2 10.5263 Xorg miDestroyPicture
+ 17 89.4737 Xorg miRegionDestroy
+0 0 libpixman.so.0.0.0 pixman_region_fini
+ 0 0 libpixman.so.0.0.0 pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 3 42.8571 Xorg miRegionInit
+ 4 57.1429 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_init
+ 0 0 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg miRegionInit
+ 1 50.0000 Xorg miRegionCreate
+0 0 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 0 0 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+ 2 15.3846 Xorg damageDamageRegion
+ 11 84.6154 Xorg miIntersect
+0 0 libpixman.so.0.0.0 pixman_region_intersect
+ 0 0 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 24 100.000 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 51 100.000 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg miTranslateRegion
+0 0 libpixman.so.0.0.0 pixman_region_translate
+ 0 0 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 1 0.2358 Xorg DamageReportDamage
+ 1 0.2358 Xorg damageDamageRegion
+ 422 99.5283 Xorg miUnion
+0 0 libpixman.so.0.0.0 pixman_region_union
+ 0 0 libpixman.so.0.0.0 pixman_region_union [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+296 14.6029 Xorg miComputeCompositeRegion
+140 6.9068 Xorg miSpriteSourceValidate
+106 5.2294 Xorg miCompositeSourceValidate
+97 4.7854 Xorg __i686.get_pc_thunk.bx
+88 4.3414 Xorg FindGlyphRef
+74 3.6507 Xorg XaceHook
+66 3.2560 Xorg miModifyPixmapHeader
+61 3.0094 Xorg damageGlyphs
+60 2.9600 Xorg ReadRequestFromClient
+50 2.4667 Xorg .plt
+40 1.9734 Xorg SecurityLookupIDByType
+37 1.8254 Xorg Dispatch
+36 1.7760 Xorg SecurityCheckResourceIDAccess
+30 1.4800 Xorg ProcRenderCompositeGlyphs
+30 1.4800 Xorg _CallCallbacks
+27 1.3320 Xorg CallCallbacks
+27 1.3320 Xorg FreeResource
+27 1.3320 Xorg Hash
+27 1.3320 Xorg miUnion
+24 1.1840 Xorg dixChangeGC
+22 1.0853 Xorg CompareISOLatin1Lowered
+22 1.0853 Xorg XaceCatchExtProc
+21 1.0360 Xorg damageDamageRegion
+20 0.9867 Xorg miComputeCompositeClip
+17 0.8387 Xorg damagePolyFillRect
+16 0.7893 Xorg ChangePicture
+16 0.7893 Xorg PictureGetFilterId
+16 0.7893 Xorg miGlyphExtents
+15 0.7400 Xorg FindGlyph
+15 0.7400 Xorg damageDestroyPixmap
+15 0.7400 Xorg miColorRects
+14 0.6907 Xorg ProcRenderCreatePicture
+14 0.6907 Xorg SecurityCheckExtAccess
+13 0.6413 Xorg AllocatePixmap
+12 0.5920 Xorg CreatePicture
+12 0.5920 Xorg DamageCreate
+12 0.5920 Xorg __divdi3
+10 0.4933 Xorg DamageRegion
+10 0.4933 Xorg FreeScratchGC
+10 0.4933 Xorg ProcRenderDispatch
+10 0.4933 Xorg ProcRenderFillRectangles
+10 0.4933 Xorg SetPictureFilter
+10 0.4933 Xorg SetPictureTransform
+10 0.4933 Xorg ValidateOnePicture
+10 0.4933 Xorg Xalloc
+10 0.4933 Xorg Xfree
+9 0.4440 Xorg Ones
+9 0.4440 Xorg ProcCreatePixmap
+9 0.4440 Xorg damageChangeGC
+9 0.4440 Xorg miCompositeRects
+9 0.4440 Xorg miValidatePicture
+8 0.3947 Xorg AddResource
+8 0.3947 Xorg FreePicture
+8 0.3947 Xorg GetScratchGC
+8 0.3947 Xorg PictureFindFilter
+8 0.3947 Xorg SecurityLookupIDByClass
+8 0.3947 Xorg SetPictureToDefaults
+8 0.3947 Xorg miLineFixedX
+8 0.3947 Xorg miRectsToRegion
+7 0.3453 Xorg LegalNewID
+7 0.3453 Xorg ProcRenderChangePicture
+7 0.3453 Xorg damageValidateGC
+7 0.3453 Xorg miRegionValidate
+6 0.2960 Xorg ProcFreePixmap
+6 0.2960 Xorg damageComposite
+6 0.2960 Xorg dixLookupDrawable
+6 0.2960 Xorg getDrawableDamageRef
+6 0.2960 Xorg miChangeGC
+6 0.2960 Xorg miIntersect
+5 0.2467 Xorg ChangeGC
+5 0.2467 Xorg DamageSetReportAfterOp
+5 0.2467 Xorg GetExtensionEntry
+5 0.2467 Xorg XaceCatchDispatchProc
+5 0.2467 Xorg miBSCheapValidateGC
+5 0.2467 Xorg miRegionCreate
+5 0.2467 Xorg miRegionDestroy
+5 0.2467 Xorg miRegionInit
+5 0.2467 Xorg miRenderColorToPixel
+4 0.1973 Xorg AllocatePicture
+4 0.1973 Xorg CompositePicture
+4 0.1973 Xorg DamageReportDamage
+4 0.1973 Xorg FlushClientCaches
+4 0.1973 Xorg ProcRenderSetPictureFilter
+4 0.1973 Xorg miChangeClip
+4 0.1973 Xorg miDestroyPicture
+3 0.1480 Xorg DamageDestroy
+3 0.1480 Xorg DamageEmpty
+3 0.1480 Xorg ValidateGC
+3 0.1480 Xorg ValidatePicture
+3 0.1480 Xorg damageDamageBox
+3 0.1480 Xorg damageReportPostOp
+3 0.1480 Xorg miBSCheapChangeClip
+3 0.1480 Xorg miTrapezoidBounds
+2 0.0987 Xorg AllocateGC
+2 0.0987 Xorg FreeScratchPixmapHeader
+2 0.0987 Xorg ProcRenderFreePicture
+2 0.0987 Xorg ProcRenderSetPictureTransform
+2 0.0987 Xorg SetClipRects
+2 0.0987 Xorg WaitForSomething
+2 0.0987 Xorg _XSERVTransSocketRead
+2 0.0987 Xorg __i686.get_pc_thunk.cx
+2 0.0987 Xorg damageRemoveDamage
+2 0.0987 Xorg dixLookupGC
+2 0.0987 Xorg miCreatePicture
+2 0.0987 Xorg miTranslateRegion
+1 0.0493 Xorg CompositeGlyphs
+1 0.0493 Xorg CompositeRects
+1 0.0493 Xorg CreateGC
+1 0.0493 Xorg DamageRegister
+1 0.0493 Xorg FreeGC
+1 0.0493 Xorg GetScratchPixmapHeader
+1 0.0493 Xorg GetTimeInMillis
+1 0.0493 Xorg ProcChangeGC
+1 0.0493 Xorg ProcCopyArea
+1 0.0493 Xorg ProcPolyFillRectangle
+1 0.0493 Xorg ProcRenderComposite
+1 0.0493 Xorg ProcRenderSetPictureClipRectangles
+1 0.0493 Xorg ProcSetClipRectangles
+1 0.0493 Xorg QuickSortRects
+1 0.0493 Xorg VerifyRectOrder
+1 0.0493 Xorg _XSERVTransRead
+1 0.0493 Xorg damageChangeClip
+1 0.0493 Xorg damageInsertDamage
+1 0.0493 Xorg damagePolySegment
+1 0.0493 Xorg miBSCheapChangeGC
+1 0.0493 Xorg miChangePicture
+1 0.0493 Xorg miChangePictureClip
+1 0.0493 Xorg miChangePictureFilter
+1 0.0493 Xorg miChangePictureTransform
+1 0.0493 Xorg miDestroyClip
+1 0.0493 Xorg miRegionCopy
+1 0.0493 Xorg miTrapezoids
+1 0.0493 anon (tgid:28734 range:0xb7f37000-0xb7f38000) (no symbols)
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 4 0.0128 intel_drv.so I830EXASync
+ 31127 99.9872 intel_drv.so I830Sync
+31130 69.2393 intel_drv.so I830WaitLpRing
+ 31130 99.9968 intel_drv.so I830WaitLpRing [self]
+ 1 0.0032 libc-2.5.so gettimeofday
+-------------------------------------------------------------------------------
+9782 21.7571 intel_drv.so i965_prepare_composite
+ 28919 64.8495 intel_drv.so i830WaitSync
+ 9782 21.9357 intel_drv.so i965_prepare_composite [self]
+ 5524 12.3873 libc-2.5.so memcpy
+ 105 0.2355 intel_drv.so intel_get_pixmap_offset
+ 74 0.1659 intel_drv.so intel_get_pixmap_pitch
+ 55 0.1233 intel_drv.so IntelEmitInvarientState
+ 40 0.0897 intel_drv.so __i686.get_pc_thunk.bx
+ 27 0.0605 intel_drv.so .plt
+ 15 0.0336 intel_drv.so i965_get_card_format
+ 12 0.0269 libexa.so exaWaitSync
+ 10 0.0224 libdri.so DRIGetSAREAPrivate
+ 9 0.0202 libdri.so DRIGetContext
+ 8 0.0179 intel_drv.so i965_get_dest_format
+ 8 0.0179 libdri.so __i686.get_pc_thunk.cx
+ 5 0.0112 libexa.so exaGetPixmapOffset
+ 1 0.0022 libexa.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+2800 6.2278 intel_drv.so i965_composite
+ 2800 90.1191 intel_drv.so i965_composite [self]
+ 157 5.0531 intel_drv.so i830_get_transformed_coordinates
+ 76 2.4461 intel_drv.so i830WaitSync
+ 36 1.1587 intel_drv.so __i686.get_pc_thunk.bx
+ 31 0.9977 intel_drv.so i830MarkSync
+ 5 0.1609 libexa.so exaMarkSync
+ 2 0.0644 libexa.so exaWaitSync
+-------------------------------------------------------------------------------
+ 31400 100.000 intel_drv.so I830EXASync
+272 0.6050 intel_drv.so I830Sync
+ 31127 99.1179 intel_drv.so I830WaitLpRing
+ 272 0.8661 intel_drv.so I830Sync [self]
+ 4 0.0127 intel_drv.so __i686.get_pc_thunk.bx
+ 1 0.0032 Xorg GetTimeInMillis
+-------------------------------------------------------------------------------
+ 157 100.000 intel_drv.so i965_composite
+187 0.4159 intel_drv.so i830_get_transformed_coordinates
+ 187 100.000 intel_drv.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+ 1 1.0870 intel_drv.so I830EXASync
+ 4 4.3478 intel_drv.so I830Sync
+ 11 11.9565 intel_drv.so i965_check_composite
+ 36 39.1304 intel_drv.so i965_composite
+ 40 43.4783 intel_drv.so i965_prepare_composite
+119 0.2647 intel_drv.so __i686.get_pc_thunk.bx
+ 119 100.000 intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 76 0.2621 intel_drv.so i965_composite
+ 28919 99.7379 intel_drv.so i965_prepare_composite
+103 0.2291 intel_drv.so i830WaitSync
+ 28896 99.6105 libexa.so exaWaitSync
+ 103 0.3551 intel_drv.so i830WaitSync [self]
+ 5 0.0172 intel_drv.so I830EXASync
+ 5 0.0172 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 3.5714 intel_drv.so I830EXASync
+ 27 96.4286 intel_drv.so i965_prepare_composite
+99 0.2202 intel_drv.so .plt
+ 99 100.000 intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 74 100.000 intel_drv.so i965_prepare_composite
+83 0.1846 intel_drv.so intel_get_pixmap_pitch
+ 83 96.5116 intel_drv.so intel_get_pixmap_pitch [self]
+ 3 3.4884 libexa.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+ 105 100.000 intel_drv.so i965_prepare_composite
+77 0.1713 intel_drv.so intel_get_pixmap_offset
+ 77 68.7500 intel_drv.so intel_get_pixmap_offset [self]
+ 24 21.4286 libexa.so exaGetPixmapOffset
+ 11 9.8214 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 59 100.000 intel_drv.so i965_check_composite
+73 0.1624 intel_drv.so i965_check_composite_texture
+ 73 100.000 intel_drv.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+54 0.1201 intel_drv.so i965_check_composite
+ 59 44.0299 intel_drv.so i965_check_composite_texture
+ 54 40.2985 intel_drv.so i965_check_composite [self]
+ 11 8.2090 intel_drv.so __i686.get_pc_thunk.bx
+ 10 7.4627 intel_drv.so i965_get_dest_format
+-------------------------------------------------------------------------------
+38 0.0845 intel_drv.so I830EXASolid
+ 38 97.4359 intel_drv.so I830EXASolid [self]
+ 1 2.5641 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 55 100.000 intel_drv.so i965_prepare_composite
+36 0.0801 intel_drv.so IntelEmitInvarientState
+ 36 62.0690 intel_drv.so IntelEmitInvarientState [self]
+ 15 25.8621 libdri.so DRIGetSAREAPrivate
+ 7 12.0690 libdri.so DRIGetContext
+-------------------------------------------------------------------------------
+ 15 100.000 intel_drv.so i965_prepare_composite
+32 0.0712 intel_drv.so i965_get_card_format
+ 32 100.000 intel_drv.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+ 8 44.4444 intel_drv.so i965_prepare_composite
+ 10 55.5556 intel_drv.so i965_check_composite
+28 0.0623 intel_drv.so i965_get_dest_format
+ 28 100.000 intel_drv.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+ 5 100.000 intel_drv.so i830WaitSync
+19 0.0423 intel_drv.so I830EXASync
+ 31400 99.9204 intel_drv.so I830Sync
+ 19 0.0605 intel_drv.so I830EXASync [self]
+ 4 0.0127 intel_drv.so I830WaitLpRing
+ 1 0.0032 intel_drv.so .plt
+ 1 0.0032 intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 31 100.000 intel_drv.so i965_composite
+15 0.0334 intel_drv.so i830MarkSync
+ 19 51.3514 libexa.so exaMarkSync
+ 15 40.5405 intel_drv.so i830MarkSync [self]
+ 3 8.1081 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+10 0.0222 intel_drv.so I830EXAPrepareSolid
+ 10 71.4286 intel_drv.so I830EXAPrepareSolid [self]
+ 3 21.4286 libexa.so exaGetPixmapOffset
+ 1 7.1429 libexa.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+3 0.0067 intel_drv.so i830_done_composite
+ 3 100.000 intel_drv.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+ 1 100.000 intel_drv.so I830Sync
+0 0 Xorg GetTimeInMillis
+ 0 0 Xorg GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+ 1 100.000 intel_drv.so I830WaitLpRing
+0 0 libc-2.5.so gettimeofday
+ 0 0 libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 5524 100.000 intel_drv.so i965_prepare_composite
+0 0 libc-2.5.so memcpy
+ 0 0 libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 7 43.7500 intel_drv.so IntelEmitInvarientState
+ 9 56.2500 intel_drv.so i965_prepare_composite
+0 0 libdri.so DRIGetContext
+ 0 0 libdri.so DRIGetContext [self]
+-------------------------------------------------------------------------------
+ 10 40.0000 intel_drv.so i965_prepare_composite
+ 15 60.0000 intel_drv.so IntelEmitInvarientState
+0 0 libdri.so DRIGetSAREAPrivate
+ 0 0 libdri.so DRIGetSAREAPrivate [self]
+-------------------------------------------------------------------------------
+ 8 100.000 intel_drv.so i965_prepare_composite
+0 0 libdri.so __i686.get_pc_thunk.cx
+ 0 0 libdri.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 5.0000 intel_drv.so I830EXASolid
+ 3 15.0000 intel_drv.so i830MarkSync
+ 5 25.0000 intel_drv.so i830WaitSync
+ 11 55.0000 intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 3 9.3750 intel_drv.so I830EXAPrepareSolid
+ 5 15.6250 intel_drv.so i965_prepare_composite
+ 24 75.0000 intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so exaGetPixmapOffset
+ 0 0 libexa.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 intel_drv.so I830EXAPrepareSolid
+ 1 20.0000 intel_drv.so i965_prepare_composite
+ 3 60.0000 intel_drv.so intel_get_pixmap_pitch
+0 0 libexa.so exaGetPixmapPitch
+ 0 0 libexa.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+ 5 20.8333 intel_drv.so i965_composite
+ 19 79.1667 intel_drv.so i830MarkSync
+0 0 libexa.so exaMarkSync
+ 0 0 libexa.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+ 2 0.0069 intel_drv.so i965_composite
+ 12 0.0415 intel_drv.so i965_prepare_composite
+ 28896 99.9516 intel_drv.so i830WaitSync
+0 0 libexa.so exaWaitSync
+ 0 0 libexa.so exaWaitSync [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+31130 69.2393 I830WaitLpRing
+9782 21.7571 i965_prepare_composite
+2800 6.2278 i965_composite
+272 0.6050 I830Sync
+187 0.4159 i830_get_transformed_coordinates
+119 0.2647 __i686.get_pc_thunk.bx
+103 0.2291 i830WaitSync
+99 0.2202 .plt
+83 0.1846 intel_get_pixmap_pitch
+77 0.1713 intel_get_pixmap_offset
+73 0.1624 i965_check_composite_texture
+54 0.1201 i965_check_composite
+38 0.0845 I830EXASolid
+36 0.0801 IntelEmitInvarientState
+32 0.0712 i965_get_card_format
+28 0.0623 i965_get_dest_format
+19 0.0423 I830EXASync
+15 0.0334 i830MarkSync
+10 0.0222 I830EXAPrepareSolid
+3 0.0067 i830_done_composite
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 5 5.4945 libc-2.5.so _int_realloc
+ 86 94.5055 libc-2.5.so msort_with_tmp
+6941 75.0947 libc-2.5.so memcpy
+ 6941 100.000 libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 1 0.2000 libc-2.5.so __fopen_internal
+ 22 4.4000 libc-2.5.so _int_realloc
+ 477 95.4000 libc-2.5.so malloc
+460 4.9767 libc-2.5.so _int_malloc
+ 460 89.6686 libc-2.5.so _int_malloc [self]
+ 53 10.3314 libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+ 1 9.0909 libc-2.5.so __fopen_internal
+ 2 18.1818 libc-2.5.so _nl_normalize_codeset
+ 8 72.7273 libc-2.5.so realloc
+443 4.7928 libc-2.5.so malloc
+ 477 51.0707 libc-2.5.so _int_malloc
+ 443 47.4304 libc-2.5.so malloc [self]
+ 7 0.7495 libc-2.5.so __i686.get_pc_thunk.bx
+ 5 0.5353 libc-2.5.so malloc_consolidate
+ 2 0.2141 libc-2.5.so malloc_hook_ini
+-------------------------------------------------------------------------------
+380 4.1112 libc-2.5.so free
+ 380 63.2280 libc-2.5.so free [self]
+ 215 35.7737 libc-2.5.so _int_free
+ 5 0.8319 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.1664 libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+ 5 2.2727 libc-2.5.so _int_realloc
+ 215 97.7273 libc-2.5.so free
+227 2.4559 libc-2.5.so _int_free
+ 227 97.4249 libc-2.5.so _int_free [self]
+ 6 2.5751 libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+176 1.9041 libc-2.5.so memcmp
+ 176 100.000 libc-2.5.so memcmp [self]
+-------------------------------------------------------------------------------
+ 292 24.4351 libc-2.5.so qsort
+ 903 75.5649 libc-2.5.so msort_with_tmp
+125 1.3524 libc-2.5.so msort_with_tmp
+ 903 75.5017 libc-2.5.so msort_with_tmp
+ 125 10.4515 libc-2.5.so msort_with_tmp [self]
+ 86 7.1906 libc-2.5.so memcpy
+ 76 6.3545 libxul.so (no symbols)
+ 5 0.4181 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.0836 libcairo.so.2.11.3 (no symbols)
+-------------------------------------------------------------------------------
+118 1.2766 libc-2.5.so memset
+ 118 100.000 libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+67 0.7249 libc-2.5.so strstr
+ 67 100.000 libc-2.5.so strstr [self]
+-------------------------------------------------------------------------------
+ 1 1.5385 libc-2.5.so free
+ 5 7.6923 libc-2.5.so malloc
+ 6 9.2308 libc-2.5.so _int_free
+ 53 81.5385 libc-2.5.so _int_malloc
+65 0.7032 libc-2.5.so malloc_consolidate
+ 65 100.000 libc-2.5.so malloc_consolidate [self]
+-------------------------------------------------------------------------------
+61 0.6600 libc-2.5.so memmove
+ 61 100.000 libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 5 29.4118 libc-2.5.so msort_with_tmp
+ 5 29.4118 libc-2.5.so free
+ 7 41.1765 libc-2.5.so malloc
+44 0.4760 libc-2.5.so __i686.get_pc_thunk.bx
+ 44 100.000 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+28 0.3029 libc-2.5.so strlen
+ 28 100.000 libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+14 0.1515 libc-2.5.so mkdir
+ 14 100.000 libc-2.5.so mkdir [self]
+-------------------------------------------------------------------------------
+11 0.1190 libc-2.5.so realloc
+ 42 68.8525 libc-2.5.so _int_realloc
+ 11 18.0328 libc-2.5.so realloc [self]
+ 8 13.1148 libc-2.5.so malloc
+-------------------------------------------------------------------------------
+ 42 100.000 libc-2.5.so realloc
+10 0.1082 libc-2.5.so _int_realloc
+ 22 52.3810 libc-2.5.so _int_malloc
+ 10 23.8095 libc-2.5.so _int_realloc [self]
+ 5 11.9048 libc-2.5.so _int_free
+ 5 11.9048 libc-2.5.so memcpy
+-------------------------------------------------------------------------------
+9 0.0974 libc-2.5.so strcmp
+ 9 100.000 libc-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+7 0.0757 libc-2.5.so gettimeofday
+ 7 100.000 libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+4 0.0433 libc-2.5.so bsearch
+ 4 80.0000 libc-2.5.so bsearch [self]
+ 1 20.0000 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+-------------------------------------------------------------------------------
+4 0.0433 libc-2.5.so qsort
+ 292 98.3165 libc-2.5.so msort_with_tmp
+ 4 1.3468 libc-2.5.so qsort [self]
+ 1 0.3367 libxul.so (no symbols)
+-------------------------------------------------------------------------------
+4 0.0433 libc-2.5.so strchr
+ 4 100.000 libc-2.5.so strchr [self]
+-------------------------------------------------------------------------------
+3 0.0325 libc-2.5.so __read_nocancel
+ 3 100.000 libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+3 0.0325 libc-2.5.so strcat
+ 3 100.000 libc-2.5.so strcat [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so vfprintf
+ 1 50.0000 libc-2.5.so vsprintf
+2 0.0216 libc-2.5.so _IO_default_xsputn
+ 2 100.000 libc-2.5.so _IO_default_xsputn [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so fwrite
+2 0.0216 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 2 50.0000 libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 2 50.0000 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so vsscanf
+2 0.0216 libc-2.5.so _IO_vfscanf
+ 2 66.6667 libc-2.5.so _IO_vfscanf [self]
+ 1 33.3333 libc-2.5.so __strtoul_internal
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so vfprintf
+2 0.0216 libc-2.5.so __find_specmb
+ 2 100.000 libc-2.5.so __find_specmb [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so ptmalloc_init
+2 0.0216 libc-2.5.so _dl_addr
+ 2 100.000 libc-2.5.so _dl_addr [self]
+-------------------------------------------------------------------------------
+2 0.0216 libc-2.5.so ftruncate
+ 2 100.000 libc-2.5.so ftruncate [self]
+-------------------------------------------------------------------------------
+2 0.0216 libc-2.5.so fwrite
+ 3 60.0000 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 2 40.0000 libc-2.5.so fwrite [self]
+-------------------------------------------------------------------------------
+2 0.0216 libc-2.5.so poll
+ 2 100.000 libc-2.5.so poll [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libc-2.5.so vsprintf
+2 0.0216 libc-2.5.so vfprintf
+ 2 33.3333 libc-2.5.so __find_specmb
+ 2 33.3333 libc-2.5.so vfprintf [self]
+ 1 16.6667 libc-2.5.so _itoa_word
+ 1 16.6667 libc-2.5.so _IO_default_xsputn
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 0.0108 libc-2.5.so _IO_do_write@@GLIBC_2.1
+ 1 100.000 libc-2.5.so _IO_do_write@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+1 0.0108 libc-2.5.so _IO_doallocbuf
+ 1 50.0000 libc-2.5.so _IO_file_doallocate
+ 1 50.0000 libc-2.5.so _IO_doallocbuf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __fopen_internal
+1 0.0108 libc-2.5.so _IO_file_open
+ 1 100.000 libc-2.5.so _IO_file_open [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_no_init
+1 0.0108 libc-2.5.so _IO_old_init
+ 1 100.000 libc-2.5.so _IO_old_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so sscanf
+1 0.0108 libc-2.5.so _IO_str_init_static_internal
+ 1 100.000 libc-2.5.so _IO_str_init_static_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 0.0108 libc-2.5.so _IO_unsave_markers
+ 1 100.000 libc-2.5.so _IO_unsave_markers [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __strtoul_internal
+1 0.0108 libc-2.5.so ____strtoul_l_internal
+ 1 100.000 libc-2.5.so ____strtoul_l_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 0.0108 libc-2.5.so __close_nocancel
+ 1 100.000 libc-2.5.so __close_nocancel [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_stat
+1 0.0108 libc-2.5.so __fxstat64@GLIBC_2.1
+ 1 100.000 libc-2.5.so __fxstat64@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+1 0.0108 libc-2.5.so __i686.get_pc_thunk.cx
+ 1 100.000 libc-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+1 0.0108 libc-2.5.so __xstat
+ 1 50.0000 libc-2.5.so __xstat32_conv
+ 1 50.0000 libc-2.5.so __xstat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __xstat
+1 0.0108 libc-2.5.so __xstat32_conv
+ 1 100.000 libc-2.5.so __xstat32_conv [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so vfprintf
+1 0.0108 libc-2.5.so _itoa_word
+ 1 100.000 libc-2.5.so _itoa_word [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so _nl_find_locale
+1 0.0108 libc-2.5.so _nl_load_locale_from_archive
+ 2 66.6667 libc-2.5.so _nl_normalize_codeset
+ 1 33.3333 libc-2.5.so _nl_load_locale_from_archive [self]
+-------------------------------------------------------------------------------
+1 0.0108 libc-2.5.so fgets
+ 1 50.0000 libc-2.5.so _IO_getline
+ 1 50.0000 libc-2.5.so fgets [self]
+-------------------------------------------------------------------------------
+1 0.0108 libc-2.5.so fopen@@GLIBC_2.1
+ 5 83.3333 libc-2.5.so __fopen_internal
+ 1 16.6667 libc-2.5.so fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+1 0.0108 libc-2.5.so mbrtowc
+ 1 100.000 libc-2.5.so mbrtowc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_getline
+1 0.0108 libc-2.5.so memchr
+ 1 100.000 libc-2.5.so memchr [self]
+-------------------------------------------------------------------------------
+1 0.0108 libc-2.5.so mremap
+ 1 100.000 libc-2.5.so mremap [self]
+-------------------------------------------------------------------------------
+1 0.0108 libc-2.5.so strcpy
+ 1 100.000 libc-2.5.so strcpy [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so sscanf
+1 0.0108 libc-2.5.so vsscanf
+ 3 75.0000 libc-2.5.so _IO_vfscanf
+ 1 25.0000 libc-2.5.so vsscanf [self]
+-------------------------------------------------------------------------------
+ 62693 100.000 libc-2.5.so __libc_start_main
+0 0 Xorg main
+ 0 0 Xorg main [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so __libc_start_main
+0 0 bash (no symbols)
+ 0 0 bash (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 cat (no symbols)
+ 0 0 cat (no symbols) [self]
+-------------------------------------------------------------------------------
+ 524 100.000 libc-2.5.so __libc_start_main
+0 0 firefox-bin (no symbols)
+ 0 0 firefox-bin (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 gconfd-2 (no symbols)
+ 0 0 gconfd-2 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 hald-addon-storage (no symbols)
+ 0 0 hald-addon-storage (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so fclose@@GLIBC_2.1
+0 0 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so _IO_do_write@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so _IO_unsave_markers
+ 1 33.3333 libc-2.5.so __close_nocancel
+ 0 0 libc-2.5.so _IO_file_close_it@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_doallocbuf
+0 0 libc-2.5.so _IO_file_doallocate
+ 1 100.000 libc-2.5.so _IO_file_stat
+ 0 0 libc-2.5.so _IO_file_doallocate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __fopen_internal
+0 0 libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 1 100.000 libc-2.5.so strstr
+ 0 0 libc-2.5.so _IO_file_fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+0 0 libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 2 100.000 libc-2.5.so _IO_doallocbuf
+ 0 0 libc-2.5.so _IO_file_overflow@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_doallocate
+0 0 libc-2.5.so _IO_file_stat
+ 1 100.000 libc-2.5.so __fxstat64@GLIBC_2.1
+ 0 0 libc-2.5.so _IO_file_stat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so fgets
+0 0 libc-2.5.so _IO_getline
+ 1 100.000 libc-2.5.so memchr
+ 0 0 libc-2.5.so _IO_getline [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __fopen_internal
+0 0 libc-2.5.so _IO_no_init
+ 1 100.000 libc-2.5.so _IO_old_init
+ 0 0 libc-2.5.so _IO_no_init [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so fopen@@GLIBC_2.1
+0 0 libc-2.5.so __fopen_internal
+ 1 20.0000 libc-2.5.so _IO_file_open
+ 1 20.0000 libc-2.5.so _int_malloc
+ 1 20.0000 libc-2.5.so malloc
+ 1 20.0000 libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 1 20.0000 libc-2.5.so _IO_no_init
+ 0 0 libc-2.5.so __fopen_internal [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so __libc_start_main
+ 62693 91.5066 Xorg main
+ 5284 7.7125 oprofiled (no symbols)
+ 524 0.7648 firefox-bin (no symbols)
+ 5 0.0073 bash (no symbols)
+ 2 0.0029 sleep (no symbols)
+ 2 0.0029 gconfd-2 (no symbols)
+ 1 0.0015 cat (no symbols)
+ 1 0.0015 hald-addon-storage (no symbols)
+ 0 0 libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_vfscanf
+0 0 libc-2.5.so __strtoul_internal
+ 1 100.000 libc-2.5.so ____strtoul_l_internal
+ 0 0 libc-2.5.so __strtoul_internal [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so setlocale
+0 0 libc-2.5.so _nl_find_locale
+ 3 100.000 libc-2.5.so _nl_load_locale_from_archive
+ 0 0 libc-2.5.so _nl_find_locale [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so _nl_load_locale_from_archive
+0 0 libc-2.5.so _nl_normalize_codeset
+ 2 100.000 libc-2.5.so malloc
+ 0 0 libc-2.5.so _nl_normalize_codeset [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so clone
+ 3 100.000 libpthread-2.5.so start_thread
+ 0 0 libc-2.5.so clone [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fclose@@GLIBC_2.1
+ 3 100.000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 0 0 libc-2.5.so fclose@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so malloc
+0 0 libc-2.5.so malloc_hook_ini
+ 2 100.000 libc-2.5.so ptmalloc_init
+ 0 0 libc-2.5.so malloc_hook_ini [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so malloc_hook_ini
+0 0 libc-2.5.so ptmalloc_init
+ 2 100.000 libc-2.5.so _dl_addr
+ 0 0 libc-2.5.so ptmalloc_init [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so setlocale
+ 3 100.000 libc-2.5.so _nl_find_locale
+ 0 0 libc-2.5.so setlocale [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so sprintf
+ 7 100.000 libc-2.5.so vsprintf
+ 0 0 libc-2.5.so sprintf [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so sscanf
+ 4 80.0000 libc-2.5.so vsscanf
+ 1 20.0000 libc-2.5.so _IO_str_init_static_internal
+ 0 0 libc-2.5.so sscanf [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so sprintf
+0 0 libc-2.5.so vsprintf
+ 6 85.7143 libc-2.5.so vfprintf
+ 1 14.2857 libc-2.5.so _IO_default_xsputn
+ 0 0 libc-2.5.so vsprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so msort_with_tmp
+0 0 libcairo.so.2.11.3 (no symbols)
+ 0 0 libcairo.so.2.11.3 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so bsearch
+0 0 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+ 0 0 libgtk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so clone
+0 0 libpthread-2.5.so start_thread
+ 0 0 libpthread-2.5.so start_thread [self]
+-------------------------------------------------------------------------------
+ 1 1.2987 libc-2.5.so qsort
+ 76 98.7013 libc-2.5.so msort_with_tmp
+0 0 libxul.so (no symbols)
+ 0 0 libxul.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5284 100.000 libc-2.5.so __libc_start_main
+0 0 oprofiled (no symbols)
+ 0 0 oprofiled (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 sleep (no symbols)
+ 0 0 sleep (no symbols) [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+6941 75.0947 memcpy
+460 4.9767 _int_malloc
+443 4.7928 malloc
+380 4.1112 free
+227 2.4559 _int_free
+176 1.9041 memcmp
+125 1.3524 msort_with_tmp
+118 1.2766 memset
+67 0.7249 strstr
+65 0.7032 malloc_consolidate
+61 0.6600 memmove
+44 0.4760 __i686.get_pc_thunk.bx
+28 0.3029 strlen
+14 0.1515 mkdir
+11 0.1190 realloc
+10 0.1082 _int_realloc
+9 0.0974 strcmp
+7 0.0757 gettimeofday
+4 0.0433 bsearch
+4 0.0433 qsort
+4 0.0433 strchr
+3 0.0325 __read_nocancel
+3 0.0325 strcat
+2 0.0216 _IO_default_xsputn
+2 0.0216 _IO_file_xsputn@@GLIBC_2.1
+2 0.0216 _IO_vfscanf
+2 0.0216 __find_specmb
+2 0.0216 _dl_addr
+2 0.0216 ftruncate
+2 0.0216 fwrite
+2 0.0216 poll
+2 0.0216 vfprintf
+1 0.0108 _IO_do_write@@GLIBC_2.1
+1 0.0108 _IO_doallocbuf
+1 0.0108 _IO_file_open
+1 0.0108 _IO_old_init
+1 0.0108 _IO_str_init_static_internal
+1 0.0108 _IO_unsave_markers
+1 0.0108 ____strtoul_l_internal
+1 0.0108 __close_nocancel
+1 0.0108 __fxstat64@GLIBC_2.1
+1 0.0108 __i686.get_pc_thunk.cx
+1 0.0108 __xstat
+1 0.0108 __xstat32_conv
+1 0.0108 _itoa_word
+1 0.0108 _nl_load_locale_from_archive
+1 0.0108 fgets
+1 0.0108 fopen@@GLIBC_2.1
+1 0.0108 mbrtowc
+1 0.0108 memchr
+1 0.0108 mremap
+1 0.0108 strcpy
+1 0.0108 vsscanf
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 1 0.1838 libexa.so exaFillRegionSolid
+ 2 0.3676 libexa.so exaCopyNtoN
+ 7 1.2868 libexa.so exaComposite
+ 8 1.4706 libexa.so exaGetOffscreenPixmap
+ 10 1.8382 libexa.so exaGlyphs
+ 12 2.2059 libexa.so exaMoveInPixmap
+ 28 5.1471 libexa.so exaDoMigration
+ 476 87.5000 libexa.so exaTryDriverComposite
+576 16.4196 libexa.so __i686.get_pc_thunk.bx
+ 576 100.000 libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 3 0.6637 libexa.so exaTryDriverComposite
+ 449 99.3363 libexa.so exaDoMigration
+452 12.8848 libexa.so ExaOffscreenMarkUsed
+ 452 100.000 libexa.so ExaOffscreenMarkUsed [self]
+-------------------------------------------------------------------------------
+ 45270 47.8779 libexa.so exaComposite
+ 49283 52.1221 libexa.so exaGlyphs
+354 10.0912 libexa.so exaComposite
+ 50072 51.8102 libexa.so exaTryDriverComposite
+ 45270 46.8415 libexa.so exaComposite
+ 656 0.6788 intel_drv.so i965_composite
+ 354 0.3663 libexa.so exaComposite [self]
+ 71 0.0735 libexa.so exaPixmapDirty
+ 66 0.0683 intel_drv.so i965_check_composite
+ 60 0.0621 libexa.so .plt
+ 40 0.0414 libexa.so exaGetDrawablePixmap
+ 8 0.0083 libexa.so exaGetDrawableDeltas
+ 7 0.0072 libexa.so exaGetOffscreenPixmap
+ 7 0.0072 intel_drv.so i965_check_composite_texture
+ 7 0.0072 libexa.so __i686.get_pc_thunk.bx
+ 6 0.0062 Xorg miComputeCompositeRegion
+ 4 0.0041 intel_drv.so __i686.get_pc_thunk.bx
+ 3 0.0031 intel_drv.so i965_prepare_composite
+ 3 0.0031 intel_drv.so i830_done_composite
+ 2 0.0021 libexa.so exaMarkSync
+ 2 0.0021 libexa.so exaOpReadsDestination
+ 2 0.0021 Xorg miUnion
+ 2 0.0021 Xorg DamageRegion
+ 2 0.0021 intel_drv.so i965_get_dest_format
+ 1 0.0010 libexa.so exaDoMigration
+-------------------------------------------------------------------------------
+ 1 0.0020 libexa.so exaGlyphs
+ 50072 99.9980 libexa.so exaComposite
+348 9.9202 libexa.so exaTryDriverComposite
+ 44587 89.0351 intel_drv.so i965_prepare_composite
+ 2451 4.8944 intel_drv.so i965_composite
+ 849 1.6954 libexa.so exaDoMigration
+ 622 1.2421 Xorg miComputeCompositeRegion
+ 476 0.9505 libexa.so __i686.get_pc_thunk.bx
+ 348 0.6949 libexa.so exaTryDriverComposite [self]
+ 168 0.3355 libexa.so exaGetOffscreenPixmap
+ 67 0.1338 intel_drv.so .plt
+ 63 0.1258 intel_drv.so i965_check_composite
+ 61 0.1218 libexa.so exaMarkSync
+ 54 0.1078 libexa.so .plt
+ 40 0.0799 libexa.so exaGetDrawablePixmap
+ 37 0.0739 Xorg .plt
+ 31 0.0619 libpixman.so.0.0.0 pixman_region_rectangles
+ 30 0.0599 intel_drv.so i830_get_transformed_coordinates
+ 17 0.0339 intel_drv.so i965_get_card_format
+ 17 0.0339 intel_drv.so __i686.get_pc_thunk.bx
+ 16 0.0320 libexa.so exaPixmapIsOffscreen
+ 15 0.0300 libc-2.5.so memcpy
+ 14 0.0280 libpixman.so.0.0.0 pixman_region_n_rects
+ 13 0.0260 intel_drv.so i830WaitSync
+ 12 0.0240 intel_drv.so intel_get_pixmap_pitch
+ 9 0.0180 libpixman.so.0.0.0 pixman_region_not_empty
+ 9 0.0180 libexa.so __i686.get_pc_thunk.cx
+ 8 0.0160 intel_drv.so i965_get_dest_format
+ 8 0.0160 libexa.so exaGetDrawableDeltas
+ 8 0.0160 libexa.so exaMoveInPixmap
+ 7 0.0140 intel_drv.so intel_get_pixmap_offset
+ 7 0.0140 intel_drv.so i965_check_composite_texture
+ 6 0.0120 libexa.so exaPixmapIsPinned
+ 6 0.0120 intel_drv.so i830MarkSync
+ 6 0.0120 Xorg __i686.get_pc_thunk.bx
+ 4 0.0080 libpixman.so.0.0.0 pixman_region_init
+ 3 0.0060 Xorg miCompositeSourceValidate
+ 3 0.0060 intel_drv.so IntelEmitInvarientState
+ 3 0.0060 libexa.so ExaOffscreenMarkUsed
+ 2 0.0040 libexa.so exaOpReadsDestination
+ 1 0.0020 anon (tgid:28734 range:0xb7f37000-0xb7f38000) (no symbols)
+-------------------------------------------------------------------------------
+ 1 0.3788 libexa.so exaGlyphs
+ 16 6.0606 libexa.so exaTryDriverComposite
+ 17 6.4394 libexa.so exaCopyNtoN
+ 53 20.0758 libexa.so exaMoveInPixmap
+ 85 32.1970 libexa.so exaGetOffscreenPixmap
+ 92 34.8485 libexa.so exaDoMigration
+267 7.6112 libexa.so exaPixmapIsOffscreen
+ 267 100.000 libexa.so exaPixmapIsOffscreen [self]
+-------------------------------------------------------------------------------
+185 5.2737 libexa.so exaGlyphs
+ 49283 97.2224 libexa.so exaComposite
+ 446 0.8798 libexa.so exaPixmapDirty
+ 353 0.6964 libexa.so exaCopyArea
+ 185 0.3650 libexa.so exaGlyphs [self]
+ 71 0.1401 libexa.so exaDoMigration
+ 62 0.1223 libexa.so exaCreatePixmap
+ 55 0.1085 Xorg miModifyPixmapHeader
+ 43 0.0848 libextmod.so XvDestroyPixmap
+ 27 0.0533 Xorg FreePicture
+ 24 0.0473 Xorg CreatePicture
+ 24 0.0473 Xorg ValidateGC
+ 23 0.0454 libexa.so .plt
+ 16 0.0316 Xorg damagePolyFillRect
+ 14 0.0276 Xorg miGlyphExtents
+ 10 0.0197 libexa.so __i686.get_pc_thunk.bx
+ 7 0.0138 Xorg ValidatePicture
+ 7 0.0138 Xorg __i686.get_pc_thunk.bx
+ 6 0.0118 Xorg DamageRegion
+ 6 0.0118 Xorg miUnion
+ 5 0.0099 intel_drv.so i965_check_composite
+ 4 0.0079 Xorg GetScratchPixmapHeader
+ 4 0.0079 Xorg FreeScratchGC
+ 3 0.0059 libexa.so exaGetDrawablePixmap
+ 3 0.0059 libexa.so exaGetDrawableDeltas
+ 1 0.0020 Xorg ChangePicture
+ 1 0.0020 Xorg miCreatePicture
+ 1 0.0020 Xorg damageValidateGC
+ 1 0.0020 Xorg damageInsertDamage
+ 1 0.0020 Xorg DamageSetReportAfterOp
+ 1 0.0020 libexa.so exaPixmapIsOffscreen
+ 1 0.0020 libexa.so exaMoveInPixmap
+ 1 0.0020 libfb.so fbCreatePixmap
+ 1 0.0020 libfb.so fbDoCopy
+ 1 0.0020 libexa.so exaTryDriverComposite
+-------------------------------------------------------------------------------
+ 1 0.6369 libexa.so exaFillRegionSolid
+ 1 0.6369 libexa.so exaRasterizeTrapezoid
+ 2 1.2739 libexa.so exaCopyNtoN
+ 16 10.1911 libexa.so exaDoMigration
+ 23 14.6497 libexa.so exaGlyphs
+ 54 34.3949 libexa.so exaTryDriverComposite
+ 60 38.2166 libexa.so exaComposite
+184 5.2452 libexa.so .plt
+ 184 100.000 libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 0.0943 libexa.so exaPolyFillRect
+ 1 0.0943 libexa.so exaComposite
+ 42 3.9623 libexa.so exaCopyNtoN
+ 71 6.6981 libexa.so exaGlyphs
+ 96 9.0566 libexa.so exaFillRegionSolid
+ 849 80.0943 libexa.so exaTryDriverComposite
+166 4.7320 libexa.so exaDoMigration
+ 449 42.3186 libexa.so ExaOffscreenMarkUsed
+ 275 25.9189 libexa.so exaMoveInPixmap
+ 166 15.6456 libexa.so exaDoMigration [self]
+ 92 8.6711 libexa.so exaPixmapIsOffscreen
+ 33 3.1103 libexa.so exaPixmapIsPinned
+ 28 2.6390 libexa.so __i686.get_pc_thunk.bx
+ 16 1.5080 libexa.so .plt
+ 1 0.0943 libexa.so exaOffscreenAlloc
+ 1 0.0943 Xorg DamageEmpty
+-------------------------------------------------------------------------------
+ 1 0.3509 libexa.so exaFillRegionSolid
+ 1 0.3509 libexa.so exaGlyphs
+ 8 2.8070 libexa.so exaTryDriverComposite
+ 275 96.4912 libexa.so exaDoMigration
+133 3.7913 libexa.so exaMoveInPixmap
+ 133 46.6667 libexa.so exaMoveInPixmap [self]
+ 73 25.6140 libexa.so exaOffscreenAlloc
+ 53 18.5965 libexa.so exaPixmapIsOffscreen
+ 12 4.2105 libexa.so __i686.get_pc_thunk.bx
+ 8 2.8070 Xorg miUnion
+ 2 0.7018 libexa.so exaPixmapIsPinned
+ 2 0.7018 Xorg DamageEmpty
+ 1 0.3509 Xorg __i686.get_pc_thunk.bx
+ 1 0.3509 libpixman.so.0.0.0 pixman_region_union
+-------------------------------------------------------------------------------
+ 1 0.9901 libexa.so exaPolyFillRect
+ 3 2.9703 libexa.so exaGlyphs
+ 7 6.9307 libexa.so exaGetOffscreenPixmap
+ 10 9.9010 libexa.so exaCopyNtoN
+ 40 39.6040 libexa.so exaTryDriverComposite
+ 40 39.6040 libexa.so exaComposite
+111 3.1642 libexa.so exaGetDrawablePixmap
+ 111 100.000 libexa.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 2616 100.000 libexa.so exaPrepareAccess
+102 2.9076 libexa.so exaWaitSync
+ 31418 99.6543 intel_drv.so I830EXASync
+ 102 0.3235 libexa.so exaWaitSync [self]
+ 4 0.0127 intel_drv.so I830Sync
+ 2 0.0063 intel_drv.so __i686.get_pc_thunk.bx
+ 1 0.0032 intel_drv.so .plt
+-------------------------------------------------------------------------------
+ 1 0.1931 libexa.so exaRasterizeTrapezoid
+ 71 13.7066 libexa.so exaComposite
+ 446 86.1004 libexa.so exaGlyphs
+90 2.5656 libexa.so exaPixmapDirty
+ 416 79.6935 Xorg miUnion
+ 90 17.2414 libexa.so exaPixmapDirty [self]
+ 8 1.5326 Xorg .plt
+ 6 1.1494 Xorg __i686.get_pc_thunk.bx
+ 2 0.3831 Xorg DamageRegion
+-------------------------------------------------------------------------------
+ 1 1.5625 libexa.so exaPolyFillRect
+ 2 3.1250 libexa.so exaComposite
+ 61 95.3125 libexa.so exaTryDriverComposite
+88 2.5086 libexa.so exaMarkSync
+ 88 100.000 libexa.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+ 2 1.0471 libexa.so exaPolyFillRect
+ 7 3.6649 libexa.so exaComposite
+ 14 7.3298 libexa.so exaFillRegionSolid
+ 168 87.9581 libexa.so exaTryDriverComposite
+69 1.9669 libexa.so exaGetOffscreenPixmap
+ 85 44.5026 libexa.so exaPixmapIsOffscreen
+ 69 36.1257 libexa.so exaGetOffscreenPixmap [self]
+ 22 11.5183 libexa.so exaGetDrawableDeltas
+ 8 4.1885 libexa.so __i686.get_pc_thunk.bx
+ 7 3.6649 libexa.so exaGetDrawablePixmap
+-------------------------------------------------------------------------------
+ 1 1.3514 libexa.so exaDoMigration
+ 73 98.6486 libexa.so exaMoveInPixmap
+68 1.9384 libexa.so exaOffscreenAlloc
+ 68 91.8919 libexa.so exaOffscreenAlloc [self]
+ 4 5.4054 Xorg Xalloc
+ 2 2.7027 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 4.0816 libexa.so exaPolyFillRect
+ 3 6.1224 libexa.so exaGlyphs
+ 6 12.2449 libexa.so exaCopyNtoN
+ 8 16.3265 libexa.so exaTryDriverComposite
+ 8 16.3265 libexa.so exaComposite
+ 22 44.8980 libexa.so exaGetOffscreenPixmap
+52 1.4823 libexa.so exaGetDrawableDeltas
+ 52 100.000 libexa.so exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+47 1.3398 libexa.so exaCopyNtoN
+ 47 35.8779 libexa.so exaCopyNtoN [self]
+ 42 32.0611 libexa.so exaDoMigration
+ 17 12.9771 libexa.so exaPixmapIsOffscreen
+ 10 7.6336 libexa.so exaGetDrawablePixmap
+ 6 4.5802 libexa.so exaGetDrawableDeltas
+ 4 3.0534 libexa.so exaPixmapIsPinned
+ 2 1.5267 libexa.so .plt
+ 2 1.5267 libexa.so __i686.get_pc_thunk.bx
+ 1 0.7634 libexa.so __i686.get_pc_thunk.cx
+-------------------------------------------------------------------------------
+ 2 4.4444 libexa.so exaMoveInPixmap
+ 4 8.8889 libexa.so exaCopyNtoN
+ 6 13.3333 libexa.so exaTryDriverComposite
+ 33 73.3333 libexa.so exaDoMigration
+45 1.2828 libexa.so exaPixmapIsPinned
+ 45 100.000 libexa.so exaPixmapIsPinned [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so exaFillRegionSolid
+35 0.9977 libexa.so exaGetPixmapOffset
+ 35 100.000 libexa.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+ 353 100.000 libexa.so exaGlyphs
+33 0.9407 libexa.so exaCopyArea
+ 313 86.9444 libfb.so fbDoCopy
+ 33 9.1667 libexa.so exaCopyArea [self]
+ 7 1.9444 libfb.so __i686.get_pc_thunk.bx
+ 4 1.1111 libfb.so fbCopyRegion
+ 2 0.5556 Xorg miSpriteSourceValidate
+ 1 0.2778 libfb.so .plt
+-------------------------------------------------------------------------------
+ 62 100.000 libexa.so exaGlyphs
+19 0.5416 libexa.so exaCreatePixmap
+ 104 67.0968 libfb.so fbCreatePixmap
+ 25 16.1290 Xorg DamageCreate
+ 19 12.2581 libexa.so exaCreatePixmap [self]
+ 4 2.5806 Xorg DamageRegister
+ 1 0.6452 Xorg DamageSetReportAfterOp
+ 1 0.6452 Xorg Xalloc
+ 1 0.6452 libfb.so .plt
+-------------------------------------------------------------------------------
+ 31 100.000 libexa.so exaPolySegment
+19 0.5416 libexa.so exaPolyFillRect
+ 185 61.4618 libexa.so exaFillRegionSolid
+ 29 9.6346 Xorg miRectsToRegion
+ 25 8.3056 libpixman.so.0.0.0 pixman_region_fini
+ 23 7.6412 Xorg miRegionDestroy
+ 19 6.3123 libexa.so exaPolyFillRect [self]
+ 6 1.9934 Xorg miIntersect
+ 3 0.9967 Xorg miTranslateRegion
+ 2 0.6645 libexa.so exaGetDrawableDeltas
+ 2 0.6645 libexa.so exaGetOffscreenPixmap
+ 2 0.6645 intel_drv.so I830EXASolid
+ 1 0.3322 libexa.so exaGetDrawablePixmap
+ 1 0.3322 libexa.so exaMarkSync
+ 1 0.3322 libexa.so exaDoMigration
+ 1 0.3322 Xorg miRegionCreate
+ 1 0.3322 Xorg miRegionValidate
+-------------------------------------------------------------------------------
+ 1 7.1429 libexa.so exaCopyNtoN
+ 4 28.5714 libexa.so exaFillRegionSolid
+ 9 64.2857 libexa.so exaTryDriverComposite
+14 0.3991 libexa.so __i686.get_pc_thunk.cx
+ 14 100.000 libexa.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libexa.so exaDestroyPixmap
+11 0.3136 libexa.so exaOffscreenFree
+ 11 68.7500 libexa.so exaOffscreenFree [self]
+ 5 31.2500 libexa.so ExaOffscreenMerge
+-------------------------------------------------------------------------------
+8 0.2281 libexa.so exaValidateGC
+ 55 79.7101 libfb.so fbValidateGC
+ 8 11.5942 libexa.so exaValidateGC [self]
+ 2 2.8986 Xorg miComputeCompositeClip
+ 2 2.8986 libfb.so __i686.get_pc_thunk.cx
+ 2 2.8986 libfb.so fbGetGCPrivateIndex
+-------------------------------------------------------------------------------
+ 185 100.000 libexa.so exaPolyFillRect
+7 0.1995 libexa.so exaFillRegionSolid
+ 96 51.3369 libexa.so exaDoMigration
+ 37 19.7861 intel_drv.so I830EXASolid
+ 14 7.4866 libexa.so exaGetOffscreenPixmap
+ 14 7.4866 intel_drv.so I830EXAPrepareSolid
+ 7 3.7433 libexa.so exaFillRegionSolid [self]
+ 4 2.1390 libexa.so __i686.get_pc_thunk.cx
+ 4 2.1390 intel_drv.so __i686.get_pc_thunk.bx
+ 3 1.6043 libexa.so exaGetPixmapOffset
+ 3 1.6043 intel_drv.so .plt
+ 2 1.0695 libexa.so exaGetPixmapPitch
+ 1 0.5348 libexa.so .plt
+ 1 0.5348 libexa.so __i686.get_pc_thunk.bx
+ 1 0.5348 libexa.so exaMoveInPixmap
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaFillRegionSolid
+7 0.1995 libexa.so exaGetPixmapPitch
+ 7 100.000 libexa.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+4 0.1140 libexa.so exaDestroyPixmap
+ 19 41.3043 libfb.so fbDestroyPixmap
+ 16 34.7826 libexa.so exaOffscreenFree
+ 4 8.6957 libfb.so __i686.get_pc_thunk.bx
+ 4 8.6957 libexa.so exaDestroyPixmap [self]
+ 2 4.3478 libexa.so ExaOffscreenMerge
+ 1 2.1739 Xorg Xfree
+-------------------------------------------------------------------------------
+ 2 50.0000 libexa.so exaTryDriverComposite
+ 2 50.0000 libexa.so exaComposite
+4 0.1140 libexa.so exaOpReadsDestination
+ 4 100.000 libexa.so exaOpReadsDestination [self]
+-------------------------------------------------------------------------------
+ 2 28.5714 libexa.so exaDestroyPixmap
+ 5 71.4286 libexa.so exaOffscreenFree
+3 0.0855 libexa.so ExaOffscreenMerge
+ 4 57.1429 Xorg Xfree
+ 3 42.8571 libexa.so ExaOffscreenMerge [self]
+-------------------------------------------------------------------------------
+3 0.0855 libexa.so exaPolySegment
+ 31 91.1765 libexa.so exaPolyFillRect
+ 3 8.8235 libexa.so exaPolySegment [self]
+-------------------------------------------------------------------------------
+2 0.0570 libexa.so exaRasterizeTrapezoid
+ 5589 68.0507 libfb.so fbRasterizeTrapezoid
+ 2617 31.8641 libexa.so exaPrepareAccess
+ 2 0.0244 libfb.so image_from_pict
+ 2 0.0244 libexa.so exaRasterizeTrapezoid [self]
+ 1 0.0122 libexa.so .plt
+ 1 0.0122 libexa.so exaFinishAccess
+ 1 0.0122 libexa.so exaPixmapDirty
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaRasterizeTrapezoid
+1 0.0285 libexa.so exaFinishAccess
+ 1 100.000 libexa.so exaFinishAccess [self]
+-------------------------------------------------------------------------------
+ 2617 100.000 libexa.so exaRasterizeTrapezoid
+1 0.0285 libexa.so exaPrepareAccess
+ 2616 99.9618 libexa.so exaWaitSync
+ 1 0.0382 libexa.so exaPrepareAccess [self]
+-------------------------------------------------------------------------------
+ 8 17.7778 libexa.so exaPixmapDirty
+ 37 82.2222 libexa.so exaTryDriverComposite
+0 0 Xorg .plt
+ 0 0 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaGlyphs
+0 0 Xorg ChangePicture
+ 0 0 Xorg ChangePicture [self]
+-------------------------------------------------------------------------------
+ 24 100.000 libexa.so exaGlyphs
+0 0 Xorg CreatePicture
+ 0 0 Xorg CreatePicture [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so exaCreatePixmap
+0 0 Xorg DamageCreate
+ 0 0 Xorg DamageCreate [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libexa.so exaDoMigration
+ 2 66.6667 libexa.so exaMoveInPixmap
+0 0 Xorg DamageEmpty
+ 0 0 Xorg DamageEmpty [self]
+-------------------------------------------------------------------------------
+ 2 20.0000 libexa.so exaPixmapDirty
+ 2 20.0000 libexa.so exaComposite
+ 6 60.0000 libexa.so exaGlyphs
+0 0 Xorg DamageRegion
+ 0 0 Xorg DamageRegion [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so exaCreatePixmap
+0 0 Xorg DamageRegister
+ 0 0 Xorg DamageRegister [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libexa.so exaCreatePixmap
+ 1 50.0000 libexa.so exaGlyphs
+0 0 Xorg DamageSetReportAfterOp
+ 0 0 Xorg DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 27 100.000 libexa.so exaGlyphs
+0 0 Xorg FreePicture
+ 0 0 Xorg FreePicture [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so exaGlyphs
+0 0 Xorg FreeScratchGC
+ 0 0 Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so exaGlyphs
+0 0 Xorg GetScratchPixmapHeader
+ 0 0 Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 24 100.000 libexa.so exaGlyphs
+0 0 Xorg ValidateGC
+ 0 0 Xorg ValidateGC [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libexa.so exaGlyphs
+0 0 Xorg ValidatePicture
+ 0 0 Xorg ValidatePicture [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libexa.so exaCreatePixmap
+ 4 80.0000 libexa.so exaOffscreenAlloc
+0 0 Xorg Xalloc
+ 0 0 Xorg Xalloc [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libexa.so exaDestroyPixmap
+ 4 80.0000 libexa.so ExaOffscreenMerge
+0 0 Xorg Xfree
+ 0 0 Xorg Xfree [self]
+-------------------------------------------------------------------------------
+ 1 4.5455 libexa.so exaMoveInPixmap
+ 2 9.0909 libexa.so exaOffscreenAlloc
+ 6 27.2727 libexa.so exaPixmapDirty
+ 6 27.2727 libexa.so exaTryDriverComposite
+ 7 31.8182 libexa.so exaGlyphs
+0 0 Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaGlyphs
+0 0 Xorg damageInsertDamage
+ 0 0 Xorg damageInsertDamage [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libexa.so exaGlyphs
+0 0 Xorg damagePolyFillRect
+ 0 0 Xorg damagePolyFillRect [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaGlyphs
+0 0 Xorg damageValidateGC
+ 0 0 Xorg damageValidateGC [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so exaTryDriverComposite
+0 0 Xorg miCompositeSourceValidate
+ 0 0 Xorg miCompositeSourceValidate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaValidateGC
+0 0 Xorg miComputeCompositeClip
+ 0 0 Xorg miComputeCompositeClip [self]
+-------------------------------------------------------------------------------
+ 6 0.9554 libexa.so exaComposite
+ 622 99.0446 libexa.so exaTryDriverComposite
+0 0 Xorg miComputeCompositeRegion
+ 0 0 Xorg miComputeCompositeRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaGlyphs
+0 0 Xorg miCreatePicture
+ 0 0 Xorg miCreatePicture [self]
+-------------------------------------------------------------------------------
+ 14 100.000 libexa.so exaGlyphs
+0 0 Xorg miGlyphExtents
+ 0 0 Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miIntersect
+ 0 0 Xorg miIntersect [self]
+-------------------------------------------------------------------------------
+ 55 100.000 libexa.so exaGlyphs
+0 0 Xorg miModifyPixmapHeader
+ 0 0 Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 29 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miRectsToRegion
+ 0 0 Xorg miRectsToRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miRegionCreate
+ 0 0 Xorg miRegionCreate [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miRegionDestroy
+ 0 0 Xorg miRegionDestroy [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miRegionValidate
+ 0 0 Xorg miRegionValidate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaCopyArea
+0 0 Xorg miSpriteSourceValidate
+ 0 0 Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miTranslateRegion
+ 0 0 Xorg miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 2 0.4630 libexa.so exaComposite
+ 6 1.3889 libexa.so exaGlyphs
+ 8 1.8519 libexa.so exaMoveInPixmap
+ 416 96.2963 libexa.so exaPixmapDirty
+0 0 Xorg miUnion
+ 0 0 Xorg miUnion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaTryDriverComposite
+0 0 anon (tgid:28734 range:0xb7f37000-0xb7f38000) (no symbols)
+ 0 0 anon (tgid:28734 range:0xb7f37000-0xb7f38000) (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 1.4085 libexa.so exaWaitSync
+ 3 4.2254 libexa.so exaFillRegionSolid
+ 67 94.3662 libexa.so exaTryDriverComposite
+0 0 intel_drv.so .plt
+ 0 0 intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 14 100.000 libexa.so exaFillRegionSolid
+0 0 intel_drv.so I830EXAPrepareSolid
+ 0 0 intel_drv.so I830EXAPrepareSolid [self]
+-------------------------------------------------------------------------------
+ 2 5.1282 libexa.so exaPolyFillRect
+ 37 94.8718 libexa.so exaFillRegionSolid
+0 0 intel_drv.so I830EXASolid
+ 0 0 intel_drv.so I830EXASolid [self]
+-------------------------------------------------------------------------------
+ 31418 100.000 libexa.so exaWaitSync
+0 0 intel_drv.so I830EXASync
+ 0 0 intel_drv.so I830EXASync [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so exaWaitSync
+0 0 intel_drv.so I830Sync
+ 0 0 intel_drv.so I830Sync [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so IntelEmitInvarientState
+ 0 0 intel_drv.so IntelEmitInvarientState [self]
+-------------------------------------------------------------------------------
+ 2 7.4074 libexa.so exaWaitSync
+ 4 14.8148 libexa.so exaFillRegionSolid
+ 4 14.8148 libexa.so exaComposite
+ 17 62.9630 libexa.so exaTryDriverComposite
+0 0 intel_drv.so __i686.get_pc_thunk.bx
+ 0 0 intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i830MarkSync
+ 0 0 intel_drv.so i830MarkSync [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i830WaitSync
+ 0 0 intel_drv.so i830WaitSync [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so exaComposite
+0 0 intel_drv.so i830_done_composite
+ 0 0 intel_drv.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+ 30 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i830_get_transformed_coordinates
+ 0 0 intel_drv.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+ 5 3.7313 libexa.so exaGlyphs
+ 63 47.0149 libexa.so exaTryDriverComposite
+ 66 49.2537 libexa.so exaComposite
+0 0 intel_drv.so i965_check_composite
+ 0 0 intel_drv.so i965_check_composite [self]
+-------------------------------------------------------------------------------
+ 7 50.0000 libexa.so exaTryDriverComposite
+ 7 50.0000 libexa.so exaComposite
+0 0 intel_drv.so i965_check_composite_texture
+ 0 0 intel_drv.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+ 656 21.1136 libexa.so exaComposite
+ 2451 78.8864 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_composite
+ 0 0 intel_drv.so i965_composite [self]
+-------------------------------------------------------------------------------
+ 17 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_get_card_format
+ 0 0 intel_drv.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+ 2 20.0000 libexa.so exaComposite
+ 8 80.0000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_get_dest_format
+ 0 0 intel_drv.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+ 3 0.0067 libexa.so exaComposite
+ 44587 99.9933 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_prepare_composite
+ 0 0 intel_drv.so i965_prepare_composite [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so intel_get_pixmap_offset
+ 0 0 intel_drv.so intel_get_pixmap_offset [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so intel_get_pixmap_pitch
+ 0 0 intel_drv.so intel_get_pixmap_pitch [self]
+-------------------------------------------------------------------------------
+ 15 100.000 libexa.so exaTryDriverComposite
+0 0 libc-2.5.so memcpy
+ 0 0 libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 43 100.000 libexa.so exaGlyphs
+0 0 libextmod.so XvDestroyPixmap
+ 0 0 libextmod.so XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libexa.so exaCreatePixmap
+ 1 50.0000 libexa.so exaCopyArea
+0 0 libfb.so .plt
+ 0 0 libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 4 36.3636 libexa.so exaDestroyPixmap
+ 7 63.6364 libexa.so exaCopyArea
+0 0 libfb.so __i686.get_pc_thunk.bx
+ 0 0 libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaValidateGC
+0 0 libfb.so __i686.get_pc_thunk.cx
+ 0 0 libfb.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so exaCopyArea
+0 0 libfb.so fbCopyRegion
+ 0 0 libfb.so fbCopyRegion [self]
+-------------------------------------------------------------------------------
+ 1 0.9524 libexa.so exaGlyphs
+ 104 99.0476 libexa.so exaCreatePixmap
+0 0 libfb.so fbCreatePixmap
+ 0 0 libfb.so fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libexa.so exaDestroyPixmap
+0 0 libfb.so fbDestroyPixmap
+ 0 0 libfb.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 0.3185 libexa.so exaGlyphs
+ 313 99.6815 libexa.so exaCopyArea
+0 0 libfb.so fbDoCopy
+ 0 0 libfb.so fbDoCopy [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaValidateGC
+0 0 libfb.so fbGetGCPrivateIndex
+ 0 0 libfb.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 5589 100.000 libexa.so exaRasterizeTrapezoid
+0 0 libfb.so fbRasterizeTrapezoid
+ 0 0 libfb.so fbRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 55 100.000 libexa.so exaValidateGC
+0 0 libfb.so fbValidateGC
+ 0 0 libfb.so fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaRasterizeTrapezoid
+0 0 libfb.so image_from_pict
+ 0 0 libfb.so image_from_pict [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so exaPolyFillRect
+0 0 libpixman.so.0.0.0 pixman_region_fini
+ 0 0 libpixman.so.0.0.0 pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_init
+ 0 0 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 14 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 31 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaMoveInPixmap
+0 0 libpixman.so.0.0.0 pixman_region_union
+ 0 0 libpixman.so.0.0.0 pixman_region_union [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+576 16.4196 __i686.get_pc_thunk.bx
+452 12.8848 ExaOffscreenMarkUsed
+354 10.0912 exaComposite
+348 9.9202 exaTryDriverComposite
+267 7.6112 exaPixmapIsOffscreen
+185 5.2737 exaGlyphs
+184 5.2452 .plt
+166 4.7320 exaDoMigration
+133 3.7913 exaMoveInPixmap
+111 3.1642 exaGetDrawablePixmap
+102 2.9076 exaWaitSync
+90 2.5656 exaPixmapDirty
+88 2.5086 exaMarkSync
+69 1.9669 exaGetOffscreenPixmap
+68 1.9384 exaOffscreenAlloc
+52 1.4823 exaGetDrawableDeltas
+47 1.3398 exaCopyNtoN
+45 1.2828 exaPixmapIsPinned
+35 0.9977 exaGetPixmapOffset
+33 0.9407 exaCopyArea
+19 0.5416 exaCreatePixmap
+19 0.5416 exaPolyFillRect
+14 0.3991 __i686.get_pc_thunk.cx
+11 0.3136 exaOffscreenFree
+8 0.2281 exaValidateGC
+7 0.1995 exaFillRegionSolid
+7 0.1995 exaGetPixmapPitch
+4 0.1140 exaDestroyPixmap
+4 0.1140 exaOpReadsDestination
+3 0.0855 ExaOffscreenMerge
+3 0.0855 exaPolySegment
+2 0.0570 exaRasterizeTrapezoid
+1 0.0285 exaFinishAccess
+1 0.0285 exaPrepareAccess
--- /dev/null
+/*
+ * Command line: opannotate --source
+ *
+ * Interpretation of command line:
+ * Output annotated source file with samples
+ * Output all files
+ *
+ * CPU: Core 2, speed 2133.49 MHz (estimated)
+ * Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+ */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/driver/xf86-video-intel/src/i830_accel.c"
+ *
+ * 31562 34.3831
+ */
+
+
+ :/*
+ : * XXX So far, for GXxor this is about 40% of the speed of SW, but CPU
+ : * utilisation falls from 95% to < 5%.
+ : */
+ :
+ :#ifdef HAVE_CONFIG_H
+ :#include "config.h"
+ :#endif
+ :
+ :/**************************************************************************
+ :
+ :Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+ :All Rights Reserved.
+ :
+ :Permission is hereby granted, free of charge, to any person obtaining a
+ :copy of this software and associated documentation files (the
+ :"Software"), to deal in the Software without restriction, including
+ :without limitation the rights to use, copy, modify, merge, publish,
+ :distribute, sub license, and/or sell copies of the Software, and to
+ :permit persons to whom the Software is furnished to do so, subject to
+ :the following conditions:
+ :
+ :The above copyright notice and this permission notice (including the
+ :next paragraph) shall be included in all copies or substantial portions
+ :of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ :OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ :MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ :IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ :ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ :TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ :SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :**************************************************************************/
+ :/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_accel.c,v 1.8 2003/04/24 18:00:24 eich Exp $ */
+ :
+ :/*
+ : * Reformatted with GNU indent (2.2.8), using the following options:
+ : *
+ : * -bad -bap -c41 -cd0 -ncdb -ci6 -cli0 -cp0 -ncs -d0 -di3 -i3 -ip3 -l78
+ : * -lp -npcs -psl -sob -ss -br -ce -sc -hnl
+ : *
+ : * This provides a good match with the original i810 code and preferred
+ : * XFree86 formatting conventions.
+ : *
+ : * When editing this driver, please follow the existing formatting, and edit
+ : * with <TAB> characters expanded at 8-column intervals.
+ : */
+ :
+ :/*
+ : * Authors:
+ : * Keith Whitwell <keith@tungstengraphics.com>
+ : *
+ : */
+ :
+ :#include "xf86.h"
+ :#include "xaarop.h"
+ :#include "i830.h"
+ :#include "i810_reg.h"
+ :#include "i830_debug.h"
+ :
+ :unsigned long
+ :intel_get_pixmap_offset(PixmapPtr pPix)
+ 15 0.0163 :{ /* intel_get_pixmap_offset total: 77 0.0839 */
+ : ScreenPtr pScreen = pPix->drawable.pScreen;
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ 27 0.0294 : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ :#ifdef I830_USE_EXA
+ 24 0.0261 : if (pI830->useEXA)
+ 4 0.0044 : return exaGetPixmapOffset(pPix);
+ :#endif
+ : return (unsigned long)pPix->devPrivate.ptr - (unsigned long)pI830->FbBase;
+ 7 0.0076 :}
+ :
+ :unsigned long
+ :intel_get_pixmap_pitch(PixmapPtr pPix)
+ 12 0.0131 :{ /* intel_get_pixmap_pitch total: 83 0.0904 */
+ : ScreenPtr pScreen = pPix->drawable.pScreen;
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ :#ifdef I830_USE_EXA
+ 57 0.0621 : if (pI830->useEXA)
+ 4 0.0044 : return exaGetPixmapPitch(pPix);
+ :#endif
+ :#ifdef I830_USE_XAA
+ : return (unsigned long)pPix->devKind;
+ :#endif
+ 10 0.0109 :}
+ :
+ :int
+ :I830WaitLpRing(ScrnInfoPtr pScrn, int n, int timeout_millis)
+ 10 0.0109 :{ /* I830WaitLpRing total: 31130 33.9125 */
+ 2 0.0022 : I830Ptr pI830 = I830PTR(pScrn);
+ 1 0.0011 : I830RingBuffer *ring = pI830->LpRing;
+ : int iters = 0;
+ : unsigned int start = 0;
+ : unsigned int now = 0;
+ : int last_head = 0;
+ : unsigned int first = 0;
+ :
+ : /* If your system hasn't moved the head pointer in 2 seconds, I'm going to
+ : * call it crashed.
+ : */
+ : if (timeout_millis == 0)
+ : timeout_millis = 2000;
+ :
+ : if (I810_DEBUG & DEBUG_VERBOSE_ACCEL) {
+ : ErrorF("I830WaitLpRing %d\n", n);
+ : first = GetTimeInMillis();
+ : }
+ :
+ 383 0.4172 : while (ring->space < n) {
+ 217 0.2364 : ring->head = INREG(LP_RING + RING_HEAD) & I830_HEAD_MASK;
+ 30204 32.9038 : ring->space = ring->head - (ring->tail + 8);
+ :
+ : if (ring->space < 0)
+ 145 0.1580 : ring->space += ring->mem->size;
+ :
+ 93 0.1013 : iters++;
+ : if ((iters & 0xfff) == 0) {
+ : now = GetTimeInMillis();
+ : if (start == 0 || now < start || ring->head != last_head) {
+ : if (I810_DEBUG & DEBUG_VERBOSE_ACCEL)
+ : if (now > start)
+ : ErrorF("space: %d wanted %d\n", ring->space, n);
+ : start = now;
+ : last_head = ring->head;
+ : } else if (now - start > timeout_millis) {
+ : ErrorF("Error in I830WaitLpRing(), timeout for %d seconds\n",
+ : timeout_millis/1000);
+ : if (IS_I965G(pI830))
+ : i965_dump_error_state(pScrn);
+ : else
+ : i830_dump_error_state(pScrn);
+ : ErrorF("space: %d wanted %d\n", ring->space, n);
+ :#ifdef XF86DRI
+ : if (pI830->directRenderingEnabled) {
+ : DRIUnlock(screenInfo.screens[pScrn->scrnIndex]);
+ : DRICloseScreen(screenInfo.screens[pScrn->scrnIndex]);
+ : }
+ :#endif
+ :#ifdef I830_USE_XAA
+ : pI830->AccelInfoRec = NULL; /* Stops recursive behavior */
+ :#endif
+ :#ifdef I830_USE_EXA
+ : pI830->EXADriverPtr = NULL;
+ :#endif
+ 1 0.0011 : FatalError("lockup\n");
+ : }
+ : }
+ : DELAY(10);
+ : }
+ :
+ : if (I810_DEBUG & DEBUG_VERBOSE_ACCEL) {
+ : now = GetTimeInMillis();
+ : if (now - first) {
+ : ErrorF("Elapsed %u ms\n", now - first);
+ : ErrorF("space: %d wanted %d\n", ring->space, n);
+ : }
+ : }
+ :
+ : return iters;
+ 74 0.0806 :}
+ :
+ :void
+ :I830Sync(ScrnInfoPtr pScrn)
+ 6 0.0065 :{ /* I830Sync total: 272 0.2963 */
+ 2 0.0022 : I830Ptr pI830 = I830PTR(pScrn);
+ : int flags = MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE;
+ :
+ : if (I810_DEBUG & (DEBUG_VERBOSE_ACCEL | DEBUG_VERBOSE_SYNC))
+ : ErrorF("I830Sync\n");
+ :
+ :#ifdef XF86DRI
+ : /* VT switching tries to do this.
+ : */
+ : if (!pI830->LockHeld && pI830->directRenderingEnabled) {
+ : return;
+ : }
+ :#endif
+ :
+ 1 0.0011 : if (pI830->entityPrivate && !pI830->entityPrivate->RingRunning) return;
+ :
+ 6 0.0065 : if (IS_I965G(pI830))
+ : flags = 0;
+ :
+ : /* Send a flush instruction and then wait till the ring is empty.
+ : * This is stronger than waiting for the blitter to finish as it also
+ : * flushes the internal graphics caches.
+ : */
+ :
+ : {
+ 3 0.0033 : BEGIN_LP_RING(2);
+ 11 0.0120 : OUT_RING(MI_FLUSH | flags);
+ 11 0.0120 : OUT_RING(MI_NOOP); /* pad to quadword */
+ 17 0.0185 : ADVANCE_LP_RING();
+ : }
+ :
+ 168 0.1830 : I830WaitLpRing(pScrn, pI830->LpRing->mem->size - 8, 0);
+ :
+ 37 0.0403 : pI830->LpRing->space = pI830->LpRing->mem->size - 8;
+ 1 0.0011 : pI830->nextColorExpandBuf = 0;
+ 9 0.0098 :}
+ :
+ :void
+ :I830EmitFlush(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : int flags = MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE;
+ :
+ : if (IS_I965G(pI830))
+ : flags = 0;
+ :
+ : {
+ : BEGIN_LP_RING(2);
+ : OUT_RING(MI_FLUSH | flags);
+ : OUT_RING(MI_NOOP); /* pad to quadword */
+ : ADVANCE_LP_RING();
+ : }
+ :}
+ :
+ :void
+ :I830SelectBuffer(ScrnInfoPtr pScrn, int buffer)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : switch (buffer) {
+ :#ifdef XF86DRI
+ : case I830_SELECT_BACK:
+ : pI830->bufferOffset = pI830->back_buffer->offset;
+ : break;
+ : case I830_SELECT_THIRD:
+ : pI830->bufferOffset = pI830->third_buffer->offset;
+ : break;
+ : case I830_SELECT_DEPTH:
+ : pI830->bufferOffset = pI830->depth_buffer->offset;
+ : break;
+ :#endif
+ : default:
+ : case I830_SELECT_FRONT:
+ : pI830->bufferOffset = pScrn->fbOffset;
+ : break;
+ : }
+ :
+ : if (I810_DEBUG & DEBUG_VERBOSE_ACCEL)
+ : ErrorF("I830SelectBuffer %d --> offset %x\n",
+ : buffer, pI830->bufferOffset);
+ :}
+ :
+ :void
+ :I830RefreshRing(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : pI830->LpRing->head = INREG(LP_RING + RING_HEAD) & I830_HEAD_MASK;
+ : pI830->LpRing->tail = INREG(LP_RING + RING_TAIL);
+ : pI830->LpRing->space = pI830->LpRing->head - (pI830->LpRing->tail + 8);
+ : if (pI830->LpRing->space < 0)
+ : pI830->LpRing->space += pI830->LpRing->mem->size;
+ : i830MarkSync(pScrn);
+ :}
+ :
+ :/* The following function sets up the supported acceleration. Call it
+ : * from the FbInit() function in the SVGA driver, or before ScreenInit
+ : * in a monolithic server.
+ : */
+ :Bool
+ :I830AccelInit(ScreenPtr pScreen)
+ :{
+ :#ifdef I830_USE_EXA
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : if (pI830->useEXA)
+ : return I830EXAInit(pScreen);
+ :#endif
+ :#ifdef I830_USE_XAA
+ : return I830XAAInit(pScreen);
+ :#endif
+ : return FALSE;
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/driver/xf86-video-intel/src/i965_render.c"
+ *
+ * 12731 13.8689
+ */
+
+
+ :/*
+ : * Copyright © 2006 Intel Corporation
+ : *
+ : * Permission is hereby granted, free of charge, to any person obtaining a
+ : * copy of this software and associated documentation files (the "Software"),
+ : * to deal in the Software without restriction, including without limitation
+ : * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ : * and/or sell copies of the Software, and to permit persons to whom the
+ : * Software is furnished to do so, subject to the following conditions:
+ : *
+ : * The above copyright notice and this permission notice (including the next
+ : * paragraph) shall be included in all copies or substantial portions of the
+ : * Software.
+ : *
+ : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ : * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ : * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ : * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ : * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ : * SOFTWARE.
+ : *
+ : * Authors:
+ : * Wang Zhenyu <zhenyu.z.wang@intel.com>
+ : * Eric Anholt <eric@anholt.net>
+ : *
+ : */
+ :
+ :#ifdef HAVE_CONFIG_H
+ :#include "config.h"
+ :#endif
+ :
+ :#include <assert.h>
+ :#include "xf86.h"
+ :#include "i830.h"
+ :#include "i915_reg.h"
+ :
+ :/* bring in brw structs */
+ :#include "brw_defines.h"
+ :#include "brw_structs.h"
+ :
+ :#ifdef I830DEBUG
+ :#define DEBUG_I830FALLBACK 1
+ :#endif
+ :
+ :#ifdef DEBUG_I830FALLBACK
+ :#define I830FALLBACK(s, arg...) \
+ :do { \
+ : DPRINTF(PFX, "EXA fallback: " s "\n", ##arg); \
+ : return FALSE; \
+ :} while(0)
+ :#else
+ :#define I830FALLBACK(s, arg...) \
+ :do { \
+ : return FALSE; \
+ :} while(0)
+ :#endif
+ :
+ :struct blendinfo {
+ : Bool dst_alpha;
+ : Bool src_alpha;
+ : CARD32 src_blend;
+ : CARD32 dst_blend;
+ :};
+ :
+ :struct formatinfo {
+ : int fmt;
+ : CARD32 card_fmt;
+ :};
+ :
+ :// refer vol2, 3d rasterization 3.8.1
+ :
+ :/* defined in brw_defines.h */
+ :static struct blendinfo i965_blend_op[] = {
+ : /* Clear */
+ : {0, 0, BRW_BLENDFACTOR_ZERO, BRW_BLENDFACTOR_ZERO},
+ : /* Src */
+ : {0, 0, BRW_BLENDFACTOR_ONE, BRW_BLENDFACTOR_ZERO},
+ : /* Dst */
+ : {0, 0, BRW_BLENDFACTOR_ZERO, BRW_BLENDFACTOR_ONE},
+ : /* Over */
+ : {0, 1, BRW_BLENDFACTOR_ONE, BRW_BLENDFACTOR_INV_SRC_ALPHA},
+ : /* OverReverse */
+ : {1, 0, BRW_BLENDFACTOR_INV_DST_ALPHA, BRW_BLENDFACTOR_ONE},
+ : /* In */
+ : {1, 0, BRW_BLENDFACTOR_DST_ALPHA, BRW_BLENDFACTOR_ZERO},
+ : /* InReverse */
+ : {0, 1, BRW_BLENDFACTOR_ZERO, BRW_BLENDFACTOR_SRC_ALPHA},
+ : /* Out */
+ : {1, 0, BRW_BLENDFACTOR_INV_DST_ALPHA, BRW_BLENDFACTOR_ZERO},
+ : /* OutReverse */
+ : {0, 1, BRW_BLENDFACTOR_ZERO, BRW_BLENDFACTOR_INV_SRC_ALPHA},
+ : /* Atop */
+ : {1, 1, BRW_BLENDFACTOR_DST_ALPHA, BRW_BLENDFACTOR_INV_SRC_ALPHA},
+ : /* AtopReverse */
+ : {1, 1, BRW_BLENDFACTOR_INV_DST_ALPHA, BRW_BLENDFACTOR_SRC_ALPHA},
+ : /* Xor */
+ : {1, 1, BRW_BLENDFACTOR_INV_DST_ALPHA, BRW_BLENDFACTOR_INV_SRC_ALPHA},
+ : /* Add */
+ : {0, 0, BRW_BLENDFACTOR_ONE, BRW_BLENDFACTOR_ONE},
+ :};
+ :
+ :/* FIXME: surface format defined in brw_defines.h, shared Sampling engine
+ : * 1.7.2
+ : */
+ :static struct formatinfo i965_tex_formats[] = {
+ : {PICT_a8r8g8b8, BRW_SURFACEFORMAT_B8G8R8A8_UNORM },
+ : {PICT_x8r8g8b8, BRW_SURFACEFORMAT_B8G8R8X8_UNORM },
+ : {PICT_a8b8g8r8, BRW_SURFACEFORMAT_R8G8B8A8_UNORM },
+ : {PICT_x8b8g8r8, BRW_SURFACEFORMAT_R8G8B8X8_UNORM },
+ : {PICT_r5g6b5, BRW_SURFACEFORMAT_B5G6R5_UNORM },
+ : {PICT_a1r5g5b5, BRW_SURFACEFORMAT_B5G5R5A1_UNORM },
+ : {PICT_a8, BRW_SURFACEFORMAT_A8_UNORM },
+ :};
+ :
+ :static void i965_get_blend_cntl(int op, PicturePtr pMask, CARD32 dst_format,
+ : CARD32 *sblend, CARD32 *dblend)
+ :{
+ :
+ : *sblend = i965_blend_op[op].src_blend;
+ : *dblend = i965_blend_op[op].dst_blend;
+ :
+ : /* If there's no dst alpha channel, adjust the blend op so that we'll treat
+ : * it as always 1.
+ : */
+ : if (PICT_FORMAT_A(dst_format) == 0 && i965_blend_op[op].dst_alpha) {
+ : if (*sblend == BRW_BLENDFACTOR_DST_ALPHA)
+ : *sblend = BRW_BLENDFACTOR_ONE;
+ : else if (*sblend == BRW_BLENDFACTOR_INV_DST_ALPHA)
+ : *sblend = BRW_BLENDFACTOR_ZERO;
+ : }
+ :
+ : /* If the source alpha is being used, then we should only be in a case where
+ : * the source blend factor is 0, and the source blend value is the mask
+ : * channels multiplied by the source picture's alpha.
+ : */
+ : if (pMask && pMask->componentAlpha && PICT_FORMAT_RGB(pMask->format)
+ : && i965_blend_op[op].src_alpha) {
+ : if (*dblend == BRW_BLENDFACTOR_SRC_ALPHA) {
+ : *dblend = BRW_BLENDFACTOR_SRC_COLOR;
+ : } else if (*dblend == BRW_BLENDFACTOR_INV_SRC_ALPHA) {
+ : *dblend = BRW_BLENDFACTOR_INV_SRC_COLOR;
+ : }
+ : }
+ :
+ :}
+ :
+ :static Bool i965_get_dest_format(PicturePtr pDstPicture, CARD32 *dst_format)
+ 8 0.0087 :{ /* i965_get_dest_format total: 28 0.0305 */
+ 10 0.0109 : switch (pDstPicture->format) {
+ : case PICT_a8r8g8b8:
+ : case PICT_x8r8g8b8:
+ 1 0.0011 : *dst_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
+ : break;
+ : case PICT_r5g6b5:
+ : *dst_format = BRW_SURFACEFORMAT_B5G6R5_UNORM;
+ : break;
+ : case PICT_a1r5g5b5:
+ : *dst_format = BRW_SURFACEFORMAT_B5G5R5A1_UNORM;
+ : break;
+ : case PICT_x1r5g5b5:
+ : *dst_format = BRW_SURFACEFORMAT_B5G5R5X1_UNORM;
+ : break;
+ : /* COLR_BUF_8BIT is special for YUV surfaces. While we may end up being
+ : * able to use it depending on how the hardware implements it, disable it
+ : * for now while we don't know what exactly it does (what channel does it
+ : * read from?
+ : */
+ : /*
+ : case PICT_a8:
+ : *dst_format = COLR_BUF_8BIT;
+ : break;
+ : */
+ : case PICT_a4r4g4b4:
+ : case PICT_x4r4g4b4:
+ : *dst_format = BRW_SURFACEFORMAT_B4G4R4A4_UNORM;
+ : break;
+ : default:
+ : I830FALLBACK("Unsupported dest format 0x%x\n",
+ : (int)pDstPicture->format);
+ : }
+ :
+ : return TRUE;
+ 9 0.0098 :}
+ :
+ :static Bool i965_check_composite_texture(PicturePtr pPict, int unit)
+ 28 0.0305 :{ /* i965_check_composite_texture total: 73 0.0795 */
+ 3 0.0033 : int w = pPict->pDrawable->width;
+ : int h = pPict->pDrawable->height;
+ : int i;
+ :
+ 15 0.0163 : if ((w > 0x7ff) || (h > 0x7ff))
+ : I830FALLBACK("Picture w/h too large (%dx%d)\n", w, h);
+ :
+ : for (i = 0; i < sizeof(i965_tex_formats) / sizeof(i965_tex_formats[0]);
+ : i++)
+ : {
+ 9 0.0098 : if (i965_tex_formats[i].fmt == pPict->format)
+ : break;
+ : }
+ 7 0.0076 : if (i == sizeof(i965_tex_formats) / sizeof(i965_tex_formats[0]))
+ : I830FALLBACK("Unsupported picture format 0x%x\n",
+ : (int)pPict->format);
+ :
+ 4 0.0044 : if (pPict->repeat && pPict->repeatType != RepeatNormal)
+ : I830FALLBACK("extended repeat (%d) not supported\n",
+ : pPict->repeatType);
+ :
+ : if (pPict->filter != PictFilterNearest &&
+ : pPict->filter != PictFilterBilinear)
+ : {
+ : I830FALLBACK("Unsupported filter 0x%x\n", pPict->filter);
+ : }
+ :
+ : return TRUE;
+ 7 0.0076 :}
+ :
+ :Bool
+ :i965_check_composite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
+ : PicturePtr pDstPicture)
+ 9 0.0098 :{ /* i965_check_composite total: 54 0.0588 */
+ : CARD32 tmp1;
+ :
+ : /* Check for unsupported compositing operations. */
+ : if (op >= sizeof(i965_blend_op) / sizeof(i965_blend_op[0]))
+ : I830FALLBACK("Unsupported Composite op 0x%x\n", op);
+ :
+ 4 0.0044 : if (pMaskPicture && pMaskPicture->componentAlpha &&
+ : PICT_FORMAT_RGB(pMaskPicture->format)) {
+ : /* Check if it's component alpha that relies on a source alpha and on
+ : * the source value. We can only get one of those into the single
+ : * source value that we get to blend with.
+ : */
+ 11 0.0120 : if (i965_blend_op[op].src_alpha &&
+ : (i965_blend_op[op].src_blend != BRW_BLENDFACTOR_ZERO))
+ : {
+ : I830FALLBACK("Component alpha not supported with source "
+ : "alpha and source value blending.\n");
+ : }
+ : }
+ :
+ 9 0.0098 : if (!i965_check_composite_texture(pSrcPicture, 0))
+ : I830FALLBACK("Check Src picture texture\n");
+ 2 0.0022 : if (pMaskPicture != NULL && !i965_check_composite_texture(pMaskPicture, 1))
+ : I830FALLBACK("Check Mask picture texture\n");
+ :
+ 9 0.0098 : if (!i965_get_dest_format(pDstPicture, &tmp1))
+ : I830FALLBACK("Get Color buffer format\n");
+ :
+ : return TRUE;
+ :
+ 10 0.0109 :}
+ :
+ :#define ALIGN(i,m) (((i) + (m) - 1) & ~((m) - 1))
+ :#define MIN(a,b) ((a) < (b) ? (a) : (b))
+ :#define BRW_GRF_BLOCKS(nreg) ((nreg + 15) / 16 - 1)
+ :
+ :static int urb_vs_start, urb_vs_size;
+ :static int urb_gs_start, urb_gs_size;
+ :static int urb_clip_start, urb_clip_size;
+ :static int urb_sf_start, urb_sf_size;
+ :static int urb_cs_start, urb_cs_size;
+ :
+ :static struct brw_surface_state *dest_surf_state, dest_surf_state_local;
+ :static struct brw_surface_state *src_surf_state, src_surf_state_local;
+ :static struct brw_surface_state *mask_surf_state, mask_surf_state_local;
+ :static struct brw_sampler_state *src_sampler_state, src_sampler_state_local;
+ :static struct brw_sampler_state *mask_sampler_state, mask_sampler_state_local;
+ :static struct brw_sampler_default_color *default_color_state;
+ :
+ :static struct brw_vs_unit_state *vs_state, vs_state_local;
+ :static struct brw_sf_unit_state *sf_state, sf_state_local;
+ :static struct brw_wm_unit_state *wm_state, wm_state_local;
+ :static struct brw_cc_unit_state *cc_state, cc_state_local;
+ :static struct brw_cc_viewport *cc_viewport;
+ :
+ :static struct brw_instruction *sf_kernel;
+ :static struct brw_instruction *ps_kernel;
+ :static struct brw_instruction *sip_kernel;
+ :
+ :static CARD32 *binding_table;
+ :static int binding_table_entries;
+ :
+ :static int dest_surf_offset, src_surf_offset, mask_surf_offset;
+ :static int src_sampler_offset, mask_sampler_offset,vs_offset;
+ :static int sf_offset, wm_offset, cc_offset, vb_offset, cc_viewport_offset;
+ :static int sf_kernel_offset, ps_kernel_offset, sip_kernel_offset;
+ :static int wm_scratch_offset;
+ :static int binding_table_offset;
+ :static int default_color_offset;
+ :static int next_offset, total_state_size;
+ :static char *state_base;
+ :static int state_base_offset;
+ :static float *vb;
+ :static int vb_size = (4 * 4) * 4 ; /* 4 DWORDS per vertex*/
+ :
+ :static CARD32 src_blend, dst_blend;
+ :
+ :static const CARD32 sip_kernel_static[][4] = {
+ :/* wait (1) a0<1>UW a145<0,1,0>UW { align1 + } */
+ : { 0x00000030, 0x20000108, 0x00001220, 0x00000000 },
+ :/* nop (4) g0<1>UD { align1 + } */
+ : { 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
+ :/* nop (4) g0<1>UD { align1 + } */
+ : { 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
+ :/* nop (4) g0<1>UD { align1 + } */
+ : { 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
+ :/* nop (4) g0<1>UD { align1 + } */
+ : { 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
+ :/* nop (4) g0<1>UD { align1 + } */
+ : { 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
+ :/* nop (4) g0<1>UD { align1 + } */
+ : { 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
+ :/* nop (4) g0<1>UD { align1 + } */
+ : { 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
+ :/* nop (4) g0<1>UD { align1 + } */
+ : { 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
+ :/* nop (4) g0<1>UD { align1 + } */
+ : { 0x0040007e, 0x20000c21, 0x00690000, 0x00000000 },
+ :};
+ :
+ :/*
+ : * this program computes dA/dx and dA/dy for the texture coordinates along
+ : * with the base texture coordinate. It was extracted from the Mesa driver
+ : */
+ :
+ :#define SF_KERNEL_NUM_GRF 16
+ :#define SF_MAX_THREADS 1
+ :
+ :static const CARD32 sf_kernel_static[][4] = {
+ :#include "exa_sf_prog.h"
+ :};
+ :
+ :static const CARD32 sf_kernel_static_mask[][4] = {
+ :#include "exa_sf_mask_prog.h"
+ :};
+ :
+ :static const CARD32 sf_kernel_static_rotation[][4] = {
+ :#include "exa_sf_rotation_prog.h"
+ :};
+ :
+ :/* ps kernels */
+ :#define PS_KERNEL_NUM_GRF 32
+ :#define PS_MAX_THREADS 32
+ :
+ :static const CARD32 ps_kernel_static_nomask [][4] = {
+ :#include "exa_wm_nomask_prog.h"
+ :};
+ :
+ :static const CARD32 ps_kernel_static_maskca [][4] = {
+ :#include "exa_wm_maskca_prog.h"
+ :};
+ :
+ :static const CARD32 ps_kernel_static_maskca_srcalpha [][4] = {
+ :#include "exa_wm_maskca_srcalpha_prog.h"
+ :};
+ :
+ :static const CARD32 ps_kernel_static_masknoca [][4] = {
+ :#include "exa_wm_masknoca_prog.h"
+ :};
+ :
+ :static const CARD32 ps_kernel_static_rotation [][4] = {
+ :#include "exa_wm_rotation_prog.h"
+ :};
+ :
+ :static CARD32
+ :i965_get_card_format(PicturePtr pPict)
+ 27 0.0294 :{ /* i965_get_card_format total: 32 0.0349 */
+ : int i;
+ :
+ 4 0.0044 : for (i = 0; i < sizeof(i965_tex_formats) / sizeof(i965_tex_formats[0]);
+ : i++)
+ : {
+ 1 0.0011 : if (i965_tex_formats[i].fmt == pPict->format)
+ : break;
+ : }
+ : return i965_tex_formats[i].card_fmt;
+ :}
+ :
+ :static Bool
+ :i965_check_rotation_transform(PictTransformPtr t)
+ :{
+ : /* XXX this is arbitrary */
+ : int a, b;
+ : a = xFixedToInt(t->matrix[0][1]);
+ : b = xFixedToInt(t->matrix[1][0]);
+ : if (a == -1 && b == 1)
+ : return TRUE;
+ : else if (a == 1 && b == -1)
+ : return TRUE;
+ : else
+ : return FALSE;
+ :}
+ :
+ :Bool
+ :i965_prepare_composite(int op, PicturePtr pSrcPicture,
+ : PicturePtr pMaskPicture, PicturePtr pDstPicture,
+ : PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
+ 3 0.0033 :{ /* i965_prepare_composite total: 9782 10.6564 */
+ 29 0.0316 : ScrnInfoPtr pScrn = xf86Screens[pSrcPicture->pDrawable->pScreen->myNum];
+ 7 0.0076 : I830Ptr pI830 = I830PTR(pScrn);
+ : CARD32 src_offset, src_pitch;
+ : CARD32 mask_offset = 0, mask_pitch = 0;
+ : CARD32 dst_format, dst_offset, dst_pitch;
+ : Bool rotation_program = FALSE;
+ :
+ : IntelEmitInvarientState(pScrn);
+ 6 0.0065 : *pI830->last_3d = LAST_3D_RENDER;
+ :
+ 6 0.0065 : src_offset = intel_get_pixmap_offset(pSrc);
+ : src_pitch = intel_get_pixmap_pitch(pSrc);
+ 2 0.0022 : dst_offset = intel_get_pixmap_offset(pDst);
+ 3 0.0033 : dst_pitch = intel_get_pixmap_pitch(pDst);
+ : if (pMask) {
+ 2 0.0022 : mask_offset = intel_get_pixmap_offset(pMask);
+ 6 0.0065 : mask_pitch = intel_get_pixmap_pitch(pMask);
+ : }
+ 8 0.0087 : pI830->scale_units[0][0] = pSrc->drawable.width;
+ 24 0.0261 : pI830->scale_units[0][1] = pSrc->drawable.height;
+ :
+ 1 0.0011 : pI830->transform[0] = pSrcPicture->transform;
+ :
+ : if (!pMask) {
+ : pI830->transform[1] = NULL;
+ : pI830->scale_units[1][0] = -1;
+ : pI830->scale_units[1][1] = -1;
+ : if (pI830->transform[0] &&
+ : i965_check_rotation_transform(pI830->transform[0]))
+ : rotation_program = TRUE;
+ : } else {
+ : pI830->transform[1] = pMaskPicture->transform;
+ : if (pI830->transform[1])
+ : I830FALLBACK("i965 mask transform not implemented!\n");
+ 3 0.0033 : pI830->scale_units[1][0] = pMask->drawable.width;
+ 3 0.0033 : pI830->scale_units[1][1] = pMask->drawable.height;
+ : }
+ :
+ : /* setup 3d pipeline state */
+ :
+ 1 0.0011 : binding_table_entries = 2; /* default no mask */
+ :
+ : /* Set up our layout of state in framebuffer. First the general state: */
+ : next_offset = 0;
+ 1 0.0011 : vs_offset = ALIGN(next_offset, 64);
+ : next_offset = vs_offset + sizeof(*vs_state);
+ :
+ : sf_offset = ALIGN(next_offset, 32);
+ : next_offset = sf_offset + sizeof(*sf_state);
+ :
+ : wm_offset = ALIGN(next_offset, 32);
+ : next_offset = wm_offset + sizeof(*wm_state);
+ :
+ : wm_scratch_offset = ALIGN(next_offset, 1024);
+ : next_offset = wm_scratch_offset + 1024 * PS_MAX_THREADS;
+ :
+ : cc_offset = ALIGN(next_offset, 32);
+ : next_offset = cc_offset + sizeof(*cc_state);
+ :
+ : /* keep current sf_kernel, which will send one setup urb entry to
+ : * PS kernel
+ : */
+ 1 0.0011 : sf_kernel_offset = ALIGN(next_offset, 64);
+ : if (pMask)
+ : next_offset = sf_kernel_offset + sizeof (sf_kernel_static_mask);
+ : else if (rotation_program)
+ : next_offset = sf_kernel_offset + sizeof (sf_kernel_static_rotation);
+ : else
+ : next_offset = sf_kernel_offset + sizeof (sf_kernel_static);
+ :
+ : ps_kernel_offset = ALIGN(next_offset, 64);
+ : if (pMask) {
+ : if (pMaskPicture->componentAlpha &&
+ : PICT_FORMAT_RGB(pMaskPicture->format)) {
+ : if (i965_blend_op[op].src_alpha) {
+ : next_offset = ps_kernel_offset +
+ : sizeof(ps_kernel_static_maskca_srcalpha);
+ : } else {
+ : next_offset = ps_kernel_offset +
+ : sizeof(ps_kernel_static_maskca);
+ : }
+ : } else
+ 1 0.0011 : next_offset = ps_kernel_offset +
+ : sizeof(ps_kernel_static_masknoca);
+ : } else if (rotation_program) {
+ : next_offset = ps_kernel_offset + sizeof (ps_kernel_static_rotation);
+ : } else {
+ 1 0.0011 : next_offset = ps_kernel_offset + sizeof (ps_kernel_static_nomask);
+ : }
+ :
+ 13 0.0142 : sip_kernel_offset = ALIGN(next_offset, 64);
+ : next_offset = sip_kernel_offset + sizeof (sip_kernel_static);
+ :
+ : /* needed? */
+ 3 0.0033 : cc_viewport_offset = ALIGN(next_offset, 32);
+ : next_offset = cc_viewport_offset + sizeof(*cc_viewport);
+ :
+ : /* for texture sampler */
+ 3 0.0033 : src_sampler_offset = ALIGN(next_offset, 32);
+ 2 0.0022 : next_offset = src_sampler_offset + sizeof(*src_sampler_state);
+ :
+ 3 0.0033 : if (pMask) {
+ : mask_sampler_offset = ALIGN(next_offset, 32);
+ 1 0.0011 : next_offset = mask_sampler_offset + sizeof(*mask_sampler_state);
+ : }
+ : /* Align VB to native size of elements, for safety */
+ 10 0.0109 : vb_offset = ALIGN(next_offset, 8);
+ : next_offset = vb_offset + vb_size;
+ :
+ : /* And then the general state: */
+ 2 0.0022 : dest_surf_offset = ALIGN(next_offset, 32);
+ : next_offset = dest_surf_offset + sizeof(*dest_surf_state);
+ :
+ 2 0.0022 : src_surf_offset = ALIGN(next_offset, 32);
+ 1 0.0011 : next_offset = src_surf_offset + sizeof(*src_surf_state);
+ :
+ 1 0.0011 : if (pMask) {
+ 1 0.0011 : mask_surf_offset = ALIGN(next_offset, 32);
+ : next_offset = mask_surf_offset + sizeof(*mask_surf_state);
+ 3 0.0033 : binding_table_entries = 3;
+ : }
+ :
+ 3 0.0033 : binding_table_offset = ALIGN(next_offset, 32);
+ : next_offset = binding_table_offset + (binding_table_entries * 4);
+ :
+ 4 0.0044 : default_color_offset = ALIGN(next_offset, 32);
+ 2 0.0022 : next_offset = default_color_offset + sizeof(*default_color_state);
+ :
+ 3 0.0033 : total_state_size = next_offset;
+ : assert(total_state_size < pI830->exa_965_state->size);
+ :
+ 3 0.0033 : state_base_offset = pI830->exa_965_state->offset;
+ 9 0.0098 : state_base_offset = ALIGN(state_base_offset, 64);
+ : state_base = (char *)(pI830->FbBase + state_base_offset);
+ :
+ : sf_kernel = (void *)(state_base + sf_kernel_offset);
+ 1 0.0011 : ps_kernel = (void *)(state_base + ps_kernel_offset);
+ : sip_kernel = (void *)(state_base + sip_kernel_offset);
+ :
+ 1 0.0011 : cc_viewport = (void *)(state_base + cc_viewport_offset);
+ :
+ 1 0.0011 : binding_table = (void *)(state_base + binding_table_offset);
+ :
+ 2 0.0022 : vb = (void *)(state_base + vb_offset);
+ :
+ 5 0.0054 : default_color_state = (void*)(state_base + default_color_offset);
+ :
+ : /* Set up a default static partitioning of the URB, which is supposed to
+ : * allow anything we would want to do, at potentially lower performance.
+ : */
+ :#define URB_CS_ENTRY_SIZE 0
+ :#define URB_CS_ENTRIES 0
+ :
+ :#define URB_VS_ENTRY_SIZE 1 // each 512-bit row
+ :#define URB_VS_ENTRIES 8 // we needs at least 8 entries
+ :
+ :#define URB_GS_ENTRY_SIZE 0
+ :#define URB_GS_ENTRIES 0
+ :
+ :#define URB_CLIP_ENTRY_SIZE 0
+ :#define URB_CLIP_ENTRIES 0
+ :
+ :#define URB_SF_ENTRY_SIZE 2
+ :#define URB_SF_ENTRIES 1
+ :
+ : urb_vs_start = 0;
+ 1 0.0011 : urb_vs_size = URB_VS_ENTRIES * URB_VS_ENTRY_SIZE;
+ : urb_gs_start = urb_vs_start + urb_vs_size;
+ : urb_gs_size = URB_GS_ENTRIES * URB_GS_ENTRY_SIZE;
+ : urb_clip_start = urb_gs_start + urb_gs_size;
+ : urb_clip_size = URB_CLIP_ENTRIES * URB_CLIP_ENTRY_SIZE;
+ 1 0.0011 : urb_sf_start = urb_clip_start + urb_clip_size;
+ : urb_sf_size = URB_SF_ENTRIES * URB_SF_ENTRY_SIZE;
+ 2 0.0022 : urb_cs_start = urb_sf_start + urb_sf_size;
+ 1 0.0011 : urb_cs_size = URB_CS_ENTRIES * URB_CS_ENTRY_SIZE;
+ :
+ : /* Because we only have a single static buffer for our state currently,
+ : * we have to sync before updating it every time.
+ : */
+ 3 0.0033 : i830WaitSync(pScrn);
+ :
+ 17 0.0185 : memset (cc_viewport, 0, sizeof (*cc_viewport));
+ 17 0.0185 : cc_viewport->min_depth = -1.e35;
+ 19 0.0207 : cc_viewport->max_depth = 1.e35;
+ :
+ : /* Color calculator state */
+ 7 0.0076 : cc_state = &cc_state_local;
+ 32 0.0349 : memset(cc_state, 0, sizeof(*cc_state));
+ 34 0.0370 : cc_state->cc0.stencil_enable = 0; /* disable stencil */
+ : cc_state->cc2.depth_test = 0; /* disable depth test */
+ : cc_state->cc2.logicop_enable = 0; /* disable logic op */
+ : cc_state->cc3.ia_blend_enable = 1; /* blend alpha just like colors */
+ : cc_state->cc3.blend_enable = 1; /* enable color blend */
+ 6 0.0065 : cc_state->cc3.alpha_test = 0; /* disable alpha test */
+ 12 0.0131 : cc_state->cc4.cc_viewport_state_offset = (state_base_offset +
+ : cc_viewport_offset) >> 5;
+ : cc_state->cc5.dither_enable = 0; /* disable dither */
+ 2 0.0022 : cc_state->cc5.logicop_func = 0xc; /* COPY */
+ : cc_state->cc5.statistics_enable = 1;
+ 1 0.0011 : cc_state->cc5.ia_blend_function = BRW_BLENDFUNCTION_ADD;
+ 38 0.0414 : i965_get_blend_cntl(op, pMaskPicture, pDstPicture->format,
+ : &src_blend, &dst_blend);
+ : /* XXX: alpha blend factor should be same as color, but check
+ : * for CA case in future
+ : */
+ 24 0.0261 : cc_state->cc5.ia_src_blend_factor = src_blend;
+ 9 0.0098 : cc_state->cc5.ia_dest_blend_factor = dst_blend;
+ : cc_state->cc6.blend_function = BRW_BLENDFUNCTION_ADD;
+ 6 0.0065 : cc_state->cc6.src_blend_factor = src_blend;
+ 10 0.0109 : cc_state->cc6.dest_blend_factor = dst_blend;
+ : cc_state->cc6.clamp_post_alpha_blend = 1;
+ 4 0.0044 : cc_state->cc6.clamp_pre_alpha_blend = 1;
+ 1 0.0011 : cc_state->cc6.clamp_range = 0; /* clamp range [0,1] */
+ :
+ 1 0.0011 : cc_state = (void *)(state_base + cc_offset);
+ 51 0.0556 : memcpy (cc_state, &cc_state_local, sizeof (cc_state_local));
+ :
+ : /* Upload system kernel */
+ 10 0.0109 : memcpy (sip_kernel, sip_kernel_static, sizeof (sip_kernel_static));
+ :
+ : /* Set up the state buffer for the destination surface */
+ 8 0.0087 : dest_surf_state = &dest_surf_state_local;
+ 42 0.0458 : memset(dest_surf_state, 0, sizeof(*dest_surf_state));
+ 1 0.0011 : dest_surf_state->ss0.surface_type = BRW_SURFACE_2D;
+ 8 0.0087 : dest_surf_state->ss0.data_return_format = BRW_SURFACERETURNFORMAT_FLOAT32;
+ 4 0.0044 : i965_get_dest_format(pDstPicture, &dst_format);
+ 34 0.0370 : dest_surf_state->ss0.surface_format = dst_format;
+ :
+ : dest_surf_state->ss0.writedisable_alpha = 0;
+ : dest_surf_state->ss0.writedisable_red = 0;
+ : dest_surf_state->ss0.writedisable_green = 0;
+ : dest_surf_state->ss0.writedisable_blue = 0;
+ 27 0.0294 : dest_surf_state->ss0.color_blend = 1;
+ : dest_surf_state->ss0.vert_line_stride = 0;
+ : dest_surf_state->ss0.vert_line_stride_ofs = 0;
+ : dest_surf_state->ss0.mipmap_layout_mode = 0;
+ : dest_surf_state->ss0.render_cache_read_mode = 0;
+ :
+ : dest_surf_state->ss1.base_addr = dst_offset;
+ 4 0.0044 : dest_surf_state->ss2.height = pDst->drawable.height - 1;
+ 40 0.0436 : dest_surf_state->ss2.width = pDst->drawable.width - 1;
+ : dest_surf_state->ss2.mip_count = 0;
+ : dest_surf_state->ss2.render_target_rotation = 0;
+ 23 0.0251 : dest_surf_state->ss3.pitch = dst_pitch - 1;
+ :
+ 1 0.0011 : dest_surf_state = (void *)(state_base + dest_surf_offset);
+ 31 0.0338 : memcpy (dest_surf_state, &dest_surf_state_local, sizeof (dest_surf_state_local));
+ :
+ : /* Set up the source surface state buffer */
+ : src_surf_state = &src_surf_state_local;
+ 48 0.0523 : memset(src_surf_state, 0, sizeof(*src_surf_state));
+ 5 0.0054 : src_surf_state->ss0.surface_type = BRW_SURFACE_2D;
+ 20 0.0218 : src_surf_state->ss0.surface_format = i965_get_card_format(pSrcPicture);
+ :
+ : src_surf_state->ss0.writedisable_alpha = 0;
+ 3 0.0033 : src_surf_state->ss0.writedisable_red = 0;
+ : src_surf_state->ss0.writedisable_green = 0;
+ : src_surf_state->ss0.writedisable_blue = 0;
+ 31 0.0338 : src_surf_state->ss0.color_blend = 1;
+ : src_surf_state->ss0.vert_line_stride = 0;
+ : src_surf_state->ss0.vert_line_stride_ofs = 0;
+ : src_surf_state->ss0.mipmap_layout_mode = 0;
+ : src_surf_state->ss0.render_cache_read_mode = 0;
+ :
+ 3 0.0033 : src_surf_state->ss1.base_addr = src_offset;
+ 7 0.0076 : src_surf_state->ss2.width = pSrc->drawable.width - 1;
+ 6 0.0065 : src_surf_state->ss2.height = pSrc->drawable.height - 1;
+ : src_surf_state->ss2.mip_count = 0;
+ 30 0.0327 : src_surf_state->ss2.render_target_rotation = 0;
+ 15 0.0163 : src_surf_state->ss3.pitch = src_pitch - 1;
+ :
+ : src_surf_state = (void *)(state_base + src_surf_offset);
+ 28 0.0305 : memcpy (src_surf_state, &src_surf_state_local, sizeof (src_surf_state_local));
+ :
+ : /* setup mask surface */
+ 1 0.0011 : if (pMask) {
+ : mask_surf_state = &mask_surf_state_local;
+ 35 0.0381 : memset(mask_surf_state, 0, sizeof(*mask_surf_state));
+ 6 0.0065 : mask_surf_state->ss0.surface_type = BRW_SURFACE_2D;
+ 18 0.0196 : mask_surf_state->ss0.surface_format =
+ : i965_get_card_format(pMaskPicture);
+ :
+ : mask_surf_state->ss0.writedisable_alpha = 0;
+ 8 0.0087 : mask_surf_state->ss0.writedisable_red = 0;
+ : mask_surf_state->ss0.writedisable_green = 0;
+ : mask_surf_state->ss0.writedisable_blue = 0;
+ 20 0.0218 : mask_surf_state->ss0.color_blend = 1;
+ : mask_surf_state->ss0.vert_line_stride = 0;
+ : mask_surf_state->ss0.vert_line_stride_ofs = 0;
+ : mask_surf_state->ss0.mipmap_layout_mode = 0;
+ : mask_surf_state->ss0.render_cache_read_mode = 0;
+ :
+ : mask_surf_state->ss1.base_addr = mask_offset;
+ 11 0.0120 : mask_surf_state->ss2.width = pMask->drawable.width - 1;
+ 4 0.0044 : mask_surf_state->ss2.height = pMask->drawable.height - 1;
+ : mask_surf_state->ss2.mip_count = 0;
+ 31 0.0338 : mask_surf_state->ss2.render_target_rotation = 0;
+ 8 0.0087 : mask_surf_state->ss3.pitch = mask_pitch - 1;
+ :
+ : mask_surf_state = (void *)(state_base + mask_surf_offset);
+ 38 0.0414 : memcpy (mask_surf_state, &mask_surf_state_local, sizeof (mask_surf_state_local));
+ : }
+ :
+ : /* Set up a binding table for our surfaces. Only the PS will use it */
+ 8 0.0087 : binding_table[0] = state_base_offset + dest_surf_offset;
+ 1 0.0011 : binding_table[1] = state_base_offset + src_surf_offset;
+ : if (pMask)
+ 3 0.0033 : binding_table[2] = state_base_offset + mask_surf_offset;
+ :
+ : /* PS kernel use this sampler */
+ : src_sampler_state = &src_sampler_state_local;
+ 3 0.0033 : memset(src_sampler_state, 0, sizeof(*src_sampler_state));
+ : src_sampler_state->ss0.lod_preclamp = 1; /* GL mode */
+ 58 0.0632 : switch(pSrcPicture->filter) {
+ : case PictFilterNearest:
+ 4 0.0044 : src_sampler_state->ss0.min_filter = BRW_MAPFILTER_NEAREST;
+ 38 0.0414 : src_sampler_state->ss0.mag_filter = BRW_MAPFILTER_NEAREST;
+ : break;
+ : case PictFilterBilinear:
+ : src_sampler_state->ss0.min_filter = BRW_MAPFILTER_LINEAR;
+ : src_sampler_state->ss0.mag_filter = BRW_MAPFILTER_LINEAR;
+ : break;
+ : default:
+ : I830FALLBACK("Bad filter 0x%x\n", pSrcPicture->filter);
+ : }
+ :
+ 40 0.0436 : memset(default_color_state, 0, sizeof(*default_color_state));
+ 1 0.0011 : default_color_state->color[0] = 0.0; /* R */
+ 4 0.0044 : default_color_state->color[1] = 0.0; /* G */
+ : default_color_state->color[2] = 0.0; /* B */
+ : default_color_state->color[3] = 0.0; /* A */
+ :
+ 3 0.0033 : src_sampler_state->ss0.default_color_mode = 0; /* GL mode */
+ :
+ 3 0.0033 : if (!pSrcPicture->repeat) {
+ : src_sampler_state->ss1.r_wrap_mode = BRW_TEXCOORDMODE_CLAMP_BORDER;
+ 1 0.0011 : src_sampler_state->ss1.s_wrap_mode = BRW_TEXCOORDMODE_CLAMP_BORDER;
+ : src_sampler_state->ss1.t_wrap_mode = BRW_TEXCOORDMODE_CLAMP_BORDER;
+ : src_sampler_state->ss2.default_color_pointer =
+ : (state_base_offset + default_color_offset) >> 5;
+ : } else {
+ 8 0.0087 : src_sampler_state->ss1.r_wrap_mode = BRW_TEXCOORDMODE_WRAP;
+ : src_sampler_state->ss1.s_wrap_mode = BRW_TEXCOORDMODE_WRAP;
+ 85 0.0926 : src_sampler_state->ss1.t_wrap_mode = BRW_TEXCOORDMODE_WRAP;
+ : }
+ 3 0.0033 : src_sampler_state->ss3.chroma_key_enable = 0; /* disable chromakey */
+ :
+ 6 0.0065 : src_sampler_state = (void *)(state_base + src_sampler_offset);
+ 32 0.0349 : memcpy (src_sampler_state, &src_sampler_state_local, sizeof (src_sampler_state_local));
+ :
+ 3 0.0033 : if (pMask) {
+ : mask_sampler_state = &mask_sampler_state_local;
+ : memset(mask_sampler_state, 0, sizeof(*mask_sampler_state));
+ 3 0.0033 : mask_sampler_state->ss0.lod_preclamp = 1; /* GL mode */
+ 45 0.0490 : switch(pMaskPicture->filter) {
+ : case PictFilterNearest:
+ 5 0.0054 : mask_sampler_state->ss0.min_filter = BRW_MAPFILTER_NEAREST;
+ 41 0.0447 : mask_sampler_state->ss0.mag_filter = BRW_MAPFILTER_NEAREST;
+ : break;
+ : case PictFilterBilinear:
+ : mask_sampler_state->ss0.min_filter = BRW_MAPFILTER_LINEAR;
+ : mask_sampler_state->ss0.mag_filter = BRW_MAPFILTER_LINEAR;
+ : break;
+ : default:
+ : I830FALLBACK("Bad filter 0x%x\n", pMaskPicture->filter);
+ : }
+ :
+ 34 0.0370 : if (!pMaskPicture->repeat) {
+ 3 0.0033 : mask_sampler_state->ss1.r_wrap_mode =
+ : BRW_TEXCOORDMODE_CLAMP_BORDER;
+ 40 0.0436 : mask_sampler_state->ss1.s_wrap_mode =
+ : BRW_TEXCOORDMODE_CLAMP_BORDER;
+ 22 0.0240 : mask_sampler_state->ss1.t_wrap_mode =
+ : BRW_TEXCOORDMODE_CLAMP_BORDER;
+ 7 0.0076 : mask_sampler_state->ss2.default_color_pointer =
+ : (state_base_offset + default_color_offset)>>5;
+ : } else {
+ : mask_sampler_state->ss1.r_wrap_mode = BRW_TEXCOORDMODE_WRAP;
+ : mask_sampler_state->ss1.s_wrap_mode = BRW_TEXCOORDMODE_WRAP;
+ : mask_sampler_state->ss1.t_wrap_mode = BRW_TEXCOORDMODE_WRAP;
+ : }
+ : mask_sampler_state->ss3.chroma_key_enable = 0; /* disable chromakey */
+ :
+ 5 0.0054 : mask_sampler_state = (void *)(state_base + mask_sampler_offset);
+ 27 0.0294 : memcpy (mask_sampler_state, &mask_sampler_state_local, sizeof (mask_sampler_state_local));
+ : }
+ :
+ : /* Set up the vertex shader to be disabled (passthrough) */
+ 4 0.0044 : vs_state = &vs_state_local;
+ 8 0.0087 : memset(vs_state, 0, sizeof(*vs_state));
+ 1 0.0011 : vs_state->thread4.nr_urb_entries = URB_VS_ENTRIES;
+ 1 0.0011 : vs_state->thread4.urb_entry_allocation_size = URB_VS_ENTRY_SIZE - 1;
+ 46 0.0501 : vs_state->vs6.vs_enable = 0;
+ : vs_state->vs6.vert_cache_disable = 1;
+ :
+ 6 0.0065 : vs_state = (void *)(state_base + vs_offset);
+ 22 0.0240 : memcpy (vs_state, &vs_state_local, sizeof (vs_state_local));
+ :
+ : /* Set up the SF kernel to do coord interp: for each attribute,
+ : * calculate dA/dx and dA/dy. Hand these interpolation coefficients
+ : * back to SF which then hands pixels off to WM.
+ : */
+ 4 0.0044 : if (pMask)
+ 5 0.0054 : memcpy(sf_kernel, sf_kernel_static_mask, sizeof (sf_kernel_static));
+ : else if (rotation_program)
+ : memcpy(sf_kernel, sf_kernel_static_rotation,
+ : sizeof (sf_kernel_static_rotation));
+ : else
+ : memcpy(sf_kernel, sf_kernel_static, sizeof (sf_kernel_static));
+ :
+ 3 0.0033 : sf_state = &sf_state_local;
+ 45 0.0490 : memset(sf_state, 0, sizeof(*sf_state));
+ 102 0.1111 : sf_state->thread0.kernel_start_pointer =
+ : (state_base_offset + sf_kernel_offset) >> 6;
+ 1 0.0011 : sf_state->thread0.grf_reg_count = BRW_GRF_BLOCKS(SF_KERNEL_NUM_GRF);
+ 50 0.0545 : sf_state->sf1.single_program_flow = 1;
+ : sf_state->sf1.binding_table_entry_count = 0;
+ : sf_state->sf1.thread_priority = 0;
+ : sf_state->sf1.floating_point_mode = 0; /* Mesa does this */
+ : sf_state->sf1.illegal_op_exception_enable = 1;
+ 7 0.0076 : sf_state->sf1.mask_stack_exception_enable = 1;
+ : sf_state->sf1.sw_exception_enable = 1;
+ 45 0.0490 : sf_state->thread2.per_thread_scratch_space = 0;
+ : /* scratch space is not used in our kernel */
+ 4 0.0044 : sf_state->thread2.scratch_space_base_pointer = 0;
+ 3 0.0033 : sf_state->thread3.const_urb_entry_read_length = 0; /* no const URBs */
+ 8 0.0087 : sf_state->thread3.const_urb_entry_read_offset = 0; /* no const URBs */
+ 9 0.0098 : sf_state->thread3.urb_entry_read_length = 1; /* 1 URB per vertex */
+ : /* don't smash vertex header, read start from dw8 */
+ 4 0.0044 : sf_state->thread3.urb_entry_read_offset = 1;
+ 3 0.0033 : sf_state->thread3.dispatch_grf_start_reg = 3;
+ 10 0.0109 : sf_state->thread4.max_threads = SF_MAX_THREADS - 1;
+ 1 0.0011 : sf_state->thread4.urb_entry_allocation_size = URB_SF_ENTRY_SIZE - 1;
+ 6 0.0065 : sf_state->thread4.nr_urb_entries = URB_SF_ENTRIES;
+ : sf_state->thread4.stats_enable = 1;
+ : sf_state->sf5.viewport_transform = FALSE; /* skip viewport */
+ 32 0.0349 : sf_state->sf6.cull_mode = BRW_CULLMODE_NONE;
+ 40 0.0436 : sf_state->sf6.scissor = 0;
+ 5 0.0054 : sf_state->sf7.trifan_pv = 2;
+ 5 0.0054 : sf_state->sf6.dest_org_vbias = 0x8;
+ 54 0.0588 : sf_state->sf6.dest_org_hbias = 0x8;
+ :
+ 3 0.0033 : sf_state = (void *)(state_base + sf_offset);
+ 14 0.0153 : memcpy (sf_state, &sf_state_local, sizeof (sf_state_local));
+ :
+ : /* Set up the PS kernel (dispatched by WM) */
+ : if (pMask) {
+ 5 0.0054 : if (pMaskPicture->componentAlpha &&
+ : PICT_FORMAT_RGB(pMaskPicture->format)) {
+ 3 0.0033 : if (i965_blend_op[op].src_alpha)
+ 3 0.0033 : memcpy(ps_kernel, ps_kernel_static_maskca_srcalpha,
+ : sizeof (ps_kernel_static_maskca_srcalpha));
+ : else
+ 2 0.0022 : memcpy(ps_kernel, ps_kernel_static_maskca,
+ : sizeof (ps_kernel_static_maskca));
+ : } else
+ 8 0.0087 : memcpy(ps_kernel, ps_kernel_static_masknoca,
+ : sizeof (ps_kernel_static_masknoca));
+ : } else if (rotation_program) {
+ 1 0.0011 : memcpy(ps_kernel, ps_kernel_static_rotation,
+ : sizeof (ps_kernel_static_rotation));
+ : } else {
+ 1 0.0011 : memcpy(ps_kernel, ps_kernel_static_nomask,
+ : sizeof (ps_kernel_static_nomask));
+ : }
+ :
+ 13 0.0142 : wm_state = &wm_state_local;
+ 90 0.0980 : memset(wm_state, 0, sizeof (*wm_state));
+ 90 0.0980 : wm_state->thread0.kernel_start_pointer =
+ : (state_base_offset + ps_kernel_offset) >> 6;
+ 21 0.0229 : wm_state->thread0.grf_reg_count = BRW_GRF_BLOCKS(PS_KERNEL_NUM_GRF);
+ : wm_state->thread1.single_program_flow = 1;
+ : if (!pMask)
+ 1 0.0011 : wm_state->thread1.binding_table_entry_count = 2; /* 1 tex and fb */
+ : else
+ 18 0.0196 : wm_state->thread1.binding_table_entry_count = 3; /* 2 tex and fb */
+ :
+ 6 0.0065 : wm_state->thread2.scratch_space_base_pointer = (state_base_offset +
+ : wm_scratch_offset)>>10;
+ 33 0.0359 : wm_state->thread2.per_thread_scratch_space = 0;
+ : wm_state->thread3.const_urb_entry_read_length = 0;
+ 1 0.0011 : wm_state->thread3.const_urb_entry_read_offset = 0;
+ : /* Each pair of attributes (src/mask coords) is one URB entry */
+ : if (pMask)
+ 7 0.0076 : wm_state->thread3.urb_entry_read_length = 2;
+ : else
+ 2 0.0022 : wm_state->thread3.urb_entry_read_length = 1;
+ 4 0.0044 : wm_state->thread3.urb_entry_read_offset = 0;
+ : /* wm kernel use urb from 3, see wm_program in compiler module */
+ 19 0.0207 : wm_state->thread3.dispatch_grf_start_reg = 3; /* must match kernel */
+ :
+ 10 0.0109 : wm_state->wm4.stats_enable = 1; /* statistic */
+ 7 0.0076 : wm_state->wm4.sampler_state_pointer = (state_base_offset +
+ : src_sampler_offset) >> 5;
+ 19 0.0207 : wm_state->wm4.sampler_count = 1; /* 1-4 samplers used */
+ 6 0.0065 : wm_state->wm5.max_threads = PS_MAX_THREADS - 1;
+ : wm_state->wm5.thread_dispatch_enable = 1;
+ : /* just use 16-pixel dispatch (4 subspans), don't need to change kernel
+ : * start point
+ : */
+ 2 0.0022 : wm_state->wm5.enable_16_pix = 1;
+ : wm_state->wm5.enable_8_pix = 0;
+ 20 0.0218 : wm_state->wm5.early_depth_test = 1;
+ :
+ 3 0.0033 : wm_state = (void *)(state_base + wm_offset);
+ 35 0.0381 : memcpy (wm_state, &wm_state_local, sizeof (wm_state_local));
+ :
+ : /* Begin the long sequence of commands needed to set up the 3D
+ : * rendering pipe
+ : */
+ : {
+ 2 0.0022 : BEGIN_LP_RING(2);
+ 3 0.0033 : OUT_RING(MI_FLUSH |
+ : MI_STATE_INSTRUCTION_CACHE_FLUSH |
+ : BRW_MI_GLOBAL_SNAPSHOT_RESET);
+ 4 0.0044 : OUT_RING(MI_NOOP);
+ 37 0.0403 : ADVANCE_LP_RING();
+ : }
+ : {
+ 2751 2.9969 : BEGIN_LP_RING(12);
+ :
+ : /* Match Mesa driver setup */
+ 5 0.0054 : OUT_RING(BRW_PIPELINE_SELECT | PIPELINE_SELECT_3D);
+ :
+ 10 0.0109 : OUT_RING(BRW_CS_URB_STATE | 0);
+ 5 0.0054 : OUT_RING((0 << 4) | /* URB Entry Allocation Size */
+ : (0 << 0)); /* Number of URB Entries */
+ :
+ : /* Zero out the two base address registers so all offsets are
+ : * absolute.
+ : */
+ 4 0.0044 : OUT_RING(BRW_STATE_BASE_ADDRESS | 4);
+ 1 0.0011 : OUT_RING(0 | BASE_ADDRESS_MODIFY); /* Generate state base address */
+ 2 0.0022 : OUT_RING(0 | BASE_ADDRESS_MODIFY); /* Surface state base address */
+ 5 0.0054 : OUT_RING(0 | BASE_ADDRESS_MODIFY); /* media base addr, don't care */
+ : /* general state max addr, disabled */
+ 4 0.0044 : OUT_RING(0x10000000 | BASE_ADDRESS_MODIFY);
+ : /* media object state max addr, disabled */
+ 7 0.0076 : OUT_RING(0x10000000 | BASE_ADDRESS_MODIFY);
+ :
+ : /* Set system instruction pointer */
+ 4 0.0044 : OUT_RING(BRW_STATE_SIP | 0);
+ 13 0.0142 : OUT_RING(state_base_offset + sip_kernel_offset);
+ 8 0.0087 : OUT_RING(MI_NOOP);
+ 106 0.1155 : ADVANCE_LP_RING();
+ : }
+ : {
+ 1204 1.3116 : BEGIN_LP_RING(26);
+ : /* Pipe control */
+ 2 0.0022 : OUT_RING(BRW_PIPE_CONTROL |
+ : BRW_PIPE_CONTROL_NOWRITE |
+ : BRW_PIPE_CONTROL_IS_FLUSH |
+ : 2);
+ 15 0.0163 : OUT_RING(0); /* Destination address */
+ 6 0.0065 : OUT_RING(0); /* Immediate data low DW */
+ 3 0.0033 : OUT_RING(0); /* Immediate data high DW */
+ :
+ : /* Binding table pointers */
+ 3 0.0033 : OUT_RING(BRW_3DSTATE_BINDING_TABLE_POINTERS | 4);
+ 6 0.0065 : OUT_RING(0); /* vs */
+ 5 0.0054 : OUT_RING(0); /* gs */
+ 5 0.0054 : OUT_RING(0); /* clip */
+ 10 0.0109 : OUT_RING(0); /* sf */
+ : /* Only the PS uses the binding table */
+ 16 0.0174 : OUT_RING(state_base_offset + binding_table_offset); /* ps */
+ :
+ : /* The drawing rectangle clipping is always on. Set it to values that
+ : * shouldn't do any clipping.
+ : */
+ 22 0.0240 : OUT_RING(BRW_3DSTATE_DRAWING_RECTANGLE | 2); /* XXX 3 for BLC or CTG */
+ 12 0.0131 : OUT_RING(0x00000000); /* ymin, xmin */
+ 61 0.0665 : OUT_RING(DRAW_YMAX(pDst->drawable.height - 1) |
+ : DRAW_XMAX(pDst->drawable.width - 1)); /* ymax, xmax */
+ 41 0.0447 : OUT_RING(0x00000000); /* yorigin, xorigin */
+ :
+ : /* skip the depth buffer */
+ : /* skip the polygon stipple */
+ : /* skip the polygon stipple offset */
+ : /* skip the line stipple */
+ :
+ : /* Set the pointers to the 3d pipeline state */
+ : OUT_RING(BRW_3DSTATE_PIPELINED_POINTERS | 5);
+ 29 0.0316 : OUT_RING(state_base_offset + vs_offset); /* 32 byte aligned */
+ 11 0.0120 : OUT_RING(BRW_GS_DISABLE); /* disable GS, resulting in passthrough */
+ 102 0.1111 : OUT_RING(BRW_CLIP_DISABLE); /* disable CLIP, resulting in passthrough */
+ 383 0.4172 : OUT_RING(state_base_offset + sf_offset); /* 32 byte aligned */
+ 26 0.0283 : OUT_RING(state_base_offset + wm_offset); /* 32 byte aligned */
+ 17 0.0185 : OUT_RING(state_base_offset + cc_offset); /* 64 byte aligned */
+ :
+ : /* URB fence */
+ : OUT_RING(BRW_URB_FENCE |
+ : UF0_CS_REALLOC |
+ : UF0_SF_REALLOC |
+ : UF0_CLIP_REALLOC |
+ : UF0_GS_REALLOC |
+ : UF0_VS_REALLOC |
+ : 1);
+ 39 0.0425 : OUT_RING(((urb_clip_start + urb_clip_size) << UF1_CLIP_FENCE_SHIFT) |
+ : ((urb_gs_start + urb_gs_size) << UF1_GS_FENCE_SHIFT) |
+ : ((urb_vs_start + urb_vs_size) << UF1_VS_FENCE_SHIFT));
+ 28 0.0305 : OUT_RING(((urb_cs_start + urb_cs_size) << UF2_CS_FENCE_SHIFT) |
+ : ((urb_sf_start + urb_sf_size) << UF2_SF_FENCE_SHIFT));
+ :
+ : /* Constant buffer state */
+ 11 0.0120 : OUT_RING(BRW_CS_URB_STATE | 0);
+ 3 0.0033 : OUT_RING(((URB_CS_ENTRY_SIZE - 1) << 4) |
+ : (URB_CS_ENTRIES << 0));
+ 62 0.0675 : ADVANCE_LP_RING();
+ : }
+ : {
+ 702 0.7647 : int nelem = pMask ? 3: 2;
+ 12 0.0131 : BEGIN_LP_RING(pMask?12:10);
+ : /* Set up the pointer to our vertex buffer */
+ 4 0.0044 : OUT_RING(BRW_3DSTATE_VERTEX_BUFFERS | 3);
+ 2 0.0022 : OUT_RING((0 << VB0_BUFFER_INDEX_SHIFT) |
+ : VB0_VERTEXDATA |
+ : ((4 * 2 * nelem) << VB0_BUFFER_PITCH_SHIFT));
+ 10 0.0109 : OUT_RING(state_base_offset + vb_offset);
+ 2 0.0022 : OUT_RING(3);
+ 7 0.0076 : OUT_RING(0); // ignore for VERTEXDATA, but still there
+ :
+ : /* Set up our vertex elements, sourced from the single vertex buffer.
+ : */
+ 9 0.0098 : OUT_RING(BRW_3DSTATE_VERTEX_ELEMENTS | ((2 * nelem) - 1));
+ : /* vertex coordinates */
+ 5 0.0054 : OUT_RING((0 << VE0_VERTEX_BUFFER_INDEX_SHIFT) |
+ : VE0_VALID |
+ : (BRW_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) |
+ : (0 << VE0_OFFSET_SHIFT));
+ 2 0.0022 : OUT_RING((BRW_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) |
+ : (BRW_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) |
+ : (BRW_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) |
+ : (BRW_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT) |
+ : (4 << VE1_DESTINATION_ELEMENT_OFFSET_SHIFT));
+ : /* u0, v0 */
+ 2 0.0022 : OUT_RING((0 << VE0_VERTEX_BUFFER_INDEX_SHIFT) |
+ : VE0_VALID |
+ : (BRW_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) |
+ : (8 << VE0_OFFSET_SHIFT)); /* offset vb in bytes */
+ 14 0.0153 : OUT_RING((BRW_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) |
+ : (BRW_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) |
+ : (BRW_VFCOMPONENT_NOSTORE << VE1_VFCOMPONENT_2_SHIFT) |
+ : (BRW_VFCOMPONENT_NOSTORE << VE1_VFCOMPONENT_3_SHIFT) |
+ : (8 << VE1_DESTINATION_ELEMENT_OFFSET_SHIFT)); /* VUE offset in dwords */
+ : /* u1, v1 */
+ 1 0.0011 : if (pMask) {
+ 4 0.0044 : OUT_RING((0 << VE0_VERTEX_BUFFER_INDEX_SHIFT) |
+ : VE0_VALID |
+ : (BRW_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) |
+ : (16 << VE0_OFFSET_SHIFT));
+ 1 0.0011 : OUT_RING((BRW_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) |
+ : (BRW_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) |
+ : (BRW_VFCOMPONENT_NOSTORE << VE1_VFCOMPONENT_2_SHIFT) |
+ : (BRW_VFCOMPONENT_NOSTORE << VE1_VFCOMPONENT_3_SHIFT) |
+ : (10 << VE1_DESTINATION_ELEMENT_OFFSET_SHIFT));
+ : }
+ :
+ 66 0.0719 : ADVANCE_LP_RING();
+ : }
+ :
+ :#ifdef I830DEBUG
+ : ErrorF("try to sync to show any errors...");
+ : I830Sync(pScrn);
+ :#endif
+ : return TRUE;
+ 1196 1.3029 :}
+ :
+ :void
+ :i965_composite(PixmapPtr pDst, int srcX, int srcY, int maskX, int maskY,
+ : int dstX, int dstY, int w, int h)
+ 707 0.7702 :{ /* i965_composite total: 2800 3.0503 */
+ 38 0.0414 : ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+ 3 0.0033 : I830Ptr pI830 = I830PTR(pScrn);
+ : Bool has_mask;
+ : float src_x[3], src_y[3], mask_x[3], mask_y[3];
+ : int i;
+ :
+ 22 0.0240 : i830_get_transformed_coordinates(srcX, srcY,
+ : pI830->transform[0],
+ : &src_x[0], &src_y[0]);
+ 5 0.0054 : i830_get_transformed_coordinates(srcX, srcY + h,
+ : pI830->transform[0],
+ : &src_x[1], &src_y[1]);
+ 15 0.0163 : i830_get_transformed_coordinates(srcX + w, srcY + h,
+ : pI830->transform[0],
+ : &src_x[2], &src_y[2]);
+ :
+ 18 0.0196 : if (pI830->scale_units[1][0] == -1 || pI830->scale_units[1][1] == -1) {
+ : has_mask = FALSE;
+ : } else {
+ : has_mask = TRUE;
+ 1 0.0011 : i830_get_transformed_coordinates(maskX, maskY,
+ : pI830->transform[1],
+ : &mask_x[0], &mask_y[0]);
+ 8 0.0087 : i830_get_transformed_coordinates(maskX, maskY + h,
+ : pI830->transform[1],
+ : &mask_x[1], &mask_y[1]);
+ 33 0.0359 : i830_get_transformed_coordinates(maskX + w, maskY + h,
+ : pI830->transform[1],
+ : &mask_x[2], &mask_y[2]);
+ : }
+ :
+ : /* Wait for any existing composite rectangles to land before we overwrite
+ : * the VB with the next one.
+ : */
+ 7 0.0076 : i830WaitSync(pScrn);
+ :
+ : i = 0;
+ : /* rect (x2,y2) */
+ 6 0.0065 : vb[i++] = (float)(dstX + w);
+ 7 0.0076 : vb[i++] = (float)(dstY + h);
+ 4 0.0044 : vb[i++] = src_x[2] / pI830->scale_units[0][0];
+ 8 0.0087 : vb[i++] = src_y[2] / pI830->scale_units[0][1];
+ : if (has_mask) {
+ 77 0.0839 : vb[i++] = mask_x[2] / pI830->scale_units[1][0];
+ 88 0.0959 : vb[i++] = mask_y[2] / pI830->scale_units[1][1];
+ : }
+ :
+ : /* rect (x1,y2) */
+ 2 0.0022 : vb[i++] = (float)dstX;
+ 1 0.0011 : vb[i++] = (float)(dstY + h);
+ 3 0.0033 : vb[i++] = src_x[1] / pI830->scale_units[0][0];
+ 14 0.0153 : vb[i++] = src_y[1] / pI830->scale_units[0][1];
+ 2 0.0022 : if (has_mask) {
+ 7 0.0076 : vb[i++] = mask_x[1] / pI830->scale_units[1][0];
+ 72 0.0784 : vb[i++] = mask_y[1] / pI830->scale_units[1][1];
+ : }
+ :
+ : /* rect (x1,y1) */
+ 2 0.0022 : vb[i++] = (float)dstX;
+ 3 0.0033 : vb[i++] = (float)dstY;
+ 3 0.0033 : vb[i++] = src_x[0] / pI830->scale_units[0][0];
+ 5 0.0054 : vb[i++] = src_y[0] / pI830->scale_units[0][1];
+ : if (has_mask) {
+ 7 0.0076 : vb[i++] = mask_x[0] / pI830->scale_units[1][0];
+ 11 0.0120 : vb[i++] = mask_y[0] / pI830->scale_units[1][1];
+ : }
+ :
+ : {
+ 2 0.0022 : BEGIN_LP_RING(6);
+ 3 0.0033 : OUT_RING(BRW_3DPRIMITIVE |
+ : BRW_3DPRIMITIVE_VERTEX_SEQUENTIAL |
+ : (_3DPRIM_RECTLIST << BRW_3DPRIMITIVE_TOPOLOGY_SHIFT) |
+ : (0 << 9) | /* CTG - indirect vertex count */
+ : 4);
+ 4 0.0044 : OUT_RING(3); /* vertex count per instance */
+ : OUT_RING(0); /* start vertex offset */
+ 3 0.0033 : OUT_RING(1); /* single instance */
+ 4 0.0044 : OUT_RING(0); /* start instance location */
+ 3 0.0033 : OUT_RING(0); /* index buffer offset, ignored */
+ 4 0.0044 : ADVANCE_LP_RING();
+ : }
+ :#ifdef I830DEBUG
+ : ErrorF("sync after 3dprimitive");
+ : I830Sync(pScrn);
+ :#endif
+ : /* we must be sure that the pipeline is flushed before next exa draw,
+ : because that will be new state, binding state and instructions*/
+ : {
+ 804 0.8759 : BEGIN_LP_RING(4);
+ : OUT_RING(BRW_PIPE_CONTROL |
+ : BRW_PIPE_CONTROL_NOWRITE |
+ : BRW_PIPE_CONTROL_WC_FLUSH |
+ : BRW_PIPE_CONTROL_IS_FLUSH |
+ : (1 << 10) | /* XXX texture cache flush for BLC/CTG */
+ : 2);
+ 2 0.0022 : OUT_RING(0); /* Destination address */
+ 5 0.0054 : OUT_RING(0); /* Immediate data low DW */
+ 5 0.0054 : OUT_RING(0); /* Immediate data high DW */
+ 7 0.0076 : ADVANCE_LP_RING();
+ : }
+ :
+ : /* Mark sync so we can wait for it before setting up the VB on the next
+ : * rectangle.
+ : */
+ 773 0.8421 : i830MarkSync(pScrn);
+ 2 0.0022 :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/exa/exa.c"
+ *
+ * 854 0.9303
+ */
+
+
+ :/*
+ : * Copyright © 2001 Keith Packard
+ : *
+ : * Partly based on code that is Copyright © The XFree86 Project Inc.
+ : *
+ : * 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.
+ : */
+ :
+ :/** @file
+ : * This file covers the initialization and teardown of EXA, and has various
+ : * functions not responsible for performing rendering, pixmap migration, or
+ : * memory management.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#ifdef MITSHM
+ :#include "shmint.h"
+ :#endif
+ :
+ :#include <stdlib.h>
+ :
+ :#include "exa_priv.h"
+ :#include <X11/fonts/fontstruct.h>
+ :#include "dixfontstr.h"
+ :#include "exa.h"
+ :#include "cw.h"
+ :
+ :static int exaGeneration;
+ :int exaScreenPrivateIndex;
+ :int exaPixmapPrivateIndex;
+ :
+ :/**
+ : * exaGetPixmapOffset() returns the offset (in bytes) within the framebuffer of
+ : * the beginning of the given pixmap.
+ : *
+ : * Note that drivers are free to, and often do, munge this offset as necessary
+ : * for handing to the hardware -- for example, translating it into a different
+ : * aperture. This function may need to be extended in the future if we grow
+ : * support for having multiple card-accessible offscreen, such as an AGP memory
+ : * pool alongside the framebuffer pool.
+ : */
+ :unsigned long
+ :exaGetPixmapOffset(PixmapPtr pPix)
+ 11 0.0120 :{ /* exaGetPixmapOffset total: 35 0.0381 */
+ 3 0.0033 : ExaScreenPriv (pPix->drawable.pScreen);
+ 6 0.0065 : ExaPixmapPriv (pPix);
+ : void *ptr;
+ :
+ : /* Return the offscreen pointer if we've hidden the data. */
+ 5 0.0054 : if (pPix->devPrivate.ptr == NULL)
+ : ptr = pExaPixmap->fb_ptr;
+ : else
+ : ptr = pPix->devPrivate.ptr;
+ :
+ : return ((unsigned long)ptr - (unsigned long)pExaScr->info->memoryBase);
+ 10 0.0109 :}
+ :
+ :/**
+ : * exaGetPixmapPitch() returns the pitch (in bytes) of the given pixmap.
+ : *
+ : * This is a helper to make driver code more obvious, due to the rather obscure
+ : * naming of the pitch field in the pixmap.
+ : */
+ :unsigned long
+ :exaGetPixmapPitch(PixmapPtr pPix)
+ 2 0.0022 :{ /* exaGetPixmapPitch total: 7 0.0076 */
+ : return pPix->devKind;
+ 5 0.0054 :}
+ :
+ :/**
+ : * exaGetPixmapSize() returns the size in bytes of the given pixmap in video
+ : * memory. Only valid when the pixmap is currently in framebuffer.
+ : */
+ :unsigned long
+ :exaGetPixmapSize(PixmapPtr pPix)
+ :{
+ : ExaPixmapPrivPtr pExaPixmap;
+ :
+ : pExaPixmap = ExaGetPixmapPriv(pPix);
+ : if (pExaPixmap != NULL)
+ : return pExaPixmap->fb_size;
+ : return 0;
+ :}
+ :
+ :/**
+ : * exaGetDrawablePixmap() returns a backing pixmap for a given drawable.
+ : *
+ : * @param pDrawable the drawable being requested.
+ : *
+ : * This function returns the backing pixmap for a drawable, whether it is a
+ : * redirected window, unredirected window, or already a pixmap. Note that
+ : * coordinate translation is needed when drawing to the backing pixmap of a
+ : * redirected window, and the translation coordinates are provided by calling
+ : * exaGetOffscreenPixmap() on the drawable.
+ : */
+ :PixmapPtr
+ :exaGetDrawablePixmap(DrawablePtr pDrawable)
+ 53 0.0577 :{ /* exaGetDrawablePixmap total: 111 0.1209 */
+ 5 0.0054 : if (pDrawable->type == DRAWABLE_WINDOW)
+ : return pDrawable->pScreen->GetWindowPixmap ((WindowPtr) pDrawable);
+ : else
+ 30 0.0327 : return (PixmapPtr) pDrawable;
+ 23 0.0251 :}
+ :
+ :/**
+ : * Sets the offsets to add to coordinates to make them address the same bits in
+ : * the backing drawable. These coordinates are nonzero only for redirected
+ : * windows.
+ : */
+ :void
+ :exaGetDrawableDeltas (DrawablePtr pDrawable, PixmapPtr pPixmap,
+ : int *xp, int *yp)
+ 8 0.0087 :{ /* exaGetDrawableDeltas total: 52 0.0566 */
+ :#ifdef COMPOSITE
+ 21 0.0229 : if (pDrawable->type == DRAWABLE_WINDOW) {
+ : *xp = -pPixmap->screen_x;
+ : *yp = -pPixmap->screen_y;
+ : return;
+ : }
+ :#endif
+ :
+ 4 0.0044 : *xp = 0;
+ 1 0.0011 : *yp = 0;
+ 18 0.0196 :}
+ :
+ :/**
+ : * exaPixmapDirty() marks a pixmap as dirty, allowing for
+ : * optimizations in pixmap migration when no changes have occurred.
+ : */
+ :void
+ :exaPixmapDirty (PixmapPtr pPix, int x1, int y1, int x2, int y2)
+ 20 0.0218 :{ /* exaPixmapDirty total: 90 0.0980 */
+ 6 0.0065 : ExaPixmapPriv(pPix);
+ : BoxRec box;
+ : RegionPtr pDamageReg;
+ : RegionRec region;
+ :
+ 11 0.0120 : if (!pExaPixmap)
+ : return;
+ :
+ 3 0.0033 : box.x1 = max(x1, 0);
+ : box.y1 = max(y1, 0);
+ 6 0.0065 : box.x2 = min(x2, pPix->drawable.width);
+ 13 0.0142 : box.y2 = min(y2, pPix->drawable.height);
+ :
+ 4 0.0044 : if (box.x1 >= box.x2 || box.y1 >= box.y2)
+ : return;
+ :
+ 4 0.0044 : pDamageReg = DamageRegion(pExaPixmap->pDamage);
+ :
+ 5 0.0054 : REGION_INIT(pScreen, ®ion, &box, 1);
+ 6 0.0065 : REGION_UNION(pScreen, pDamageReg, pDamageReg, ®ion);
+ 4 0.0044 : REGION_UNINIT(pScreen, ®ion);
+ 8 0.0087 :}
+ :
+ :static Bool
+ :exaDestroyPixmap (PixmapPtr pPixmap)
+ 3 0.0033 :{ /* exaDestroyPixmap total: 4 0.0044 */
+ : if (pPixmap->refcnt == 1)
+ : {
+ : ExaPixmapPriv (pPixmap);
+ : if (pExaPixmap->area)
+ : {
+ : DBG_PIXMAP(("-- 0x%p (0x%x) (%dx%d)\n",
+ : (void*)pPixmap->drawable.id,
+ : ExaGetPixmapPriv(pPixmap)->area->offset,
+ : pPixmap->drawable.width,
+ : pPixmap->drawable.height));
+ : /* Free the offscreen area */
+ : exaOffscreenFree (pPixmap->drawable.pScreen, pExaPixmap->area);
+ 1 0.0011 : pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
+ : pPixmap->devKind = pExaPixmap->sys_pitch;
+ : }
+ : REGION_UNINIT(pPixmap->drawable.pScreen, &pExaPixmap->validReg);
+ : }
+ : return fbDestroyPixmap (pPixmap);
+ :}
+ :
+ :static int
+ :exaLog2(int val)
+ :{
+ : int bits;
+ :
+ : if (val <= 0)
+ : return 0;
+ : for (bits = 0; val != 0; bits++)
+ : val >>= 1;
+ : return bits - 1;
+ :}
+ :
+ :/**
+ : * exaCreatePixmap() creates a new pixmap.
+ : *
+ : * If width and height are 0, this won't be a full-fledged pixmap and it will
+ : * get ModifyPixmapHeader() called on it later. So, we mark it as pinned, because
+ : * ModifyPixmapHeader() would break migration. These types of pixmaps are used
+ : * for scratch pixmaps, or to represent the visible screen.
+ : */
+ :static PixmapPtr
+ :exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth)
+ 4 0.0044 :{ /* exaCreatePixmap total: 19 0.0207 */
+ : PixmapPtr pPixmap;
+ : ExaPixmapPrivPtr pExaPixmap;
+ : int bpp;
+ 1 0.0011 : ExaScreenPriv(pScreen);
+ :
+ : if (w > 32767 || h > 32767)
+ : return NullPixmap;
+ :
+ 3 0.0033 : pPixmap = fbCreatePixmap (pScreen, w, h, depth);
+ : if (!pPixmap)
+ : return NULL;
+ 1 0.0011 : pExaPixmap = ExaGetPixmapPriv(pPixmap);
+ :
+ : bpp = pPixmap->drawable.bitsPerPixel;
+ :
+ : /* Glyphs have w/h equal to zero, and may not be migrated. See exaGlyphs. */
+ 1 0.0011 : if (!w || !h)
+ : pExaPixmap->score = EXA_PIXMAP_SCORE_PINNED;
+ : else
+ 2 0.0022 : pExaPixmap->score = EXA_PIXMAP_SCORE_INIT;
+ :
+ : pExaPixmap->area = NULL;
+ :
+ : pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr;
+ : pExaPixmap->sys_pitch = pPixmap->devKind;
+ :
+ : pExaPixmap->fb_ptr = NULL;
+ 1 0.0011 : if (pExaScr->info->flags & EXA_OFFSCREEN_ALIGN_POT && w != 1)
+ : pExaPixmap->fb_pitch = (1 << (exaLog2(w - 1) + 1)) * bpp / 8;
+ : else
+ 1 0.0011 : pExaPixmap->fb_pitch = w * bpp / 8;
+ 4 0.0044 : pExaPixmap->fb_pitch = EXA_ALIGN(pExaPixmap->fb_pitch,
+ : pExaScr->info->pixmapPitchAlign);
+ : pExaPixmap->fb_size = pExaPixmap->fb_pitch * h;
+ :
+ : if (pExaPixmap->fb_pitch > 32767) {
+ : fbDestroyPixmap(pPixmap);
+ : return NULL;
+ : }
+ :
+ : /* Set up damage tracking */
+ : pExaPixmap->pDamage = DamageCreate (NULL, NULL, DamageReportNone, TRUE,
+ : pScreen, pPixmap);
+ :
+ : if (pExaPixmap->pDamage == NULL) {
+ : fbDestroyPixmap (pPixmap);
+ : return NULL;
+ : }
+ :
+ : DamageRegister (&pPixmap->drawable, pExaPixmap->pDamage);
+ : DamageSetReportAfterOp (pExaPixmap->pDamage, TRUE);
+ :
+ : /* None of the pixmap bits are valid initially */
+ 1 0.0011 : REGION_NULL(pScreen, &pExaPixmap->validReg);
+ :
+ : return pPixmap;
+ :}
+ :
+ :/**
+ : * exaPixmapIsOffscreen() is used to determine if a pixmap is in offscreen
+ : * memory, meaning that acceleration could probably be done to it, and that it
+ : * will need to be wrapped by PrepareAccess()/FinishAccess() when accessing it
+ : * with the CPU.
+ : *
+ : * Note that except for UploadToScreen()/DownloadFromScreen() (which explicitly
+ : * deal with moving pixmaps in and out of system memory), EXA will give drivers
+ : * pixmaps as arguments for which exaPixmapIsOffscreen() is TRUE.
+ : *
+ : * @return TRUE if the given drawable is in framebuffer memory.
+ : */
+ :Bool
+ :exaPixmapIsOffscreen(PixmapPtr p)
+ 44 0.0479 :{ /* exaPixmapIsOffscreen total: 267 0.2909 */
+ : ScreenPtr pScreen = p->drawable.pScreen;
+ 53 0.0577 : ExaScreenPriv(pScreen);
+ :
+ : /* If the devPrivate.ptr is NULL, it's offscreen but we've hidden the data.
+ : */
+ 36 0.0392 : if (p->devPrivate.ptr == NULL)
+ : return TRUE;
+ :
+ 80 0.0872 : if (pExaScr->info->PixmapIsOffscreen)
+ : return pExaScr->info->PixmapIsOffscreen(p);
+ :
+ 27 0.0294 : return ((unsigned long) ((CARD8 *) p->devPrivate.ptr -
+ : (CARD8 *) pExaScr->info->memoryBase) <
+ : pExaScr->info->memorySize);
+ 27 0.0294 :}
+ :
+ :/**
+ : * exaDrawableIsOffscreen() is a convenience wrapper for exaPixmapIsOffscreen().
+ : */
+ :Bool
+ :exaDrawableIsOffscreen (DrawablePtr pDrawable)
+ :{
+ : return exaPixmapIsOffscreen (exaGetDrawablePixmap (pDrawable));
+ :}
+ :
+ :/**
+ : * Returns the pixmap which backs a drawable, and the offsets to add to
+ : * coordinates to make them address the same bits in the backing drawable.
+ : */
+ :PixmapPtr
+ :exaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp)
+ 17 0.0185 :{ /* exaGetOffscreenPixmap total: 69 0.0752 */
+ 6 0.0065 : PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
+ :
+ 16 0.0174 : exaGetDrawableDeltas (pDrawable, pPixmap, xp, yp);
+ :
+ 15 0.0163 : if (exaPixmapIsOffscreen (pPixmap))
+ : return pPixmap;
+ : else
+ : return NULL;
+ 15 0.0163 :}
+ :
+ :/**
+ : * exaPrepareAccess() is EXA's wrapper for the driver's PrepareAccess() handler.
+ : *
+ : * It deals with waiting for synchronization with the card, determining if
+ : * PrepareAccess() is necessary, and working around PrepareAccess() failure.
+ : */
+ :void
+ :exaPrepareAccess(DrawablePtr pDrawable, int index)
+ :{ /* exaPrepareAccess total: 1 0.0011 */
+ : ScreenPtr pScreen = pDrawable->pScreen;
+ : ExaScreenPriv (pScreen);
+ : PixmapPtr pPixmap;
+ :
+ : pPixmap = exaGetDrawablePixmap (pDrawable);
+ :
+ : if (exaPixmapIsOffscreen (pPixmap))
+ : exaWaitSync (pDrawable->pScreen);
+ : else
+ : return;
+ :
+ : /* Unhide pixmap pointer */
+ : if (pPixmap->devPrivate.ptr == NULL) {
+ : ExaPixmapPriv (pPixmap);
+ :
+ : pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
+ : }
+ :
+ 1 0.0011 : if (pExaScr->info->PrepareAccess == NULL)
+ : return;
+ :
+ : if (!(*pExaScr->info->PrepareAccess) (pPixmap, index)) {
+ : ExaPixmapPriv (pPixmap);
+ : if (pExaPixmap->score != EXA_PIXMAP_SCORE_PINNED)
+ : FatalError("Driver failed PrepareAccess on a pinned pixmap\n");
+ : exaMoveOutPixmap (pPixmap);
+ : }
+ :}
+ :
+ :/**
+ : * exaFinishAccess() is EXA's wrapper for the driver's FinishAccess() handler.
+ : *
+ : * It deals with calling the driver's FinishAccess() only if necessary.
+ : */
+ :void
+ :exaFinishAccess(DrawablePtr pDrawable, int index)
+ :{ /* exaFinishAccess total: 1 0.0011 */
+ : ScreenPtr pScreen = pDrawable->pScreen;
+ 1 0.0011 : ExaScreenPriv (pScreen);
+ : PixmapPtr pPixmap;
+ : ExaPixmapPrivPtr pExaPixmap;
+ :
+ : pPixmap = exaGetDrawablePixmap (pDrawable);
+ :
+ : pExaPixmap = ExaGetPixmapPriv(pPixmap);
+ :
+ : /* Rehide pixmap pointer if we're doing that. */
+ : if (pExaPixmap != NULL && pExaScr->hideOffscreenPixmapData &&
+ : pExaPixmap->fb_ptr == pPixmap->devPrivate.ptr)
+ : {
+ : pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
+ : }
+ :
+ : if (pExaScr->info->FinishAccess == NULL)
+ : return;
+ :
+ : if (!exaPixmapIsOffscreen (pPixmap))
+ : return;
+ :
+ : (*pExaScr->info->FinishAccess) (pPixmap, index);
+ :}
+ :
+ :/**
+ : * exaValidateGC() sets the ops to EXA's implementations, which may be
+ : * accelerated or may sync the card and fall back to fb.
+ : */
+ :static void
+ :exaValidateGC (GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
+ 2 0.0022 :{ /* exaValidateGC total: 8 0.0087 */
+ : /* fbValidateGC will do direct access to pixmaps if the tiling has changed.
+ : * Preempt fbValidateGC by doing its work and masking the change out, so
+ : * that we can do the Prepare/FinishAccess.
+ : */
+ :#ifdef FB_24_32BIT
+ 1 0.0011 : if ((changes & GCTile) && fbGetRotatedPixmap(pGC)) {
+ : (*pGC->pScreen->DestroyPixmap) (fbGetRotatedPixmap(pGC));
+ : fbGetRotatedPixmap(pGC) = 0;
+ : }
+ :
+ : if (pGC->fillStyle == FillTiled) {
+ : PixmapPtr pOldTile, pNewTile;
+ :
+ : pOldTile = pGC->tile.pixmap;
+ : if (pOldTile->drawable.bitsPerPixel != pDrawable->bitsPerPixel)
+ : {
+ : pNewTile = fbGetRotatedPixmap(pGC);
+ : if (!pNewTile ||
+ : pNewTile ->drawable.bitsPerPixel != pDrawable->bitsPerPixel)
+ : {
+ : if (pNewTile)
+ : (*pGC->pScreen->DestroyPixmap) (pNewTile);
+ : /* fb24_32ReformatTile will do direct access of a newly-
+ : * allocated pixmap. This isn't a problem yet, since we don't
+ : * put pixmaps in FB until at least one accelerated EXA op.
+ : */
+ : exaPrepareAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
+ : pNewTile = fb24_32ReformatTile (pOldTile,
+ : pDrawable->bitsPerPixel);
+ : exaPixmapDirty(pNewTile, 0, 0, pNewTile->drawable.width, pNewTile->drawable.height);
+ : exaFinishAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
+ : }
+ : if (pNewTile)
+ : {
+ : fbGetRotatedPixmap(pGC) = pOldTile;
+ : pGC->tile.pixmap = pNewTile;
+ : changes |= GCTile;
+ : }
+ : }
+ : }
+ :#endif
+ : if (changes & GCTile) {
+ : if (!pGC->tileIsPixel && FbEvenTile (pGC->tile.pixmap->drawable.width *
+ : pDrawable->bitsPerPixel))
+ : {
+ : /* XXX This fixes corruption with tiled pixmaps, but may just be a
+ : * workaround for broken drivers
+ : */
+ : exaMoveOutPixmap(pGC->tile.pixmap);
+ : fbPadPixmap (pGC->tile.pixmap);
+ : exaPixmapDirty(pGC->tile.pixmap, 0, 0,
+ : pGC->tile.pixmap->drawable.width,
+ : pGC->tile.pixmap->drawable.height);
+ : }
+ : /* Mask out the GCTile change notification, now that we've done FB's
+ : * job for it.
+ : */
+ : changes &= ~GCTile;
+ : }
+ :
+ 1 0.0011 : fbValidateGC (pGC, changes, pDrawable);
+ :
+ 1 0.0011 : pGC->ops = (GCOps *) &exaOps;
+ 3 0.0033 :}
+ :
+ :static GCFuncs exaGCFuncs = {
+ : exaValidateGC,
+ : miChangeGC,
+ : miCopyGC,
+ : miDestroyGC,
+ : miChangeClip,
+ : miDestroyClip,
+ : miCopyClip
+ :};
+ :
+ :/**
+ : * exaCreateGC makes a new GC and hooks up its funcs handler, so that
+ : * exaValidateGC() will get called.
+ : */
+ :static int
+ :exaCreateGC (GCPtr pGC)
+ :{
+ : if (!fbCreateGC (pGC))
+ : return FALSE;
+ :
+ : pGC->funcs = &exaGCFuncs;
+ :
+ : return TRUE;
+ :}
+ :
+ :/**
+ : * exaCloseScreen() unwraps its wrapped screen functions and tears down EXA's
+ : * screen private, before calling down to the next CloseSccreen.
+ : */
+ :static Bool
+ :exaCloseScreen(int i, ScreenPtr pScreen)
+ :{
+ : ExaScreenPriv(pScreen);
+ :#ifdef RENDER
+ : PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
+ :#endif
+ :
+ : pScreen->CreateGC = pExaScr->SavedCreateGC;
+ : pScreen->CloseScreen = pExaScr->SavedCloseScreen;
+ : pScreen->GetImage = pExaScr->SavedGetImage;
+ : pScreen->GetSpans = pExaScr->SavedGetSpans;
+ : pScreen->PaintWindowBackground = pExaScr->SavedPaintWindowBackground;
+ : pScreen->PaintWindowBorder = pExaScr->SavedPaintWindowBorder;
+ : pScreen->CreatePixmap = pExaScr->SavedCreatePixmap;
+ : pScreen->DestroyPixmap = pExaScr->SavedDestroyPixmap;
+ : pScreen->CopyWindow = pExaScr->SavedCopyWindow;
+ :#ifdef RENDER
+ : if (ps) {
+ : ps->Composite = pExaScr->SavedComposite;
+ : ps->Glyphs = pExaScr->SavedGlyphs;
+ : }
+ :#endif
+ :
+ : xfree (pExaScr);
+ :
+ : return (*pScreen->CloseScreen) (i, pScreen);
+ :}
+ :
+ :/**
+ : * This function allocates a driver structure for EXA drivers to fill in. By
+ : * having EXA allocate the structure, the driver structure can be extended
+ : * without breaking ABI between EXA and the drivers. The driver's
+ : * responsibility is to check beforehand that the EXA module has a matching
+ : * major number and sufficient minor. Drivers are responsible for freeing the
+ : * driver structure using xfree().
+ : *
+ : * @return a newly allocated, zero-filled driver structure
+ : */
+ :ExaDriverPtr
+ :exaDriverAlloc(void)
+ :{
+ : return xcalloc(1, sizeof(ExaDriverRec));
+ :}
+ :
+ :/**
+ : * @param pScreen screen being initialized
+ : * @param pScreenInfo EXA driver record
+ : *
+ : * exaDriverInit sets up EXA given a driver record filled in by the driver.
+ : * pScreenInfo should have been allocated by exaDriverAlloc(). See the
+ : * comments in _ExaDriver for what must be filled in and what is optional.
+ : *
+ : * @return TRUE if EXA was successfully initialized.
+ : */
+ :Bool
+ :exaDriverInit (ScreenPtr pScreen,
+ : ExaDriverPtr pScreenInfo)
+ :{
+ : ExaScreenPrivPtr pExaScr;
+ :#ifdef RENDER
+ : PictureScreenPtr ps;
+ :#endif
+ :
+ : if (pScreenInfo->exa_major != EXA_VERSION_MAJOR ||
+ : pScreenInfo->exa_minor > EXA_VERSION_MINOR)
+ : {
+ : LogMessage(X_ERROR, "EXA(%d): driver's EXA version requirements "
+ : "(%d.%d) are incompatible with EXA version (%d.%d)\n",
+ : pScreen->myNum,
+ : pScreenInfo->exa_major, pScreenInfo->exa_minor,
+ : EXA_VERSION_MAJOR, EXA_VERSION_MINOR);
+ : return FALSE;
+ : }
+ :
+ :#ifdef RENDER
+ : ps = GetPictureScreenIfSet(pScreen);
+ :#endif
+ : if (exaGeneration != serverGeneration)
+ : {
+ : exaScreenPrivateIndex = AllocateScreenPrivateIndex();
+ : exaPixmapPrivateIndex = AllocatePixmapPrivateIndex();
+ : exaGeneration = serverGeneration;
+ : }
+ :
+ : pExaScr = xcalloc (sizeof (ExaScreenPrivRec), 1);
+ :
+ : if (!pExaScr) {
+ : LogMessage(X_WARNING, "EXA(%d): Failed to allocate screen private\n",
+ : pScreen->myNum);
+ : return FALSE;
+ : }
+ :
+ : pExaScr->info = pScreenInfo;
+ :
+ : pScreen->devPrivates[exaScreenPrivateIndex].ptr = (pointer) pExaScr;
+ :
+ : pExaScr->migration = ExaMigrationAlways;
+ :
+ : exaDDXDriverInit(pScreen);
+ :
+ : /*
+ : * Replace various fb screen functions
+ : */
+ : pExaScr->SavedCloseScreen = pScreen->CloseScreen;
+ : pScreen->CloseScreen = exaCloseScreen;
+ :
+ : pExaScr->SavedCreateGC = pScreen->CreateGC;
+ : pScreen->CreateGC = exaCreateGC;
+ :
+ : pExaScr->SavedGetImage = pScreen->GetImage;
+ : pScreen->GetImage = exaGetImage;
+ :
+ : pExaScr->SavedGetSpans = pScreen->GetSpans;
+ : pScreen->GetSpans = exaGetSpans;
+ :
+ : pExaScr->SavedCopyWindow = pScreen->CopyWindow;
+ : pScreen->CopyWindow = exaCopyWindow;
+ :
+ : pExaScr->SavedPaintWindowBackground = pScreen->PaintWindowBackground;
+ : pScreen->PaintWindowBackground = exaPaintWindow;
+ :
+ : pExaScr->SavedPaintWindowBorder = pScreen->PaintWindowBorder;
+ : pScreen->PaintWindowBorder = exaPaintWindow;
+ :
+ : pScreen->BackingStoreFuncs.SaveAreas = ExaCheckSaveAreas;
+ : pScreen->BackingStoreFuncs.RestoreAreas = ExaCheckRestoreAreas;
+ :#ifdef RENDER
+ : if (ps) {
+ : pExaScr->SavedComposite = ps->Composite;
+ : ps->Composite = exaComposite;
+ :
+ : pExaScr->SavedRasterizeTrapezoid = ps->RasterizeTrapezoid;
+ : ps->RasterizeTrapezoid = exaRasterizeTrapezoid;
+ :
+ : pExaScr->SavedAddTriangles = ps->AddTriangles;
+ : ps->AddTriangles = exaAddTriangles;
+ :
+ : pExaScr->SavedGlyphs = ps->Glyphs;
+ : ps->Glyphs = exaGlyphs;
+ : }
+ :#endif
+ :
+ :#ifdef MITSHM
+ : /* Re-register with the MI funcs, which don't allow shared pixmaps.
+ : * Shared pixmaps are almost always a performance loss for us, but this
+ : * still allows for SHM PutImage.
+ : */
+ : ShmRegisterFuncs(pScreen, NULL);
+ :#endif
+ : /*
+ : * Hookup offscreen pixmaps
+ : */
+ : if ((pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS) &&
+ : pExaScr->info->offScreenBase < pExaScr->info->memorySize)
+ : {
+ : if (!AllocatePixmapPrivate(pScreen, exaPixmapPrivateIndex,
+ : sizeof (ExaPixmapPrivRec))) {
+ : LogMessage(X_WARNING,
+ : "EXA(%d): Failed to allocate pixmap private\n",
+ : pScreen->myNum);
+ : return FALSE;
+ : }
+ : pExaScr->SavedCreatePixmap = pScreen->CreatePixmap;
+ : pScreen->CreatePixmap = exaCreatePixmap;
+ :
+ : pExaScr->SavedDestroyPixmap = pScreen->DestroyPixmap;
+ : pScreen->DestroyPixmap = exaDestroyPixmap;
+ :
+ : LogMessage(X_INFO, "EXA(%d): Offscreen pixmap area of %d bytes\n",
+ : pScreen->myNum,
+ : pExaScr->info->memorySize - pExaScr->info->offScreenBase);
+ : }
+ : else
+ : {
+ : LogMessage(X_INFO, "EXA(%d): No offscreen pixmaps\n", pScreen->myNum);
+ : if (!AllocatePixmapPrivate(pScreen, exaPixmapPrivateIndex, 0))
+ : return FALSE;
+ : }
+ :
+ : DBG_PIXMAP(("============== %ld < %ld\n", pExaScr->info->offScreenBase,
+ : pExaScr->info->memorySize));
+ : if (pExaScr->info->offScreenBase < pExaScr->info->memorySize) {
+ : if (!exaOffscreenInit (pScreen)) {
+ : LogMessage(X_WARNING, "EXA(%d): Offscreen pixmap setup failed\n",
+ : pScreen->myNum);
+ : return FALSE;
+ : }
+ : }
+ :
+ : LogMessage(X_INFO, "EXA(%d): Driver registered support for the following"
+ : " operations:\n", pScreen->myNum);
+ : assert(pScreenInfo->PrepareSolid != NULL);
+ : LogMessage(X_INFO, " Solid\n");
+ : assert(pScreenInfo->PrepareCopy != NULL);
+ : LogMessage(X_INFO, " Copy\n");
+ : if (pScreenInfo->PrepareComposite != NULL) {
+ : LogMessage(X_INFO, " Composite (RENDER acceleration)\n");
+ : }
+ : if (pScreenInfo->UploadToScreen != NULL) {
+ : LogMessage(X_INFO, " UploadToScreen\n");
+ : }
+ : if (pScreenInfo->DownloadFromScreen != NULL) {
+ : LogMessage(X_INFO, " DownloadFromScreen\n");
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :/**
+ : * exaDriverFini tears down EXA on a given screen.
+ : *
+ : * @param pScreen screen being torn down.
+ : */
+ :void
+ :exaDriverFini (ScreenPtr pScreen)
+ :{
+ : /*right now does nothing*/
+ :}
+ :
+ :/**
+ : * exaMarkSync() should be called after any asynchronous drawing by the hardware.
+ : *
+ : * @param pScreen screen which drawing occurred on
+ : *
+ : * exaMarkSync() sets a flag to indicate that some asynchronous drawing has
+ : * happened and a WaitSync() will be necessary before relying on the contents of
+ : * offscreen memory from the CPU's perspective. It also calls an optional
+ : * driver MarkSync() callback, the return value of which may be used to do partial
+ : * synchronization with the hardware in the future.
+ : */
+ :void exaMarkSync(ScreenPtr pScreen)
+ 22 0.0240 :{ /* exaMarkSync total: 88 0.0959 */
+ 10 0.0109 : ExaScreenPriv(pScreen);
+ :
+ 13 0.0142 : pExaScr->info->needsSync = TRUE;
+ 34 0.0370 : if (pExaScr->info->MarkSync != NULL) {
+ : pExaScr->info->lastMarker = (*pExaScr->info->MarkSync)(pScreen);
+ : }
+ 9 0.0098 :}
+ :
+ :/**
+ : * exaWaitSync() ensures that all drawing has been completed.
+ : *
+ : * @param pScreen screen being synchronized.
+ : *
+ : * Calls down into the driver to ensure that all previous drawing has completed.
+ : * It should always be called before relying on the framebuffer contents
+ : * reflecting previous drawing, from a CPU perspective.
+ : */
+ :void exaWaitSync(ScreenPtr pScreen)
+ 9 0.0098 :{ /* exaWaitSync total: 102 0.1111 */
+ 5 0.0054 : ExaScreenPriv(pScreen);
+ :
+ 45 0.0490 : if (pExaScr->info->needsSync && !pExaScr->swappedOut) {
+ 4 0.0044 : (*pExaScr->info->WaitMarker)(pScreen, pExaScr->info->lastMarker);
+ 22 0.0240 : pExaScr->info->needsSync = FALSE;
+ : }
+ 17 0.0185 :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/exa/exa_render.c"
+ *
+ * 785 0.8552
+ */
+
+
+ :/*
+ : * Copyright © 2001 Keith Packard
+ : *
+ : * Partly based on code that is Copyright © The XFree86 Project Inc.
+ : *
+ : * 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <stdlib.h>
+ :
+ :#include "exa_priv.h"
+ :
+ :#ifdef RENDER
+ :#include "mipict.h"
+ :
+ :#if DEBUG_TRACE_FALL
+ :static void exaCompositeFallbackPictDesc(PicturePtr pict, char *string, int n)
+ :{
+ : char format[20];
+ : char size[20];
+ : char loc;
+ : int temp;
+ :
+ : if (!pict) {
+ : snprintf(string, n, "None");
+ : return;
+ : }
+ :
+ : switch (pict->format)
+ : {
+ : case PICT_a8r8g8b8:
+ : snprintf(format, 20, "ARGB8888");
+ : break;
+ : case PICT_r5g6b5:
+ : snprintf(format, 20, "RGB565 ");
+ : break;
+ : case PICT_x1r5g5b5:
+ : snprintf(format, 20, "RGB555 ");
+ : break;
+ : case PICT_a8:
+ : snprintf(format, 20, "A8 ");
+ : break;
+ : case PICT_a1:
+ : snprintf(format, 20, "A1 ");
+ : break;
+ : default:
+ : snprintf(format, 20, "0x%x", (int)pict->format);
+ : break;
+ : }
+ :
+ : loc = exaGetOffscreenPixmap(pict->pDrawable, &temp, &temp) ? 's' : 'm';
+ :
+ : snprintf(size, 20, "%dx%d%s", pict->pDrawable->width,
+ : pict->pDrawable->height, pict->repeat ?
+ : " R" : "");
+ :
+ : snprintf(string, n, "%p:%c fmt %s (%s)", pict->pDrawable, loc, format, size);
+ :}
+ :
+ :static void
+ :exaPrintCompositeFallback(CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pMask,
+ : PicturePtr pDst)
+ :{
+ : char sop[20];
+ : char srcdesc[40], maskdesc[40], dstdesc[40];
+ :
+ : switch(op)
+ : {
+ : case PictOpSrc:
+ : sprintf(sop, "Src");
+ : break;
+ : case PictOpOver:
+ : sprintf(sop, "Over");
+ : break;
+ : default:
+ : sprintf(sop, "0x%x", (int)op);
+ : break;
+ : }
+ :
+ : exaCompositeFallbackPictDesc(pSrc, srcdesc, 40);
+ : exaCompositeFallbackPictDesc(pMask, maskdesc, 40);
+ : exaCompositeFallbackPictDesc(pDst, dstdesc, 40);
+ :
+ : ErrorF("Composite fallback: op %s, \n"
+ : " src %s, \n"
+ : " mask %s, \n"
+ : " dst %s, \n",
+ : sop, srcdesc, maskdesc, dstdesc);
+ :}
+ :#endif /* DEBUG_TRACE_FALL */
+ :
+ :static Bool
+ :exaOpReadsDestination (CARD8 op)
+ 1 0.0011 :{ /* exaOpReadsDestination total: 4 0.0044 */
+ : /* FALSE (does not read destination) is the list of ops in the protocol
+ : * document with "0" in the "Fb" column and no "Ab" in the "Fa" column.
+ : * That's just Clear and Src. ReduceCompositeOp() will already have
+ : * converted con/disjoint clear/src to Clear or Src.
+ : */
+ 3 0.0033 : switch (op) {
+ : case PictOpClear:
+ : case PictOpSrc:
+ : return FALSE;
+ : default:
+ : return TRUE;
+ : }
+ :}
+ :
+ :
+ :static Bool
+ :exaGetPixelFromRGBA(CARD32 *pixel,
+ : CARD16 red,
+ : CARD16 green,
+ : CARD16 blue,
+ : CARD16 alpha,
+ : CARD32 format)
+ :{
+ : int rbits, bbits, gbits, abits;
+ : int rshift, bshift, gshift, ashift;
+ :
+ : *pixel = 0;
+ :
+ : if (!PICT_FORMAT_COLOR(format))
+ : return FALSE;
+ :
+ : rbits = PICT_FORMAT_R(format);
+ : gbits = PICT_FORMAT_G(format);
+ : bbits = PICT_FORMAT_B(format);
+ : abits = PICT_FORMAT_A(format);
+ :
+ : if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) {
+ : bshift = 0;
+ : gshift = bbits;
+ : rshift = gshift + gbits;
+ : ashift = rshift + rbits;
+ : } else { /* PICT_TYPE_ABGR */
+ : rshift = 0;
+ : gshift = rbits;
+ : bshift = gshift + gbits;
+ : ashift = bshift + bbits;
+ : }
+ :
+ : *pixel |= ( blue >> (16 - bbits)) << bshift;
+ : *pixel |= ( red >> (16 - rbits)) << rshift;
+ : *pixel |= (green >> (16 - gbits)) << gshift;
+ : *pixel |= (alpha >> (16 - abits)) << ashift;
+ :
+ : return TRUE;
+ :}
+ :
+ :static Bool
+ :exaGetRGBAFromPixel(CARD32 pixel,
+ : CARD16 *red,
+ : CARD16 *green,
+ : CARD16 *blue,
+ : CARD16 *alpha,
+ : CARD32 format)
+ :{
+ : int rbits, bbits, gbits, abits;
+ : int rshift, bshift, gshift, ashift;
+ :
+ : if (!PICT_FORMAT_COLOR(format))
+ : return FALSE;
+ :
+ : rbits = PICT_FORMAT_R(format);
+ : gbits = PICT_FORMAT_G(format);
+ : bbits = PICT_FORMAT_B(format);
+ : abits = PICT_FORMAT_A(format);
+ :
+ : if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) {
+ : bshift = 0;
+ : gshift = bbits;
+ : rshift = gshift + gbits;
+ : ashift = rshift + rbits;
+ : } else { /* PICT_TYPE_ABGR */
+ : rshift = 0;
+ : gshift = rbits;
+ : bshift = gshift + gbits;
+ : ashift = bshift + bbits;
+ : }
+ :
+ : *red = ((pixel >> rshift ) & ((1 << rbits) - 1)) << (16 - rbits);
+ : while (rbits < 16) {
+ : *red |= *red >> rbits;
+ : rbits <<= 1;
+ : }
+ :
+ : *green = ((pixel >> gshift ) & ((1 << gbits) - 1)) << (16 - gbits);
+ : while (gbits < 16) {
+ : *green |= *green >> gbits;
+ : gbits <<= 1;
+ : }
+ :
+ : *blue = ((pixel >> bshift ) & ((1 << bbits) - 1)) << (16 - bbits);
+ : while (bbits < 16) {
+ : *blue |= *blue >> bbits;
+ : bbits <<= 1;
+ : }
+ :
+ : if (abits) {
+ : *alpha = ((pixel >> ashift ) & ((1 << abits) - 1)) << (16 - abits);
+ : while (abits < 16) {
+ : *alpha |= *alpha >> abits;
+ : abits <<= 1;
+ : }
+ : } else
+ : *alpha = 0xffff;
+ :
+ : return TRUE;
+ :}
+ :
+ :static int
+ :exaTryDriverSolidFill(PicturePtr pSrc,
+ : PicturePtr pDst,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : INT16 xDst,
+ : INT16 yDst,
+ : CARD16 width,
+ : CARD16 height)
+ :{
+ : ExaScreenPriv (pDst->pDrawable->pScreen);
+ : RegionRec region;
+ : BoxPtr pbox;
+ : int nbox;
+ : int dst_off_x, dst_off_y;
+ : PixmapPtr pSrcPix, pDstPix;
+ : CARD32 pixel;
+ : CARD16 red, green, blue, alpha;
+ : ExaMigrationRec pixmaps[1];
+ :
+ : xDst += pDst->pDrawable->x;
+ : yDst += pDst->pDrawable->y;
+ : xSrc += pSrc->pDrawable->x;
+ : ySrc += pSrc->pDrawable->y;
+ :
+ : if (!miComputeCompositeRegion (®ion, pSrc, NULL, pDst,
+ : xSrc, ySrc, 0, 0, xDst, yDst,
+ : width, height))
+ : return 1;
+ :
+ : pSrcPix = exaGetDrawablePixmap (pSrc->pDrawable);
+ : pixel = exaGetPixmapFirstPixel (pSrcPix);
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = FALSE;
+ : pixmaps[0].pPix = exaGetDrawablePixmap (pDst->pDrawable);
+ : exaDoMigration(pixmaps, 1, TRUE);
+ :
+ : pDstPix = exaGetOffscreenPixmap (pDst->pDrawable, &dst_off_x, &dst_off_y);
+ : if (!pDstPix) {
+ : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : return 0;
+ : }
+ :
+ : if (!exaGetRGBAFromPixel(pixel, &red, &green, &blue, &alpha,
+ : pSrc->format))
+ : {
+ : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : return -1;
+ : }
+ :
+ : if (!exaGetPixelFromRGBA(&pixel, red, green, blue, alpha,
+ : pDst->format))
+ : {
+ : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : return -1;
+ : }
+ :
+ : if (!(*pExaScr->info->PrepareSolid) (pDstPix, GXcopy, 0xffffffff, pixel))
+ : {
+ : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : return -1;
+ : }
+ :
+ : nbox = REGION_NUM_RECTS(®ion);
+ : pbox = REGION_RECTS(®ion);
+ :
+ : while (nbox--)
+ : {
+ : (*pExaScr->info->Solid) (pDstPix,
+ : pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
+ : pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
+ : pbox++;
+ : }
+ :
+ : (*pExaScr->info->DoneSolid) (pDstPix);
+ : exaMarkSync(pDst->pDrawable->pScreen);
+ :
+ : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : return 1;
+ :}
+ :
+ :static int
+ :exaTryDriverComposite(CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pMask,
+ : PicturePtr pDst,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : INT16 xMask,
+ : INT16 yMask,
+ : INT16 xDst,
+ : INT16 yDst,
+ : CARD16 width,
+ : CARD16 height)
+ 49 0.0534 :{ /* exaTryDriverComposite total: 348 0.3791 */
+ 23 0.0251 : ExaScreenPriv (pDst->pDrawable->pScreen);
+ : RegionRec region;
+ : BoxPtr pbox;
+ : int nbox;
+ : int src_off_x, src_off_y, mask_off_x, mask_off_y, dst_off_x, dst_off_y;
+ : PixmapPtr pSrcPix, pMaskPix = NULL, pDstPix;
+ : struct _Pixmap scratch;
+ : ExaMigrationRec pixmaps[3];
+ :
+ 10 0.0109 : pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable);
+ 5 0.0054 : pDstPix = exaGetDrawablePixmap(pDst->pDrawable);
+ 2 0.0022 : if (pMask)
+ 2 0.0022 : pMaskPix = exaGetDrawablePixmap(pMask->pDrawable);
+ :
+ : /* Bail if we might exceed coord limits by rendering from/to these. We
+ : * should really be making some scratch pixmaps with offsets and coords
+ : * adjusted to deal with this, but it hasn't been done yet.
+ : */
+ 24 0.0261 : if (pSrcPix->drawable.width > pExaScr->info->maxX ||
+ : pSrcPix->drawable.height > pExaScr->info->maxY ||
+ : pDstPix->drawable.width > pExaScr->info->maxX ||
+ : pDstPix->drawable.height > pExaScr->info->maxY ||
+ : (pMask && (pMaskPix->drawable.width > pExaScr->info->maxX ||
+ : pMaskPix->drawable.height > pExaScr->info->maxY)))
+ : {
+ : return -1;
+ : }
+ :
+ 14 0.0153 : xDst += pDst->pDrawable->x;
+ 2 0.0022 : yDst += pDst->pDrawable->y;
+ :
+ : if (pMask) {
+ 7 0.0076 : xMask += pMask->pDrawable->x;
+ 10 0.0109 : yMask += pMask->pDrawable->y;
+ : }
+ :
+ 9 0.0098 : xSrc += pSrc->pDrawable->x;
+ 2 0.0022 : ySrc += pSrc->pDrawable->y;
+ :
+ 23 0.0251 : if (!miComputeCompositeRegion (®ion, pSrc, pMask, pDst,
+ : xSrc, ySrc, xMask, yMask, xDst, yDst,
+ : width, height))
+ : return 1;
+ :
+ 38 0.0414 : if (pExaScr->info->CheckComposite &&
+ : !(*pExaScr->info->CheckComposite) (op, pSrc, pMask, pDst))
+ : {
+ : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : return -1;
+ : }
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = exaOpReadsDestination(op);
+ 1 0.0011 : pixmaps[0].pPix = exaGetDrawablePixmap (pDst->pDrawable);
+ : pixmaps[1].as_dst = FALSE;
+ : pixmaps[1].as_src = TRUE;
+ 3 0.0033 : pixmaps[1].pPix = exaGetDrawablePixmap (pSrc->pDrawable);
+ : if (pMask) {
+ : pixmaps[2].as_dst = FALSE;
+ : pixmaps[2].as_src = TRUE;
+ 6 0.0065 : pixmaps[2].pPix = exaGetDrawablePixmap (pMask->pDrawable);
+ 2 0.0022 : exaDoMigration(pixmaps, 3, TRUE);
+ : } else {
+ 2 0.0022 : exaDoMigration(pixmaps, 2, TRUE);
+ : }
+ :
+ 4 0.0044 : pSrcPix = exaGetOffscreenPixmap (pSrc->pDrawable, &src_off_x, &src_off_y);
+ : if (pMask)
+ 3 0.0033 : pMaskPix = exaGetOffscreenPixmap (pMask->pDrawable, &mask_off_x,
+ : &mask_off_y);
+ 2 0.0022 : pDstPix = exaGetOffscreenPixmap (pDst->pDrawable, &dst_off_x, &dst_off_y);
+ :
+ : if (!pDstPix) {
+ : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : return 0;
+ : }
+ :
+ 1 0.0011 : if (!pSrcPix && (!pMask || pMaskPix) && pExaScr->info->UploadToScratch) {
+ : pSrcPix = exaGetDrawablePixmap (pSrc->pDrawable);
+ : if ((*pExaScr->info->UploadToScratch) (pSrcPix, &scratch))
+ : pSrcPix = &scratch;
+ : } else if (pSrcPix && pMask && !pMaskPix && pExaScr->info->UploadToScratch) {
+ : pMaskPix = exaGetDrawablePixmap (pMask->pDrawable);
+ : if ((*pExaScr->info->UploadToScratch) (pMaskPix, &scratch))
+ : pMaskPix = &scratch;
+ : }
+ :
+ 2 0.0022 : if (!pSrcPix || (pMask && !pMaskPix)) {
+ : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : return 0;
+ : }
+ :
+ 9 0.0098 : if (!(*pExaScr->info->PrepareComposite) (op, pSrc, pMask, pDst, pSrcPix,
+ : pMaskPix, pDstPix))
+ : {
+ 5 0.0054 : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : return -1;
+ : }
+ :
+ 1 0.0011 : nbox = REGION_NUM_RECTS(®ion);
+ : pbox = REGION_RECTS(®ion);
+ :
+ : xMask -= xDst;
+ 16 0.0174 : yMask -= yDst;
+ :
+ : xSrc -= xDst;
+ : ySrc -= yDst;
+ :
+ 5 0.0054 : while (nbox--)
+ : {
+ 26 0.0283 : (*pExaScr->info->Composite) (pDstPix,
+ : pbox->x1 + xSrc + src_off_x,
+ : pbox->y1 + ySrc + src_off_y,
+ : pbox->x1 + xMask + mask_off_x,
+ : pbox->y1 + yMask + mask_off_y,
+ : pbox->x1 + dst_off_x,
+ : pbox->y1 + dst_off_y,
+ : pbox->x2 - pbox->x1,
+ : pbox->y2 - pbox->y1);
+ : pbox++;
+ : }
+ 3 0.0033 : (*pExaScr->info->DoneComposite) (pDstPix);
+ 12 0.0131 : exaMarkSync(pDst->pDrawable->pScreen);
+ :
+ 7 0.0076 : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : return 1;
+ 18 0.0196 :}
+ :
+ :/**
+ : * exaTryMagicTwoPassCompositeHelper implements PictOpOver using two passes of
+ : * simpler operations PictOpOutReverse and PictOpAdd. Mainly used for component
+ : * alpha and limited 1-tmu cards.
+ : *
+ : * From http://anholt.livejournal.com/32058.html:
+ : *
+ : * The trouble is that component-alpha rendering requires two different sources
+ : * for blending: one for the source value to the blender, which is the
+ : * per-channel multiplication of source and mask, and one for the source alpha
+ : * for multiplying with the destination channels, which is the multiplication
+ : * of the source channels by the mask alpha. So the equation for Over is:
+ : *
+ : * dst.A = src.A * mask.A + (1 - (src.A * mask.A)) * dst.A
+ : * dst.R = src.R * mask.R + (1 - (src.A * mask.R)) * dst.R
+ : * dst.G = src.G * mask.G + (1 - (src.A * mask.G)) * dst.G
+ : * dst.B = src.B * mask.B + (1 - (src.A * mask.B)) * dst.B
+ : *
+ : * But we can do some simpler operations, right? How about PictOpOutReverse,
+ : * which has a source factor of 0 and dest factor of (1 - source alpha). We
+ : * can get the source alpha value (srca.X = src.A * mask.X) out of the texture
+ : * blenders pretty easily. So we can do a component-alpha OutReverse, which
+ : * gets us:
+ : *
+ : * dst.A = 0 + (1 - (src.A * mask.A)) * dst.A
+ : * dst.R = 0 + (1 - (src.A * mask.R)) * dst.R
+ : * dst.G = 0 + (1 - (src.A * mask.G)) * dst.G
+ : * dst.B = 0 + (1 - (src.A * mask.B)) * dst.B
+ : *
+ : * OK. And if an op doesn't use the source alpha value for the destination
+ : * factor, then we can do the channel multiplication in the texture blenders
+ : * to get the source value, and ignore the source alpha that we wouldn't use.
+ : * We've supported this in the Radeon driver for a long time. An example would
+ : * be PictOpAdd, which does:
+ : *
+ : * dst.A = src.A * mask.A + dst.A
+ : * dst.R = src.R * mask.R + dst.R
+ : * dst.G = src.G * mask.G + dst.G
+ : * dst.B = src.B * mask.B + dst.B
+ : *
+ : * Hey, this looks good! If we do a PictOpOutReverse and then a PictOpAdd right
+ : * after it, we get:
+ : *
+ : * dst.A = src.A * mask.A + ((1 - (src.A * mask.A)) * dst.A)
+ : * dst.R = src.R * mask.R + ((1 - (src.A * mask.R)) * dst.R)
+ : * dst.G = src.G * mask.G + ((1 - (src.A * mask.G)) * dst.G)
+ : * dst.B = src.B * mask.B + ((1 - (src.A * mask.B)) * dst.B)
+ : */
+ :
+ :static int
+ :exaTryMagicTwoPassCompositeHelper(CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pMask,
+ : PicturePtr pDst,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : INT16 xMask,
+ : INT16 yMask,
+ : INT16 xDst,
+ : INT16 yDst,
+ : CARD16 width,
+ : CARD16 height)
+ :{
+ : ExaScreenPriv (pDst->pDrawable->pScreen);
+ : DrawablePtr pDstDraw = pDst->pDrawable;
+ : PixmapPtr pDstPixmap = exaGetDrawablePixmap(pDstDraw);
+ : int xoff, yoff;
+ :
+ : assert(op == PictOpOver);
+ :
+ : if (pExaScr->info->CheckComposite &&
+ : (!(*pExaScr->info->CheckComposite)(PictOpOutReverse, pSrc, pMask,
+ : pDst) ||
+ : !(*pExaScr->info->CheckComposite)(PictOpAdd, pSrc, pMask, pDst)))
+ : {
+ : return -1;
+ : }
+ :
+ : /* Now, we think we should be able to accelerate this operation. First,
+ : * composite the destination to be the destination times the source alpha
+ : * factors.
+ : */
+ : exaComposite(PictOpOutReverse, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask,
+ : xDst, yDst, width, height);
+ :
+ : exaGetDrawableDeltas(pDstDraw, pDstPixmap, &xoff, &yoff);
+ : xoff += pDstDraw->x;
+ : yoff += pDstDraw->y;
+ : exaPixmapDirty(pDstPixmap, xDst + xoff, yDst + yoff, xDst + xoff + width,
+ : yDst + yoff + height);
+ :
+ : /* Then, add in the source value times the destination alpha factors (1.0).
+ : */
+ : exaComposite(PictOpAdd, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask,
+ : xDst, yDst, width, height);
+ :
+ : return 1;
+ :}
+ :
+ :void
+ :exaComposite(CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pMask,
+ : PicturePtr pDst,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : INT16 xMask,
+ : INT16 yMask,
+ : INT16 xDst,
+ : INT16 yDst,
+ : CARD16 width,
+ : CARD16 height)
+ 48 0.0523 :{ /* exaComposite total: 354 0.3856 */
+ 39 0.0425 : ExaScreenPriv (pDst->pDrawable->pScreen);
+ : int ret = -1;
+ 5 0.0054 : Bool saveSrcRepeat = pSrc->repeat;
+ 3 0.0033 : Bool saveMaskRepeat = pMask ? pMask->repeat : 0;
+ : ExaMigrationRec pixmaps[3];
+ : int npixmaps = 1;
+ : PixmapPtr pSrcPixmap = NULL;
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = exaOpReadsDestination(op);
+ 2 0.0022 : pixmaps[0].pPix = exaGetDrawablePixmap (pDst->pDrawable);
+ :
+ 4 0.0044 : if (pSrc->pDrawable) {
+ 3 0.0033 : pSrcPixmap = exaGetDrawablePixmap (pSrc->pDrawable);
+ : pixmaps[npixmaps].as_dst = FALSE;
+ : pixmaps[npixmaps].as_src = TRUE;
+ : pixmaps[npixmaps].pPix = pSrcPixmap;
+ : npixmaps++;
+ : }
+ :
+ 1 0.0011 : if (pMask && pMask->pDrawable) {
+ : pixmaps[npixmaps].as_dst = FALSE;
+ : pixmaps[npixmaps].as_src = TRUE;
+ : pixmaps[npixmaps].pPix = exaGetDrawablePixmap (pMask->pDrawable);
+ : npixmaps++;
+ : }
+ :
+ : /* We currently don't support acceleration of gradients, or other pictures
+ : * with a NULL pDrawable.
+ : */
+ 14 0.0153 : if (pExaScr->swappedOut ||
+ : pSrc->pDrawable == NULL || (pMask != NULL && pMask->pDrawable == NULL))
+ : {
+ : goto fallback;
+ : }
+ :
+ : /* Remove repeat in source if useless */
+ 18 0.0196 : if (pSrc->repeat && !pSrc->transform && xSrc >= 0 &&
+ : (xSrc + width) <= pSrc->pDrawable->width && ySrc >= 0 &&
+ : (ySrc + height) <= pSrc->pDrawable->height)
+ : pSrc->repeat = 0;
+ :
+ 3 0.0033 : if (!pMask)
+ : {
+ 3 0.0033 : if ((op == PictOpSrc &&
+ : ((pSrc->format == pDst->format) ||
+ : (pSrc->format==PICT_a8r8g8b8 && pDst->format==PICT_x8r8g8b8) ||
+ : (pSrc->format==PICT_a8b8g8r8 && pDst->format==PICT_x8b8g8r8))) ||
+ : (op == PictOpOver && !pSrc->alphaMap && !pDst->alphaMap &&
+ : pSrc->format == pDst->format &&
+ : (pSrc->format==PICT_x8r8g8b8 || pSrc->format==PICT_x8b8g8r8)))
+ : {
+ : if (pSrc->pDrawable->width == 1 &&
+ : pSrc->pDrawable->height == 1 &&
+ : pSrc->repeat)
+ : {
+ : ret = exaTryDriverSolidFill(pSrc, pDst, xSrc, ySrc, xDst, yDst,
+ : width, height);
+ : if (ret == 1)
+ : goto done;
+ : }
+ : else if (pSrcPixmap && !pSrc->repeat && !pSrc->transform)
+ : {
+ : RegionRec region;
+ :
+ : xDst += pDst->pDrawable->x;
+ : yDst += pDst->pDrawable->y;
+ : xSrc += pSrc->pDrawable->x;
+ : ySrc += pSrc->pDrawable->y;
+ :
+ : if (!miComputeCompositeRegion (®ion, pSrc, pMask, pDst,
+ : xSrc, ySrc, xMask, yMask, xDst,
+ : yDst, width, height))
+ : goto done;
+ :
+ :
+ : exaCopyNtoN (pSrc->pDrawable, pDst->pDrawable, NULL,
+ : REGION_RECTS(®ion), REGION_NUM_RECTS(®ion),
+ : xSrc - xDst, ySrc - yDst,
+ : FALSE, FALSE, 0, NULL);
+ : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ : goto done;
+ : }
+ : else if (pSrcPixmap && !pSrc->transform &&
+ : pSrc->repeatType == RepeatNormal)
+ : {
+ : RegionRec region;
+ : DDXPointRec srcOrg;
+ :
+ : /* Let's see if the driver can do the repeat in one go */
+ : if (pExaScr->info->PrepareComposite && !pSrc->alphaMap &&
+ : !pDst->alphaMap)
+ : {
+ : ret = exaTryDriverComposite(op, pSrc, pMask, pDst, xSrc,
+ : ySrc, xMask, yMask, xDst, yDst,
+ : width, height);
+ : if (ret == 1)
+ : goto done;
+ : }
+ :
+ : /* Now see if we can use exaFillRegionTiled() */
+ : xDst += pDst->pDrawable->x;
+ : yDst += pDst->pDrawable->y;
+ : xSrc += pSrc->pDrawable->x;
+ : ySrc += pSrc->pDrawable->y;
+ :
+ : if (!miComputeCompositeRegion (®ion, pSrc, pMask, pDst, xSrc,
+ : ySrc, xMask, yMask, xDst, yDst,
+ : width, height))
+ : goto done;
+ :
+ : srcOrg.x = (xSrc - xDst) % pSrcPixmap->drawable.width;
+ : srcOrg.y = (ySrc - yDst) % pSrcPixmap->drawable.height;
+ :
+ : ret = exaFillRegionTiled(pDst->pDrawable, ®ion, pSrcPixmap,
+ : &srcOrg, FB_ALLONES, GXcopy);
+ :
+ : REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
+ :
+ : if (ret)
+ : goto done;
+ : }
+ : }
+ : }
+ :
+ : /* Remove repeat in mask if useless */
+ 12 0.0131 : if (pMask && pMask->repeat && !pMask->transform && xMask >= 0 &&
+ : (xMask + width) <= pMask->pDrawable->width && yMask >= 0 &&
+ : (yMask + height) <= pMask->pDrawable->height)
+ : pMask->repeat = 0;
+ :
+ 37 0.0403 : if (pExaScr->info->PrepareComposite &&
+ : (!pSrc->repeat || pSrc->repeatType == RepeatNormal) &&
+ : (!pMask || !pMask->repeat || pMask->repeatType == RepeatNormal) &&
+ : !pSrc->alphaMap && (!pMask || !pMask->alphaMap) && !pDst->alphaMap)
+ : {
+ : Bool isSrcSolid;
+ :
+ 59 0.0643 : ret = exaTryDriverComposite(op, pSrc, pMask, pDst, xSrc, ySrc, xMask,
+ : yMask, xDst, yDst, width, height);
+ 3 0.0033 : if (ret == 1)
+ : goto done;
+ :
+ : /* For generic masks and solid src pictures, mach64 can do Over in two
+ : * passes, similar to the component-alpha case.
+ : */
+ 8 0.0087 : isSrcSolid = pSrc->pDrawable->width == 1 &&
+ : pSrc->pDrawable->height == 1 &&
+ : pSrc->repeat;
+ :
+ : /* If we couldn't do the Composite in a single pass, and it was a
+ : * component-alpha Over, see if we can do it in two passes with
+ : * an OutReverse and then an Add.
+ : */
+ 2 0.0022 : if (ret == -1 && op == PictOpOver && pMask &&
+ : (pMask->componentAlpha || isSrcSolid)) {
+ : ret = exaTryMagicTwoPassCompositeHelper(op, pSrc, pMask, pDst,
+ : xSrc, ySrc,
+ : xMask, yMask, xDst, yDst,
+ : width, height);
+ : if (ret == 1)
+ : goto done;
+ : }
+ : }
+ :
+ :fallback:
+ : return;
+ :#if DEBUG_TRACE_FALL
+ : exaPrintCompositeFallback (op, pSrc, pMask, pDst);
+ :#endif
+ :
+ : exaDoMigration(pixmaps, npixmaps, FALSE);
+ : ExaCheckComposite (op, pSrc, pMask, pDst, xSrc, ySrc,
+ : xMask, yMask, xDst, yDst, width, height);
+ :
+ :done:
+ 15 0.0163 : pSrc->repeat = saveSrcRepeat;
+ 3 0.0033 : if (pMask)
+ 18 0.0196 : pMask->repeat = saveMaskRepeat;
+ 6 0.0065 :}
+ :#endif
+ :
+ :#define NeedsComponent(f) (PICT_FORMAT_A(f) != 0 && PICT_FORMAT_RGB(f) != 0)
+ :
+ :/**
+ : * exaRasterizeTrapezoid is just a wrapper around the software implementation.
+ : *
+ : * The trapezoid specification is basically too hard to be done in hardware (at
+ : * the very least, without programmability), so we just do the appropriate
+ : * Prepare/FinishAccess for it before using fbtrap.c.
+ : */
+ :void
+ :exaRasterizeTrapezoid (PicturePtr pPicture, xTrapezoid *trap,
+ : int x_off, int y_off)
+ :{ /* exaRasterizeTrapezoid total: 2 0.0022 */
+ : DrawablePtr pDraw = pPicture->pDrawable;
+ : ExaMigrationRec pixmaps[1];
+ : int xoff, yoff;
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = TRUE;
+ 1 0.0011 : pixmaps[0].pPix = exaGetDrawablePixmap (pDraw);
+ 1 0.0011 : exaDoMigration(pixmaps, 1, FALSE);
+ :
+ : exaPrepareAccess(pDraw, EXA_PREPARE_DEST);
+ : fbRasterizeTrapezoid(pPicture, trap, x_off, y_off);
+ : exaGetDrawableDeltas(pDraw, pixmaps[0].pPix, &xoff, &yoff);
+ : exaPixmapDirty(pixmaps[0].pPix, pDraw->x + xoff, pDraw->y + yoff,
+ : pDraw->x + xoff + pDraw->width,
+ : pDraw->y + yoff + pDraw->height);
+ : exaFinishAccess(pDraw, EXA_PREPARE_DEST);
+ :}
+ :
+ :/**
+ : * exaAddTriangles does migration and syncing before dumping down to the
+ : * software implementation.
+ : */
+ :void
+ :exaAddTriangles (PicturePtr pPicture, INT16 x_off, INT16 y_off, int ntri,
+ : xTriangle *tris)
+ :{
+ : DrawablePtr pDraw = pPicture->pDrawable;
+ : ExaMigrationRec pixmaps[1];
+ : int xoff, yoff;
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = TRUE;
+ : pixmaps[0].pPix = exaGetDrawablePixmap (pDraw);
+ : exaDoMigration(pixmaps, 1, FALSE);
+ :
+ : exaPrepareAccess(pDraw, EXA_PREPARE_DEST);
+ : fbAddTriangles(pPicture, x_off, y_off, ntri, tris);
+ : exaGetDrawableDeltas(pDraw, pixmaps[0].pPix, &xoff, &yoff);
+ : exaPixmapDirty(pixmaps[0].pPix, pDraw->x + xoff, pDraw->y + yoff,
+ : pDraw->x + xoff + pDraw->width,
+ : pDraw->y + yoff + pDraw->height);
+ : exaFinishAccess(pDraw, EXA_PREPARE_DEST);
+ :}
+ :
+ :/**
+ : * Returns TRUE if the glyphs in the lists intersect. Only checks based on
+ : * bounding box, which appears to be good enough to catch most cases at least.
+ : */
+ :static Bool
+ :exaGlyphsIntersect(int nlist, GlyphListPtr list, GlyphPtr *glyphs)
+ :{
+ : int x1, x2, y1, y2;
+ : int n;
+ : GlyphPtr glyph;
+ : int x, y;
+ : BoxRec extents;
+ : Bool first = TRUE;
+ :
+ : x = 0;
+ : y = 0;
+ : while (nlist--) {
+ : x += list->xOff;
+ : y += list->yOff;
+ : n = list->len;
+ : list++;
+ : while (n--) {
+ : glyph = *glyphs++;
+ :
+ : if (glyph->info.width == 0 || glyph->info.height == 0) {
+ : x += glyph->info.xOff;
+ : y += glyph->info.yOff;
+ : continue;
+ : }
+ :
+ : x1 = x - glyph->info.x;
+ : if (x1 < MINSHORT)
+ : x1 = MINSHORT;
+ : y1 = y - glyph->info.y;
+ : if (y1 < MINSHORT)
+ : y1 = MINSHORT;
+ : x2 = x1 + glyph->info.width;
+ : if (x2 > MAXSHORT)
+ : x2 = MAXSHORT;
+ : y2 = y1 + glyph->info.height;
+ : if (y2 > MAXSHORT)
+ : y2 = MAXSHORT;
+ :
+ : if (first) {
+ : extents.x1 = x1;
+ : extents.y1 = y1;
+ : extents.x2 = x2;
+ : extents.y2 = y2;
+ : first = FALSE;
+ : } else {
+ : if (x1 < extents.x2 && x2 > extents.x1 &&
+ : y1 < extents.y2 && y2 > extents.y1)
+ : {
+ : return TRUE;
+ : }
+ :
+ : if (x1 < extents.x1)
+ : extents.x1 = x1;
+ : if (x2 > extents.x2)
+ : extents.x2 = x2;
+ : if (y1 < extents.y1)
+ : extents.y1 = y1;
+ : if (y2 > extents.y2)
+ : extents.y2 = y2;
+ : }
+ : x += glyph->info.xOff;
+ : y += glyph->info.yOff;
+ : }
+ : }
+ :
+ : return FALSE;
+ :}
+ :
+ :/* exaGlyphs is a slight variation on miGlyphs, to support acceleration. The
+ : * issue is that miGlyphs' use of ModifyPixmapHeader makes it impossible to
+ : * migrate these pixmaps. So, instead we create a pixmap at the beginning of
+ : * the loop and upload each glyph into the pixmap before compositing.
+ : */
+ :void
+ :exaGlyphs (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pDst,
+ : PictFormatPtr maskFormat,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : int nlist,
+ : GlyphListPtr list,
+ : GlyphPtr *glyphs)
+ 1 0.0011 :{ /* exaGlyphs total: 185 0.2015 */
+ : ExaScreenPriv (pDst->pDrawable->pScreen);
+ : PixmapPtr pPixmap = NULL;
+ : PicturePtr pPicture;
+ : PixmapPtr pMaskPixmap = NULL;
+ 1 0.0011 : PixmapPtr pDstPixmap = exaGetDrawablePixmap(pDst->pDrawable);
+ : PicturePtr pMask;
+ : ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ : int width = 0, height = 0;
+ : int x, y, x1, y1, xoff, yoff;
+ 1 0.0011 : int xDst = list->xOff, yDst = list->yOff;
+ : int n;
+ : int error;
+ : BoxRec extents;
+ : CARD32 component_alpha;
+ :
+ : /* If we have a mask format but it's the same as all the glyphs and
+ : * the glyphs don't intersect, we can avoid accumulating the glyphs in the
+ : * temporary picture.
+ : */
+ : if (maskFormat != NULL) {
+ : Bool sameFormat = TRUE;
+ : int i;
+ :
+ 1 0.0011 : for (i = 0; i < nlist; i++) {
+ : if (maskFormat->format != list[i].format->format) {
+ : sameFormat = FALSE;
+ : break;
+ : }
+ : }
+ : if (sameFormat) {
+ : if (!exaGlyphsIntersect(nlist, list, glyphs)) {
+ : maskFormat = NULL;
+ : }
+ : }
+ : }
+ :
+ : /* If the driver doesn't support accelerated composite, there's no point in
+ : * going to this extra work. Assume that any driver that supports Composite
+ : * will be able to support component alpha using the two-pass helper.
+ : */
+ : if (!pExaScr->info->PrepareComposite)
+ : {
+ : miGlyphs(op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
+ : return;
+ : }
+ :
+ : if (maskFormat)
+ : {
+ : GCPtr pGC;
+ : xRectangle rect;
+ :
+ 1 0.0011 : miGlyphExtents (nlist, list, glyphs, &extents);
+ :
+ : extents.x1 = max(extents.x1, 0);
+ : extents.y1 = max(extents.y1, 0);
+ : extents.x2 = min(extents.x2, pDst->pDrawable->width);
+ 1 0.0011 : extents.y2 = min(extents.y2, pDst->pDrawable->height);
+ :
+ : if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1)
+ : return;
+ : width = extents.x2 - extents.x1;
+ : height = extents.y2 - extents.y1;
+ : pMaskPixmap = (*pScreen->CreatePixmap) (pScreen, width, height,
+ : maskFormat->depth);
+ : if (!pMaskPixmap)
+ : return;
+ : component_alpha = NeedsComponent(maskFormat->format);
+ 1 0.0011 : pMask = CreatePicture (0, &pMaskPixmap->drawable,
+ : maskFormat, CPComponentAlpha, &component_alpha,
+ : serverClient, &error);
+ : if (!pMask)
+ : {
+ : (*pScreen->DestroyPixmap) (pMaskPixmap);
+ : return;
+ : }
+ : ValidatePicture(pMask);
+ : pGC = GetScratchGC (pMaskPixmap->drawable.depth, pScreen);
+ : ValidateGC (&pMaskPixmap->drawable, pGC);
+ : rect.x = 0;
+ : rect.y = 0;
+ : rect.width = width;
+ : rect.height = height;
+ 1 0.0011 : (*pGC->ops->PolyFillRect) (&pMaskPixmap->drawable, pGC, 1, &rect);
+ : exaPixmapDirty(pMaskPixmap, 0, 0, width, height);
+ : FreeScratchGC (pGC);
+ : x = -extents.x1;
+ : y = -extents.y1;
+ : }
+ : else
+ : {
+ : pMask = pDst;
+ : x = 0;
+ : y = 0;
+ : }
+ :
+ : exaGetDrawableDeltas(pDst->pDrawable, pDstPixmap, &xoff, &yoff);
+ :
+ : while (nlist--)
+ : {
+ : GCPtr pGC = NULL;
+ : int maxwidth = 0, maxheight = 0, i;
+ : ExaMigrationRec pixmaps[1];
+ : PixmapPtr pScratchPixmap = NULL;
+ :
+ : x += list->xOff;
+ : y += list->yOff;
+ : n = list->len;
+ : for (i = 0; i < n; i++) {
+ 14 0.0153 : if (glyphs[i]->info.width > maxwidth)
+ : maxwidth = glyphs[i]->info.width;
+ : if (glyphs[i]->info.height > maxheight)
+ : maxheight = glyphs[i]->info.height;
+ : }
+ 1 0.0011 : if (maxwidth == 0 || maxheight == 0) {
+ : while (n--)
+ : {
+ : GlyphPtr glyph;
+ :
+ : glyph = *glyphs++;
+ : x += glyph->info.xOff;
+ : y += glyph->info.yOff;
+ : }
+ : list++;
+ : continue;
+ : }
+ :
+ : /* Create the (real) temporary pixmap to store the current glyph in */
+ 1 0.0011 : pPixmap = (*pScreen->CreatePixmap) (pScreen, maxwidth, maxheight,
+ : list->format->depth);
+ : if (!pPixmap)
+ : return;
+ :
+ : /* Create a temporary picture to wrap the temporary pixmap, so it can be
+ : * used as a source for Composite.
+ : */
+ : component_alpha = NeedsComponent(list->format->format);
+ : pPicture = CreatePicture (0, &pPixmap->drawable, list->format,
+ : CPComponentAlpha, &component_alpha,
+ : serverClient, &error);
+ : if (!pPicture) {
+ : (*pScreen->DestroyPixmap) (pPixmap);
+ : return;
+ : }
+ : ValidatePicture(pPicture);
+ :
+ : /* Give the temporary pixmap an initial kick towards the screen, so
+ : * it'll stick there.
+ : */
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = TRUE;
+ : pixmaps[0].pPix = pPixmap;
+ : exaDoMigration (pixmaps, 1, pExaScr->info->PrepareComposite != NULL);
+ :
+ 1 0.0011 : while (n--)
+ : {
+ 1 0.0011 : GlyphPtr glyph = *glyphs++;
+ : pointer glyphdata = (pointer) (glyph + 1);
+ 5 0.0054 : DrawablePtr pCmpDrw = (maskFormat ? pMask : pDst)->pDrawable;
+ :
+ : x1 = x - glyph->info.x;
+ 8 0.0087 : y1 = y - glyph->info.y;
+ :
+ 7 0.0076 : if (x1 >= pCmpDrw->width || y1 >= pCmpDrw->height ||
+ : (x1 + glyph->info.width) <= 0 || (y1 + glyph->info.height) <= 0)
+ : goto nextglyph;
+ :
+ 2 0.0022 : (*pScreen->ModifyPixmapHeader) (pScratchPixmap,
+ : glyph->info.width,
+ : glyph->info.height,
+ : 0, 0, -1, glyphdata);
+ :
+ : /* Copy the glyph data into the proper pixmap instead of a fake.
+ : * First we try to use UploadToScreen, if we can, then we fall back
+ : * to a plain exaCopyArea in case of failure.
+ : */
+ 5 0.0054 : if (pExaScr->info->UploadToScreen &&
+ : exaPixmapIsOffscreen(pPixmap) &&
+ : (*pExaScr->info->UploadToScreen) (pPixmap, 0, 0,
+ : glyph->info.width,
+ : glyph->info.height,
+ : glyphdata,
+ : PixmapBytePad(glyph->info.width,
+ : list->format->depth)))
+ : {
+ : exaMarkSync (pScreen);
+ : } else {
+ : /* Set up the scratch pixmap/GC for doing a CopyArea. */
+ : if (pScratchPixmap == NULL) {
+ : /* Get a scratch pixmap to wrap the original glyph data */
+ 2 0.0022 : pScratchPixmap = GetScratchPixmapHeader (pScreen,
+ : glyph->info.width,
+ : glyph->info.height,
+ : list->format->depth,
+ : list->format->depth,
+ : -1, glyphdata);
+ : if (!pScratchPixmap) {
+ : FreePicture(pPicture, 0);
+ : (*pScreen->DestroyPixmap) (pPixmap);
+ : return;
+ : }
+ :
+ : /* Get a scratch GC with which to copy the glyph data from
+ : * scratch to temporary
+ : */
+ : pGC = GetScratchGC (list->format->depth, pScreen);
+ 1 0.0011 : ValidateGC (&pPixmap->drawable, pGC);
+ : } else {
+ 2 0.0022 : (*pScreen->ModifyPixmapHeader) (pScratchPixmap,
+ : glyph->info.width,
+ : glyph->info.height,
+ : 0, 0, -1, glyphdata);
+ 5 0.0054 : pScratchPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ : }
+ :
+ 7 0.0076 : exaCopyArea (&pScratchPixmap->drawable, &pPixmap->drawable, pGC,
+ : 0, 0, glyph->info.width, glyph->info.height, 0, 0);
+ : }
+ :
+ 5 0.0054 : exaPixmapDirty (pPixmap, 0, 0,
+ : glyph->info.width, glyph->info.height);
+ :
+ 5 0.0054 : if (maskFormat)
+ : {
+ 4 0.0044 : exaComposite (PictOpAdd, pPicture, NULL, pMask, 0, 0, 0, 0,
+ : x1, y1, glyph->info.width, glyph->info.height);
+ 2 0.0022 : exaPixmapDirty(pMaskPixmap, x1, y1, x1 + glyph->info.width,
+ : y1 + glyph->info.height);
+ : }
+ : else
+ : {
+ 13 0.0142 : exaComposite (op, pSrc, pPicture, pDst,
+ : xSrc + x1 - xDst, ySrc + y1 - yDst,
+ : 0, 0, x1, y1, glyph->info.width,
+ : glyph->info.height);
+ 11 0.0120 : x1 += pDst->pDrawable->x + xoff;
+ 5 0.0054 : y1 += pDst->pDrawable->y + yoff;
+ 3 0.0033 : exaPixmapDirty(pDstPixmap, x1, y1, x1 + glyph->info.width,
+ : y1 + glyph->info.height);
+ : }
+ :nextglyph:
+ 3 0.0033 : x += glyph->info.xOff;
+ 2 0.0022 : y += glyph->info.yOff;
+ : }
+ : list++;
+ : if (pGC != NULL)
+ : FreeScratchGC (pGC);
+ 1 0.0011 : FreePicture ((pointer) pPicture, 0);
+ : (*pScreen->DestroyPixmap) (pPixmap);
+ : if (pScratchPixmap != NULL)
+ : FreeScratchPixmapHeader (pScratchPixmap);
+ : }
+ : if (maskFormat)
+ : {
+ : x = extents.x1;
+ : y = extents.y1;
+ 1 0.0011 : exaComposite (op, pSrc, pMask, pDst, xSrc + x - xDst, ySrc + y - yDst,
+ : 0, 0, x, y, width, height);
+ : FreePicture ((pointer) pMask, (XID) 0);
+ : (*pScreen->DestroyPixmap) (pMaskPixmap);
+ : }
+ :}
+/*
+ * Total samples for file : "interp.c"
+ *
+ * 753 0.8203
+ */
+
+<credited to line zero> 753 0.8203 :
+ /* __i686.get_pc_thunk.cx total: 1 0.0011 */
+ /* __i686.get_pc_thunk.bx total: 44 0.0479 */
+ /* _nl_load_locale_from_archive total: 1 0.0011 */
+ /* _itoa_word total: 1 0.0011 */
+ /* __find_specmb total: 2 0.0022 */
+ /* _IO_old_init total: 1 0.0011 */
+ /* _IO_str_init_static_internal total: 1 0.0011 */
+ /* _int_free total: 227 0.2473 */
+ /* _int_malloc total: 460 0.5011 */
+ /* _int_realloc total: 10 0.0109 */
+ /* __close_nocancel total: 1 0.0011 */
+ /* __read_nocancel total: 3 0.0033 */
+ /* __xstat32_conv total: 1 0.0011 */
+/*
+ * Total samples for file : "exa_unaccel.c"
+ *
+ * 590 0.6427
+ */
+
+<credited to line zero> 590 0.6427 :
+ /* __i686.get_pc_thunk.cx total: 14 0.0153 */
+ /* __i686.get_pc_thunk.bx total: 576 0.6275 */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/exa/exa_offscreen.c"
+ *
+ * 534 0.5817
+ */
+
+
+ :/*
+ : * Copyright © 2003 Anders Carlsson
+ : *
+ : * 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 Anders Carlsson not be used in
+ : * advertising or publicity pertaining to distribution of the software without
+ : * specific, written prior permission. Anders Carlsson makes no
+ : * representations about the suitability of this software for any purpose. It
+ : * is provided "as is" without express or implied warranty.
+ : *
+ : * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ : * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ : * EVENT SHALL ANDERS CARLSSON 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.
+ : */
+ :
+ :/** @file
+ : * This allocator allocates blocks of memory by maintaining a list of areas
+ : * and a score for each area. As an area is marked used, its score is
+ : * incremented, and periodically all of the areas have their scores decayed by
+ : * a fraction. When allocating, the contiguous block of areas with the minimum
+ : * score is found and evicted in order to make room for the new allocation.
+ : */
+ :
+ :#include "exa_priv.h"
+ :
+ :#include <limits.h>
+ :#include <assert.h>
+ :#include <stdlib.h>
+ :
+ :#if DEBUG_OFFSCREEN
+ :#define DBG_OFFSCREEN(a) ErrorF a
+ :#else
+ :#define DBG_OFFSCREEN(a)
+ :#endif
+ :
+ :#if DEBUG_OFFSCREEN
+ :static void
+ :ExaOffscreenValidate (ScreenPtr pScreen)
+ :{
+ : ExaScreenPriv (pScreen);
+ : ExaOffscreenArea *prev = 0, *area;
+ :
+ : assert (pExaScr->info->offScreenAreas->base_offset ==
+ : pExaScr->info->offScreenBase);
+ : for (area = pExaScr->info->offScreenAreas; area; area = area->next)
+ : {
+ : assert (area->offset >= area->base_offset &&
+ : area->offset < (area->base_offset + area->size));
+ : if (prev)
+ : assert (prev->base_offset + prev->size == area->base_offset);
+ : prev = area;
+ : }
+ : assert (prev->base_offset + prev->size == pExaScr->info->memorySize);
+ :}
+ :#else
+ :#define ExaOffscreenValidate(s)
+ :#endif
+ :
+ :static ExaOffscreenArea *
+ :ExaOffscreenKickOut (ScreenPtr pScreen, ExaOffscreenArea *area)
+ :{
+ : if (area->save)
+ : (*area->save) (pScreen, area);
+ : return exaOffscreenFree (pScreen, area);
+ :}
+ :
+ :/**
+ : * exaOffscreenAlloc allocates offscreen memory
+ : *
+ : * @param pScreen current screen
+ : * @param size size in bytes of the allocation
+ : * @param align byte alignment requirement for the offset of the allocated area
+ : * @param locked whether the allocated area is locked and can't be kicked out
+ : * @param save callback for when the area is evicted from memory
+ : * @param privdata private data for the save callback.
+ : *
+ : * Allocates offscreen memory from the device associated with pScreen. size
+ : * and align deteremine where and how large the allocated area is, and locked
+ : * will mark whether it should be held in card memory. privdata may be any
+ : * pointer for the save callback when the area is removed.
+ : *
+ : * Note that locked areas do get evicted on VT switch unless the driver
+ : * requested version 2.1 or newer behavior. In that case, the save callback is
+ : * still called.
+ : */
+ :ExaOffscreenArea *
+ :exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
+ : Bool locked,
+ : ExaOffscreenSaveProc save,
+ : pointer privData)
+ 2 0.0022 :{ /* exaOffscreenAlloc total: 68 0.0741 */
+ : ExaOffscreenArea *area, *begin, *best;
+ 1 0.0011 : ExaScreenPriv (pScreen);
+ : int tmp, real_size = 0, best_score;
+ :#if DEBUG_OFFSCREEN
+ : static int number = 0;
+ : ErrorF("================= ============ allocating a new pixmap %d\n", ++number);
+ :#endif
+ :
+ : ExaOffscreenValidate (pScreen);
+ 1 0.0011 : if (!align)
+ : align = 1;
+ :
+ : if (!size)
+ : {
+ : DBG_OFFSCREEN (("Alloc 0x%x -> EMPTY\n", size));
+ : return NULL;
+ : }
+ :
+ : /* throw out requests that cannot fit */
+ 2 0.0022 : if (size > (pExaScr->info->memorySize - pExaScr->info->offScreenBase))
+ : {
+ : DBG_OFFSCREEN (("Alloc 0x%x vs (0x%lx) -> TOBIG\n", size,
+ : pExaScr->info->memorySize -
+ : pExaScr->info->offScreenBase));
+ : return NULL;
+ : }
+ :
+ : /* Try to find a free space that'll fit. */
+ 11 0.0120 : for (area = pExaScr->info->offScreenAreas; area; area = area->next)
+ : {
+ : /* skip allocated areas */
+ 11 0.0120 : if (area->state != ExaOffscreenAvail)
+ : continue;
+ :
+ : /* adjust size to match alignment requirement */
+ : real_size = size;
+ 2 0.0022 : tmp = area->base_offset % align;
+ 31 0.0338 : if (tmp)
+ : real_size += (align - tmp);
+ :
+ : /* does it fit? */
+ : if (real_size <= area->size)
+ : break;
+ : }
+ :
+ : if (!area)
+ : {
+ : /*
+ : * Kick out existing users to make space.
+ : *
+ : * First, locate a region which can hold the desired object.
+ : */
+ :
+ : /* prev points at the first object to boot */
+ : best = NULL;
+ : best_score = INT_MAX;
+ : for (begin = pExaScr->info->offScreenAreas; begin != NULL;
+ : begin = begin->next)
+ : {
+ : int avail, score;
+ : ExaOffscreenArea *scan;
+ :
+ : if (begin->state == ExaOffscreenLocked)
+ : continue;
+ :
+ : /* adjust size needed to account for alignment loss for this area */
+ : real_size = size;
+ : tmp = begin->base_offset % align;
+ : if (tmp)
+ : real_size += (align - tmp);
+ :
+ : avail = 0;
+ : score = 0;
+ : /* now see if we can make room here, and how "costly" it'll be. */
+ : for (scan = begin; scan != NULL; scan = scan->next)
+ : {
+ : if (scan->state == ExaOffscreenLocked) {
+ : /* Can't make room here, start after this locked area. */
+ : begin = scan;
+ : break;
+ : }
+ : /* Score should only be non-zero for ExaOffscreenRemovable */
+ : score += scan->score;
+ : avail += scan->size;
+ : if (avail >= real_size)
+ : break;
+ : }
+ : /* Is it the best option we've found so far? */
+ : if (avail >= real_size && score < best_score) {
+ : best = begin;
+ : best_score = score;
+ : }
+ : }
+ : area = best;
+ : if (!area)
+ : {
+ : DBG_OFFSCREEN (("Alloc 0x%x -> NOSPACE\n", size));
+ : /* Could not allocate memory */
+ : ExaOffscreenValidate (pScreen);
+ : return NULL;
+ : }
+ :
+ : /* adjust size needed to account for alignment loss for this area */
+ : real_size = size;
+ : tmp = area->base_offset % align;
+ : if (tmp)
+ : real_size += (align - tmp);
+ :
+ : /*
+ : * Kick out first area if in use
+ : */
+ : if (area->state != ExaOffscreenAvail)
+ : area = ExaOffscreenKickOut (pScreen, area);
+ : /*
+ : * Now get the system to merge the other needed areas together
+ : */
+ : while (area->size < real_size)
+ : {
+ : assert (area->next && area->next->state == ExaOffscreenRemovable);
+ : (void) ExaOffscreenKickOut (pScreen, area->next);
+ : }
+ : }
+ :
+ : /* save extra space in new area */
+ 1 0.0011 : if (real_size < area->size)
+ : {
+ : ExaOffscreenArea *new_area = xalloc (sizeof (ExaOffscreenArea));
+ : if (!new_area)
+ : return NULL;
+ : new_area->base_offset = area->base_offset + real_size;
+ : new_area->offset = new_area->base_offset;
+ : new_area->size = area->size - real_size;
+ : new_area->state = ExaOffscreenAvail;
+ : new_area->save = NULL;
+ : new_area->score = 0;
+ : new_area->next = area->next;
+ 1 0.0011 : area->next = new_area;
+ : area->size = real_size;
+ : }
+ : /*
+ : * Mark this area as in use
+ : */
+ : if (locked)
+ : area->state = ExaOffscreenLocked;
+ : else
+ : area->state = ExaOffscreenRemovable;
+ : area->privData = privData;
+ : area->save = save;
+ : area->score = 0;
+ : area->offset = (area->base_offset + align - 1);
+ 5 0.0054 : area->offset -= area->offset % align;
+ :
+ : ExaOffscreenValidate (pScreen);
+ :
+ : DBG_OFFSCREEN (("Alloc 0x%x -> 0x%x (0x%x)\n", size,
+ : area->base_offset, area->offset));
+ : return area;
+ :}
+ :
+ :/**
+ : * Ejects all offscreen areas, and uninitializes the offscreen memory manager.
+ : */
+ :void
+ :ExaOffscreenSwapOut (ScreenPtr pScreen)
+ :{
+ : ExaScreenPriv (pScreen);
+ :
+ : ExaOffscreenValidate (pScreen);
+ : /* loop until a single free area spans the space */
+ : for (;;)
+ : {
+ : ExaOffscreenArea *area = pExaScr->info->offScreenAreas;
+ :
+ : if (!area)
+ : break;
+ : if (area->state == ExaOffscreenAvail)
+ : {
+ : area = area->next;
+ : if (!area)
+ : break;
+ : }
+ : assert (area->state != ExaOffscreenAvail);
+ : (void) ExaOffscreenKickOut (pScreen, area);
+ : ExaOffscreenValidate (pScreen);
+ : }
+ : ExaOffscreenValidate (pScreen);
+ : ExaOffscreenFini (pScreen);
+ :}
+ :
+ :/** Ejects all pixmaps managed by EXA. */
+ :static void
+ :ExaOffscreenEjectPixmaps (ScreenPtr pScreen)
+ :{
+ : ExaScreenPriv (pScreen);
+ :
+ : ExaOffscreenValidate (pScreen);
+ : /* loop until a single free area spans the space */
+ : for (;;)
+ : {
+ : ExaOffscreenArea *area;
+ :
+ : for (area = pExaScr->info->offScreenAreas; area != NULL;
+ : area = area->next)
+ : {
+ : if (area->state == ExaOffscreenRemovable &&
+ : area->save == exaPixmapSave)
+ : {
+ : (void) ExaOffscreenKickOut (pScreen, area);
+ : ExaOffscreenValidate (pScreen);
+ : break;
+ : }
+ : }
+ : if (area == NULL)
+ : break;
+ : }
+ : ExaOffscreenValidate (pScreen);
+ :}
+ :
+ :void
+ :ExaOffscreenSwapIn (ScreenPtr pScreen)
+ :{
+ : exaOffscreenInit (pScreen);
+ :}
+ :
+ :/**
+ : * Prepares EXA for disabling of FB access, or restoring it.
+ : *
+ : * In version 2.1, the disabling results in pixmaps being ejected, while other
+ : * allocations remain. With this plus the prevention of migration while
+ : * swappedOut is set, EXA by itself should not cause any access of the
+ : * framebuffer to occur while swapped out. Any remaining issues are the
+ : * responsibility of the driver.
+ : *
+ : * Prior to version 2.1, all allocations, including locked ones, are ejected
+ : * when access is disabled, and the allocator is torn down while swappedOut
+ : * is set. This is more drastic, and caused implementation difficulties for
+ : * many drivers that could otherwise handle the lack of FB access while
+ : * swapped out.
+ : */
+ :void
+ :exaEnableDisableFBAccess (int index, Bool enable)
+ :{
+ : ScreenPtr pScreen = screenInfo.screens[index];
+ : ExaScreenPriv (pScreen);
+ :
+ : if (!enable && pExaScr->disableFbCount++ == 0) {
+ : if (pExaScr->info->exa_minor < 1)
+ : ExaOffscreenSwapOut (pScreen);
+ : else
+ : ExaOffscreenEjectPixmaps (pScreen);
+ : pExaScr->swappedOut = TRUE;
+ : }
+ :
+ : if (enable && --pExaScr->disableFbCount == 0) {
+ : if (pExaScr->info->exa_minor < 1)
+ : ExaOffscreenSwapIn (pScreen);
+ : pExaScr->swappedOut = FALSE;
+ : }
+ :}
+ :
+ :/* merge the next free area into this one */
+ :static void
+ :ExaOffscreenMerge (ExaOffscreenArea *area)
+ 1 0.0011 :{ /* ExaOffscreenMerge total: 3 0.0033 */
+ : ExaOffscreenArea *next = area->next;
+ :
+ : /* account for space */
+ : area->size += next->size;
+ : /* frob pointer */
+ 1 0.0011 : area->next = next->next;
+ : xfree (next);
+ 1 0.0011 :}
+ :
+ :/**
+ : * exaOffscreenFree frees an allocation.
+ : *
+ : * @param pScreen current screen
+ : * @param area offscreen area to free
+ : *
+ : * exaOffscreenFree frees an allocation created by exaOffscreenAlloc. Note that
+ : * the save callback of the area is not called, and it is up to the driver to
+ : * do any cleanup necessary as a result.
+ : *
+ : * @return pointer to the newly freed area. This behavior should not be relied
+ : * on.
+ : */
+ :ExaOffscreenArea *
+ :exaOffscreenFree (ScreenPtr pScreen, ExaOffscreenArea *area)
+ :{ /* exaOffscreenFree total: 11 0.0120 */
+ : ExaScreenPriv(pScreen);
+ : ExaOffscreenArea *next = area->next;
+ : ExaOffscreenArea *prev;
+ :
+ : DBG_OFFSCREEN (("Free 0x%x -> 0x%x (0x%x)\n", area->size,
+ : area->base_offset, area->offset));
+ : ExaOffscreenValidate (pScreen);
+ :
+ : area->state = ExaOffscreenAvail;
+ : area->save = NULL;
+ : area->score = 0;
+ : /*
+ : * Find previous area
+ : */
+ : if (area == pExaScr->info->offScreenAreas)
+ : prev = NULL;
+ : else
+ 2 0.0022 : for (prev = pExaScr->info->offScreenAreas; prev; prev = prev->next)
+ 8 0.0087 : if (prev->next == area)
+ : break;
+ :
+ : /* link with next area if free */
+ : if (next && next->state == ExaOffscreenAvail)
+ 1 0.0011 : ExaOffscreenMerge (area);
+ :
+ : /* link with prev area if free */
+ : if (prev && prev->state == ExaOffscreenAvail)
+ : {
+ : area = prev;
+ : ExaOffscreenMerge (area);
+ : }
+ :
+ : ExaOffscreenValidate (pScreen);
+ : DBG_OFFSCREEN(("\tdone freeing\n"));
+ : return area;
+ :}
+ :
+ :void
+ :ExaOffscreenMarkUsed (PixmapPtr pPixmap)
+ 11 0.0120 :{ /* ExaOffscreenMarkUsed total: 452 0.4924 */
+ 4 0.0044 : ExaPixmapPriv (pPixmap);
+ 17 0.0185 : ExaScreenPriv (pPixmap->drawable.pScreen);
+ : static int iter = 0;
+ :
+ 9 0.0098 : if (!pExaPixmap || !pExaPixmap->area)
+ : return;
+ :
+ : /* The numbers here are arbitrary. We may want to tune these. */
+ : pExaPixmap->area->score += 100;
+ 19 0.0207 : if (++iter == 10) {
+ : ExaOffscreenArea *area;
+ 79 0.0861 : for (area = pExaScr->info->offScreenAreas; area != NULL;
+ 27 0.0294 : area = area->next)
+ : {
+ 77 0.0839 : if (area->state == ExaOffscreenRemovable)
+ 198 0.2157 : area->score = (area->score * 7) / 8;
+ : }
+ : iter = 0;
+ : }
+ 11 0.0120 :}
+ :
+ :/**
+ : * exaOffscreenInit initializes the offscreen memory manager.
+ : *
+ : * @param pScreen current screen
+ : *
+ : * exaOffscreenInit is called by exaDriverInit to set up the memory manager for
+ : * the screen, if any offscreen memory is available.
+ : */
+ :Bool
+ :exaOffscreenInit (ScreenPtr pScreen)
+ :{
+ : ExaScreenPriv (pScreen);
+ : ExaOffscreenArea *area;
+ :
+ : /* Allocate a big free area */
+ : area = xalloc (sizeof (ExaOffscreenArea));
+ :
+ : if (!area)
+ : return FALSE;
+ :
+ : area->state = ExaOffscreenAvail;
+ : area->base_offset = pExaScr->info->offScreenBase;
+ : area->offset = area->base_offset;
+ : area->size = pExaScr->info->memorySize - area->base_offset;
+ : area->save = NULL;
+ : area->next = NULL;
+ : area->score = 0;
+ :
+ : /* Add it to the free areas */
+ : pExaScr->info->offScreenAreas = area;
+ :
+ : ExaOffscreenValidate (pScreen);
+ :
+ : return TRUE;
+ :}
+ :
+ :void
+ :ExaOffscreenFini (ScreenPtr pScreen)
+ :{
+ : ExaScreenPriv (pScreen);
+ : ExaOffscreenArea *area;
+ :
+ : /* just free all of the area records */
+ : while ((area = pExaScr->info->offScreenAreas))
+ : {
+ : pExaScr->info->offScreenAreas = area->next;
+ : xfree (area);
+ : }
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/pixman/pixman/pixman-region.c"
+ *
+ * 480 0.5229
+ */
+
+
+ :/***********************************************************
+ :
+ :Copyright 1987, 1988, 1989, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :Copyright 1987, 1988, 1989 by
+ :Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 Digital not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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 <config.h>
+ :#include <stdlib.h>
+ :#include <limits.h>
+ :#include <string.h>
+ :#include <stdio.h>
+ :
+ :#include "pixman-private.h"
+ :#include "pixman.h"
+ :
+ :typedef struct pixman_region16_point {
+ : int x, y;
+ :} pixman_region16_point_t;
+ :
+ :#define PIXREGION_NIL(reg) ((reg)->data && !(reg)->data->numRects)
+ :/* not a region */
+ :#define PIXREGION_NAR(reg) ((reg)->data == pixman_brokendata)
+ :#define PIXREGION_NUM_RECTS(reg) ((reg)->data ? (reg)->data->numRects : 1)
+ :#define PIXREGION_SIZE(reg) ((reg)->data ? (reg)->data->size : 0)
+ :#define PIXREGION_RECTS(reg) ((reg)->data ? (pixman_box16_t *)((reg)->data + 1) \
+ : : &(reg)->extents)
+ :#define PIXREGION_BOXPTR(reg) ((pixman_box16_t *)((reg)->data + 1))
+ :#define PIXREGION_BOX(reg,i) (&PIXREGION_BOXPTR(reg)[i])
+ :#define PIXREGION_TOP(reg) PIXREGION_BOX(reg, (reg)->data->numRects)
+ :#define PIXREGION_END(reg) PIXREGION_BOX(reg, (reg)->data->numRects - 1)
+ :#define PIXREGION_SZOF(n) (sizeof(pixman_region16_data_t) + ((n) * sizeof(pixman_box16_t)))
+ :
+ :
+ :#undef assert
+ :#ifdef DEBUG_PIXREGION
+ :#define assert(expr) {if (!(expr)) \
+ : FatalError("Assertion failed file %s, line %d: expr\n", \
+ : __FILE__, __LINE__); }
+ :#else
+ :#define assert(expr)
+ :#endif
+ :
+ :#define good(reg) assert(pixman_region_selfcheck(reg))
+ :
+ :#undef MIN
+ :#define MIN(a,b) ((a) < (b) ? (a) : (b))
+ :#undef MAX
+ :#define MAX(a,b) ((a) > (b) ? (a) : (b))
+ :
+ :static const pixman_box16_t _pixman_region_emptyBox = {0, 0, 0, 0};
+ :static const pixman_region16_data_t _pixman_region_emptyData = {0, 0};
+ :static const pixman_region16_data_t _pixman_brokendata = {0, 0};
+ :
+ :static pixman_box16_t *pixman_region_emptyBox = (pixman_box16_t *)&_pixman_region_emptyBox;
+ :static pixman_region16_data_t *pixman_region_emptyData = (pixman_region16_data_t *)&_pixman_region_emptyData;
+ :static pixman_region16_data_t *pixman_brokendata = (pixman_region16_data_t *)&_pixman_brokendata;
+ :
+ :/* This function exists only to make it possible to preserve the X ABI - it should
+ : * go away at first opportunity.
+ : *
+ : * The problem is that the X ABI exports the three structs and has used
+ : * them through macros. So the X server calls this function with
+ : * the addresses of those structs which makes the existing code continue to
+ : * work.
+ : */
+ :void
+ :pixman_region_set_static_pointers (pixman_box16_t *empty_box,
+ : pixman_region16_data_t *empty_data,
+ : pixman_region16_data_t *broken_data)
+ :{
+ : pixman_region_emptyBox = empty_box;
+ : pixman_region_emptyData = empty_data;
+ : pixman_brokendata = broken_data;
+ :}
+ :
+ :static pixman_bool_t
+ :pixman_break (pixman_region16_t *pReg);
+ :
+ :/*
+ : * The functions in this file implement the Region abstraction used extensively
+ : * throughout the X11 sample server. A Region is simply a set of disjoint
+ : * (non-overlapping) rectangles, plus an "extent" rectangle which is the
+ : * smallest single rectangle that contains all the non-overlapping rectangles.
+ : *
+ : * A Region is implemented as a "y-x-banded" array of rectangles. This array
+ : * imposes two degrees of order. First, all rectangles are sorted by top side
+ : * y coordinate first (y1), and then by left side x coordinate (x1).
+ : *
+ : * Furthermore, the rectangles are grouped into "bands". Each rectangle in a
+ : * band has the same top y coordinate (y1), and each has the same bottom y
+ : * coordinate (y2). Thus all rectangles in a band differ only in their left
+ : * and right side (x1 and x2). Bands are implicit in the array of rectangles:
+ : * there is no separate list of band start pointers.
+ : *
+ : * The y-x band representation does not minimize rectangles. In particular,
+ : * if a rectangle vertically crosses a band (the rectangle has scanlines in
+ : * the y1 to y2 area spanned by the band), then the rectangle may be broken
+ : * down into two or more smaller rectangles stacked one atop the other.
+ : *
+ : * ----------- -----------
+ : * | | | | band 0
+ : * | | -------- ----------- --------
+ : * | | | | in y-x banded | | | | band 1
+ : * | | | | form is | | | |
+ : * ----------- | | ----------- --------
+ : * | | | | band 2
+ : * -------- --------
+ : *
+ : * An added constraint on the rectangles is that they must cover as much
+ : * horizontal area as possible: no two rectangles within a band are allowed
+ : * to touch.
+ : *
+ : * Whenever possible, bands will be merged together to cover a greater vertical
+ : * distance (and thus reduce the number of rectangles). Two bands can be merged
+ : * only if the bottom of one touches the top of the other and they have
+ : * rectangles in the same places (of the same width, of course).
+ : *
+ : * Adam de Boor wrote most of the original region code. Joel McCormack
+ : * substantially modified or rewrote most of the core arithmetic routines, and
+ : * added pixman_region_validate in order to support several speed improvements to
+ : * pixman_region_validateTree. Bob Scheifler changed the representation to be more
+ : * compact when empty or a single rectangle, and did a bunch of gratuitous
+ : * reformatting. Carl Worth did further gratuitous reformatting while re-merging
+ : * the server and client region code into libpixregion.
+ : */
+ :
+ :/* true iff two Boxes overlap */
+ :#define EXTENTCHECK(r1,r2) \
+ : (!( ((r1)->x2 <= (r2)->x1) || \
+ : ((r1)->x1 >= (r2)->x2) || \
+ : ((r1)->y2 <= (r2)->y1) || \
+ : ((r1)->y1 >= (r2)->y2) ) )
+ :
+ :/* true iff (x,y) is in Box */
+ :#define INBOX(r,x,y) \
+ : ( ((r)->x2 > x) && \
+ : ((r)->x1 <= x) && \
+ : ((r)->y2 > y) && \
+ : ((r)->y1 <= y) )
+ :
+ :/* true iff Box r1 contains Box r2 */
+ :#define SUBSUMES(r1,r2) \
+ : ( ((r1)->x1 <= (r2)->x1) && \
+ : ((r1)->x2 >= (r2)->x2) && \
+ : ((r1)->y1 <= (r2)->y1) && \
+ : ((r1)->y2 >= (r2)->y2) )
+ :
+ :#define allocData(n) malloc(PIXREGION_SZOF(n))
+ :#define freeData(reg) if ((reg)->data && (reg)->data->size) free((reg)->data)
+ :
+ :#define RECTALLOC_BAIL(pReg,n,bail) \
+ :if (!(pReg)->data || (((pReg)->data->numRects + (n)) > (pReg)->data->size)) \
+ : if (!pixman_rect_alloc(pReg, n)) { goto bail; }
+ :
+ :#define RECTALLOC(pReg,n) \
+ :if (!(pReg)->data || (((pReg)->data->numRects + (n)) > (pReg)->data->size)) \
+ : if (!pixman_rect_alloc(pReg, n)) { return FALSE; }
+ :
+ :#define ADDRECT(pNextRect,nx1,ny1,nx2,ny2) \
+ :{ \
+ : pNextRect->x1 = nx1; \
+ : pNextRect->y1 = ny1; \
+ : pNextRect->x2 = nx2; \
+ : pNextRect->y2 = ny2; \
+ : pNextRect++; \
+ :}
+ :
+ :#define NEWRECT(pReg,pNextRect,nx1,ny1,nx2,ny2) \
+ :{ \
+ : if (!(pReg)->data || ((pReg)->data->numRects == (pReg)->data->size))\
+ : { \
+ : if (!pixman_rect_alloc(pReg, 1)) \
+ : return FALSE; \
+ : pNextRect = PIXREGION_TOP(pReg); \
+ : } \
+ : ADDRECT(pNextRect,nx1,ny1,nx2,ny2); \
+ : pReg->data->numRects++; \
+ : assert(pReg->data->numRects<=pReg->data->size); \
+ :}
+ :
+ :#define DOWNSIZE(reg,numRects) \
+ :if (((numRects) < ((reg)->data->size >> 1)) && ((reg)->data->size > 50)) \
+ :{ \
+ : pixman_region16_data_t * NewData; \
+ : NewData = (pixman_region16_data_t *)realloc((reg)->data, PIXREGION_SZOF(numRects)); \
+ : if (NewData) \
+ : { \
+ : NewData->size = (numRects); \
+ : (reg)->data = NewData; \
+ : } \
+ :}
+ :
+ :pixman_bool_t
+ :pixman_region_equal(reg1, reg2)
+ : pixman_region16_t * reg1;
+ : pixman_region16_t * reg2;
+ :{
+ : int i;
+ : pixman_box16_t *rects1;
+ : pixman_box16_t *rects2;
+ :
+ : if (reg1->extents.x1 != reg2->extents.x1) return FALSE;
+ : if (reg1->extents.x2 != reg2->extents.x2) return FALSE;
+ : if (reg1->extents.y1 != reg2->extents.y1) return FALSE;
+ : if (reg1->extents.y2 != reg2->extents.y2) return FALSE;
+ : if (PIXREGION_NUM_RECTS(reg1) != PIXREGION_NUM_RECTS(reg2)) return FALSE;
+ :
+ : rects1 = PIXREGION_RECTS(reg1);
+ : rects2 = PIXREGION_RECTS(reg2);
+ : for (i = 0; i != PIXREGION_NUM_RECTS(reg1); i++) {
+ : if (rects1[i].x1 != rects2[i].x1) return FALSE;
+ : if (rects1[i].x2 != rects2[i].x2) return FALSE;
+ : if (rects1[i].y1 != rects2[i].y1) return FALSE;
+ : if (rects1[i].y2 != rects2[i].y2) return FALSE;
+ : }
+ : return TRUE;
+ :}
+ :
+ :int
+ :pixman_region16_print(rgn)
+ : pixman_region16_t * rgn;
+ :{
+ : int num, size;
+ : int i;
+ : pixman_box16_t * rects;
+ :
+ : num = PIXREGION_NUM_RECTS(rgn);
+ : size = PIXREGION_SIZE(rgn);
+ : rects = PIXREGION_RECTS(rgn);
+ : fprintf(stderr, "num: %d size: %d\n", num, size);
+ : fprintf(stderr, "extents: %d %d %d %d\n",
+ : rgn->extents.x1, rgn->extents.y1, rgn->extents.x2, rgn->extents.y2);
+ : for (i = 0; i < num; i++)
+ : fprintf(stderr, "%d %d %d %d \n",
+ : rects[i].x1, rects[i].y1, rects[i].x2, rects[i].y2);
+ : fprintf(stderr, "\n");
+ : return(num);
+ :}
+ :
+ :
+ :void
+ :pixman_region_init (pixman_region16_t *region)
+ 8 0.0087 :{ /* pixman_region_init total: 13 0.0142 */
+ 3 0.0033 : region->extents = *pixman_region_emptyBox;
+ : region->data = pixman_region_emptyData;
+ 2 0.0022 :}
+ :
+ :void
+ :pixman_region_init_rect (pixman_region16_t *region,
+ : int x, int y, unsigned int width, unsigned int height)
+ 2 0.0022 :{ /* pixman_region_init_rect total: 3 0.0033 */
+ : region->extents.x1 = x;
+ : region->extents.y1 = y;
+ : region->extents.x2 = x + width;
+ 1 0.0011 : region->extents.y2 = y + height;
+ : region->data = NULL;
+ :}
+ :
+ :void
+ :pixman_region_init_with_extents (pixman_region16_t *region, pixman_box16_t *extents)
+ 1 0.0011 :{ /* pixman_region_init_with_extents total: 2 0.0022 */
+ 1 0.0011 : region->extents = *extents;
+ : region->data = NULL;
+ :}
+ :
+ :void
+ :pixman_region_fini (pixman_region16_t *region)
+ 41 0.0447 :{ /* pixman_region_fini total: 44 0.0479 */
+ : good (region);
+ 1 0.0011 : freeData (region);
+ 2 0.0022 :}
+ :
+ :int
+ :pixman_region_n_rects (pixman_region16_t *region)
+ 14 0.0153 :{ /* pixman_region_n_rects total: 38 0.0414 */
+ 16 0.0174 : return PIXREGION_NUM_RECTS (region);
+ 8 0.0087 :}
+ :
+ :pixman_box16_t *
+ :pixman_region_rects (pixman_region16_t *region)
+ :{
+ : return PIXREGION_RECTS (region);
+ :}
+ :
+ :pixman_box16_t *
+ :pixman_region_rectangles (pixman_region16_t *region,
+ : int *n_rects)
+ 41 0.0447 :{ /* pixman_region_rectangles total: 82 0.0893 */
+ : if (n_rects)
+ : *n_rects = PIXREGION_NUM_RECTS (region);
+ :
+ 17 0.0185 : return PIXREGION_RECTS (region);
+ 24 0.0261 :}
+ :
+ :static pixman_bool_t
+ :pixman_break (pixman_region16_t *region)
+ :{
+ : freeData (region);
+ : region->extents = *pixman_region_emptyBox;
+ : region->data = pixman_brokendata;
+ : return FALSE;
+ :}
+ :
+ :static pixman_bool_t
+ :pixman_rect_alloc (pixman_region16_t * region, int n)
+ 7 0.0076 :{ /* pixman_rect_alloc total: 16 0.0174 */
+ : pixman_region16_data_t *data;
+ :
+ : if (!region->data)
+ : {
+ : n++;
+ : region->data = allocData(n);
+ : if (!region->data)
+ : return pixman_break (region);
+ : region->data->numRects = 1;
+ : *PIXREGION_BOXPTR(region) = region->extents;
+ : }
+ 1 0.0011 : else if (!region->data->size)
+ : {
+ 4 0.0044 : region->data = allocData(n);
+ 1 0.0011 : if (!region->data)
+ : return pixman_break (region);
+ 1 0.0011 : region->data->numRects = 0;
+ : }
+ : else
+ : {
+ : if (n == 1)
+ : {
+ : n = region->data->numRects;
+ : if (n > 500) /* XXX pick numbers out of a hat */
+ : n = 250;
+ : }
+ : n += region->data->numRects;
+ : data = (pixman_region16_data_t *)realloc(region->data, PIXREGION_SZOF(n));
+ : if (!data)
+ : return pixman_break (region);
+ : region->data = data;
+ : }
+ : region->data->size = n;
+ : return TRUE;
+ 2 0.0022 :}
+ :
+ :pixman_bool_t
+ :pixman_region_copy (pixman_region16_t *dst, pixman_region16_t *src)
+ 4 0.0044 :{ /* pixman_region_copy total: 15 0.0163 */
+ : good(dst);
+ : good(src);
+ : if (dst == src)
+ : return TRUE;
+ 2 0.0022 : dst->extents = src->extents;
+ 1 0.0011 : if (!src->data || !src->data->size)
+ : {
+ 6 0.0065 : freeData(dst);
+ 1 0.0011 : dst->data = src->data;
+ : return TRUE;
+ : }
+ : if (!dst->data || (dst->data->size < src->data->numRects))
+ : {
+ : freeData(dst);
+ : dst->data = allocData(src->data->numRects);
+ : if (!dst->data)
+ : return pixman_break (dst);
+ : dst->data->size = src->data->numRects;
+ : }
+ : dst->data->numRects = src->data->numRects;
+ : memmove((char *)PIXREGION_BOXPTR(dst),(char *)PIXREGION_BOXPTR(src),
+ : dst->data->numRects * sizeof(pixman_box16_t));
+ : return TRUE;
+ 1 0.0011 :}
+ :
+ :/*======================================================================
+ : * Generic Region Operator
+ : *====================================================================*/
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_coalesce --
+ : * Attempt to merge the boxes in the current band with those in the
+ : * previous one. We are guaranteed that the current band extends to
+ : * the end of the rects array. Used only by pixman_op.
+ : *
+ : * Results:
+ : * The new index for the previous band.
+ : *
+ : * Side Effects:
+ : * If coalescing takes place:
+ : * - rectangles in the previous band will have their y2 fields
+ : * altered.
+ : * - region->data->numRects will be decreased.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static inline int
+ :pixman_coalesce (
+ : pixman_region16_t * region, /* Region to coalesce */
+ : int prevStart, /* Index of start of previous band */
+ : int curStart) /* Index of start of current band */
+ :{
+ : pixman_box16_t * pPrevBox; /* Current box in previous band */
+ : pixman_box16_t * pCurBox; /* Current box in current band */
+ : int numRects; /* Number rectangles in both bands */
+ : int y2; /* Bottom of current band */
+ : /*
+ : * Figure out how many rectangles are in the band.
+ : */
+ : numRects = curStart - prevStart;
+ : assert(numRects == region->data->numRects - curStart);
+ :
+ : if (!numRects) return curStart;
+ :
+ : /*
+ : * The bands may only be coalesced if the bottom of the previous
+ : * matches the top scanline of the current.
+ : */
+ : pPrevBox = PIXREGION_BOX(region, prevStart);
+ : pCurBox = PIXREGION_BOX(region, curStart);
+ : if (pPrevBox->y2 != pCurBox->y1) return curStart;
+ :
+ : /*
+ : * Make sure the bands have boxes in the same places. This
+ : * assumes that boxes have been added in such a way that they
+ : * cover the most area possible. I.e. two boxes in a band must
+ : * have some horizontal space between them.
+ : */
+ : y2 = pCurBox->y2;
+ :
+ : do {
+ : if ((pPrevBox->x1 != pCurBox->x1) || (pPrevBox->x2 != pCurBox->x2)) {
+ : return (curStart);
+ : }
+ : pPrevBox++;
+ : pCurBox++;
+ : numRects--;
+ : } while (numRects);
+ :
+ : /*
+ : * The bands may be merged, so set the bottom y of each box
+ : * in the previous band to the bottom y of the current band.
+ : */
+ : numRects = curStart - prevStart;
+ : region->data->numRects -= numRects;
+ : do {
+ : pPrevBox--;
+ : pPrevBox->y2 = y2;
+ : numRects--;
+ : } while (numRects);
+ : return prevStart;
+ :}
+ :
+ :/* Quicky macro to avoid trivial reject procedure calls to pixman_coalesce */
+ :
+ :#define Coalesce(newReg, prevBand, curBand) \
+ : if (curBand - prevBand == newReg->data->numRects - curBand) { \
+ : prevBand = pixman_coalesce(newReg, prevBand, curBand); \
+ : } else { \
+ : prevBand = curBand; \
+ : }
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_region_appendNonO --
+ : * Handle a non-overlapping band for the union and subtract operations.
+ : * Just adds the (top/bottom-clipped) rectangles into the region.
+ : * Doesn't have to check for subsumption or anything.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : * region->data->numRects is incremented and the rectangles overwritten
+ : * with the rectangles we're passed.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :
+ :static inline pixman_bool_t
+ :pixman_region_appendNonO (
+ : pixman_region16_t * region,
+ : pixman_box16_t * r,
+ : pixman_box16_t * rEnd,
+ : int y1,
+ : int y2)
+ :{
+ : pixman_box16_t * pNextRect;
+ : int newRects;
+ :
+ : newRects = rEnd - r;
+ :
+ : assert(y1 < y2);
+ : assert(newRects != 0);
+ :
+ : /* Make sure we have enough space for all rectangles to be added */
+ : RECTALLOC(region, newRects);
+ : pNextRect = PIXREGION_TOP(region);
+ : region->data->numRects += newRects;
+ : do {
+ : assert(r->x1 < r->x2);
+ : ADDRECT(pNextRect, r->x1, y1, r->x2, y2);
+ : r++;
+ : } while (r != rEnd);
+ :
+ : return TRUE;
+ :}
+ :
+ :#define FindBand(r, rBandEnd, rEnd, ry1) \
+ :{ \
+ : ry1 = r->y1; \
+ : rBandEnd = r+1; \
+ : while ((rBandEnd != rEnd) && (rBandEnd->y1 == ry1)) { \
+ : rBandEnd++; \
+ : } \
+ :}
+ :
+ :#define AppendRegions(newReg, r, rEnd) \
+ :{ \
+ : int newRects; \
+ : if ((newRects = rEnd - r)) { \
+ : RECTALLOC(newReg, newRects); \
+ : memmove((char *)PIXREGION_TOP(newReg),(char *)r, \
+ : newRects * sizeof(pixman_box16_t)); \
+ : newReg->data->numRects += newRects; \
+ : } \
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_op --
+ : * Apply an operation to two regions. Called by pixman_region_union, pixman_region_inverse,
+ : * pixman_region_subtract, pixman_region_intersect.... Both regions MUST have at least one
+ : * rectangle, and cannot be the same object.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * The new region is overwritten.
+ : * pOverlap set to TRUE if overlapFunc ever returns TRUE.
+ : *
+ : * Notes:
+ : * The idea behind this function is to view the two regions as sets.
+ : * Together they cover a rectangle of area that this function divides
+ : * into horizontal bands where points are covered only by one region
+ : * or by both. For the first case, the nonOverlapFunc is called with
+ : * each the band and the band's upper and lower extents. For the
+ : * second, the overlapFunc is called to process the entire band. It
+ : * is responsible for clipping the rectangles in the band, though
+ : * this function provides the boundaries.
+ : * At the end of each band, the new region is coalesced, if possible,
+ : * to reduce the number of rectangles in the region.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :
+ :typedef pixman_bool_t (*OverlapProcPtr)(
+ : pixman_region16_t *region,
+ : pixman_box16_t *r1,
+ : pixman_box16_t *r1End,
+ : pixman_box16_t *r2,
+ : pixman_box16_t *r2End,
+ : short y1,
+ : short y2,
+ : int *pOverlap);
+ :
+ :static pixman_bool_t
+ :pixman_op(
+ : pixman_region16_t *newReg, /* Place to store result */
+ : pixman_region16_t * reg1, /* First region in operation */
+ : pixman_region16_t * reg2, /* 2d region in operation */
+ : OverlapProcPtr overlapFunc, /* Function to call for over-
+ : * lapping bands */
+ : int appendNon1, /* Append non-overlapping bands */
+ : /* in region 1 ? */
+ : int appendNon2, /* Append non-overlapping bands */
+ : /* in region 2 ? */
+ : int *pOverlap)
+ 7 0.0076 :{ /* pixman_op total: 146 0.1591 */
+ : pixman_box16_t * r1; /* Pointer into first region */
+ : pixman_box16_t * r2; /* Pointer into 2d region */
+ : pixman_box16_t * r1End; /* End of 1st region */
+ : pixman_box16_t * r2End; /* End of 2d region */
+ : short ybot; /* Bottom of intersection */
+ : short ytop; /* Top of intersection */
+ : pixman_region16_data_t * oldData; /* Old data for newReg */
+ : int prevBand; /* Index of start of
+ : * previous band in newReg */
+ : int curBand; /* Index of start of current
+ : * band in newReg */
+ : pixman_box16_t * r1BandEnd; /* End of current band in r1 */
+ : pixman_box16_t * r2BandEnd; /* End of current band in r2 */
+ : short top; /* Top of non-overlapping band */
+ : short bot; /* Bottom of non-overlapping band*/
+ : int r1y1; /* Temps for r1->y1 and r2->y1 */
+ : int r2y1;
+ : int newSize;
+ : int numRects;
+ :
+ : /*
+ : * Break any region computed from a broken region
+ : */
+ 3 0.0033 : if (PIXREGION_NAR (reg1) || PIXREGION_NAR(reg2))
+ : return pixman_break (newReg);
+ :
+ : /*
+ : * Initialization:
+ : * set r1, r2, r1End and r2End appropriately, save the rectangles
+ : * of the destination region until the end in case it's one of
+ : * the two source regions, then mark the "new" region empty, allocating
+ : * another array of rectangles for it to use.
+ : */
+ :
+ 3 0.0033 : r1 = PIXREGION_RECTS(reg1);
+ 2 0.0022 : newSize = PIXREGION_NUM_RECTS(reg1);
+ : r1End = r1 + newSize;
+ 4 0.0044 : numRects = PIXREGION_NUM_RECTS(reg2);
+ 1 0.0011 : r2 = PIXREGION_RECTS(reg2);
+ : r2End = r2 + numRects;
+ : assert(r1 != r1End);
+ : assert(r2 != r2End);
+ :
+ : oldData = (pixman_region16_data_t *)NULL;
+ 1 0.0011 : if (((newReg == reg1) && (newSize > 1)) ||
+ : ((newReg == reg2) && (numRects > 1)))
+ : {
+ 1 0.0011 : oldData = newReg->data;
+ 1 0.0011 : newReg->data = pixman_region_emptyData;
+ : }
+ : /* guess at new size */
+ : if (numRects > newSize)
+ : newSize = numRects;
+ : newSize <<= 1;
+ 1 0.0011 : if (!newReg->data)
+ 2 0.0022 : newReg->data = pixman_region_emptyData;
+ : else if (newReg->data->size)
+ : newReg->data->numRects = 0;
+ : if (newSize > newReg->data->size) {
+ : if (!pixman_rect_alloc(newReg, newSize)) {
+ : if (oldData)
+ : free (oldData);
+ : return FALSE;
+ : }
+ : }
+ :
+ : /*
+ : * Initialize ybot.
+ : * In the upcoming loop, ybot and ytop serve different functions depending
+ : * on whether the band being handled is an overlapping or non-overlapping
+ : * band.
+ : * In the case of a non-overlapping band (only one of the regions
+ : * has points in the band), ybot is the bottom of the most recent
+ : * intersection and thus clips the top of the rectangles in that band.
+ : * ytop is the top of the next intersection between the two regions and
+ : * serves to clip the bottom of the rectangles in the current band.
+ : * For an overlapping band (where the two regions intersect), ytop clips
+ : * the top of the rectangles of both regions and ybot clips the bottoms.
+ : */
+ :
+ 2 0.0022 : ybot = MIN(r1->y1, r2->y1);
+ :
+ : /*
+ : * prevBand serves to mark the start of the previous band so rectangles
+ : * can be coalesced into larger rectangles. qv. pixman_coalesce, above.
+ : * In the beginning, there is no previous band, so prevBand == curBand
+ : * (curBand is set later on, of course, but the first band will always
+ : * start at index 0). prevBand and curBand must be indices because of
+ : * the possible expansion, and resultant moving, of the new region's
+ : * array of rectangles.
+ : */
+ : prevBand = 0;
+ :
+ : do {
+ : /*
+ : * This algorithm proceeds one source-band (as opposed to a
+ : * destination band, which is determined by where the two regions
+ : * intersect) at a time. r1BandEnd and r2BandEnd serve to mark the
+ : * rectangle after the last one in the current band for their
+ : * respective regions.
+ : */
+ : assert(r1 != r1End);
+ : assert(r2 != r2End);
+ :
+ 2 0.0022 : FindBand(r1, r1BandEnd, r1End, r1y1);
+ 9 0.0098 : FindBand(r2, r2BandEnd, r2End, r2y1);
+ :
+ : /*
+ : * First handle the band that doesn't intersect, if any.
+ : *
+ : * Note that attention is restricted to one band in the
+ : * non-intersecting region at once, so if a region has n
+ : * bands between the current position and the next place it overlaps
+ : * the other, this entire loop will be passed through n times.
+ : */
+ 3 0.0033 : if (r1y1 < r2y1) {
+ : if (appendNon1) {
+ : top = MAX(r1y1, ybot);
+ : bot = MIN(r1->y2, r2y1);
+ : if (top != bot) {
+ : curBand = newReg->data->numRects;
+ : pixman_region_appendNonO(newReg, r1, r1BandEnd, top, bot);
+ : Coalesce(newReg, prevBand, curBand);
+ : }
+ : }
+ : ytop = r2y1;
+ : } else if (r2y1 < r1y1) {
+ 1 0.0011 : if (appendNon2) {
+ 1 0.0011 : top = MAX(r2y1, ybot);
+ : bot = MIN(r2->y2, r1y1);
+ : if (top != bot) {
+ : curBand = newReg->data->numRects;
+ : pixman_region_appendNonO(newReg, r2, r2BandEnd, top, bot);
+ : Coalesce(newReg, prevBand, curBand);
+ : }
+ : }
+ : ytop = r1y1;
+ : } else {
+ : ytop = r1y1;
+ : }
+ :
+ : /*
+ : * Now see if we've hit an intersecting band. The two bands only
+ : * intersect if ybot > ytop
+ : */
+ 2 0.0022 : ybot = MIN(r1->y2, r2->y2);
+ 6 0.0065 : if (ybot > ytop) {
+ 4 0.0044 : curBand = newReg->data->numRects;
+ 4 0.0044 : (* overlapFunc)(newReg, r1, r1BandEnd, r2, r2BandEnd, ytop, ybot,
+ : pOverlap);
+ 9 0.0098 : Coalesce(newReg, prevBand, curBand);
+ : }
+ :
+ : /*
+ : * If we've finished with a band (y2 == ybot) we skip forward
+ : * in the region to the next band.
+ : */
+ 1 0.0011 : if (r1->y2 == ybot) r1 = r1BandEnd;
+ 3 0.0033 : if (r2->y2 == ybot) r2 = r2BandEnd;
+ :
+ 5 0.0054 : } while (r1 != r1End && r2 != r2End);
+ :
+ : /*
+ : * Deal with whichever region (if any) still has rectangles left.
+ : *
+ : * We only need to worry about banding and coalescing for the very first
+ : * band left. After that, we can just group all remaining boxes,
+ : * regardless of how many bands, into one final append to the list.
+ : */
+ :
+ : if ((r1 != r1End) && appendNon1) {
+ : /* Do first nonOverlap1Func call, which may be able to coalesce */
+ 1 0.0011 : FindBand(r1, r1BandEnd, r1End, r1y1);
+ : curBand = newReg->data->numRects;
+ 2 0.0022 : pixman_region_appendNonO(newReg, r1, r1BandEnd, MAX(r1y1, ybot), r1->y2);
+ 3 0.0033 : Coalesce(newReg, prevBand, curBand);
+ : /* Just append the rest of the boxes */
+ 1 0.0011 : AppendRegions(newReg, r1BandEnd, r1End);
+ :
+ : } else if ((r2 != r2End) && appendNon2) {
+ : /* Do first nonOverlap2Func call, which may be able to coalesce */
+ : FindBand(r2, r2BandEnd, r2End, r2y1);
+ : curBand = newReg->data->numRects;
+ : pixman_region_appendNonO(newReg, r2, r2BandEnd, MAX(r2y1, ybot), r2->y2);
+ : Coalesce(newReg, prevBand, curBand);
+ : /* Append rest of boxes */
+ 7 0.0076 : AppendRegions(newReg, r2BandEnd, r2End);
+ : }
+ :
+ 2 0.0022 : if (oldData)
+ : free(oldData);
+ :
+ 8 0.0087 : if (!(numRects = newReg->data->numRects))
+ : {
+ : freeData(newReg);
+ : newReg->data = pixman_region_emptyData;
+ : }
+ 1 0.0011 : else if (numRects == 1)
+ : {
+ : newReg->extents = *PIXREGION_BOXPTR(newReg);
+ : freeData(newReg);
+ : newReg->data = (pixman_region16_data_t *)NULL;
+ : }
+ : else
+ : {
+ 1 0.0011 : DOWNSIZE(newReg, numRects);
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_set_extents --
+ : * Reset the extents of a region to what they should be. Called by
+ : * pixman_region_subtract and pixman_region_intersect as they can't figure it out along the
+ : * way or do so easily, as pixman_region_union can.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : * The region's 'extents' structure is overwritten.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :pixman_set_extents (pixman_region16_t *region)
+ :{
+ : pixman_box16_t *box, *boxEnd;
+ :
+ : if (!region->data)
+ : return;
+ : if (!region->data->size)
+ : {
+ : region->extents.x2 = region->extents.x1;
+ : region->extents.y2 = region->extents.y1;
+ : return;
+ : }
+ :
+ : box = PIXREGION_BOXPTR(region);
+ : boxEnd = PIXREGION_END(region);
+ :
+ : /*
+ : * Since box is the first rectangle in the region, it must have the
+ : * smallest y1 and since boxEnd is the last rectangle in the region,
+ : * it must have the largest y2, because of banding. Initialize x1 and
+ : * x2 from box and boxEnd, resp., as good things to initialize them
+ : * to...
+ : */
+ : region->extents.x1 = box->x1;
+ : region->extents.y1 = box->y1;
+ : region->extents.x2 = boxEnd->x2;
+ : region->extents.y2 = boxEnd->y2;
+ :
+ : assert(region->extents.y1 < region->extents.y2);
+ : while (box <= boxEnd) {
+ : if (box->x1 < region->extents.x1)
+ : region->extents.x1 = box->x1;
+ : if (box->x2 > region->extents.x2)
+ : region->extents.x2 = box->x2;
+ : box++;
+ : };
+ :
+ : assert(region->extents.x1 < region->extents.x2);
+ :}
+ :
+ :/*======================================================================
+ : * Region Intersection
+ : *====================================================================*/
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_region_intersectO --
+ : * Handle an overlapping band for pixman_region_intersect.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * Rectangles may be added to the region.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :/*ARGSUSED*/
+ :static pixman_bool_t
+ :pixman_region_intersectO (pixman_region16_t *region,
+ : pixman_box16_t *r1,
+ : pixman_box16_t *r1End,
+ : pixman_box16_t *r2,
+ : pixman_box16_t *r2End,
+ : short y1,
+ : short y2,
+ : int *pOverlap)
+ :{
+ : int x1;
+ : int x2;
+ : pixman_box16_t * pNextRect;
+ :
+ : pNextRect = PIXREGION_TOP(region);
+ :
+ : assert(y1 < y2);
+ : assert(r1 != r1End && r2 != r2End);
+ :
+ : do {
+ : x1 = MAX(r1->x1, r2->x1);
+ : x2 = MIN(r1->x2, r2->x2);
+ :
+ : /*
+ : * If there's any overlap between the two rectangles, add that
+ : * overlap to the new region.
+ : */
+ : if (x1 < x2)
+ : NEWRECT(region, pNextRect, x1, y1, x2, y2);
+ :
+ : /*
+ : * Advance the pointer(s) with the leftmost right side, since the next
+ : * rectangle on that list may still overlap the other region's
+ : * current rectangle.
+ : */
+ : if (r1->x2 == x2) {
+ : r1++;
+ : }
+ : if (r2->x2 == x2) {
+ : r2++;
+ : }
+ : } while ((r1 != r1End) && (r2 != r2End));
+ :
+ : return TRUE;
+ :}
+ :
+ :pixman_bool_t
+ :pixman_region_intersect (pixman_region16_t * newReg,
+ : pixman_region16_t * reg1,
+ : pixman_region16_t * reg2)
+ 4 0.0044 :{ /* pixman_region_intersect total: 13 0.0142 */
+ : good(reg1);
+ : good(reg2);
+ : good(newReg);
+ : /* check for trivial reject */
+ 4 0.0044 : if (PIXREGION_NIL(reg1) || PIXREGION_NIL(reg2) ||
+ : !EXTENTCHECK(®1->extents, ®2->extents))
+ : {
+ : /* Covers about 20% of all cases */
+ : freeData(newReg);
+ : newReg->extents.x2 = newReg->extents.x1;
+ : newReg->extents.y2 = newReg->extents.y1;
+ : if (PIXREGION_NAR(reg1) || PIXREGION_NAR(reg2))
+ : {
+ : newReg->data = pixman_brokendata;
+ : return FALSE;
+ : }
+ : else
+ : newReg->data = pixman_region_emptyData;
+ : }
+ : else if (!reg1->data && !reg2->data)
+ : {
+ : /* Covers about 80% of cases that aren't trivially rejected */
+ 1 0.0011 : newReg->extents.x1 = MAX(reg1->extents.x1, reg2->extents.x1);
+ 1 0.0011 : newReg->extents.y1 = MAX(reg1->extents.y1, reg2->extents.y1);
+ 1 0.0011 : newReg->extents.x2 = MIN(reg1->extents.x2, reg2->extents.x2);
+ : newReg->extents.y2 = MIN(reg1->extents.y2, reg2->extents.y2);
+ : freeData(newReg);
+ : newReg->data = (pixman_region16_data_t *)NULL;
+ : }
+ : else if (!reg2->data && SUBSUMES(®2->extents, ®1->extents))
+ : {
+ : return pixman_region_copy(newReg, reg1);
+ : }
+ : else if (!reg1->data && SUBSUMES(®1->extents, ®2->extents))
+ : {
+ : return pixman_region_copy(newReg, reg2);
+ : }
+ : else if (reg1 == reg2)
+ : {
+ : return pixman_region_copy(newReg, reg1);
+ : }
+ : else
+ : {
+ : /* General purpose intersection */
+ : int overlap; /* result ignored */
+ : if (!pixman_op(newReg, reg1, reg2, pixman_region_intersectO, FALSE, FALSE,
+ : &overlap))
+ : return FALSE;
+ : pixman_set_extents(newReg);
+ : }
+ :
+ : good(newReg);
+ : return(TRUE);
+ 2 0.0022 :}
+ :
+ :#define MERGERECT(r) \
+ :{ \
+ : if (r->x1 <= x2) { \
+ : /* Merge with current rectangle */ \
+ : if (r->x1 < x2) *pOverlap = TRUE; \
+ : if (x2 < r->x2) x2 = r->x2; \
+ : } else { \
+ : /* Add current rectangle, start new one */ \
+ : NEWRECT(region, pNextRect, x1, y1, x2, y2); \
+ : x1 = r->x1; \
+ : x2 = r->x2; \
+ : } \
+ : r++; \
+ :}
+ :
+ :/*======================================================================
+ : * Region Union
+ : *====================================================================*/
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_region_unionO --
+ : * Handle an overlapping band for the union operation. Picks the
+ : * left-most rectangle each time and merges it into the region.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * region is overwritten.
+ : * pOverlap is set to TRUE if any boxes overlap.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static pixman_bool_t
+ :pixman_region_unionO (
+ : pixman_region16_t *region,
+ : pixman_box16_t *r1,
+ : pixman_box16_t *r1End,
+ : pixman_box16_t *r2,
+ : pixman_box16_t *r2End,
+ : short y1,
+ : short y2,
+ : int *pOverlap)
+ 11 0.0120 :{ /* pixman_region_unionO total: 39 0.0425 */
+ : pixman_box16_t * pNextRect;
+ : int x1; /* left and right side of current union */
+ : int x2;
+ :
+ : assert (y1 < y2);
+ : assert(r1 != r1End && r2 != r2End);
+ :
+ 6 0.0065 : pNextRect = PIXREGION_TOP(region);
+ :
+ : /* Start off current rectangle */
+ : if (r1->x1 < r2->x1)
+ : {
+ : x1 = r1->x1;
+ : x2 = r1->x2;
+ : r1++;
+ : }
+ : else
+ : {
+ 1 0.0011 : x1 = r2->x1;
+ 2 0.0022 : x2 = r2->x2;
+ : r2++;
+ : }
+ 3 0.0033 : while (r1 != r1End && r2 != r2End)
+ : {
+ : if (r1->x1 < r2->x1) MERGERECT(r1) else MERGERECT(r2);
+ : }
+ :
+ : /* Finish off whoever (if any) is left */
+ : if (r1 != r1End)
+ : {
+ : do
+ : {
+ 8 0.0087 : MERGERECT(r1);
+ 2 0.0022 : } while (r1 != r1End);
+ : }
+ : else if (r2 != r2End)
+ : {
+ : do
+ : {
+ : MERGERECT(r2);
+ : } while (r2 != r2End);
+ : }
+ :
+ : /* Add current rectangle */
+ 4 0.0044 : NEWRECT(region, pNextRect, x1, y1, x2, y2);
+ :
+ : return TRUE;
+ 2 0.0022 :}
+ :
+ :/* Convenience function for performing union of region with a
+ : * single rectangle
+ : */
+ :pixman_bool_t
+ :pixman_region_union_rect (pixman_region16_t *dest,
+ : pixman_region16_t *source,
+ : int x, int y,
+ : unsigned int width, unsigned int height)
+ :{
+ : pixman_region16_t region;
+ :
+ : if (!width || !height)
+ : return pixman_region_copy (dest, source);
+ : region.data = NULL;
+ : region.extents.x1 = x;
+ : region.extents.y1 = y;
+ : region.extents.x2 = x + width;
+ : region.extents.y2 = y + height;
+ :
+ : return pixman_region_union (dest, source, ®ion);
+ :}
+ :
+ :pixman_bool_t
+ :pixman_region_union (pixman_region16_t *newReg,
+ : pixman_region16_t *reg1,
+ : pixman_region16_t *reg2)
+ 17 0.0185 :{ /* pixman_region_union total: 87 0.0948 */
+ : int overlap; /* result ignored */
+ :
+ : /* Return TRUE if some overlap
+ : * between reg1, reg2
+ : */
+ : good(reg1);
+ : good(reg2);
+ : good(newReg);
+ : /* checks all the simple cases */
+ :
+ : /*
+ : * Region 1 and 2 are the same
+ : */
+ : if (reg1 == reg2)
+ : {
+ : return pixman_region_copy(newReg, reg1);
+ : }
+ :
+ : /*
+ : * Region 1 is empty
+ : */
+ 7 0.0076 : if (PIXREGION_NIL(reg1))
+ : {
+ : if (PIXREGION_NAR(reg1))
+ : return pixman_break (newReg);
+ 1 0.0011 : if (newReg != reg2)
+ 1 0.0011 : return pixman_region_copy(newReg, reg2);
+ : return TRUE;
+ : }
+ :
+ : /*
+ : * Region 2 is empty
+ : */
+ 9 0.0098 : if (PIXREGION_NIL(reg2))
+ : {
+ : if (PIXREGION_NAR(reg2))
+ : return pixman_break (newReg);
+ : if (newReg != reg1)
+ : return pixman_region_copy(newReg, reg1);
+ : return TRUE;
+ : }
+ :
+ : /*
+ : * Region 1 completely subsumes region 2
+ : */
+ 8 0.0087 : if (!reg1->data && SUBSUMES(®1->extents, ®2->extents))
+ : {
+ 7 0.0076 : if (newReg != reg1)
+ : return pixman_region_copy(newReg, reg1);
+ : return TRUE;
+ : }
+ :
+ : /*
+ : * Region 2 completely subsumes region 1
+ : */
+ 2 0.0022 : if (!reg2->data && SUBSUMES(®2->extents, ®1->extents))
+ : {
+ : if (newReg != reg2)
+ 1 0.0011 : return pixman_region_copy(newReg, reg2);
+ : return TRUE;
+ : }
+ :
+ 3 0.0033 : if (!pixman_op(newReg, reg1, reg2, pixman_region_unionO, TRUE, TRUE, &overlap))
+ : return FALSE;
+ :
+ 1 0.0011 : newReg->extents.x1 = MIN(reg1->extents.x1, reg2->extents.x1);
+ 3 0.0033 : newReg->extents.y1 = MIN(reg1->extents.y1, reg2->extents.y1);
+ 7 0.0076 : newReg->extents.x2 = MAX(reg1->extents.x2, reg2->extents.x2);
+ 8 0.0087 : newReg->extents.y2 = MAX(reg1->extents.y2, reg2->extents.y2);
+ : good(newReg);
+ 5 0.0054 : return TRUE;
+ 7 0.0076 :}
+ :
+ :/*======================================================================
+ : * Batch Rectangle Union
+ : *====================================================================*/
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_region_append --
+ : *
+ : * "Append" the rgn rectangles onto the end of dstrgn, maintaining
+ : * knowledge of YX-banding when it's easy. Otherwise, dstrgn just
+ : * becomes a non-y-x-banded random collection of rectangles, and not
+ : * yet a true region. After a sequence of appends, the caller must
+ : * call pixman_region_validate to ensure that a valid region is
+ : * constructed.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * dstrgn is modified if rgn has rectangles.
+ : *
+ : */
+ :pixman_bool_t
+ :pixman_region_append (pixman_region16_t * dstrgn,
+ : pixman_region16_t * rgn)
+ :{
+ : int numRects, dnumRects, size;
+ : pixman_box16_t *new, *old;
+ : int prepend;
+ :
+ : if (PIXREGION_NAR(rgn))
+ : return pixman_break (dstrgn);
+ :
+ : if (!rgn->data && (dstrgn->data == pixman_region_emptyData))
+ : {
+ : dstrgn->extents = rgn->extents;
+ : dstrgn->data = (pixman_region16_data_t *)NULL;
+ : return TRUE;
+ : }
+ :
+ : numRects = PIXREGION_NUM_RECTS(rgn);
+ : if (!numRects)
+ : return TRUE;
+ : prepend = FALSE;
+ : size = numRects;
+ : dnumRects = PIXREGION_NUM_RECTS(dstrgn);
+ : if (!dnumRects && (size < 200))
+ : size = 200; /* XXX pick numbers out of a hat */
+ : RECTALLOC(dstrgn, size);
+ : old = PIXREGION_RECTS(rgn);
+ : if (!dnumRects)
+ : dstrgn->extents = rgn->extents;
+ : else if (dstrgn->extents.x2 > dstrgn->extents.x1)
+ : {
+ : pixman_box16_t *first, *last;
+ :
+ : first = old;
+ : last = PIXREGION_BOXPTR(dstrgn) + (dnumRects - 1);
+ : if ((first->y1 > last->y2) ||
+ : ((first->y1 == last->y1) && (first->y2 == last->y2) &&
+ : (first->x1 > last->x2)))
+ : {
+ : if (rgn->extents.x1 < dstrgn->extents.x1)
+ : dstrgn->extents.x1 = rgn->extents.x1;
+ : if (rgn->extents.x2 > dstrgn->extents.x2)
+ : dstrgn->extents.x2 = rgn->extents.x2;
+ : dstrgn->extents.y2 = rgn->extents.y2;
+ : }
+ : else
+ : {
+ : first = PIXREGION_BOXPTR(dstrgn);
+ : last = old + (numRects - 1);
+ : if ((first->y1 > last->y2) ||
+ : ((first->y1 == last->y1) && (first->y2 == last->y2) &&
+ : (first->x1 > last->x2)))
+ : {
+ : prepend = TRUE;
+ : if (rgn->extents.x1 < dstrgn->extents.x1)
+ : dstrgn->extents.x1 = rgn->extents.x1;
+ : if (rgn->extents.x2 > dstrgn->extents.x2)
+ : dstrgn->extents.x2 = rgn->extents.x2;
+ : dstrgn->extents.y1 = rgn->extents.y1;
+ : }
+ : else
+ : dstrgn->extents.x2 = dstrgn->extents.x1;
+ : }
+ : }
+ : if (prepend)
+ : {
+ : new = PIXREGION_BOX(dstrgn, numRects);
+ : if (dnumRects == 1)
+ : *new = *PIXREGION_BOXPTR(dstrgn);
+ : else
+ : memmove((char *)new,(char *)PIXREGION_BOXPTR(dstrgn),
+ : dnumRects * sizeof(pixman_box16_t));
+ : new = PIXREGION_BOXPTR(dstrgn);
+ : }
+ : else
+ : new = PIXREGION_BOXPTR(dstrgn) + dnumRects;
+ : if (numRects == 1)
+ : *new = *old;
+ : else
+ : memmove((char *)new, (char *)old, numRects * sizeof(pixman_box16_t));
+ : dstrgn->data->numRects += numRects;
+ : return TRUE;
+ :}
+ :
+ :#define ExchangeRects(a, b) \
+ :{ \
+ : pixman_box16_t t; \
+ : t = rects[a]; \
+ : rects[a] = rects[b]; \
+ : rects[b] = t; \
+ :}
+ :
+ :static void
+ :QuickSortRects(
+ : pixman_box16_t rects[],
+ : int numRects)
+ :{
+ : int y1;
+ : int x1;
+ : int i, j;
+ : pixman_box16_t *r;
+ :
+ : /* Always called with numRects > 1 */
+ :
+ : do
+ : {
+ : if (numRects == 2)
+ : {
+ : if (rects[0].y1 > rects[1].y1 ||
+ : (rects[0].y1 == rects[1].y1 && rects[0].x1 > rects[1].x1))
+ : ExchangeRects(0, 1);
+ : return;
+ : }
+ :
+ : /* Choose partition element, stick in location 0 */
+ : ExchangeRects(0, numRects >> 1);
+ : y1 = rects[0].y1;
+ : x1 = rects[0].x1;
+ :
+ : /* Partition array */
+ : i = 0;
+ : j = numRects;
+ : do
+ : {
+ : r = &(rects[i]);
+ : do
+ : {
+ : r++;
+ : i++;
+ : } while (i != numRects &&
+ : (r->y1 < y1 || (r->y1 == y1 && r->x1 < x1)));
+ : r = &(rects[j]);
+ : do
+ : {
+ : r--;
+ : j--;
+ : } while (y1 < r->y1 || (y1 == r->y1 && x1 < r->x1));
+ : if (i < j)
+ : ExchangeRects(i, j);
+ : } while (i < j);
+ :
+ : /* Move partition element back to middle */
+ : ExchangeRects(0, j);
+ :
+ : /* Recurse */
+ : if (numRects-j-1 > 1)
+ : QuickSortRects(&rects[j+1], numRects-j-1);
+ : numRects = j;
+ : } while (numRects > 1);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_region_validate --
+ : *
+ : * Take a ``region'' which is a non-y-x-banded random collection of
+ : * rectangles, and compute a nice region which is the union of all the
+ : * rectangles.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * The passed-in ``region'' may be modified.
+ : * pOverlap set to TRUE if any retangles overlapped,
+ : * else FALSE;
+ : *
+ : * Strategy:
+ : * Step 1. Sort the rectangles into ascending order with primary key y1
+ : * and secondary key x1.
+ : *
+ : * Step 2. Split the rectangles into the minimum number of proper y-x
+ : * banded regions. This may require horizontally merging
+ : * rectangles, and vertically coalescing bands. With any luck,
+ : * this step in an identity transformation (ala the Box widget),
+ : * or a coalescing into 1 box (ala Menus).
+ : *
+ : * Step 3. Merge the separate regions down to a single region by calling
+ : * pixman_region_union. Maximize the work each pixman_region_union call does by using
+ : * a binary merge.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :
+ :pixman_bool_t
+ :pixman_region_validate(pixman_region16_t * badreg,
+ : int *pOverlap)
+ :{
+ : /* Descriptor for regions under construction in Step 2. */
+ : typedef struct {
+ : pixman_region16_t reg;
+ : int prevBand;
+ : int curBand;
+ : } RegionInfo;
+ :
+ : int numRects; /* Original numRects for badreg */
+ : RegionInfo *ri; /* Array of current regions */
+ : int numRI; /* Number of entries used in ri */
+ : int sizeRI; /* Number of entries available in ri */
+ : int i; /* Index into rects */
+ : int j; /* Index into ri */
+ : RegionInfo *rit; /* &ri[j] */
+ : pixman_region16_t * reg; /* ri[j].reg */
+ : pixman_box16_t * box; /* Current box in rects */
+ : pixman_box16_t * riBox; /* Last box in ri[j].reg */
+ : pixman_region16_t * hreg; /* ri[j_half].reg */
+ : pixman_bool_t ret = TRUE;
+ :
+ : *pOverlap = FALSE;
+ : if (!badreg->data)
+ : {
+ : good(badreg);
+ : return TRUE;
+ : }
+ : numRects = badreg->data->numRects;
+ : if (!numRects)
+ : {
+ : if (PIXREGION_NAR(badreg))
+ : return FALSE;
+ : good(badreg);
+ : return TRUE;
+ : }
+ : if (badreg->extents.x1 < badreg->extents.x2)
+ : {
+ : if ((numRects) == 1)
+ : {
+ : freeData(badreg);
+ : badreg->data = (pixman_region16_data_t *) NULL;
+ : }
+ : else
+ : {
+ : DOWNSIZE(badreg, numRects);
+ : }
+ : good(badreg);
+ : return TRUE;
+ : }
+ :
+ : /* Step 1: Sort the rects array into ascending (y1, x1) order */
+ : QuickSortRects(PIXREGION_BOXPTR(badreg), numRects);
+ :
+ : /* Step 2: Scatter the sorted array into the minimum number of regions */
+ :
+ : /* Set up the first region to be the first rectangle in badreg */
+ : /* Note that step 2 code will never overflow the ri[0].reg rects array */
+ : ri = (RegionInfo *) malloc(4 * sizeof(RegionInfo));
+ : if (!ri)
+ : return pixman_break (badreg);
+ : sizeRI = 4;
+ : numRI = 1;
+ : ri[0].prevBand = 0;
+ : ri[0].curBand = 0;
+ : ri[0].reg = *badreg;
+ : box = PIXREGION_BOXPTR(&ri[0].reg);
+ : ri[0].reg.extents = *box;
+ : ri[0].reg.data->numRects = 1;
+ :
+ : /* Now scatter rectangles into the minimum set of valid regions. If the
+ : next rectangle to be added to a region would force an existing rectangle
+ : in the region to be split up in order to maintain y-x banding, just
+ : forget it. Try the next region. If it doesn't fit cleanly into any
+ : region, make a new one. */
+ :
+ : for (i = numRects; --i > 0;)
+ : {
+ : box++;
+ : /* Look for a region to append box to */
+ : for (j = numRI, rit = ri; --j >= 0; rit++)
+ : {
+ : reg = &rit->reg;
+ : riBox = PIXREGION_END(reg);
+ :
+ : if (box->y1 == riBox->y1 && box->y2 == riBox->y2)
+ : {
+ : /* box is in same band as riBox. Merge or append it */
+ : if (box->x1 <= riBox->x2)
+ : {
+ : /* Merge it with riBox */
+ : if (box->x1 < riBox->x2) *pOverlap = TRUE;
+ : if (box->x2 > riBox->x2) riBox->x2 = box->x2;
+ : }
+ : else
+ : {
+ : RECTALLOC_BAIL(reg, 1, bail);
+ : *PIXREGION_TOP(reg) = *box;
+ : reg->data->numRects++;
+ : }
+ : goto NextRect; /* So sue me */
+ : }
+ : else if (box->y1 >= riBox->y2)
+ : {
+ : /* Put box into new band */
+ : if (reg->extents.x2 < riBox->x2) reg->extents.x2 = riBox->x2;
+ : if (reg->extents.x1 > box->x1) reg->extents.x1 = box->x1;
+ : Coalesce(reg, rit->prevBand, rit->curBand);
+ : rit->curBand = reg->data->numRects;
+ : RECTALLOC_BAIL(reg, 1, bail);
+ : *PIXREGION_TOP(reg) = *box;
+ : reg->data->numRects++;
+ : goto NextRect;
+ : }
+ : /* Well, this region was inappropriate. Try the next one. */
+ : } /* for j */
+ :
+ : /* Uh-oh. No regions were appropriate. Create a new one. */
+ : if (sizeRI == numRI)
+ : {
+ : /* Oops, allocate space for new region information */
+ : sizeRI <<= 1;
+ : rit = (RegionInfo *) realloc(ri, sizeRI * sizeof(RegionInfo));
+ : if (!rit)
+ : goto bail;
+ : ri = rit;
+ : rit = &ri[numRI];
+ : }
+ : numRI++;
+ : rit->prevBand = 0;
+ : rit->curBand = 0;
+ : rit->reg.extents = *box;
+ : rit->reg.data = (pixman_region16_data_t *)NULL;
+ : if (!pixman_rect_alloc(&rit->reg, (i+numRI) / numRI)) /* MUST force allocation */
+ : goto bail;
+ :NextRect: ;
+ : } /* for i */
+ :
+ : /* Make a final pass over each region in order to Coalesce and set
+ : extents.x2 and extents.y2 */
+ :
+ : for (j = numRI, rit = ri; --j >= 0; rit++)
+ : {
+ : reg = &rit->reg;
+ : riBox = PIXREGION_END(reg);
+ : reg->extents.y2 = riBox->y2;
+ : if (reg->extents.x2 < riBox->x2) reg->extents.x2 = riBox->x2;
+ : Coalesce(reg, rit->prevBand, rit->curBand);
+ : if (reg->data->numRects == 1) /* keep unions happy below */
+ : {
+ : freeData(reg);
+ : reg->data = (pixman_region16_data_t *)NULL;
+ : }
+ : }
+ :
+ : /* Step 3: Union all regions into a single region */
+ : while (numRI > 1)
+ : {
+ : int half = numRI/2;
+ : for (j = numRI & 1; j < (half + (numRI & 1)); j++)
+ : {
+ : reg = &ri[j].reg;
+ : hreg = &ri[j+half].reg;
+ : if (!pixman_op(reg, reg, hreg, pixman_region_unionO, TRUE, TRUE, pOverlap))
+ : ret = FALSE;
+ : if (hreg->extents.x1 < reg->extents.x1)
+ : reg->extents.x1 = hreg->extents.x1;
+ : if (hreg->extents.y1 < reg->extents.y1)
+ : reg->extents.y1 = hreg->extents.y1;
+ : if (hreg->extents.x2 > reg->extents.x2)
+ : reg->extents.x2 = hreg->extents.x2;
+ : if (hreg->extents.y2 > reg->extents.y2)
+ : reg->extents.y2 = hreg->extents.y2;
+ : freeData(hreg);
+ : }
+ : numRI -= half;
+ : }
+ : *badreg = ri[0].reg;
+ : free(ri);
+ : good(badreg);
+ : return ret;
+ :bail:
+ : for (i = 0; i < numRI; i++)
+ : freeData(&ri[i].reg);
+ : free (ri);
+ : return pixman_break (badreg);
+ :}
+ :
+ :/*======================================================================
+ : * Region Subtraction
+ : *====================================================================*/
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_region_subtractO --
+ : * Overlapping band subtraction. x1 is the left-most point not yet
+ : * checked.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * region may have rectangles added to it.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :/*ARGSUSED*/
+ :static pixman_bool_t
+ :pixman_region_subtractO (
+ : pixman_region16_t * region,
+ : pixman_box16_t * r1,
+ : pixman_box16_t * r1End,
+ : pixman_box16_t * r2,
+ : pixman_box16_t * r2End,
+ : short y1,
+ : short y2,
+ : int *pOverlap)
+ :{
+ : pixman_box16_t * pNextRect;
+ : int x1;
+ :
+ : x1 = r1->x1;
+ :
+ : assert(y1<y2);
+ : assert(r1 != r1End && r2 != r2End);
+ :
+ : pNextRect = PIXREGION_TOP(region);
+ :
+ : do
+ : {
+ : if (r2->x2 <= x1)
+ : {
+ : /*
+ : * Subtrahend entirely to left of minuend: go to next subtrahend.
+ : */
+ : r2++;
+ : }
+ : else if (r2->x1 <= x1)
+ : {
+ : /*
+ : * Subtrahend preceeds minuend: nuke left edge of minuend.
+ : */
+ : x1 = r2->x2;
+ : if (x1 >= r1->x2)
+ : {
+ : /*
+ : * Minuend completely covered: advance to next minuend and
+ : * reset left fence to edge of new minuend.
+ : */
+ : r1++;
+ : if (r1 != r1End)
+ : x1 = r1->x1;
+ : }
+ : else
+ : {
+ : /*
+ : * Subtrahend now used up since it doesn't extend beyond
+ : * minuend
+ : */
+ : r2++;
+ : }
+ : }
+ : else if (r2->x1 < r1->x2)
+ : {
+ : /*
+ : * Left part of subtrahend covers part of minuend: add uncovered
+ : * part of minuend to region and skip to next subtrahend.
+ : */
+ : assert(x1<r2->x1);
+ : NEWRECT(region, pNextRect, x1, y1, r2->x1, y2);
+ :
+ : x1 = r2->x2;
+ : if (x1 >= r1->x2)
+ : {
+ : /*
+ : * Minuend used up: advance to new...
+ : */
+ : r1++;
+ : if (r1 != r1End)
+ : x1 = r1->x1;
+ : }
+ : else
+ : {
+ : /*
+ : * Subtrahend used up
+ : */
+ : r2++;
+ : }
+ : }
+ : else
+ : {
+ : /*
+ : * Minuend used up: add any remaining piece before advancing.
+ : */
+ : if (r1->x2 > x1)
+ : NEWRECT(region, pNextRect, x1, y1, r1->x2, y2);
+ : r1++;
+ : if (r1 != r1End)
+ : x1 = r1->x1;
+ : }
+ : } while ((r1 != r1End) && (r2 != r2End));
+ :
+ : /*
+ : * Add remaining minuend rectangles to region.
+ : */
+ : while (r1 != r1End)
+ : {
+ : assert(x1<r1->x2);
+ : NEWRECT(region, pNextRect, x1, y1, r1->x2, y2);
+ : r1++;
+ : if (r1 != r1End)
+ : x1 = r1->x1;
+ : }
+ : return TRUE;
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_region_subtract --
+ : * Subtract regS from regM and leave the result in regD.
+ : * S stands for subtrahend, M for minuend and D for difference.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * regD is overwritten.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :pixman_bool_t
+ :pixman_region_subtract(pixman_region16_t * regD,
+ : pixman_region16_t * regM,
+ : pixman_region16_t * regS)
+ :{
+ : int overlap; /* result ignored */
+ :
+ : good(regM);
+ : good(regS);
+ : good(regD);
+ : /* check for trivial rejects */
+ : if (PIXREGION_NIL(regM) || PIXREGION_NIL(regS) ||
+ : !EXTENTCHECK(®M->extents, ®S->extents))
+ : {
+ : if (PIXREGION_NAR (regS))
+ : return pixman_break (regD);
+ : return pixman_region_copy(regD, regM);
+ : }
+ : else if (regM == regS)
+ : {
+ : freeData(regD);
+ : regD->extents.x2 = regD->extents.x1;
+ : regD->extents.y2 = regD->extents.y1;
+ : regD->data = pixman_region_emptyData;
+ : return TRUE;
+ : }
+ :
+ : /* Add those rectangles in region 1 that aren't in region 2,
+ : do yucky substraction for overlaps, and
+ : just throw away rectangles in region 2 that aren't in region 1 */
+ : if (!pixman_op(regD, regM, regS, pixman_region_subtractO, TRUE, FALSE, &overlap))
+ : return FALSE;
+ :
+ : /*
+ : * Can't alter RegD's extents before we call pixman_op because
+ : * it might be one of the source regions and pixman_op depends
+ : * on the extents of those regions being unaltered. Besides, this
+ : * way there's no checking against rectangles that will be nuked
+ : * due to coalescing, so we have to examine fewer rectangles.
+ : */
+ : pixman_set_extents(regD);
+ : good(regD);
+ : return TRUE;
+ :}
+ :
+ :/*======================================================================
+ : * Region Inversion
+ : *====================================================================*/
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * pixman_region_inverse --
+ : * Take a region and a box and return a region that is everything
+ : * in the box but not in the region. The careful reader will note
+ : * that this is the same as subtracting the region from the box...
+ : *
+ : * Results:
+ : * TRUE.
+ : *
+ : * Side Effects:
+ : * newReg is overwritten.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :pixman_bool_t
+ :pixman_region_inverse(pixman_region16_t * newReg, /* Destination region */
+ : pixman_region16_t * reg1, /* Region to invert */
+ : pixman_box16_t * invRect) /* Bounding box for inversion */
+ :{
+ : pixman_region16_t invReg; /* Quick and dirty region made from the
+ : * bounding box */
+ : int overlap; /* result ignored */
+ :
+ : good(reg1);
+ : good(newReg);
+ : /* check for trivial rejects */
+ : if (PIXREGION_NIL(reg1) || !EXTENTCHECK(invRect, ®1->extents))
+ : {
+ : if (PIXREGION_NAR(reg1))
+ : return pixman_break (newReg);
+ : newReg->extents = *invRect;
+ : freeData(newReg);
+ : newReg->data = (pixman_region16_data_t *)NULL;
+ : return TRUE;
+ : }
+ :
+ : /* Add those rectangles in region 1 that aren't in region 2,
+ : do yucky substraction for overlaps, and
+ : just throw away rectangles in region 2 that aren't in region 1 */
+ : invReg.extents = *invRect;
+ : invReg.data = (pixman_region16_data_t *)NULL;
+ : if (!pixman_op(newReg, &invReg, reg1, pixman_region_subtractO, TRUE, FALSE, &overlap))
+ : return FALSE;
+ :
+ : /*
+ : * Can't alter newReg's extents before we call pixman_op because
+ : * it might be one of the source regions and pixman_op depends
+ : * on the extents of those regions being unaltered. Besides, this
+ : * way there's no checking against rectangles that will be nuked
+ : * due to coalescing, so we have to examine fewer rectangles.
+ : */
+ : pixman_set_extents(newReg);
+ : good(newReg);
+ : return TRUE;
+ :}
+ :
+ :/*
+ : * RectIn(region, rect)
+ : * This routine takes a pointer to a region and a pointer to a box
+ : * and determines if the box is outside/inside/partly inside the region.
+ : *
+ : * The idea is to travel through the list of rectangles trying to cover the
+ : * passed box with them. Anytime a piece of the rectangle isn't covered
+ : * by a band of rectangles, partOut is set TRUE. Any time a rectangle in
+ : * the region covers part of the box, partIn is set TRUE. The process ends
+ : * when either the box has been completely covered (we reached a band that
+ : * doesn't overlap the box, partIn is TRUE and partOut is false), the
+ : * box has been partially covered (partIn == partOut == TRUE -- because of
+ : * the banding, the first time this is true we know the box is only
+ : * partially in the region) or is outside the region (we reached a band
+ : * that doesn't overlap the box at all and partIn is false)
+ : */
+ :
+ :pixman_region_overlap_t
+ :pixman_region_contains_rectangle(pixman_region16_t * region,
+ : pixman_box16_t * prect)
+ :{
+ : int x;
+ : int y;
+ : pixman_box16_t * pbox;
+ : pixman_box16_t * pboxEnd;
+ : int partIn, partOut;
+ : int numRects;
+ :
+ : good(region);
+ : numRects = PIXREGION_NUM_RECTS(region);
+ : /* useful optimization */
+ : if (!numRects || !EXTENTCHECK(®ion->extents, prect))
+ : return(PIXMAN_REGION_OUT);
+ :
+ : if (numRects == 1)
+ : {
+ : /* We know that it must be PIXMAN_REGION_IN or PIXMAN_REGION_PART */
+ : if (SUBSUMES(®ion->extents, prect))
+ : return(PIXMAN_REGION_IN);
+ : else
+ : return(PIXMAN_REGION_PART);
+ : }
+ :
+ : partOut = FALSE;
+ : partIn = FALSE;
+ :
+ : /* (x,y) starts at upper left of rect, moving to the right and down */
+ : x = prect->x1;
+ : y = prect->y1;
+ :
+ : /* can stop when both partOut and partIn are TRUE, or we reach prect->y2 */
+ : for (pbox = PIXREGION_BOXPTR(region), pboxEnd = pbox + numRects;
+ : pbox != pboxEnd;
+ : pbox++)
+ : {
+ :
+ : if (pbox->y2 <= y)
+ : continue; /* getting up to speed or skipping remainder of band */
+ :
+ : if (pbox->y1 > y)
+ : {
+ : partOut = TRUE; /* missed part of rectangle above */
+ : if (partIn || (pbox->y1 >= prect->y2))
+ : break;
+ : y = pbox->y1; /* x guaranteed to be == prect->x1 */
+ : }
+ :
+ : if (pbox->x2 <= x)
+ : continue; /* not far enough over yet */
+ :
+ : if (pbox->x1 > x)
+ : {
+ : partOut = TRUE; /* missed part of rectangle to left */
+ : if (partIn)
+ : break;
+ : }
+ :
+ : if (pbox->x1 < prect->x2)
+ : {
+ : partIn = TRUE; /* definitely overlap */
+ : if (partOut)
+ : break;
+ : }
+ :
+ : if (pbox->x2 >= prect->x2)
+ : {
+ : y = pbox->y2; /* finished with this band */
+ : if (y >= prect->y2)
+ : break;
+ : x = prect->x1; /* reset x out to left again */
+ : }
+ : else
+ : {
+ : /*
+ : * Because boxes in a band are maximal width, if the first box
+ : * to overlap the rectangle doesn't completely cover it in that
+ : * band, the rectangle must be partially out, since some of it
+ : * will be uncovered in that band. partIn will have been set true
+ : * by now...
+ : */
+ : partOut = TRUE;
+ : break;
+ : }
+ : }
+ :
+ : if (partIn)
+ : {
+ : if (y < prect->y2)
+ : return PIXMAN_REGION_PART;
+ : else
+ : return PIXMAN_REGION_IN;
+ : }
+ : else
+ : {
+ : return PIXMAN_REGION_OUT;
+ : }
+ :}
+ :
+ :/* pixman_region_translate (region, x, y)
+ : translates in place
+ :*/
+ :
+ :void
+ :pixman_region_translate (pixman_region16_t * region, int x, int y)
+ 1 0.0011 :{ /* pixman_region_translate total: 7 0.0076 */
+ : int x1, x2, y1, y2;
+ : int nbox;
+ : pixman_box16_t * pbox;
+ :
+ : good(region);
+ : region->extents.x1 = x1 = region->extents.x1 + x;
+ 1 0.0011 : region->extents.y1 = y1 = region->extents.y1 + y;
+ : region->extents.x2 = x2 = region->extents.x2 + x;
+ 1 0.0011 : region->extents.y2 = y2 = region->extents.y2 + y;
+ 1 0.0011 : if (((x1 - SHRT_MIN)|(y1 - SHRT_MIN)|(SHRT_MAX - x2)|(SHRT_MAX - y2)) >= 0)
+ : {
+ 1 0.0011 : if (region->data && (nbox = region->data->numRects))
+ : {
+ : for (pbox = PIXREGION_BOXPTR(region); nbox--; pbox++)
+ : {
+ : pbox->x1 += x;
+ : pbox->y1 += y;
+ : pbox->x2 += x;
+ : pbox->y2 += y;
+ : }
+ : }
+ : return;
+ : }
+ : if (((x2 - SHRT_MIN)|(y2 - SHRT_MIN)|(SHRT_MAX - x1)|(SHRT_MAX - y1)) <= 0)
+ : {
+ : region->extents.x2 = region->extents.x1;
+ : region->extents.y2 = region->extents.y1;
+ : freeData(region);
+ : region->data = pixman_region_emptyData;
+ : return;
+ : }
+ : if (x1 < SHRT_MIN)
+ : region->extents.x1 = SHRT_MIN;
+ : else if (x2 > SHRT_MAX)
+ : region->extents.x2 = SHRT_MAX;
+ : if (y1 < SHRT_MIN)
+ : region->extents.y1 = SHRT_MIN;
+ : else if (y2 > SHRT_MAX)
+ : region->extents.y2 = SHRT_MAX;
+ : if (region->data && (nbox = region->data->numRects))
+ : {
+ : pixman_box16_t * pboxout;
+ :
+ : for (pboxout = pbox = PIXREGION_BOXPTR(region); nbox--; pbox++)
+ : {
+ : pboxout->x1 = x1 = pbox->x1 + x;
+ : pboxout->y1 = y1 = pbox->y1 + y;
+ : pboxout->x2 = x2 = pbox->x2 + x;
+ : pboxout->y2 = y2 = pbox->y2 + y;
+ : if (((x2 - SHRT_MIN)|(y2 - SHRT_MIN)|
+ : (SHRT_MAX - x1)|(SHRT_MAX - y1)) <= 0)
+ : {
+ : region->data->numRects--;
+ : continue;
+ : }
+ : if (x1 < SHRT_MIN)
+ : pboxout->x1 = SHRT_MIN;
+ : else if (x2 > SHRT_MAX)
+ : pboxout->x2 = SHRT_MAX;
+ : if (y1 < SHRT_MIN)
+ : pboxout->y1 = SHRT_MIN;
+ : else if (y2 > SHRT_MAX)
+ : pboxout->y2 = SHRT_MAX;
+ : pboxout++;
+ : }
+ : if (pboxout != pbox)
+ : {
+ : if (region->data->numRects == 1)
+ : {
+ : region->extents = *PIXREGION_BOXPTR(region);
+ : freeData(region);
+ : region->data = (pixman_region16_data_t *)NULL;
+ : }
+ : else
+ : pixman_set_extents(region);
+ : }
+ : }
+ 2 0.0022 :}
+ :
+ :/* XXX: Do we need this?
+ :static pixman_bool_t
+ :pixman_region16_data_copy(pixman_region16_t * dst, pixman_region16_t * src)
+ :{
+ : good(dst);
+ : good(src);
+ : if (dst->data)
+ : return TRUE;
+ : if (dst == src)
+ : return TRUE;
+ : if (!src->data || !src->data->size)
+ : {
+ : freeData(dst);
+ : dst->data = (pixman_region16_data_t *)NULL;
+ : return TRUE;
+ : }
+ : if (!dst->data || (dst->data->size < src->data->numRects))
+ : {
+ : freeData(dst);
+ : dst->data = allocData(src->data->numRects);
+ : if (!dst->data)
+ : return pixman_break (dst);
+ : }
+ : dst->data->size = src->data->size;
+ : dst->data->numRects = src->data->numRects;
+ : return TRUE;
+ :}
+ :*/
+ :
+ :void
+ :pixman_region_reset(pixman_region16_t *region, pixman_box16_t *box)
+ :{
+ : good(region);
+ : assert(box->x1<=box->x2);
+ : assert(box->y1<=box->y2);
+ : region->extents = *box;
+ : freeData(region);
+ : region->data = (pixman_region16_data_t *)NULL;
+ :}
+ :
+ :/* box is "return" value */
+ :int
+ :pixman_region_contains_point(pixman_region16_t * region,
+ : int x, int y,
+ : pixman_box16_t * box)
+ :{
+ : pixman_box16_t *pbox, *pboxEnd;
+ : int numRects;
+ :
+ : good(region);
+ : numRects = PIXREGION_NUM_RECTS(region);
+ : if (!numRects || !INBOX(®ion->extents, x, y))
+ : return(FALSE);
+ : if (numRects == 1)
+ : {
+ : *box = region->extents;
+ : return(TRUE);
+ : }
+ : for (pbox = PIXREGION_BOXPTR(region), pboxEnd = pbox + numRects;
+ : pbox != pboxEnd;
+ : pbox++)
+ : {
+ : if (y >= pbox->y2)
+ : continue; /* not there yet */
+ : if ((y < pbox->y1) || (x < pbox->x1))
+ : break; /* missed it */
+ : if (x >= pbox->x2)
+ : continue; /* not there yet */
+ : *box = *pbox;
+ : return(TRUE);
+ : }
+ : return(FALSE);
+ :}
+ :
+ :int
+ :pixman_region_not_empty(pixman_region16_t * region)
+ 9 0.0098 :{ /* pixman_region_not_empty total: 17 0.0185 */
+ : good(region);
+ 5 0.0054 : return(!PIXREGION_NIL(region));
+ 3 0.0033 :}
+ :
+ :/* XXX: Do we need this?
+ :static int
+ :pixman_region16_broken(pixman_region16_t * region)
+ :{
+ : good(region);
+ : return (PIXREGION_NAR(region));
+ :}
+ :*/
+ :
+ :void
+ :pixman_region_empty(pixman_region16_t * region)
+ :{
+ : good(region);
+ : freeData(region);
+ : region->extents.x2 = region->extents.x1;
+ : region->extents.y2 = region->extents.y1;
+ : region->data = pixman_region_emptyData;
+ :}
+ :
+ :pixman_box16_t *
+ :pixman_region_extents(pixman_region16_t * region)
+ :{
+ : good(region);
+ : return(®ion->extents);
+ :}
+ :
+ :#define ExchangeSpans(a, b) \
+ :{ \
+ : pixman_region16_point_t tpt; \
+ : int tw; \
+ : \
+ : tpt = spans[a]; spans[a] = spans[b]; spans[b] = tpt; \
+ : tw = widths[a]; widths[a] = widths[b]; widths[b] = tw; \
+ :}
+ :
+ :/* ||| I should apply the merge sort code to rectangle sorting above, and see
+ : if mapping time can be improved. But right now I've been at work 12 hours,
+ : so forget it.
+ :*/
+ :
+ :static void QuickSortSpans(
+ : pixman_region16_point_t spans[],
+ : int widths[],
+ : int numSpans)
+ :{
+ : int y;
+ : int i, j, m;
+ : pixman_region16_point_t *r;
+ :
+ : /* Always called with numSpans > 1 */
+ : /* Sorts only by y, doesn't bother to sort by x */
+ :
+ : do
+ : {
+ : if (numSpans < 9)
+ : {
+ : /* Do insertion sort */
+ : int yprev;
+ :
+ : yprev = spans[0].y;
+ : i = 1;
+ : do
+ : { /* while i != numSpans */
+ : y = spans[i].y;
+ : if (yprev > y)
+ : {
+ : /* spans[i] is out of order. Move into proper location. */
+ : pixman_region16_point_t tpt;
+ : int tw, k;
+ :
+ : for (j = 0; y >= spans[j].y; j++) {}
+ : tpt = spans[i];
+ : tw = widths[i];
+ : for (k = i; k != j; k--)
+ : {
+ : spans[k] = spans[k-1];
+ : widths[k] = widths[k-1];
+ : }
+ : spans[j] = tpt;
+ : widths[j] = tw;
+ : y = spans[i].y;
+ : } /* if out of order */
+ : yprev = y;
+ : i++;
+ : } while (i != numSpans);
+ : return;
+ : }
+ :
+ : /* Choose partition element, stick in location 0 */
+ : m = numSpans / 2;
+ : if (spans[m].y > spans[0].y) ExchangeSpans(m, 0);
+ : if (spans[m].y > spans[numSpans-1].y) ExchangeSpans(m, numSpans-1);
+ : if (spans[m].y > spans[0].y) ExchangeSpans(m, 0);
+ : y = spans[0].y;
+ :
+ : /* Partition array */
+ : i = 0;
+ : j = numSpans;
+ : do
+ : {
+ : r = &(spans[i]);
+ : do
+ : {
+ : r++;
+ : i++;
+ : } while (i != numSpans && r->y < y);
+ : r = &(spans[j]);
+ : do
+ : {
+ : r--;
+ : j--;
+ : } while (y < r->y);
+ : if (i < j)
+ : ExchangeSpans(i, j);
+ : } while (i < j);
+ :
+ : /* Move partition element back to middle */
+ : ExchangeSpans(0, j);
+ :
+ : /* Recurse */
+ : if (numSpans-j-1 > 1)
+ : QuickSortSpans(&spans[j+1], &widths[j+1], numSpans-j-1);
+ : numSpans = j;
+ : } while (numSpans > 1);
+ :}
+ :
+ :#define NextBand() \
+ :{ \
+ : clipy1 = pboxBandStart->y1; \
+ : clipy2 = pboxBandStart->y2; \
+ : pboxBandEnd = pboxBandStart + 1; \
+ : while (pboxBandEnd != pboxLast && pboxBandEnd->y1 == clipy1) { \
+ : pboxBandEnd++; \
+ : } \
+ : for (; ppt != pptLast && ppt->y < clipy1; ppt++, pwidth++) {} \
+ :}
+ :
+ :/*
+ : Clip a list of scanlines to a region. The caller has allocated the
+ : space. FSorted is non-zero if the scanline origins are in ascending
+ : order.
+ : returns the number of new, clipped scanlines.
+ :*/
+ :
+ :#ifdef XXX_DO_WE_NEED_THIS
+ :static int
+ :pixman_region16_clip_spans(
+ : pixman_region16_t *prgnDst,
+ : pixman_region16_point_t *ppt,
+ : int *pwidth,
+ : int nspans,
+ : pixman_region16_point_t *pptNew,
+ : int *pwidthNew,
+ : int fSorted)
+ :{
+ : pixman_region16_point_t *pptLast;
+ : int *pwidthNewStart; /* the vengeance of Xerox! */
+ : int y, x1, x2;
+ : int numRects;
+ :
+ : good(prgnDst);
+ : pptLast = ppt + nspans;
+ : pwidthNewStart = pwidthNew;
+ :
+ : if (!prgnDst->data)
+ : {
+ : /* Do special fast code with clip boundaries in registers(?) */
+ : /* It doesn't pay much to make use of fSorted in this case,
+ : so we lump everything together. */
+ :
+ : int clipx1, clipx2, clipy1, clipy2;
+ :
+ : clipx1 = prgnDst->extents.x1;
+ : clipy1 = prgnDst->extents.y1;
+ : clipx2 = prgnDst->extents.x2;
+ : clipy2 = prgnDst->extents.y2;
+ :
+ : for (; ppt != pptLast; ppt++, pwidth++)
+ : {
+ : y = ppt->y;
+ : x1 = ppt->x;
+ : if (clipy1 <= y && y < clipy2)
+ : {
+ : x2 = x1 + *pwidth;
+ : if (x1 < clipx1) x1 = clipx1;
+ : if (x2 > clipx2) x2 = clipx2;
+ : if (x1 < x2)
+ : {
+ : /* part of span in clip rectangle */
+ : pptNew->x = x1;
+ : pptNew->y = y;
+ : *pwidthNew = x2 - x1;
+ : pptNew++;
+ : pwidthNew++;
+ : }
+ : }
+ : } /* end for */
+ :
+ : }
+ : else if ((numRects = prgnDst->data->numRects))
+ : {
+ : /* Have to clip against many boxes */
+ : pixman_box16_t *pboxBandStart, *pboxBandEnd;
+ : pixman_box16_t *pbox;
+ : pixman_box16_t *pboxLast;
+ : int clipy1, clipy2;
+ :
+ : /* In this case, taking advantage of sorted spans gains more than
+ : the sorting costs. */
+ : if ((! fSorted) && (nspans > 1))
+ : QuickSortSpans(ppt, pwidth, nspans);
+ :
+ : pboxBandStart = PIXREGION_BOXPTR(prgnDst);
+ : pboxLast = pboxBandStart + numRects;
+ :
+ : NextBand();
+ :
+ : for (; ppt != pptLast; )
+ : {
+ : y = ppt->y;
+ : if (y < clipy2)
+ : {
+ : /* span is in the current band */
+ : pbox = pboxBandStart;
+ : x1 = ppt->x;
+ : x2 = x1 + *pwidth;
+ : do
+ : { /* For each box in band */
+ : int newx1, newx2;
+ :
+ : newx1 = x1;
+ : newx2 = x2;
+ : if (newx1 < pbox->x1) newx1 = pbox->x1;
+ : if (newx2 > pbox->x2) newx2 = pbox->x2;
+ : if (newx1 < newx2)
+ : {
+ : /* Part of span in clip rectangle */
+ : pptNew->x = newx1;
+ : pptNew->y = y;
+ : *pwidthNew = newx2 - newx1;
+ : pptNew++;
+ : pwidthNew++;
+ : }
+ : pbox++;
+ : } while (pbox != pboxBandEnd);
+ : ppt++;
+ : pwidth++;
+ : }
+ : else
+ : {
+ : /* Move to next band, adjust ppt as needed */
+ : pboxBandStart = pboxBandEnd;
+ : if (pboxBandStart == pboxLast)
+ : break; /* We're completely done */
+ : NextBand();
+ : }
+ : }
+ : }
+ : return (pwidthNew - pwidthNewStart);
+ :}
+ :
+ :/* find the band in a region with the most rectangles */
+ :static int
+ :pixman_region16_find_max_band(pixman_region16_t * prgn)
+ :{
+ : int nbox;
+ : pixman_box16_t * pbox;
+ : int nThisBand;
+ : int nMaxBand = 0;
+ : short yThisBand;
+ :
+ : good(prgn);
+ : nbox = PIXREGION_NUM_RECTS(prgn);
+ : pbox = PIXREGION_RECTS(prgn);
+ :
+ : while(nbox > 0)
+ : {
+ : yThisBand = pbox->y1;
+ : nThisBand = 0;
+ : while((nbox > 0) && (pbox->y1 == yThisBand))
+ : {
+ : nbox--;
+ : pbox++;
+ : nThisBand++;
+ : }
+ : if (nThisBand > nMaxBand)
+ : nMaxBand = nThisBand;
+ : }
+ : return (nMaxBand);
+ :}
+ :#endif /* XXX_DO_WE_NEED_THIS */
+ :
+ :
+ :pixman_bool_t
+ :pixman_region_selfcheck (reg)
+ : pixman_region16_t * reg;
+ :{
+ : int i, numRects;
+ :
+ : if ((reg->extents.x1 > reg->extents.x2) ||
+ : (reg->extents.y1 > reg->extents.y2))
+ : return FALSE;
+ : numRects = PIXREGION_NUM_RECTS(reg);
+ : if (!numRects)
+ : return ((reg->extents.x1 == reg->extents.x2) &&
+ : (reg->extents.y1 == reg->extents.y2) &&
+ : (reg->data->size || (reg->data == pixman_region_emptyData)));
+ : else if (numRects == 1)
+ : return (!reg->data);
+ : else
+ : {
+ : pixman_box16_t * pboxP, * pboxN;
+ : pixman_box16_t box;
+ :
+ : pboxP = PIXREGION_RECTS(reg);
+ : box = *pboxP;
+ : box.y2 = pboxP[numRects-1].y2;
+ : pboxN = pboxP + 1;
+ : for (i = numRects; --i > 0; pboxP++, pboxN++)
+ : {
+ : if ((pboxN->x1 >= pboxN->x2) ||
+ : (pboxN->y1 >= pboxN->y2))
+ : return FALSE;
+ : if (pboxN->x1 < box.x1)
+ : box.x1 = pboxN->x1;
+ : if (pboxN->x2 > box.x2)
+ : box.x2 = pboxN->x2;
+ : if ((pboxN->y1 < pboxP->y1) ||
+ : ((pboxN->y1 == pboxP->y1) &&
+ : ((pboxN->x1 < pboxP->x2) || (pboxN->y2 != pboxP->y2))))
+ : return FALSE;
+ : }
+ : return ((box.x1 == reg->extents.x1) &&
+ : (box.x2 == reg->extents.x2) &&
+ : (box.y1 == reg->extents.y1) &&
+ : (box.y2 == reg->extents.y2));
+ : }
+ :}
+ :
+ :pixman_bool_t
+ :pixman_region_init_rects (pixman_region16_t *region,
+ : pixman_box16_t *boxes, int count)
+ :{
+ : int overlap;
+ :
+ : if (count == 1) {
+ : pixman_region_init_rect(region,
+ : boxes[0].x1,
+ : boxes[0].y1,
+ : boxes[0].x2 - boxes[0].x1,
+ : boxes[0].y2 - boxes[0].y1);
+ : return TRUE;
+ : }
+ :
+ : pixman_region_init(region);
+ : if (!pixman_rect_alloc(region, count))
+ : return FALSE;
+ :
+ : /* Copy in the rects */
+ : memcpy (PIXREGION_RECTS(region), boxes, sizeof(pixman_box16_t) * count);
+ : region->data->numRects = count;
+ :
+ : /* Validate */
+ : region->extents.x1 = region->extents.x2 = 0;
+ : return pixman_region_validate (region, &overlap);
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/exa/exa_migration.c"
+ *
+ * 335 0.3649
+ */
+
+
+ :/*
+ : * Copyright © 2006 Intel Corporation
+ : *
+ : * Permission is hereby granted, free of charge, to any person obtaining a
+ : * copy of this software and associated documentation files (the "Software"),
+ : * to deal in the Software without restriction, including without limitation
+ : * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ : * and/or sell copies of the Software, and to permit persons to whom the
+ : * Software is furnished to do so, subject to the following conditions:
+ : *
+ : * The above copyright notice and this permission notice (including the next
+ : * paragraph) shall be included in all copies or substantial portions of the
+ : * Software.
+ : *
+ : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ : * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ : * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ : * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ : * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ : * SOFTWARE.
+ : *
+ : * Authors:
+ : * Eric Anholt <eric@anholt.net>
+ : * Michel Dänzer <michel@tungstengraphics.com>
+ : *
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <string.h>
+ :
+ :#include "exa_priv.h"
+ :#include <X11/fonts/fontstruct.h>
+ :#include "dixfontstr.h"
+ :#include "exa.h"
+ :#include "cw.h"
+ :
+ :#if DEBUG_MIGRATE
+ :#define DBG_MIGRATE(a) ErrorF a
+ :#else
+ :#define DBG_MIGRATE(a)
+ :#endif
+ :
+ :/**
+ : * Returns TRUE if the pixmap is not movable. This is the case where it's a
+ : * fake pixmap for the frontbuffer (no pixmap private) or it's a scratch
+ : * pixmap created by some other X Server internals (the score says it's
+ : * pinned).
+ : */
+ :static Bool
+ :exaPixmapIsPinned (PixmapPtr pPix)
+ 11 0.0120 :{ /* exaPixmapIsPinned total: 45 0.0490 */
+ 7 0.0076 : ExaPixmapPriv (pPix);
+ :
+ 25 0.0272 : return pExaPixmap == NULL || pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED;
+ 2 0.0022 :}
+ :
+ :/**
+ : * The fallback path for UTS/DFS failing is to just memcpy. exaCopyDirtyToSys
+ : * and exaCopyDirtyToFb both needed to do this loop.
+ : */
+ :static void
+ :exaMemcpyBox (PixmapPtr pPixmap, BoxPtr pbox, CARD8 *src, int src_pitch,
+ : CARD8 *dst, int dst_pitch)
+ : {
+ : int i, cpp = pPixmap->drawable.bitsPerPixel / 8;
+ : int bytes = (pbox->x2 - pbox->x1) * cpp;
+ :
+ : src += pbox->y1 * src_pitch + pbox->x1 * cpp;
+ : dst += pbox->y1 * dst_pitch + pbox->x1 * cpp;
+ :
+ : for (i = pbox->y2 - pbox->y1; i; i--) {
+ : memcpy (dst, src, bytes);
+ : src += src_pitch;
+ : dst += dst_pitch;
+ : }
+ :}
+ :
+ :/**
+ : * Returns TRUE if the pixmap is dirty (has been modified in its current
+ : * location compared to the other), or lacks a private for tracking
+ : * dirtiness.
+ : */
+ :static Bool
+ :exaPixmapIsDirty (PixmapPtr pPix)
+ :{
+ : ExaPixmapPriv (pPix);
+ :
+ : return pExaPixmap == NULL ||
+ : REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage));
+ :}
+ :
+ :/**
+ : * Returns TRUE if the pixmap is either pinned in FB, or has a sufficient score
+ : * to be considered "should be in framebuffer". That's just anything that has
+ : * had more acceleration than fallbacks, or has no score yet.
+ : *
+ : * Only valid if using a migration scheme that tracks score.
+ : */
+ :static Bool
+ :exaPixmapShouldBeInFB (PixmapPtr pPix)
+ :{
+ : ExaPixmapPriv (pPix);
+ :
+ : if (exaPixmapIsPinned (pPix))
+ : return TRUE;
+ :
+ : return pExaPixmap->score >= 0;
+ :}
+ :
+ :/**
+ : * If the pixmap is currently dirty, this copies at least the dirty area from
+ : * the framebuffer memory copy to the system memory copy. Both areas must be
+ : * allocated.
+ : */
+ :static void
+ :exaCopyDirtyToSys (PixmapPtr pPixmap)
+ :{
+ : ExaScreenPriv (pPixmap->drawable.pScreen);
+ : ExaPixmapPriv (pPixmap);
+ : RegionPtr pRegion = DamageRegion (pExaPixmap->pDamage);
+ : CARD8 *save_ptr;
+ : int save_pitch;
+ : BoxPtr pBox = REGION_RECTS(pRegion);
+ : int nbox = REGION_NUM_RECTS(pRegion);
+ : Bool do_sync = FALSE;
+ :
+ : save_ptr = pPixmap->devPrivate.ptr;
+ : save_pitch = pPixmap->devKind;
+ : pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
+ : pPixmap->devKind = pExaPixmap->fb_pitch;
+ :
+ : while (nbox--) {
+ : pBox->x1 = max(pBox->x1, 0);
+ : pBox->y1 = max(pBox->y1, 0);
+ : pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
+ : pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
+ :
+ : if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
+ : continue;
+ :
+ : if (pExaScr->info->DownloadFromScreen == NULL ||
+ : !pExaScr->info->DownloadFromScreen (pPixmap,
+ : pBox->x1, pBox->y1,
+ : pBox->x2 - pBox->x1,
+ : pBox->y2 - pBox->y1,
+ : pExaPixmap->sys_ptr
+ : + pBox->y1 * pExaPixmap->sys_pitch
+ : + pBox->x1 * pPixmap->drawable.bitsPerPixel / 8,
+ : pExaPixmap->sys_pitch))
+ : {
+ : exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
+ : exaMemcpyBox (pPixmap, pBox,
+ : pExaPixmap->fb_ptr, pExaPixmap->fb_pitch,
+ : pExaPixmap->sys_ptr, pExaPixmap->sys_pitch);
+ : exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
+ : }
+ : else
+ : do_sync = TRUE;
+ :
+ : pBox++;
+ : }
+ :
+ : /* Make sure the bits have actually landed, since we don't necessarily sync
+ : * when accessing pixmaps in system memory.
+ : */
+ : if (do_sync)
+ : exaWaitSync (pPixmap->drawable.pScreen);
+ :
+ : pPixmap->devPrivate.ptr = save_ptr;
+ : pPixmap->devKind = save_pitch;
+ :
+ : /* The previously damaged bits are now no longer damaged but valid */
+ : REGION_UNION(pPixmap->drawable.pScreen,
+ : &pExaPixmap->validReg, &pExaPixmap->validReg, pRegion);
+ : DamageEmpty (pExaPixmap->pDamage);
+ :}
+ :
+ :/**
+ : * If the pixmap is currently dirty, this copies at least the dirty area from
+ : * the system memory copy to the framebuffer memory copy. Both areas must be
+ : * allocated.
+ : */
+ :static void
+ :exaCopyDirtyToFb (PixmapPtr pPixmap)
+ :{
+ : ExaScreenPriv (pPixmap->drawable.pScreen);
+ : ExaPixmapPriv (pPixmap);
+ : RegionPtr pRegion = DamageRegion (pExaPixmap->pDamage);
+ : CARD8 *save_ptr;
+ : int save_pitch;
+ : BoxPtr pBox = REGION_RECTS(pRegion);
+ : int nbox = REGION_NUM_RECTS(pRegion);
+ : Bool do_sync = FALSE;
+ :
+ : save_ptr = pPixmap->devPrivate.ptr;
+ : save_pitch = pPixmap->devKind;
+ : pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
+ : pPixmap->devKind = pExaPixmap->fb_pitch;
+ :
+ : while (nbox--) {
+ : pBox->x1 = max(pBox->x1, 0);
+ : pBox->y1 = max(pBox->y1, 0);
+ : pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
+ : pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
+ :
+ : if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
+ : continue;
+ :
+ : if (pExaScr->info->UploadToScreen == NULL ||
+ : !pExaScr->info->UploadToScreen (pPixmap,
+ : pBox->x1, pBox->y1,
+ : pBox->x2 - pBox->x1,
+ : pBox->y2 - pBox->y1,
+ : pExaPixmap->sys_ptr
+ : + pBox->y1 * pExaPixmap->sys_pitch
+ : + pBox->x1 * pPixmap->drawable.bitsPerPixel / 8,
+ : pExaPixmap->sys_pitch))
+ : {
+ : exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
+ : exaMemcpyBox (pPixmap, pBox,
+ : pExaPixmap->sys_ptr, pExaPixmap->sys_pitch,
+ : pExaPixmap->fb_ptr, pExaPixmap->fb_pitch);
+ : exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
+ : }
+ : else
+ : do_sync = TRUE;
+ :
+ : pBox++;
+ : }
+ :
+ : if (do_sync)
+ : exaMarkSync (pPixmap->drawable.pScreen);
+ :
+ : pPixmap->devPrivate.ptr = save_ptr;
+ : pPixmap->devKind = save_pitch;
+ :
+ : /* The previously damaged bits are now no longer damaged but valid */
+ : REGION_UNION(pPixmap->drawable.pScreen,
+ : &pExaPixmap->validReg, &pExaPixmap->validReg, pRegion);
+ : DamageEmpty (pExaPixmap->pDamage);
+ :}
+ :
+ :/**
+ : * Copies out important pixmap data and removes references to framebuffer area.
+ : * Called when the memory manager decides it's time to kick the pixmap out of
+ : * framebuffer entirely.
+ : */
+ :void
+ :exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area)
+ :{
+ : PixmapPtr pPixmap = area->privData;
+ : ExaPixmapPriv(pPixmap);
+ : RegionPtr pDamageReg = DamageRegion(pExaPixmap->pDamage);
+ :
+ : DBG_MIGRATE (("Save %p (%p) (%dx%d) (%c)\n", pPixmap,
+ : (void*)(ExaGetPixmapPriv(pPixmap)->area ?
+ : ExaGetPixmapPriv(pPixmap)->area->offset : 0),
+ : pPixmap->drawable.width,
+ : pPixmap->drawable.height,
+ : exaPixmapIsDirty(pPixmap) ? 'd' : 'c'));
+ :
+ : if (exaPixmapIsOffscreen(pPixmap)) {
+ : exaCopyDirtyToSys (pPixmap);
+ : pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
+ : pPixmap->devKind = pExaPixmap->sys_pitch;
+ : pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ : }
+ :
+ : pExaPixmap->fb_ptr = NULL;
+ : pExaPixmap->area = NULL;
+ :
+ : /* Mark all valid bits as damaged, so they'll get copied to FB next time */
+ : REGION_UNION(pPixmap->drawable.pScreen, pDamageReg, pDamageReg,
+ : &pExaPixmap->validReg);
+ :}
+ :
+ :/**
+ : * Allocates a framebuffer copy of the pixmap if necessary, and then copies
+ : * any necessary pixmap data into the framebuffer copy and points the pixmap at
+ : * it.
+ : *
+ : * Note that when first allocated, a pixmap will have FALSE dirty flag.
+ : * This is intentional because pixmap data starts out undefined. So if we move
+ : * it in due to the first operation against it being accelerated, it will have
+ : * undefined framebuffer contents that we didn't have to upload. If we do
+ : * moveouts (and moveins) after the first movein, then we will only have to copy
+ : * back and forth if the pixmap was written to after the last synchronization of
+ : * the two copies. Then, at exaPixmapSave (when the framebuffer copy goes away)
+ : * we mark the pixmap dirty, so that the next exaMoveInPixmap will actually move
+ : * all the data, since it's almost surely all valid now.
+ : */
+ :void
+ :exaMoveInPixmap (PixmapPtr pPixmap)
+ 30 0.0327 :{ /* exaMoveInPixmap total: 133 0.1449 */
+ 4 0.0044 : ScreenPtr pScreen = pPixmap->drawable.pScreen;
+ 23 0.0251 : ExaScreenPriv (pScreen);
+ 23 0.0251 : ExaPixmapPriv (pPixmap);
+ :
+ : /* If we're VT-switched away, no touching card memory allowed. */
+ 16 0.0174 : if (pExaScr->swappedOut)
+ : return;
+ :
+ : /* If we're already in FB, our work is done. */
+ 12 0.0131 : if (exaPixmapIsOffscreen(pPixmap))
+ : return;
+ :
+ : /* If we're not allowed to move, then fail. */
+ : if (exaPixmapIsPinned(pPixmap))
+ : return;
+ :
+ : /* Don't migrate in pixmaps which are less than 8bpp. This avoids a lot of
+ : * fragility in EXA, and <8bpp is probably not used enough any more to care
+ : * (at least, not in acceleratd paths).
+ : */
+ 1 0.0011 : if (pPixmap->drawable.bitsPerPixel < 8)
+ : return;
+ :
+ : if (pExaPixmap->area == NULL) {
+ 2 0.0022 : pExaPixmap->area =
+ : exaOffscreenAlloc (pScreen, pExaPixmap->fb_size,
+ : pExaScr->info->pixmapOffsetAlign, FALSE,
+ : exaPixmapSave, (pointer) pPixmap);
+ : if (pExaPixmap->area == NULL)
+ : return;
+ :
+ : pExaPixmap->fb_ptr = (CARD8 *) pExaScr->info->memoryBase +
+ : pExaPixmap->area->offset;
+ : }
+ :
+ : DBG_MIGRATE (("-> %p (0x%x) (%dx%d) (%c)\n", pPixmap,
+ : (ExaGetPixmapPriv(pPixmap)->area ?
+ : ExaGetPixmapPriv(pPixmap)->area->offset : 0),
+ : pPixmap->drawable.width,
+ : pPixmap->drawable.height,
+ : exaPixmapIsDirty(pPixmap) ? 'd' : 'c'));
+ :
+ : exaCopyDirtyToFb (pPixmap);
+ :
+ : if (pExaScr->hideOffscreenPixmapData)
+ : pPixmap->devPrivate.ptr = NULL;
+ : else
+ 1 0.0011 : pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
+ 1 0.0011 : pPixmap->devKind = pExaPixmap->fb_pitch;
+ 2 0.0022 : pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ 9 0.0098 :}
+ :
+ :/**
+ : * Switches the current active location of the pixmap to system memory, copying
+ : * updated data out if necessary.
+ : */
+ :void
+ :exaMoveOutPixmap (PixmapPtr pPixmap)
+ :{
+ : ExaPixmapPriv (pPixmap);
+ :
+ : if (exaPixmapIsPinned(pPixmap))
+ : return;
+ :
+ : if (exaPixmapIsOffscreen(pPixmap)) {
+ :
+ : DBG_MIGRATE (("<- %p (%p) (%dx%d) (%c)\n", pPixmap,
+ : (void*)(ExaGetPixmapPriv(pPixmap)->area ?
+ : ExaGetPixmapPriv(pPixmap)->area->offset : 0),
+ : pPixmap->drawable.width,
+ : pPixmap->drawable.height,
+ : exaPixmapIsDirty(pPixmap) ? 'd' : 'c'));
+ :
+ : exaCopyDirtyToSys (pPixmap);
+ :
+ : pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
+ : pPixmap->devKind = pExaPixmap->sys_pitch;
+ : pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ : }
+ :}
+ :
+ :/**
+ : * For the "greedy" migration scheme, pushes the pixmap toward being located in
+ : * framebuffer memory.
+ : */
+ :static void
+ :exaMigrateTowardFb (PixmapPtr pPixmap)
+ :{
+ : ExaPixmapPriv (pPixmap);
+ :
+ : if (pExaPixmap == NULL) {
+ : DBG_MIGRATE(("UseScreen: ignoring exa-uncontrolled pixmap %p (%s)\n",
+ : (pointer)pPixmap,
+ : exaPixmapIsOffscreen(pPixmap) ? "s" : "m"));
+ : return;
+ : }
+ :
+ : if (pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED) {
+ : DBG_MIGRATE(("UseScreen: not migrating pinned pixmap %p\n",
+ : (pointer)pPixmap));
+ : return;
+ : }
+ :
+ : DBG_MIGRATE(("UseScreen %p score %d\n",
+ : (pointer)pPixmap, pExaPixmap->score));
+ :
+ : if (pExaPixmap->score == EXA_PIXMAP_SCORE_INIT) {
+ : exaMoveInPixmap(pPixmap);
+ : pExaPixmap->score = 0;
+ : }
+ :
+ : if (pExaPixmap->score < EXA_PIXMAP_SCORE_MAX)
+ : pExaPixmap->score++;
+ :
+ : if (pExaPixmap->score >= EXA_PIXMAP_SCORE_MOVE_IN &&
+ : !exaPixmapIsOffscreen(pPixmap))
+ : {
+ : exaMoveInPixmap (pPixmap);
+ : }
+ :
+ : ExaOffscreenMarkUsed (pPixmap);
+ :}
+ :
+ :/**
+ : * For the "greedy" migration scheme, pushes the pixmap toward being located in
+ : * system memory.
+ : */
+ :static void
+ :exaMigrateTowardSys (PixmapPtr pPixmap)
+ :{
+ : ExaPixmapPriv (pPixmap);
+ :
+ : if (pExaPixmap == NULL) {
+ : DBG_MIGRATE(("UseMem: ignoring exa-uncontrolled pixmap %p (%s)\n",
+ : (pointer)pPixmap,
+ : exaPixmapIsOffscreen(pPixmap) ? "s" : "m"));
+ : return;
+ : }
+ :
+ : DBG_MIGRATE(("UseMem: %p score %d\n", (pointer)pPixmap, pExaPixmap->score));
+ :
+ : if (pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED)
+ : return;
+ :
+ : if (pExaPixmap->score == EXA_PIXMAP_SCORE_INIT)
+ : pExaPixmap->score = 0;
+ :
+ : if (pExaPixmap->score > EXA_PIXMAP_SCORE_MIN)
+ : pExaPixmap->score--;
+ :
+ : if (pExaPixmap->score <= EXA_PIXMAP_SCORE_MOVE_OUT && pExaPixmap->area)
+ : exaMoveOutPixmap (pPixmap);
+ :}
+ :
+ :/**
+ : * If the pixmap has both a framebuffer and system memory copy, this function
+ : * asserts that both of them are the same.
+ : */
+ :static Bool
+ :exaAssertNotDirty (PixmapPtr pPixmap)
+ :{
+ : ExaPixmapPriv (pPixmap);
+ : CARD8 *dst, *src;
+ : RegionPtr pValidReg = &pExaPixmap->validReg;
+ : int dst_pitch, src_pitch, cpp, y, nbox = REGION_NUM_RECTS(pValidReg);
+ : BoxPtr pBox = REGION_RECTS(pValidReg);
+ : Bool ret = TRUE;
+ :
+ : if (!nbox || exaPixmapIsPinned(pPixmap) || pExaPixmap->fb_ptr == NULL)
+ : return ret;
+ :
+ : dst_pitch = pExaPixmap->sys_pitch;
+ : src_pitch = pExaPixmap->fb_pitch;
+ : cpp = pPixmap->drawable.bitsPerPixel / 8;
+ :
+ : exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
+ : while (nbox--) {
+ : int rowbytes;
+ :
+ : pBox->x1 = max(pBox->x1, 0);
+ : pBox->y1 = max(pBox->y1, 0);
+ : pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
+ : pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
+ :
+ : if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
+ : continue;
+ :
+ : rowbytes = (pBox->x2 - pBox->x1) * cpp;
+ : src = pExaPixmap->fb_ptr + pBox->y1 * src_pitch + pBox->x1 * cpp;
+ : dst = pExaPixmap->sys_ptr + pBox->y1 * dst_pitch + pBox->x1 * cpp;
+ :
+ : for (y = pBox->y1; y < pBox->y2;
+ : y++, src += src_pitch, dst += dst_pitch) {
+ : if (memcmp(dst, src, rowbytes) != 0) {
+ : ret = FALSE;
+ : exaPixmapDirty(pPixmap, pBox->x1, pBox->y1, pBox->x2,
+ : pBox->y2);
+ : break;
+ : }
+ : }
+ : }
+ : exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
+ :
+ : return ret;
+ :}
+ :
+ :/**
+ : * Performs migration of the pixmaps according to the operation information
+ : * provided in pixmaps and can_accel and the migration scheme chosen in the
+ : * config file.
+ : */
+ :void
+ :exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
+ 12 0.0131 :{ /* exaDoMigration total: 166 0.1808 */
+ : ScreenPtr pScreen = pixmaps[0].pPix->drawable.pScreen;
+ 17 0.0185 : ExaScreenPriv(pScreen);
+ : int i, j;
+ :
+ 3 0.0033 : if (! can_accel)
+ : return;
+ :
+ : /* If this debugging flag is set, check each pixmap for whether it is marked
+ : * as clean, and if so, actually check if that's the case. This should help
+ : * catch issues with failing to mark a drawable as dirty. While it will
+ : * catch them late (after the operation happened), it at least explains what
+ : * went wrong, and instrumenting the code to find what operation happened
+ : * to the pixmap last shouldn't be hard.
+ : */
+ 9 0.0098 : if (pExaScr->checkDirtyCorrectness) {
+ 1 0.0011 : for (i = 0; i < npixmaps; i++) {
+ : if (!exaPixmapIsDirty (pixmaps[i].pPix) &&
+ : !exaAssertNotDirty (pixmaps[i].pPix))
+ : ErrorF("%s: Pixmap %d dirty but not marked as such!\n", __func__, i);
+ : }
+ : }
+ : /* If anything is pinned in system memory, we won't be able to
+ : * accelerate.
+ : */
+ 16 0.0174 : for (i = 0; i < npixmaps; i++) {
+ 22 0.0240 : if (exaPixmapIsPinned (pixmaps[i].pPix) &&
+ : !exaPixmapIsOffscreen (pixmaps[i].pPix))
+ : {
+ : return;
+ : EXA_FALLBACK(("Pixmap %p (%dx%d) pinned in sys\n", pixmaps[i].pPix,
+ : pixmaps[i].pPix->drawable.width,
+ : pixmaps[i].pPix->drawable.height));
+ : can_accel = FALSE;
+ : break;
+ : }
+ : }
+ :
+ 2 0.0022 : if (pExaScr->migration == ExaMigrationSmart) {
+ : /* If we've got something as a destination that we shouldn't cause to
+ : * become newly dirtied, take the unaccelerated route.
+ : */
+ : for (i = 0; i < npixmaps; i++) {
+ : if (pixmaps[i].as_dst && !exaPixmapShouldBeInFB (pixmaps[i].pPix) &&
+ : !exaPixmapIsDirty (pixmaps[i].pPix))
+ : {
+ : for (i = 0; i < npixmaps; i++) {
+ : if (!exaPixmapIsDirty (pixmaps[i].pPix))
+ : exaMoveOutPixmap (pixmaps[i].pPix);
+ : }
+ : return;
+ : }
+ : }
+ :
+ : /* If we aren't going to accelerate, then we migrate everybody toward
+ : * system memory, and kick out if it's free.
+ : */
+ : if (!can_accel) {
+ : for (i = 0; i < npixmaps; i++) {
+ : exaMigrateTowardSys (pixmaps[i].pPix);
+ : if (!exaPixmapIsDirty (pixmaps[i].pPix))
+ : exaMoveOutPixmap (pixmaps[i].pPix);
+ : }
+ : return;
+ : }
+ :
+ : /* Finally, the acceleration path. Move them all in. */
+ : for (i = 0; i < npixmaps; i++) {
+ : exaMigrateTowardFb(pixmaps[i].pPix);
+ : exaMoveInPixmap(pixmaps[i].pPix);
+ : }
+ : } else if (pExaScr->migration == ExaMigrationGreedy) {
+ : /* If we can't accelerate, either because the driver can't or because one of
+ : * the pixmaps is pinned in system memory, then we migrate everybody toward
+ : * system memory.
+ : *
+ : * We also migrate toward system if all pixmaps involved are currently in
+ : * system memory -- this can mitigate thrashing when there are significantly
+ : * more pixmaps active than would fit in memory.
+ : *
+ : * If not, then we migrate toward FB so that hopefully acceleration can
+ : * happen.
+ : */
+ : if (!can_accel) {
+ : for (i = 0; i < npixmaps; i++)
+ : exaMigrateTowardSys (pixmaps[i].pPix);
+ : return;
+ : }
+ :
+ : for (i = 0; i < npixmaps; i++) {
+ : if (exaPixmapIsOffscreen(pixmaps[i].pPix)) {
+ : /* Found one in FB, so move all to FB. */
+ : for (j = 0; j < npixmaps; j++)
+ : exaMigrateTowardFb(pixmaps[j].pPix);
+ : return;
+ : }
+ : }
+ :
+ : /* Nobody's in FB, so move all away from FB. */
+ : for (i = 0; i < npixmaps; i++)
+ : exaMigrateTowardSys(pixmaps[i].pPix);
+ 3 0.0033 : } else if (pExaScr->migration == ExaMigrationAlways) {
+ : /* Always move the pixmaps out if we can't accelerate. If we can
+ : * accelerate, try to move them all in. If that fails, then move them
+ : * back out.
+ : */
+ : if (!can_accel) {
+ : for (i = 0; i < npixmaps; i++)
+ : exaMoveOutPixmap(pixmaps[i].pPix);
+ : return;
+ : }
+ :
+ : /* Now, try to move them all into FB */
+ 21 0.0229 : for (i = 0; i < npixmaps; i++) {
+ 18 0.0196 : exaMoveInPixmap(pixmaps[i].pPix);
+ 11 0.0120 : ExaOffscreenMarkUsed (pixmaps[i].pPix);
+ : }
+ :
+ : /* If we couldn't fit everything in, then kick back out */
+ 6 0.0065 : for (i = 0; i < npixmaps; i++) {
+ 17 0.0185 : if (!exaPixmapIsOffscreen(pixmaps[i].pPix)) {
+ : return;
+ : EXA_FALLBACK(("Pixmap %p (%dx%d) not in fb\n", pixmaps[i].pPix,
+ : pixmaps[i].pPix->drawable.width,
+ : pixmaps[i].pPix->drawable.height));
+ : for (j = 0; j < npixmaps; j++)
+ : exaMoveOutPixmap(pixmaps[j].pPix);
+ : break;
+ : }
+ : }
+ : }
+ 8 0.0087 :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/render/mipict.c"
+ *
+ * 267 0.2909
+ */
+
+
+ :/*
+ : *
+ : * Copyright © 1999 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "scrnintstr.h"
+ :#include "gcstruct.h"
+ :#include "pixmapstr.h"
+ :#include "windowstr.h"
+ :#include "mi.h"
+ :#include "picturestr.h"
+ :#include "mipict.h"
+ :
+ :#ifndef __GNUC__
+ :#define __inline
+ :#endif
+ :
+ :int
+ :miCreatePicture (PicturePtr pPicture)
+ 1 0.0011 :{ /* miCreatePicture total: 2 0.0022 */
+ : return Success;
+ 1 0.0011 :}
+ :
+ :void
+ :miDestroyPicture (PicturePtr pPicture)
+ 3 0.0033 :{ /* miDestroyPicture total: 4 0.0044 */
+ : if (pPicture->freeCompClip)
+ 1 0.0011 : REGION_DESTROY(pPicture->pDrawable->pScreen, pPicture->pCompositeClip);
+ :}
+ :
+ :void
+ :miDestroyPictureClip (PicturePtr pPicture)
+ :{
+ : switch (pPicture->clientClipType) {
+ : case CT_NONE:
+ : return;
+ : case CT_PIXMAP:
+ : (*pPicture->pDrawable->pScreen->DestroyPixmap) ((PixmapPtr) (pPicture->clientClip));
+ : break;
+ : default:
+ : /*
+ : * we know we'll never have a list of rectangles, since ChangeClip
+ : * immediately turns them into a region
+ : */
+ : REGION_DESTROY(pPicture->pDrawable->pScreen, pPicture->clientClip);
+ : break;
+ : }
+ : pPicture->clientClip = NULL;
+ : pPicture->clientClipType = CT_NONE;
+ :}
+ :
+ :int
+ :miChangePictureClip (PicturePtr pPicture,
+ : int type,
+ : pointer value,
+ : int n)
+ :{ /* miChangePictureClip total: 1 0.0011 */
+ : ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ 1 0.0011 : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : pointer clientClip;
+ : int clientClipType;
+ :
+ : switch (type) {
+ : case CT_PIXMAP:
+ : /* convert the pixmap to a region */
+ : clientClip = (pointer) BITMAP_TO_REGION(pScreen, (PixmapPtr) value);
+ : if (!clientClip)
+ : return BadAlloc;
+ : clientClipType = CT_REGION;
+ : (*pScreen->DestroyPixmap) ((PixmapPtr) value);
+ : break;
+ : case CT_REGION:
+ : clientClip = value;
+ : clientClipType = CT_REGION;
+ : break;
+ : case CT_NONE:
+ : clientClip = 0;
+ : clientClipType = CT_NONE;
+ : break;
+ : default:
+ : clientClip = (pointer) RECTS_TO_REGION(pScreen, n,
+ : (xRectangle *) value,
+ : type);
+ : if (!clientClip)
+ : return BadAlloc;
+ : clientClipType = CT_REGION;
+ : xfree(value);
+ : break;
+ : }
+ : (*ps->DestroyPictureClip) (pPicture);
+ : pPicture->clientClip = clientClip;
+ : pPicture->clientClipType = clientClipType;
+ : pPicture->stateChanges |= CPClipMask;
+ : return Success;
+ :}
+ :
+ :void
+ :miChangePicture (PicturePtr pPicture,
+ : Mask mask)
+ :{ /* miChangePicture total: 1 0.0011 */
+ : return;
+ 1 0.0011 :}
+ :
+ :void
+ :miValidatePicture (PicturePtr pPicture,
+ : Mask mask)
+ 3 0.0033 :{ /* miValidatePicture total: 9 0.0098 */
+ : DrawablePtr pDrawable = pPicture->pDrawable;
+ :
+ : if ((mask & (CPClipXOrigin|CPClipYOrigin|CPClipMask|CPSubwindowMode)) ||
+ : (pDrawable->serialNumber != (pPicture->serialNumber & DRAWABLE_SERIAL_BITS)))
+ : {
+ 1 0.0011 : if (pDrawable->type == DRAWABLE_WINDOW)
+ : {
+ : WindowPtr pWin = (WindowPtr) pDrawable;
+ : RegionPtr pregWin;
+ : Bool freeTmpClip, freeCompClip;
+ :
+ : if (pPicture->subWindowMode == IncludeInferiors)
+ : {
+ : pregWin = NotClippedByChildren(pWin);
+ : freeTmpClip = TRUE;
+ : }
+ : else
+ : {
+ : pregWin = &pWin->clipList;
+ : freeTmpClip = FALSE;
+ : }
+ : freeCompClip = pPicture->freeCompClip;
+ :
+ : /*
+ : * if there is no client clip, we can get by with just keeping the
+ : * pointer we got, and remembering whether or not should destroy
+ : * (or maybe re-use) it later. this way, we avoid unnecessary
+ : * copying of regions. (this wins especially if many clients clip
+ : * by children and have no client clip.)
+ : */
+ : if (pPicture->clientClipType == CT_NONE)
+ : {
+ : if (freeCompClip)
+ : REGION_DESTROY(pScreen, pPicture->pCompositeClip);
+ : pPicture->pCompositeClip = pregWin;
+ : pPicture->freeCompClip = freeTmpClip;
+ : }
+ : else
+ : {
+ : /*
+ : * we need one 'real' region to put into the composite clip. if
+ : * pregWin the current composite clip are real, we can get rid of
+ : * one. if pregWin is real and the current composite clip isn't,
+ : * use pregWin for the composite clip. if the current composite
+ : * clip is real and pregWin isn't, use the current composite
+ : * clip. if neither is real, create a new region.
+ : */
+ :
+ : REGION_TRANSLATE(pScreen, pPicture->clientClip,
+ : pDrawable->x + pPicture->clipOrigin.x,
+ : pDrawable->y + pPicture->clipOrigin.y);
+ :
+ : if (freeCompClip)
+ : {
+ : REGION_INTERSECT(pScreen, pPicture->pCompositeClip,
+ : pregWin, pPicture->clientClip);
+ : if (freeTmpClip)
+ : REGION_DESTROY(pScreen, pregWin);
+ : }
+ : else if (freeTmpClip)
+ : {
+ : REGION_INTERSECT(pScreen, pregWin, pregWin, pPicture->clientClip);
+ : pPicture->pCompositeClip = pregWin;
+ : }
+ : else
+ : {
+ : pPicture->pCompositeClip = REGION_CREATE(pScreen, NullBox, 0);
+ : REGION_INTERSECT(pScreen, pPicture->pCompositeClip,
+ : pregWin, pPicture->clientClip);
+ : }
+ : pPicture->freeCompClip = TRUE;
+ : REGION_TRANSLATE(pScreen, pPicture->clientClip,
+ : -(pDrawable->x + pPicture->clipOrigin.x),
+ : -(pDrawable->y + pPicture->clipOrigin.y));
+ : }
+ : } /* end of composite clip for a window */
+ : else
+ : {
+ : BoxRec pixbounds;
+ :
+ : /* XXX should we translate by drawable.x/y here ? */
+ : /* If you want pixmaps in offscreen memory, yes */
+ 1 0.0011 : pixbounds.x1 = pDrawable->x;
+ : pixbounds.y1 = pDrawable->y;
+ : pixbounds.x2 = pDrawable->x + pDrawable->width;
+ : pixbounds.y2 = pDrawable->y + pDrawable->height;
+ :
+ : if (pPicture->freeCompClip)
+ : {
+ : REGION_RESET(pScreen, pPicture->pCompositeClip, &pixbounds);
+ : }
+ : else
+ : {
+ : pPicture->freeCompClip = TRUE;
+ 3 0.0033 : pPicture->pCompositeClip = REGION_CREATE(pScreen, &pixbounds, 1);
+ : }
+ :
+ : if (pPicture->clientClipType == CT_REGION)
+ : {
+ : if(pDrawable->x || pDrawable->y) {
+ : REGION_TRANSLATE(pScreen, pPicture->clientClip,
+ : pDrawable->x + pPicture->clipOrigin.x,
+ : pDrawable->y + pPicture->clipOrigin.y);
+ : REGION_INTERSECT(pScreen, pPicture->pCompositeClip,
+ : pPicture->pCompositeClip, pPicture->clientClip);
+ : REGION_TRANSLATE(pScreen, pPicture->clientClip,
+ : -(pDrawable->x + pPicture->clipOrigin.x),
+ : -(pDrawable->y + pPicture->clipOrigin.y));
+ : } else {
+ : REGION_TRANSLATE(pScreen, pPicture->pCompositeClip,
+ : -pPicture->clipOrigin.x, -pPicture->clipOrigin.y);
+ : REGION_INTERSECT(pScreen, pPicture->pCompositeClip,
+ : pPicture->pCompositeClip, pPicture->clientClip);
+ : REGION_TRANSLATE(pScreen, pPicture->pCompositeClip,
+ : pPicture->clipOrigin.x, pPicture->clipOrigin.y);
+ : }
+ : }
+ : } /* end of composite clip for pixmap */
+ : }
+ 1 0.0011 :}
+ :
+ :int
+ :miChangePictureTransform (PicturePtr pPicture,
+ : PictTransform *transform)
+ 1 0.0011 :{ /* miChangePictureTransform total: 1 0.0011 */
+ : return Success;
+ :}
+ :
+ :int
+ :miChangePictureFilter (PicturePtr pPicture,
+ : int filter,
+ : xFixed *params,
+ : int nparams)
+ 1 0.0011 :{ /* miChangePictureFilter total: 1 0.0011 */
+ : return Success;
+ :}
+ :
+ :#define BOUND(v) (INT16) ((v) < MINSHORT ? MINSHORT : (v) > MAXSHORT ? MAXSHORT : (v))
+ :
+ :static inline pixman_bool_t
+ :miClipPictureReg (pixman_region16_t * pRegion,
+ : pixman_region16_t * pClip,
+ : int dx,
+ : int dy)
+ :{
+ : if (pixman_region_n_rects(pRegion) == 1 &&
+ : pixman_region_n_rects(pClip) == 1)
+ : {
+ : pixman_box16_t * pRbox = pixman_region_rectangles(pRegion, NULL);
+ : pixman_box16_t * pCbox = pixman_region_rectangles(pClip, NULL);
+ : int v;
+ :
+ : if (pRbox->x1 < (v = pCbox->x1 + dx))
+ : pRbox->x1 = BOUND(v);
+ : if (pRbox->x2 > (v = pCbox->x2 + dx))
+ : pRbox->x2 = BOUND(v);
+ : if (pRbox->y1 < (v = pCbox->y1 + dy))
+ : pRbox->y1 = BOUND(v);
+ : if (pRbox->y2 > (v = pCbox->y2 + dy))
+ : pRbox->y2 = BOUND(v);
+ : if (pRbox->x1 >= pRbox->x2 ||
+ : pRbox->y1 >= pRbox->y2)
+ : {
+ : pixman_region_init (pRegion);
+ : }
+ : }
+ : else if (!pixman_region_not_empty (pClip))
+ : return FALSE;
+ : else
+ : {
+ : if (dx || dy)
+ : pixman_region_translate (pRegion, -dx, -dy);
+ : if (!pixman_region_intersect (pRegion, pRegion, pClip))
+ : return FALSE;
+ : if (dx || dy)
+ : pixman_region_translate(pRegion, dx, dy);
+ : }
+ : return pixman_region_not_empty(pRegion);
+ :}
+ :
+ :static __inline Bool
+ :miClipPictureSrc (RegionPtr pRegion,
+ : PicturePtr pPicture,
+ : int dx,
+ : int dy)
+ :{
+ : /* XXX what to do with clipping from transformed pictures? */
+ : if (pPicture->transform || !pPicture->pDrawable)
+ : return TRUE;
+ : if (pPicture->repeat)
+ : {
+ : if (pPicture->clientClipType != CT_NONE)
+ : {
+ : pixman_region_translate ( pRegion,
+ : dx - pPicture->clipOrigin.x,
+ : dy - pPicture->clipOrigin.y);
+ : if (!REGION_INTERSECT (pScreen, pRegion, pRegion,
+ : (RegionPtr) pPicture->pCompositeClip)) // clientClip))
+ : return FALSE;
+ : pixman_region_translate ( pRegion,
+ : - (dx - pPicture->clipOrigin.x),
+ : - (dy - pPicture->clipOrigin.y));
+ : }
+ : return TRUE;
+ : }
+ : else
+ : {
+ : return miClipPictureReg (pRegion,
+ : pPicture->pCompositeClip,
+ : dx,
+ : dy);
+ : }
+ :}
+ :
+ :void
+ :miCompositeSourceValidate (PicturePtr pPicture,
+ : INT16 x,
+ : INT16 y,
+ : CARD16 width,
+ : CARD16 height)
+ 31 0.0338 :{ /* miCompositeSourceValidate total: 106 0.1155 */
+ 8 0.0087 : DrawablePtr pDrawable = pPicture->pDrawable;
+ : ScreenPtr pScreen;
+ :
+ 4 0.0044 : if (!pDrawable)
+ : return;
+ :
+ 11 0.0120 : pScreen = pDrawable->pScreen;
+ :
+ 18 0.0196 : if (pScreen->SourceValidate)
+ : {
+ : x -= pPicture->pDrawable->x;
+ 12 0.0131 : y -= pPicture->pDrawable->y;
+ 3 0.0033 : if (pPicture->transform)
+ : {
+ : xPoint points[4];
+ : int i;
+ : int xmin, ymin, xmax, ymax;
+ :
+ :#define VectorSet(i,_x,_y) { points[i].x = _x; points[i].y = _y; }
+ : VectorSet (0, x, y);
+ : VectorSet (1, x + width, y);
+ : VectorSet (2, x, y + height);
+ : VectorSet (3, x + width, y + height);
+ : xmin = ymin = 32767;
+ : xmax = ymax = -32737;
+ : for (i = 0; i < 4; i++)
+ : {
+ : PictVector t;
+ : t.vector[0] = IntToxFixed (points[i].x);
+ : t.vector[1] = IntToxFixed (points[i].y);
+ : t.vector[2] = xFixed1;
+ : if (PictureTransformPoint (pPicture->transform, &t))
+ : {
+ : int tx = xFixedToInt (t.vector[0]);
+ : int ty = xFixedToInt (t.vector[1]);
+ : if (tx < xmin) xmin = tx;
+ : if (tx > xmax) xmax = tx;
+ : if (ty < ymin) ymin = ty;
+ : if (ty > ymax) ymax = ty;
+ : }
+ : }
+ : x = xmin;
+ : y = ymin;
+ : width = xmax - xmin;
+ : height = ymax - ymin;
+ : }
+ 10 0.0109 : (*pScreen->SourceValidate) (pDrawable, x, y, width, height);
+ : }
+ 9 0.0098 :}
+ :
+ :/*
+ : * returns FALSE if the final region is empty. Indistinguishable from
+ : * an allocation failure, but rendering ignores those anyways.
+ : */
+ :
+ :_X_EXPORT Bool
+ :miComputeCompositeRegion (RegionPtr pRegion,
+ : PicturePtr pSrc,
+ : PicturePtr pMask,
+ : PicturePtr pDst,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : INT16 xMask,
+ : INT16 yMask,
+ : INT16 xDst,
+ : INT16 yDst,
+ : CARD16 width,
+ : CARD16 height)
+ 28 0.0305 :{ /* miComputeCompositeRegion total: 296 0.3225 */
+ :
+ : int v;
+ :
+ 2 0.0022 : pRegion->extents.x1 = xDst;
+ 9 0.0098 : v = xDst + width;
+ 10 0.0109 : pRegion->extents.x2 = BOUND(v);
+ : pRegion->extents.y1 = yDst;
+ 4 0.0044 : v = yDst + height;
+ 9 0.0098 : pRegion->extents.y2 = BOUND(v);
+ 2 0.0022 : pRegion->data = 0;
+ : /* Check for empty operation */
+ 8 0.0087 : if (pRegion->extents.x1 >= pRegion->extents.x2 ||
+ : pRegion->extents.y1 >= pRegion->extents.y2)
+ : {
+ 1 0.0011 : pixman_region_init (pRegion);
+ : return FALSE;
+ : }
+ : /* clip against dst */
+ 8 0.0087 : if (!miClipPictureReg (pRegion, pDst->pCompositeClip, 0, 0))
+ : {
+ : pixman_region_fini (pRegion);
+ : return FALSE;
+ : }
+ : if (pDst->alphaMap)
+ : {
+ : if (!miClipPictureReg (pRegion, pDst->alphaMap->pCompositeClip,
+ : -pDst->alphaOrigin.x,
+ : -pDst->alphaOrigin.y))
+ : {
+ : pixman_region_fini (pRegion);
+ : return FALSE;
+ : }
+ : }
+ : /* clip against src */
+ 10 0.0109 : if (!miClipPictureSrc (pRegion, pSrc, xDst - xSrc, yDst - ySrc))
+ : {
+ : pixman_region_fini (pRegion);
+ : return FALSE;
+ : }
+ 5 0.0054 : if (pSrc->alphaMap)
+ : {
+ : if (!miClipPictureSrc (pRegion, pSrc->alphaMap,
+ : xDst - (xSrc + pSrc->alphaOrigin.x),
+ : yDst - (ySrc + pSrc->alphaOrigin.y)))
+ : {
+ : pixman_region_fini (pRegion);
+ : return FALSE;
+ : }
+ : }
+ : /* clip against mask */
+ 5 0.0054 : if (pMask)
+ : {
+ 2 0.0022 : if (!miClipPictureSrc (pRegion, pMask, xDst - xMask, yDst - yMask))
+ : {
+ : pixman_region_fini (pRegion);
+ : return FALSE;
+ : }
+ 3 0.0033 : if (pMask->alphaMap)
+ : {
+ : if (!miClipPictureSrc (pRegion, pMask->alphaMap,
+ : xDst - (xMask + pMask->alphaOrigin.x),
+ : yDst - (yMask + pMask->alphaOrigin.y)))
+ : {
+ : pixman_region_fini (pRegion);
+ : return FALSE;
+ : }
+ : }
+ : }
+ :
+ :
+ 23 0.0251 : miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height);
+ : if (pMask)
+ 7 0.0076 : miCompositeSourceValidate (pMask, xMask, yMask, width, height);
+ :
+ : return TRUE;
+ 1 0.0011 :}
+ :
+ :void
+ :miRenderColorToPixel (PictFormatPtr format,
+ : xRenderColor *color,
+ : CARD32 *pixel)
+ :{ /* miRenderColorToPixel total: 5 0.0054 */
+ : CARD32 r, g, b, a;
+ : miIndexedPtr pIndexed;
+ :
+ 1 0.0011 : switch (format->type) {
+ : case PictTypeDirect:
+ 1 0.0011 : r = color->red >> (16 - Ones (format->direct.redMask));
+ 1 0.0011 : g = color->green >> (16 - Ones (format->direct.greenMask));
+ : b = color->blue >> (16 - Ones (format->direct.blueMask));
+ : a = color->alpha >> (16 - Ones (format->direct.alphaMask));
+ : r = r << format->direct.red;
+ : g = g << format->direct.green;
+ : b = b << format->direct.blue;
+ : a = a << format->direct.alpha;
+ 2 0.0022 : *pixel = r|g|b|a;
+ : break;
+ : case PictTypeIndexed:
+ : pIndexed = (miIndexedPtr) (format->index.devPrivate);
+ : if (pIndexed->color)
+ : {
+ : r = color->red >> 11;
+ : g = color->green >> 11;
+ : b = color->blue >> 11;
+ : *pixel = miIndexToEnt15 (pIndexed, (r << 10) | (g << 5) | b);
+ : }
+ : else
+ : {
+ : r = color->red >> 8;
+ : g = color->green >> 8;
+ : b = color->blue >> 8;
+ : *pixel = miIndexToEntY24 (pIndexed, (r << 16) | (g << 8) | b);
+ : }
+ : break;
+ : }
+ :}
+ :
+ :static CARD16
+ :miFillColor (CARD32 pixel, int bits)
+ :{
+ : while (bits < 16)
+ : {
+ : pixel |= pixel << bits;
+ : bits <<= 1;
+ : }
+ : return (CARD16) pixel;
+ :}
+ :
+ :Bool
+ :miIsSolidAlpha (PicturePtr pSrc)
+ :{
+ : ScreenPtr pScreen;
+ : char line[1];
+ :
+ : if (!pSrc->pDrawable)
+ : return FALSE;
+ :
+ : pScreen = pSrc->pDrawable->pScreen;
+ :
+ : /* Alpha-only */
+ : if (PICT_FORMAT_TYPE (pSrc->format) != PICT_TYPE_A)
+ : return FALSE;
+ : /* repeat */
+ : if (!pSrc->repeat)
+ : return FALSE;
+ : /* 1x1 */
+ : if (pSrc->pDrawable->width != 1 || pSrc->pDrawable->height != 1)
+ : return FALSE;
+ : line[0] = 1;
+ : (*pScreen->GetImage) (pSrc->pDrawable, 0, 0, 1, 1, ZPixmap, ~0L, line);
+ : switch (pSrc->pDrawable->bitsPerPixel) {
+ : case 1:
+ : return (CARD8) line[0] == 1 || (CARD8) line[0] == 0x80;
+ : case 4:
+ : return (CARD8) line[0] == 0xf || (CARD8) line[0] == 0xf0;
+ : case 8:
+ : return (CARD8) line[0] == 0xff;
+ : default:
+ : return FALSE;
+ : }
+ :}
+ :
+ :void
+ :miRenderPixelToColor (PictFormatPtr format,
+ : CARD32 pixel,
+ : xRenderColor *color)
+ :{
+ : CARD32 r, g, b, a;
+ : miIndexedPtr pIndexed;
+ :
+ : switch (format->type) {
+ : case PictTypeDirect:
+ : r = (pixel >> format->direct.red) & format->direct.redMask;
+ : g = (pixel >> format->direct.green) & format->direct.greenMask;
+ : b = (pixel >> format->direct.blue) & format->direct.blueMask;
+ : a = (pixel >> format->direct.alpha) & format->direct.alphaMask;
+ : color->red = miFillColor (r, Ones (format->direct.redMask));
+ : color->green = miFillColor (g, Ones (format->direct.greenMask));
+ : color->blue = miFillColor (b, Ones (format->direct.blueMask));
+ : color->alpha = miFillColor (a, Ones (format->direct.alphaMask));
+ : break;
+ : case PictTypeIndexed:
+ : pIndexed = (miIndexedPtr) (format->index.devPrivate);
+ : pixel = pIndexed->rgba[pixel & (MI_MAX_INDEXED-1)];
+ : r = (pixel >> 16) & 0xff;
+ : g = (pixel >> 8) & 0xff;
+ : b = (pixel ) & 0xff;
+ : color->red = miFillColor (r, 8);
+ : color->green = miFillColor (g, 8);
+ : color->blue = miFillColor (b, 8);
+ : color->alpha = 0xffff;
+ : break;
+ : }
+ :}
+ :
+ :_X_EXPORT Bool
+ :miPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
+ :{
+ : PictureScreenPtr ps;
+ :
+ : if (!PictureInit (pScreen, formats, nformats))
+ : return FALSE;
+ : ps = GetPictureScreen(pScreen);
+ : ps->CreatePicture = miCreatePicture;
+ : ps->DestroyPicture = miDestroyPicture;
+ : ps->ChangePictureClip = miChangePictureClip;
+ : ps->DestroyPictureClip = miDestroyPictureClip;
+ : ps->ChangePicture = miChangePicture;
+ : ps->ValidatePicture = miValidatePicture;
+ : ps->InitIndexed = miInitIndexed;
+ : ps->CloseIndexed = miCloseIndexed;
+ : ps->UpdateIndexed = miUpdateIndexed;
+ : ps->ChangePictureTransform = miChangePictureTransform;
+ : ps->ChangePictureFilter = miChangePictureFilter;
+ : ps->RealizeGlyph = miRealizeGlyph;
+ : ps->UnrealizeGlyph = miUnrealizeGlyph;
+ :
+ : /* MI rendering routines */
+ : ps->Composite = 0; /* requires DDX support */
+ : ps->Glyphs = miGlyphs;
+ : ps->CompositeRects = miCompositeRects;
+ : ps->Trapezoids = miTrapezoids;
+ : ps->Triangles = miTriangles;
+ : ps->TriStrip = miTriStrip;
+ : ps->TriFan = miTriFan;
+ :
+ : ps->RasterizeTrapezoid = 0; /* requires DDX support */
+ : ps->AddTraps = 0; /* requires DDX support */
+ : ps->AddTriangles = 0; /* requires DDX support */
+ :
+ : return TRUE;
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/driver/xf86-video-intel/src/i830_exa.c"
+ *
+ * 254 0.2767
+ */
+
+
+ :/**************************************************************************
+ :
+ :Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+ :All Rights Reserved.
+ :Copyright (c) 2005 Jesse Barnes <jbarnes@virtuousgeek.org>
+ : Based on code from i830_xaa.c.
+ :
+ :Permission is hereby granted, free of charge, to any person obtaining a
+ :copy of this software and associated documentation files (the
+ :"Software"), to deal in the Software without restriction, including
+ :without limitation the rights to use, copy, modify, merge, publish,
+ :distribute, sub license, and/or sell copies of the Software, and to
+ :permit persons to whom the Software is furnished to do so, subject to
+ :the following conditions:
+ :
+ :The above copyright notice and this permission notice (including the
+ :next paragraph) shall be included in all copies or substantial portions
+ :of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ :OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ :MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ :IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ :ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ :TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ :SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :**************************************************************************/
+ :
+ :#ifdef HAVE_CONFIG_H
+ :#include "config.h"
+ :#endif
+ :
+ :#include "xf86.h"
+ :#include "xaarop.h"
+ :#include "i830.h"
+ :#include "i810_reg.h"
+ :#include "i830_reg.h"
+ :#include <string.h>
+ :
+ :#ifdef I830DEBUG
+ :#define DEBUG_I830FALLBACK 1
+ :#endif
+ :
+ :#define ALWAYS_SYNC 0
+ :
+ :#ifdef DEBUG_I830FALLBACK
+ :#define I830FALLBACK(s, arg...) \
+ :do { \
+ : DPRINTF(PFX, "EXA fallback: " s "\n", ##arg); \
+ : return FALSE; \
+ :} while(0)
+ :#else
+ :#define I830FALLBACK(s, arg...) \
+ :do { \
+ : return FALSE; \
+ :} while(0)
+ :#endif
+ :
+ :const int I830CopyROP[16] =
+ :{
+ : ROP_0, /* GXclear */
+ : ROP_DSa, /* GXand */
+ : ROP_SDna, /* GXandReverse */
+ : ROP_S, /* GXcopy */
+ : ROP_DSna, /* GXandInverted */
+ : ROP_D, /* GXnoop */
+ : ROP_DSx, /* GXxor */
+ : ROP_DSo, /* GXor */
+ : ROP_DSon, /* GXnor */
+ : ROP_DSxn, /* GXequiv */
+ : ROP_Dn, /* GXinvert*/
+ : ROP_SDno, /* GXorReverse */
+ : ROP_Sn, /* GXcopyInverted */
+ : ROP_DSno, /* GXorInverted */
+ : ROP_DSan, /* GXnand */
+ : ROP_1 /* GXset */
+ :};
+ :
+ :const int I830PatternROP[16] =
+ :{
+ : ROP_0,
+ : ROP_DPa,
+ : ROP_PDna,
+ : ROP_P,
+ : ROP_DPna,
+ : ROP_D,
+ : ROP_DPx,
+ : ROP_DPo,
+ : ROP_DPon,
+ : ROP_PDxn,
+ : ROP_Dn,
+ : ROP_PDno,
+ : ROP_Pn,
+ : ROP_DPno,
+ : ROP_DPan,
+ : ROP_1
+ :};
+ :
+ :/**
+ : * I830EXASync - wait for a command to finish
+ : * @pScreen: current screen
+ : * @marker: marker command to wait for
+ : *
+ : * Wait for the command specified by @marker to finish, then return. We don't
+ : * actually do marker waits, though we might in the future. For now, just
+ : * wait for a full idle.
+ : */
+ :static void
+ :I830EXASync(ScreenPtr pScreen, int marker)
+ 4 0.0044 :{ /* I830EXASync total: 19 0.0207 */
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ :
+ 3 0.0033 : I830Sync(pScrn);
+ 12 0.0131 :}
+ :
+ :/**
+ : * I830EXAPrepareSolid - prepare for a Solid operation, if possible
+ : */
+ :static Bool
+ :I830EXAPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
+ :{ /* I830EXAPrepareSolid total: 10 0.0109 */
+ : ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+ 2 0.0022 : I830Ptr pI830 = I830PTR(pScrn);
+ : unsigned long offset, pitch;
+ :
+ 1 0.0011 : if (!EXA_PM_IS_SOLID(&pPixmap->drawable, planemask))
+ : I830FALLBACK("planemask is not solid");
+ :
+ : if (pPixmap->drawable.bitsPerPixel == 24)
+ : I830FALLBACK("solid 24bpp unsupported!\n");
+ :
+ : offset = exaGetPixmapOffset(pPixmap);
+ : pitch = exaGetPixmapPitch(pPixmap);
+ :
+ 4 0.0044 : if ( offset % pI830->EXADriverPtr->pixmapOffsetAlign != 0)
+ : I830FALLBACK("pixmap offset not aligned");
+ 1 0.0011 : if ( pitch % pI830->EXADriverPtr->pixmapPitchAlign != 0)
+ : I830FALLBACK("pixmap pitch not aligned");
+ :
+ 1 0.0011 : pI830->BR[13] = (pitch & 0xffff);
+ : switch (pPixmap->drawable.bitsPerPixel) {
+ : case 8:
+ : break;
+ : case 16:
+ : /* RGB565 */
+ : pI830->BR[13] |= (1 << 24);
+ : break;
+ : case 32:
+ : /* RGB8888 */
+ 1 0.0011 : pI830->BR[13] |= ((1 << 24) | (1 << 25));
+ : break;
+ : }
+ : pI830->BR[13] |= (I830PatternROP[alu] & 0xff) << 16 ;
+ : pI830->BR[16] = fg;
+ : return TRUE;
+ :}
+ :
+ :static void
+ :I830EXASolid(PixmapPtr pPixmap, int x1, int y1, int x2, int y2)
+ 2 0.0022 :{ /* I830EXASolid total: 38 0.0414 */
+ : ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : unsigned long offset;
+ :
+ 1 0.0011 : offset = exaGetPixmapOffset(pPixmap);
+ :
+ : {
+ 1 0.0011 : BEGIN_LP_RING(6);
+ : if (pPixmap->drawable.bitsPerPixel == 32)
+ 4 0.0044 : OUT_RING(XY_COLOR_BLT_CMD | XY_COLOR_BLT_WRITE_ALPHA
+ : | XY_COLOR_BLT_WRITE_RGB);
+ : else
+ : OUT_RING(XY_COLOR_BLT_CMD);
+ :
+ 1 0.0011 : OUT_RING(pI830->BR[13]);
+ 3 0.0033 : OUT_RING((y1 << 16) | (x1 & 0xffff));
+ : OUT_RING((y2 << 16) | (x2 & 0xffff));
+ : OUT_RING(offset);
+ : OUT_RING(pI830->BR[16]);
+ 3 0.0033 : ADVANCE_LP_RING();
+ : }
+ 23 0.0251 :}
+ :
+ :static void
+ :I830EXADoneSolid(PixmapPtr pPixmap)
+ :{
+ :#if ALWAYS_SYNC
+ : ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+ :
+ : I830Sync(pScrn);
+ :#endif
+ :}
+ :
+ :/**
+ : * TODO:
+ : * - support planemask using FULL_BLT_CMD?
+ : */
+ :static Bool
+ :I830EXAPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir,
+ : int ydir, int alu, Pixel planemask)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : if (!EXA_PM_IS_SOLID(&pSrcPixmap->drawable, planemask))
+ : I830FALLBACK("planemask is not solid");
+ :
+ : pI830->copy_src_pitch = exaGetPixmapPitch(pSrcPixmap);
+ : pI830->copy_src_off = exaGetPixmapOffset(pSrcPixmap);
+ :
+ : pI830->BR[13] = exaGetPixmapPitch(pDstPixmap);
+ : pI830->BR[13] |= I830CopyROP[alu] << 16;
+ :
+ : switch (pSrcPixmap->drawable.bitsPerPixel) {
+ : case 8:
+ : break;
+ : case 16:
+ : pI830->BR[13] |= (1 << 24);
+ : break;
+ : case 32:
+ : pI830->BR[13] |= ((1 << 25) | (1 << 24));
+ : break;
+ : }
+ : return TRUE;
+ :}
+ :
+ :static void
+ :I830EXACopy(PixmapPtr pDstPixmap, int src_x1, int src_y1, int dst_x1,
+ : int dst_y1, int w, int h)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : int dst_x2, dst_y2;
+ : unsigned int dst_off;
+ :
+ : dst_x2 = dst_x1 + w;
+ : dst_y2 = dst_y1 + h;
+ :
+ : dst_off = exaGetPixmapOffset(pDstPixmap);
+ :
+ : {
+ : BEGIN_LP_RING(8);
+ :
+ : if (pDstPixmap->drawable.bitsPerPixel == 32)
+ : OUT_RING(XY_SRC_COPY_BLT_CMD | XY_SRC_COPY_BLT_WRITE_ALPHA |
+ : XY_SRC_COPY_BLT_WRITE_RGB);
+ : else
+ : OUT_RING(XY_SRC_COPY_BLT_CMD);
+ :
+ : OUT_RING(pI830->BR[13]);
+ : OUT_RING((dst_y1 << 16) | (dst_x1 & 0xffff));
+ : OUT_RING((dst_y2 << 16) | (dst_x2 & 0xffff));
+ : OUT_RING(dst_off);
+ : OUT_RING((src_y1 << 16) | (src_x1 & 0xffff));
+ : OUT_RING(pI830->copy_src_pitch);
+ : OUT_RING(pI830->copy_src_off);
+ :
+ : ADVANCE_LP_RING();
+ : }
+ :}
+ :
+ :static void
+ :I830EXADoneCopy(PixmapPtr pDstPixmap)
+ :{
+ :#if ALWAYS_SYNC
+ : ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
+ :
+ : I830Sync(pScrn);
+ :#endif
+ :}
+ :
+ :#define xFixedToFloat(val) \
+ : ((float)xFixedToInt(val) + ((float)xFixedFrac(val) / 65536.0))
+ :
+ :/**
+ : * Returns the floating-point coordinates transformed by the given transform.
+ : *
+ : * transform may be null.
+ : */
+ :void
+ :i830_get_transformed_coordinates(int x, int y, PictTransformPtr transform,
+ : float *x_out, float *y_out)
+ 68 0.0741 :{ /* i830_get_transformed_coordinates total: 187 0.2037 */
+ 13 0.0142 : if (transform == NULL) {
+ 39 0.0425 : *x_out = x;
+ 35 0.0381 : *y_out = y;
+ : } else {
+ : PictVector v;
+ :
+ : v.vector[0] = IntToxFixed(x);
+ : v.vector[1] = IntToxFixed(y);
+ : v.vector[2] = xFixed1;
+ : PictureTransformPoint(transform, &v);
+ : *x_out = xFixedToFloat(v.vector[0]);
+ : *y_out = xFixedToFloat(v.vector[1]);
+ : }
+ 32 0.0349 :}
+ :
+ :/**
+ : * Uploads data from system memory to the framebuffer using a series of
+ : * 8x8 pattern blits.
+ : */
+ :static Bool
+ :i830_upload_to_screen(PixmapPtr pDst, int x, int y, int w, int h, char *src,
+ : int src_pitch)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : const int uts_width_max = 16, uts_height_max = 16;
+ : int cpp = pDst->drawable.bitsPerPixel / 8;
+ : int sub_x, sub_y;
+ : CARD32 br13;
+ : CARD32 offset;
+ :
+ : if (w > uts_width_max || h > uts_height_max)
+ : I830FALLBACK("too large for upload to screen (%d,%d)", w, h);
+ :
+ : offset = exaGetPixmapOffset(pDst);
+ :
+ : br13 = exaGetPixmapPitch(pDst);
+ : br13 |= ((I830PatternROP[GXcopy] & 0xff) << 16);
+ : switch (pDst->drawable.bitsPerPixel) {
+ : case 16:
+ : br13 |= 1 << 24;
+ : break;
+ : case 32:
+ : br13 |= 3 << 24;
+ : break;
+ : }
+ :
+ : for (sub_y = 0; sub_y < uts_height_max && sub_y < h; sub_y += 8) {
+ : int sub_height;
+ :
+ : if (sub_y + 8 > h)
+ : sub_height = h - sub_y;
+ : else
+ : sub_height = 8;
+ :
+ : for (sub_x = 0; sub_x < uts_width_max && sub_x < w; sub_x += 8) {
+ : int sub_width, line;
+ : char *src_line = src + sub_y * src_pitch + sub_x * cpp;
+ :
+ : if (sub_x + 8 > w)
+ : sub_width = w - sub_x;
+ : else
+ : sub_width = 8;
+ :
+ : BEGIN_LP_RING(6 + (cpp * 8 * 8 / 4));
+ :
+ : /* XXX We may need a pattern offset here for {x,y} % 8 != 0*/
+ : OUT_RING(XY_PAT_BLT_IMMEDIATE |
+ : XY_SRC_COPY_BLT_WRITE_ALPHA |
+ : XY_SRC_COPY_BLT_WRITE_RGB |
+ : (3 + cpp * 8 * 8 / 4));
+ : OUT_RING(br13);
+ : OUT_RING(((y + sub_y) << 16) | (x + sub_x));
+ : OUT_RING(((y + sub_y + sub_height) << 16) |
+ : (x + sub_x + sub_width));
+ : OUT_RING(offset);
+ :
+ : /* Write out the lines with valid data, followed by any needed
+ : * padding
+ : */
+ : for (line = 0; line < sub_height; line++) {
+ : OUT_RING_COPY(sub_width * cpp, src_line);
+ : src_line += src_pitch;
+ : if (sub_width != 8)
+ : OUT_RING_PAD((8 - sub_width) * cpp);
+ : }
+ : /* Write out any full padding lines to follow */
+ : if (sub_height != 8)
+ : OUT_RING_PAD(8 * cpp * (8 - sub_height));
+ :
+ : OUT_RING(MI_NOOP);
+ : ADVANCE_LP_RING();
+ : }
+ : }
+ :
+ : exaMarkSync(pDst->drawable.pScreen);
+ : /* exaWaitSync(pDst->drawable.pScreen); */
+ :
+ : return TRUE;
+ :}
+ :
+ :
+ :/*
+ : * TODO:
+ : * - Dual head?
+ : */
+ :Bool
+ :I830EXAInit(ScreenPtr pScreen)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : pI830->EXADriverPtr = exaDriverAlloc();
+ : if (pI830->EXADriverPtr == NULL) {
+ : pI830->noAccel = TRUE;
+ : return FALSE;
+ : }
+ : memset(pI830->EXADriverPtr, 0, sizeof(*pI830->EXADriverPtr));
+ :
+ : pI830->bufferOffset = 0;
+ : pI830->EXADriverPtr->exa_major = 2;
+ : pI830->EXADriverPtr->exa_minor = 1;
+ : pI830->EXADriverPtr->memoryBase = pI830->FbBase;
+ : pI830->EXADriverPtr->offScreenBase = pI830->exa_offscreen->offset;
+ : pI830->EXADriverPtr->memorySize = pI830->exa_offscreen->offset +
+ : pI830->exa_offscreen->size;
+ : pI830->EXADriverPtr->flags = EXA_OFFSCREEN_PIXMAPS;
+ :
+ : DPRINTF(PFX, "EXA Mem: memoryBase 0x%x, end 0x%x, offscreen base 0x%x, memorySize 0x%x\n",
+ : pI830->EXADriverPtr->memoryBase,
+ : pI830->EXADriverPtr->memoryBase + pI830->EXADriverPtr->memorySize,
+ : pI830->EXADriverPtr->offScreenBase,
+ : pI830->EXADriverPtr->memorySize);
+ :
+ :
+ : /* Limits are described in the BLT engine chapter under Graphics Data Size
+ : * Limitations, and the descriptions of SURFACE_STATE, 3DSTATE_BUFFER_INFO,
+ : * 3DSTATE_DRAWING_RECTANGLE, 3DSTATE_MAP_INFO, and 3DSTATE_MAP_INFO.
+ : *
+ : * i845 through i965 limits 2D rendering to 65536 lines and pitch of 32768.
+ : *
+ : * i965 limits 3D surface to (2*element size)-aligned offset if un-tiled.
+ : * i965 limits 3D surface to 4kB-aligned offset if tiled.
+ : * i965 limits 3D surfaces to w,h of ?,8192.
+ : * i965 limits 3D surface to pitch of 1B - 128kB.
+ : * i965 limits 3D surface pitch alignment to 1 or 2 times the element size.
+ : * i965 limits 3D surface pitch alignment to 512B if tiled.
+ : * i965 limits 3D destination drawing rect to w,h of 8192,8192.
+ : *
+ : * i915 limits 3D textures to 4B-aligned offset if un-tiled.
+ : * i915 limits 3D textures to ~4kB-aligned offset if tiled.
+ : * i915 limits 3D textures to width,height of 2048,2048.
+ : * i915 limits 3D textures to pitch of 16B - 8kB, in dwords.
+ : * i915 limits 3D destination to ~4kB-aligned offset if tiled.
+ : * i915 limits 3D destination to pitch of 16B - 8kB, in dwords, if un-tiled.
+ : * i915 limits 3D destination to pitch of 512B - 8kB, in tiles, if tiled.
+ : * i915 limits 3D destination to POT aligned pitch if tiled.
+ : * i915 limits 3D destination drawing rect to w,h of 2048,2048.
+ : *
+ : * i845 limits 3D textures to 4B-aligned offset if un-tiled.
+ : * i845 limits 3D textures to ~4kB-aligned offset if tiled.
+ : * i845 limits 3D textures to width,height of 2048,2048.
+ : * i845 limits 3D textures to pitch of 4B - 8kB, in dwords.
+ : * i845 limits 3D destination to 4B-aligned offset if un-tiled.
+ : * i845 limits 3D destination to ~4kB-aligned offset if tiled.
+ : * i845 limits 3D destination to pitch of 8B - 8kB, in dwords.
+ : * i845 limits 3D destination drawing rect to w,h of 2048,2048.
+ : *
+ : * For the tiled issues, the only tiled buffer we draw to should be
+ : * the front, which will have an appropriate pitch/offset already set up,
+ : * so EXA doesn't need to worry.
+ : */
+ : if (IS_I965G(pI830)) {
+ : pI830->EXADriverPtr->pixmapOffsetAlign = 4 * 2;
+ : pI830->EXADriverPtr->pixmapPitchAlign = 16;
+ : pI830->EXADriverPtr->maxX = 8192;
+ : pI830->EXADriverPtr->maxY = 8192;
+ : } else {
+ : pI830->EXADriverPtr->pixmapOffsetAlign = 4;
+ : pI830->EXADriverPtr->pixmapPitchAlign = 16;
+ : pI830->EXADriverPtr->maxX = 2048;
+ : pI830->EXADriverPtr->maxY = 2048;
+ : }
+ :
+ : /* Sync */
+ : pI830->EXADriverPtr->WaitMarker = I830EXASync;
+ :
+ : /* Solid fill */
+ : pI830->EXADriverPtr->PrepareSolid = I830EXAPrepareSolid;
+ : pI830->EXADriverPtr->Solid = I830EXASolid;
+ : pI830->EXADriverPtr->DoneSolid = I830EXADoneSolid;
+ :
+ : /* Copy */
+ : pI830->EXADriverPtr->PrepareCopy = I830EXAPrepareCopy;
+ : pI830->EXADriverPtr->Copy = I830EXACopy;
+ : pI830->EXADriverPtr->DoneCopy = I830EXADoneCopy;
+ :
+ : /* Composite */
+ : if (!IS_I9XX(pI830)) {
+ : pI830->EXADriverPtr->CheckComposite = i830_check_composite;
+ : pI830->EXADriverPtr->PrepareComposite = i830_prepare_composite;
+ : pI830->EXADriverPtr->Composite = i830_composite;
+ : pI830->EXADriverPtr->DoneComposite = i830_done_composite;
+ : } else if (IS_I915G(pI830) || IS_I915GM(pI830) ||
+ : IS_I945G(pI830) || IS_I945GM(pI830) || IS_G33CLASS(pI830))
+ : {
+ : pI830->EXADriverPtr->CheckComposite = i915_check_composite;
+ : pI830->EXADriverPtr->PrepareComposite = i915_prepare_composite;
+ : pI830->EXADriverPtr->Composite = i830_composite;
+ : pI830->EXADriverPtr->DoneComposite = i830_done_composite;
+ : } else {
+ : pI830->EXADriverPtr->CheckComposite = i965_check_composite;
+ : pI830->EXADriverPtr->PrepareComposite = i965_prepare_composite;
+ : pI830->EXADriverPtr->Composite = i965_composite;
+ : pI830->EXADriverPtr->DoneComposite = i830_done_composite;
+ : }
+ :
+ : /* UploadToScreen/DownloadFromScreen */
+ : if (0)
+ : pI830->EXADriverPtr->UploadToScreen = i830_upload_to_screen;
+ :
+ : if(!exaDriverInit(pScreen, pI830->EXADriverPtr)) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ : "EXA initialization failed; trying older version\n");
+ : pI830->EXADriverPtr->exa_minor = 0;
+ : if(!exaDriverInit(pScreen, pI830->EXADriverPtr)) {
+ : xfree(pI830->EXADriverPtr);
+ : pI830->noAccel = TRUE;
+ : return FALSE;
+ : }
+ : }
+ :
+ : I830SelectBuffer(pScrn, I830_SELECT_FRONT);
+ :
+ : return TRUE;
+ :}
+ :
+ :#ifdef XF86DRI
+ :
+ :#ifndef ExaOffscreenMarkUsed
+ :extern void ExaOffscreenMarkUsed(PixmapPtr);
+ :#endif
+ :
+ :unsigned long long
+ :I830TexOffsetStart(PixmapPtr pPix)
+ :{
+ : exaMoveInPixmap(pPix);
+ : ExaOffscreenMarkUsed(pPix);
+ :
+ : return exaGetPixmapOffset(pPix);
+ :}
+ :#endif
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/miext/damage/damage.c"
+ *
+ * 191 0.2081
+ */
+
+
+ :/*
+ : * Copyright © 2003 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <stdlib.h>
+ :
+ :#include <X11/X.h>
+ :#include "scrnintstr.h"
+ :#include "windowstr.h"
+ :#include <X11/fonts/font.h>
+ :#include "dixfontstr.h"
+ :#include <X11/fonts/fontstruct.h>
+ :#include "mi.h"
+ :#include "regionstr.h"
+ :#include "globals.h"
+ :#include "gcstruct.h"
+ :#include "damage.h"
+ :#include "damagestr.h"
+ :#ifdef COMPOSITE
+ :#include "cw.h"
+ :#endif
+ :
+ :#define wrap(priv, real, mem, func) {\
+ : priv->mem = real->mem; \
+ : real->mem = func; \
+ :}
+ :
+ :#define unwrap(priv, real, mem) {\
+ : real->mem = priv->mem; \
+ :}
+ :
+ :#define BOX_SAME(a,b) \
+ : ((a)->x1 == (b)->x1 && \
+ : (a)->y1 == (b)->y1 && \
+ : (a)->x2 == (b)->x2 && \
+ : (a)->y2 == (b)->y2)
+ :
+ :#define DAMAGE_VALIDATE_ENABLE 0
+ :#define DAMAGE_DEBUG_ENABLE 0
+ :#if DAMAGE_DEBUG_ENABLE
+ :#define DAMAGE_DEBUG(x) ErrorF x
+ :#else
+ :#define DAMAGE_DEBUG(x)
+ :#endif
+ :
+ :#define getPixmapDamageRef(pPixmap) \
+ : ((DamagePtr *) &(pPixmap->devPrivates[damagePixPrivateIndex].ptr))
+ :
+ :#define pixmapDamage(pPixmap) damagePixPriv(pPixmap)
+ :
+ :static int damageScrPrivateIndex;
+ :static int damagePixPrivateIndex;
+ :static int damageGCPrivateIndex;
+ :static int damageWinPrivateIndex;
+ :static int damageGeneration;
+ :
+ :static DamagePtr *
+ :getDrawableDamageRef (DrawablePtr pDrawable)
+ 2 0.0022 :{ /* getDrawableDamageRef total: 6 0.0065 */
+ : PixmapPtr pPixmap;
+ :
+ : if (pDrawable->type == DRAWABLE_WINDOW)
+ : {
+ : ScreenPtr pScreen = pDrawable->pScreen;
+ :
+ : pPixmap = 0;
+ : if (pScreen->GetWindowPixmap
+ :#ifdef ROOTLESS_WORKAROUND
+ : && ((WindowPtr)pDrawable)->viewable
+ :#endif
+ : )
+ : pPixmap = (*pScreen->GetWindowPixmap) ((WindowPtr)pDrawable);
+ :
+ : if (!pPixmap)
+ : {
+ : damageScrPriv(pScreen);
+ :
+ : return &pScrPriv->pScreenDamage;
+ : }
+ : }
+ : else
+ : pPixmap = (PixmapPtr) pDrawable;
+ : return getPixmapDamageRef (pPixmap);
+ 4 0.0044 :}
+ :
+ :#define getDrawableDamage(pDrawable) (*getDrawableDamageRef (pDrawable))
+ :#define getWindowDamage(pWin) getDrawableDamage(&(pWin)->drawable)
+ :
+ :#define drawableDamage(pDrawable) \
+ : DamagePtr pDamage = getDrawableDamage(pDrawable)
+ :
+ :#define windowDamage(pWin) drawableDamage(&(pWin)->drawable)
+ :
+ :#define winDamageRef(pWindow) \
+ : DamagePtr *pPrev = (DamagePtr *) \
+ : &(pWindow->devPrivates[damageWinPrivateIndex].ptr)
+ :
+ :static void
+ :DamageReportDamage (DamagePtr pDamage, RegionPtr pDamageRegion)
+ 1 0.0011 :{ /* DamageReportDamage total: 4 0.0044 */
+ : BoxRec tmpBox;
+ : RegionRec tmpRegion;
+ : Bool was_empty;
+ :
+ : switch (pDamage->damageLevel) {
+ : case DamageReportRawRegion:
+ : (*pDamage->damageReport) (pDamage, pDamageRegion, pDamage->closure);
+ : break;
+ : case DamageReportDeltaRegion:
+ : REGION_NULL (pScreen, &tmpRegion);
+ : REGION_SUBTRACT (pScreen, &tmpRegion, pDamageRegion, &pDamage->damage);
+ : if (REGION_NOTEMPTY (pScreen, &tmpRegion)) {
+ : REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
+ : pDamageRegion);
+ : (*pDamage->damageReport) (pDamage, &tmpRegion, pDamage->closure);
+ : }
+ : REGION_UNINIT(pScreen, &tmpRegion);
+ : break;
+ : case DamageReportBoundingBox:
+ : tmpBox = *REGION_EXTENTS (pScreen, &pDamage->damage);
+ : REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
+ : pDamageRegion);
+ : if (!BOX_SAME (&tmpBox, REGION_EXTENTS (pScreen, &pDamage->damage))) {
+ : (*pDamage->damageReport) (pDamage, &pDamage->damage,
+ : pDamage->closure);
+ : }
+ : break;
+ : case DamageReportNonEmpty:
+ : was_empty = !REGION_NOTEMPTY(pScreen, &pDamage->damage);
+ 1 0.0011 : REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
+ : pDamageRegion);
+ : if (was_empty && REGION_NOTEMPTY(pScreen, &pDamage->damage)) {
+ : (*pDamage->damageReport) (pDamage, &pDamage->damage,
+ : pDamage->closure);
+ : }
+ : break;
+ : case DamageReportNone:
+ : REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
+ : pDamageRegion);
+ : break;
+ : }
+ 2 0.0022 :}
+ :
+ :#if DAMAGE_DEBUG_ENABLE
+ :static void
+ :_damageDamageRegion (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip, int subWindowMode, const char *where)
+ :#define damageDamageRegion(d,r,c,m) _damageDamageRegion(d,r,c,m,__FUNCTION__)
+ :#else
+ :static void
+ :damageDamageRegion (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip,
+ : int subWindowMode)
+ :#endif
+ 1 0.0011 :{ /* damageDamageRegion total: 21 0.0229 */
+ : ScreenPtr pScreen = pDrawable->pScreen;
+ : damageScrPriv(pScreen);
+ : drawableDamage(pDrawable);
+ : DamagePtr pNext;
+ : RegionRec clippedRec;
+ : RegionPtr pDamageRegion;
+ : RegionRec pixClip;
+ : int draw_x, draw_y;
+ :#ifdef COMPOSITE
+ : int screen_x = 0, screen_y = 0;
+ :#endif
+ :
+ : /* short circuit for empty regions */
+ 1 0.0011 : if (!REGION_NOTEMPTY(pScreen, pRegion))
+ : return;
+ :
+ :#ifdef COMPOSITE
+ : /*
+ : * When drawing to a pixmap which is storing window contents,
+ : * the region presented is in pixmap relative coordinates which
+ : * need to be converted to screen relative coordinates
+ : */
+ : if (pDrawable->type != DRAWABLE_WINDOW)
+ : {
+ : screen_x = ((PixmapPtr) pDrawable)->screen_x - pDrawable->x;
+ 2 0.0022 : screen_y = ((PixmapPtr) pDrawable)->screen_y - pDrawable->y;
+ : }
+ 2 0.0022 : if (screen_x || screen_y)
+ : REGION_TRANSLATE (pScreen, pRegion, screen_x, screen_y);
+ :#endif
+ :
+ : if (pDrawable->type == DRAWABLE_WINDOW &&
+ : ((WindowPtr)(pDrawable))->backingStore == NotUseful)
+ : {
+ : if (subWindowMode == ClipByChildren)
+ : {
+ : REGION_INTERSECT(pScreen, pRegion, pRegion,
+ : &((WindowPtr)(pDrawable))->clipList);
+ : }
+ : else if (subWindowMode == IncludeInferiors)
+ : {
+ : RegionPtr pTempRegion =
+ : NotClippedByChildren((WindowPtr)(pDrawable));
+ : REGION_INTERSECT(pScreen, pRegion, pRegion, pTempRegion);
+ : REGION_DESTROY(pScreen, pTempRegion);
+ : }
+ : /* If subWindowMode is set to an invalid value, don't perform
+ : * any drawable-based clipping. */
+ : }
+ :
+ :
+ 2 0.0022 : REGION_NULL (pScreen, &clippedRec);
+ 1 0.0011 : for (; pDamage; pDamage = pNext)
+ : {
+ 1 0.0011 : pNext = pDamage->pNext;
+ : /*
+ : * Check for internal damage and don't send events
+ : */
+ 1 0.0011 : if (pScrPriv->internalLevel > 0 && !pDamage->isInternal)
+ : {
+ : DAMAGE_DEBUG (("non internal damage, skipping at %d\n",
+ : pScrPriv->internalLevel));
+ : continue;
+ : }
+ : /*
+ : * Check for unrealized windows
+ : */
+ 1 0.0011 : if (pDamage->pDrawable->type == DRAWABLE_WINDOW &&
+ : !((WindowPtr) (pDamage->pDrawable))->realized)
+ : {
+ :#if 0
+ : DAMAGE_DEBUG (("damage while window unrealized\n"));
+ :#endif
+ : continue;
+ : }
+ :
+ 1 0.0011 : draw_x = pDamage->pDrawable->x;
+ : draw_y = pDamage->pDrawable->y;
+ :#ifdef COMPOSITE
+ : /*
+ : * Need to move everyone to screen coordinates
+ : * XXX what about off-screen pixmaps with non-zero x/y?
+ : */
+ : if (pDamage->pDrawable->type != DRAWABLE_WINDOW)
+ : {
+ : draw_x += ((PixmapPtr) pDamage->pDrawable)->screen_x;
+ : draw_y += ((PixmapPtr) pDamage->pDrawable)->screen_y;
+ : }
+ :#endif
+ :
+ : /*
+ : * Clip against border or pixmap bounds
+ : */
+ :
+ : pDamageRegion = pRegion;
+ : if (clip || pDamage->pDrawable != pDrawable)
+ : {
+ : pDamageRegion = &clippedRec;
+ : if (pDamage->pDrawable->type == DRAWABLE_WINDOW) {
+ : REGION_INTERSECT (pScreen, pDamageRegion, pRegion,
+ : &((WindowPtr)(pDamage->pDrawable))->borderClip);
+ : } else {
+ : BoxRec box;
+ : box.x1 = draw_x;
+ : box.y1 = draw_y;
+ : box.x2 = draw_x + pDamage->pDrawable->width;
+ : box.y2 = draw_y + pDamage->pDrawable->height;
+ 1 0.0011 : REGION_INIT(pScreen, &pixClip, &box, 1);
+ : REGION_INTERSECT (pScreen, pDamageRegion, pRegion, &pixClip);
+ 2 0.0022 : REGION_UNINIT(pScreen, &pixClip);
+ : }
+ : /*
+ : * Short circuit empty results
+ : */
+ : if (!REGION_NOTEMPTY(pScreen, pDamageRegion))
+ : continue;
+ : }
+ :
+ : DAMAGE_DEBUG (("%s %d x %d +%d +%d (target 0x%lx monitor 0x%lx)\n",
+ : where,
+ : pDamageRegion->extents.x2 - pDamageRegion->extents.x1,
+ : pDamageRegion->extents.y2 - pDamageRegion->extents.y1,
+ : pDamageRegion->extents.x1, pDamageRegion->extents.y1,
+ : pDrawable->id, pDamage->pDrawable->id));
+ :
+ : /*
+ : * Move region to target coordinate space
+ : */
+ : if (draw_x || draw_y)
+ : REGION_TRANSLATE (pScreen, pDamageRegion, -draw_x, -draw_y);
+ :
+ : /* If the damage rec has been flagged to report damage after the op has
+ : * completed, then union it into the delayed damage region, which will
+ : * be used for reporting after calling down, and skip the reporting
+ : */
+ 1 0.0011 : if (!pDamage->reportAfter) {
+ : DamageReportDamage (pDamage, pDamageRegion);
+ : } else {
+ 1 0.0011 : REGION_UNION(pScreen, &pDamage->pendingDamage,
+ : &pDamage->pendingDamage, pDamageRegion);
+ : }
+ :
+ : /*
+ : * translate original region back
+ : */
+ 1 0.0011 : if (pDamageRegion == pRegion && (draw_x || draw_y))
+ : REGION_TRANSLATE (pScreen, pDamageRegion, draw_x, draw_y);
+ : }
+ :#ifdef COMPOSITE
+ : if (screen_x || screen_y)
+ : REGION_TRANSLATE (pScreen, pRegion, -screen_x, -screen_y);
+ :#endif
+ :
+ : REGION_UNINIT (pScreen, &clippedRec);
+ 2 0.0022 :}
+ :
+ :static void
+ :damageReportPostOp (DrawablePtr pDrawable)
+ :{ /* damageReportPostOp total: 3 0.0033 */
+ : drawableDamage(pDrawable);
+ :
+ : for (; pDamage != NULL; pDamage = pDamage->pNext)
+ : {
+ 2 0.0022 : if (pDamage->reportAfter) {
+ : DamageReportDamage (pDamage, &pDamage->pendingDamage);
+ 1 0.0011 : REGION_EMPTY (pScreen, &pDamage->pendingDamage);
+ : }
+ : }
+ :
+ :}
+ :
+ :#if DAMAGE_DEBUG_ENABLE
+ :#define damageDamageBox(d,b,m) _damageDamageBox(d,b,m,__FUNCTION__)
+ :static void
+ :_damageDamageBox (DrawablePtr pDrawable, BoxPtr pBox, int subWindowMode, const char *where)
+ :#else
+ :static void
+ :damageDamageBox (DrawablePtr pDrawable, BoxPtr pBox, int subWindowMode)
+ :#endif
+ 2 0.0022 :{ /* damageDamageBox total: 3 0.0033 */
+ : RegionRec region;
+ :
+ : REGION_INIT (pDrawable->pScreen, ®ion, pBox, 1);
+ :#if DAMAGE_DEBUG_ENABLE
+ : _damageDamageRegion (pDrawable, ®ion, TRUE, subWindowMode, where);
+ :#else
+ 1 0.0011 : damageDamageRegion (pDrawable, ®ion, TRUE, subWindowMode);
+ :#endif
+ : REGION_UNINIT (pDrawable->pScreen, ®ion);
+ :}
+ :
+ :static void damageValidateGC(GCPtr, unsigned long, DrawablePtr);
+ :static void damageChangeGC(GCPtr, unsigned long);
+ :static void damageCopyGC(GCPtr, unsigned long, GCPtr);
+ :static void damageDestroyGC(GCPtr);
+ :static void damageChangeClip(GCPtr, int, pointer, int);
+ :static void damageDestroyClip(GCPtr);
+ :static void damageCopyClip(GCPtr, GCPtr);
+ :
+ :static GCFuncs damageGCFuncs = {
+ : damageValidateGC, damageChangeGC, damageCopyGC, damageDestroyGC,
+ : damageChangeClip, damageDestroyClip, damageCopyClip
+ :};
+ :
+ :static GCOps damageGCOps;
+ :
+ :static Bool
+ :damageCreateGC(GCPtr pGC)
+ :{
+ : ScreenPtr pScreen = pGC->pScreen;
+ : damageScrPriv(pScreen);
+ : damageGCPriv(pGC);
+ : Bool ret;
+ :
+ : pGC->pCompositeClip = 0;
+ : unwrap (pScrPriv, pScreen, CreateGC);
+ : if((ret = (*pScreen->CreateGC) (pGC))) {
+ : pGCPriv->ops = NULL;
+ : pGCPriv->funcs = pGC->funcs;
+ : pGC->funcs = &damageGCFuncs;
+ : }
+ : wrap (pScrPriv, pScreen, CreateGC, damageCreateGC);
+ :
+ : return ret;
+ :}
+ :
+ :#ifdef NOTUSED
+ :static void
+ :damageWrapGC (GCPtr pGC)
+ :{
+ : damageGCPriv(pGC);
+ :
+ : pGCPriv->ops = NULL;
+ : pGCPriv->funcs = pGC->funcs;
+ : pGC->funcs = &damageGCFuncs;
+ :}
+ :
+ :static void
+ :damageUnwrapGC (GCPtr pGC)
+ :{
+ : damageGCPriv(pGC);
+ :
+ : pGC->funcs = pGCPriv->funcs;
+ : if (pGCPriv->ops)
+ : pGC->ops = pGCPriv->ops;
+ :}
+ :#endif
+ :
+ :#define DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable) \
+ : damageGCPriv(pGC); \
+ : GCFuncs *oldFuncs = pGC->funcs; \
+ : unwrap(pGCPriv, pGC, funcs); \
+ : unwrap(pGCPriv, pGC, ops); \
+ :
+ :#define DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable) \
+ : wrap(pGCPriv, pGC, funcs, oldFuncs); \
+ : wrap(pGCPriv, pGC, ops, &damageGCOps)
+ :
+ :#define DAMAGE_GC_FUNC_PROLOGUE(pGC) \
+ : damageGCPriv(pGC); \
+ : unwrap(pGCPriv, pGC, funcs); \
+ : if (pGCPriv->ops) unwrap(pGCPriv, pGC, ops)
+ :
+ :#define DAMAGE_GC_FUNC_EPILOGUE(pGC) \
+ : wrap(pGCPriv, pGC, funcs, &damageGCFuncs); \
+ : if (pGCPriv->ops) wrap(pGCPriv, pGC, ops, &damageGCOps)
+ :
+ :static void
+ :damageValidateGC(GCPtr pGC,
+ : unsigned long changes,
+ : DrawablePtr pDrawable)
+ 2 0.0022 :{ /* damageValidateGC total: 7 0.0076 */
+ 1 0.0011 : DAMAGE_GC_FUNC_PROLOGUE (pGC);
+ 1 0.0011 : (*pGC->funcs->ValidateGC)(pGC, changes, pDrawable);
+ : pGCPriv->ops = pGC->ops; /* just so it's not NULL */
+ 3 0.0033 : DAMAGE_GC_FUNC_EPILOGUE (pGC);
+ :}
+ :
+ :static void
+ :damageDestroyGC(GCPtr pGC)
+ :{
+ : DAMAGE_GC_FUNC_PROLOGUE (pGC);
+ : (*pGC->funcs->DestroyGC)(pGC);
+ : DAMAGE_GC_FUNC_EPILOGUE (pGC);
+ :}
+ :
+ :static void
+ :damageChangeGC (GCPtr pGC,
+ : unsigned long mask)
+ 2 0.0022 :{ /* damageChangeGC total: 9 0.0098 */
+ 4 0.0044 : DAMAGE_GC_FUNC_PROLOGUE (pGC);
+ 1 0.0011 : (*pGC->funcs->ChangeGC) (pGC, mask);
+ 2 0.0022 : DAMAGE_GC_FUNC_EPILOGUE (pGC);
+ :}
+ :
+ :static void
+ :damageCopyGC (GCPtr pGCSrc,
+ : unsigned long mask,
+ : GCPtr pGCDst)
+ :{
+ : DAMAGE_GC_FUNC_PROLOGUE (pGCDst);
+ : (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
+ : DAMAGE_GC_FUNC_EPILOGUE (pGCDst);
+ :}
+ :
+ :static void
+ :damageChangeClip (GCPtr pGC,
+ : int type,
+ : pointer pvalue,
+ : int nrects)
+ 1 0.0011 :{ /* damageChangeClip total: 1 0.0011 */
+ : DAMAGE_GC_FUNC_PROLOGUE (pGC);
+ : (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
+ : DAMAGE_GC_FUNC_EPILOGUE (pGC);
+ :}
+ :
+ :static void
+ :damageCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
+ :{
+ : DAMAGE_GC_FUNC_PROLOGUE (pgcDst);
+ : (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
+ : DAMAGE_GC_FUNC_EPILOGUE (pgcDst);
+ :}
+ :
+ :static void
+ :damageDestroyClip(GCPtr pGC)
+ :{
+ : DAMAGE_GC_FUNC_PROLOGUE (pGC);
+ : (* pGC->funcs->DestroyClip)(pGC);
+ : DAMAGE_GC_FUNC_EPILOGUE (pGC);
+ :}
+ :
+ :#define TRIM_BOX(box, pGC) if (pGC->pCompositeClip) { \
+ : BoxPtr extents = &pGC->pCompositeClip->extents;\
+ : if(box.x1 < extents->x1) box.x1 = extents->x1; \
+ : if(box.x2 > extents->x2) box.x2 = extents->x2; \
+ : if(box.y1 < extents->y1) box.y1 = extents->y1; \
+ : if(box.y2 > extents->y2) box.y2 = extents->y2; \
+ : }
+ :
+ :#define TRANSLATE_BOX(box, pDrawable) { \
+ : box.x1 += pDrawable->x; \
+ : box.x2 += pDrawable->x; \
+ : box.y1 += pDrawable->y; \
+ : box.y2 += pDrawable->y; \
+ : }
+ :
+ :#define TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC) { \
+ : TRANSLATE_BOX(box, pDrawable); \
+ : TRIM_BOX(box, pGC); \
+ : }
+ :
+ :#define BOX_NOT_EMPTY(box) \
+ : (((box.x2 - box.x1) > 0) && ((box.y2 - box.y1) > 0))
+ :
+ :#define checkGCDamage(d,g) (getDrawableDamage(d) && \
+ : (!g->pCompositeClip ||\
+ : REGION_NOTEMPTY(d->pScreen, \
+ : g->pCompositeClip)))
+ :
+ :#ifdef RENDER
+ :
+ :#define TRIM_PICTURE_BOX(box, pDst) { \
+ : BoxPtr extents = &pDst->pCompositeClip->extents;\
+ : if(box.x1 < extents->x1) box.x1 = extents->x1; \
+ : if(box.x2 > extents->x2) box.x2 = extents->x2; \
+ : if(box.y1 < extents->y1) box.y1 = extents->y1; \
+ : if(box.y2 > extents->y2) box.y2 = extents->y2; \
+ : }
+ :
+ :#define checkPictureDamage(p) (getDrawableDamage(p->pDrawable) && \
+ : REGION_NOTEMPTY(pScreen, p->pCompositeClip))
+ :
+ :static void
+ :damageComposite (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pMask,
+ : PicturePtr pDst,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : INT16 xMask,
+ : INT16 yMask,
+ : INT16 xDst,
+ : INT16 yDst,
+ : CARD16 width,
+ : CARD16 height)
+ 1 0.0011 :{ /* damageComposite total: 6 0.0065 */
+ : ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : damageScrPriv(pScreen);
+ :
+ 1 0.0011 : if (checkPictureDamage (pDst))
+ : {
+ : BoxRec box;
+ :
+ : box.x1 = xDst + pDst->pDrawable->x;
+ : box.y1 = yDst + pDst->pDrawable->y;
+ : box.x2 = box.x1 + width;
+ : box.y2 = box.y1 + height;
+ : TRIM_PICTURE_BOX(box, pDst);
+ : if (BOX_NOT_EMPTY(box))
+ 1 0.0011 : damageDamageBox (pDst->pDrawable, &box, pDst->subWindowMode);
+ : }
+ : unwrap (pScrPriv, ps, Composite);
+ : (*ps->Composite) (op,
+ : pSrc,
+ : pMask,
+ : pDst,
+ : xSrc,
+ : ySrc,
+ : xMask,
+ : yMask,
+ : xDst,
+ : yDst,
+ : width,
+ : height);
+ 3 0.0033 : damageReportPostOp (pDst->pDrawable);
+ : wrap (pScrPriv, ps, Composite, damageComposite);
+ :}
+ :
+ :static void
+ :damageGlyphs (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pDst,
+ : PictFormatPtr maskFormat,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : int nlist,
+ : GlyphListPtr list,
+ : GlyphPtr *glyphs)
+ :{ /* damageGlyphs total: 61 0.0665 */
+ : ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : damageScrPriv(pScreen);
+ :
+ : if (checkPictureDamage (pDst))
+ : {
+ : int nlistTmp = nlist;
+ : GlyphListPtr listTmp = list;
+ : GlyphPtr *glyphsTmp = glyphs;
+ : int x, y;
+ : int n;
+ : GlyphPtr glyph;
+ : BoxRec box;
+ : int x1, y1, x2, y2;
+ :
+ : box.x1 = 32767;
+ : box.y1 = 32767;
+ : box.x2 = -32767;
+ : box.y2 = -32767;
+ : x = pDst->pDrawable->x;
+ : y = pDst->pDrawable->y;
+ 1 0.0011 : while (nlistTmp--)
+ : {
+ 1 0.0011 : x += listTmp->xOff;
+ : y += listTmp->yOff;
+ : n = listTmp->len;
+ 1 0.0011 : while (n--)
+ : {
+ 2 0.0022 : glyph = *glyphsTmp++;
+ 31 0.0338 : x1 = x - glyph->info.x;
+ 3 0.0033 : y1 = y - glyph->info.y;
+ 1 0.0011 : x2 = x1 + glyph->info.width;
+ 1 0.0011 : y2 = y1 + glyph->info.height;
+ : if (x1 < box.x1)
+ : box.x1 = x1;
+ 1 0.0011 : if (y1 < box.y1)
+ : box.y1 = y1;
+ 5 0.0054 : if (x2 > box.x2)
+ 2 0.0022 : box.x2 = x2;
+ 2 0.0022 : if (y2 > box.y2)
+ 1 0.0011 : box.y2 = y2;
+ 2 0.0022 : x += glyph->info.xOff;
+ 2 0.0022 : y += glyph->info.yOff;
+ : }
+ : listTmp++;
+ : }
+ 1 0.0011 : TRIM_PICTURE_BOX (box, pDst);
+ : if (BOX_NOT_EMPTY(box))
+ 1 0.0011 : damageDamageBox (pDst->pDrawable, &box, pDst->subWindowMode);
+ : }
+ 1 0.0011 : unwrap (pScrPriv, ps, Glyphs);
+ 1 0.0011 : (*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
+ : damageReportPostOp (pDst->pDrawable);
+ : wrap (pScrPriv, ps, Glyphs, damageGlyphs);
+ 1 0.0011 :}
+ :#endif
+ :
+ :/**********************************************************/
+ :
+ :
+ :static void
+ :damageFillSpans(DrawablePtr pDrawable,
+ : GC *pGC,
+ : int npt,
+ : DDXPointPtr ppt,
+ : int *pwidth,
+ : int fSorted)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (npt && checkGCDamage (pDrawable, pGC))
+ : {
+ : int nptTmp = npt;
+ : DDXPointPtr pptTmp = ppt;
+ : int *pwidthTmp = pwidth;
+ : BoxRec box;
+ :
+ : box.x1 = pptTmp->x;
+ : box.x2 = box.x1 + *pwidthTmp;
+ : box.y2 = box.y1 = pptTmp->y;
+ :
+ : while(--nptTmp)
+ : {
+ : pptTmp++;
+ : pwidthTmp++;
+ : if(box.x1 > pptTmp->x) box.x1 = pptTmp->x;
+ : if(box.x2 < (pptTmp->x + *pwidthTmp))
+ : box.x2 = pptTmp->x + *pwidthTmp;
+ : if(box.y1 > pptTmp->y) box.y1 = pptTmp->y;
+ : else if(box.y2 < pptTmp->y) box.y2 = pptTmp->y;
+ : }
+ :
+ : box.y2++;
+ :
+ : if(!pGC->miTranslate) {
+ : TRANSLATE_BOX(box, pDrawable);
+ : }
+ : TRIM_BOX(box, pGC);
+ :
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ :
+ : (*pGC->ops->FillSpans)(pDrawable, pGC, npt, ppt, pwidth, fSorted);
+ :
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damageSetSpans(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : char *pcharsrc,
+ : DDXPointPtr ppt,
+ : int *pwidth,
+ : int npt,
+ : int fSorted)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (npt && checkGCDamage (pDrawable, pGC))
+ : {
+ : DDXPointPtr pptTmp = ppt;
+ : int *pwidthTmp = pwidth;
+ : int nptTmp = npt;
+ : BoxRec box;
+ :
+ : box.x1 = pptTmp->x;
+ : box.x2 = box.x1 + *pwidthTmp;
+ : box.y2 = box.y1 = pptTmp->y;
+ :
+ : while(--nptTmp)
+ : {
+ : pptTmp++;
+ : pwidthTmp++;
+ : if(box.x1 > pptTmp->x) box.x1 = pptTmp->x;
+ : if(box.x2 < (pptTmp->x + *pwidthTmp))
+ : box.x2 = pptTmp->x + *pwidthTmp;
+ : if(box.y1 > pptTmp->y) box.y1 = pptTmp->y;
+ : else if(box.y2 < pptTmp->y) box.y2 = pptTmp->y;
+ : }
+ :
+ : box.y2++;
+ :
+ : if(!pGC->miTranslate) {
+ : TRANSLATE_BOX(box, pDrawable);
+ : }
+ : TRIM_BOX(box, pGC);
+ :
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ : (*pGC->ops->SetSpans)(pDrawable, pGC, pcharsrc, ppt, pwidth, npt, fSorted);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damagePutImage(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int depth,
+ : int x,
+ : int y,
+ : int w,
+ : int h,
+ : int leftPad,
+ : int format,
+ : char *pImage)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ : if (checkGCDamage (pDrawable, pGC))
+ : {
+ : BoxRec box;
+ :
+ : box.x1 = x + pDrawable->x;
+ : box.x2 = box.x1 + w;
+ : box.y1 = y + pDrawable->y;
+ : box.y2 = box.y1 + h;
+ :
+ : TRIM_BOX(box, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ : (*pGC->ops->PutImage)(pDrawable, pGC, depth, x, y, w, h,
+ : leftPad, format, pImage);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static RegionPtr
+ :damageCopyArea(DrawablePtr pSrc,
+ : DrawablePtr pDst,
+ : GC *pGC,
+ : int srcx,
+ : int srcy,
+ : int width,
+ : int height,
+ : int dstx,
+ : int dsty)
+ :{
+ : RegionPtr ret;
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDst);
+ :
+ : /* The driver will only call SourceValidate() when pSrc != pDst,
+ : * but the software sprite (misprite.c) always need to know when a
+ : * drawable is copied so it can remove the sprite. See #1030. */
+ : if ((pSrc == pDst) && pSrc->pScreen->SourceValidate &&
+ : pSrc->type == DRAWABLE_WINDOW &&
+ : ((WindowPtr)pSrc)->viewable)
+ : {
+ : (*pSrc->pScreen->SourceValidate) (pSrc, srcx, srcy, width, height);
+ : }
+ :
+ : if (checkGCDamage (pDst, pGC))
+ : {
+ : BoxRec box;
+ :
+ : box.x1 = dstx + pDst->x;
+ : box.x2 = box.x1 + width;
+ : box.y1 = dsty + pDst->y;
+ : box.y2 = box.y1 + height;
+ :
+ : TRIM_BOX(box, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDst, &box, pGC->subWindowMode);
+ : }
+ :
+ : ret = (*pGC->ops->CopyArea)(pSrc, pDst,
+ : pGC, srcx, srcy, width, height, dstx, dsty);
+ : damageReportPostOp (pDst);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
+ : return ret;
+ :}
+ :
+ :static RegionPtr
+ :damageCopyPlane(DrawablePtr pSrc,
+ : DrawablePtr pDst,
+ : GCPtr pGC,
+ : int srcx,
+ : int srcy,
+ : int width,
+ : int height,
+ : int dstx,
+ : int dsty,
+ : unsigned long bitPlane)
+ :{
+ : RegionPtr ret;
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDst);
+ :
+ : /* The driver will only call SourceValidate() when pSrc != pDst,
+ : * but the software sprite (misprite.c) always need to know when a
+ : * drawable is copied so it can remove the sprite. See #1030. */
+ : if ((pSrc == pDst) && pSrc->pScreen->SourceValidate &&
+ : pSrc->type == DRAWABLE_WINDOW &&
+ : ((WindowPtr)pSrc)->viewable)
+ : {
+ : (*pSrc->pScreen->SourceValidate) (pSrc, srcx, srcy, width, height);
+ : }
+ :
+ : if (checkGCDamage (pDst, pGC))
+ : {
+ : BoxRec box;
+ :
+ : box.x1 = dstx + pDst->x;
+ : box.x2 = box.x1 + width;
+ : box.y1 = dsty + pDst->y;
+ : box.y2 = box.y1 + height;
+ :
+ : TRIM_BOX(box, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDst, &box, pGC->subWindowMode);
+ : }
+ :
+ : ret = (*pGC->ops->CopyPlane)(pSrc, pDst,
+ : pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
+ : damageReportPostOp (pDst);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
+ : return ret;
+ :}
+ :
+ :static void
+ :damagePolyPoint(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int mode,
+ : int npt,
+ : xPoint *ppt)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (npt && checkGCDamage (pDrawable, pGC))
+ : {
+ : BoxRec box;
+ : int nptTmp = npt;
+ : xPoint *pptTmp = ppt;
+ :
+ : box.x2 = box.x1 = pptTmp->x;
+ : box.y2 = box.y1 = pptTmp->y;
+ :
+ : /* this could be slow if the points were spread out */
+ :
+ : while(--nptTmp)
+ : {
+ : pptTmp++;
+ : if(box.x1 > pptTmp->x) box.x1 = pptTmp->x;
+ : else if(box.x2 < pptTmp->x) box.x2 = pptTmp->x;
+ : if(box.y1 > pptTmp->y) box.y1 = pptTmp->y;
+ : else if(box.y2 < pptTmp->y) box.y2 = pptTmp->y;
+ : }
+ :
+ : box.x2++;
+ : box.y2++;
+ :
+ : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ : (*pGC->ops->PolyPoint)(pDrawable, pGC, mode, npt, ppt);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damagePolylines(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int mode,
+ : int npt,
+ : DDXPointPtr ppt)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (npt && checkGCDamage (pDrawable, pGC))
+ : {
+ : int nptTmp = npt;
+ : DDXPointPtr pptTmp = ppt;
+ : BoxRec box;
+ : int extra = pGC->lineWidth >> 1;
+ :
+ : box.x2 = box.x1 = pptTmp->x;
+ : box.y2 = box.y1 = pptTmp->y;
+ :
+ : if(nptTmp > 1)
+ : {
+ : if(pGC->joinStyle == JoinMiter)
+ : extra = 6 * pGC->lineWidth;
+ : else if(pGC->capStyle == CapProjecting)
+ : extra = pGC->lineWidth;
+ : }
+ :
+ : if(mode == CoordModePrevious)
+ : {
+ : int x = box.x1;
+ : int y = box.y1;
+ : while(--nptTmp)
+ : {
+ : pptTmp++;
+ : x += pptTmp->x;
+ : y += pptTmp->y;
+ : if(box.x1 > x) box.x1 = x;
+ : else if(box.x2 < x) box.x2 = x;
+ : if(box.y1 > y) box.y1 = y;
+ : else if(box.y2 < y) box.y2 = y;
+ : }
+ : }
+ : else
+ : {
+ : while(--nptTmp)
+ : {
+ : pptTmp++;
+ : if(box.x1 > pptTmp->x) box.x1 = pptTmp->x;
+ : else if(box.x2 < pptTmp->x) box.x2 = pptTmp->x;
+ : if(box.y1 > pptTmp->y) box.y1 = pptTmp->y;
+ : else if(box.y2 < pptTmp->y) box.y2 = pptTmp->y;
+ : }
+ : }
+ :
+ : box.x2++;
+ : box.y2++;
+ :
+ : if(extra)
+ : {
+ : box.x1 -= extra;
+ : box.x2 += extra;
+ : box.y1 -= extra;
+ : box.y2 += extra;
+ : }
+ :
+ : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ : (*pGC->ops->Polylines)(pDrawable, pGC, mode, npt, ppt);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damagePolySegment(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int nSeg,
+ : xSegment *pSeg)
+ :{ /* damagePolySegment total: 1 0.0011 */
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (nSeg && checkGCDamage (pDrawable, pGC))
+ : {
+ : BoxRec box;
+ : int extra = pGC->lineWidth;
+ : int nsegTmp = nSeg;
+ : xSegment *pSegTmp = pSeg;
+ :
+ : if(pGC->capStyle != CapProjecting)
+ : extra >>= 1;
+ :
+ : if(pSegTmp->x2 > pSegTmp->x1) {
+ : box.x1 = pSegTmp->x1;
+ : box.x2 = pSegTmp->x2;
+ : } else {
+ : box.x2 = pSegTmp->x1;
+ : box.x1 = pSegTmp->x2;
+ : }
+ :
+ : if(pSegTmp->y2 > pSegTmp->y1) {
+ : box.y1 = pSegTmp->y1;
+ : box.y2 = pSegTmp->y2;
+ : } else {
+ : box.y2 = pSegTmp->y1;
+ : box.y1 = pSegTmp->y2;
+ : }
+ :
+ : while(--nsegTmp)
+ : {
+ : pSegTmp++;
+ : if(pSegTmp->x2 > pSegTmp->x1)
+ : {
+ : if(pSegTmp->x1 < box.x1) box.x1 = pSegTmp->x1;
+ : if(pSegTmp->x2 > box.x2) box.x2 = pSegTmp->x2;
+ : }
+ : else
+ : {
+ : if(pSegTmp->x2 < box.x1) box.x1 = pSegTmp->x2;
+ : if(pSegTmp->x1 > box.x2) box.x2 = pSegTmp->x1;
+ : }
+ : if(pSegTmp->y2 > pSegTmp->y1)
+ : {
+ : if(pSegTmp->y1 < box.y1) box.y1 = pSegTmp->y1;
+ : if(pSegTmp->y2 > box.y2) box.y2 = pSegTmp->y2;
+ : }
+ : else
+ : {
+ : if(pSegTmp->y2 < box.y1) box.y1 = pSegTmp->y2;
+ : if(pSegTmp->y1 > box.y2) box.y2 = pSegTmp->y1;
+ : }
+ : }
+ :
+ : box.x2++;
+ : box.y2++;
+ :
+ : if(extra)
+ : {
+ : box.x1 -= extra;
+ : box.x2 += extra;
+ : box.y1 -= extra;
+ : box.y2 += extra;
+ : }
+ :
+ 1 0.0011 : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ : (*pGC->ops->PolySegment)(pDrawable, pGC, nSeg, pSeg);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damagePolyRectangle(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int nRects,
+ : xRectangle *pRects)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (nRects && checkGCDamage (pDrawable, pGC))
+ : {
+ : BoxRec box;
+ : int offset1, offset2, offset3;
+ : int nRectsTmp = nRects;
+ : xRectangle *pRectsTmp = pRects;
+ :
+ : offset2 = pGC->lineWidth;
+ : if(!offset2) offset2 = 1;
+ : offset1 = offset2 >> 1;
+ : offset3 = offset2 - offset1;
+ :
+ : while(nRectsTmp--)
+ : {
+ : box.x1 = pRectsTmp->x - offset1;
+ : box.y1 = pRectsTmp->y - offset1;
+ : box.x2 = box.x1 + pRectsTmp->width + offset2;
+ : box.y2 = box.y1 + offset2;
+ : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ :
+ : box.x1 = pRectsTmp->x - offset1;
+ : box.y1 = pRectsTmp->y + offset3;
+ : box.x2 = box.x1 + offset2;
+ : box.y2 = box.y1 + pRectsTmp->height - offset2;
+ : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ :
+ : box.x1 = pRectsTmp->x + pRectsTmp->width - offset1;
+ : box.y1 = pRectsTmp->y + offset3;
+ : box.x2 = box.x1 + offset2;
+ : box.y2 = box.y1 + pRectsTmp->height - offset2;
+ : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ :
+ : box.x1 = pRectsTmp->x - offset1;
+ : box.y1 = pRectsTmp->y + pRectsTmp->height - offset1;
+ : box.x2 = box.x1 + pRectsTmp->width + offset2;
+ : box.y2 = box.y1 + offset2;
+ : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ :
+ : pRectsTmp++;
+ : }
+ : }
+ : (*pGC->ops->PolyRectangle)(pDrawable, pGC, nRects, pRects);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damagePolyArc(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int nArcs,
+ : xArc *pArcs)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (nArcs && checkGCDamage (pDrawable, pGC))
+ : {
+ : int extra = pGC->lineWidth >> 1;
+ : BoxRec box;
+ : int nArcsTmp = nArcs;
+ : xArc *pArcsTmp = pArcs;
+ :
+ : box.x1 = pArcsTmp->x;
+ : box.x2 = box.x1 + pArcsTmp->width;
+ : box.y1 = pArcsTmp->y;
+ : box.y2 = box.y1 + pArcsTmp->height;
+ :
+ : while(--nArcsTmp)
+ : {
+ : pArcsTmp++;
+ : if(box.x1 > pArcsTmp->x)
+ : box.x1 = pArcsTmp->x;
+ : if(box.x2 < (pArcsTmp->x + pArcsTmp->width))
+ : box.x2 = pArcsTmp->x + pArcsTmp->width;
+ : if(box.y1 > pArcsTmp->y)
+ : box.y1 = pArcsTmp->y;
+ : if(box.y2 < (pArcsTmp->y + pArcsTmp->height))
+ : box.y2 = pArcsTmp->y + pArcsTmp->height;
+ : }
+ :
+ : if(extra)
+ : {
+ : box.x1 -= extra;
+ : box.x2 += extra;
+ : box.y1 -= extra;
+ : box.y2 += extra;
+ : }
+ :
+ : box.x2++;
+ : box.y2++;
+ :
+ : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ : (*pGC->ops->PolyArc)(pDrawable, pGC, nArcs, pArcs);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damageFillPolygon(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int shape,
+ : int mode,
+ : int npt,
+ : DDXPointPtr ppt)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (npt > 2 && checkGCDamage (pDrawable, pGC))
+ : {
+ : DDXPointPtr pptTmp = ppt;
+ : int nptTmp = npt;
+ : BoxRec box;
+ :
+ : box.x2 = box.x1 = pptTmp->x;
+ : box.y2 = box.y1 = pptTmp->y;
+ :
+ : if(mode != CoordModeOrigin)
+ : {
+ : int x = box.x1;
+ : int y = box.y1;
+ : while(--nptTmp)
+ : {
+ : pptTmp++;
+ : x += pptTmp->x;
+ : y += pptTmp->y;
+ : if(box.x1 > x) box.x1 = x;
+ : else if(box.x2 < x) box.x2 = x;
+ : if(box.y1 > y) box.y1 = y;
+ : else if(box.y2 < y) box.y2 = y;
+ : }
+ : }
+ : else
+ : {
+ : while(--nptTmp)
+ : {
+ : pptTmp++;
+ : if(box.x1 > pptTmp->x) box.x1 = pptTmp->x;
+ : else if(box.x2 < pptTmp->x) box.x2 = pptTmp->x;
+ : if(box.y1 > pptTmp->y) box.y1 = pptTmp->y;
+ : else if(box.y2 < pptTmp->y) box.y2 = pptTmp->y;
+ : }
+ : }
+ :
+ : box.x2++;
+ : box.y2++;
+ :
+ : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ :
+ : (*pGC->ops->FillPolygon)(pDrawable, pGC, shape, mode, npt, ppt);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :
+ :static void
+ :damagePolyFillRect(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int nRects,
+ : xRectangle *pRects)
+ 2 0.0022 :{ /* damagePolyFillRect total: 17 0.0185 */
+ 2 0.0022 : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ 2 0.0022 : if (nRects && checkGCDamage (pDrawable, pGC))
+ : {
+ : BoxRec box;
+ : xRectangle *pRectsTmp = pRects;
+ : int nRectsTmp = nRects;
+ :
+ : box.x1 = pRectsTmp->x;
+ : box.x2 = box.x1 + pRectsTmp->width;
+ : box.y1 = pRectsTmp->y;
+ : box.y2 = box.y1 + pRectsTmp->height;
+ :
+ 2 0.0022 : while(--nRectsTmp)
+ : {
+ : pRectsTmp++;
+ : if(box.x1 > pRectsTmp->x) box.x1 = pRectsTmp->x;
+ : if(box.x2 < (pRectsTmp->x + pRectsTmp->width))
+ : box.x2 = pRectsTmp->x + pRectsTmp->width;
+ 1 0.0011 : if(box.y1 > pRectsTmp->y) box.y1 = pRectsTmp->y;
+ : if(box.y2 < (pRectsTmp->y + pRectsTmp->height))
+ : box.y2 = pRectsTmp->y + pRectsTmp->height;
+ : }
+ :
+ 4 0.0044 : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ 1 0.0011 : if(BOX_NOT_EMPTY(box))
+ 1 0.0011 : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ 1 0.0011 : (*pGC->ops->PolyFillRect)(pDrawable, pGC, nRects, pRects);
+ 1 0.0011 : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :
+ :static void
+ :damagePolyFillArc(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int nArcs,
+ : xArc *pArcs)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (nArcs && checkGCDamage (pDrawable, pGC))
+ : {
+ : BoxRec box;
+ : int nArcsTmp = nArcs;
+ : xArc *pArcsTmp = pArcs;
+ :
+ : box.x1 = pArcsTmp->x;
+ : box.x2 = box.x1 + pArcsTmp->width;
+ : box.y1 = pArcsTmp->y;
+ : box.y2 = box.y1 + pArcsTmp->height;
+ :
+ : while(--nArcsTmp)
+ : {
+ : pArcsTmp++;
+ : if(box.x1 > pArcsTmp->x)
+ : box.x1 = pArcsTmp->x;
+ : if(box.x2 < (pArcsTmp->x + pArcsTmp->width))
+ : box.x2 = pArcsTmp->x + pArcsTmp->width;
+ : if(box.y1 > pArcsTmp->y)
+ : box.y1 = pArcsTmp->y;
+ : if(box.y2 < (pArcsTmp->y + pArcsTmp->height))
+ : box.y2 = pArcsTmp->y + pArcsTmp->height;
+ : }
+ :
+ : TRIM_AND_TRANSLATE_BOX(box, pDrawable, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ : (*pGC->ops->PolyFillArc)(pDrawable, pGC, nArcs, pArcs);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :/*
+ : * general Poly/Image text function. Extract glyph information,
+ : * compute bounding box and remove cursor if it is overlapped.
+ : */
+ :
+ :static void
+ :damageDamageChars (DrawablePtr pDrawable,
+ : FontPtr font,
+ : int x,
+ : int y,
+ : unsigned int n,
+ : CharInfoPtr *charinfo,
+ : Bool imageblt,
+ : int subWindowMode)
+ :{
+ : ExtentInfoRec extents;
+ : BoxRec box;
+ :
+ : QueryGlyphExtents(font, charinfo, n, &extents);
+ : if (imageblt)
+ : {
+ : if (extents.overallWidth > extents.overallRight)
+ : extents.overallRight = extents.overallWidth;
+ : if (extents.overallWidth < extents.overallLeft)
+ : extents.overallLeft = extents.overallWidth;
+ : if (extents.overallLeft > 0)
+ : extents.overallLeft = 0;
+ : if (extents.fontAscent > extents.overallAscent)
+ : extents.overallAscent = extents.fontAscent;
+ : if (extents.fontDescent > extents.overallDescent)
+ : extents.overallDescent = extents.fontDescent;
+ : }
+ : box.x1 = x + extents.overallLeft;
+ : box.y1 = y - extents.overallAscent;
+ : box.x2 = x + extents.overallRight;
+ : box.y2 = y + extents.overallDescent;
+ : damageDamageBox (pDrawable, &box, subWindowMode);
+ :}
+ :
+ :/*
+ : * values for textType:
+ : */
+ :#define TT_POLY8 0
+ :#define TT_IMAGE8 1
+ :#define TT_POLY16 2
+ :#define TT_IMAGE16 3
+ :
+ :static int
+ :damageText (DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int x,
+ : int y,
+ : unsigned long count,
+ : char *chars,
+ : FontEncoding fontEncoding,
+ : Bool textType)
+ :{
+ : CharInfoPtr *charinfo;
+ : CharInfoPtr *info;
+ : unsigned long i;
+ : unsigned int n;
+ : int w;
+ : Bool imageblt;
+ :
+ : imageblt = (textType == TT_IMAGE8) || (textType == TT_IMAGE16);
+ :
+ : charinfo = (CharInfoPtr *) ALLOCATE_LOCAL(count * sizeof(CharInfoPtr));
+ : if (!charinfo)
+ : return x;
+ :
+ : GetGlyphs(pGC->font, count, (unsigned char *)chars,
+ : fontEncoding, &i, charinfo);
+ : n = (unsigned int)i;
+ : w = 0;
+ : if (!imageblt)
+ : for (info = charinfo; i--; info++)
+ : w += (*info)->metrics.characterWidth;
+ :
+ : if (n != 0) {
+ : damageDamageChars (pDrawable, pGC->font, x + pDrawable->x, y + pDrawable->y, n,
+ : charinfo, imageblt, pGC->subWindowMode);
+ : if (imageblt)
+ : (*pGC->ops->ImageGlyphBlt)(pDrawable, pGC, x, y, n, charinfo,
+ : FONTGLYPHS(pGC->font));
+ : else
+ : (*pGC->ops->PolyGlyphBlt)(pDrawable, pGC, x, y, n, charinfo,
+ : FONTGLYPHS(pGC->font));
+ : }
+ : DEALLOCATE_LOCAL(charinfo);
+ : return x + w;
+ :}
+ :
+ :static int
+ :damagePolyText8(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int x,
+ : int y,
+ : int count,
+ : char *chars)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (checkGCDamage (pDrawable, pGC))
+ : x = damageText (pDrawable, pGC, x, y, (unsigned long) count, chars,
+ : Linear8Bit, TT_POLY8);
+ : else
+ : x = (*pGC->ops->PolyText8)(pDrawable, pGC, x, y, count, chars);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ : return x;
+ :}
+ :
+ :static int
+ :damagePolyText16(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int x,
+ : int y,
+ : int count,
+ : unsigned short *chars)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (checkGCDamage (pDrawable, pGC))
+ : x = damageText (pDrawable, pGC, x, y, (unsigned long) count, (char *) chars,
+ : FONTLASTROW(pGC->font) == 0 ? Linear16Bit : TwoD16Bit,
+ : TT_POLY16);
+ : else
+ : x = (*pGC->ops->PolyText16)(pDrawable, pGC, x, y, count, chars);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ : return x;
+ :}
+ :
+ :static void
+ :damageImageText8(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int x,
+ : int y,
+ : int count,
+ : char *chars)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (checkGCDamage (pDrawable, pGC))
+ : damageText (pDrawable, pGC, x, y, (unsigned long) count, chars,
+ : Linear8Bit, TT_IMAGE8);
+ : else
+ : (*pGC->ops->ImageText8)(pDrawable, pGC, x, y, count, chars);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damageImageText16(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int x,
+ : int y,
+ : int count,
+ : unsigned short *chars)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ :
+ : if (checkGCDamage (pDrawable, pGC))
+ : damageText (pDrawable, pGC, x, y, (unsigned long) count, (char *) chars,
+ : FONTLASTROW(pGC->font) == 0 ? Linear16Bit : TwoD16Bit,
+ : TT_IMAGE16);
+ : else
+ : (*pGC->ops->ImageText16)(pDrawable, pGC, x, y, count, chars);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :
+ :static void
+ :damageImageGlyphBlt(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int x,
+ : int y,
+ : unsigned int nglyph,
+ : CharInfoPtr *ppci,
+ : pointer pglyphBase)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ : damageDamageChars (pDrawable, pGC->font, x + pDrawable->x, y + pDrawable->y,
+ : nglyph, ppci, TRUE, pGC->subWindowMode);
+ : (*pGC->ops->ImageGlyphBlt)(pDrawable, pGC, x, y, nglyph,
+ : ppci, pglyphBase);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damagePolyGlyphBlt(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int x,
+ : int y,
+ : unsigned int nglyph,
+ : CharInfoPtr *ppci,
+ : pointer pglyphBase)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ : damageDamageChars (pDrawable, pGC->font, x + pDrawable->x, y + pDrawable->y,
+ : nglyph, ppci, FALSE, pGC->subWindowMode);
+ : (*pGC->ops->PolyGlyphBlt)(pDrawable, pGC, x, y, nglyph,
+ : ppci, pglyphBase);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damagePushPixels(GCPtr pGC,
+ : PixmapPtr pBitMap,
+ : DrawablePtr pDrawable,
+ : int dx,
+ : int dy,
+ : int xOrg,
+ : int yOrg)
+ :{
+ : DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ : if(checkGCDamage (pDrawable, pGC))
+ : {
+ : BoxRec box;
+ :
+ : box.x1 = xOrg;
+ : box.y1 = yOrg;
+ :
+ : if(!pGC->miTranslate) {
+ : box.x1 += pDrawable->x;
+ : box.y1 += pDrawable->y;
+ : }
+ :
+ : box.x2 = box.x1 + dx;
+ : box.y2 = box.y1 + dy;
+ :
+ : TRIM_BOX(box, pGC);
+ : if(BOX_NOT_EMPTY(box))
+ : damageDamageBox (pDrawable, &box, pGC->subWindowMode);
+ : }
+ : (*pGC->ops->PushPixels)(pGC, pBitMap, pDrawable, dx, dy, xOrg, yOrg);
+ : damageReportPostOp (pDrawable);
+ : DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ :}
+ :
+ :static void
+ :damageRemoveDamage (DamagePtr *pPrev, DamagePtr pDamage)
+ 1 0.0011 :{ /* damageRemoveDamage total: 2 0.0022 */
+ : while (*pPrev)
+ : {
+ : if (*pPrev == pDamage)
+ : {
+ : *pPrev = pDamage->pNext;
+ : return;
+ : }
+ : pPrev = &(*pPrev)->pNext;
+ : }
+ :#if DAMAGE_VALIDATE_ENABLE
+ : ErrorF ("Damage not on list\n");
+ : abort ();
+ :#endif
+ 1 0.0011 :}
+ :
+ :static void
+ :damageInsertDamage (DamagePtr *pPrev, DamagePtr pDamage)
+ 1 0.0011 :{ /* damageInsertDamage total: 1 0.0011 */
+ :#if DAMAGE_VALIDATE_ENABLE
+ : DamagePtr pOld;
+ :
+ : for (pOld = *pPrev; pOld; pOld = pOld->pNext)
+ : if (pOld == pDamage) {
+ : ErrorF ("Damage already on list\n");
+ : abort ();
+ : }
+ :#endif
+ : pDamage->pNext = *pPrev;
+ : *pPrev = pDamage;
+ :}
+ :
+ :static Bool
+ :damageDestroyPixmap (PixmapPtr pPixmap)
+ 3 0.0033 :{ /* damageDestroyPixmap total: 15 0.0163 */
+ : ScreenPtr pScreen = pPixmap->drawable.pScreen;
+ 2 0.0022 : damageScrPriv(pScreen);
+ :
+ : if (pPixmap->refcnt == 1)
+ : {
+ 1 0.0011 : DamagePtr *pPrev = getPixmapDamageRef (pPixmap);
+ : DamagePtr pDamage;
+ :
+ : while ((pDamage = *pPrev))
+ : {
+ : damageRemoveDamage (pPrev, pDamage);
+ : if (!pDamage->isWindow)
+ : DamageDestroy (pDamage);
+ : }
+ : }
+ 3 0.0033 : unwrap (pScrPriv, pScreen, DestroyPixmap);
+ 2 0.0022 : (*pScreen->DestroyPixmap) (pPixmap);
+ 3 0.0033 : wrap (pScrPriv, pScreen, DestroyPixmap, damageDestroyPixmap);
+ : return TRUE;
+ 1 0.0011 :}
+ :
+ :static void
+ :damagePaintWindow(WindowPtr pWindow,
+ : RegionPtr prgn,
+ : int what)
+ :{
+ : ScreenPtr pScreen = pWindow->drawable.pScreen;
+ : damageScrPriv(pScreen);
+ :
+ : /*
+ : * Painting background none doesn't actually *do* anything, so
+ : * no damage is recorded
+ : */
+ : if ((what != PW_BACKGROUND || pWindow->backgroundState != None) &&
+ : getWindowDamage (pWindow))
+ : damageDamageRegion (&pWindow->drawable, prgn, FALSE, -1);
+ : if(what == PW_BACKGROUND) {
+ : unwrap (pScrPriv, pScreen, PaintWindowBackground);
+ : (*pScreen->PaintWindowBackground) (pWindow, prgn, what);
+ : damageReportPostOp (&pWindow->drawable);
+ : wrap (pScrPriv, pScreen, PaintWindowBackground, damagePaintWindow);
+ : } else {
+ : unwrap (pScrPriv, pScreen, PaintWindowBorder);
+ : (*pScreen->PaintWindowBorder) (pWindow, prgn, what);
+ : damageReportPostOp (&pWindow->drawable);
+ : wrap (pScrPriv, pScreen, PaintWindowBorder, damagePaintWindow);
+ : }
+ :}
+ :
+ :
+ :static void
+ :damageCopyWindow(WindowPtr pWindow,
+ : DDXPointRec ptOldOrg,
+ : RegionPtr prgnSrc)
+ :{
+ : ScreenPtr pScreen = pWindow->drawable.pScreen;
+ : damageScrPriv(pScreen);
+ :
+ : if (getWindowDamage (pWindow))
+ : {
+ : int dx = pWindow->drawable.x - ptOldOrg.x;
+ : int dy = pWindow->drawable.y - ptOldOrg.y;
+ :
+ : /*
+ : * The region comes in source relative, but the damage occurs
+ : * at the destination location. Translate back and forth.
+ : */
+ : REGION_TRANSLATE (pScreen, prgnSrc, dx, dy);
+ : damageDamageRegion (&pWindow->drawable, prgnSrc, FALSE, -1);
+ : REGION_TRANSLATE (pScreen, prgnSrc, -dx, -dy);
+ : }
+ : unwrap (pScrPriv, pScreen, CopyWindow);
+ : (*pScreen->CopyWindow) (pWindow, ptOldOrg, prgnSrc);
+ : damageReportPostOp (&pWindow->drawable);
+ : wrap (pScrPriv, pScreen, CopyWindow, damageCopyWindow);
+ :}
+ :
+ :static GCOps damageGCOps = {
+ : damageFillSpans, damageSetSpans,
+ : damagePutImage, damageCopyArea,
+ : damageCopyPlane, damagePolyPoint,
+ : damagePolylines, damagePolySegment,
+ : damagePolyRectangle, damagePolyArc,
+ : damageFillPolygon, damagePolyFillRect,
+ : damagePolyFillArc, damagePolyText8,
+ : damagePolyText16, damageImageText8,
+ : damageImageText16, damageImageGlyphBlt,
+ : damagePolyGlyphBlt, damagePushPixels,
+ : {NULL} /* devPrivate */
+ :};
+ :
+ :static void
+ :damageRestoreAreas (PixmapPtr pPixmap,
+ : RegionPtr prgn,
+ : int xorg,
+ : int yorg,
+ : WindowPtr pWindow)
+ :{
+ : ScreenPtr pScreen = pWindow->drawable.pScreen;
+ : damageScrPriv(pScreen);
+ :
+ : damageDamageRegion (&pWindow->drawable, prgn, FALSE, -1);
+ : unwrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas);
+ : (*pScreen->BackingStoreFuncs.RestoreAreas) (pPixmap, prgn,
+ : xorg, yorg, pWindow);
+ : damageReportPostOp (&pWindow->drawable);
+ : wrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas,
+ : damageRestoreAreas);
+ :}
+ :
+ :static void
+ :damageSetWindowPixmap (WindowPtr pWindow, PixmapPtr pPixmap)
+ :{
+ : DamagePtr pDamage;
+ : ScreenPtr pScreen = pWindow->drawable.pScreen;
+ : damageScrPriv(pScreen);
+ :
+ : if ((pDamage = damageGetWinPriv(pWindow)))
+ : {
+ : PixmapPtr pOldPixmap = (*pScreen->GetWindowPixmap) (pWindow);
+ : DamagePtr *pPrev = getPixmapDamageRef(pOldPixmap);
+ :
+ : while (pDamage)
+ : {
+ : damageRemoveDamage (pPrev, pDamage);
+ : pDamage = pDamage->pNextWin;
+ : }
+ : }
+ : unwrap (pScrPriv, pScreen, SetWindowPixmap);
+ : (*pScreen->SetWindowPixmap) (pWindow, pPixmap);
+ : wrap (pScrPriv, pScreen, SetWindowPixmap, damageSetWindowPixmap);
+ : if ((pDamage = damageGetWinPriv(pWindow)))
+ : {
+ : DamagePtr *pPrev = getPixmapDamageRef(pPixmap);
+ :
+ : while (pDamage)
+ : {
+ : damageInsertDamage (pPrev, pDamage);
+ : pDamage = pDamage->pNextWin;
+ : }
+ : }
+ :}
+ :
+ :static Bool
+ :damageDestroyWindow (WindowPtr pWindow)
+ :{
+ : DamagePtr pDamage;
+ : ScreenPtr pScreen = pWindow->drawable.pScreen;
+ : Bool ret;
+ : damageScrPriv(pScreen);
+ :
+ : while ((pDamage = damageGetWinPriv(pWindow)))
+ : {
+ : DamageUnregister (&pWindow->drawable, pDamage);
+ : DamageDestroy (pDamage);
+ : }
+ : unwrap (pScrPriv, pScreen, DestroyWindow);
+ : ret = (*pScreen->DestroyWindow) (pWindow);
+ : wrap (pScrPriv, pScreen, DestroyWindow, damageDestroyWindow);
+ : return ret;
+ :}
+ :
+ :static Bool
+ :damageCloseScreen (int i, ScreenPtr pScreen)
+ :{
+ : damageScrPriv(pScreen);
+ :
+ : unwrap (pScrPriv, pScreen, DestroyPixmap);
+ : unwrap (pScrPriv, pScreen, CreateGC);
+ : unwrap (pScrPriv, pScreen, PaintWindowBackground);
+ : unwrap (pScrPriv, pScreen, PaintWindowBorder);
+ : unwrap (pScrPriv, pScreen, CopyWindow);
+ : unwrap (pScrPriv, pScreen, CloseScreen);
+ : unwrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas);
+ : xfree (pScrPriv);
+ : return (*pScreen->CloseScreen) (i, pScreen);
+ :}
+ :
+ :Bool
+ :DamageSetup (ScreenPtr pScreen)
+ :{
+ : DamageScrPrivPtr pScrPriv;
+ :#ifdef RENDER
+ : PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
+ :#endif
+ :
+ : if (damageGeneration != serverGeneration)
+ : {
+ : damageScrPrivateIndex = AllocateScreenPrivateIndex ();
+ : if (damageScrPrivateIndex == -1)
+ : return FALSE;
+ : damageGCPrivateIndex = AllocateGCPrivateIndex ();
+ : if (damageGCPrivateIndex == -1)
+ : return FALSE;
+ : damagePixPrivateIndex = AllocatePixmapPrivateIndex ();
+ : if (damagePixPrivateIndex == -1)
+ : return FALSE;
+ : damageWinPrivateIndex = AllocateWindowPrivateIndex ();
+ : if (damageWinPrivateIndex == -1)
+ : return FALSE;
+ : damageGeneration = serverGeneration;
+ : }
+ : if (pScreen->devPrivates[damageScrPrivateIndex].ptr)
+ : return TRUE;
+ :
+ : if (!AllocateGCPrivate (pScreen, damageGCPrivateIndex, sizeof (DamageGCPrivRec)))
+ : return FALSE;
+ : if (!AllocatePixmapPrivate (pScreen, damagePixPrivateIndex, 0))
+ : return FALSE;
+ : if (!AllocateWindowPrivate (pScreen, damageWinPrivateIndex, 0))
+ : return FALSE;
+ :
+ : pScrPriv = (DamageScrPrivPtr) xalloc (sizeof (DamageScrPrivRec));
+ : if (!pScrPriv)
+ : return FALSE;
+ :
+ : pScrPriv->internalLevel = 0;
+ : pScrPriv->pScreenDamage = 0;
+ :
+ : wrap (pScrPriv, pScreen, DestroyPixmap, damageDestroyPixmap);
+ : wrap (pScrPriv, pScreen, CreateGC, damageCreateGC);
+ : wrap (pScrPriv, pScreen, PaintWindowBackground, damagePaintWindow);
+ : wrap (pScrPriv, pScreen, PaintWindowBorder, damagePaintWindow);
+ : wrap (pScrPriv, pScreen, DestroyWindow, damageDestroyWindow);
+ : wrap (pScrPriv, pScreen, SetWindowPixmap, damageSetWindowPixmap);
+ : wrap (pScrPriv, pScreen, CopyWindow, damageCopyWindow);
+ : wrap (pScrPriv, pScreen, CloseScreen, damageCloseScreen);
+ : wrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas,
+ : damageRestoreAreas);
+ :#ifdef RENDER
+ : if (ps) {
+ : wrap (pScrPriv, ps, Glyphs, damageGlyphs);
+ : wrap (pScrPriv, ps, Composite, damageComposite);
+ : }
+ :#endif
+ :
+ : pScreen->devPrivates[damageScrPrivateIndex].ptr = (pointer) pScrPriv;
+ : return TRUE;
+ :}
+ :
+ :DamagePtr
+ :DamageCreate (DamageReportFunc damageReport,
+ : DamageDestroyFunc damageDestroy,
+ : DamageReportLevel damageLevel,
+ : Bool isInternal,
+ : ScreenPtr pScreen,
+ : void *closure)
+ 2 0.0022 :{ /* DamageCreate total: 12 0.0131 */
+ : DamagePtr pDamage;
+ :
+ 4 0.0044 : pDamage = xalloc (sizeof (DamageRec));
+ 1 0.0011 : if (!pDamage)
+ : return 0;
+ : pDamage->pNext = 0;
+ : pDamage->pNextWin = 0;
+ 3 0.0033 : REGION_NULL(pScreen, &pDamage->damage);
+ : REGION_NULL(pScreen, &pDamage->pendingDamage);
+ :
+ : pDamage->damageLevel = damageLevel;
+ 1 0.0011 : pDamage->isInternal = isInternal;
+ : pDamage->closure = closure;
+ : pDamage->isWindow = FALSE;
+ : pDamage->pDrawable = 0;
+ : pDamage->reportAfter = FALSE;
+ :
+ : pDamage->damageReport = damageReport;
+ : pDamage->damageDestroy = damageDestroy;
+ : return pDamage;
+ 1 0.0011 :}
+ :
+ :void
+ :DamageRegister (DrawablePtr pDrawable,
+ : DamagePtr pDamage)
+ 1 0.0011 :{ /* DamageRegister total: 1 0.0011 */
+ : if (pDrawable->type == DRAWABLE_WINDOW)
+ : {
+ : WindowPtr pWindow = (WindowPtr) pDrawable;
+ : winDamageRef(pWindow);
+ :
+ :#if DAMAGE_VALIDATE_ENABLE
+ : DamagePtr pOld;
+ :
+ : for (pOld = *pPrev; pOld; pOld = pOld->pNextWin)
+ : if (pOld == pDamage) {
+ : ErrorF ("Damage already on window list\n");
+ : abort ();
+ : }
+ :#endif
+ : pDamage->pNextWin = *pPrev;
+ : *pPrev = pDamage;
+ : pDamage->isWindow = TRUE;
+ : }
+ : else
+ : pDamage->isWindow = FALSE;
+ : pDamage->pDrawable = pDrawable;
+ : damageInsertDamage (getDrawableDamageRef (pDrawable), pDamage);
+ :}
+ :
+ :void
+ :DamageDrawInternal (ScreenPtr pScreen, Bool enable)
+ :{
+ : damageScrPriv (pScreen);
+ :
+ : pScrPriv->internalLevel += enable ? 1 : -1;
+ :}
+ :
+ :void
+ :DamageUnregister (DrawablePtr pDrawable,
+ : DamagePtr pDamage)
+ :{
+ : if (pDrawable->type == DRAWABLE_WINDOW)
+ : {
+ : WindowPtr pWindow = (WindowPtr) pDrawable;
+ : winDamageRef (pWindow);
+ :#if DAMAGE_VALIDATE_ENABLE
+ : int found = 0;
+ :#endif
+ :
+ : while (*pPrev)
+ : {
+ : if (*pPrev == pDamage)
+ : {
+ : *pPrev = pDamage->pNextWin;
+ :#if DAMAGE_VALIDATE_ENABLE
+ : found = 1;
+ :#endif
+ : break;
+ : }
+ : pPrev = &(*pPrev)->pNextWin;
+ : }
+ :#if DAMAGE_VALIDATE_ENABLE
+ : if (!found) {
+ : ErrorF ("Damage not on window list\n");
+ : abort ();
+ : }
+ :#endif
+ : }
+ : pDamage->pDrawable = 0;
+ : damageRemoveDamage (getDrawableDamageRef (pDrawable), pDamage);
+ :}
+ :
+ :void
+ :DamageDestroy (DamagePtr pDamage)
+ 1 0.0011 :{ /* DamageDestroy total: 3 0.0033 */
+ : if (pDamage->damageDestroy)
+ : (*pDamage->damageDestroy) (pDamage, pDamage->closure);
+ 2 0.0022 : REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->damage);
+ : REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->pendingDamage);
+ : xfree (pDamage);
+ :}
+ :
+ :Bool
+ :DamageSubtract (DamagePtr pDamage,
+ : const RegionPtr pRegion)
+ :{
+ : RegionPtr pClip;
+ : RegionRec pixmapClip;
+ : DrawablePtr pDrawable = pDamage->pDrawable;
+ :
+ : REGION_SUBTRACT (pDrawable->pScreen, &pDamage->damage, &pDamage->damage, pRegion);
+ : if (pDrawable)
+ : {
+ : if (pDrawable->type == DRAWABLE_WINDOW)
+ : pClip = &((WindowPtr) pDrawable)->borderClip;
+ : else
+ : {
+ : BoxRec box;
+ :
+ : box.x1 = pDrawable->x;
+ : box.y1 = pDrawable->y;
+ : box.x2 = pDrawable->x + pDrawable->width;
+ : box.y2 = pDrawable->y + pDrawable->height;
+ : REGION_INIT (pDrawable->pScreen, &pixmapClip, &box, 1);
+ : pClip = &pixmapClip;
+ : }
+ : REGION_TRANSLATE (pDrawable->pScreen, &pDamage->damage, pDrawable->x, pDrawable->y);
+ : REGION_INTERSECT (pDrawable->pScreen, &pDamage->damage, &pDamage->damage, pClip);
+ : REGION_TRANSLATE (pDrawable->pScreen, &pDamage->damage, -pDrawable->x, -pDrawable->y);
+ : if (pDrawable->type != DRAWABLE_WINDOW)
+ : REGION_UNINIT(pDrawable->pScreen, &pixmapClip);
+ : }
+ : return REGION_NOTEMPTY (pDrawable->pScreen, &pDamage->damage);
+ :}
+ :
+ :void
+ :DamageEmpty (DamagePtr pDamage)
+ 1 0.0011 :{ /* DamageEmpty total: 3 0.0033 */
+ 1 0.0011 : REGION_EMPTY (pDamage->pDrawable->pScreen, &pDamage->damage);
+ 1 0.0011 :}
+ :
+ :RegionPtr
+ :DamageRegion (DamagePtr pDamage)
+ 7 0.0076 :{ /* DamageRegion total: 10 0.0109 */
+ : return &pDamage->damage;
+ 3 0.0033 :}
+ :
+ :_X_EXPORT void
+ :DamageDamageRegion (DrawablePtr pDrawable,
+ : RegionPtr pRegion)
+ :{
+ : damageDamageRegion (pDrawable, pRegion, FALSE, -1);
+ :
+ : /* Go back and report this damage for DamagePtrs with reportAfter set, since
+ : * this call isn't part of an in-progress drawing op in the call chain and
+ : * the DDX probably just wants to know about it right away.
+ : */
+ : damageReportPostOp (pDrawable);
+ :}
+ :
+ :void
+ :DamageSetReportAfterOp (DamagePtr pDamage, Bool reportAfter)
+ 4 0.0044 :{ /* DamageSetReportAfterOp total: 5 0.0054 */
+ : pDamage->reportAfter = reportAfter;
+ 1 0.0011 :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/driver/xf86-video-intel/src/i830_driver.c"
+ *
+ * 154 0.1678
+ */
+
+
+ :/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c,v 1.50 2004/02/20 00:06:00 alanh Exp $ */
+ :/**************************************************************************
+ :
+ :Copyright 2001 VA Linux Systems Inc., Fremont, California.
+ :Copyright © 2002 by David Dawes
+ :
+ :All Rights Reserved.
+ :
+ :Permission is hereby granted, free of charge, to any person obtaining a
+ :copy of this software and associated documentation files (the "Software"),
+ :to deal in the Software without restriction, including without limitation
+ :on the rights to use, copy, modify, merge, publish, distribute, sub
+ :license, and/or sell copies of the Software, and to permit persons to whom
+ :the Software is furnished to do so, subject to the following conditions:
+ :
+ :The above copyright notice and this permission notice (including the next
+ :paragraph) shall be included in all copies or substantial portions of the
+ :Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ :THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ :DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ :OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ :USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :**************************************************************************/
+ :
+ :/*
+ : * Reformatted with GNU indent (2.2.8), using the following options:
+ : *
+ : * -bad -bap -c41 -cd0 -ncdb -ci6 -cli0 -cp0 -ncs -d0 -di3 -i3 -ip3 -l78
+ : * -lp -npcs -psl -sob -ss -br -ce -sc -hnl
+ : *
+ : * This provides a good match with the original i810 code and preferred
+ : * XFree86 formatting conventions.
+ : *
+ : * When editing this driver, please follow the existing formatting, and edit
+ : * with <TAB> characters expanded at 8-column intervals.
+ : */
+ :
+ :/*
+ : * Authors: Jeff Hartmann <jhartmann@valinux.com>
+ : * Abraham van der Merwe <abraham@2d3d.co.za>
+ : * David Dawes <dawes@xfree86.org>
+ : * Alan Hourihane <alanh@tungstengraphics.com>
+ : */
+ :
+ :/*
+ : * Mode handling is based on the VESA driver written by:
+ : * Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
+ : */
+ :
+ :/*
+ : * Changes:
+ : *
+ : * 23/08/2001 Abraham van der Merwe <abraham@2d3d.co.za>
+ : * - Fixed display timing bug (mode information for some
+ : * modes were not initialized correctly)
+ : * - Added workarounds for GTT corruptions (I don't adjust
+ : * the pitches for 1280x and 1600x modes so we don't
+ : * need extra memory)
+ : * - The code will now default to 60Hz if LFP is connected
+ : * - Added different refresh rate setting code to work
+ : * around 0x4f02 BIOS bug
+ : * - BIOS workaround for some mode sets (I use legacy BIOS
+ : * calls for setting those)
+ : * - Removed 0x4f04, 0x01 (save state) BIOS call which causes
+ : * LFP to malfunction (do some house keeping and restore
+ : * modes ourselves instead - not perfect, but at least the
+ : * LFP is working now)
+ : * - Several other smaller bug fixes
+ : *
+ : * 06/09/2001 Abraham van der Merwe <abraham@2d3d.co.za>
+ : * - Preliminary local memory support (works without agpgart)
+ : * - DGA fixes (the code were still using i810 mode sets, etc.)
+ : * - agpgart fixes
+ : *
+ : * 18/09/2001
+ : * - Proper local memory support (should work correctly now
+ : * with/without agpgart module)
+ : * - more agpgart fixes
+ : * - got rid of incorrect GTT adjustments
+ : *
+ : * 09/10/2001
+ : * - Changed the DPRINTF() variadic macro to an ANSI C compatible
+ : * version
+ : *
+ : * 10/10/2001
+ : * - Fixed DPRINTF_stub(). I forgot the __...__ macros in there
+ : * instead of the function arguments :P
+ : * - Added a workaround for the 1600x1200 bug (Text mode corrupts
+ : * when you exit from any 1600x1200 mode and 1280x1024@85Hz. I
+ : * suspect this is a BIOS bug (hence the 1280x1024@85Hz case)).
+ : * For now I'm switching to 800x600@60Hz then to 80x25 text mode
+ : * and then restoring the registers - very ugly indeed.
+ : *
+ : * 15/10/2001
+ : * - Improved 1600x1200 mode set workaround. The previous workaround
+ : * was causing mode set problems later on.
+ : *
+ : * 18/10/2001
+ : * - Fixed a bug in I830BIOSLeaveVT() which caused a bug when you
+ : * switched VT's
+ : */
+ :/*
+ : * 07/2002 David Dawes
+ : * - Add Intel(R) 855GM/852GM support.
+ : */
+ :/*
+ : * 07/2002 David Dawes
+ : * - Cleanup code formatting.
+ : * - Improve VESA mode selection, and fix refresh rate selection.
+ : * - Don't duplicate functions provided in 4.2 vbe modules.
+ : * - Don't duplicate functions provided in the vgahw module.
+ : * - Rewrite memory allocation.
+ : * - Rewrite initialisation and save/restore state handling.
+ : * - Decouple the i810 support from i830 and later.
+ : * - Remove various unnecessary hacks and workarounds.
+ : * - Fix an 845G problem with the ring buffer not in pre-allocated
+ : * memory.
+ : * - Fix screen blanking.
+ : * - Clear the screen at startup so you don't see the previous session.
+ : * - Fix some HW cursor glitches, and turn HW cursor off at VT switch
+ : * and exit.
+ : *
+ : * 08/2002 Keith Whitwell
+ : * - Fix DRI initialisation.
+ : *
+ : *
+ : * 08/2002 Alan Hourihane and David Dawes
+ : * - Add XVideo support.
+ : *
+ : *
+ : * 10/2002 David Dawes
+ : * - Add Intel(R) 865G support.
+ : *
+ : *
+ : * 01/2004 Alan Hourihane
+ : * - Add Intel(R) 915G support.
+ : * - Add Dual Head and Clone capabilities.
+ : * - Add lid status checking
+ : * - Fix Xvideo with high-res LFP's
+ : * - Add ARGB HW cursor support
+ : *
+ : * 05/2005 Alan Hourihane
+ : * - Add Intel(R) 945G support.
+ : *
+ : * 09/2005 Alan Hourihane
+ : * - Add Intel(R) 945GM support.
+ : *
+ : * 10/2005 Alan Hourihane, Keith Whitwell, Brian Paul
+ : * - Added Rotation support
+ : *
+ : * 12/2005 Alan Hourihane, Keith Whitwell
+ : * - Add Intel(R) 965G support.
+ : */
+ :
+ :#ifdef HAVE_CONFIG_H
+ :#include "config.h"
+ :#endif
+ :
+ :#ifndef PRINT_MODE_INFO
+ :#define PRINT_MODE_INFO 0
+ :#endif
+ :
+ :#include <assert.h>
+ :#include <string.h>
+ :#include <stdio.h>
+ :#include <unistd.h>
+ :#include <stdlib.h>
+ :#include <stdio.h>
+ :
+ :#include "xf86.h"
+ :#include "xf86_OSproc.h"
+ :#include "xf86Resources.h"
+ :#include "xf86RAC.h"
+ :#include "xf86cmap.h"
+ :#include "compiler.h"
+ :#include "mibstore.h"
+ :#include "vgaHW.h"
+ :#include "mipointer.h"
+ :#include "micmap.h"
+ :#include "shadowfb.h"
+ :#include <X11/extensions/randr.h>
+ :#include "fb.h"
+ :#include "miscstruct.h"
+ :#include "dixstruct.h"
+ :#include "xf86xv.h"
+ :#include <X11/extensions/Xv.h>
+ :#include "vbe.h"
+ :#include "shadow.h"
+ :#include "i830.h"
+ :#include "i830_display.h"
+ :#include "i830_debug.h"
+ :#include "i830_bios.h"
+ :
+ :#ifdef XF86DRI
+ :#include "dri.h"
+ :#include <sys/ioctl.h>
+ :#include <errno.h>
+ :#endif
+ :
+ :#ifdef I830_USE_EXA
+ :const char *I830exaSymbols[] = {
+ : "exaGetVersion",
+ : "exaDriverInit",
+ : "exaDriverFini",
+ : "exaOffscreenAlloc",
+ : "exaOffscreenFree",
+ : "exaWaitSync",
+ : NULL
+ :};
+ :#endif
+ :
+ :#define BIT(x) (1 << (x))
+ :#define MAX(a,b) ((a) > (b) ? (a) : (b))
+ :#define NB_OF(x) (sizeof (x) / sizeof (*x))
+ :
+ :/* *INDENT-OFF* */
+ :static SymTabRec I830Chipsets[] = {
+ : {PCI_CHIP_I830_M, "i830"},
+ : {PCI_CHIP_845_G, "845G"},
+ : {PCI_CHIP_I855_GM, "852GM/855GM"},
+ : {PCI_CHIP_I865_G, "865G"},
+ : {PCI_CHIP_I915_G, "915G"},
+ : {PCI_CHIP_E7221_G, "E7221 (i915)"},
+ : {PCI_CHIP_I915_GM, "915GM"},
+ : {PCI_CHIP_I945_G, "945G"},
+ : {PCI_CHIP_I945_GM, "945GM"},
+ : {PCI_CHIP_I945_GME, "945GME"},
+ : {PCI_CHIP_I965_G, "965G"},
+ : {PCI_CHIP_I965_G_1, "965G"},
+ : {PCI_CHIP_I965_Q, "965Q"},
+ : {PCI_CHIP_I946_GZ, "946GZ"},
+ : {PCI_CHIP_I965_GM, "965GM"},
+ : {PCI_CHIP_I965_GME, "965GME/GLE"},
+ : {PCI_CHIP_G33_G, "G33"},
+ : {PCI_CHIP_Q35_G, "Q35"},
+ : {PCI_CHIP_Q33_G, "Q33"},
+ : {-1, NULL}
+ :};
+ :
+ :static PciChipsets I830PciChipsets[] = {
+ : {PCI_CHIP_I830_M, PCI_CHIP_I830_M, RES_SHARED_VGA},
+ : {PCI_CHIP_845_G, PCI_CHIP_845_G, RES_SHARED_VGA},
+ : {PCI_CHIP_I855_GM, PCI_CHIP_I855_GM, RES_SHARED_VGA},
+ : {PCI_CHIP_I865_G, PCI_CHIP_I865_G, RES_SHARED_VGA},
+ : {PCI_CHIP_I915_G, PCI_CHIP_I915_G, RES_SHARED_VGA},
+ : {PCI_CHIP_E7221_G, PCI_CHIP_E7221_G, RES_SHARED_VGA},
+ : {PCI_CHIP_I915_GM, PCI_CHIP_I915_GM, RES_SHARED_VGA},
+ : {PCI_CHIP_I945_G, PCI_CHIP_I945_G, RES_SHARED_VGA},
+ : {PCI_CHIP_I945_GM, PCI_CHIP_I945_GM, RES_SHARED_VGA},
+ : {PCI_CHIP_I945_GME, PCI_CHIP_I945_GME, RES_SHARED_VGA},
+ : {PCI_CHIP_I965_G, PCI_CHIP_I965_G, RES_SHARED_VGA},
+ : {PCI_CHIP_I965_G_1, PCI_CHIP_I965_G_1, RES_SHARED_VGA},
+ : {PCI_CHIP_I965_Q, PCI_CHIP_I965_Q, RES_SHARED_VGA},
+ : {PCI_CHIP_I946_GZ, PCI_CHIP_I946_GZ, RES_SHARED_VGA},
+ : {PCI_CHIP_I965_GM, PCI_CHIP_I965_GM, RES_SHARED_VGA},
+ : {PCI_CHIP_I965_GME, PCI_CHIP_I965_GME, RES_SHARED_VGA},
+ : {PCI_CHIP_G33_G, PCI_CHIP_G33_G, RES_SHARED_VGA},
+ : {PCI_CHIP_Q35_G, PCI_CHIP_Q35_G, RES_SHARED_VGA},
+ : {PCI_CHIP_Q33_G, PCI_CHIP_Q33_G, RES_SHARED_VGA},
+ : {-1, -1, RES_UNDEFINED}
+ :};
+ :
+ :/*
+ : * Note: "ColorKey" is provided for compatibility with the i810 driver.
+ : * However, the correct option name is "VideoKey". "ColorKey" usually
+ : * refers to the tranparency key for 8+24 overlays, not for video overlays.
+ : */
+ :
+ :typedef enum {
+ :#if defined(I830_USE_XAA) && defined(I830_USE_EXA)
+ : OPTION_ACCELMETHOD,
+ :#endif
+ : OPTION_NOACCEL,
+ : OPTION_SW_CURSOR,
+ : OPTION_CACHE_LINES,
+ : OPTION_DRI,
+ : OPTION_PAGEFLIP,
+ : OPTION_XVIDEO,
+ : OPTION_VIDEO_KEY,
+ : OPTION_COLOR_KEY,
+ : OPTION_CHECKDEVICES,
+ : OPTION_MODEDEBUG,
+ :#ifdef XF86DRI_MM
+ : OPTION_INTELTEXPOOL,
+ : OPTION_INTELMMSIZE,
+ :#endif
+ : OPTION_TRIPLEBUFFER,
+ :} I830Opts;
+ :
+ :static OptionInfoRec I830Options[] = {
+ :#if defined(I830_USE_XAA) && defined(I830_USE_EXA)
+ : {OPTION_ACCELMETHOD, "AccelMethod", OPTV_ANYSTR, {0}, FALSE},
+ :#endif
+ : {OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE},
+ : {OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE},
+ : {OPTION_CACHE_LINES, "CacheLines", OPTV_INTEGER, {0}, FALSE},
+ : {OPTION_DRI, "DRI", OPTV_BOOLEAN, {0}, TRUE},
+ : {OPTION_PAGEFLIP, "PageFlip", OPTV_BOOLEAN, {0}, FALSE},
+ : {OPTION_XVIDEO, "XVideo", OPTV_BOOLEAN, {0}, TRUE},
+ : {OPTION_COLOR_KEY, "ColorKey", OPTV_INTEGER, {0}, FALSE},
+ : {OPTION_VIDEO_KEY, "VideoKey", OPTV_INTEGER, {0}, FALSE},
+ : {OPTION_CHECKDEVICES, "CheckDevices",OPTV_BOOLEAN, {0}, FALSE},
+ : {OPTION_MODEDEBUG, "ModeDebug", OPTV_BOOLEAN, {0}, FALSE},
+ :#ifdef XF86DRI_MM
+ : {OPTION_INTELTEXPOOL,"Legacy3D", OPTV_BOOLEAN, {0}, FALSE},
+ : {OPTION_INTELMMSIZE, "AperTexSize", OPTV_INTEGER, {0}, FALSE},
+ :#endif
+ : {OPTION_TRIPLEBUFFER, "TripleBuffer", OPTV_BOOLEAN, {0}, FALSE},
+ : {-1, NULL, OPTV_NONE, {0}, FALSE}
+ :};
+ :/* *INDENT-ON* */
+ :
+ :const char *i830_output_type_names[] = {
+ : "Unused",
+ : "Analog",
+ : "DVO",
+ : "SDVO",
+ : "LVDS",
+ : "TVOUT",
+ :};
+ :
+ :static void i830AdjustFrame(int scrnIndex, int x, int y, int flags);
+ :static Bool I830CloseScreen(int scrnIndex, ScreenPtr pScreen);
+ :static Bool I830EnterVT(int scrnIndex, int flags);
+ :static CARD32 I830CheckDevicesTimer(OsTimerPtr timer, CARD32 now, pointer arg);
+ :static Bool SaveHWState(ScrnInfoPtr pScrn);
+ :static Bool RestoreHWState(ScrnInfoPtr pScrn);
+ :
+ :/* temporary */
+ :extern void xf86SetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y);
+ :
+ :#ifdef I830DEBUG
+ :void
+ :I830DPRINTF_stub(const char *filename, int line, const char *function,
+ : const char *fmt, ...)
+ :{
+ : va_list ap;
+ :
+ : ErrorF("\n##############################################\n"
+ : "*** In function %s, on line %d, in file %s ***\n",
+ : function, line, filename);
+ : va_start(ap, fmt);
+ : VErrorF(fmt, ap);
+ : va_end(ap);
+ : ErrorF("##############################################\n\n");
+ :}
+ :#else /* #ifdef I830DEBUG */
+ :void
+ :I830DPRINTF_stub(const char *filename, int line, const char *function,
+ : const char *fmt, ...)
+ :{
+ : /* do nothing */
+ :}
+ :#endif /* #ifdef I830DEBUG */
+ :
+ :/* Export I830 options to i830 driver where necessary */
+ :const OptionInfoRec *
+ :I830AvailableOptions(int chipid, int busid)
+ :{
+ : int i;
+ :
+ : for (i = 0; I830PciChipsets[i].PCIid > 0; i++) {
+ : if (chipid == I830PciChipsets[i].PCIid)
+ : return I830Options;
+ : }
+ : return NULL;
+ :}
+ :
+ :static Bool
+ :I830GetRec(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830;
+ :
+ : if (pScrn->driverPrivate)
+ : return TRUE;
+ : pI830 = pScrn->driverPrivate = xnfcalloc(sizeof(I830Rec), 1);
+ : return TRUE;
+ :}
+ :
+ :static void
+ :I830FreeRec(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830;
+ :
+ : if (!pScrn)
+ : return;
+ : if (!pScrn->driverPrivate)
+ : return;
+ :
+ : pI830 = I830PTR(pScrn);
+ :
+ : xfree(pScrn->driverPrivate);
+ : pScrn->driverPrivate = NULL;
+ :}
+ :
+ :static void
+ :I830ProbeDDC(ScrnInfoPtr pScrn, int index)
+ :{
+ : vbeInfoPtr pVbe;
+ :
+ : /* The vbe module gets loaded in PreInit(), so no need to load it here. */
+ :
+ : pVbe = VBEInit(NULL, index);
+ : ConfiguredMonitor = vbeDoEDID(pVbe, NULL);
+ :}
+ :
+ :static int
+ :I830DetectMemory(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : PCITAG bridge;
+ : CARD16 gmch_ctrl;
+ : int memsize = 0, gtt_size;
+ : int range;
+ :#if 0
+ : VbeInfoBlock *vbeInfo;
+ :#endif
+ :
+ : bridge = pciTag(0, 0, 0); /* This is always the host bridge */
+ : gmch_ctrl = pciReadWord(bridge, I830_GMCH_CTRL);
+ :
+ : if (IS_I965G(pI830)) {
+ : /* The 965 may have a GTT that is actually larger than is necessary
+ : * to cover the aperture, so check the hardware's reporting of the
+ : * GTT size.
+ : */
+ : switch (INREG(PGETBL_CTL) & PGETBL_SIZE_MASK) {
+ : case PGETBL_SIZE_512KB:
+ : gtt_size = 512;
+ : break;
+ : case PGETBL_SIZE_256KB:
+ : gtt_size = 256;
+ : break;
+ : case PGETBL_SIZE_128KB:
+ : gtt_size = 128;
+ : break;
+ : default:
+ : FatalError("Unknown GTT size value: %08x\n", (int)INREG(PGETBL_CTL));
+ : }
+ : } else if (IS_G33CLASS(pI830)) {
+ : /* G33's GTT size is detect in GMCH_CTRL */
+ : switch (gmch_ctrl & G33_PGETBL_SIZE_MASK) {
+ : case G33_PGETBL_SIZE_1M:
+ : gtt_size = 1024;
+ : break;
+ : case G33_PGETBL_SIZE_2M:
+ : gtt_size = 2048;
+ : break;
+ : default:
+ : FatalError("Unknown GTT size value: %08x\n",
+ : (int)(gmch_ctrl & G33_PGETBL_SIZE_MASK));
+ : }
+ : } else {
+ : /* Older chipsets only had GTT appropriately sized for the aperture. */
+ : gtt_size = pI830->FbMapSize / (1024*1024);
+ : }
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "detected %d kB GTT.\n", gtt_size);
+ :
+ : /* The stolen memory has the GTT at the top, and the 4KB popup below that.
+ : * Everything else can be freely used by the graphics driver.
+ : */
+ : range = gtt_size + 4;
+ :
+ : if (IS_I85X(pI830) || IS_I865G(pI830) || IS_I9XX(pI830)) {
+ : switch (gmch_ctrl & I830_GMCH_GMS_MASK) {
+ : case I855_GMCH_GMS_STOLEN_1M:
+ : memsize = MB(1) - KB(range);
+ : break;
+ : case I855_GMCH_GMS_STOLEN_4M:
+ : memsize = MB(4) - KB(range);
+ : break;
+ : case I855_GMCH_GMS_STOLEN_8M:
+ : memsize = MB(8) - KB(range);
+ : break;
+ : case I855_GMCH_GMS_STOLEN_16M:
+ : memsize = MB(16) - KB(range);
+ : break;
+ : case I855_GMCH_GMS_STOLEN_32M:
+ : memsize = MB(32) - KB(range);
+ : break;
+ : case I915G_GMCH_GMS_STOLEN_48M:
+ : if (IS_I9XX(pI830))
+ : memsize = MB(48) - KB(range);
+ : break;
+ : case I915G_GMCH_GMS_STOLEN_64M:
+ : if (IS_I9XX(pI830))
+ : memsize = MB(64) - KB(range);
+ : break;
+ : case G33_GMCH_GMS_STOLEN_128M:
+ : if (IS_G33CLASS(pI830))
+ : memsize = MB(128) - KB(range);
+ : break;
+ : case G33_GMCH_GMS_STOLEN_256M:
+ : if (IS_G33CLASS(pI830))
+ : memsize = MB(256) - KB(range);
+ : break;
+ : }
+ : } else {
+ : switch (gmch_ctrl & I830_GMCH_GMS_MASK) {
+ : case I830_GMCH_GMS_STOLEN_512:
+ : memsize = KB(512) - KB(range);
+ : break;
+ : case I830_GMCH_GMS_STOLEN_1024:
+ : memsize = MB(1) - KB(range);
+ : break;
+ : case I830_GMCH_GMS_STOLEN_8192:
+ : memsize = MB(8) - KB(range);
+ : break;
+ : case I830_GMCH_GMS_LOCAL:
+ : memsize = 0;
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ : "Local memory found, but won't be used.\n");
+ : break;
+ : }
+ : }
+ :
+ :#if 0
+ : /* And 64KB page aligned */
+ : memsize &= ~0xFFFF;
+ :#endif
+ :
+ : if (memsize > 0) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ : "detected %d kB stolen memory.\n", memsize / 1024);
+ : } else {
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "no video memory detected.\n");
+ : }
+ :
+ : return memsize;
+ :}
+ :
+ :static Bool
+ :I830MapMMIO(ScrnInfoPtr pScrn)
+ :{
+ : int mmioFlags;
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ :#if !defined(__alpha__)
+ : mmioFlags = VIDMEM_MMIO | VIDMEM_READSIDEEFFECT;
+ :#else
+ : mmioFlags = VIDMEM_MMIO | VIDMEM_READSIDEEFFECT | VIDMEM_SPARSE;
+ :#endif
+ :
+ : pI830->MMIOBase = xf86MapPciMem(pScrn->scrnIndex, mmioFlags,
+ : pI830->PciTag,
+ : pI830->MMIOAddr, I810_REG_SIZE);
+ : if (!pI830->MMIOBase)
+ : return FALSE;
+ :
+ : /* Set up the GTT mapping for the various places it has been moved over
+ : * time.
+ : */
+ : if (IS_I9XX(pI830)) {
+ : if (IS_I965G(pI830)) {
+ : pI830->GTTBase = xf86MapPciMem(pScrn->scrnIndex, mmioFlags,
+ : pI830->PciTag,
+ : pI830->MMIOAddr + (512 * 1024),
+ : 512 * 1024);
+ : if (pI830->GTTBase == NULL)
+ : return FALSE;
+ : } else {
+ : CARD32 gttaddr = pI830->PciInfo->memBase[3] & 0xFFFFFF00;
+ :
+ : pI830->GTTBase = xf86MapPciMem(pScrn->scrnIndex, mmioFlags,
+ : pI830->PciTag,
+ : gttaddr,
+ : pI830->FbMapSize / 1024);
+ : if (pI830->GTTBase == NULL)
+ : return FALSE;
+ : }
+ : } else {
+ : /* The GTT aperture on i830 is write-only. We could probably map the
+ : * actual physical pages that back it, but leave it alone for now.
+ : */
+ : pI830->GTTBase = NULL;
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :static Bool
+ :I830MapMem(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : long i;
+ :
+ : for (i = 2; i < pI830->FbMapSize; i <<= 1) ;
+ : pI830->FbMapSize = i;
+ :
+ : if (!I830MapMMIO(pScrn))
+ : return FALSE;
+ :
+ : pI830->FbBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER,
+ : pI830->PciTag,
+ : pI830->LinearAddr, pI830->FbMapSize);
+ : if (!pI830->FbBase)
+ : return FALSE;
+ :
+ : if (I830IsPrimary(pScrn) && pI830->LpRing->mem != NULL) {
+ : pI830->LpRing->virtual_start =
+ : pI830->FbBase + pI830->LpRing->mem->offset;
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :static void
+ :I830UnmapMMIO(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pI830->MMIOBase,
+ : I810_REG_SIZE);
+ : pI830->MMIOBase = NULL;
+ :
+ : if (IS_I9XX(pI830)) {
+ : if (IS_I965G(pI830))
+ : xf86UnMapVidMem(pScrn->scrnIndex, pI830->GTTBase, 512 * 1024);
+ : else {
+ : xf86UnMapVidMem(pScrn->scrnIndex, pI830->GTTBase,
+ : pI830->FbMapSize / 1024);
+ : }
+ : }
+ :}
+ :
+ :static Bool
+ :I830UnmapMem(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pI830->FbBase,
+ : pI830->FbMapSize);
+ : pI830->FbBase = NULL;
+ : I830UnmapMMIO(pScrn);
+ : return TRUE;
+ :}
+ :
+ :static void
+ :I830LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
+ : LOCO * colors, VisualPtr pVisual)
+ :{
+ : xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+ : int i,j, index;
+ : int p;
+ : CARD16 lut_r[256], lut_g[256], lut_b[256];
+ :
+ : DPRINTF(PFX, "I830LoadPalette: numColors: %d\n", numColors);
+ :
+ : for(p = 0; p < xf86_config->num_crtc; p++) {
+ : xf86CrtcPtr crtc = xf86_config->crtc[p];
+ : I830CrtcPrivatePtr intel_crtc = crtc->driver_private;
+ :
+ : /* Initialize to the old lookup table values. */
+ : for (i = 0; i < 256; i++) {
+ : lut_r[i] = intel_crtc->lut_r[i] << 8;
+ : lut_g[i] = intel_crtc->lut_g[i] << 8;
+ : lut_b[i] = intel_crtc->lut_b[i] << 8;
+ : }
+ :
+ : switch(pScrn->depth) {
+ : case 15:
+ : for (i = 0; i < numColors; i++) {
+ : index = indices[i];
+ : for (j = 0; j < 8; j++) {
+ : lut_r[index * 8 + j] = colors[index].red << 8;
+ : lut_g[index * 8 + j] = colors[index].green << 8;
+ : lut_b[index * 8 + j] = colors[index].blue << 8;
+ : }
+ : }
+ : break;
+ : case 16:
+ : for (i = 0; i < numColors; i++) {
+ : index = indices[i];
+ :
+ : if (index <= 31) {
+ : for (j = 0; j < 8; j++) {
+ : lut_r[index * 8 + j] = colors[index].red << 8;
+ : lut_b[index * 8 + j] = colors[index].blue << 8;
+ : }
+ : }
+ :
+ : for (j = 0; j < 4; j++) {
+ : lut_g[index * 4 + j] = colors[index].green << 8;
+ : }
+ : }
+ : break;
+ : default:
+ : for (i = 0; i < numColors; i++) {
+ : index = indices[i];
+ : lut_r[index] = colors[index].red << 8;
+ : lut_g[index] = colors[index].green << 8;
+ : lut_b[index] = colors[index].blue << 8;
+ : }
+ : break;
+ : }
+ :
+ : /* Make the change through RandR */
+ :#ifdef RANDR_12_INTERFACE
+ : RRCrtcGammaSet(crtc->randr_crtc, lut_r, lut_g, lut_b);
+ :#else
+ : crtc->funcs->gamma_set(crtc, lut_r, lut_g, lut_b, 256);
+ :#endif
+ : }
+ :}
+ :
+ :int
+ :i830_output_clones (ScrnInfoPtr pScrn, int type_mask)
+ :{
+ : xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (pScrn);
+ : int o;
+ : int index_mask = 0;
+ :
+ : for (o = 0; o < config->num_output; o++)
+ : {
+ : xf86OutputPtr output = config->output[o];
+ : I830OutputPrivatePtr intel_output = output->driver_private;
+ : if (type_mask & (1 << intel_output->type))
+ : index_mask |= (1 << o);
+ : }
+ : return index_mask;
+ :}
+ :
+ :/**
+ : * Set up the outputs according to what type of chip we are.
+ : *
+ : * Some outputs may not initialize, due to allocation failure or because a
+ : * controller chip isn't found.
+ : */
+ :static void
+ :I830SetupOutputs(ScrnInfoPtr pScrn)
+ :{
+ : xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (pScrn);
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : int o;
+ :
+ : /* everyone has at least a single analog output */
+ : i830_crt_init(pScrn);
+ :
+ : /* Set up integrated LVDS */
+ : if (IS_MOBILE(pI830) && !IS_I830(pI830))
+ : i830_lvds_init(pScrn);
+ :
+ : if (IS_I9XX(pI830)) {
+ : i830_sdvo_init(pScrn, SDVOB);
+ : i830_sdvo_init(pScrn, SDVOC);
+ : } else {
+ : i830_dvo_init(pScrn);
+ : }
+ : if (IS_I9XX(pI830) && !IS_I915G(pI830))
+ : i830_tv_init(pScrn);
+ :
+ : for (o = 0; o < config->num_output; o++)
+ : {
+ : xf86OutputPtr output = config->output[o];
+ : I830OutputPrivatePtr intel_output = output->driver_private;
+ : int crtc_mask;
+ : int c;
+ :
+ : crtc_mask = 0;
+ : for (c = 0; c < config->num_crtc; c++)
+ : {
+ : xf86CrtcPtr crtc = config->crtc[c];
+ : I830CrtcPrivatePtr intel_crtc = crtc->driver_private;
+ :
+ : if (intel_output->pipe_mask & (1 << intel_crtc->pipe))
+ : crtc_mask |= (1 << c);
+ : }
+ : output->possible_crtcs = crtc_mask;
+ : output->possible_clones = i830_output_clones (pScrn, intel_output->clone_mask);
+ : }
+ :}
+ :
+ :/**
+ : * Setup the CRTCs
+ : */
+ :
+ :
+ :static void
+ :I830PreInitDDC(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : if (!xf86LoadSubModule(pScrn, "ddc")) {
+ : pI830->ddc2 = FALSE;
+ : } else {
+ : xf86LoaderReqSymLists(I810ddcSymbols, NULL);
+ : pI830->ddc2 = TRUE;
+ : }
+ :
+ : /* DDC can use I2C bus */
+ : /* Load I2C if we have the code to use it */
+ : if (pI830->ddc2) {
+ : if (xf86LoadSubModule(pScrn, "i2c")) {
+ : xf86LoaderReqSymLists(I810i2cSymbols, NULL);
+ :
+ : pI830->ddc2 = TRUE;
+ : } else {
+ : pI830->ddc2 = FALSE;
+ : }
+ : }
+ :}
+ :
+ :static void
+ :PreInitCleanup(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : if (I830IsPrimary(pScrn)) {
+ : if (pI830->entityPrivate)
+ : pI830->entityPrivate->pScrn_1 = NULL;
+ : } else {
+ : if (pI830->entityPrivate)
+ : pI830->entityPrivate->pScrn_2 = NULL;
+ : }
+ : if (pI830->swfSaved) {
+ : OUTREG(SWF0, pI830->saveSWF0);
+ : OUTREG(SWF4, pI830->saveSWF4);
+ : }
+ : if (pI830->MMIOBase)
+ : I830UnmapMMIO(pScrn);
+ : I830FreeRec(pScrn);
+ :}
+ :
+ :Bool
+ :I830IsPrimary(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : if (xf86IsEntityShared(pScrn->entityList[0])) {
+ : if (pI830->init == 0) return TRUE;
+ : else return FALSE;
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :static Bool
+ :i830_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height)
+ :{
+ : scrn->virtualX = width;
+ : scrn->virtualY = height;
+ : return TRUE;
+ :}
+ :
+ :static const xf86CrtcConfigFuncsRec i830_xf86crtc_config_funcs = {
+ : i830_xf86crtc_resize
+ :};
+ :
+ :#define HOTKEY_BIOS_SWITCH 0
+ :#define HOTKEY_DRIVER_NOTIFY 1
+ :
+ :/**
+ : * Controls the BIOS's behavior on hotkey switch.
+ : *
+ : * If the mode is HOTKEY_BIOS_SWITCH, the BIOS will be set to do a mode switch
+ : * on its own and update the state in the scratch register.
+ : * If the mode is HOTKEY_DRIVER_NOTIFY, the BIOS won't do a mode switch and
+ : * will just update the state to represent what it would have been switched to.
+ : */
+ :static void
+ :i830SetHotkeyControl(ScrnInfoPtr pScrn, int mode)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : CARD8 gr18;
+ :
+ : gr18 = pI830->readControl(pI830, GRX, 0x18);
+ : if (mode == HOTKEY_BIOS_SWITCH)
+ : gr18 &= ~HOTKEY_VBIOS_SWITCH_BLOCK;
+ : else
+ : gr18 |= HOTKEY_VBIOS_SWITCH_BLOCK;
+ : pI830->writeControl(pI830, GRX, 0x18, gr18);
+ :}
+ :
+ :/**
+ : * This is called per zaphod head (so usually just once) to do initialization
+ : * before the Screen is created.
+ : *
+ : * This code generally covers probing, module loading, option handling
+ : * card mapping, and RandR setup.
+ : */
+ :static Bool
+ :I830PreInit(ScrnInfoPtr pScrn, int flags)
+ :{
+ : xf86CrtcConfigPtr xf86_config;
+ : vgaHWPtr hwp;
+ : I830Ptr pI830;
+ : MessageType from = X_PROBED;
+ : rgb defaultWeight = { 0, 0, 0 };
+ : EntityInfoPtr pEnt;
+ : I830EntPtr pI830Ent = NULL;
+ : int flags24;
+ : int i;
+ : char *s;
+ : pointer pVBEModule = NULL;
+ : const char *chipname;
+ : int num_pipe;
+ : int max_width, max_height;
+ :
+ : if (pScrn->numEntities != 1)
+ : return FALSE;
+ :
+ : /* Load int10 module */
+ : if (!xf86LoadSubModule(pScrn, "int10"))
+ : return FALSE;
+ : xf86LoaderReqSymLists(I810int10Symbols, NULL);
+ :
+ : /* Load vbe module */
+ : if (!(pVBEModule = xf86LoadSubModule(pScrn, "vbe")))
+ : return FALSE;
+ : xf86LoaderReqSymLists(I810vbeSymbols, NULL);
+ :
+ : pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
+ :
+ : if (flags & PROBE_DETECT) {
+ : I830ProbeDDC(pScrn, pEnt->index);
+ : return TRUE;
+ : }
+ :
+ : /* The vgahw module should be loaded here when needed */
+ : if (!xf86LoadSubModule(pScrn, "vgahw"))
+ : return FALSE;
+ : xf86LoaderReqSymLists(I810vgahwSymbols, NULL);
+ :
+ : /* Allocate a vgaHWRec */
+ : if (!vgaHWGetHWRec(pScrn))
+ : return FALSE;
+ :
+ : /* Allocate driverPrivate */
+ : if (!I830GetRec(pScrn))
+ : return FALSE;
+ :
+ : pI830 = I830PTR(pScrn);
+ : pI830->SaveGeneration = -1;
+ : pI830->pEnt = pEnt;
+ :
+ : pScrn->displayWidth = 640; /* default it */
+ :
+ : if (pI830->pEnt->location.type != BUS_PCI)
+ : return FALSE;
+ :
+ : pI830->PciInfo = xf86GetPciInfoForEntity(pI830->pEnt->index);
+ : pI830->PciTag = pciTag(pI830->PciInfo->bus, pI830->PciInfo->device,
+ : pI830->PciInfo->func);
+ :
+ : /* Allocate an entity private if necessary */
+ : if (xf86IsEntityShared(pScrn->entityList[0])) {
+ : pI830Ent = xf86GetEntityPrivate(pScrn->entityList[0],
+ : I830EntityIndex)->ptr;
+ : pI830->entityPrivate = pI830Ent;
+ : } else
+ : pI830->entityPrivate = NULL;
+ :
+ : if (xf86RegisterResources(pI830->pEnt->index, NULL, ResNone)) {
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ :
+ : if (xf86IsEntityShared(pScrn->entityList[0])) {
+ : if (xf86IsPrimInitDone(pScrn->entityList[0])) {
+ : pI830->init = 1;
+ :
+ : if (!pI830Ent->pScrn_1) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Failed to setup second head due to primary head failure.\n");
+ : return FALSE;
+ : }
+ : } else {
+ : xf86SetPrimInitDone(pScrn->entityList[0]);
+ : pI830->init = 0;
+ : }
+ : }
+ :
+ : if (xf86IsEntityShared(pScrn->entityList[0])) {
+ : if (!I830IsPrimary(pScrn)) {
+ : pI830Ent->pScrn_2 = pScrn;
+ : } else {
+ : pI830Ent->pScrn_1 = pScrn;
+ : pI830Ent->pScrn_2 = NULL;
+ : }
+ : }
+ :
+ : pScrn->racMemFlags = RAC_FB | RAC_COLORMAP;
+ : pScrn->monitor = pScrn->confScreen->monitor;
+ : pScrn->progClock = TRUE;
+ : pScrn->rgbBits = 8;
+ :
+ : flags24 = Support32bppFb | PreferConvert24to32 | SupportConvert24to32;
+ :
+ : if (!xf86SetDepthBpp(pScrn, 0, 0, 0, flags24))
+ : return FALSE;
+ :
+ : switch (pScrn->depth) {
+ : case 8:
+ : case 15:
+ : case 16:
+ : case 24:
+ : break;
+ : default:
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Given depth (%d) is not supported by I830 driver\n",
+ : pScrn->depth);
+ : return FALSE;
+ : }
+ : xf86PrintDepthBpp(pScrn);
+ :
+ : if (!xf86SetWeight(pScrn, defaultWeight, defaultWeight))
+ : return FALSE;
+ : if (!xf86SetDefaultVisual(pScrn, -1))
+ : return FALSE;
+ :
+ : hwp = VGAHWPTR(pScrn);
+ : pI830->cpp = pScrn->bitsPerPixel / 8;
+ :
+ : pI830->preinit = TRUE;
+ :
+ : /* Process the options */
+ : xf86CollectOptions(pScrn, NULL);
+ : if (!(pI830->Options = xalloc(sizeof(I830Options))))
+ : return FALSE;
+ : memcpy(pI830->Options, I830Options, sizeof(I830Options));
+ : xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, pI830->Options);
+ :
+ : if (xf86ReturnOptValBool(pI830->Options, OPTION_MODEDEBUG, FALSE)) {
+ : pI830->debug_modes = TRUE;
+ : } else {
+ : pI830->debug_modes = FALSE;
+ : }
+ :
+ : /* We have to use PIO to probe, because we haven't mapped yet. */
+ : I830SetPIOAccess(pI830);
+ :
+ : switch (pI830->PciInfo->chipType) {
+ : case PCI_CHIP_I830_M:
+ : chipname = "830M";
+ : break;
+ : case PCI_CHIP_845_G:
+ : chipname = "845G";
+ : break;
+ : case PCI_CHIP_I855_GM:
+ : /* Check capid register to find the chipset variant */
+ : pI830->variant = (pciReadLong(pI830->PciTag, I85X_CAPID)
+ : >> I85X_VARIANT_SHIFT) & I85X_VARIANT_MASK;
+ : switch (pI830->variant) {
+ : case I855_GM:
+ : chipname = "855GM";
+ : break;
+ : case I855_GME:
+ : chipname = "855GME";
+ : break;
+ : case I852_GM:
+ : chipname = "852GM";
+ : break;
+ : case I852_GME:
+ : chipname = "852GME";
+ : break;
+ : default:
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ : "Unknown 852GM/855GM variant: 0x%x)\n", pI830->variant);
+ : chipname = "852GM/855GM (unknown variant)";
+ : break;
+ : }
+ : break;
+ : case PCI_CHIP_I865_G:
+ : chipname = "865G";
+ : break;
+ : case PCI_CHIP_I915_G:
+ : chipname = "915G";
+ : break;
+ : case PCI_CHIP_E7221_G:
+ : chipname = "E7221 (i915)";
+ : break;
+ : case PCI_CHIP_I915_GM:
+ : chipname = "915GM";
+ : break;
+ : case PCI_CHIP_I945_G:
+ : chipname = "945G";
+ : break;
+ : case PCI_CHIP_I945_GM:
+ : chipname = "945GM";
+ : break;
+ : case PCI_CHIP_I945_GME:
+ : chipname = "945GME";
+ : break;
+ : case PCI_CHIP_I965_G:
+ : case PCI_CHIP_I965_G_1:
+ : chipname = "965G";
+ : break;
+ : case PCI_CHIP_I965_Q:
+ : chipname = "965Q";
+ : break;
+ : case PCI_CHIP_I946_GZ:
+ : chipname = "946GZ";
+ : break;
+ : case PCI_CHIP_I965_GM:
+ : chipname = "965GM";
+ : break;
+ : case PCI_CHIP_I965_GME:
+ : chipname = "965GME/GLE";
+ : break;
+ : case PCI_CHIP_G33_G:
+ : chipname = "G33";
+ : break;
+ : case PCI_CHIP_Q35_G:
+ : chipname = "Q35";
+ : break;
+ : case PCI_CHIP_Q33_G:
+ : chipname = "Q33";
+ : break;
+ : default:
+ : chipname = "unknown chipset";
+ : break;
+ : }
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ : "Integrated Graphics Chipset: Intel(R) %s\n", chipname);
+ :
+ : /* Set the Chipset and ChipRev, allowing config file entries to override. */
+ : if (pI830->pEnt->device->chipset && *pI830->pEnt->device->chipset) {
+ : pScrn->chipset = pI830->pEnt->device->chipset;
+ : from = X_CONFIG;
+ : } else if (pI830->pEnt->device->chipID >= 0) {
+ : pScrn->chipset = (char *)xf86TokenToString(I830Chipsets,
+ : pI830->pEnt->device->chipID);
+ : from = X_CONFIG;
+ : xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "ChipID override: 0x%04X\n",
+ : pI830->pEnt->device->chipID);
+ : pI830->PciInfo->chipType = pI830->pEnt->device->chipID;
+ : } else {
+ : from = X_PROBED;
+ : pScrn->chipset = (char *)xf86TokenToString(I830Chipsets,
+ : pI830->PciInfo->chipType);
+ : }
+ :
+ : if (pI830->pEnt->device->chipRev >= 0) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "ChipRev override: %d\n",
+ : pI830->pEnt->device->chipRev);
+ : }
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, from, "Chipset: \"%s\"\n",
+ : (pScrn->chipset != NULL) ? pScrn->chipset : "Unknown i8xx");
+ :
+ : if (pI830->pEnt->device->MemBase != 0) {
+ : pI830->LinearAddr = pI830->pEnt->device->MemBase;
+ : from = X_CONFIG;
+ : } else {
+ : if (IS_I9XX(pI830)) {
+ : pI830->LinearAddr = pI830->PciInfo->memBase[2] & 0xFF000000;
+ : from = X_PROBED;
+ : } else if (pI830->PciInfo->memBase[1] != 0) {
+ : /* XXX Check mask. */
+ : pI830->LinearAddr = pI830->PciInfo->memBase[0] & 0xFF000000;
+ : from = X_PROBED;
+ : } else {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "No valid FB address in PCI config space\n");
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ : }
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, from, "Linear framebuffer at 0x%lX\n",
+ : (unsigned long)pI830->LinearAddr);
+ :
+ : if (pI830->pEnt->device->IOBase != 0) {
+ : pI830->MMIOAddr = pI830->pEnt->device->IOBase;
+ : from = X_CONFIG;
+ : } else {
+ : if (IS_I9XX(pI830)) {
+ : pI830->MMIOAddr = pI830->PciInfo->memBase[0] & 0xFFF80000;
+ : from = X_PROBED;
+ : } else if (pI830->PciInfo->memBase[1]) {
+ : pI830->MMIOAddr = pI830->PciInfo->memBase[1] & 0xFFF80000;
+ : from = X_PROBED;
+ : } else {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "No valid MMIO address in PCI config space\n");
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ : }
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, from, "IO registers at addr 0x%lX\n",
+ : (unsigned long)pI830->MMIOAddr);
+ :
+ : /* Allocate an xf86CrtcConfig */
+ : xf86CrtcConfigInit (pScrn, &i830_xf86crtc_config_funcs);
+ : xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+ :
+ : /* See i830_exa.c comments for why we limit the framebuffer size like this.
+ : */
+ : if (IS_I965G(pI830)) {
+ : max_width = 8192;
+ : max_height = 8192;
+ : } else {
+ : max_width = 2048;
+ : max_height = 2048;
+ : }
+ : xf86CrtcSetSizeRange (pScrn, 320, 200, max_width, max_height);
+ :
+ : if (IS_I830(pI830) || IS_845G(pI830)) {
+ : PCITAG bridge;
+ : CARD16 gmch_ctrl;
+ :
+ : bridge = pciTag(0, 0, 0); /* This is always the host bridge */
+ : gmch_ctrl = pciReadWord(bridge, I830_GMCH_CTRL);
+ : if ((gmch_ctrl & I830_GMCH_MEM_MASK) == I830_GMCH_MEM_128M) {
+ : pI830->FbMapSize = 0x8000000;
+ : } else {
+ : pI830->FbMapSize = 0x4000000; /* 64MB - has this been tested ?? */
+ : }
+ : } else {
+ : if (IS_I9XX(pI830)) {
+ : pI830->FbMapSize = 1UL << pciGetBaseSize(pI830->PciTag, 2, TRUE,
+ : NULL);
+ : } else {
+ : /* 128MB aperture for later i8xx series. */
+ : pI830->FbMapSize = 0x8000000;
+ : }
+ : }
+ :
+ : /* Some of the probing needs MMIO access, so map it here. */
+ : I830MapMMIO(pScrn);
+ :
+ : if (pI830->debug_modes) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Hardware state on X startup:\n");
+ : i830DumpRegs (pScrn);
+ : }
+ :
+ : i830TakeRegSnapshot(pScrn);
+ :
+ :#if 1
+ : pI830->saveSWF0 = INREG(SWF0);
+ : pI830->saveSWF4 = INREG(SWF4);
+ : pI830->swfSaved = TRUE;
+ :
+ : /* Set "extended desktop" */
+ : OUTREG(SWF0, pI830->saveSWF0 | (1 << 21));
+ :
+ : /* Set "driver loaded", "OS unknown", "APM 1.2" */
+ : OUTREG(SWF4, (pI830->saveSWF4 & ~((3 << 19) | (7 << 16))) |
+ : (1 << 23) | (2 << 16));
+ :#endif
+ :
+ : if (pI830->PciInfo->chipType == PCI_CHIP_E7221_G)
+ : num_pipe = 1;
+ : else
+ : if (IS_MOBILE(pI830) || IS_I9XX(pI830))
+ : num_pipe = 2;
+ : else
+ : num_pipe = 1;
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "%d display pipe%s available.\n",
+ : num_pipe, num_pipe > 1 ? "s" : "");
+ :
+ : if (xf86ReturnOptValBool(pI830->Options, OPTION_NOACCEL, FALSE)) {
+ : pI830->noAccel = TRUE;
+ : }
+ :
+ : /*
+ : * The ugliness below:
+ : * If either XAA or EXA (exclusive) is compiled in, default to it.
+ : *
+ : * If both are compiled in, and the user didn't specify noAccel, use the
+ : * config option AccelMethod to determine which to use, defaulting to XAA
+ : * if none is specified, or if the string was unrecognized.
+ : *
+ : * All this *could* go away if we removed XAA support from this driver,
+ : * for example. :)
+ : */
+ : if (!pI830->noAccel) {
+ :#if (defined(I830_USE_EXA) && defined(I830_USE_XAA)) || !defined(I830_USE_EXA)
+ : pI830->useEXA = FALSE;
+ :#else
+ : pI830->useEXA = TRUE;
+ :#endif
+ :#if defined(I830_USE_XAA) && defined(I830_USE_EXA)
+ : int from = X_DEFAULT;
+ : if ((s = (char *)xf86GetOptValString(pI830->Options,
+ : OPTION_ACCELMETHOD))) {
+ : if (!xf86NameCmp(s, "EXA")) {
+ : from = X_CONFIG;
+ : pI830->useEXA = TRUE;
+ : }
+ : else if (!xf86NameCmp(s, "XAA")) {
+ : from = X_CONFIG;
+ : pI830->useEXA = FALSE;
+ : }
+ : }
+ :#endif
+ : xf86DrvMsg(pScrn->scrnIndex, from, "Using %s for acceleration\n",
+ : pI830->useEXA ? "EXA" : "XAA");
+ : }
+ :
+ : if (xf86ReturnOptValBool(pI830->Options, OPTION_SW_CURSOR, FALSE)) {
+ : pI830->SWCursor = TRUE;
+ : }
+ :
+ : pI830->directRenderingDisabled =
+ : !xf86ReturnOptValBool(pI830->Options, OPTION_DRI, TRUE);
+ :
+ :#ifdef XF86DRI
+ : if (!pI830->directRenderingDisabled) {
+ : if (pI830->noAccel || pI830->SWCursor) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "DRI is disabled because it "
+ : "needs HW cursor and 2D acceleration.\n");
+ : pI830->directRenderingDisabled = TRUE;
+ : } else if (pScrn->depth != 16 && pScrn->depth != 24) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "DRI is disabled because it "
+ : "runs only at depths 16 and 24.\n");
+ : pI830->directRenderingDisabled = TRUE;
+ : }
+ :
+ : pI830->mmModeFlags = 0;
+ :
+ : if (!pI830->directRenderingDisabled) {
+ : pI830->mmModeFlags = I830_KERNEL_TEX;
+ :#ifdef XF86DRI_MM
+ : Bool tmp = FALSE;
+ :
+ : if (!IS_I965G(pI830))
+ : pI830->mmModeFlags |= I830_KERNEL_MM;
+ :#endif
+ :
+ : from = X_PROBED;
+ :
+ :#ifdef XF86DRI_MM
+ : if (xf86GetOptValBool(pI830->Options,
+ : OPTION_INTELTEXPOOL, &tmp)) {
+ : from = X_CONFIG;
+ : if (tmp) {
+ : pI830->mmModeFlags |= I830_KERNEL_TEX;
+ : pI830->mmModeFlags &= ~I830_KERNEL_MM;
+ : } else {
+ : pI830->mmModeFlags &= ~I830_KERNEL_TEX;
+ : pI830->mmModeFlags |= I830_KERNEL_MM;
+ : }
+ : }
+ :#endif
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, from,
+ : "Will %stry to allocate texture pool "
+ : "for old Mesa 3D driver.\n",
+ : (pI830->mmModeFlags & I830_KERNEL_TEX) ?
+ : "" : "not ");
+ :
+ :#ifdef XF86DRI_MM
+ : pI830->mmSize = I830_MM_MAXSIZE;
+ : from = X_INFO;
+ : if (xf86GetOptValInteger(pI830->Options, OPTION_INTELMMSIZE,
+ : &(pI830->mmSize))) {
+ : from = X_CONFIG;
+ : }
+ : xf86DrvMsg(pScrn->scrnIndex, from,
+ : "Will try to reserve %d kiB of AGP aperture space\n"
+ : "\tfor the DRM memory manager.\n",
+ : pI830->mmSize);
+ :#endif
+ : }
+ : }
+ :
+ :#endif
+ :
+ : I830PreInitDDC(pScrn);
+ : for (i = 0; i < num_pipe; i++) {
+ : i830_crtc_init(pScrn, i);
+ : }
+ : I830SetupOutputs(pScrn);
+ :
+ : SaveHWState(pScrn);
+ : if (!xf86InitialConfiguration (pScrn, FALSE))
+ : {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes.\n");
+ : RestoreHWState(pScrn);
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ : RestoreHWState(pScrn);
+ :
+ : /* XXX This should go away, replaced by xf86Crtc.c support for it */
+ : pI830->rotation = RR_Rotate_0;
+ :
+ : /*
+ : * Let's setup the mobile systems to check the lid status
+ : */
+ : if (IS_MOBILE(pI830)) {
+ : pI830->checkDevices = TRUE;
+ :
+ : if (!xf86ReturnOptValBool(pI830->Options, OPTION_CHECKDEVICES, TRUE)) {
+ : pI830->checkDevices = FALSE;
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Monitoring connected displays disabled\n");
+ : } else
+ : if (pI830->entityPrivate && !I830IsPrimary(pScrn) &&
+ : !I830PTR(pI830->entityPrivate->pScrn_1)->checkDevices) {
+ : /* If checklid is off, on the primary head, then
+ : * turn it off on the secondary*/
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Monitoring connected displays disabled\n");
+ : pI830->checkDevices = FALSE;
+ : } else
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Monitoring connected displays enabled\n");
+ : } else
+ : pI830->checkDevices = FALSE;
+ :
+ : pI830->stolen_size = I830DetectMemory(pScrn);
+ :
+ : pI830->XvDisabled =
+ : !xf86ReturnOptValBool(pI830->Options, OPTION_XVIDEO, TRUE);
+ :
+ :#ifdef I830_XV
+ : if (xf86GetOptValInteger(pI830->Options, OPTION_VIDEO_KEY,
+ : &(pI830->colorKey))) {
+ : from = X_CONFIG;
+ : } else if (xf86GetOptValInteger(pI830->Options, OPTION_COLOR_KEY,
+ : &(pI830->colorKey))) {
+ : from = X_CONFIG;
+ : } else {
+ : pI830->colorKey = (1 << pScrn->offset.red) |
+ : (1 << pScrn->offset.green) |
+ : (((pScrn->mask.blue >> pScrn->offset.blue) - 1) <<
+ : pScrn->offset.blue);
+ : from = X_DEFAULT;
+ : }
+ : xf86DrvMsg(pScrn->scrnIndex, from, "video overlay key set to 0x%x\n",
+ : pI830->colorKey);
+ :#endif
+ :
+ :#ifdef XF86DRI
+ : pI830->allowPageFlip = FALSE;
+ : from = (!pI830->directRenderingDisabled &&
+ : xf86GetOptValBool(pI830->Options, OPTION_PAGEFLIP,
+ : &pI830->allowPageFlip)) ? X_CONFIG : X_DEFAULT;
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, from, "Will%s try to enable page flipping\n",
+ : pI830->allowPageFlip ? "" : " not");
+ :#endif
+ :
+ :#ifdef XF86DRI
+ : pI830->TripleBuffer = FALSE;
+ : from = (!pI830->directRenderingDisabled &&
+ : xf86GetOptValBool(pI830->Options, OPTION_TRIPLEBUFFER,
+ : &pI830->TripleBuffer)) ? X_CONFIG : X_DEFAULT;
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, from, "Triple buffering %sabled\n",
+ : pI830->TripleBuffer ? "en" : "dis");
+ :#endif
+ :
+ : /*
+ : * If the driver can do gamma correction, it should call xf86SetGamma() here.
+ : */
+ :
+ : {
+ : Gamma zeros = { 0.0, 0.0, 0.0 };
+ :
+ : if (!xf86SetGamma(pScrn, zeros)) {
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ : }
+ :
+ : /* Check if the HW cursor needs physical address. */
+ : if (IS_MOBILE(pI830) || IS_I9XX(pI830))
+ : pI830->CursorNeedsPhysical = TRUE;
+ : else
+ : pI830->CursorNeedsPhysical = FALSE;
+ :
+ : if (IS_I965G(pI830) || IS_G33CLASS(pI830))
+ : pI830->CursorNeedsPhysical = FALSE;
+ :
+ : /*
+ : * XXX If we knew the pre-initialised GTT format for certain, we could
+ : * probably figure out the physical address even in the StolenOnly case.
+ : */
+ : if (!I830IsPrimary(pScrn)) {
+ : I830Ptr pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
+ : if (!pI8301->SWCursor) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ : "Using HW Cursor because it's enabled on primary head.\n");
+ : pI830->SWCursor = FALSE;
+ : }
+ : } else
+ : if (pI830->StolenOnly && pI830->CursorNeedsPhysical && !pI830->SWCursor) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ : "HW Cursor disabled because it needs agpgart memory.\n");
+ : pI830->SWCursor = TRUE;
+ : }
+ :
+ : if (pScrn->modes == NULL) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No modes.\n");
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ : pScrn->currentMode = pScrn->modes;
+ :
+ : if (!IS_I965G(pI830) && pScrn->virtualY > 2048) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Cannot support > 2048 vertical lines. disabling acceleration.\n");
+ : pI830->noAccel = TRUE;
+ : }
+ :
+ : /* Don't need MMIO access anymore. */
+ : if (pI830->swfSaved) {
+ : OUTREG(SWF0, pI830->saveSWF0);
+ : OUTREG(SWF4, pI830->saveSWF4);
+ : }
+ :
+ : /* Set display resolution */
+ : xf86SetDpi(pScrn, 0, 0);
+ :
+ : /* Load the required sub modules */
+ : if (!xf86LoadSubModule(pScrn, "fb")) {
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ :
+ : xf86LoaderReqSymLists(I810fbSymbols, NULL);
+ :
+ :#ifdef I830_USE_XAA
+ : if (!pI830->noAccel && !pI830->useEXA) {
+ : if (!xf86LoadSubModule(pScrn, "xaa")) {
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ : xf86LoaderReqSymLists(I810xaaSymbols, NULL);
+ : }
+ :#endif
+ :
+ :#ifdef I830_USE_EXA
+ : if (!pI830->noAccel && pI830->useEXA) {
+ : XF86ModReqInfo req;
+ : int errmaj, errmin;
+ :
+ : memset(&req, 0, sizeof(req));
+ : req.majorversion = 2;
+ : req.minorversion = 1;
+ : if (!LoadSubModule(pScrn->module, "exa", NULL, NULL, NULL, &req,
+ : &errmaj, &errmin)) {
+ : LoaderErrorMsg(NULL, "exa", errmaj, errmin);
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ : xf86LoaderReqSymLists(I830exaSymbols, NULL);
+ : }
+ :#endif
+ : if (!pI830->SWCursor) {
+ : if (!xf86LoadSubModule(pScrn, "ramdac")) {
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ : xf86LoaderReqSymLists(I810ramdacSymbols, NULL);
+ : }
+ :
+ : i830CompareRegsToSnapshot(pScrn, "After PreInit");
+ :
+ : I830UnmapMMIO(pScrn);
+ :
+ : /* We won't be using the VGA access after the probe. */
+ : I830SetMMIOAccess(pI830);
+ : xf86SetOperatingState(resVgaIo, pI830->pEnt->index, ResUnusedOpr);
+ : xf86SetOperatingState(resVgaMem, pI830->pEnt->index, ResDisableOpr);
+ :
+ :#if 0
+ : if (I830IsPrimary(pScrn)) {
+ : vbeFree(pI830->pVbe);
+ : }
+ : pI830->pVbe = NULL;
+ :#endif
+ :
+ :#if defined(XF86DRI)
+ : /* Load the dri module if requested. */
+ : if (xf86ReturnOptValBool(pI830->Options, OPTION_DRI, FALSE) &&
+ : !pI830->directRenderingDisabled) {
+ : if (xf86LoadSubModule(pScrn, "dri")) {
+ : xf86LoaderReqSymLists(I810driSymbols, I810drmSymbols, NULL);
+ : }
+ : }
+ :#endif
+ :
+ : pI830->preinit = FALSE;
+ :
+ : return TRUE;
+ :}
+ :
+ :/*
+ : * Reset registers that it doesn't make sense to save/restore to a sane state.
+ : * This is basically the ring buffer and fence registers. Restoring these
+ : * doesn't make sense without restoring GTT mappings. This is something that
+ : * whoever gets control next should do.
+ : */
+ :static void
+ :ResetState(ScrnInfoPtr pScrn, Bool flush)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : int i;
+ : unsigned long temp;
+ :
+ : DPRINTF(PFX, "ResetState: flush is %s\n", BOOLTOSTRING(flush));
+ :
+ : if (!I830IsPrimary(pScrn)) return;
+ :
+ : if (pI830->entityPrivate)
+ : pI830->entityPrivate->RingRunning = 0;
+ :
+ : /* Reset the fence registers to 0 */
+ : if (IS_I965G(pI830)) {
+ : for (i = 0; i < FENCE_NEW_NR; i++) {
+ : OUTREG(FENCE_NEW + i * 8, 0);
+ : OUTREG(FENCE_NEW + 4 + i * 8, 0);
+ : }
+ : } else {
+ : for (i = 0; i < FENCE_NR; i++)
+ : OUTREG(FENCE + i * 4, 0);
+ : }
+ : /* Flush the ring buffer (if enabled), then disable it. */
+ : /* God this is ugly */
+ :#define flush_ring() do { \
+ : temp = INREG(LP_RING + RING_LEN); \
+ : if (temp & RING_VALID) { \
+ : I830RefreshRing(pScrn); \
+ : I830Sync(pScrn); \
+ : DO_RING_IDLE(); \
+ : } \
+ : } while(0)
+ :#ifdef I830_USE_XAA
+ : if (!pI830->useEXA && flush && pI830->AccelInfoRec)
+ : flush_ring();
+ :#endif
+ :#ifdef I830_USE_EXA
+ : if (pI830->useEXA && flush && pI830->EXADriverPtr)
+ : flush_ring();
+ :#endif
+ :
+ : OUTREG(LP_RING + RING_LEN, 0);
+ : OUTREG(LP_RING + RING_HEAD, 0);
+ : OUTREG(LP_RING + RING_TAIL, 0);
+ : OUTREG(LP_RING + RING_START, 0);
+ :
+ : xf86_hide_cursors (pScrn);
+ :}
+ :
+ :static void
+ :SetFenceRegs(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : int i;
+ :
+ : DPRINTF(PFX, "SetFenceRegs\n");
+ :
+ : if (!I830IsPrimary(pScrn)) return;
+ :
+ : if (IS_I965G(pI830)) {
+ : for (i = 0; i < FENCE_NEW_NR; i++) {
+ : OUTREG(FENCE_NEW + i * 8, pI830->fence[i]);
+ : OUTREG(FENCE_NEW + 4 + i * 8, pI830->fence[i+FENCE_NEW_NR]);
+ : if (I810_DEBUG & DEBUG_VERBOSE_VGA) {
+ : ErrorF("Fence Start Register : %x\n", pI830->fence[i]);
+ : ErrorF("Fence End Register : %x\n", pI830->fence[i+FENCE_NEW_NR]);
+ : }
+ : }
+ : } else {
+ : for (i = 0; i < FENCE_NR; i++) {
+ : OUTREG(FENCE + i * 4, pI830->fence[i]);
+ : if (I810_DEBUG & DEBUG_VERBOSE_VGA)
+ : ErrorF("Fence Register : %x\n", pI830->fence[i]);
+ : }
+ : }
+ :}
+ :
+ :static void
+ :SetRingRegs(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : unsigned int itemp;
+ :
+ : DPRINTF(PFX, "SetRingRegs\n");
+ :
+ : if (pI830->noAccel)
+ : return;
+ :
+ : if (!I830IsPrimary(pScrn)) return;
+ :
+ : if (pI830->entityPrivate)
+ : pI830->entityPrivate->RingRunning = 1;
+ :
+ : OUTREG(LP_RING + RING_LEN, 0);
+ : OUTREG(LP_RING + RING_TAIL, 0);
+ : OUTREG(LP_RING + RING_HEAD, 0);
+ :
+ : assert((pI830->LpRing->mem->offset & I830_RING_START_MASK) ==
+ : pI830->LpRing->mem->offset);
+ :
+ : /* Don't care about the old value. Reserved bits must be zero anyway. */
+ : itemp = pI830->LpRing->mem->offset;
+ : OUTREG(LP_RING + RING_START, itemp);
+ :
+ : if (((pI830->LpRing->mem->size - 4096) & I830_RING_NR_PAGES) !=
+ : pI830->LpRing->mem->size - 4096) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "I830SetRingRegs: Ring buffer size - 4096 (%lx) violates its "
+ : "mask (%x)\n", pI830->LpRing->mem->size - 4096,
+ : I830_RING_NR_PAGES);
+ : }
+ : /* Don't care about the old value. Reserved bits must be zero anyway. */
+ : itemp = (pI830->LpRing->mem->size - 4096) & I830_RING_NR_PAGES;
+ : itemp |= (RING_NO_REPORT | RING_VALID);
+ : OUTREG(LP_RING + RING_LEN, itemp);
+ : I830RefreshRing(pScrn);
+ :}
+ :
+ :/*
+ : * This should be called everytime the X server gains control of the screen,
+ : * before any video modes are programmed (ScreenInit, EnterVT).
+ : */
+ :static void
+ :SetHWOperatingState(ScrnInfoPtr pScrn)
+ :{
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : DPRINTF(PFX, "SetHWOperatingState\n");
+ :
+ : /* Disable clock gating reported to work incorrectly according to the specs.
+ : */
+ : if (IS_I965GM(pI830)) {
+ : OUTREG(RENCLK_GATE_D1, I965_RCC_CLOCK_GATE_DISABLE);
+ : } else if (IS_I965G(pI830)) {
+ : OUTREG(RENCLK_GATE_D1,
+ : I965_RCC_CLOCK_GATE_DISABLE | I965_ISC_CLOCK_GATE_DISABLE);
+ : } else if (IS_I855(pI830) || IS_I865G(pI830)) {
+ : OUTREG(RENCLK_GATE_D1, SV_CLOCK_GATE_DISABLE);
+ : } else if (IS_I830(pI830)) {
+ : OUTREG(DSPCLK_GATE_D, OVRUNIT_CLOCK_GATE_DISABLE);
+ : }
+ :
+ : if (!pI830->noAccel)
+ : SetRingRegs(pScrn);
+ : SetFenceRegs(pScrn);
+ : if (!pI830->SWCursor)
+ : I830InitHWCursor(pScrn);
+ :}
+ :
+ :static Bool
+ :SaveHWState(ScrnInfoPtr pScrn)
+ :{
+ : xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : vgaHWPtr hwp = VGAHWPTR(pScrn);
+ : vgaRegPtr vgaReg = &hwp->SavedReg;
+ : int i;
+ :
+ : /* Save video mode information for native mode-setting. */
+ : pI830->saveDSPACNTR = INREG(DSPACNTR);
+ : pI830->savePIPEACONF = INREG(PIPEACONF);
+ : pI830->savePIPEASRC = INREG(PIPEASRC);
+ : pI830->saveFPA0 = INREG(FPA0);
+ : pI830->saveFPA1 = INREG(FPA1);
+ : pI830->saveDPLL_A = INREG(DPLL_A);
+ : if (IS_I965G(pI830))
+ : pI830->saveDPLL_A_MD = INREG(DPLL_A_MD);
+ : pI830->saveHTOTAL_A = INREG(HTOTAL_A);
+ : pI830->saveHBLANK_A = INREG(HBLANK_A);
+ : pI830->saveHSYNC_A = INREG(HSYNC_A);
+ : pI830->saveVTOTAL_A = INREG(VTOTAL_A);
+ : pI830->saveVBLANK_A = INREG(VBLANK_A);
+ : pI830->saveVSYNC_A = INREG(VSYNC_A);
+ : pI830->saveBCLRPAT_A = INREG(BCLRPAT_A);
+ : pI830->saveDSPASTRIDE = INREG(DSPASTRIDE);
+ : pI830->saveDSPASIZE = INREG(DSPASIZE);
+ : pI830->saveDSPAPOS = INREG(DSPAPOS);
+ : pI830->saveDSPABASE = INREG(DSPABASE);
+ :
+ : for(i= 0; i < 256; i++) {
+ : pI830->savePaletteA[i] = INREG(PALETTE_A + (i << 2));
+ : }
+ :
+ : if(xf86_config->num_crtc == 2) {
+ : pI830->savePIPEBCONF = INREG(PIPEBCONF);
+ : pI830->savePIPEBSRC = INREG(PIPEBSRC);
+ : pI830->saveDSPBCNTR = INREG(DSPBCNTR);
+ : pI830->saveFPB0 = INREG(FPB0);
+ : pI830->saveFPB1 = INREG(FPB1);
+ : pI830->saveDPLL_B = INREG(DPLL_B);
+ : if (IS_I965G(pI830))
+ : pI830->saveDPLL_B_MD = INREG(DPLL_B_MD);
+ : pI830->saveHTOTAL_B = INREG(HTOTAL_B);
+ : pI830->saveHBLANK_B = INREG(HBLANK_B);
+ : pI830->saveHSYNC_B = INREG(HSYNC_B);
+ : pI830->saveVTOTAL_B = INREG(VTOTAL_B);
+ : pI830->saveVBLANK_B = INREG(VBLANK_B);
+ : pI830->saveVSYNC_B = INREG(VSYNC_B);
+ : pI830->saveBCLRPAT_B = INREG(BCLRPAT_B);
+ : pI830->saveDSPBSTRIDE = INREG(DSPBSTRIDE);
+ : pI830->saveDSPBSIZE = INREG(DSPBSIZE);
+ : pI830->saveDSPBPOS = INREG(DSPBPOS);
+ : pI830->saveDSPBBASE = INREG(DSPBBASE);
+ : for(i= 0; i < 256; i++) {
+ : pI830->savePaletteB[i] = INREG(PALETTE_B + (i << 2));
+ : }
+ : }
+ :
+ : if (IS_I965G(pI830)) {
+ : pI830->saveDSPASURF = INREG(DSPASURF);
+ : pI830->saveDSPBSURF = INREG(DSPBSURF);
+ : }
+ :
+ : pI830->saveVCLK_DIVISOR_VGA0 = INREG(VCLK_DIVISOR_VGA0);
+ : pI830->saveVCLK_DIVISOR_VGA1 = INREG(VCLK_DIVISOR_VGA1);
+ : pI830->saveVCLK_POST_DIV = INREG(VCLK_POST_DIV);
+ : pI830->saveVGACNTRL = INREG(VGACNTRL);
+ :
+ : for(i = 0; i < 7; i++) {
+ : pI830->saveSWF[i] = INREG(SWF0 + (i << 2));
+ : pI830->saveSWF[i+7] = INREG(SWF00 + (i << 2));
+ : }
+ : pI830->saveSWF[14] = INREG(SWF30);
+ : pI830->saveSWF[15] = INREG(SWF31);
+ : pI830->saveSWF[16] = INREG(SWF32);
+ :
+ : if (IS_MOBILE(pI830) && !IS_I830(pI830))
+ : pI830->saveLVDS = INREG(LVDS);
+ : pI830->savePFIT_CONTROL = INREG(PFIT_CONTROL);
+ :
+ : for (i = 0; i < xf86_config->num_output; i++) {
+ : xf86OutputPtr output = xf86_config->output[i];
+ : if (output->funcs->save)
+ : (*output->funcs->save) (output);
+ : }
+ :
+ : vgaHWUnlock(hwp);
+ : vgaHWSave(pScrn, vgaReg, VGA_SR_FONTS);
+ :
+ : return TRUE;
+ :}
+ :
+ :static Bool
+ :RestoreHWState(ScrnInfoPtr pScrn)
+ :{
+ : xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : vgaHWPtr hwp = VGAHWPTR(pScrn);
+ : vgaRegPtr vgaReg = &hwp->SavedReg;
+ : int i;
+ :
+ : DPRINTF(PFX, "RestoreHWState\n");
+ :
+ :#ifdef XF86DRI
+ : I830DRISetVBlankInterrupt (pScrn, FALSE);
+ :#endif
+ : /* Disable outputs */
+ : for (i = 0; i < xf86_config->num_output; i++) {
+ : xf86OutputPtr output = xf86_config->output[i];
+ : output->funcs->dpms(output, DPMSModeOff);
+ : }
+ : i830WaitForVblank(pScrn);
+ :
+ : /* Disable pipes */
+ : for (i = 0; i < xf86_config->num_crtc; i++) {
+ : xf86CrtcPtr crtc = xf86_config->crtc[i];
+ : crtc->funcs->dpms(crtc, DPMSModeOff);
+ : }
+ : i830WaitForVblank(pScrn);
+ :
+ : if (IS_MOBILE(pI830) && !IS_I830(pI830))
+ : OUTREG(LVDS, pI830->saveLVDS);
+ :
+ : if (!IS_I830(pI830) && !IS_845G(pI830))
+ : OUTREG(PFIT_CONTROL, pI830->savePFIT_CONTROL);
+ :
+ : if (pI830->saveDPLL_A & DPLL_VCO_ENABLE)
+ : {
+ : OUTREG(DPLL_A, pI830->saveDPLL_A & ~DPLL_VCO_ENABLE);
+ : usleep(150);
+ : }
+ : OUTREG(FPA0, pI830->saveFPA0);
+ : OUTREG(FPA1, pI830->saveFPA1);
+ : OUTREG(DPLL_A, pI830->saveDPLL_A);
+ : usleep(150);
+ : if (IS_I965G(pI830))
+ : OUTREG(DPLL_A_MD, pI830->saveDPLL_A_MD);
+ : else
+ : OUTREG(DPLL_A, pI830->saveDPLL_A);
+ : usleep(150);
+ :
+ : OUTREG(HTOTAL_A, pI830->saveHTOTAL_A);
+ : OUTREG(HBLANK_A, pI830->saveHBLANK_A);
+ : OUTREG(HSYNC_A, pI830->saveHSYNC_A);
+ : OUTREG(VTOTAL_A, pI830->saveVTOTAL_A);
+ : OUTREG(VBLANK_A, pI830->saveVBLANK_A);
+ : OUTREG(VSYNC_A, pI830->saveVSYNC_A);
+ : OUTREG(BCLRPAT_A, pI830->saveBCLRPAT_A);
+ :
+ : OUTREG(DSPASTRIDE, pI830->saveDSPASTRIDE);
+ : OUTREG(DSPASIZE, pI830->saveDSPASIZE);
+ : OUTREG(DSPAPOS, pI830->saveDSPAPOS);
+ : OUTREG(PIPEASRC, pI830->savePIPEASRC);
+ : OUTREG(DSPABASE, pI830->saveDSPABASE);
+ : if (IS_I965G(pI830))
+ : OUTREG(DSPASURF, pI830->saveDSPASURF);
+ : OUTREG(PIPEACONF, pI830->savePIPEACONF);
+ : i830WaitForVblank(pScrn);
+ : OUTREG(DSPACNTR, pI830->saveDSPACNTR);
+ : OUTREG(DSPABASE, INREG(DSPABASE));
+ : i830WaitForVblank(pScrn);
+ :
+ : if(xf86_config->num_crtc == 2)
+ : {
+ : if (pI830->saveDPLL_B & DPLL_VCO_ENABLE)
+ : {
+ : OUTREG(DPLL_B, pI830->saveDPLL_B & ~DPLL_VCO_ENABLE);
+ : usleep(150);
+ : }
+ : OUTREG(FPB0, pI830->saveFPB0);
+ : OUTREG(FPB1, pI830->saveFPB1);
+ : OUTREG(DPLL_B, pI830->saveDPLL_B);
+ : usleep(150);
+ : if (IS_I965G(pI830))
+ : OUTREG(DPLL_B_MD, pI830->saveDPLL_B_MD);
+ : else
+ : OUTREG(DPLL_B, pI830->saveDPLL_B);
+ : usleep(150);
+ :
+ : OUTREG(HTOTAL_B, pI830->saveHTOTAL_B);
+ : OUTREG(HBLANK_B, pI830->saveHBLANK_B);
+ : OUTREG(HSYNC_B, pI830->saveHSYNC_B);
+ : OUTREG(VTOTAL_B, pI830->saveVTOTAL_B);
+ : OUTREG(VBLANK_B, pI830->saveVBLANK_B);
+ : OUTREG(VSYNC_B, pI830->saveVSYNC_B);
+ : OUTREG(BCLRPAT_B, pI830->saveBCLRPAT_B);
+ : OUTREG(DSPBSTRIDE, pI830->saveDSPBSTRIDE);
+ : OUTREG(DSPBSIZE, pI830->saveDSPBSIZE);
+ : OUTREG(DSPBPOS, pI830->saveDSPBPOS);
+ : OUTREG(PIPEBSRC, pI830->savePIPEBSRC);
+ : OUTREG(DSPBBASE, pI830->saveDSPBBASE);
+ : if (IS_I965G(pI830))
+ : OUTREG(DSPBSURF, pI830->saveDSPBSURF);
+ : OUTREG(PIPEBCONF, pI830->savePIPEBCONF);
+ : i830WaitForVblank(pScrn);
+ : OUTREG(DSPBCNTR, pI830->saveDSPBCNTR);
+ : OUTREG(DSPBBASE, INREG(DSPBBASE));
+ : i830WaitForVblank(pScrn);
+ : }
+ :
+ : /* Restore outputs */
+ : for (i = 0; i < xf86_config->num_output; i++) {
+ : xf86OutputPtr output = xf86_config->output[i];
+ : if (output->funcs->restore)
+ : output->funcs->restore(output);
+ : }
+ :
+ : OUTREG(VGACNTRL, pI830->saveVGACNTRL);
+ :
+ : OUTREG(VCLK_DIVISOR_VGA0, pI830->saveVCLK_DIVISOR_VGA0);
+ : OUTREG(VCLK_DIVISOR_VGA1, pI830->saveVCLK_DIVISOR_VGA1);
+ : OUTREG(VCLK_POST_DIV, pI830->saveVCLK_POST_DIV);
+ :
+ : for(i = 0; i < 256; i++) {
+ : OUTREG(PALETTE_A + (i << 2), pI830->savePaletteA[i]);
+ : }
+ :
+ : if(xf86_config->num_crtc == 2) {
+ : for(i= 0; i < 256; i++) {
+ : OUTREG(PALETTE_B + (i << 2), pI830->savePaletteB[i]);
+ : }
+ : }
+ :
+ : for(i = 0; i < 7; i++) {
+ : OUTREG(SWF0 + (i << 2), pI830->saveSWF[i]);
+ : OUTREG(SWF00 + (i << 2), pI830->saveSWF[i+7]);
+ : }
+ :
+ : OUTREG(SWF30, pI830->saveSWF[14]);
+ : OUTREG(SWF31, pI830->saveSWF[15]);
+ : OUTREG(SWF32, pI830->saveSWF[16]);
+ :
+ : vgaHWRestore(pScrn, vgaReg, VGA_SR_FONTS);
+ : vgaHWLock(hwp);
+ :
+ : return TRUE;
+ :}
+ :
+ :static void
+ :I830PointerMoved(int index, int x, int y)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[index];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : int newX = x, newY = y;
+ :
+ : switch (pI830->rotation) {
+ : case RR_Rotate_0:
+ : break;
+ : case RR_Rotate_90:
+ : newX = y;
+ : newY = pScrn->pScreen->width - x - 1;
+ : break;
+ : case RR_Rotate_180:
+ : newX = pScrn->pScreen->width - x - 1;
+ : newY = pScrn->pScreen->height - y - 1;
+ : break;
+ : case RR_Rotate_270:
+ : newX = pScrn->pScreen->height - y - 1;
+ : newY = x;
+ : break;
+ : }
+ :
+ : (*pI830->PointerMoved)(index, newX, newY);
+ :}
+ :
+ :static Bool
+ :I830InitFBManager(
+ : ScreenPtr pScreen,
+ : BoxPtr FullBox
+ :){
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ : RegionRec ScreenRegion;
+ : RegionRec FullRegion;
+ : BoxRec ScreenBox;
+ : Bool ret;
+ :
+ : ScreenBox.x1 = 0;
+ : ScreenBox.y1 = 0;
+ : ScreenBox.x2 = pScrn->displayWidth;
+ : if (pScrn->virtualX > pScrn->virtualY)
+ : ScreenBox.y2 = pScrn->virtualX;
+ : else
+ : ScreenBox.y2 = pScrn->virtualY;
+ :
+ : if((FullBox->x1 > ScreenBox.x1) || (FullBox->y1 > ScreenBox.y1) ||
+ : (FullBox->x2 < ScreenBox.x2) || (FullBox->y2 < ScreenBox.y2)) {
+ : return FALSE;
+ : }
+ :
+ : if (FullBox->y2 < FullBox->y1) return FALSE;
+ : if (FullBox->x2 < FullBox->x2) return FALSE;
+ :
+ : REGION_INIT(pScreen, &ScreenRegion, &ScreenBox, 1);
+ : REGION_INIT(pScreen, &FullRegion, FullBox, 1);
+ :
+ : REGION_SUBTRACT(pScreen, &FullRegion, &FullRegion, &ScreenRegion);
+ :
+ : ret = xf86InitFBManagerRegion(pScreen, &FullRegion);
+ :
+ : REGION_UNINIT(pScreen, &ScreenRegion);
+ : REGION_UNINIT(pScreen, &FullRegion);
+ :
+ : return ret;
+ :}
+ :
+ :/**
+ : * Intialiazes the hardware for the 3D pipeline use in the 2D driver.
+ : *
+ : * Some state caching is performed to avoid redundant state emits. This
+ : * function is also responsible for marking the state as clobbered for DRI
+ : * clients.
+ : */
+ :void
+ :IntelEmitInvarientState(ScrnInfoPtr pScrn)
+ 3 0.0033 :{ /* IntelEmitInvarientState total: 36 0.0392 */
+ 3 0.0033 : I830Ptr pI830 = I830PTR(pScrn);
+ : CARD32 ctx_addr;
+ :
+ 2 0.0022 : if (pI830->noAccel)
+ : return;
+ :
+ :#ifdef XF86DRI
+ 4 0.0044 : if (pI830->directRenderingEnabled) {
+ 4 0.0044 : drmI830Sarea *sarea = DRIGetSAREAPrivate(pScrn->pScreen);
+ :
+ : /* Mark that the X Server was the last holder of the context */
+ 5 0.0054 : if (sarea)
+ 3 0.0033 : sarea->ctxOwner = DRIGetContext(pScrn->pScreen);
+ : }
+ :#endif
+ :
+ : /* If we've emitted our state since the last clobber by another client,
+ : * skip it.
+ : */
+ 8 0.0087 : if (*pI830->last_3d != LAST_3D_OTHER)
+ : return;
+ :
+ : ctx_addr = pI830->logical_context->offset;
+ : assert((pI830->logical_context->offset & 2047) == 0);
+ : {
+ : BEGIN_LP_RING(2);
+ : OUT_RING(MI_SET_CONTEXT);
+ : OUT_RING(pI830->logical_context->offset |
+ : CTXT_NO_RESTORE |
+ : CTXT_PALETTE_SAVE_DISABLE | CTXT_PALETTE_RESTORE_DISABLE);
+ : ADVANCE_LP_RING();
+ : }
+ :
+ : if (!IS_I965G(pI830))
+ : {
+ : if (IS_I9XX(pI830))
+ : I915EmitInvarientState(pScrn);
+ : else
+ : I830EmitInvarientState(pScrn);
+ : }
+ 4 0.0044 :}
+ :
+ :#ifdef XF86DRI_MM
+ :#ifndef XSERVER_LIBDRM_MM
+ :
+ :static int
+ :I830DrmMMInit(int drmFD, unsigned long pageOffs, unsigned long pageSize,
+ : unsigned memType)
+ :{
+ :
+ : drm_mm_init_arg_t arg;
+ : int ret;
+ :
+ : memset(&arg, 0, sizeof(arg));
+ : arg.req.op = mm_init;
+ : arg.req.p_offset = pageOffs;
+ : arg.req.p_size = pageSize;
+ : arg.req.mem_type = memType;
+ :
+ : ret = ioctl(drmFD, DRM_IOCTL_MM_INIT, &arg);
+ :
+ : if (ret)
+ : return -errno;
+ :
+ : return 0;
+ :
+ :}
+ :
+ :static int
+ :I830DrmMMTakedown(int drmFD, unsigned memType)
+ :{
+ : drm_mm_init_arg_t arg;
+ : int ret = 0;
+ :
+ : memset(&arg, 0, sizeof(arg));
+ : arg.req.op = mm_takedown;
+ : arg.req.mem_type = memType;
+ : if (ioctl(drmFD, DRM_IOCTL_MM_INIT, &arg)) {
+ : ret = -errno;
+ : }
+ :
+ : return ret;
+ :}
+ :
+ :static int I830DrmMMLock(int fd, unsigned memType)
+ :{
+ : drm_mm_init_arg_t arg;
+ : int ret;
+ :
+ : memset(&arg, 0, sizeof(arg));
+ : arg.req.op = mm_lock;
+ : arg.req.mem_type = memType;
+ :
+ : do{
+ : ret = ioctl(fd, DRM_IOCTL_MM_INIT, &arg);
+ : } while (ret && errno == EAGAIN);
+ :
+ : return ret;
+ :}
+ :
+ :static int I830DrmMMUnlock(int fd, unsigned memType)
+ :{
+ : drm_mm_init_arg_t arg;
+ : int ret;
+ :
+ : memset(&arg, 0, sizeof(arg));
+ : arg.req.op = mm_unlock;
+ : arg.req.mem_type = memType;
+ :
+ : do{
+ : ret = ioctl(fd, DRM_IOCTL_MM_INIT, &arg);
+ : } while (ret && errno == EAGAIN);
+ :
+ : return ret;
+ :}
+ :
+ :#endif
+ :#endif /* XF86DRI_MM */
+ :
+ :static Bool
+ :I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+ :{
+ : ScrnInfoPtr pScrn;
+ : vgaHWPtr hwp;
+ : I830Ptr pI830;
+ : VisualPtr visual;
+ : I830Ptr pI8301 = NULL;
+ : unsigned long sys_mem;
+ : int i;
+ : Bool allocation_done = FALSE;
+ : MessageType from;
+ :#ifdef XF86DRI
+ : Bool driDisabled;
+ :#ifdef XF86DRI_MM
+ : unsigned long savedMMSize;
+ :#endif
+ :#endif
+ :
+ : pScrn = xf86Screens[pScreen->myNum];
+ : pI830 = I830PTR(pScrn);
+ : hwp = VGAHWPTR(pScrn);
+ :
+ : pScrn->displayWidth = (pScrn->virtualX + 63) & ~63;
+ :
+ : /*
+ : * The "VideoRam" config file parameter specifies the maximum amount of
+ : * memory that will be used/allocated. When not present, we allow the
+ : * driver to allocate as much memory as it wishes to satisfy its
+ : * allocations, but if agpgart support isn't available, it gets limited
+ : * to the amount of pre-allocated ("stolen") memory.
+ : *
+ : * Note that in using this value for allocator initialization, we're
+ : * limiting aperture allocation to the VideoRam option, rather than limiting
+ : * actual memory allocation, so alignment and things will cause less than
+ : * VideoRam to be actually used.
+ : */
+ : if (pI830->pEnt->device->videoRam == 0) {
+ : from = X_DEFAULT;
+ : pScrn->videoRam = pI830->FbMapSize / KB(1);
+ : } else {
+ :#if 0
+ : from = X_CONFIG;
+ : pScrn->videoRam = pI830->pEnt->device->videoRam;
+ :#else
+ : /* Disable VideoRam configuration, at least for now. Previously,
+ : * VideoRam was necessary to avoid overly low limits on allocated
+ : * memory, so users created larger, yet still small, fixed allocation
+ : * limits in their config files. Now, the driver wants to allocate more,
+ : * and the old intention of the VideoRam lines that had been entered is
+ : * obsolete.
+ : */
+ : from = X_DEFAULT;
+ : pScrn->videoRam = pI830->FbMapSize / KB(1);
+ :
+ : if (pScrn->videoRam != pI830->pEnt->device->videoRam) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ : "VideoRam configuration found, which is no longer "
+ : "recommended.\n");
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ : "Continuing with default %dkB VideoRam instead of %d "
+ : "kB.\n",
+ : pScrn->videoRam, pI830->pEnt->device->videoRam);
+ : }
+ :#endif
+ : }
+ :
+ : /* Limit videoRam to how much we might be able to allocate from AGP */
+ : sys_mem = I830CheckAvailableMemory(pScrn);
+ : if (sys_mem == -1) {
+ : if (pScrn->videoRam > pI830->stolen_size / KB(1)) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ : "/dev/agpgart is either not available, or no memory "
+ : "is available\nfor allocation. "
+ : "Using pre-allocated memory only.\n");
+ : pScrn->videoRam = pI830->stolen_size / KB(1);
+ : }
+ : pI830->StolenOnly = TRUE;
+ : } else {
+ : if (sys_mem + (pI830->stolen_size / 1024) < pScrn->videoRam) {
+ : pScrn->videoRam = sys_mem + (pI830->stolen_size / 1024);
+ : from = X_PROBED;
+ : if (sys_mem + (pI830->stolen_size / 1024) <
+ : pI830->pEnt->device->videoRam)
+ : {
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ : "VideoRAM reduced to %d kByte "
+ : "(limited to available sysmem)\n", pScrn->videoRam);
+ : }
+ : }
+ : }
+ :
+ : /* Limit video RAM to the actual aperture size */
+ : if (pScrn->videoRam > pI830->FbMapSize / 1024) {
+ : pScrn->videoRam = pI830->FbMapSize / 1024;
+ : if (pI830->FbMapSize / 1024 < pI830->pEnt->device->videoRam) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ : "VideoRam reduced to %d kByte (limited to aperture "
+ : "size)\n",
+ : pScrn->videoRam);
+ : }
+ : }
+ :
+ : /* Make sure it's on a page boundary */
+ : if (pScrn->videoRam & 3) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VideoRam reduced to %d KB "
+ : "(page aligned - was %d KB)\n",
+ : pScrn->videoRam & ~3, pScrn->videoRam);
+ : pScrn->videoRam &= ~3;
+ : }
+ :
+ : /* Set up our video memory allocator for the chosen videoRam */
+ : if (!i830_allocator_init(pScrn, 0, pScrn->videoRam * KB(1))) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Couldn't initialize video memory allocator\n");
+ : PreInitCleanup(pScrn);
+ : return FALSE;
+ : }
+ :
+ : xf86DrvMsg(pScrn->scrnIndex,
+ : pI830->pEnt->device->videoRam ? X_CONFIG : X_DEFAULT,
+ : "VideoRam: %d KB\n", pScrn->videoRam);
+ :
+ : if (xf86GetOptValInteger(pI830->Options, OPTION_CACHE_LINES,
+ : &(pI830->CacheLines))) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Requested %d cache lines\n",
+ : pI830->CacheLines);
+ : } else {
+ : pI830->CacheLines = -1;
+ : }
+ :
+ : pI830->disableTiling = FALSE;
+ :
+ : if (I830IsPrimary(pScrn)) {
+ : /* Alloc our pointers for the primary head */
+ : if (!pI830->LpRing)
+ : pI830->LpRing = xcalloc(1, sizeof(I830RingBuffer));
+ : if (!pI830->overlayOn)
+ : pI830->overlayOn = xalloc(sizeof(Bool));
+ : if (!pI830->last_3d)
+ : pI830->last_3d = xalloc(sizeof(enum last_3d));
+ : if (!pI830->LpRing || !pI830->overlayOn || !pI830->last_3d) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Could not allocate primary data structures.\n");
+ : return FALSE;
+ : }
+ : *pI830->last_3d = LAST_3D_OTHER;
+ : *pI830->overlayOn = FALSE;
+ : if (pI830->entityPrivate)
+ : pI830->entityPrivate->XvInUse = -1;
+ : } else {
+ : /* Make our second head point to the first heads structures */
+ : pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
+ : pI830->LpRing = pI8301->LpRing;
+ : pI830->overlay_regs = pI8301->overlay_regs;
+ : pI830->overlayOn = pI8301->overlayOn;
+ : pI830->last_3d = pI8301->last_3d;
+ : }
+ :
+ : /* Need MMIO mapped to do GTT lookups during memory allocation. */
+ : I830MapMMIO(pScrn);
+ :
+ :#if defined(XF86DRI)
+ : /*
+ : * If DRI is potentially usable, check if there is enough memory available
+ : * for it, and if there's also enough to allow tiling to be enabled.
+ : */
+ :
+ : if (!I830CheckDRIAvailable(pScrn)) {
+ : pI830->directRenderingDisabled = TRUE;
+ :#ifdef XF86DRI_MM
+ : pI830->mmSize = 0;
+ :#endif
+ : }
+ :
+ :#ifdef I830_XV
+ : /*
+ : * Set this so that the overlay allocation is factored in when
+ : * appropriate.
+ : */
+ : pI830->XvEnabled = !pI830->XvDisabled;
+ :#endif
+ :
+ : if (!pI830->directRenderingDisabled) {
+ : int savedDisplayWidth = pScrn->displayWidth;
+ : Bool tiled = FALSE;
+ :
+ : if (IS_I965G(pI830)) {
+ : int tile_pixels = 512 / pI830->cpp;
+ : pScrn->displayWidth = (pScrn->displayWidth + tile_pixels - 1) &
+ : ~(tile_pixels - 1);
+ : tiled = TRUE;
+ : } else {
+ : /* Good pitches to allow tiling. Don't care about pitches < 1024
+ : * pixels.
+ : */
+ : static const int pitches[] = {
+ : 1024,
+ : 2048,
+ : 4096,
+ : 8192,
+ : 0
+ : };
+ :
+ : for (i = 0; pitches[i] != 0; i++) {
+ : if (pitches[i] >= pScrn->displayWidth) {
+ : pScrn->displayWidth = pitches[i];
+ : tiled = TRUE;
+ : break;
+ : }
+ : }
+ : }
+ :
+ : /* Attempt several rounds of allocation to get 2d and 3d memory to fit:
+ : *
+ : * 0: tiled, large memory manager
+ : * 1: tiled, small memory manager
+ : * 2: untiled, large
+ : * 3: untiled, small
+ : */
+ :
+ : pI830->disableTiling = FALSE;
+ :#ifdef XF86DRI_MM
+ : savedMMSize = pI830->mmSize;
+ :#define MM_TURNS 4
+ :#else
+ :#define MM_TURNS 2
+ :#endif
+ : for (i = 0; i < MM_TURNS; i++) {
+ : if (!tiled && i < 2)
+ : continue;
+ :
+ : if (i >= MM_TURNS/2) {
+ : /* For further allocations, disable tiling */
+ : pI830->disableTiling = TRUE;
+ : pScrn->displayWidth = savedDisplayWidth;
+ : if (pI830->allowPageFlip)
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ : "Couldn't allocate tiled memory, page flipping "
+ : "disabled\n");
+ : pI830->allowPageFlip = FALSE;
+ : }
+ :
+ :#ifdef XF86DRI_MM
+ : if (i & 1) {
+ : /* For this allocation, switch to a smaller DRI memory manager
+ : * size.
+ : */
+ : pI830->mmSize = I830_MM_MINPAGES * GTT_PAGE_SIZE / KB(1);
+ : } else {
+ : pI830->mmSize = savedMMSize;
+ : }
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ : "Attempting memory allocation with %s buffers and \n"
+ : "\t %s DRI memory manager reservation:\n",
+ : (i & 2) ? "untiled" : "tiled",
+ : (i & 1) ? "small" : "large");
+ :#else
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ : "Attempting memory allocation with %s buffers:\n",
+ : (i & 1) ? "untiled" : "tiled");
+ :#endif
+ :
+ : if (i830_allocate_2d_memory(pScrn) &&
+ : i830_allocate_3d_memory(pScrn))
+ : {
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Success.\n");
+ : if (pScrn->displayWidth != savedDisplayWidth) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ : "Increasing the scanline pitch to allow tiling mode "
+ : "(%d -> %d).\n",
+ : savedDisplayWidth, pScrn->displayWidth);
+ : }
+ : allocation_done = TRUE;
+ : break;
+ : }
+ :
+ : i830_reset_allocations(pScrn);
+ : }
+ :
+ : if (i == MM_TURNS) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ : "Not enough video memory. Disabling DRI.\n");
+ :#ifdef XF86DRI_MM
+ : pI830->mmSize = 0;
+ :#endif
+ : pI830->directRenderingDisabled = TRUE;
+ : }
+ : } else
+ :#endif
+ : pI830->disableTiling = TRUE; /* no DRI - so disableTiling */
+ :
+ : if (!allocation_done) {
+ : if (!i830_allocate_2d_memory(pScrn)) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Couldn't allocate video memory\n");
+ : return FALSE;
+ : }
+ : allocation_done = TRUE;
+ : }
+ :
+ : I830UnmapMMIO(pScrn);
+ :
+ : i830_describe_allocations(pScrn, 1, "");
+ :
+ : if (!IS_I965G(pI830) && pScrn->displayWidth > 2048) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Cannot support DRI with frame buffer width > 2048.\n");
+ : pI830->disableTiling = TRUE;
+ : pI830->directRenderingDisabled = TRUE;
+ : }
+ :
+ : pScrn->displayWidth = pScrn->displayWidth;
+ :
+ :#ifdef HAS_MTRR_SUPPORT
+ : {
+ : int fd;
+ : struct mtrr_gentry gentry;
+ : struct mtrr_sentry sentry;
+ :
+ : if ( ( fd = open ("/proc/mtrr", O_RDONLY, 0) ) != -1 ) {
+ : for (gentry.regnum = 0; ioctl (fd, MTRRIOC_GET_ENTRY, &gentry) == 0;
+ : ++gentry.regnum) {
+ :
+ : if (gentry.size < 1) {
+ : /* DISABLED */
+ : continue;
+ : }
+ :
+ : /* Check the MTRR range is one we like and if not - remove it.
+ : * The Xserver common layer will then setup the right range
+ : * for us.
+ : */
+ : if (gentry.base == pI830->LinearAddr &&
+ : gentry.size < pI830->FbMapSize) {
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ : "Removing bad MTRR range (base 0x%lx, size 0x%x)\n",
+ : gentry.base, gentry.size);
+ :
+ : sentry.base = gentry.base;
+ : sentry.size = gentry.size;
+ : sentry.type = gentry.type;
+ :
+ : if (ioctl (fd, MTRRIOC_DEL_ENTRY, &sentry) == -1) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Failed to remove bad MTRR range\n");
+ : }
+ : }
+ : }
+ : close(fd);
+ : }
+ : }
+ :#endif
+ :
+ : pI830->starting = TRUE;
+ :
+ : miClearVisualTypes();
+ : if (!miSetVisualTypes(pScrn->depth,
+ : miGetDefaultVisualMask(pScrn->depth),
+ : pScrn->rgbBits, pScrn->defaultVisual))
+ : return FALSE;
+ : if (!miSetPixmapDepths())
+ : return FALSE;
+ :
+ :#ifdef I830_XV
+ : pI830->XvEnabled = !pI830->XvDisabled;
+ : if (pI830->XvEnabled) {
+ : if (!I830IsPrimary(pScrn)) {
+ : if (!pI8301->XvEnabled || pI830->noAccel) {
+ : pI830->XvEnabled = FALSE;
+ : xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Xv is disabled.\n");
+ : }
+ : } else
+ : if (pI830->noAccel || pI830->StolenOnly) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Xv is disabled because it "
+ : "needs 2D accel and AGPGART.\n");
+ : pI830->XvEnabled = FALSE;
+ : }
+ : }
+ :#else
+ : pI830->XvEnabled = FALSE;
+ :#endif
+ :
+ : if (!pI830->noAccel) {
+ : if (pI830->LpRing->mem->size == 0) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ : "Disabling acceleration because the ring buffer "
+ : "allocation failed.\n");
+ : pI830->noAccel = TRUE;
+ : }
+ : }
+ :
+ :#ifdef I830_XV
+ : if (pI830->XvEnabled) {
+ : if (pI830->noAccel) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Disabling Xv because it "
+ : "needs 2D acceleration.\n");
+ : pI830->XvEnabled = FALSE;
+ : }
+ : if (!IS_I9XX(pI830) && pI830->overlay_regs == NULL) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ : "Disabling Xv because the overlay register buffer "
+ : "allocation failed.\n");
+ : pI830->XvEnabled = FALSE;
+ : }
+ : }
+ :#endif
+ :
+ :#ifdef XF86DRI
+ : /*
+ : * pI830->directRenderingDisabled is set once in PreInit. Reinitialise
+ : * pI830->directRenderingEnabled based on it each generation.
+ : */
+ : pI830->directRenderingEnabled = !pI830->directRenderingDisabled;
+ : /*
+ : * Setup DRI after visuals have been established, but before fbScreenInit
+ : * is called. fbScreenInit will eventually call into the drivers
+ : * InitGLXVisuals call back.
+ : */
+ :
+ : if (pI830->directRenderingEnabled) {
+ : if (pI830->noAccel || pI830->SWCursor || (pI830->StolenOnly && I830IsPrimary(pScrn))) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "DRI is disabled because it "
+ : "needs HW cursor, 2D accel and AGPGART.\n");
+ : pI830->directRenderingEnabled = FALSE;
+ : i830_free_3d_memory(pScrn);
+ : }
+ : }
+ :
+ : driDisabled = !pI830->directRenderingEnabled;
+ :
+ : if (pI830->directRenderingEnabled)
+ : pI830->directRenderingEnabled = I830DRIScreenInit(pScreen);
+ :
+ : if (!pI830->directRenderingEnabled) {
+ : i830_free_3d_memory(pScrn);
+ : }
+ :
+ :#else
+ : pI830->directRenderingEnabled = FALSE;
+ :#endif
+ :
+ :#ifdef XF86DRI
+ : if (pI830->directRenderingEnabled)
+ : pI830->directRenderingEnabled = I830DRIDoMappings(pScreen);
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Page Flipping %sabled\n",
+ : pI830->allowPageFlip ? "en" : "dis");
+ :#endif
+ :
+ : DPRINTF(PFX, "assert( if(!I830MapMem(pScrn)) )\n");
+ : if (!I830MapMem(pScrn))
+ : return FALSE;
+ :
+ : pScrn->memPhysBase = (unsigned long)pI830->FbBase;
+ :
+ : if (I830IsPrimary(pScrn)) {
+ : pScrn->fbOffset = pI830->front_buffer->offset;
+ : } else {
+ : pScrn->fbOffset = pI8301->front_buffer_2->offset;
+ : }
+ :
+ : pI830->xoffset = (pScrn->fbOffset / pI830->cpp) % pScrn->displayWidth;
+ : pI830->yoffset = (pScrn->fbOffset / pI830->cpp) / pScrn->displayWidth;
+ :
+ : vgaHWSetMmioFuncs(hwp, pI830->MMIOBase, 0);
+ : vgaHWGetIOBase(hwp);
+ : DPRINTF(PFX, "assert( if(!vgaHWMapMem(pScrn)) )\n");
+ : if (!vgaHWMapMem(pScrn))
+ : return FALSE;
+ :
+ : DPRINTF(PFX, "assert( if(!I830EnterVT(scrnIndex, 0)) )\n");
+ :
+ : if (!pI830->useEXA) {
+ : if (I830IsPrimary(pScrn)) {
+ : if (!I830InitFBManager(pScreen, &(pI830->FbMemBox))) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Failed to init memory manager\n");
+ : }
+ : } else {
+ : if (!I830InitFBManager(pScreen, &(pI8301->FbMemBox2))) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Failed to init memory manager\n");
+ : }
+ : }
+ : }
+ :
+ : if (pScrn->virtualX > pScrn->displayWidth)
+ : pScrn->displayWidth = pScrn->virtualX;
+ :
+ : DPRINTF(PFX, "assert( if(!fbScreenInit(pScreen, ...) )\n");
+ : if (!fbScreenInit(pScreen, pI830->FbBase + pScrn->fbOffset,
+ : pScrn->virtualX, pScrn->virtualY,
+ : pScrn->xDpi, pScrn->yDpi,
+ : pScrn->displayWidth, pScrn->bitsPerPixel))
+ : return FALSE;
+ :
+ : if (pScrn->bitsPerPixel > 8) {
+ : /* Fixup RGB ordering */
+ : visual = pScreen->visuals + pScreen->numVisuals;
+ : while (--visual >= pScreen->visuals) {
+ : if ((visual->class | DynamicClass) == DirectColor) {
+ : visual->offsetRed = pScrn->offset.red;
+ : visual->offsetGreen = pScrn->offset.green;
+ : visual->offsetBlue = pScrn->offset.blue;
+ : visual->redMask = pScrn->mask.red;
+ : visual->greenMask = pScrn->mask.green;
+ : visual->blueMask = pScrn->mask.blue;
+ : }
+ : }
+ : }
+ :
+ : fbPictureInit(pScreen, NULL, 0);
+ :
+ : xf86SetBlackWhitePixels(pScreen);
+ :
+ : xf86DiDGAInit (pScreen, pI830->LinearAddr + pScrn->fbOffset);
+ :
+ : DPRINTF(PFX,
+ : "assert( if(!I830InitFBManager(pScreen, &(pI830->FbMemBox))) )\n");
+ :
+ : if (!pI830->noAccel) {
+ : if (!I830AccelInit(pScreen)) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Hardware acceleration initialization failed\n");
+ : }
+ : }
+ :
+ : miInitializeBackingStore(pScreen);
+ : xf86SetBackingStore(pScreen);
+ : xf86SetSilkenMouse(pScreen);
+ : miDCInitialize(pScreen, xf86GetPointerScreenFuncs());
+ :
+ : if (!pI830->SWCursor) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Initializing HW Cursor\n");
+ : if (!I830CursorInit(pScreen))
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Hardware cursor initialization failed\n");
+ : } else
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Initializing SW Cursor!\n");
+ :
+ : if (!I830EnterVT(scrnIndex, 0))
+ : return FALSE;
+ :
+ : DPRINTF(PFX, "assert( if(!miCreateDefColormap(pScreen)) )\n");
+ : if (!miCreateDefColormap(pScreen))
+ : return FALSE;
+ :
+ : DPRINTF(PFX, "assert( if(!xf86HandleColormaps(pScreen, ...)) )\n");
+ : if (!xf86HandleColormaps(pScreen, 256, 8, I830LoadPalette, NULL,
+ : CMAP_RELOAD_ON_MODE_SWITCH |
+ : CMAP_PALETTED_TRUECOLOR)) {
+ : return FALSE;
+ : }
+ :
+ : xf86DPMSInit(pScreen, xf86DPMSSet, 0);
+ :
+ :#ifdef I830_XV
+ : /* Init video */
+ : if (pI830->XvEnabled)
+ : I830InitVideo(pScreen);
+ :#endif
+ :
+ :#ifdef XF86DRI
+ : if (pI830->directRenderingEnabled) {
+ : pI830->directRenderingEnabled = I830DRIFinishScreenInit(pScreen);
+ : }
+ :#endif
+ :
+ : /* Setup 3D engine, needed for rotation too */
+ : IntelEmitInvarientState(pScrn);
+ :
+ :#ifdef XF86DRI
+ : if (pI830->directRenderingEnabled) {
+ : pI830->directRenderingOpen = TRUE;
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering: Enabled\n");
+ : } else {
+ : if (driDisabled)
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering: Disabled\n");
+ : else
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering: Failed\n");
+ : }
+ :#else
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering: Not available\n");
+ :#endif
+ :
+ : pScreen->SaveScreen = xf86SaveScreen;
+ : pI830->CloseScreen = pScreen->CloseScreen;
+ : pScreen->CloseScreen = I830CloseScreen;
+ :
+ : if (!xf86CrtcScreenInit (pScreen))
+ : return FALSE;
+ :
+ : /* Wrap pointer motion to flip touch screen around */
+ : pI830->PointerMoved = pScrn->PointerMoved;
+ : pScrn->PointerMoved = I830PointerMoved;
+ :
+ : if (serverGeneration == 1)
+ : xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options);
+ :
+ : if (IS_I965G(pI830)) {
+ : /* turn off clock gating */
+ :#if 0
+ : OUTREG(0x6204, 0x70804000);
+ : OUTREG(0x6208, 0x00000001);
+ :#else
+ : OUTREG(0x6204, 0x70000000);
+ :#endif
+ : /* Enable DAP stateless accesses.
+ : * Required for all i965 steppings.
+ : */
+ : OUTREG(SVG_WORK_CTL, 0x00000010);
+ : }
+ :
+ : pI830->starting = FALSE;
+ : pI830->closing = FALSE;
+ : pI830->suspended = FALSE;
+ :
+ :#ifdef XF86DRI_MM
+ : if (pI830->directRenderingEnabled && (pI830->mmModeFlags & I830_KERNEL_MM))
+ : {
+ : if (pI830->memory_manager == NULL) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Too little AGP aperture space for DRM memory manager.\n"
+ : "\tPlease increase AGP aperture size from BIOS configuration screen.\n"
+ : "\tDisabling DRI.\n");
+ : pI830->directRenderingOpen = FALSE;
+ : I830DRICloseScreen(pScreen);
+ : pI830->directRenderingEnabled = FALSE;
+ : } else {
+ : unsigned long aperEnd = ROUND_DOWN_TO(pI830->memory_manager->offset +
+ : pI830->memory_manager->size,
+ : GTT_PAGE_SIZE) / GTT_PAGE_SIZE;
+ : unsigned long aperStart = ROUND_TO(pI830->memory_manager->offset,
+ : GTT_PAGE_SIZE) / GTT_PAGE_SIZE;
+ :
+ :#ifndef XSERVER_LIBDRM_MM
+ : if (I830DrmMMInit(pI830->drmSubFD, aperStart, aperEnd - aperStart,
+ : DRM_BO_MEM_TT)) {
+ :#else
+ : if (drmMMInit(pI830->drmSubFD, aperStart, aperEnd - aperStart,
+ : DRM_BO_MEM_TT)) {
+ :#endif
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ : "Could not initialize the DRM memory manager.\n");
+ :
+ : pI830->directRenderingOpen = FALSE;
+ : I830DRICloseScreen(pScreen);
+ : pI830->directRenderingEnabled = FALSE;
+ : }
+ : }
+ : }
+ :#endif /* XF86DRI_MM */
+ :
+ : return TRUE;
+ :}
+ :
+ :static void
+ :i830AdjustFrame(int scrnIndex, int x, int y, int flags)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ : xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : xf86OutputPtr output = config->output[config->compat_output];
+ : xf86CrtcPtr crtc = output->crtc;
+ :
+ : DPRINTF(PFX, "i830AdjustFrame: y = %d (+ %d), x = %d (+ %d)\n",
+ : x, pI830->xoffset, y, pI830->yoffset);
+ :
+ : if (crtc && crtc->enabled)
+ : {
+ : /* Sync the engine before adjust frame */
+ : i830WaitSync(pScrn);
+ : i830PipeSetBase(crtc, crtc->desiredX + x, crtc->desiredY + y);
+ : crtc->x = output->initial_x + x;
+ : crtc->y = output->initial_y + y;
+ : }
+ :}
+ :
+ :static void
+ :I830FreeScreen(int scrnIndex, int flags)
+ :{
+ : I830FreeRec(xf86Screens[scrnIndex]);
+ : if (xf86LoaderCheckSymbol("vgaHWFreeHWRec"))
+ : vgaHWFreeHWRec(xf86Screens[scrnIndex]);
+ :}
+ :
+ :static void
+ :I830LeaveVT(int scrnIndex, int flags)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : DPRINTF(PFX, "Leave VT\n");
+ :
+ : pI830->leaving = TRUE;
+ :
+ : if (pI830->devicesTimer)
+ : TimerCancel(pI830->devicesTimer);
+ : pI830->devicesTimer = NULL;
+ :
+ : i830SetHotkeyControl(pScrn, HOTKEY_BIOS_SWITCH);
+ :
+ : if (!I830IsPrimary(pScrn)) {
+ : I830Ptr pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
+ : if (!pI8301->gtt_acquired) {
+ : return;
+ : }
+ : }
+ :
+ :#ifdef XF86DRI
+ : if (pI830->directRenderingOpen) {
+ : DRILock(screenInfo.screens[pScrn->scrnIndex], 0);
+ :#ifdef XF86DRI_MM
+ : if (pI830->mmModeFlags & I830_KERNEL_MM) {
+ :#ifndef XSERVER_LIBDRM_MM
+ : I830DrmMMLock(pI830->drmSubFD, DRM_BO_MEM_TT);
+ :#else
+ : drmMMLock(pI830->drmSubFD, DRM_BO_MEM_TT);
+ :#endif
+ : }
+ :#endif /* XF86DRI_MM */
+ : I830DRISetVBlankInterrupt (pScrn, FALSE);
+ :
+ : drmCtlUninstHandler(pI830->drmSubFD);
+ : }
+ :#endif
+ :
+ : xf86_hide_cursors (pScrn);
+ :
+ : ResetState(pScrn, TRUE);
+ :
+ : RestoreHWState(pScrn);
+ :
+ : if (pI830->debug_modes) {
+ : i830CompareRegsToSnapshot(pScrn, "After LeaveVT");
+ : i830DumpRegs (pScrn);
+ : }
+ :
+ : if (I830IsPrimary(pScrn))
+ : i830_unbind_all_memory(pScrn);
+ : if (pI830->AccelInfoRec)
+ : pI830->AccelInfoRec->NeedToSync = FALSE;
+ :}
+ :
+ :/*
+ : * This gets called when gaining control of the VT, and from ScreenInit().
+ : */
+ :static Bool
+ :I830EnterVT(int scrnIndex, int flags)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
+ : int o;
+ :
+ : DPRINTF(PFX, "Enter VT\n");
+ :
+ : /*
+ : * Only save state once per server generation since that's what most
+ : * drivers do. Could change this to save state at each VT enter.
+ : */
+ : if (pI830->SaveGeneration != serverGeneration) {
+ : pI830->SaveGeneration = serverGeneration;
+ : SaveHWState(pScrn);
+ : }
+ :
+ : pI830->leaving = FALSE;
+ :
+ : if (I830IsPrimary(pScrn))
+ : if (!i830_bind_all_memory(pScrn))
+ : return FALSE;
+ :
+ : if (i830_check_error_state(pScrn)) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ : "Existing errors found in hardware state.\n");
+ : }
+ :
+ : ResetState(pScrn, FALSE);
+ : SetHWOperatingState(pScrn);
+ :
+ : /* Clear the framebuffer */
+ : memset(pI830->FbBase + pScrn->fbOffset, 0,
+ : pScrn->virtualY * pScrn->displayWidth * pI830->cpp);
+ :
+ : for (o = 0; o < config->num_output; o++) {
+ : xf86OutputPtr output = config->output[o];
+ : output->funcs->dpms(output, DPMSModeOff);
+ : }
+ :
+ : if (!xf86SetDesiredModes (pScrn))
+ : return FALSE;
+ :
+ : if (pI830->debug_modes) {
+ : xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Hardware state at EnterVT:\n");
+ : i830DumpRegs (pScrn);
+ : }
+ : i830DescribeOutputConfiguration(pScrn);
+ :
+ : ResetState(pScrn, TRUE);
+ : SetHWOperatingState(pScrn);
+ :
+ :#ifdef XF86DRI
+ : if (pI830->directRenderingEnabled) {
+ :
+ : I830DRISetVBlankInterrupt (pScrn, TRUE);
+ :
+ : if (!pI830->starting) {
+ : ScreenPtr pScreen = pScrn->pScreen;
+ : drmI830Sarea *sarea = (drmI830Sarea *) DRIGetSAREAPrivate(pScreen);
+ : int i;
+ :
+ : I830DRIResume(screenInfo.screens[scrnIndex]);
+ :
+ : I830RefreshRing(pScrn);
+ : I830Sync(pScrn);
+ : DO_RING_IDLE();
+ :
+ : sarea->texAge++;
+ : for(i = 0; i < I830_NR_TEX_REGIONS+1 ; i++)
+ : sarea->texList[i].age = sarea->texAge;
+ :
+ :#ifdef XF86DRI_MM
+ : if (pI830->mmModeFlags & I830_KERNEL_MM) {
+ :#ifndef XSERVER_LIBDRM_MM
+ : I830DrmMMUnlock(pI830->drmSubFD, DRM_BO_MEM_TT);
+ :#else
+ : drmMMUnlock(pI830->drmSubFD, DRM_BO_MEM_TT);
+ :#endif
+ : }
+ :#endif /* XF86DRI_MM */
+ :
+ : DPRINTF(PFX, "calling dri unlock\n");
+ : DRIUnlock(screenInfo.screens[pScrn->scrnIndex]);
+ : }
+ : pI830->LockHeld = 0;
+ : }
+ :#endif
+ :
+ : /* Set the hotkey to just notify us. We can check its results periodically
+ : * in the CheckDevicesTimer. Eventually we want the kernel to just hand us
+ : * an input event when someone presses the button, but for now we just have
+ : * to poll.
+ : */
+ : i830SetHotkeyControl(pScrn, HOTKEY_DRIVER_NOTIFY);
+ :
+ : if (pI830->checkDevices)
+ : pI830->devicesTimer = TimerSet(NULL, 0, 1000, I830CheckDevicesTimer, pScrn);
+ :
+ : /* Mark 3D state as being clobbered */
+ : *pI830->last_3d = LAST_3D_OTHER;
+ :
+ : return TRUE;
+ :}
+ :
+ :static Bool
+ :I830SwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : return xf86SetSingleMode (pScrn, mode, pI830->rotation);
+ :}
+ :
+ :static Bool
+ :I830CloseScreen(int scrnIndex, ScreenPtr pScreen)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :#ifdef I830_USE_XAA
+ : XAAInfoRecPtr infoPtr = pI830->AccelInfoRec;
+ :#endif
+ :
+ : pI830->closing = TRUE;
+ :#ifdef XF86DRI
+ : if (pI830->directRenderingOpen) {
+ :#ifdef DAMAGE
+ : if (pI830->pDamage) {
+ : PixmapPtr pPix = pScreen->GetScreenPixmap(pScreen);
+ :
+ : DamageUnregister(&pPix->drawable, pI830->pDamage);
+ : DamageDestroy(pI830->pDamage);
+ : pI830->pDamage = NULL;
+ : }
+ :#endif
+ :#ifdef XF86DRI_MM
+ : if (pI830->mmModeFlags & I830_KERNEL_MM) {
+ :#ifndef XSERVER_LIBDRM_MM
+ : I830DrmMMTakedown(pI830->drmSubFD, DRM_BO_MEM_TT);
+ :#else
+ : drmMMTakedown(pI830->drmSubFD, DRM_BO_MEM_TT);
+ :#endif
+ : }
+ :#endif /* XF86DRI_MM */
+ : pI830->directRenderingOpen = FALSE;
+ : I830DRICloseScreen(pScreen);
+ : }
+ :#endif
+ :
+ : if (pScrn->vtSema == TRUE) {
+ : I830LeaveVT(scrnIndex, 0);
+ : }
+ :
+ : if (pI830->devicesTimer)
+ : TimerCancel(pI830->devicesTimer);
+ : pI830->devicesTimer = NULL;
+ :
+ : DPRINTF(PFX, "\nUnmapping memory\n");
+ : I830UnmapMem(pScrn);
+ : vgaHWUnmapMem(pScrn);
+ :
+ : if (pI830->ScanlineColorExpandBuffers) {
+ : xfree(pI830->ScanlineColorExpandBuffers);
+ : pI830->ScanlineColorExpandBuffers = NULL;
+ : }
+ :#ifdef I830_USE_XAA
+ : if (infoPtr) {
+ : if (infoPtr->ScanlineColorExpandBuffers)
+ : xfree(infoPtr->ScanlineColorExpandBuffers);
+ : XAADestroyInfoRec(infoPtr);
+ : pI830->AccelInfoRec = NULL;
+ : }
+ :#endif
+ :#ifdef I830_USE_EXA
+ : if (pI830->useEXA && pI830->EXADriverPtr) {
+ : exaDriverFini(pScreen);
+ : xfree(pI830->EXADriverPtr);
+ : pI830->EXADriverPtr = NULL;
+ : }
+ :#endif
+ : xf86_cursors_fini (pScreen);
+ :
+ : i830_reset_allocations(pScrn);
+ :
+ : if (I830IsPrimary(pScrn)) {
+ : xf86GARTCloseScreen(scrnIndex);
+ :
+ : xfree(pI830->LpRing);
+ : pI830->LpRing = NULL;
+ : xfree(pI830->overlayOn);
+ : pI830->overlayOn = NULL;
+ : xfree(pI830->last_3d);
+ : pI830->last_3d = NULL;
+ : }
+ :
+ : pScrn->PointerMoved = pI830->PointerMoved;
+ : pScrn->vtSema = FALSE;
+ : pI830->closing = FALSE;
+ : pScreen->CloseScreen = pI830->CloseScreen;
+ : return (*pScreen->CloseScreen) (scrnIndex, pScreen);
+ :}
+ :
+ :static ModeStatus
+ :I830ValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
+ :{
+ : if (mode->Flags & V_INTERLACE) {
+ : if (verbose) {
+ : xf86DrvMsg(scrnIndex, X_PROBED,
+ : "Removing interlaced mode \"%s\"\n", mode->name);
+ : }
+ : return MODE_BAD;
+ : }
+ : return MODE_OK;
+ :}
+ :
+ :#ifndef SUSPEND_SLEEP
+ :#define SUSPEND_SLEEP 0
+ :#endif
+ :#ifndef RESUME_SLEEP
+ :#define RESUME_SLEEP 0
+ :#endif
+ :
+ :/*
+ : * This function is only required if we need to do anything differently from
+ : * DoApmEvent() in common/xf86PM.c, including if we want to see events other
+ : * than suspend/resume.
+ : */
+ :static Bool
+ :I830PMEvent(int scrnIndex, pmEvent event, Bool undo)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ : DPRINTF(PFX, "Enter VT, event %d, undo: %s\n", event, BOOLTOSTRING(undo));
+ :
+ : switch(event) {
+ : case XF86_APM_SYS_SUSPEND:
+ : case XF86_APM_CRITICAL_SUSPEND: /*do we want to delay a critical suspend?*/
+ : case XF86_APM_USER_SUSPEND:
+ : case XF86_APM_SYS_STANDBY:
+ : case XF86_APM_USER_STANDBY:
+ : if (!undo && !pI830->suspended) {
+ : pScrn->LeaveVT(scrnIndex, 0);
+ : pI830->suspended = TRUE;
+ : sleep(SUSPEND_SLEEP);
+ : } else if (undo && pI830->suspended) {
+ : sleep(RESUME_SLEEP);
+ : pScrn->EnterVT(scrnIndex, 0);
+ : pI830->suspended = FALSE;
+ : }
+ : break;
+ : case XF86_APM_STANDBY_RESUME:
+ : case XF86_APM_NORMAL_RESUME:
+ : case XF86_APM_CRITICAL_RESUME:
+ : if (pI830->suspended) {
+ : sleep(RESUME_SLEEP);
+ : pScrn->EnterVT(scrnIndex, 0);
+ : pI830->suspended = FALSE;
+ : /*
+ : * Turn the screen saver off when resuming. This seems to be
+ : * needed to stop xscreensaver kicking in (when used).
+ : *
+ : * XXX DoApmEvent() should probably call this just like
+ : * xf86VTSwitch() does. Maybe do it here only in 4.2
+ : * compatibility mode.
+ : */
+ : SaveScreens(SCREEN_SAVER_FORCER, ScreenSaverReset);
+ : }
+ : break;
+ : /* This is currently used for ACPI */
+ : case XF86_APM_CAPABILITY_CHANGED:
+ :#if 0
+ : /* If we had status checking turned on, turn it off now */
+ : if (pI830->checkDevices) {
+ : if (pI830->devicesTimer)
+ : TimerCancel(pI830->devicesTimer);
+ : pI830->devicesTimer = NULL;
+ : pI830->checkDevices = FALSE;
+ : }
+ :#endif
+ : if (!I830IsPrimary(pScrn))
+ : return TRUE;
+ :
+ : ErrorF("I830PMEvent: Capability change\n");
+ :
+ : I830CheckDevicesTimer(NULL, 0, pScrn);
+ : SaveScreens(SCREEN_SAVER_FORCER, ScreenSaverReset);
+ : break;
+ : default:
+ : ErrorF("I830PMEvent: received APM event %d\n", event);
+ : }
+ : return TRUE;
+ :}
+ :
+ :#if 0
+ :/**
+ : * This function is used for testing of the screen detect functions from the
+ : * periodic timer.
+ : */
+ :static void
+ :i830MonitorDetectDebugger(ScrnInfoPtr pScrn)
+ :{
+ : Bool found_crt;
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : int start, finish, i;
+ :
+ : if (!pScrn->vtSema)
+ : return 1000;
+ :
+ : for (i = 0; i < xf86_config->num_output; i++) {
+ : enum output_status ret;
+ : char *result;
+ :
+ : start = GetTimeInMillis();
+ : ret = pI830->output[i].detect(pScrn, &pI830->output[i]);
+ : finish = GetTimeInMillis();
+ :
+ : if (ret == OUTPUT_STATUS_CONNECTED)
+ : result = "connected";
+ : else if (ret == OUTPUT_STATUS_DISCONNECTED)
+ : result = "disconnected";
+ : else
+ : result = "unknown";
+ :
+ : xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Detected SDVO as %s in %dms\n",
+ : result, finish - start);
+ : }
+ :}
+ :#endif
+ :
+ :static CARD32
+ :I830CheckDevicesTimer(OsTimerPtr timer, CARD32 now, pointer arg)
+ :{
+ : ScrnInfoPtr pScrn = (ScrnInfoPtr) arg;
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : CARD8 gr18;
+ :
+ : if (!pScrn->vtSema)
+ : return 1000;
+ :
+ :#if 0
+ : i830MonitorDetectDebugger(pScrn);
+ :#endif
+ :
+ : /* Check for a hotkey press report from the BIOS. */
+ : gr18 = pI830->readControl(pI830, GRX, 0x18);
+ : if ((gr18 & (HOTKEY_TOGGLE | HOTKEY_SWITCH)) != 0) {
+ : /* The user has pressed the hotkey requesting a toggle or switch.
+ : * Re-probe our connected displays and turn on whatever we find.
+ : *
+ : * In the future, we want the hotkey to dump down to a user app which
+ : * implements a sensible policy using RandR-1.2. For now, all we get
+ : * is this.
+ : */
+ :
+ : xf86ProbeOutputModes (pScrn, 0, 0);
+ : xf86SetScrnInfoModes (pScrn);
+ : xf86DiDGAReInit (pScrn->pScreen);
+ : xf86SwitchMode(pScrn->pScreen, pScrn->currentMode);
+ :
+ : /* Clear the BIOS's hotkey press flags */
+ : gr18 &= ~(HOTKEY_TOGGLE | HOTKEY_SWITCH);
+ : pI830->writeControl(pI830, GRX, 0x18, gr18);
+ : }
+ :
+ : return 1000;
+ :}
+ :
+ :void
+ :i830WaitSync(ScrnInfoPtr pScrn)
+ 31 0.0338 :{ /* i830WaitSync total: 103 0.1122 */
+ 1 0.0011 : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ :#ifdef I830_USE_XAA
+ 15 0.0163 : if (!pI830->noAccel && !pI830->useEXA && pI830->AccelInfoRec
+ : && pI830->AccelInfoRec->NeedToSync) {
+ : (*pI830->AccelInfoRec->Sync)(pScrn);
+ : pI830->AccelInfoRec->NeedToSync = FALSE;
+ : }
+ :#endif
+ :#ifdef I830_USE_EXA
+ 6 0.0065 : if (!pI830->noAccel && pI830->useEXA && pI830->EXADriverPtr) {
+ : ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
+ 21 0.0229 : exaWaitSync(pScreen);
+ : }
+ :#endif
+ 29 0.0316 :}
+ :
+ :void
+ :i830MarkSync(ScrnInfoPtr pScrn)
+ 7 0.0076 :{ /* i830MarkSync total: 15 0.0163 */
+ : I830Ptr pI830 = I830PTR(pScrn);
+ :
+ :#ifdef I830_USE_XAA
+ : if (!pI830->useEXA && pI830->AccelInfoRec)
+ : pI830->AccelInfoRec->NeedToSync = TRUE;
+ :#endif
+ :#ifdef I830_USE_EXA
+ 2 0.0022 : if (pI830->useEXA && pI830->EXADriverPtr) {
+ : ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
+ 3 0.0033 : exaMarkSync(pScreen);
+ : }
+ :#endif
+ 3 0.0033 :}
+ :
+ :void
+ :I830InitpScrn(ScrnInfoPtr pScrn)
+ :{
+ : pScrn->PreInit = I830PreInit;
+ : pScrn->ScreenInit = I830ScreenInit;
+ : pScrn->SwitchMode = I830SwitchMode;
+ : pScrn->AdjustFrame = i830AdjustFrame;
+ : pScrn->EnterVT = I830EnterVT;
+ : pScrn->LeaveVT = I830LeaveVT;
+ : pScrn->FreeScreen = I830FreeScreen;
+ : pScrn->ValidMode = I830ValidMode;
+ : pScrn->PMEvent = I830PMEvent;
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/mi/misprite.c"
+ *
+ * 140 0.1525
+ */
+
+
+ :/*
+ : * misprite.c
+ : *
+ : * machine independent software sprite routines
+ : */
+ :
+ :
+ :/*
+ :
+ :Copyright 1989, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :*/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :# include <X11/X.h>
+ :# include <X11/Xproto.h>
+ :# include "misc.h"
+ :# include "pixmapstr.h"
+ :# include "input.h"
+ :# include "mi.h"
+ :# include "cursorstr.h"
+ :# include <X11/fonts/font.h>
+ :# include "scrnintstr.h"
+ :# include "colormapst.h"
+ :# include "windowstr.h"
+ :# include "gcstruct.h"
+ :# include "mipointer.h"
+ :# include "mispritest.h"
+ :# include "dixfontstr.h"
+ :# include <X11/fonts/fontstruct.h>
+ :
+ :#ifdef RENDER
+ :# include "mipict.h"
+ :#endif
+ :# include "damage.h"
+ :
+ :#define SPRITE_DEBUG_ENABLE 0
+ :#if SPRITE_DEBUG_ENABLE
+ :#define SPRITE_DEBUG(x) ErrorF x
+ :#else
+ :#define SPRITE_DEBUG(x)
+ :#endif
+ :
+ :/*
+ : * screen wrappers
+ : */
+ :
+ :static int miSpriteScreenIndex;
+ :static unsigned long miSpriteGeneration = 0;
+ :
+ :static Bool miSpriteCloseScreen(int i, ScreenPtr pScreen);
+ :static void miSpriteGetImage(DrawablePtr pDrawable, int sx, int sy,
+ : int w, int h, unsigned int format,
+ : unsigned long planemask, char *pdstLine);
+ :static void miSpriteGetSpans(DrawablePtr pDrawable, int wMax,
+ : DDXPointPtr ppt, int *pwidth, int nspans,
+ : char *pdstStart);
+ :static void miSpriteSourceValidate(DrawablePtr pDrawable, int x, int y,
+ : int width, int height);
+ :static void miSpriteCopyWindow (WindowPtr pWindow,
+ : DDXPointRec ptOldOrg,
+ : RegionPtr prgnSrc);
+ :static void miSpriteBlockHandler(int i, pointer blockData,
+ : pointer pTimeout,
+ : pointer pReadMask);
+ :static void miSpriteInstallColormap(ColormapPtr pMap);
+ :static void miSpriteStoreColors(ColormapPtr pMap, int ndef,
+ : xColorItem *pdef);
+ :
+ :static void miSpriteSaveDoomedAreas(WindowPtr pWin,
+ : RegionPtr pObscured, int dx,
+ : int dy);
+ :static void miSpriteComputeSaved(ScreenPtr pScreen);
+ :
+ :#define SCREEN_PROLOGUE(pScreen, field)\
+ : ((pScreen)->field = \
+ : ((miSpriteScreenPtr) (pScreen)->devPrivates[miSpriteScreenIndex].ptr)->field)
+ :
+ :#define SCREEN_EPILOGUE(pScreen, field)\
+ : ((pScreen)->field = miSprite##field)
+ :
+ :/*
+ : * pointer-sprite method table
+ : */
+ :
+ :static Bool miSpriteRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor);
+ :static Bool miSpriteUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor);
+ :static void miSpriteSetCursor(ScreenPtr pScreen, CursorPtr pCursor,
+ : int x, int y);
+ :static void miSpriteMoveCursor(ScreenPtr pScreen, int x, int y);
+ :
+ :_X_EXPORT miPointerSpriteFuncRec miSpritePointerFuncs = {
+ : miSpriteRealizeCursor,
+ : miSpriteUnrealizeCursor,
+ : miSpriteSetCursor,
+ : miSpriteMoveCursor,
+ :};
+ :
+ :/*
+ : * other misc functions
+ : */
+ :
+ :static void miSpriteRemoveCursor(ScreenPtr pScreen);
+ :static void miSpriteRestoreCursor(ScreenPtr pScreen);
+ :
+ :static void
+ :miSpriteReportDamage (DamagePtr pDamage, RegionPtr pRegion, void *closure)
+ :{
+ : ScreenPtr pScreen = closure;
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ :
+ : if (pScreenPriv->isUp &&
+ : RECT_IN_REGION (pScreen, pRegion, &pScreenPriv->saved) != rgnOUT)
+ : {
+ : SPRITE_DEBUG(("Damage remove\n"));
+ : miSpriteRemoveCursor (pScreen);
+ : }
+ :}
+ :
+ :/*
+ : * miSpriteInitialize -- called from device-dependent screen
+ : * initialization proc after all of the function pointers have
+ : * been stored in the screen structure.
+ : */
+ :
+ :Bool
+ :miSpriteInitialize (pScreen, cursorFuncs, screenFuncs)
+ : ScreenPtr pScreen;
+ : miSpriteCursorFuncPtr cursorFuncs;
+ : miPointerScreenFuncPtr screenFuncs;
+ :{
+ : miSpriteScreenPtr pScreenPriv;
+ : VisualPtr pVisual;
+ :
+ : if (!DamageSetup (pScreen))
+ : return FALSE;
+ :
+ : if (miSpriteGeneration != serverGeneration)
+ : {
+ : miSpriteScreenIndex = AllocateScreenPrivateIndex ();
+ : if (miSpriteScreenIndex < 0)
+ : return FALSE;
+ : miSpriteGeneration = serverGeneration;
+ : }
+ :
+ : pScreenPriv = (miSpriteScreenPtr) xalloc (sizeof (miSpriteScreenRec));
+ : if (!pScreenPriv)
+ : return FALSE;
+ :
+ : pScreenPriv->pDamage = DamageCreate (miSpriteReportDamage,
+ : (DamageDestroyFunc) 0,
+ : DamageReportRawRegion,
+ : TRUE,
+ : pScreen,
+ : (void *) pScreen);
+ :
+ : if (!miPointerInitialize (pScreen, &miSpritePointerFuncs, screenFuncs,TRUE))
+ : {
+ : xfree ((pointer) pScreenPriv);
+ : return FALSE;
+ : }
+ : for (pVisual = pScreen->visuals;
+ : pVisual->vid != pScreen->rootVisual;
+ : pVisual++)
+ : ;
+ : pScreenPriv->pVisual = pVisual;
+ : pScreenPriv->CloseScreen = pScreen->CloseScreen;
+ : pScreenPriv->GetImage = pScreen->GetImage;
+ : pScreenPriv->GetSpans = pScreen->GetSpans;
+ : pScreenPriv->SourceValidate = pScreen->SourceValidate;
+ :
+ : pScreenPriv->CopyWindow = pScreen->CopyWindow;
+ :
+ : pScreenPriv->SaveDoomedAreas = pScreen->SaveDoomedAreas;
+ :
+ : pScreenPriv->InstallColormap = pScreen->InstallColormap;
+ : pScreenPriv->StoreColors = pScreen->StoreColors;
+ :
+ : pScreenPriv->BlockHandler = pScreen->BlockHandler;
+ :
+ : pScreenPriv->pCursor = NULL;
+ : pScreenPriv->x = 0;
+ : pScreenPriv->y = 0;
+ : pScreenPriv->isUp = FALSE;
+ : pScreenPriv->shouldBeUp = FALSE;
+ : pScreenPriv->pCacheWin = NullWindow;
+ : pScreenPriv->isInCacheWin = FALSE;
+ : pScreenPriv->checkPixels = TRUE;
+ : pScreenPriv->pInstalledMap = NULL;
+ : pScreenPriv->pColormap = NULL;
+ : pScreenPriv->funcs = cursorFuncs;
+ : pScreenPriv->colors[SOURCE_COLOR].red = 0;
+ : pScreenPriv->colors[SOURCE_COLOR].green = 0;
+ : pScreenPriv->colors[SOURCE_COLOR].blue = 0;
+ : pScreenPriv->colors[MASK_COLOR].red = 0;
+ : pScreenPriv->colors[MASK_COLOR].green = 0;
+ : pScreenPriv->colors[MASK_COLOR].blue = 0;
+ : pScreen->devPrivates[miSpriteScreenIndex].ptr = (pointer) pScreenPriv;
+ :
+ : pScreen->CloseScreen = miSpriteCloseScreen;
+ : pScreen->GetImage = miSpriteGetImage;
+ : pScreen->GetSpans = miSpriteGetSpans;
+ : pScreen->SourceValidate = miSpriteSourceValidate;
+ :
+ : pScreen->CopyWindow = miSpriteCopyWindow;
+ :
+ : pScreen->SaveDoomedAreas = miSpriteSaveDoomedAreas;
+ :
+ : pScreen->InstallColormap = miSpriteInstallColormap;
+ : pScreen->StoreColors = miSpriteStoreColors;
+ :
+ : pScreen->BlockHandler = miSpriteBlockHandler;
+ :
+ : return TRUE;
+ :}
+ :
+ :/*
+ : * Screen wrappers
+ : */
+ :
+ :/*
+ : * CloseScreen wrapper -- unwrap everything, free the private data
+ : * and call the wrapped function
+ : */
+ :
+ :static Bool
+ :miSpriteCloseScreen (i, pScreen)
+ : int i;
+ : ScreenPtr pScreen;
+ :{
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ :
+ : pScreen->CloseScreen = pScreenPriv->CloseScreen;
+ : pScreen->GetImage = pScreenPriv->GetImage;
+ : pScreen->GetSpans = pScreenPriv->GetSpans;
+ : pScreen->SourceValidate = pScreenPriv->SourceValidate;
+ : pScreen->BlockHandler = pScreenPriv->BlockHandler;
+ : pScreen->InstallColormap = pScreenPriv->InstallColormap;
+ : pScreen->StoreColors = pScreenPriv->StoreColors;
+ :
+ : pScreen->SaveDoomedAreas = pScreenPriv->SaveDoomedAreas;
+ : miSpriteIsUpFALSE (pScreen, pScreenPriv);
+ : DamageDestroy (pScreenPriv->pDamage);
+ :
+ : xfree ((pointer) pScreenPriv);
+ :
+ : return (*pScreen->CloseScreen) (i, pScreen);
+ :}
+ :
+ :static void
+ :miSpriteGetImage (pDrawable, sx, sy, w, h, format, planemask, pdstLine)
+ : DrawablePtr pDrawable;
+ : int sx, sy, w, h;
+ : unsigned int format;
+ : unsigned long planemask;
+ : char *pdstLine;
+ :{
+ : ScreenPtr pScreen = pDrawable->pScreen;
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ : SCREEN_PROLOGUE (pScreen, GetImage);
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ :
+ : if (pDrawable->type == DRAWABLE_WINDOW &&
+ : pScreenPriv->isUp &&
+ : ORG_OVERLAP(&pScreenPriv->saved,pDrawable->x,pDrawable->y, sx, sy, w, h))
+ : {
+ : SPRITE_DEBUG (("GetImage remove\n"));
+ : miSpriteRemoveCursor (pScreen);
+ : }
+ :
+ : (*pScreen->GetImage) (pDrawable, sx, sy, w, h,
+ : format, planemask, pdstLine);
+ :
+ : SCREEN_EPILOGUE (pScreen, GetImage);
+ :}
+ :
+ :static void
+ :miSpriteGetSpans (pDrawable, wMax, ppt, pwidth, nspans, pdstStart)
+ : DrawablePtr pDrawable;
+ : int wMax;
+ : DDXPointPtr ppt;
+ : int *pwidth;
+ : int nspans;
+ : char *pdstStart;
+ :{
+ : ScreenPtr pScreen = pDrawable->pScreen;
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ : SCREEN_PROLOGUE (pScreen, GetSpans);
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ :
+ : if (pDrawable->type == DRAWABLE_WINDOW && pScreenPriv->isUp)
+ : {
+ : DDXPointPtr pts;
+ : int *widths;
+ : int nPts;
+ : int xorg,
+ : yorg;
+ :
+ : xorg = pDrawable->x;
+ : yorg = pDrawable->y;
+ :
+ : for (pts = ppt, widths = pwidth, nPts = nspans;
+ : nPts--;
+ : pts++, widths++)
+ : {
+ : if (SPN_OVERLAP(&pScreenPriv->saved,pts->y+yorg,
+ : pts->x+xorg,*widths))
+ : {
+ : SPRITE_DEBUG (("GetSpans remove\n"));
+ : miSpriteRemoveCursor (pScreen);
+ : break;
+ : }
+ : }
+ : }
+ :
+ : (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
+ :
+ : SCREEN_EPILOGUE (pScreen, GetSpans);
+ :}
+ :
+ :static void
+ :miSpriteSourceValidate (pDrawable, x, y, width, height)
+ : DrawablePtr pDrawable;
+ : int x, y, width, height;
+ 31 0.0338 :{ /* miSpriteSourceValidate total: 140 0.1525 */
+ : ScreenPtr pScreen = pDrawable->pScreen;
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ 55 0.0599 : SCREEN_PROLOGUE (pScreen, SourceValidate);
+ :
+ 7 0.0076 : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ :
+ : if (pDrawable->type == DRAWABLE_WINDOW && pScreenPriv->isUp &&
+ : ORG_OVERLAP(&pScreenPriv->saved, pDrawable->x, pDrawable->y,
+ : x, y, width, height))
+ : {
+ : SPRITE_DEBUG (("SourceValidate remove\n"));
+ : miSpriteRemoveCursor (pScreen);
+ : }
+ :
+ 26 0.0283 : if (pScreen->SourceValidate)
+ : (*pScreen->SourceValidate) (pDrawable, x, y, width, height);
+ :
+ 5 0.0054 : SCREEN_EPILOGUE (pScreen, SourceValidate);
+ 16 0.0174 :}
+ :
+ :static void
+ :miSpriteCopyWindow (WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
+ :{
+ : ScreenPtr pScreen = pWindow->drawable.pScreen;
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ : SCREEN_PROLOGUE (pScreen, CopyWindow);
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ : /*
+ : * Damage will take care of destination check
+ : */
+ : if (pScreenPriv->isUp &&
+ : RECT_IN_REGION (pScreen, prgnSrc, &pScreenPriv->saved) != rgnOUT)
+ : {
+ : SPRITE_DEBUG (("CopyWindow remove\n"));
+ : miSpriteRemoveCursor (pScreen);
+ : }
+ :
+ : (*pScreen->CopyWindow) (pWindow, ptOldOrg, prgnSrc);
+ : SCREEN_EPILOGUE (pScreen, CopyWindow);
+ :}
+ :
+ :static void
+ :miSpriteBlockHandler (i, blockData, pTimeout, pReadmask)
+ : int i;
+ : pointer blockData;
+ : pointer pTimeout;
+ : pointer pReadmask;
+ :{
+ : ScreenPtr pScreen = screenInfo.screens[i];
+ : miSpriteScreenPtr pPriv;
+ :
+ : pPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ :
+ : SCREEN_PROLOGUE(pScreen, BlockHandler);
+ :
+ : (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+ :
+ : SCREEN_EPILOGUE(pScreen, BlockHandler);
+ :
+ : if (!pPriv->isUp && pPriv->shouldBeUp)
+ : {
+ : SPRITE_DEBUG (("BlockHandler restore\n"));
+ : miSpriteRestoreCursor (pScreen);
+ : }
+ :}
+ :
+ :static void
+ :miSpriteInstallColormap (pMap)
+ : ColormapPtr pMap;
+ :{
+ : ScreenPtr pScreen = pMap->pScreen;
+ : miSpriteScreenPtr pPriv;
+ :
+ : pPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ :
+ : SCREEN_PROLOGUE(pScreen, InstallColormap);
+ :
+ : (*pScreen->InstallColormap) (pMap);
+ :
+ : SCREEN_EPILOGUE(pScreen, InstallColormap);
+ :
+ : pPriv->pInstalledMap = pMap;
+ : if (pPriv->pColormap != pMap)
+ : {
+ : pPriv->checkPixels = TRUE;
+ : if (pPriv->isUp)
+ : miSpriteRemoveCursor (pScreen);
+ : }
+ :}
+ :
+ :static void
+ :miSpriteStoreColors (pMap, ndef, pdef)
+ : ColormapPtr pMap;
+ : int ndef;
+ : xColorItem *pdef;
+ :{
+ : ScreenPtr pScreen = pMap->pScreen;
+ : miSpriteScreenPtr pPriv;
+ : int i;
+ : int updated;
+ : VisualPtr pVisual;
+ :
+ : pPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ :
+ : SCREEN_PROLOGUE(pScreen, StoreColors);
+ :
+ : (*pScreen->StoreColors) (pMap, ndef, pdef);
+ :
+ : SCREEN_EPILOGUE(pScreen, StoreColors);
+ :
+ : if (pPriv->pColormap == pMap)
+ : {
+ : updated = 0;
+ : pVisual = pMap->pVisual;
+ : if (pVisual->class == DirectColor)
+ : {
+ : /* Direct color - match on any of the subfields */
+ :
+ :#define MaskMatch(a,b,mask) (((a) & (pVisual->mask)) == ((b) & (pVisual->mask)))
+ :
+ :#define UpdateDAC(plane,dac,mask) {\
+ : if (MaskMatch (pPriv->colors[plane].pixel,pdef[i].pixel,mask)) {\
+ : pPriv->colors[plane].dac = pdef[i].dac; \
+ : updated = 1; \
+ : } \
+ :}
+ :
+ :#define CheckDirect(plane) \
+ : UpdateDAC(plane,red,redMask) \
+ : UpdateDAC(plane,green,greenMask) \
+ : UpdateDAC(plane,blue,blueMask)
+ :
+ : for (i = 0; i < ndef; i++)
+ : {
+ : CheckDirect (SOURCE_COLOR)
+ : CheckDirect (MASK_COLOR)
+ : }
+ : }
+ : else
+ : {
+ : /* PseudoColor/GrayScale - match on exact pixel */
+ : for (i = 0; i < ndef; i++)
+ : {
+ : if (pdef[i].pixel == pPriv->colors[SOURCE_COLOR].pixel)
+ : {
+ : pPriv->colors[SOURCE_COLOR] = pdef[i];
+ : if (++updated == 2)
+ : break;
+ : }
+ : if (pdef[i].pixel == pPriv->colors[MASK_COLOR].pixel)
+ : {
+ : pPriv->colors[MASK_COLOR] = pdef[i];
+ : if (++updated == 2)
+ : break;
+ : }
+ : }
+ : }
+ : if (updated)
+ : {
+ : pPriv->checkPixels = TRUE;
+ : if (pPriv->isUp)
+ : miSpriteRemoveCursor (pScreen);
+ : }
+ : }
+ :}
+ :
+ :static void
+ :miSpriteFindColors (ScreenPtr pScreen)
+ :{
+ : miSpriteScreenPtr pScreenPriv = (miSpriteScreenPtr)
+ : pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ : CursorPtr pCursor;
+ : xColorItem *sourceColor, *maskColor;
+ :
+ : pCursor = pScreenPriv->pCursor;
+ : sourceColor = &pScreenPriv->colors[SOURCE_COLOR];
+ : maskColor = &pScreenPriv->colors[MASK_COLOR];
+ : if (pScreenPriv->pColormap != pScreenPriv->pInstalledMap ||
+ : !(pCursor->foreRed == sourceColor->red &&
+ : pCursor->foreGreen == sourceColor->green &&
+ : pCursor->foreBlue == sourceColor->blue &&
+ : pCursor->backRed == maskColor->red &&
+ : pCursor->backGreen == maskColor->green &&
+ : pCursor->backBlue == maskColor->blue))
+ : {
+ : pScreenPriv->pColormap = pScreenPriv->pInstalledMap;
+ : sourceColor->red = pCursor->foreRed;
+ : sourceColor->green = pCursor->foreGreen;
+ : sourceColor->blue = pCursor->foreBlue;
+ : FakeAllocColor (pScreenPriv->pColormap, sourceColor);
+ : maskColor->red = pCursor->backRed;
+ : maskColor->green = pCursor->backGreen;
+ : maskColor->blue = pCursor->backBlue;
+ : FakeAllocColor (pScreenPriv->pColormap, maskColor);
+ : /* "free" the pixels right away, don't let this confuse you */
+ : FakeFreeColor(pScreenPriv->pColormap, sourceColor->pixel);
+ : FakeFreeColor(pScreenPriv->pColormap, maskColor->pixel);
+ : }
+ : pScreenPriv->checkPixels = FALSE;
+ :}
+ :
+ :/*
+ : * BackingStore wrappers
+ : */
+ :
+ :static void
+ :miSpriteSaveDoomedAreas (pWin, pObscured, dx, dy)
+ : WindowPtr pWin;
+ : RegionPtr pObscured;
+ : int dx, dy;
+ :{
+ : ScreenPtr pScreen;
+ : miSpriteScreenPtr pScreenPriv;
+ : BoxRec cursorBox;
+ :
+ : pScreen = pWin->drawable.pScreen;
+ :
+ : SCREEN_PROLOGUE (pScreen, SaveDoomedAreas);
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ : if (pScreenPriv->isUp)
+ : {
+ : cursorBox = pScreenPriv->saved;
+ :
+ : if (dx || dy)
+ : {
+ : cursorBox.x1 += dx;
+ : cursorBox.y1 += dy;
+ : cursorBox.x2 += dx;
+ : cursorBox.y2 += dy;
+ : }
+ : if (RECT_IN_REGION( pScreen, pObscured, &cursorBox) != rgnOUT)
+ : miSpriteRemoveCursor (pScreen);
+ : }
+ :
+ : (*pScreen->SaveDoomedAreas) (pWin, pObscured, dx, dy);
+ :
+ : SCREEN_EPILOGUE (pScreen, SaveDoomedAreas);
+ :}
+ :
+ :/*
+ : * miPointer interface routines
+ : */
+ :
+ :#define SPRITE_PAD 8
+ :
+ :static Bool
+ :miSpriteRealizeCursor (pScreen, pCursor)
+ : ScreenPtr pScreen;
+ : CursorPtr pCursor;
+ :{
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ : if (pCursor == pScreenPriv->pCursor)
+ : pScreenPriv->checkPixels = TRUE;
+ : return (*pScreenPriv->funcs->RealizeCursor) (pScreen, pCursor);
+ :}
+ :
+ :static Bool
+ :miSpriteUnrealizeCursor (pScreen, pCursor)
+ : ScreenPtr pScreen;
+ : CursorPtr pCursor;
+ :{
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ : return (*pScreenPriv->funcs->UnrealizeCursor) (pScreen, pCursor);
+ :}
+ :
+ :static void
+ :miSpriteSetCursor (pScreen, pCursor, x, y)
+ : ScreenPtr pScreen;
+ : CursorPtr pCursor;
+ : int x;
+ : int y;
+ :{
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ : if (!pCursor)
+ : {
+ : pScreenPriv->shouldBeUp = FALSE;
+ : if (pScreenPriv->isUp)
+ : miSpriteRemoveCursor (pScreen);
+ : pScreenPriv->pCursor = 0;
+ : return;
+ : }
+ : pScreenPriv->shouldBeUp = TRUE;
+ : if (pScreenPriv->x == x &&
+ : pScreenPriv->y == y &&
+ : pScreenPriv->pCursor == pCursor &&
+ : !pScreenPriv->checkPixels)
+ : {
+ : return;
+ : }
+ : pScreenPriv->x = x;
+ : pScreenPriv->y = y;
+ : pScreenPriv->pCacheWin = NullWindow;
+ : if (pScreenPriv->checkPixels || pScreenPriv->pCursor != pCursor)
+ : {
+ : pScreenPriv->pCursor = pCursor;
+ : miSpriteFindColors (pScreen);
+ : }
+ : if (pScreenPriv->isUp) {
+ : int sx, sy;
+ : /*
+ : * check to see if the old saved region
+ : * encloses the new sprite, in which case we use
+ : * the flicker-free MoveCursor primitive.
+ : */
+ : sx = pScreenPriv->x - (int)pCursor->bits->xhot;
+ : sy = pScreenPriv->y - (int)pCursor->bits->yhot;
+ : if (sx + (int) pCursor->bits->width >= pScreenPriv->saved.x1 &&
+ : sx < pScreenPriv->saved.x2 &&
+ : sy + (int) pCursor->bits->height >= pScreenPriv->saved.y1 &&
+ : sy < pScreenPriv->saved.y2 &&
+ : (int) pCursor->bits->width + (2 * SPRITE_PAD) ==
+ : pScreenPriv->saved.x2 - pScreenPriv->saved.x1 &&
+ : (int) pCursor->bits->height + (2 * SPRITE_PAD) ==
+ : pScreenPriv->saved.y2 - pScreenPriv->saved.y1
+ : )
+ : {
+ : DamageDrawInternal (pScreen, TRUE);
+ : miSpriteIsUpFALSE (pScreen, pScreenPriv);
+ : if (!(sx >= pScreenPriv->saved.x1 &&
+ : sx + (int)pCursor->bits->width < pScreenPriv->saved.x2 &&
+ : sy >= pScreenPriv->saved.y1 &&
+ : sy + (int)pCursor->bits->height < pScreenPriv->saved.y2))
+ : {
+ : int oldx1, oldy1, dx, dy;
+ :
+ : oldx1 = pScreenPriv->saved.x1;
+ : oldy1 = pScreenPriv->saved.y1;
+ : dx = oldx1 - (sx - SPRITE_PAD);
+ : dy = oldy1 - (sy - SPRITE_PAD);
+ : pScreenPriv->saved.x1 -= dx;
+ : pScreenPriv->saved.y1 -= dy;
+ : pScreenPriv->saved.x2 -= dx;
+ : pScreenPriv->saved.y2 -= dy;
+ : (void) (*pScreenPriv->funcs->ChangeSave) (pScreen,
+ : pScreenPriv->saved.x1,
+ : pScreenPriv->saved.y1,
+ : pScreenPriv->saved.x2 - pScreenPriv->saved.x1,
+ : pScreenPriv->saved.y2 - pScreenPriv->saved.y1,
+ : dx, dy);
+ : }
+ : (void) (*pScreenPriv->funcs->MoveCursor) (pScreen, pCursor,
+ : pScreenPriv->saved.x1,
+ : pScreenPriv->saved.y1,
+ : pScreenPriv->saved.x2 - pScreenPriv->saved.x1,
+ : pScreenPriv->saved.y2 - pScreenPriv->saved.y1,
+ : sx - pScreenPriv->saved.x1,
+ : sy - pScreenPriv->saved.y1,
+ : pScreenPriv->colors[SOURCE_COLOR].pixel,
+ : pScreenPriv->colors[MASK_COLOR].pixel);
+ : miSpriteIsUpTRUE (pScreen, pScreenPriv);
+ : DamageDrawInternal (pScreen, FALSE);
+ : }
+ : else
+ : {
+ : SPRITE_DEBUG (("SetCursor remove\n"));
+ : miSpriteRemoveCursor (pScreen);
+ : }
+ : }
+ : if (!pScreenPriv->isUp && pScreenPriv->pCursor)
+ : {
+ : SPRITE_DEBUG (("SetCursor restore\n"));
+ : miSpriteRestoreCursor (pScreen);
+ : }
+ :}
+ :
+ :static void
+ :miSpriteMoveCursor (pScreen, x, y)
+ : ScreenPtr pScreen;
+ : int x, y;
+ :{
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ : miSpriteSetCursor (pScreen, pScreenPriv->pCursor, x, y);
+ :}
+ :
+ :/*
+ : * undraw/draw cursor
+ : */
+ :
+ :static void
+ :miSpriteRemoveCursor (pScreen)
+ : ScreenPtr pScreen;
+ :{
+ : miSpriteScreenPtr pScreenPriv;
+ :
+ : DamageDrawInternal (pScreen, TRUE);
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ : miSpriteIsUpFALSE (pScreen, pScreenPriv);
+ : pScreenPriv->pCacheWin = NullWindow;
+ : if (!(*pScreenPriv->funcs->RestoreUnderCursor) (pScreen,
+ : pScreenPriv->saved.x1,
+ : pScreenPriv->saved.y1,
+ : pScreenPriv->saved.x2 - pScreenPriv->saved.x1,
+ : pScreenPriv->saved.y2 - pScreenPriv->saved.y1))
+ : {
+ : miSpriteIsUpTRUE (pScreen, pScreenPriv);
+ : }
+ : DamageDrawInternal (pScreen, FALSE);
+ :}
+ :
+ :/*
+ : * Called from the block handler, restores the cursor
+ : * before waiting for something to do.
+ : */
+ :
+ :static void
+ :miSpriteRestoreCursor (pScreen)
+ : ScreenPtr pScreen;
+ :{
+ : miSpriteScreenPtr pScreenPriv;
+ : int x, y;
+ : CursorPtr pCursor;
+ :
+ : DamageDrawInternal (pScreen, TRUE);
+ : miSpriteComputeSaved (pScreen);
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ : pCursor = pScreenPriv->pCursor;
+ : x = pScreenPriv->x - (int)pCursor->bits->xhot;
+ : y = pScreenPriv->y - (int)pCursor->bits->yhot;
+ : if ((*pScreenPriv->funcs->SaveUnderCursor) (pScreen,
+ : pScreenPriv->saved.x1,
+ : pScreenPriv->saved.y1,
+ : pScreenPriv->saved.x2 - pScreenPriv->saved.x1,
+ : pScreenPriv->saved.y2 - pScreenPriv->saved.y1))
+ : {
+ : if (pScreenPriv->checkPixels)
+ : miSpriteFindColors (pScreen);
+ : if ((*pScreenPriv->funcs->PutUpCursor) (pScreen, pCursor, x, y,
+ : pScreenPriv->colors[SOURCE_COLOR].pixel,
+ : pScreenPriv->colors[MASK_COLOR].pixel))
+ : {
+ : miSpriteIsUpTRUE (pScreen, pScreenPriv);
+ : }
+ : }
+ : DamageDrawInternal (pScreen, FALSE);
+ :}
+ :
+ :/*
+ : * compute the desired area of the screen to save
+ : */
+ :
+ :static void
+ :miSpriteComputeSaved (pScreen)
+ : ScreenPtr pScreen;
+ :{
+ : miSpriteScreenPtr pScreenPriv;
+ : int x, y, w, h;
+ : int wpad, hpad;
+ : CursorPtr pCursor;
+ :
+ : pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
+ : pCursor = pScreenPriv->pCursor;
+ : x = pScreenPriv->x - (int)pCursor->bits->xhot;
+ : y = pScreenPriv->y - (int)pCursor->bits->yhot;
+ : w = pCursor->bits->width;
+ : h = pCursor->bits->height;
+ : wpad = SPRITE_PAD;
+ : hpad = SPRITE_PAD;
+ : pScreenPriv->saved.x1 = x - wpad;
+ : pScreenPriv->saved.y1 = y - hpad;
+ : pScreenPriv->saved.x2 = pScreenPriv->saved.x1 + w + wpad * 2;
+ : pScreenPriv->saved.y2 = pScreenPriv->saved.y1 + h + hpad * 2;
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/fb/fbcopy.c"
+ *
+ * 127 0.1384
+ */
+
+
+ :/*
+ : * Copyright © 1998 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <stdlib.h>
+ :
+ :#include "fb.h"
+ :
+ :void
+ :fbCopyNtoN (DrawablePtr pSrcDrawable,
+ : DrawablePtr pDstDrawable,
+ : GCPtr pGC,
+ : BoxPtr pbox,
+ : int nbox,
+ : int dx,
+ : int dy,
+ : Bool reverse,
+ : Bool upsidedown,
+ : Pixel bitplane,
+ : void *closure)
+ :{
+ : CARD8 alu = pGC ? pGC->alu : GXcopy;
+ : FbBits pm = pGC ? fbGetGCPrivate(pGC)->pm : FB_ALLONES;
+ : FbBits *src;
+ : FbStride srcStride;
+ : int srcBpp;
+ : int srcXoff, srcYoff;
+ : FbBits *dst;
+ : FbStride dstStride;
+ : int dstBpp;
+ : int dstXoff, dstYoff;
+ :
+ : fbGetDrawable (pSrcDrawable, src, srcStride, srcBpp, srcXoff, srcYoff);
+ : fbGetDrawable (pDstDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
+ :
+ : while (nbox--)
+ : {
+ :#ifndef FB_ACCESS_WRAPPER /* pixman_blt() doesn't support accessors yet */
+ : if (pm == FB_ALLONES && alu == GXcopy && !reverse &&
+ : !upsidedown)
+ : {
+ : if (!pixman_blt ((uint32_t *)src, (uint32_t *)dst, srcStride, dstStride, srcBpp, dstBpp,
+ : (pbox->x1 + dx + srcXoff),
+ : (pbox->y1 + dy + srcYoff),
+ : (pbox->x1 + srcXoff),
+ : (pbox->y1 + srcYoff),
+ : (pbox->x2 - pbox->x1),
+ : (pbox->y2 - pbox->y1)))
+ : goto fallback;
+ : else
+ : goto next;
+ : }
+ : fallback:
+ :#endif
+ : fbBlt (src + (pbox->y1 + dy + srcYoff) * srcStride,
+ : srcStride,
+ : (pbox->x1 + dx + srcXoff) * srcBpp,
+ :
+ : dst + (pbox->y1 + dstYoff) * dstStride,
+ : dstStride,
+ : (pbox->x1 + dstXoff) * dstBpp,
+ :
+ : (pbox->x2 - pbox->x1) * dstBpp,
+ : (pbox->y2 - pbox->y1),
+ :
+ : alu,
+ : pm,
+ : dstBpp,
+ :
+ : reverse,
+ : upsidedown);
+ :#ifndef FB_ACCESS_WRAPPER
+ : next:
+ :#endif
+ : pbox++;
+ : }
+ : fbFinishAccess (pDstDrawable);
+ : fbFinishAccess (pSrcDrawable);
+ :}
+ :
+ :void
+ :fbCopy1toN (DrawablePtr pSrcDrawable,
+ : DrawablePtr pDstDrawable,
+ : GCPtr pGC,
+ : BoxPtr pbox,
+ : int nbox,
+ : int dx,
+ : int dy,
+ : Bool reverse,
+ : Bool upsidedown,
+ : Pixel bitplane,
+ : void *closure)
+ :{
+ : FbGCPrivPtr pPriv = fbGetGCPrivate(pGC);
+ : FbBits *src;
+ : FbStride srcStride;
+ : int srcBpp;
+ : int srcXoff, srcYoff;
+ : FbBits *dst;
+ : FbStride dstStride;
+ : int dstBpp;
+ : int dstXoff, dstYoff;
+ :
+ : fbGetDrawable (pSrcDrawable, src, srcStride, srcBpp, srcXoff, srcYoff);
+ : fbGetDrawable (pDstDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
+ :
+ : while (nbox--)
+ : {
+ : if (dstBpp == 1)
+ : {
+ : fbBlt (src + (pbox->y1 + dy + srcYoff) * srcStride,
+ : srcStride,
+ : (pbox->x1 + dx + srcXoff) * srcBpp,
+ :
+ : dst + (pbox->y1 + dstYoff) * dstStride,
+ : dstStride,
+ : (pbox->x1 + dstXoff) * dstBpp,
+ :
+ : (pbox->x2 - pbox->x1) * dstBpp,
+ : (pbox->y2 - pbox->y1),
+ :
+ : FbOpaqueStipple1Rop(pGC->alu,
+ : pGC->fgPixel,pGC->bgPixel),
+ : pPriv->pm,
+ : dstBpp,
+ :
+ : reverse,
+ : upsidedown);
+ : }
+ : else
+ : {
+ : fbBltOne ((FbStip *) (src + (pbox->y1 + dy + srcYoff) * srcStride),
+ : srcStride*(FB_UNIT/FB_STIP_UNIT),
+ : (pbox->x1 + dx + srcXoff),
+ :
+ : dst + (pbox->y1 + dstYoff) * dstStride,
+ : dstStride,
+ : (pbox->x1 + dstXoff) * dstBpp,
+ : dstBpp,
+ :
+ : (pbox->x2 - pbox->x1) * dstBpp,
+ : (pbox->y2 - pbox->y1),
+ :
+ : pPriv->and, pPriv->xor,
+ : pPriv->bgand, pPriv->bgxor);
+ : }
+ : pbox++;
+ : }
+ :
+ : fbFinishAccess (pDstDrawable);
+ : fbFinishAccess (pSrcDrawable);
+ :}
+ :
+ :void
+ :fbCopyNto1 (DrawablePtr pSrcDrawable,
+ : DrawablePtr pDstDrawable,
+ : GCPtr pGC,
+ : BoxPtr pbox,
+ : int nbox,
+ : int dx,
+ : int dy,
+ : Bool reverse,
+ : Bool upsidedown,
+ : Pixel bitplane,
+ : void *closure)
+ :{
+ : FbGCPrivPtr pPriv = fbGetGCPrivate (pGC);
+ :
+ : while (nbox--)
+ : {
+ : if (pDstDrawable->bitsPerPixel == 1)
+ : {
+ : FbBits *src;
+ : FbStride srcStride;
+ : int srcBpp;
+ : int srcXoff, srcYoff;
+ :
+ : FbStip *dst;
+ : FbStride dstStride;
+ : int dstBpp;
+ : int dstXoff, dstYoff;
+ :
+ : fbGetDrawable (pSrcDrawable, src, srcStride, srcBpp, srcXoff, srcYoff);
+ : fbGetStipDrawable (pDstDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
+ : fbBltPlane (src + (pbox->y1+ dy + srcYoff) * srcStride,
+ : srcStride,
+ : (pbox->x1 + dx + srcXoff) * srcBpp,
+ : srcBpp,
+ :
+ : dst + (pbox->y1 + dstYoff) * dstStride,
+ : dstStride,
+ : (pbox->x1 + dstXoff) * dstBpp,
+ :
+ : (pbox->x2 - pbox->x1) * srcBpp,
+ : (pbox->y2 - pbox->y1),
+ :
+ : (FbStip) pPriv->and, (FbStip) pPriv->xor,
+ : (FbStip) pPriv->bgand, (FbStip) pPriv->bgxor,
+ : bitplane);
+ : fbFinishAccess (pDstDrawable);
+ : fbFinishAccess (pSrcDrawable);
+ : }
+ : else
+ : {
+ : FbBits *src;
+ : FbStride srcStride;
+ : int srcBpp;
+ : int srcXoff, srcYoff;
+ :
+ : FbBits *dst;
+ : FbStride dstStride;
+ : int dstBpp;
+ : int dstXoff, dstYoff;
+ :
+ : FbStip *tmp;
+ : FbStride tmpStride;
+ : int width, height;
+ :
+ : width = pbox->x2 - pbox->x1;
+ : height = pbox->y2 - pbox->y1;
+ :
+ : tmpStride = ((width + FB_STIP_MASK) >> FB_STIP_SHIFT);
+ : tmp = xalloc (tmpStride * height * sizeof (FbStip));
+ : if (!tmp)
+ : return;
+ :
+ : fbGetDrawable (pSrcDrawable, src, srcStride, srcBpp, srcXoff, srcYoff);
+ : fbGetDrawable (pDstDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
+ :
+ : fbBltPlane (src + (pbox->y1+ dy + srcYoff) * srcStride,
+ : srcStride,
+ : (pbox->x1 + dx + srcXoff) * srcBpp,
+ : srcBpp,
+ :
+ : tmp,
+ : tmpStride,
+ : 0,
+ :
+ : width * srcBpp,
+ : height,
+ :
+ : fbAndStip(GXcopy,FB_ALLONES,FB_ALLONES),
+ : fbXorStip(GXcopy,FB_ALLONES,FB_ALLONES),
+ : fbAndStip(GXcopy,0,FB_ALLONES),
+ : fbXorStip(GXcopy,0,FB_ALLONES),
+ : bitplane);
+ : fbBltOne (tmp,
+ : tmpStride,
+ : 0,
+ :
+ : dst + (pbox->y1 + dstYoff) * dstStride,
+ : dstStride,
+ : (pbox->x1 + dstXoff) * dstBpp,
+ : dstBpp,
+ :
+ : width * dstBpp,
+ : height,
+ :
+ : pPriv->and, pPriv->xor,
+ : pPriv->bgand, pPriv->bgxor);
+ : xfree (tmp);
+ :
+ : fbFinishAccess (pDstDrawable);
+ : fbFinishAccess (pSrcDrawable);
+ : }
+ : pbox++;
+ : }
+ :}
+ :
+ :void
+ :fbCopyRegion (DrawablePtr pSrcDrawable,
+ : DrawablePtr pDstDrawable,
+ : GCPtr pGC,
+ : RegionPtr pDstRegion,
+ : int dx,
+ : int dy,
+ : fbCopyProc copyProc,
+ : Pixel bitPlane,
+ : void *closure)
+ 4 0.0044 :{ /* fbCopyRegion total: 27 0.0294 */
+ : int careful;
+ : Bool reverse;
+ : Bool upsidedown;
+ : BoxPtr pbox;
+ : int nbox;
+ : BoxPtr pboxNew1, pboxNew2, pboxBase, pboxNext, pboxTmp;
+ :
+ 8 0.0087 : pbox = REGION_RECTS(pDstRegion);
+ : nbox = REGION_NUM_RECTS(pDstRegion);
+ :
+ : /* XXX we have to err on the side of safety when both are windows,
+ : * because we don't know if IncludeInferiors is being used.
+ : */
+ 2 0.0022 : careful = ((pSrcDrawable == pDstDrawable) ||
+ : ((pSrcDrawable->type == DRAWABLE_WINDOW) &&
+ : (pDstDrawable->type == DRAWABLE_WINDOW)));
+ :
+ : pboxNew1 = NULL;
+ : pboxNew2 = NULL;
+ : if (careful && dy < 0)
+ : {
+ : upsidedown = TRUE;
+ :
+ : if (nbox > 1)
+ : {
+ : /* keep ordering in each band, reverse order of bands */
+ : pboxNew1 = (BoxPtr)ALLOCATE_LOCAL(sizeof(BoxRec) * nbox);
+ : if(!pboxNew1)
+ : return;
+ : pboxBase = pboxNext = pbox+nbox-1;
+ : while (pboxBase >= pbox)
+ : {
+ : while ((pboxNext >= pbox) &&
+ : (pboxBase->y1 == pboxNext->y1))
+ : pboxNext--;
+ : pboxTmp = pboxNext+1;
+ : while (pboxTmp <= pboxBase)
+ : {
+ : *pboxNew1++ = *pboxTmp++;
+ : }
+ : pboxBase = pboxNext;
+ : }
+ : pboxNew1 -= nbox;
+ : pbox = pboxNew1;
+ : }
+ : }
+ : else
+ : {
+ : /* walk source top to bottom */
+ : upsidedown = FALSE;
+ : }
+ :
+ : if (careful && dx < 0)
+ : {
+ : /* walk source right to left */
+ : if (dy <= 0)
+ : reverse = TRUE;
+ : else
+ : reverse = FALSE;
+ :
+ : if (nbox > 1)
+ : {
+ : /* reverse order of rects in each band */
+ : pboxNew2 = (BoxPtr)ALLOCATE_LOCAL(sizeof(BoxRec) * nbox);
+ : if(!pboxNew2)
+ : {
+ : if (pboxNew1)
+ : DEALLOCATE_LOCAL(pboxNew1);
+ : return;
+ : }
+ : pboxBase = pboxNext = pbox;
+ : while (pboxBase < pbox+nbox)
+ : {
+ : while ((pboxNext < pbox+nbox) &&
+ : (pboxNext->y1 == pboxBase->y1))
+ : pboxNext++;
+ : pboxTmp = pboxNext;
+ : while (pboxTmp != pboxBase)
+ : {
+ : *pboxNew2++ = *--pboxTmp;
+ : }
+ : pboxBase = pboxNext;
+ : }
+ 1 0.0011 : pboxNew2 -= nbox;
+ : pbox = pboxNew2;
+ : }
+ : }
+ : else
+ : {
+ : /* walk source left to right */
+ : reverse = FALSE;
+ : }
+ :
+ 8 0.0087 : (*copyProc) (pSrcDrawable,
+ : pDstDrawable,
+ : pGC,
+ : pbox,
+ : nbox,
+ : dx, dy,
+ : reverse, upsidedown, bitPlane, closure);
+ :
+ : if (pboxNew1)
+ : DEALLOCATE_LOCAL (pboxNew1);
+ : if (pboxNew2)
+ : DEALLOCATE_LOCAL (pboxNew2);
+ 4 0.0044 :}
+ :
+ :RegionPtr
+ :fbDoCopy (DrawablePtr pSrcDrawable,
+ : DrawablePtr pDstDrawable,
+ : GCPtr pGC,
+ : int xIn,
+ : int yIn,
+ : int widthSrc,
+ : int heightSrc,
+ : int xOut,
+ : int yOut,
+ : fbCopyProc copyProc,
+ : Pixel bitPlane,
+ : void *closure)
+ 5 0.0054 :{ /* fbDoCopy total: 100 0.1089 */
+ : RegionPtr prgnSrcClip = NULL; /* may be a new region, or just a copy */
+ : Bool freeSrcClip = FALSE;
+ : RegionPtr prgnExposed = NULL;
+ : RegionRec rgnDst;
+ : int dx;
+ : int dy;
+ : int numRects;
+ : int box_x1;
+ : int box_y1;
+ : int box_x2;
+ : int box_y2;
+ : Bool fastSrc = FALSE; /* for fast clipping with pixmap source */
+ : Bool fastDst = FALSE; /* for fast clipping with one rect dest */
+ : Bool fastExpose = FALSE; /* for fast exposures with pixmap source */
+ :
+ : /* Short cut for unmapped windows */
+ :
+ 1 0.0011 : if (pDstDrawable->type == DRAWABLE_WINDOW &&
+ : !((WindowPtr)pDstDrawable)->realized)
+ : {
+ : return NULL;
+ : }
+ :
+ 8 0.0087 : if ((pSrcDrawable != pDstDrawable) &&
+ : pSrcDrawable->pScreen->SourceValidate)
+ : {
+ 1 0.0011 : (*pSrcDrawable->pScreen->SourceValidate) (pSrcDrawable, xIn, yIn, widthSrc, heightSrc);
+ : }
+ :
+ : /* Compute source clip region */
+ 2 0.0022 : if (pSrcDrawable->type == DRAWABLE_PIXMAP)
+ : {
+ 6 0.0065 : if ((pSrcDrawable == pDstDrawable) && (pGC->clientClipType == CT_NONE))
+ : prgnSrcClip = fbGetCompositeClip(pGC);
+ : else
+ : fastSrc = TRUE;
+ : }
+ : else
+ : {
+ : if (pGC->subWindowMode == IncludeInferiors)
+ : {
+ : /*
+ : * XFree86 DDX empties the border clip when the
+ : * VT is inactive, make sure the region isn't empty
+ : */
+ : if (!((WindowPtr) pSrcDrawable)->parent &&
+ : REGION_NOTEMPTY (pSrcDrawable->pScreen,
+ : &((WindowPtr) pSrcDrawable)->borderClip))
+ : {
+ : /*
+ : * special case bitblt from root window in
+ : * IncludeInferiors mode; just like from a pixmap
+ : */
+ : fastSrc = TRUE;
+ : }
+ : else if ((pSrcDrawable == pDstDrawable) &&
+ : (pGC->clientClipType == CT_NONE))
+ : {
+ : prgnSrcClip = fbGetCompositeClip(pGC);
+ : }
+ : else
+ : {
+ : prgnSrcClip = NotClippedByChildren((WindowPtr)pSrcDrawable);
+ : freeSrcClip = TRUE;
+ : }
+ : }
+ : else
+ : {
+ : prgnSrcClip = &((WindowPtr)pSrcDrawable)->clipList;
+ : }
+ : }
+ :
+ : xIn += pSrcDrawable->x;
+ 2 0.0022 : yIn += pSrcDrawable->y;
+ :
+ 1 0.0011 : xOut += pDstDrawable->x;
+ 2 0.0022 : yOut += pDstDrawable->y;
+ :
+ : box_x1 = xIn;
+ : box_y1 = yIn;
+ : box_x2 = xIn + widthSrc;
+ 2 0.0022 : box_y2 = yIn + heightSrc;
+ :
+ 2 0.0022 : dx = xIn - xOut;
+ 4 0.0044 : dy = yIn - yOut;
+ :
+ : /* Don't create a source region if we are doing a fast clip */
+ 3 0.0033 : if (fastSrc)
+ : {
+ : RegionPtr cclip;
+ :
+ : fastExpose = TRUE;
+ : /*
+ : * clip the source; if regions extend beyond the source size,
+ : * make sure exposure events get sent
+ : */
+ 4 0.0044 : if (box_x1 < pSrcDrawable->x)
+ : {
+ : box_x1 = pSrcDrawable->x;
+ : fastExpose = FALSE;
+ : }
+ : if (box_y1 < pSrcDrawable->y)
+ : {
+ : box_y1 = pSrcDrawable->y;
+ : fastExpose = FALSE;
+ : }
+ 7 0.0076 : if (box_x2 > pSrcDrawable->x + (int) pSrcDrawable->width)
+ : {
+ : box_x2 = pSrcDrawable->x + (int) pSrcDrawable->width;
+ : fastExpose = FALSE;
+ : }
+ 4 0.0044 : if (box_y2 > pSrcDrawable->y + (int) pSrcDrawable->height)
+ : {
+ : box_y2 = pSrcDrawable->y + (int) pSrcDrawable->height;
+ : fastExpose = FALSE;
+ : }
+ :
+ : /* Translate and clip the dst to the destination composite clip */
+ : box_x1 -= dx;
+ : box_x2 -= dx;
+ 1 0.0011 : box_y1 -= dy;
+ 1 0.0011 : box_y2 -= dy;
+ :
+ : /* If the destination composite clip is one rectangle we can
+ : do the clip directly. Otherwise we have to create a full
+ : blown region and call intersect */
+ :
+ 1 0.0011 : cclip = fbGetCompositeClip(pGC);
+ 2 0.0022 : if (REGION_NUM_RECTS(cclip) == 1)
+ : {
+ 9 0.0098 : BoxPtr pBox = REGION_RECTS(cclip);
+ :
+ : if (box_x1 < pBox->x1) box_x1 = pBox->x1;
+ : if (box_x2 > pBox->x2) box_x2 = pBox->x2;
+ : if (box_y1 < pBox->y1) box_y1 = pBox->y1;
+ 1 0.0011 : if (box_y2 > pBox->y2) box_y2 = pBox->y2;
+ : fastDst = TRUE;
+ : }
+ : }
+ :
+ : /* Check to see if the region is empty */
+ 2 0.0022 : if (box_x1 >= box_x2 || box_y1 >= box_y2)
+ : {
+ 3 0.0033 : REGION_NULL(pGC->pScreen, &rgnDst);
+ : }
+ : else
+ : {
+ : BoxRec box;
+ : box.x1 = box_x1;
+ : box.y1 = box_y1;
+ : box.x2 = box_x2;
+ : box.y2 = box_y2;
+ : REGION_INIT(pGC->pScreen, &rgnDst, &box, 1);
+ : }
+ :
+ : /* Clip against complex source if needed */
+ 2 0.0022 : if (!fastSrc)
+ : {
+ : REGION_INTERSECT(pGC->pScreen, &rgnDst, &rgnDst, prgnSrcClip);
+ : REGION_TRANSLATE(pGC->pScreen, &rgnDst, -dx, -dy);
+ : }
+ :
+ : /* Clip against complex dest if needed */
+ 1 0.0011 : if (!fastDst)
+ : {
+ : REGION_INTERSECT(pGC->pScreen, &rgnDst, &rgnDst,
+ : fbGetCompositeClip(pGC));
+ : }
+ :
+ : /* Do bit blitting */
+ : numRects = REGION_NUM_RECTS(&rgnDst);
+ 1 0.0011 : if (numRects && widthSrc && heightSrc)
+ 16 0.0174 : fbCopyRegion (pSrcDrawable, pDstDrawable, pGC,
+ : &rgnDst, dx, dy, copyProc, bitPlane, closure);
+ :
+ : /* Pixmap sources generate a NoExposed (we return NULL to do this) */
+ : if (!fastExpose && pGC->fExpose)
+ : prgnExposed = miHandleExposures(pSrcDrawable, pDstDrawable, pGC,
+ : xIn - pSrcDrawable->x,
+ : yIn - pSrcDrawable->y,
+ : widthSrc, heightSrc,
+ : xOut - pDstDrawable->x,
+ : yOut - pDstDrawable->y,
+ : (unsigned long) bitPlane);
+ : REGION_UNINIT(pGC->pScreen, &rgnDst);
+ 1 0.0011 : if (freeSrcClip)
+ : REGION_DESTROY(pGC->pScreen, prgnSrcClip);
+ : fbValidateDrawable (pDstDrawable);
+ : return prgnExposed;
+ 5 0.0054 :}
+ :
+ :RegionPtr
+ :fbCopyArea (DrawablePtr pSrcDrawable,
+ : DrawablePtr pDstDrawable,
+ : GCPtr pGC,
+ : int xIn,
+ : int yIn,
+ : int widthSrc,
+ : int heightSrc,
+ : int xOut,
+ : int yOut)
+ :{
+ : fbCopyProc copy;
+ :
+ :#ifdef FB_24_32BIT
+ : if (pSrcDrawable->bitsPerPixel != pDstDrawable->bitsPerPixel)
+ : copy = fb24_32CopyMtoN;
+ : else
+ :#endif
+ : copy = fbCopyNtoN;
+ : return fbDoCopy (pSrcDrawable, pDstDrawable, pGC, xIn, yIn,
+ : widthSrc, heightSrc, xOut, yOut, copy, 0, 0);
+ :}
+ :
+ :RegionPtr
+ :fbCopyPlane (DrawablePtr pSrcDrawable,
+ : DrawablePtr pDstDrawable,
+ : GCPtr pGC,
+ : int xIn,
+ : int yIn,
+ : int widthSrc,
+ : int heightSrc,
+ : int xOut,
+ : int yOut,
+ : unsigned long bitplane)
+ :{
+ : if (pSrcDrawable->bitsPerPixel > 1)
+ : return fbDoCopy (pSrcDrawable, pDstDrawable, pGC,
+ : xIn, yIn, widthSrc, heightSrc,
+ : xOut, yOut, fbCopyNto1, (Pixel) bitplane, 0);
+ : else if (bitplane & 1)
+ : return fbDoCopy (pSrcDrawable, pDstDrawable, pGC, xIn, yIn,
+ : widthSrc, heightSrc, xOut, yOut, fbCopy1toN,
+ : (Pixel) bitplane, 0);
+ : else
+ : return miHandleExposures(pSrcDrawable, pDstDrawable, pGC,
+ : xIn, yIn,
+ : widthSrc,
+ : heightSrc,
+ : xOut, yOut, bitplane);
+ :}
+/*
+ * Total samples for file : "msort.c"
+ *
+ * 125 0.1362
+ */
+
+<credited to line zero> 125 0.1362 :
+ /* msort_with_tmp total: 125 0.1362 */
+/*
+ * Total samples for file : "i810_hwmc.c"
+ *
+ * 119 0.1296
+ */
+
+<credited to line zero> 119 0.1296 :
+ /* __i686.get_pc_thunk.bx total: 119 0.1296 */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/dix/resource.c"
+ *
+ * 117 0.1275
+ */
+
+
+ :/************************************************************
+ :
+ :Copyright 1987, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :
+ :Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 Digital not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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.
+ :
+ :********************************************************/
+ :/* The panoramix components contained the following notice */
+ :/*****************************************************************
+ :
+ :Copyright (c) 1991, 1997 Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ :Permission is hereby granted, free of charge, to any person obtaining a copy
+ :of this software and associated documentation files (the "Software"), to deal
+ :in the Software without restriction, including without limitation the rights
+ :to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ :copies of the Software.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ :DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING,
+ :BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY,
+ :WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+ :IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of Digital Equipment Corporation
+ :shall not be used in advertising or otherwise to promote the sale, use or other
+ :dealings in this Software without prior written authorization from Digital
+ :Equipment Corporation.
+ :
+ :******************************************************************/
+ :/* XSERVER_DTRACE additions:
+ : * Copyright 2005-2006 Sun Microsystems, Inc. All rights reserved.
+ : *
+ : * Permission is hereby granted, free of charge, to any person obtaining a
+ : * copy of this software and associated documentation files (the
+ : * "Software"), to deal in the Software without restriction, including
+ : * without limitation the rights to use, copy, modify, merge, publish,
+ : * distribute, and/or sell copies of the Software, and to permit persons
+ : * to whom the Software is furnished to do so, provided that the above
+ : * copyright notice(s) and this permission notice appear in all copies of
+ : * the Software and that both the above copyright notice(s) and this
+ : * permission notice appear in supporting documentation.
+ : *
+ : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ : * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ : * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ : * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ : * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
+ : *
+ : * Except as contained in this notice, the name of a copyright holder
+ : * shall not be used in advertising or otherwise to promote the sale, use
+ : * or other dealings in this Software without prior written authorization
+ : * of the copyright holder.
+ : */
+ :
+ :/* Routines to manage various kinds of resources:
+ : *
+ : * CreateNewResourceType, CreateNewResourceClass, InitClientResources,
+ : * FakeClientID, AddResource, FreeResource, FreeClientResources,
+ : * FreeAllResources, LookupIDByType, LookupIDByClass, GetXIDRange
+ : */
+ :
+ :/*
+ : * A resource ID is a 32 bit quantity, the upper 2 bits of which are
+ : * off-limits for client-visible resources. The next 8 bits are
+ : * used as client ID, and the low 22 bits come from the client.
+ : * A resource ID is "hashed" by extracting and xoring subfields
+ : * (varying with the size of the hash table).
+ : *
+ : * It is sometimes necessary for the server to create an ID that looks
+ : * like it belongs to a client. This ID, however, must not be one
+ : * the client actually can create, or we have the potential for conflict.
+ : * The 31st bit of the ID is reserved for the server's use for this
+ : * purpose. By setting CLIENT_ID(id) to the client, the SERVER_BIT to
+ : * 1, and an otherwise arbitrary ID in the low 22 bits, we can create a
+ : * resource "owned" by the client.
+ : */
+ :
+ :#define NEED_EVENTS
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <X11/X.h>
+ :#include "misc.h"
+ :#include "os.h"
+ :#include "resource.h"
+ :#include "dixstruct.h"
+ :#include "opaque.h"
+ :#include "windowstr.h"
+ :#include "dixfont.h"
+ :#include "colormap.h"
+ :#include "inputstr.h"
+ :#include "dixevents.h"
+ :#include "dixgrabs.h"
+ :#include "cursor.h"
+ :#ifdef PANORAMIX
+ :#include "panoramiX.h"
+ :#include "panoramiXsrv.h"
+ :#endif
+ :#include "xace.h"
+ :#include <assert.h>
+ :
+ :#ifdef XSERVER_DTRACE
+ :#include <sys/types.h>
+ :typedef const char *string;
+ :#include "Xserver-dtrace.h"
+ :
+ :#define TypeNameString(t) NameForAtom(ResourceNames[t & TypeMask])
+ :#endif
+ :
+ :static void RebuildTable(
+ : int /*client*/
+ :);
+ :
+ :#define SERVER_MINID 32
+ :
+ :#define INITBUCKETS 64
+ :#define INITHASHSIZE 6
+ :#define MAXHASHSIZE 11
+ :
+ :typedef struct _Resource {
+ : struct _Resource *next;
+ : XID id;
+ : RESTYPE type;
+ : pointer value;
+ :} ResourceRec, *ResourcePtr;
+ :#define NullResource ((ResourcePtr)NULL)
+ :
+ :typedef struct _ClientResource {
+ : ResourcePtr *resources;
+ : int elements;
+ : int buckets;
+ : int hashsize; /* log(2)(buckets) */
+ : XID fakeID;
+ : XID endFakeID;
+ : XID expectID;
+ :} ClientResourceRec;
+ :
+ :_X_EXPORT RESTYPE lastResourceType;
+ :static RESTYPE lastResourceClass;
+ :_X_EXPORT RESTYPE TypeMask;
+ :
+ :static DeleteType *DeleteFuncs = (DeleteType *)NULL;
+ :
+ :#ifdef XResExtension
+ :
+ :_X_EXPORT Atom * ResourceNames = NULL;
+ :
+ :_X_EXPORT void RegisterResourceName (RESTYPE type, char *name)
+ :{
+ : ResourceNames[type & TypeMask] = MakeAtom(name, strlen(name), TRUE);
+ :}
+ :
+ :#endif
+ :
+ :_X_EXPORT RESTYPE
+ :CreateNewResourceType(DeleteType deleteFunc)
+ :{
+ : RESTYPE next = lastResourceType + 1;
+ : DeleteType *funcs;
+ :
+ : if (next & lastResourceClass)
+ : return 0;
+ : funcs = (DeleteType *)xrealloc(DeleteFuncs,
+ : (next + 1) * sizeof(DeleteType));
+ : if (!funcs)
+ : return 0;
+ :
+ :#ifdef XResExtension
+ : {
+ : Atom *newnames;
+ : newnames = xrealloc(ResourceNames, (next + 1) * sizeof(Atom));
+ : if(!newnames)
+ : return 0;
+ : ResourceNames = newnames;
+ : ResourceNames[next] = 0;
+ : }
+ :#endif
+ :
+ : lastResourceType = next;
+ : DeleteFuncs = funcs;
+ : DeleteFuncs[next] = deleteFunc;
+ : return next;
+ :}
+ :
+ :_X_EXPORT RESTYPE
+ :CreateNewResourceClass(void)
+ :{
+ : RESTYPE next = lastResourceClass >> 1;
+ :
+ : if (next & lastResourceType)
+ : return 0;
+ : lastResourceClass = next;
+ : TypeMask = next - 1;
+ : return next;
+ :}
+ :
+ :static ClientResourceRec clientTable[MAXCLIENTS];
+ :
+ :/*****************
+ : * InitClientResources
+ : * When a new client is created, call this to allocate space
+ : * in resource table
+ : *****************/
+ :
+ :Bool
+ :InitClientResources(ClientPtr client)
+ :{
+ : int i, j;
+ :
+ : if (client == serverClient)
+ : {
+ : lastResourceType = RT_LASTPREDEF;
+ : lastResourceClass = RC_LASTPREDEF;
+ : TypeMask = RC_LASTPREDEF - 1;
+ : if (DeleteFuncs)
+ : xfree(DeleteFuncs);
+ : DeleteFuncs = (DeleteType *)xalloc((lastResourceType + 1) *
+ : sizeof(DeleteType));
+ : if (!DeleteFuncs)
+ : return FALSE;
+ : DeleteFuncs[RT_NONE & TypeMask] = (DeleteType)NoopDDA;
+ : DeleteFuncs[RT_WINDOW & TypeMask] = DeleteWindow;
+ : DeleteFuncs[RT_PIXMAP & TypeMask] = dixDestroyPixmap;
+ : DeleteFuncs[RT_GC & TypeMask] = FreeGC;
+ : DeleteFuncs[RT_FONT & TypeMask] = CloseFont;
+ : DeleteFuncs[RT_CURSOR & TypeMask] = FreeCursor;
+ : DeleteFuncs[RT_COLORMAP & TypeMask] = FreeColormap;
+ : DeleteFuncs[RT_CMAPENTRY & TypeMask] = FreeClientPixels;
+ : DeleteFuncs[RT_OTHERCLIENT & TypeMask] = OtherClientGone;
+ : DeleteFuncs[RT_PASSIVEGRAB & TypeMask] = DeletePassiveGrab;
+ :
+ :#ifdef XResExtension
+ : if(ResourceNames)
+ : xfree(ResourceNames);
+ : ResourceNames = xalloc((lastResourceType + 1) * sizeof(Atom));
+ : if(!ResourceNames)
+ : return FALSE;
+ :#endif
+ : }
+ : clientTable[i = client->index].resources =
+ : (ResourcePtr *)xalloc(INITBUCKETS*sizeof(ResourcePtr));
+ : if (!clientTable[i].resources)
+ : return FALSE;
+ : clientTable[i].buckets = INITBUCKETS;
+ : clientTable[i].elements = 0;
+ : clientTable[i].hashsize = INITHASHSIZE;
+ : /* Many IDs allocated from the server client are visible to clients,
+ : * so we don't use the SERVER_BIT for them, but we have to start
+ : * past the magic value constants used in the protocol. For normal
+ : * clients, we can start from zero, with SERVER_BIT set.
+ : */
+ : clientTable[i].fakeID = client->clientAsMask |
+ : (client->index ? SERVER_BIT : SERVER_MINID);
+ : clientTable[i].endFakeID = (clientTable[i].fakeID | RESOURCE_ID_MASK) + 1;
+ : clientTable[i].expectID = client->clientAsMask;
+ : for (j=0; j<INITBUCKETS; j++)
+ : {
+ : clientTable[i].resources[j] = NullResource;
+ : }
+ : return TRUE;
+ :}
+ :
+ :
+ :static int
+ :Hash(int client, XID id)
+ 7 0.0076 :{ /* Hash total: 27 0.0294 */
+ 3 0.0033 : id &= RESOURCE_ID_MASK;
+ 9 0.0098 : switch (clientTable[client].hashsize)
+ : {
+ : case 6:
+ 2 0.0022 : return ((int)(0x03F & (id ^ (id>>6) ^ (id>>12))));
+ : case 7:
+ 6 0.0065 : return ((int)(0x07F & (id ^ (id>>7) ^ (id>>13))));
+ : case 8:
+ : return ((int)(0x0FF & (id ^ (id>>8) ^ (id>>16))));
+ : case 9:
+ : return ((int)(0x1FF & (id ^ (id>>9))));
+ : case 10:
+ : return ((int)(0x3FF & (id ^ (id>>10))));
+ : case 11:
+ : return ((int)(0x7FF & (id ^ (id>>11))));
+ : }
+ : return -1;
+ :}
+ :
+ :static XID
+ :AvailableID(
+ : int client,
+ : XID id,
+ : XID maxid,
+ : XID goodid)
+ :{
+ : ResourcePtr res;
+ :
+ : if ((goodid >= id) && (goodid <= maxid))
+ : return goodid;
+ : for (; id <= maxid; id++)
+ : {
+ : res = clientTable[client].resources[Hash(client, id)];
+ : while (res && (res->id != id))
+ : res = res->next;
+ : if (!res)
+ : return id;
+ : }
+ : return 0;
+ :}
+ :
+ :_X_EXPORT void
+ :GetXIDRange(int client, Bool server, XID *minp, XID *maxp)
+ :{
+ : XID id, maxid;
+ : ResourcePtr *resp;
+ : ResourcePtr res;
+ : int i;
+ : XID goodid;
+ :
+ : id = (Mask)client << CLIENTOFFSET;
+ : if (server)
+ : id |= client ? SERVER_BIT : SERVER_MINID;
+ : maxid = id | RESOURCE_ID_MASK;
+ : goodid = 0;
+ : for (resp = clientTable[client].resources, i = clientTable[client].buckets;
+ : --i >= 0;)
+ : {
+ : for (res = *resp++; res; res = res->next)
+ : {
+ : if ((res->id < id) || (res->id > maxid))
+ : continue;
+ : if (((res->id - id) >= (maxid - res->id)) ?
+ : (goodid = AvailableID(client, id, res->id - 1, goodid)) :
+ : !(goodid = AvailableID(client, res->id + 1, maxid, goodid)))
+ : maxid = res->id - 1;
+ : else
+ : id = res->id + 1;
+ : }
+ : }
+ : if (id > maxid)
+ : id = maxid = 0;
+ : *minp = id;
+ : *maxp = maxid;
+ :}
+ :
+ :/**
+ : * GetXIDList is called by the XC-MISC extension's MiscGetXIDList function.
+ : * This function tries to find count unused XIDs for the given client. It
+ : * puts the IDs in the array pids and returns the number found, which should
+ : * almost always be the number requested.
+ : *
+ : * The circumstances that lead to a call to this function are very rare.
+ : * Xlib must run out of IDs while trying to generate a request that wants
+ : * multiple ID's, like the Multi-buffering CreateImageBuffers request.
+ : *
+ : * No rocket science in the implementation; just iterate over all
+ : * possible IDs for the given client and pick the first count IDs
+ : * that aren't in use. A more efficient algorithm could probably be
+ : * invented, but this will be used so rarely that this should suffice.
+ : */
+ :
+ :_X_EXPORT unsigned int
+ :GetXIDList(ClientPtr pClient, unsigned count, XID *pids)
+ :{
+ : unsigned int found = 0;
+ : XID id = pClient->clientAsMask;
+ : XID maxid;
+ :
+ : maxid = id | RESOURCE_ID_MASK;
+ : while ( (found < count) && (id <= maxid) )
+ : {
+ : if (!LookupIDByClass(id, RC_ANY))
+ : {
+ : pids[found++] = id;
+ : }
+ : id++;
+ : }
+ : return found;
+ :}
+ :
+ :/*
+ : * Return the next usable fake client ID.
+ : *
+ : * Normally this is just the next one in line, but if we've used the last
+ : * in the range, we need to find a new range of safe IDs to avoid
+ : * over-running another client.
+ : */
+ :
+ :_X_EXPORT XID
+ :FakeClientID(int client)
+ :{
+ : XID id, maxid;
+ :
+ : id = clientTable[client].fakeID++;
+ : if (id != clientTable[client].endFakeID)
+ : return id;
+ : GetXIDRange(client, TRUE, &id, &maxid);
+ : if (!id) {
+ : if (!client)
+ : FatalError("FakeClientID: server internal ids exhausted\n");
+ : MarkClientException(clients[client]);
+ : id = ((Mask)client << CLIENTOFFSET) | (SERVER_BIT * 3);
+ : maxid = id | RESOURCE_ID_MASK;
+ : }
+ : clientTable[client].fakeID = id + 1;
+ : clientTable[client].endFakeID = maxid + 1;
+ : return id;
+ :}
+ :
+ :_X_EXPORT Bool
+ :AddResource(XID id, RESTYPE type, pointer value)
+ 2 0.0022 :{ /* AddResource total: 8 0.0087 */
+ : int client;
+ : ClientResourceRec *rrec;
+ : ResourcePtr res, *head;
+ :
+ :#ifdef XSERVER_DTRACE
+ : XSERVER_RESOURCE_ALLOC(id, type, value, TypeNameString(type));
+ :#endif
+ : client = CLIENT_ID(id);
+ 1 0.0011 : rrec = &clientTable[client];
+ 1 0.0011 : if (!rrec->buckets)
+ : {
+ : ErrorF("AddResource(%lx, %lx, %lx), client=%d \n",
+ : (unsigned long)id, type, (unsigned long)value, client);
+ : FatalError("client not in use\n");
+ : }
+ : if ((rrec->elements >= 4*rrec->buckets) &&
+ : (rrec->hashsize < MAXHASHSIZE))
+ : RebuildTable(client);
+ : head = &rrec->resources[Hash(client, id)];
+ : res = (ResourcePtr)xalloc(sizeof(ResourceRec));
+ : if (!res)
+ : {
+ : (*DeleteFuncs[type & TypeMask])(value, id);
+ : return FALSE;
+ : }
+ 1 0.0011 : res->next = *head;
+ : res->id = id;
+ : res->type = type;
+ 1 0.0011 : res->value = value;
+ : *head = res;
+ : rrec->elements++;
+ 2 0.0022 : if (!(id & SERVER_BIT) && (id >= rrec->expectID))
+ : rrec->expectID = id + 1;
+ : return TRUE;
+ :}
+ :
+ :static void
+ :RebuildTable(int client)
+ :{
+ : int j;
+ : ResourcePtr res, next;
+ : ResourcePtr **tails, *resources;
+ : ResourcePtr **tptr, *rptr;
+ :
+ : /*
+ : * For now, preserve insertion order, since some ddx layers depend
+ : * on resources being free in the opposite order they are added.
+ : */
+ :
+ : j = 2 * clientTable[client].buckets;
+ : tails = (ResourcePtr **)ALLOCATE_LOCAL(j * sizeof(ResourcePtr *));
+ : if (!tails)
+ : return;
+ : resources = (ResourcePtr *)xalloc(j * sizeof(ResourcePtr));
+ : if (!resources)
+ : {
+ : DEALLOCATE_LOCAL(tails);
+ : return;
+ : }
+ : for (rptr = resources, tptr = tails; --j >= 0; rptr++, tptr++)
+ : {
+ : *rptr = NullResource;
+ : *tptr = rptr;
+ : }
+ : clientTable[client].hashsize++;
+ : for (j = clientTable[client].buckets,
+ : rptr = clientTable[client].resources;
+ : --j >= 0;
+ : rptr++)
+ : {
+ : for (res = *rptr; res; res = next)
+ : {
+ : next = res->next;
+ : res->next = NullResource;
+ : tptr = &tails[Hash(client, res->id)];
+ : **tptr = res;
+ : *tptr = &res->next;
+ : }
+ : }
+ : DEALLOCATE_LOCAL(tails);
+ : clientTable[client].buckets *= 2;
+ : xfree(clientTable[client].resources);
+ : clientTable[client].resources = resources;
+ :}
+ :
+ :_X_EXPORT void
+ :FreeResource(XID id, RESTYPE skipDeleteFuncType)
+ 1 0.0011 :{ /* FreeResource total: 27 0.0294 */
+ : int cid;
+ : ResourcePtr res;
+ : ResourcePtr *prev, *head;
+ : int *eltptr;
+ : int elements;
+ : Bool gotOne = FALSE;
+ :
+ 1 0.0011 : if (((cid = CLIENT_ID(id)) < MAXCLIENTS) && clientTable[cid].buckets)
+ : {
+ : head = &clientTable[cid].resources[Hash(cid, id)];
+ : eltptr = &clientTable[cid].elements;
+ :
+ : prev = head;
+ 2 0.0022 : while ( (res = *prev) )
+ : {
+ 2 0.0022 : if (res->id == id)
+ : {
+ : RESTYPE rtype = res->type;
+ :
+ :#ifdef XSERVER_DTRACE
+ : XSERVER_RESOURCE_FREE(res->id, res->type,
+ : res->value, TypeNameString(res->type));
+ :#endif
+ : *prev = res->next;
+ : elements = --*eltptr;
+ : if (rtype & RC_CACHED)
+ 1 0.0011 : FlushClientCaches(res->id);
+ 1 0.0011 : if (rtype != skipDeleteFuncType)
+ 6 0.0065 : (*DeleteFuncs[rtype & TypeMask])(res->value, res->id);
+ 1 0.0011 : xfree(res);
+ : if (*eltptr != elements)
+ : prev = head; /* prev may no longer be valid */
+ : gotOne = TRUE;
+ : }
+ : else
+ 11 0.0120 : prev = &res->next;
+ : }
+ 1 0.0011 : if(clients[cid] && (id == clients[cid]->lastDrawableID))
+ : {
+ : clients[cid]->lastDrawable = (DrawablePtr)WindowTable[0];
+ : clients[cid]->lastDrawableID = WindowTable[0]->drawable.id;
+ : }
+ : }
+ : if (!gotOne)
+ : ErrorF("Freeing resource id=%lX which isn't there.\n",
+ : (unsigned long)id);
+ :}
+ :
+ :
+ :_X_EXPORT void
+ :FreeResourceByType(XID id, RESTYPE type, Bool skipFree)
+ :{
+ : int cid;
+ : ResourcePtr res;
+ : ResourcePtr *prev, *head;
+ : if (((cid = CLIENT_ID(id)) < MAXCLIENTS) && clientTable[cid].buckets)
+ : {
+ : head = &clientTable[cid].resources[Hash(cid, id)];
+ :
+ : prev = head;
+ : while ( (res = *prev) )
+ : {
+ : if (res->id == id && res->type == type)
+ : {
+ :#ifdef XSERVER_DTRACE
+ : XSERVER_RESOURCE_FREE(res->id, res->type,
+ : res->value, TypeNameString(res->type));
+ :#endif
+ : *prev = res->next;
+ : if (type & RC_CACHED)
+ : FlushClientCaches(res->id);
+ : if (!skipFree)
+ : (*DeleteFuncs[type & TypeMask])(res->value, res->id);
+ : xfree(res);
+ : break;
+ : }
+ : else
+ : prev = &res->next;
+ : }
+ : if(clients[cid] && (id == clients[cid]->lastDrawableID))
+ : {
+ : clients[cid]->lastDrawable = (DrawablePtr)WindowTable[0];
+ : clients[cid]->lastDrawableID = WindowTable[0]->drawable.id;
+ : }
+ : }
+ :}
+ :
+ :/*
+ : * Change the value associated with a resource id. Caller
+ : * is responsible for "doing the right thing" with the old
+ : * data
+ : */
+ :
+ :_X_EXPORT Bool
+ :ChangeResourceValue (XID id, RESTYPE rtype, pointer value)
+ :{
+ : int cid;
+ : ResourcePtr res;
+ :
+ : if (((cid = CLIENT_ID(id)) < MAXCLIENTS) && clientTable[cid].buckets)
+ : {
+ : res = clientTable[cid].resources[Hash(cid, id)];
+ :
+ : for (; res; res = res->next)
+ : if ((res->id == id) && (res->type == rtype))
+ : {
+ : if (rtype & RC_CACHED)
+ : FlushClientCaches(res->id);
+ : res->value = value;
+ : return TRUE;
+ : }
+ : }
+ : return FALSE;
+ :}
+ :
+ :/* Note: if func adds or deletes resources, then func can get called
+ : * more than once for some resources. If func adds new resources,
+ : * func might or might not get called for them. func cannot both
+ : * add and delete an equal number of resources!
+ : */
+ :
+ :_X_EXPORT void
+ :FindClientResourcesByType(
+ : ClientPtr client,
+ : RESTYPE type,
+ : FindResType func,
+ : pointer cdata
+ :){
+ : ResourcePtr *resources;
+ : ResourcePtr this, next;
+ : int i, elements;
+ : int *eltptr;
+ :
+ : if (!client)
+ : client = serverClient;
+ :
+ : resources = clientTable[client->index].resources;
+ : eltptr = &clientTable[client->index].elements;
+ : for (i = 0; i < clientTable[client->index].buckets; i++)
+ : {
+ : for (this = resources[i]; this; this = next)
+ : {
+ : next = this->next;
+ : if (!type || this->type == type) {
+ : elements = *eltptr;
+ : (*func)(this->value, this->id, cdata);
+ : if (*eltptr != elements)
+ : next = resources[i]; /* start over */
+ : }
+ : }
+ : }
+ :}
+ :
+ :_X_EXPORT void
+ :FindAllClientResources(
+ : ClientPtr client,
+ : FindAllRes func,
+ : pointer cdata
+ :){
+ : ResourcePtr *resources;
+ : ResourcePtr this, next;
+ : int i, elements;
+ : int *eltptr;
+ :
+ : if (!client)
+ : client = serverClient;
+ :
+ : resources = clientTable[client->index].resources;
+ : eltptr = &clientTable[client->index].elements;
+ : for (i = 0; i < clientTable[client->index].buckets; i++)
+ : {
+ : for (this = resources[i]; this; this = next)
+ : {
+ : next = this->next;
+ : elements = *eltptr;
+ : (*func)(this->value, this->id, this->type, cdata);
+ : if (*eltptr != elements)
+ : next = resources[i]; /* start over */
+ : }
+ : }
+ :}
+ :
+ :
+ :pointer
+ :LookupClientResourceComplex(
+ : ClientPtr client,
+ : RESTYPE type,
+ : FindComplexResType func,
+ : pointer cdata
+ :){
+ : ResourcePtr *resources;
+ : ResourcePtr this;
+ : int i;
+ :
+ : if (!client)
+ : client = serverClient;
+ :
+ : resources = clientTable[client->index].resources;
+ : for (i = 0; i < clientTable[client->index].buckets; i++) {
+ : for (this = resources[i]; this; this = this->next) {
+ : if (!type || this->type == type) {
+ : if((*func)(this->value, this->id, cdata))
+ : return this->value;
+ : }
+ : }
+ : }
+ : return NULL;
+ :}
+ :
+ :
+ :void
+ :FreeClientNeverRetainResources(ClientPtr client)
+ :{
+ : ResourcePtr *resources;
+ : ResourcePtr this;
+ : ResourcePtr *prev;
+ : int j;
+ :
+ : if (!client)
+ : return;
+ :
+ : resources = clientTable[client->index].resources;
+ : for (j=0; j < clientTable[client->index].buckets; j++)
+ : {
+ : prev = &resources[j];
+ : while ( (this = *prev) )
+ : {
+ : RESTYPE rtype = this->type;
+ : if (rtype & RC_NEVERRETAIN)
+ : {
+ :#ifdef XSERVER_DTRACE
+ : XSERVER_RESOURCE_FREE(this->id, this->type,
+ : this->value, TypeNameString(this->type));
+ :#endif
+ : *prev = this->next;
+ : if (rtype & RC_CACHED)
+ : FlushClientCaches(this->id);
+ : (*DeleteFuncs[rtype & TypeMask])(this->value, this->id);
+ : xfree(this);
+ : }
+ : else
+ : prev = &this->next;
+ : }
+ : }
+ :}
+ :
+ :void
+ :FreeClientResources(ClientPtr client)
+ :{
+ : ResourcePtr *resources;
+ : ResourcePtr this;
+ : int j;
+ :
+ : /* This routine shouldn't be called with a null client, but just in
+ : case ... */
+ :
+ : if (!client)
+ : return;
+ :
+ : HandleSaveSet(client);
+ :
+ : resources = clientTable[client->index].resources;
+ : for (j=0; j < clientTable[client->index].buckets; j++)
+ : {
+ : /* It may seem silly to update the head of this resource list as
+ : we delete the members, since the entire list will be deleted any way,
+ : but there are some resource deletion functions "FreeClientPixels" for
+ : one which do a LookupID on another resource id (a Colormap id in this
+ : case), so the resource list must be kept valid up to the point that
+ : it is deleted, so every time we delete a resource, we must update the
+ : head, just like in FreeResource. I hope that this doesn't slow down
+ : mass deletion appreciably. PRH */
+ :
+ : ResourcePtr *head;
+ :
+ : head = &resources[j];
+ :
+ : for (this = *head; this; this = *head)
+ : {
+ : RESTYPE rtype = this->type;
+ :#ifdef XSERVER_DTRACE
+ : XSERVER_RESOURCE_FREE(this->id, this->type,
+ : this->value, TypeNameString(this->type));
+ :#endif
+ : *head = this->next;
+ : if (rtype & RC_CACHED)
+ : FlushClientCaches(this->id);
+ : (*DeleteFuncs[rtype & TypeMask])(this->value, this->id);
+ : xfree(this);
+ : }
+ : }
+ : xfree(clientTable[client->index].resources);
+ : clientTable[client->index].resources = NULL;
+ : clientTable[client->index].buckets = 0;
+ :}
+ :
+ :void
+ :FreeAllResources(void)
+ :{
+ : int i;
+ :
+ : for (i = currentMaxClients; --i >= 0; )
+ : {
+ : if (clientTable[i].buckets)
+ : FreeClientResources(clients[i]);
+ : }
+ :}
+ :
+ :_X_EXPORT Bool
+ :LegalNewID(XID id, ClientPtr client)
+ 3 0.0033 :{ /* LegalNewID total: 7 0.0076 */
+ :
+ :#ifdef PANORAMIX
+ : XID minid, maxid;
+ :
+ 2 0.0022 : if (!noPanoramiXExtension) {
+ : minid = client->clientAsMask | (client->index ?
+ : SERVER_BIT : SERVER_MINID);
+ : maxid = (clientTable[client->index].fakeID | RESOURCE_ID_MASK) + 1;
+ : if ((id >= minid) && (id <= maxid))
+ : return TRUE;
+ : }
+ :#endif /* PANORAMIX */
+ 1 0.0011 : return ((client->clientAsMask == (id & ~RESOURCE_ID_MASK)) &&
+ : ((clientTable[client->index].expectID <= id) ||
+ : !LookupIDByClass(id, RC_ANY)));
+ 1 0.0011 :}
+ :
+ :/* SecurityLookupIDByType and SecurityLookupIDByClass:
+ : * These are the heart of the resource ID security system. They take
+ : * two additional arguments compared to the old LookupID functions:
+ : * the client doing the lookup, and the access mode (see resource.h).
+ : * The resource is returned if it exists and the client is allowed access,
+ : * else NULL is returned.
+ : */
+ :
+ :_X_EXPORT pointer
+ :SecurityLookupIDByType(ClientPtr client, XID id, RESTYPE rtype, Mask mode)
+ 8 0.0087 :{ /* SecurityLookupIDByType total: 40 0.0436 */
+ : int cid;
+ : ResourcePtr res;
+ : pointer retval = NULL;
+ :
+ 11 0.0120 : if (((cid = CLIENT_ID(id)) < MAXCLIENTS) &&
+ : clientTable[cid].buckets)
+ : {
+ 2 0.0022 : res = clientTable[cid].resources[Hash(cid, id)];
+ :
+ 6 0.0065 : for (; res; res = res->next)
+ 7 0.0076 : if ((res->id == id) && (res->type == rtype))
+ : {
+ 1 0.0011 : retval = res->value;
+ : break;
+ : }
+ : }
+ 4 0.0044 : if (retval && client &&
+ : !XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, mode, retval))
+ : retval = NULL;
+ :
+ : return retval;
+ 1 0.0011 :}
+ :
+ :
+ :_X_EXPORT pointer
+ :SecurityLookupIDByClass(ClientPtr client, XID id, RESTYPE classes, Mask mode)
+ 3 0.0033 :{ /* SecurityLookupIDByClass total: 8 0.0087 */
+ : int cid;
+ : ResourcePtr res = NULL;
+ : pointer retval = NULL;
+ :
+ 1 0.0011 : if (((cid = CLIENT_ID(id)) < MAXCLIENTS) &&
+ : clientTable[cid].buckets)
+ : {
+ : res = clientTable[cid].resources[Hash(cid, id)];
+ :
+ 1 0.0011 : for (; res; res = res->next)
+ 2 0.0022 : if ((res->id == id) && (res->type & classes))
+ : {
+ : retval = res->value;
+ : break;
+ : }
+ : }
+ : if (retval && client &&
+ : !XaceHook(XACE_RESOURCE_ACCESS, client, id, res->type, mode, retval))
+ : retval = NULL;
+ :
+ : return retval;
+ 1 0.0011 :}
+ :
+ :/* We can't replace the LookupIDByType and LookupIDByClass functions with
+ : * macros because of compatibility with loadable servers.
+ : */
+ :
+ :_X_EXPORT pointer
+ :LookupIDByType(XID id, RESTYPE rtype)
+ :{
+ : return SecurityLookupIDByType(NullClient, id, rtype,
+ : DixUnknownAccess);
+ :}
+ :
+ :_X_EXPORT pointer
+ :LookupIDByClass(XID id, RESTYPE classes)
+ :{
+ : return SecurityLookupIDByClass(NullClient, id, classes,
+ : DixUnknownAccess);
+ :}
+/*
+ * Total samples for file : "xkbKillSrv.c"
+ *
+ * 111 0.1209
+ */
+
+<credited to line zero> 111 0.1209 :
+ /* __i686.get_pc_thunk.cx total: 2 0.0022 */
+ /* __i686.get_pc_thunk.bx total: 97 0.1057 */
+ /* __divdi3 total: 12 0.0131 */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/exa/exa_accel.c"
+ *
+ * 109 0.1187
+ */
+
+
+ :/*
+ : * Copyright © 2001 Keith Packard
+ : *
+ : * Partly based on code that is Copyright © The XFree86 Project Inc.
+ : *
+ : * 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.
+ : *
+ : * Authors:
+ : * Eric Anholt <eric@anholt.net>
+ : * Michel Dänzer <michel@tungstengraphics.com>
+ : *
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :#include "exa_priv.h"
+ :#include <X11/fonts/fontstruct.h>
+ :#include "dixfontstr.h"
+ :#include "exa.h"
+ :#include "cw.h"
+ :
+ :static void
+ :exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
+ : DDXPointPtr ppt, int *pwidth, int fSorted)
+ :{
+ : ScreenPtr pScreen = pDrawable->pScreen;
+ : ExaScreenPriv (pScreen);
+ : RegionPtr pClip = fbGetCompositeClip(pGC);
+ : PixmapPtr pPixmap;
+ : BoxPtr pextent, pbox;
+ : int nbox;
+ : int extentX1, extentX2, extentY1, extentY2;
+ : int fullX1, fullX2, fullY1;
+ : int partX1, partX2;
+ : int off_x, off_y;
+ : ExaMigrationRec pixmaps[1];
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = FALSE;
+ : pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
+ :
+ : if (pExaScr->swappedOut ||
+ : pGC->fillStyle != FillSolid ||
+ : pPixmap->drawable.width > pExaScr->info->maxX ||
+ : pPixmap->drawable.height > pExaScr->info->maxY)
+ : {
+ : exaDoMigration (pixmaps, 1, FALSE);
+ : ExaCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
+ : return;
+ : } else {
+ : exaDoMigration (pixmaps, 1, TRUE);
+ : }
+ :
+ : if (!(pPixmap = exaGetOffscreenPixmap (pDrawable, &off_x, &off_y)) ||
+ : !(*pExaScr->info->PrepareSolid) (pPixmap,
+ : pGC->alu,
+ : pGC->planemask,
+ : pGC->fgPixel))
+ : {
+ : exaDoMigration (pixmaps, 1, FALSE);
+ : ExaCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
+ : return;
+ : }
+ :
+ : pextent = REGION_EXTENTS(pGC->pScreen, pClip);
+ : extentX1 = pextent->x1;
+ : extentY1 = pextent->y1;
+ : extentX2 = pextent->x2;
+ : extentY2 = pextent->y2;
+ : while (n--)
+ : {
+ : fullX1 = ppt->x;
+ : fullY1 = ppt->y;
+ : fullX2 = fullX1 + (int) *pwidth;
+ : ppt++;
+ : pwidth++;
+ :
+ : if (fullY1 < extentY1 || extentY2 <= fullY1)
+ : continue;
+ :
+ : if (fullX1 < extentX1)
+ : fullX1 = extentX1;
+ :
+ : if (fullX2 > extentX2)
+ : fullX2 = extentX2;
+ :
+ : if (fullX1 >= fullX2)
+ : continue;
+ :
+ : nbox = REGION_NUM_RECTS (pClip);
+ : if (nbox == 1)
+ : {
+ : (*pExaScr->info->Solid) (pPixmap,
+ : fullX1 + off_x, fullY1 + off_y,
+ : fullX2 + off_x, fullY1 + 1 + off_y);
+ : }
+ : else
+ : {
+ : pbox = REGION_RECTS(pClip);
+ : while(nbox--)
+ : {
+ : if (pbox->y1 <= fullY1 && fullY1 < pbox->y2)
+ : {
+ : partX1 = pbox->x1;
+ : if (partX1 < fullX1)
+ : partX1 = fullX1;
+ : partX2 = pbox->x2;
+ : if (partX2 > fullX2)
+ : partX2 = fullX2;
+ : if (partX2 > partX1) {
+ : (*pExaScr->info->Solid) (pPixmap,
+ : partX1 + off_x, fullY1 + off_y,
+ : partX2 + off_x, fullY1 + 1 + off_y);
+ : }
+ : }
+ : pbox++;
+ : }
+ : }
+ : }
+ : (*pExaScr->info->DoneSolid) (pPixmap);
+ : exaMarkSync(pScreen);
+ :}
+ :
+ :static void
+ :exaPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
+ : int w, int h, int leftPad, int format, char *bits)
+ :{
+ : ExaScreenPriv (pDrawable->pScreen);
+ : PixmapPtr pPix;
+ : ExaMigrationRec pixmaps[1];
+ : RegionPtr pClip;
+ : BoxPtr pbox;
+ : int nbox;
+ : int xoff, yoff;
+ : int src_stride, bpp = pDrawable->bitsPerPixel;
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = FALSE;
+ : pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
+ :
+ : /* Don't bother with under 8bpp, XYPixmaps. */
+ : if (format != ZPixmap || bpp < 8)
+ : goto migrate_and_fallback;
+ :
+ : /* Only accelerate copies: no rop or planemask. */
+ : if (!EXA_PM_IS_SOLID(pDrawable, pGC->planemask) || pGC->alu != GXcopy)
+ : goto migrate_and_fallback;
+ :
+ : if (pExaScr->swappedOut)
+ : goto fallback;
+ :
+ : exaDoMigration (pixmaps, 1, TRUE);
+ :
+ : if (pExaScr->info->UploadToScreen == NULL)
+ : goto fallback;
+ :
+ : pPix = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
+ :
+ : if (pPix == NULL)
+ : goto fallback;
+ :
+ : x += pDrawable->x;
+ : y += pDrawable->y;
+ :
+ : pClip = fbGetCompositeClip(pGC);
+ : src_stride = PixmapBytePad(w, pDrawable->depth);
+ : for (nbox = REGION_NUM_RECTS(pClip),
+ : pbox = REGION_RECTS(pClip);
+ : nbox--;
+ : pbox++)
+ : {
+ : int x1 = x;
+ : int y1 = y;
+ : int x2 = x + w;
+ : int y2 = y + h;
+ : char *src;
+ : Bool ok;
+ :
+ : if (x1 < pbox->x1)
+ : x1 = pbox->x1;
+ : if (y1 < pbox->y1)
+ : y1 = pbox->y1;
+ : if (x2 > pbox->x2)
+ : x2 = pbox->x2;
+ : if (y2 > pbox->y2)
+ : y2 = pbox->y2;
+ : if (x1 >= x2 || y1 >= y2)
+ : continue;
+ :
+ : src = bits + (y1 - y) * src_stride + (x1 - x) * (bpp / 8);
+ : ok = pExaScr->info->UploadToScreen(pPix, x1 + xoff, y1 + yoff,
+ : x2 - x1, y2 - y1, src, src_stride);
+ : /* If we fail to accelerate the upload, fall back to using unaccelerated
+ : * fb calls.
+ : */
+ : if (!ok) {
+ : FbStip *dst;
+ : FbStride dst_stride;
+ : int dstBpp;
+ : int dstXoff, dstYoff;
+ :
+ : exaPrepareAccess(pDrawable, EXA_PREPARE_DEST);
+ :
+ : fbGetStipDrawable(pDrawable, dst, dst_stride, dstBpp,
+ : dstXoff, dstYoff);
+ :
+ : fbBltStip((FbStip *)bits + (y1 - y) * (src_stride / sizeof(FbStip)),
+ : src_stride / sizeof(FbStip),
+ : (x1 - x) * dstBpp,
+ : dst + (y1 + dstYoff) * dst_stride,
+ : dst_stride,
+ : (x1 + dstXoff) * dstBpp,
+ : (x2 - x1) * dstBpp,
+ : y2 - y1,
+ : GXcopy, FB_ALLONES, dstBpp);
+ :
+ : exaFinishAccess(pDrawable, EXA_PREPARE_DEST);
+ : }
+ :
+ : exaPixmapDirty(pPix, x1 + xoff, y1 + yoff, x2 + xoff, y2 + yoff);
+ : }
+ :
+ : return;
+ :
+ :migrate_and_fallback:
+ : exaDoMigration (pixmaps, 1, FALSE);
+ :
+ :fallback:
+ : ExaCheckPutImage(pDrawable, pGC, depth, x, y, w, h, leftPad, format, bits);
+ :}
+ :
+ :static Bool inline
+ :exaCopyNtoNTwoDir (DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
+ : GCPtr pGC, BoxPtr pbox, int nbox, int dx, int dy)
+ :{
+ : ExaScreenPriv (pDstDrawable->pScreen);
+ : PixmapPtr pSrcPixmap, pDstPixmap;
+ : int src_off_x, src_off_y, dst_off_x, dst_off_y;
+ : int dirsetup;
+ :
+ : /* Need to get both pixmaps to call the driver routines */
+ : pSrcPixmap = exaGetOffscreenPixmap (pSrcDrawable, &src_off_x, &src_off_y);
+ : pDstPixmap = exaGetOffscreenPixmap (pDstDrawable, &dst_off_x, &dst_off_y);
+ : if (!pSrcPixmap || !pDstPixmap)
+ : return FALSE;
+ :
+ : /*
+ : * Now the case of a chip that only supports xdir = ydir = 1 or
+ : * xdir = ydir = -1, but we have xdir != ydir.
+ : */
+ : dirsetup = 0; /* No direction set up yet. */
+ : for (; nbox; pbox++, nbox--) {
+ : if (dx >= 0 && (src_off_y + pbox->y1 + dy) != pbox->y1) {
+ : /* Do a xdir = ydir = -1 blit instead. */
+ : if (dirsetup != -1) {
+ : if (dirsetup != 0)
+ : pExaScr->info->DoneCopy(pDstPixmap);
+ : dirsetup = -1;
+ : if (!(*pExaScr->info->PrepareCopy)(pSrcPixmap,
+ : pDstPixmap,
+ : -1, -1,
+ : pGC ? pGC->alu : GXcopy,
+ : pGC ? pGC->planemask :
+ : FB_ALLONES))
+ : return FALSE;
+ : }
+ : (*pExaScr->info->Copy)(pDstPixmap,
+ : src_off_x + pbox->x1 + dx,
+ : src_off_y + pbox->y1 + dy,
+ : dst_off_x + pbox->x1,
+ : dst_off_y + pbox->y1,
+ : pbox->x2 - pbox->x1,
+ : pbox->y2 - pbox->y1);
+ : } else if (dx < 0 && (src_off_y + pbox->y1 + dy) != pbox->y1) {
+ : /* Do a xdir = ydir = 1 blit instead. */
+ : if (dirsetup != 1) {
+ : if (dirsetup != 0)
+ : pExaScr->info->DoneCopy(pDstPixmap);
+ : dirsetup = 1;
+ : if (!(*pExaScr->info->PrepareCopy)(pSrcPixmap,
+ : pDstPixmap,
+ : 1, 1,
+ : pGC ? pGC->alu : GXcopy,
+ : pGC ? pGC->planemask :
+ : FB_ALLONES))
+ : return FALSE;
+ : }
+ : (*pExaScr->info->Copy)(pDstPixmap,
+ : src_off_x + pbox->x1 + dx,
+ : src_off_y + pbox->y1 + dy,
+ : dst_off_x + pbox->x1,
+ : dst_off_y + pbox->y1,
+ : pbox->x2 - pbox->x1,
+ : pbox->y2 - pbox->y1);
+ : } else if (dx >= 0) {
+ : /*
+ : * xdir = 1, ydir = -1.
+ : * Perform line-by-line xdir = ydir = 1 blits, going up.
+ : */
+ : int i;
+ : if (dirsetup != 1) {
+ : if (dirsetup != 0)
+ : pExaScr->info->DoneCopy(pDstPixmap);
+ : dirsetup = 1;
+ : if (!(*pExaScr->info->PrepareCopy)(pSrcPixmap,
+ : pDstPixmap,
+ : 1, 1,
+ : pGC ? pGC->alu : GXcopy,
+ : pGC ? pGC->planemask :
+ : FB_ALLONES))
+ : return FALSE;
+ : }
+ : for (i = pbox->y2 - pbox->y1 - 1; i >= 0; i--)
+ : (*pExaScr->info->Copy)(pDstPixmap,
+ : src_off_x + pbox->x1 + dx,
+ : src_off_y + pbox->y1 + dy + i,
+ : dst_off_x + pbox->x1,
+ : dst_off_y + pbox->y1 + i,
+ : pbox->x2 - pbox->x1, 1);
+ : } else {
+ : /*
+ : * xdir = -1, ydir = 1.
+ : * Perform line-by-line xdir = ydir = -1 blits, going down.
+ : */
+ : int i;
+ : if (dirsetup != -1) {
+ : if (dirsetup != 0)
+ : pExaScr->info->DoneCopy(pDstPixmap);
+ : dirsetup = -1;
+ : if (!(*pExaScr->info->PrepareCopy)(pSrcPixmap,
+ : pDstPixmap,
+ : -1, -1,
+ : pGC ? pGC->alu : GXcopy,
+ : pGC ? pGC->planemask :
+ : FB_ALLONES))
+ : return FALSE;
+ : }
+ : for (i = 0; i < pbox->y2 - pbox->y1; i++)
+ : (*pExaScr->info->Copy)(pDstPixmap,
+ : src_off_x + pbox->x1 + dx,
+ : src_off_y + pbox->y1 + dy + i,
+ : dst_off_x + pbox->x1,
+ : dst_off_y + pbox->y1 + i,
+ : pbox->x2 - pbox->x1, 1);
+ : }
+ : exaPixmapDirty(pDstPixmap, dst_off_x + pbox->x1, dst_off_y + pbox->y1,
+ : dst_off_x + pbox->x2, dst_off_y + pbox->y2);
+ : }
+ : if (dirsetup != 0)
+ : pExaScr->info->DoneCopy(pDstPixmap);
+ : exaMarkSync(pDstDrawable->pScreen);
+ : return TRUE;
+ :}
+ :
+ :void
+ :exaCopyNtoN (DrawablePtr pSrcDrawable,
+ : DrawablePtr pDstDrawable,
+ : GCPtr pGC,
+ : BoxPtr pbox,
+ : int nbox,
+ : int dx,
+ : int dy,
+ : Bool reverse,
+ : Bool upsidedown,
+ : Pixel bitplane,
+ : void *closure)
+ 3 0.0033 :{ /* exaCopyNtoN total: 47 0.0512 */
+ 6 0.0065 : ExaScreenPriv (pDstDrawable->pScreen);
+ : PixmapPtr pSrcPixmap, pDstPixmap;
+ : int src_off_x, src_off_y;
+ : int dst_off_x, dst_off_y;
+ : ExaMigrationRec pixmaps[2];
+ : Bool fallback = FALSE;
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = FALSE;
+ 5 0.0054 : pixmaps[0].pPix = pDstPixmap = exaGetDrawablePixmap (pDstDrawable);
+ 3 0.0033 : pixmaps[1].as_dst = FALSE;
+ 1 0.0011 : pixmaps[1].as_src = TRUE;
+ 7 0.0076 : pixmaps[1].pPix = pSrcPixmap = exaGetDrawablePixmap (pSrcDrawable);
+ :
+ : /* Respect maxX/maxY in a trivial way: don't set up drawing when we might
+ : * violate the limits. The proper solution would be a temporary pixmap
+ : * adjusted so that the drawing happened within limits.
+ : */
+ 11 0.0120 : if (pSrcPixmap->drawable.width > pExaScr->info->maxX ||
+ : pSrcPixmap->drawable.height > pExaScr->info->maxY ||
+ : pDstPixmap->drawable.width > pExaScr->info->maxX ||
+ : pDstPixmap->drawable.height > pExaScr->info->maxY)
+ : {
+ : fallback = TRUE;
+ : } else {
+ 1 0.0011 : exaDoMigration (pixmaps, 2, TRUE);
+ : }
+ :
+ : /* Mixed directions must be handled specially if the card is lame */
+ 2 0.0022 : if (!fallback && (pExaScr->info->flags & EXA_TWO_BITBLT_DIRECTIONS) &&
+ : reverse != upsidedown) {
+ : if (exaCopyNtoNTwoDir(pSrcDrawable, pDstDrawable, pGC, pbox, nbox,
+ : dx, dy))
+ : return;
+ : fallback = TRUE;
+ : }
+ :
+ 2 0.0022 : pSrcPixmap = exaGetDrawablePixmap (pSrcDrawable);
+ : pDstPixmap = exaGetDrawablePixmap (pDstDrawable);
+ :
+ : exaGetDrawableDeltas (pSrcDrawable, pSrcPixmap, &src_off_x, &src_off_y);
+ 4 0.0044 : exaGetDrawableDeltas (pDstDrawable, pDstPixmap, &dst_off_x, &dst_off_y);
+ :
+ : if (fallback || !exaPixmapIsOffscreen(pSrcPixmap) ||
+ : !exaPixmapIsOffscreen(pDstPixmap) ||
+ : !(*pExaScr->info->PrepareCopy) (pSrcPixmap, pDstPixmap, reverse ? -1 : 1,
+ : upsidedown ? -1 : 1,
+ : pGC ? pGC->alu : GXcopy,
+ : pGC ? pGC->planemask : FB_ALLONES)) {
+ : fallback = TRUE;
+ : return;
+ : EXA_FALLBACK(("from %p to %p (%c,%c)\n", pSrcDrawable, pDstDrawable,
+ : exaDrawableLocation(pSrcDrawable),
+ : exaDrawableLocation(pDstDrawable)));
+ : exaDoMigration (pixmaps, 2, FALSE);
+ : exaPrepareAccess (pDstDrawable, EXA_PREPARE_DEST);
+ : exaPrepareAccess (pSrcDrawable, EXA_PREPARE_SRC);
+ : fbCopyNtoN (pSrcDrawable, pDstDrawable, pGC,
+ : pbox, nbox, dx, dy, reverse, upsidedown,
+ : bitplane, closure);
+ : exaFinishAccess (pSrcDrawable, EXA_PREPARE_SRC);
+ : exaFinishAccess (pDstDrawable, EXA_PREPARE_DEST);
+ : }
+ :
+ : while (nbox--)
+ : {
+ : if (!fallback)
+ : (*pExaScr->info->Copy) (pDstPixmap,
+ : pbox->x1 + dx + src_off_x,
+ : pbox->y1 + dy + src_off_y,
+ : pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
+ : pbox->x2 - pbox->x1, pbox->y2 - pbox->y1);
+ : exaPixmapDirty (pDstPixmap, pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
+ : pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
+ : pbox++;
+ : }
+ :
+ : if (fallback)
+ : return;
+ :
+ : (*pExaScr->info->DoneCopy) (pDstPixmap);
+ : exaMarkSync (pDstDrawable->pScreen);
+ 2 0.0022 :}
+ :
+ :RegionPtr
+ :exaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
+ : int srcx, int srcy, int width, int height, int dstx, int dsty)
+ 5 0.0054 :{ /* exaCopyArea total: 33 0.0359 */
+ : ExaScreenPriv (pDstDrawable->pScreen);
+ :
+ 9 0.0098 : if (pExaScr->swappedOut) {
+ : return ExaCheckCopyArea(pSrcDrawable, pDstDrawable, pGC,
+ : srcx, srcy, width, height, dstx, dsty);
+ : }
+ :
+ 14 0.0153 : return fbDoCopy (pSrcDrawable, pDstDrawable, pGC,
+ : srcx, srcy, width, height,
+ : dstx, dsty, exaCopyNtoN, 0, NULL);
+ 5 0.0054 :}
+ :
+ :static void
+ :exaPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
+ : DDXPointPtr ppt)
+ :{
+ : int i;
+ : xRectangle *prect;
+ :
+ : /* If we can't reuse the current GC as is, don't bother accelerating the
+ : * points.
+ : */
+ : if (pGC->fillStyle != FillSolid) {
+ : ExaCheckPolyPoint(pDrawable, pGC, mode, npt, ppt);
+ : return;
+ : }
+ :
+ : prect = ALLOCATE_LOCAL(sizeof(xRectangle) * npt);
+ : for (i = 0; i < npt; i++) {
+ : prect[i].x = ppt[i].x;
+ : prect[i].y = ppt[i].y;
+ : if (i > 0 && mode == CoordModePrevious) {
+ : prect[i].x += prect[i - 1].x;
+ : prect[i].y += prect[i - 1].y;
+ : }
+ : prect[i].width = 1;
+ : prect[i].height = 1;
+ : }
+ : pGC->ops->PolyFillRect(pDrawable, pGC, npt, prect);
+ : DEALLOCATE_LOCAL(prect);
+ :}
+ :
+ :/**
+ : * exaPolylines() checks if it can accelerate the lines as a group of
+ : * horizontal or vertical lines (rectangles), and uses existing rectangle fill
+ : * acceleration if so.
+ : */
+ :static void
+ :exaPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
+ : DDXPointPtr ppt)
+ :{
+ : xRectangle *prect;
+ : int x1, x2, y1, y2;
+ : int i;
+ :
+ : /* Don't try to do wide lines or non-solid fill style. */
+ : if (pGC->lineWidth != 0 || pGC->lineStyle != LineSolid ||
+ : pGC->fillStyle != FillSolid) {
+ : ExaCheckPolylines(pDrawable, pGC, mode, npt, ppt);
+ : return;
+ : }
+ :
+ : prect = ALLOCATE_LOCAL(sizeof(xRectangle) * (npt - 1));
+ : x1 = ppt[0].x;
+ : y1 = ppt[0].y;
+ : /* If we have any non-horizontal/vertical, fall back. */
+ : for (i = 0; i < npt; i++) {
+ : if (mode == CoordModePrevious) {
+ : x2 = x1 + ppt[i + 1].x;
+ : y2 = y1 + ppt[i + 1].y;
+ : } else {
+ : x2 = ppt[i + 1].x;
+ : y2 = ppt[i + 1].y;
+ : }
+ :
+ : if (x1 != x2 && y1 != y2) {
+ : DEALLOCATE_LOCAL(prect);
+ : ExaCheckPolylines(pDrawable, pGC, mode, npt, ppt);
+ : return;
+ : }
+ :
+ : if (x1 < x2) {
+ : prect[i].x = x1;
+ : prect[i].width = x2 - x1 + 1;
+ : } else {
+ : prect[i].x = x2;
+ : prect[i].width = x1 - x2 + 1;
+ : }
+ : if (y1 < y2) {
+ : prect[i].y = y1;
+ : prect[i].height = y2 - y1 + 1;
+ : } else {
+ : prect[i].y = y2;
+ : prect[i].height = y1 - y2 + 1;
+ : }
+ :
+ : x1 = x2;
+ : y1 = y2;
+ : }
+ : pGC->ops->PolyFillRect(pDrawable, pGC, npt - 1, prect);
+ : DEALLOCATE_LOCAL(prect);
+ :}
+ :
+ :/**
+ : * exaPolySegment() checks if it can accelerate the lines as a group of
+ : * horizontal or vertical lines (rectangles), and uses existing rectangle fill
+ : * acceleration if so.
+ : */
+ :static void
+ :exaPolySegment (DrawablePtr pDrawable, GCPtr pGC, int nseg,
+ : xSegment *pSeg)
+ 1 0.0011 :{ /* exaPolySegment total: 3 0.0033 */
+ : xRectangle *prect;
+ : int i;
+ :
+ : /* Don't try to do wide lines or non-solid fill style. */
+ : if (pGC->lineWidth != 0 || pGC->lineStyle != LineSolid ||
+ : pGC->fillStyle != FillSolid)
+ : {
+ : ExaCheckPolySegment(pDrawable, pGC, nseg, pSeg);
+ : return;
+ : }
+ :
+ : /* If we have any non-horizontal/vertical, fall back. */
+ : for (i = 0; i < nseg; i++) {
+ : if (pSeg[i].x1 != pSeg[i].x2 && pSeg[i].y1 != pSeg[i].y2) {
+ : ExaCheckPolySegment(pDrawable, pGC, nseg, pSeg);
+ : return;
+ : }
+ : }
+ :
+ 1 0.0011 : prect = ALLOCATE_LOCAL(sizeof(xRectangle) * nseg);
+ : for (i = 0; i < nseg; i++) {
+ : if (pSeg[i].x1 < pSeg[i].x2) {
+ : prect[i].x = pSeg[i].x1;
+ : prect[i].width = pSeg[i].x2 - pSeg[i].x1 + 1;
+ : } else {
+ : prect[i].x = pSeg[i].x2;
+ : prect[i].width = pSeg[i].x1 - pSeg[i].x2 + 1;
+ : }
+ : if (pSeg[i].y1 < pSeg[i].y2) {
+ : prect[i].y = pSeg[i].y1;
+ : prect[i].height = pSeg[i].y2 - pSeg[i].y1 + 1;
+ : } else {
+ : prect[i].y = pSeg[i].y2;
+ 1 0.0011 : prect[i].height = pSeg[i].y1 - pSeg[i].y2 + 1;
+ : }
+ : }
+ : pGC->ops->PolyFillRect(pDrawable, pGC, nseg, prect);
+ : DEALLOCATE_LOCAL(prect);
+ :}
+ :
+ :static Bool exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion,
+ : Pixel pixel, CARD32 planemask, CARD32 alu);
+ :
+ :static void
+ :exaPolyFillRect(DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int nrect,
+ : xRectangle *prect)
+ 1 0.0011 :{ /* exaPolyFillRect total: 19 0.0207 */
+ 1 0.0011 : ExaScreenPriv (pDrawable->pScreen);
+ : RegionPtr pClip = fbGetCompositeClip(pGC);
+ : PixmapPtr pPixmap = exaGetDrawablePixmap(pDrawable);
+ : register BoxPtr pbox;
+ : BoxPtr pextent;
+ : int extentX1, extentX2, extentY1, extentY2;
+ : int fullX1, fullX2, fullY1, fullY2;
+ : int partX1, partX2, partY1, partY2;
+ : int xoff, yoff;
+ : int xorg, yorg;
+ : int n;
+ : ExaMigrationRec pixmaps[2];
+ : RegionPtr pReg = RECTS_TO_REGION(pScreen, nrect, prect, CT_UNSORTED);
+ :
+ : /* Compute intersection of rects and clip region */
+ 1 0.0011 : REGION_TRANSLATE(pScreen, pReg, pDrawable->x, pDrawable->y);
+ : REGION_INTERSECT(pScreen, pReg, pClip, pReg);
+ :
+ : if (!REGION_NUM_RECTS(pReg)) {
+ : goto out;
+ : }
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = FALSE;
+ : pixmaps[0].pPix = pPixmap;
+ :
+ 4 0.0044 : exaGetDrawableDeltas(pDrawable, pPixmap, &xoff, &yoff);
+ :
+ 4 0.0044 : if (pExaScr->swappedOut ||
+ : pPixmap->drawable.width > pExaScr->info->maxX ||
+ : pPixmap->drawable.height > pExaScr->info->maxY)
+ : {
+ : goto fallback;
+ : }
+ :
+ : /* For ROPs where overlaps don't matter, convert rectangles to region and
+ : * call exaFillRegion{Solid,Tiled}.
+ : */
+ 2 0.0022 : if ((pGC->fillStyle == FillSolid || pGC->fillStyle == FillTiled) &&
+ : (pGC->alu == GXcopy || pGC->alu == GXclear || pGC->alu == GXnoop ||
+ : pGC->alu == GXcopyInverted || pGC->alu == GXset)) {
+ 6 0.0065 : if (((pGC->fillStyle == FillSolid || pGC->tileIsPixel) &&
+ : exaFillRegionSolid(pDrawable, pReg, pGC->fillStyle == FillSolid ?
+ : pGC->fgPixel : pGC->tile.pixel, pGC->planemask,
+ : pGC->alu)) ||
+ : (pGC->fillStyle == FillTiled && !pGC->tileIsPixel &&
+ : exaFillRegionTiled(pDrawable, pReg, pGC->tile.pixmap, &pGC->patOrg,
+ : pGC->planemask, pGC->alu))) {
+ : goto out;
+ : }
+ : }
+ :
+ : if (pGC->fillStyle != FillSolid &&
+ : !(pGC->tileIsPixel && pGC->fillStyle == FillTiled))
+ : {
+ : goto fallback;
+ : }
+ :
+ : exaDoMigration (pixmaps, 1, TRUE);
+ :
+ : if (!exaPixmapIsOffscreen (pPixmap) ||
+ : !(*pExaScr->info->PrepareSolid) (pPixmap,
+ : pGC->alu,
+ : pGC->planemask,
+ : pGC->fgPixel))
+ : {
+ :fallback:
+ : if (pGC->fillStyle == FillTiled && !pGC->tileIsPixel) {
+ : pixmaps[1].as_dst = FALSE;
+ : pixmaps[1].as_src = TRUE;
+ : pixmaps[1].pPix = pGC->tile.pixmap;
+ : exaDoMigration (pixmaps, 2, FALSE);
+ : } else {
+ : exaDoMigration (pixmaps, 1, FALSE);
+ : }
+ :
+ : ExaCheckPolyFillRect (pDrawable, pGC, nrect, prect);
+ : goto out;
+ : }
+ :
+ : xorg = pDrawable->x;
+ : yorg = pDrawable->y;
+ :
+ : pextent = REGION_EXTENTS(pGC->pScreen, pClip);
+ : extentX1 = pextent->x1;
+ : extentY1 = pextent->y1;
+ : extentX2 = pextent->x2;
+ : extentY2 = pextent->y2;
+ : while (nrect--)
+ : {
+ : fullX1 = prect->x + xorg;
+ : fullY1 = prect->y + yorg;
+ : fullX2 = fullX1 + (int) prect->width;
+ : fullY2 = fullY1 + (int) prect->height;
+ : prect++;
+ :
+ : if (fullX1 < extentX1)
+ : fullX1 = extentX1;
+ :
+ : if (fullY1 < extentY1)
+ : fullY1 = extentY1;
+ :
+ : if (fullX2 > extentX2)
+ : fullX2 = extentX2;
+ :
+ : if (fullY2 > extentY2)
+ : fullY2 = extentY2;
+ :
+ : if ((fullX1 >= fullX2) || (fullY1 >= fullY2))
+ : continue;
+ : n = REGION_NUM_RECTS (pClip);
+ : if (n == 1)
+ : {
+ : (*pExaScr->info->Solid) (pPixmap,
+ : fullX1 + xoff, fullY1 + yoff,
+ : fullX2 + xoff, fullY2 + yoff);
+ : }
+ : else
+ : {
+ : pbox = REGION_RECTS(pClip);
+ : /*
+ : * clip the rectangle to each box in the clip region
+ : * this is logically equivalent to calling Intersect(),
+ : * but rectangles may overlap each other here.
+ : */
+ : while(n--)
+ : {
+ : partX1 = pbox->x1;
+ : if (partX1 < fullX1)
+ : partX1 = fullX1;
+ : partY1 = pbox->y1;
+ : if (partY1 < fullY1)
+ : partY1 = fullY1;
+ : partX2 = pbox->x2;
+ : if (partX2 > fullX2)
+ : partX2 = fullX2;
+ : partY2 = pbox->y2;
+ : if (partY2 > fullY2)
+ : partY2 = fullY2;
+ :
+ : pbox++;
+ :
+ : if (partX1 < partX2 && partY1 < partY2) {
+ : (*pExaScr->info->Solid) (pPixmap,
+ : partX1 + xoff, partY1 + yoff,
+ : partX2 + xoff, partY2 + yoff);
+ : }
+ : }
+ : }
+ : }
+ : (*pExaScr->info->DoneSolid) (pPixmap);
+ : exaMarkSync(pDrawable->pScreen);
+ :
+ :out:
+ : REGION_DESTROY(pScreen, pReg);
+ :}
+ :
+ :static void
+ :exaSolidBoxClipped (DrawablePtr pDrawable,
+ : RegionPtr pClip,
+ : FbBits pm,
+ : FbBits fg,
+ : int x1,
+ : int y1,
+ : int x2,
+ : int y2)
+ :{
+ : ExaScreenPriv (pDrawable->pScreen);
+ : PixmapPtr pPixmap;
+ : BoxPtr pbox;
+ : int nbox;
+ : int xoff, yoff;
+ : int partX1, partX2, partY1, partY2;
+ : ExaMigrationRec pixmaps[1];
+ : Bool fallback = FALSE;
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = FALSE;
+ : pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
+ :
+ : if (pExaScr->swappedOut ||
+ : pPixmap->drawable.width > pExaScr->info->maxX ||
+ : pPixmap->drawable.height > pExaScr->info->maxY)
+ : {
+ : fallback = TRUE;
+ : } else {
+ : exaDoMigration (pixmaps, 1, TRUE);
+ : }
+ :
+ : exaGetDrawableDeltas (pDrawable, pPixmap, &xoff, &yoff);
+ :
+ : if (fallback || !exaPixmapIsOffscreen(pPixmap) ||
+ : !(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg))
+ : {
+ : EXA_FALLBACK(("to %p (%c)\n", pDrawable,
+ : exaDrawableLocation(pDrawable)));
+ : exaDoMigration (pixmaps, 1, FALSE);
+ : fallback = TRUE;
+ : exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
+ : fg = fbReplicatePixel (fg, pDrawable->bitsPerPixel);
+ : fbSolidBoxClipped (pDrawable, pClip, x1, y1, x2, y2,
+ : fbAnd (GXcopy, fg, pm),
+ : fbXor (GXcopy, fg, pm));
+ : exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
+ : }
+ : for (nbox = REGION_NUM_RECTS(pClip), pbox = REGION_RECTS(pClip);
+ : nbox--;
+ : pbox++)
+ : {
+ : partX1 = pbox->x1;
+ : if (partX1 < x1)
+ : partX1 = x1;
+ :
+ : partX2 = pbox->x2;
+ : if (partX2 > x2)
+ : partX2 = x2;
+ :
+ : if (partX2 <= partX1)
+ : continue;
+ :
+ : partY1 = pbox->y1;
+ : if (partY1 < y1)
+ : partY1 = y1;
+ :
+ : partY2 = pbox->y2;
+ : if (partY2 > y2)
+ : partY2 = y2;
+ :
+ : if (partY2 <= partY1)
+ : continue;
+ :
+ : if (!fallback) {
+ : (*pExaScr->info->Solid) (pPixmap,
+ : partX1 + xoff, partY1 + yoff,
+ : partX2 + xoff, partY2 + yoff);
+ : }
+ :
+ : exaPixmapDirty (pPixmap, partX1 + xoff, partY1 + yoff, partX2 + xoff,
+ : partY2 + yoff);
+ : }
+ :
+ : if (fallback)
+ : return;
+ :
+ : (*pExaScr->info->DoneSolid) (pPixmap);
+ : exaMarkSync(pDrawable->pScreen);
+ :}
+ :
+ :static void
+ :exaImageGlyphBlt (DrawablePtr pDrawable,
+ : GCPtr pGC,
+ : int x,
+ : int y,
+ : unsigned int nglyph,
+ : CharInfoPtr *ppciInit,
+ : pointer pglyphBase)
+ :{
+ : FbGCPrivPtr pPriv = fbGetGCPrivate(pGC);
+ : CharInfoPtr *ppci;
+ : CharInfoPtr pci;
+ : unsigned char *pglyph; /* pointer bits in glyph */
+ : int gWidth, gHeight; /* width and height of glyph */
+ : FbStride gStride; /* stride of glyph */
+ : Bool opaque;
+ : int n;
+ : int gx, gy;
+ : void (*glyph) (FbBits *,
+ : FbStride,
+ : int,
+ : FbStip *,
+ : FbBits,
+ : int,
+ : int);
+ : FbBits *dst;
+ : FbStride dstStride;
+ : int dstBpp;
+ : int dstXoff, dstYoff;
+ : FbBits depthMask;
+ : PixmapPtr pPixmap = exaGetDrawablePixmap(pDrawable);
+ : ExaMigrationRec pixmaps[1];
+ : int xBack, widthBack, yBack, heightBack;
+ :
+ : for (ppci = ppciInit, n = nglyph, widthBack = 0; n; n--)
+ : widthBack += (*ppci++)->metrics.characterWidth;
+ :
+ : xBack = x;
+ : if (widthBack < 0)
+ : {
+ : xBack += widthBack;
+ : widthBack = -widthBack;
+ : }
+ : yBack = y - FONTASCENT(pGC->font);
+ : heightBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font);
+ :
+ : if (xBack >= pDrawable->width || yBack >= pDrawable->height ||
+ : (xBack + widthBack) <= 0 || (yBack + heightBack) <= 0)
+ : return;
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = TRUE;
+ : pixmaps[0].pPix = pPixmap;
+ :
+ : depthMask = FbFullMask(pDrawable->depth);
+ : if ((pGC->planemask & depthMask) != depthMask)
+ : {
+ : exaDoMigration(pixmaps, 1, FALSE);
+ : ExaCheckImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppciInit, pglyphBase);
+ : goto damage;
+ : }
+ : glyph = NULL;
+ : switch (pDrawable->bitsPerPixel) {
+ : case 8: glyph = fbGlyph8; break;
+ : case 16: glyph = fbGlyph16; break;
+ : case 24: glyph = fbGlyph24; break;
+ : case 32: glyph = fbGlyph32; break;
+ : }
+ :
+ : x += pDrawable->x;
+ : y += pDrawable->y;
+ : xBack += pDrawable->x;
+ : yBack += pDrawable->y;
+ :
+ : if (TERMINALFONT (pGC->font) && !glyph)
+ : {
+ : opaque = TRUE;
+ : }
+ : else
+ : {
+ : exaSolidBoxClipped (pDrawable,
+ : fbGetCompositeClip(pGC),
+ : pGC->planemask,
+ : pGC->bgPixel,
+ : xBack,
+ : yBack,
+ : xBack + widthBack,
+ : yBack + heightBack);
+ : opaque = FALSE;
+ : }
+ :
+ : EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
+ : exaDoMigration(pixmaps, 1, FALSE);
+ : exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
+ : exaPrepareAccessGC (pGC);
+ :
+ : fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
+ :
+ : for (ppci = ppciInit; nglyph; nglyph--, x += pci->metrics.characterWidth)
+ : {
+ : pci = *ppci++;
+ : gWidth = GLYPHWIDTHPIXELS(pci);
+ : gHeight = GLYPHHEIGHTPIXELS(pci);
+ : gx = x + pci->metrics.leftSideBearing;
+ : gy = y - pci->metrics.ascent;
+ :
+ : if (!gWidth || !gHeight || (gx + gWidth) <= xBack ||
+ : (gy + gHeight) <= yBack || gx >= (xBack + widthBack) ||
+ : gy >= (yBack + heightBack))
+ : continue;
+ :
+ : pglyph = FONTGLYPHBITS(pglyphBase, pci);
+ :
+ : if (glyph && gWidth <= sizeof (FbStip) * 8 &&
+ : fbGlyphIn (fbGetCompositeClip(pGC), gx, gy, gWidth, gHeight))
+ : {
+ : (*glyph) (dst + (gy + dstYoff) * dstStride, dstStride, dstBpp,
+ : (FbStip *) pglyph, pPriv->fg, gx + dstXoff, gHeight);
+ : }
+ : else
+ : {
+ : RegionPtr pClip = fbGetCompositeClip(pGC);
+ :
+ : gStride = GLYPHWIDTHBYTESPADDED(pci) / sizeof (FbStip);
+ : fbPutXYImage (pDrawable, pClip, pPriv->fg, pPriv->bg, pPriv->pm,
+ : GXcopy, opaque, gx, gy, gWidth, gHeight,
+ : (FbStip *) pglyph, gStride, 0);
+ : }
+ : }
+ : exaFinishAccessGC (pGC);
+ : exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
+ :
+ :damage:
+ : exaGetDrawableDeltas(pDrawable, pPixmap, &dstXoff, &dstYoff);
+ : exaPixmapDirty(pPixmap, xBack + dstXoff, yBack + dstYoff,
+ : xBack + dstXoff + widthBack, yBack + dstYoff + heightBack);
+ :}
+ :
+ :const GCOps exaOps = {
+ : exaFillSpans,
+ : ExaCheckSetSpans,
+ : exaPutImage,
+ : exaCopyArea,
+ : ExaCheckCopyPlane,
+ : exaPolyPoint,
+ : exaPolylines,
+ : exaPolySegment,
+ : miPolyRectangle,
+ : ExaCheckPolyArc,
+ : miFillPolygon,
+ : exaPolyFillRect,
+ : miPolyFillArc,
+ : miPolyText8,
+ : miPolyText16,
+ : miImageText8,
+ : miImageText16,
+ : exaImageGlyphBlt,
+ : ExaCheckPolyGlyphBlt,
+ : ExaCheckPushPixels,
+ :};
+ :
+ :void
+ :exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
+ :{
+ : RegionRec rgnDst;
+ : int dx, dy;
+ : PixmapPtr pPixmap = (*pWin->drawable.pScreen->GetWindowPixmap) (pWin);
+ :
+ : dx = ptOldOrg.x - pWin->drawable.x;
+ : dy = ptOldOrg.y - pWin->drawable.y;
+ : REGION_TRANSLATE(pWin->drawable.pScreen, prgnSrc, -dx, -dy);
+ :
+ : REGION_INIT (pWin->drawable.pScreen, &rgnDst, NullBox, 0);
+ :
+ : REGION_INTERSECT(pWin->drawable.pScreen, &rgnDst, &pWin->borderClip, prgnSrc);
+ :#ifdef COMPOSITE
+ : if (pPixmap->screen_x || pPixmap->screen_y)
+ : REGION_TRANSLATE (pWin->drawable.pScreen, &rgnDst,
+ : -pPixmap->screen_x, -pPixmap->screen_y);
+ :#endif
+ :
+ : fbCopyRegion (&pPixmap->drawable, &pPixmap->drawable,
+ : NULL,
+ : &rgnDst, dx, dy, exaCopyNtoN, 0, NULL);
+ :
+ : REGION_UNINIT(pWin->drawable.pScreen, &rgnDst);
+ :}
+ :
+ :static Bool
+ :exaFillRegionSolid (DrawablePtr pDrawable,
+ : RegionPtr pRegion,
+ : Pixel pixel,
+ : CARD32 planemask,
+ : CARD32 alu)
+ 2 0.0022 :{ /* exaFillRegionSolid total: 7 0.0076 */
+ : ExaScreenPriv(pDrawable->pScreen);
+ : PixmapPtr pPixmap;
+ : int xoff, yoff;
+ : ExaMigrationRec pixmaps[1];
+ : int nbox = REGION_NUM_RECTS (pRegion);
+ : BoxPtr pBox = REGION_RECTS (pRegion);
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = FALSE;
+ 1 0.0011 : pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
+ :
+ 1 0.0011 : if (pPixmap->drawable.width > pExaScr->info->maxX ||
+ : pPixmap->drawable.height > pExaScr->info->maxY)
+ : {
+ : goto fallback;
+ : } else {
+ : exaDoMigration (pixmaps, 1, TRUE);
+ : }
+ :
+ 2 0.0022 : if ((pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff)) &&
+ : (*pExaScr->info->PrepareSolid) (pPixmap, alu, planemask, pixel))
+ : {
+ : while (nbox--)
+ : {
+ : (*pExaScr->info->Solid) (pPixmap,
+ : pBox->x1 + xoff, pBox->y1 + yoff,
+ : pBox->x2 + xoff, pBox->y2 + yoff);
+ : pBox++;
+ : }
+ : (*pExaScr->info->DoneSolid) (pPixmap);
+ 1 0.0011 : exaMarkSync(pDrawable->pScreen);
+ : }
+ : else
+ : {
+ :fallback:
+ : if (alu != GXcopy || planemask != FB_ALLONES)
+ : return FALSE;
+ : return TRUE;
+ : EXA_FALLBACK(("to %p (%c)\n", pDrawable,
+ : exaDrawableLocation(pDrawable)));
+ : exaDoMigration (pixmaps, 1, FALSE);
+ : exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
+ : fbFillRegionSolid (pDrawable, pRegion, 0,
+ : fbReplicatePixel (pixel, pDrawable->bitsPerPixel));
+ : exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :/* Try to do an accelerated tile of the pTile into pRegion of pDrawable.
+ : * Based on fbFillRegionTiled(), fbTile().
+ : */
+ :Bool
+ :exaFillRegionTiled (DrawablePtr pDrawable,
+ : RegionPtr pRegion,
+ : PixmapPtr pTile,
+ : DDXPointPtr pPatOrg,
+ : CARD32 planemask,
+ : CARD32 alu)
+ :{
+ : ExaScreenPriv(pDrawable->pScreen);
+ : PixmapPtr pPixmap;
+ : int xoff, yoff, tileXoff, tileYoff;
+ : int tileWidth, tileHeight;
+ : ExaMigrationRec pixmaps[2];
+ : int nbox = REGION_NUM_RECTS (pRegion);
+ : BoxPtr pBox = REGION_RECTS (pRegion);
+ :
+ : tileWidth = pTile->drawable.width;
+ : tileHeight = pTile->drawable.height;
+ :
+ : /* If we're filling with a solid color, grab it out and go to
+ : * FillRegionSolid, saving numerous copies.
+ : */
+ : if (tileWidth == 1 && tileHeight == 1)
+ : return exaFillRegionSolid(pDrawable, pRegion,
+ : exaGetPixmapFirstPixel (pTile), planemask,
+ : alu);
+ :
+ : pixmaps[0].as_dst = TRUE;
+ : pixmaps[0].as_src = FALSE;
+ : pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
+ : pixmaps[1].as_dst = FALSE;
+ : pixmaps[1].as_src = TRUE;
+ : pixmaps[1].pPix = pTile;
+ :
+ : if (pPixmap->drawable.width > pExaScr->info->maxX ||
+ : pPixmap->drawable.height > pExaScr->info->maxY ||
+ : tileWidth > pExaScr->info->maxX ||
+ : tileHeight > pExaScr->info->maxY)
+ : {
+ : goto fallback;
+ : } else {
+ : exaDoMigration (pixmaps, 2, TRUE);
+ : }
+ :
+ : pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
+ :
+ : if (!pPixmap)
+ : goto fallback;
+ :
+ : if (!exaPixmapIsOffscreen(pTile))
+ : goto fallback;
+ :
+ : if ((*pExaScr->info->PrepareCopy) (exaGetOffscreenPixmap((DrawablePtr)pTile,
+ : &tileXoff, &tileYoff),
+ : pPixmap, 0, 0, alu, planemask))
+ : {
+ : while (nbox--)
+ : {
+ : int height = pBox->y2 - pBox->y1;
+ : int dstY = pBox->y1;
+ : int tileY;
+ :
+ : tileY = (dstY - pDrawable->y - pPatOrg->y) % tileHeight;
+ : while (height > 0) {
+ : int width = pBox->x2 - pBox->x1;
+ : int dstX = pBox->x1;
+ : int tileX;
+ : int h = tileHeight - tileY;
+ :
+ : if (h > height)
+ : h = height;
+ : height -= h;
+ :
+ : tileX = (dstX - pDrawable->x - pPatOrg->x) % tileWidth;
+ : while (width > 0) {
+ : int w = tileWidth - tileX;
+ : if (w > width)
+ : w = width;
+ : width -= w;
+ :
+ : (*pExaScr->info->Copy) (pPixmap,
+ : tileX + tileXoff, tileY + tileYoff,
+ : dstX + xoff, dstY + yoff,
+ : w, h);
+ : dstX += w;
+ : tileX = 0;
+ : }
+ : dstY += h;
+ : tileY = 0;
+ : }
+ : pBox++;
+ : }
+ : (*pExaScr->info->DoneCopy) (pPixmap);
+ : exaMarkSync(pDrawable->pScreen);
+ : return TRUE;
+ : }
+ :
+ :fallback:
+ : if (alu != GXcopy || planemask != FB_ALLONES)
+ : return FALSE;
+ : EXA_FALLBACK(("from %p to %p (%c,%c)\n", pTile, pDrawable,
+ : exaDrawableLocation(&pTile->drawable),
+ : exaDrawableLocation(pDrawable)));
+ : exaDoMigration (pixmaps, 2, FALSE);
+ : exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
+ : exaPrepareAccess ((DrawablePtr)pTile, EXA_PREPARE_SRC);
+ : fbFillRegionTiled (pDrawable, pRegion, pTile);
+ : exaFinishAccess ((DrawablePtr)pTile, EXA_PREPARE_SRC);
+ : exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
+ :
+ : return TRUE;
+ :}
+ :
+ :void
+ :exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
+ :{
+ : ExaScreenPriv (pWin->drawable.pScreen);
+ : PixmapPtr pPixmap = exaGetDrawablePixmap((DrawablePtr)pWin);
+ : int xoff, yoff;
+ : BoxPtr pBox;
+ : int nbox = REGION_NUM_RECTS(pRegion);
+ :
+ : if (!nbox)
+ : return;
+ :
+ : if (!pExaScr->swappedOut) {
+ : DDXPointRec zeros = { 0, 0 };
+ :
+ : switch (what) {
+ : case PW_BACKGROUND:
+ : switch (pWin->backgroundState) {
+ : case None:
+ : return;
+ : case ParentRelative:
+ : do {
+ : pWin = pWin->parent;
+ : } while (pWin->backgroundState == ParentRelative);
+ : (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion,
+ : what);
+ : return;
+ : case BackgroundPixel:
+ : exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel,
+ : FB_ALLONES, GXcopy);
+ : goto damage;
+ : case BackgroundPixmap:
+ : exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap,
+ : &zeros, FB_ALLONES, GXcopy);
+ : goto damage;
+ : }
+ : break;
+ : case PW_BORDER:
+ : if (pWin->borderIsPixel) {
+ : exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel,
+ : FB_ALLONES, GXcopy);
+ : goto damage;
+ : } else {
+ : exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap,
+ : &zeros, FB_ALLONES, GXcopy);
+ : goto damage;
+ : }
+ : break;
+ : }
+ : }
+ : ExaCheckPaintWindow (pWin, pRegion, what);
+ :
+ :damage:
+ : exaGetDrawableDeltas((DrawablePtr)pWin, pPixmap, &xoff, &yoff);
+ :
+ : pBox = REGION_RECTS(pRegion);
+ :
+ : while (nbox--)
+ : {
+ : exaPixmapDirty (pPixmap, pBox->x1 + xoff, pBox->y1 + yoff,
+ : pBox->x2 + xoff, pBox->y2 + yoff);
+ : pBox++;
+ : }
+ :}
+ :
+ :/**
+ : * Accelerates GetImage for solid ZPixmap downloads from framebuffer memory.
+ : *
+ : * This is probably the only case we actually care about. The rest fall through
+ : * to migration and ExaCheckGetImage, which hopefully will result in migration
+ : * pushing the pixmap out of framebuffer.
+ : */
+ :void
+ :exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
+ : unsigned int format, unsigned long planeMask, char *d)
+ :{
+ : ExaScreenPriv (pDrawable->pScreen);
+ : ExaMigrationRec pixmaps[1];
+ : PixmapPtr pPix;
+ : int xoff, yoff;
+ : Bool ok;
+ :
+ : if (pExaScr->swappedOut || (w == 1 && h == 1))
+ : goto fallback;
+ :
+ : if (pExaScr->info->DownloadFromScreen == NULL)
+ : goto migrate_and_fallback;
+ :
+ : /* Only cover the ZPixmap, solid copy case. */
+ : if (format != ZPixmap || !EXA_PM_IS_SOLID(pDrawable, planeMask))
+ : goto migrate_and_fallback;
+ :
+ : /* Only try to handle the 8bpp and up cases, since we don't want to think
+ : * about <8bpp.
+ : */
+ : if (pDrawable->bitsPerPixel < 8)
+ : goto migrate_and_fallback;
+ :
+ : pPix = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
+ : if (pPix == NULL)
+ : goto fallback;
+ :
+ : xoff += pDrawable->x;
+ : yoff += pDrawable->y;
+ :
+ : ok = pExaScr->info->DownloadFromScreen(pPix, x + xoff, y + yoff, w, h, d,
+ : PixmapBytePad(w, pDrawable->depth));
+ : if (ok) {
+ : exaWaitSync(pDrawable->pScreen);
+ : return;
+ : }
+ :
+ :migrate_and_fallback:
+ : pixmaps[0].as_dst = FALSE;
+ : pixmaps[0].as_src = TRUE;
+ : pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
+ : exaDoMigration (pixmaps, 1, FALSE);
+ :fallback:
+ : ExaCheckGetImage (pDrawable, x, y, w, h, format, planeMask, d);
+ :}
+ :
+ :/**
+ : * GetSpans isn't accelerated yet, but performs migration so that we'll
+ : * hopefully avoid the read-from-framebuffer cost.
+ : */
+ :void
+ :exaGetSpans (DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth,
+ : int nspans, char *pdstStart)
+ :{
+ : ExaMigrationRec pixmaps[1];
+ :
+ : pixmaps[0].as_dst = FALSE;
+ : pixmaps[0].as_src = TRUE;
+ : pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
+ : exaDoMigration (pixmaps, 1, FALSE);
+ :
+ : ExaCheckGetSpans (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/render/glyph.c"
+ *
+ * 103 0.1122
+ */
+
+
+ :/*
+ : *
+ : * Copyright © 2000 SuSE, Inc.
+ : *
+ : * 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 SuSE not be used in advertising or
+ : * publicity pertaining to distribution of the software without specific,
+ : * written prior permission. SuSE makes no representations about the
+ : * suitability of this software for any purpose. It is provided "as is"
+ : * without express or implied warranty.
+ : *
+ : * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
+ : * 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.
+ : *
+ : * Author: Keith Packard, SuSE, Inc.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "misc.h"
+ :#include "scrnintstr.h"
+ :#include "os.h"
+ :#include "regionstr.h"
+ :#include "validate.h"
+ :#include "windowstr.h"
+ :#include "input.h"
+ :#include "resource.h"
+ :#include "colormapst.h"
+ :#include "cursorstr.h"
+ :#include "dixstruct.h"
+ :#include "gcstruct.h"
+ :#include "servermd.h"
+ :#include "picturestr.h"
+ :#include "glyphstr.h"
+ :
+ :/*
+ : * From Knuth -- a good choice for hash/rehash values is p, p-2 where
+ : * p and p-2 are both prime. These tables are sized to have an extra 10%
+ : * free to avoid exponential performance degradation as the hash table fills
+ : */
+ :static GlyphHashSetRec glyphHashSets[] = {
+ : { 32, 43, 41 },
+ : { 64, 73, 71 },
+ : { 128, 151, 149 },
+ : { 256, 283, 281 },
+ : { 512, 571, 569 },
+ : { 1024, 1153, 1151 },
+ : { 2048, 2269, 2267 },
+ : { 4096, 4519, 4517 },
+ : { 8192, 9013, 9011 },
+ : { 16384, 18043, 18041 },
+ : { 32768, 36109, 36107 },
+ : { 65536, 72091, 72089 },
+ : { 131072, 144409, 144407 },
+ : { 262144, 288361, 288359 },
+ : { 524288, 576883, 576881 },
+ : { 1048576, 1153459, 1153457 },
+ : { 2097152, 2307163, 2307161 },
+ : { 4194304, 4613893, 4613891 },
+ : { 8388608, 9227641, 9227639 },
+ : { 16777216, 18455029, 18455027 },
+ : { 33554432, 36911011, 36911009 },
+ : { 67108864, 73819861, 73819859 },
+ : { 134217728, 147639589, 147639587 },
+ : { 268435456, 295279081, 295279079 },
+ : { 536870912, 590559793, 590559791 }
+ :};
+ :
+ :#define NGLYPHHASHSETS (sizeof(glyphHashSets)/sizeof(glyphHashSets[0]))
+ :
+ :static const CARD8 glyphDepths[GlyphFormatNum] = { 1, 4, 8, 16, 32 };
+ :
+ :static GlyphHashRec globalGlyphs[GlyphFormatNum];
+ :
+ :static int globalTotalGlyphPrivateSize = 0;
+ :
+ :static int glyphPrivateCount = 0;
+ :
+ :void
+ :ResetGlyphPrivates (void)
+ :{
+ : glyphPrivateCount = 0;
+ :}
+ :
+ :int
+ :AllocateGlyphPrivateIndex (void)
+ :{
+ : return glyphPrivateCount++;
+ :}
+ :
+ :Bool
+ :AllocateGlyphPrivate (ScreenPtr pScreen,
+ : int index2,
+ : unsigned amount)
+ :{
+ : PictureScreenPtr ps;
+ : unsigned oldamount;
+ :
+ : ps = GetPictureScreenIfSet (pScreen);
+ : if (!ps)
+ : return FALSE;
+ :
+ : /* Round up sizes for proper alignment */
+ : amount = ((amount + (sizeof (DevUnion) - 1)) / sizeof (DevUnion)) *
+ : sizeof (DevUnion);
+ :
+ : if (index2 >= ps->glyphPrivateLen)
+ : {
+ : unsigned *nsizes;
+ : nsizes = (unsigned *) xrealloc (ps->glyphPrivateSizes,
+ : (index2 + 1) * sizeof (unsigned));
+ : if (!nsizes)
+ : return FALSE;
+ :
+ : while (ps->glyphPrivateLen <= index2)
+ : {
+ : nsizes[ps->glyphPrivateLen++] = 0;
+ : ps->totalGlyphPrivateSize += sizeof (DevUnion);
+ : }
+ : ps->glyphPrivateSizes = nsizes;
+ : }
+ : oldamount = ps->glyphPrivateSizes[index2];
+ : if (amount > oldamount)
+ : {
+ : ps->glyphPrivateSizes[index2] = amount;
+ : ps->totalGlyphPrivateSize += (amount - oldamount);
+ : }
+ : ps->totalGlyphPrivateSize = BitmapBytePad (ps->totalGlyphPrivateSize * 8);
+ :
+ : return TRUE;
+ :}
+ :
+ :static void
+ :SetGlyphScreenPrivateOffsets (void)
+ :{
+ : PictureScreenPtr ps;
+ : int offset = 0;
+ : int i;
+ :
+ : for (i = 0; i < screenInfo.numScreens; i++)
+ : {
+ : ps = GetPictureScreenIfSet (screenInfo.screens[i]);
+ : if (ps && ps->totalGlyphPrivateSize)
+ : {
+ : ps->glyphPrivateOffset = offset;
+ : offset += ps->totalGlyphPrivateSize / sizeof (DevUnion);
+ : }
+ : }
+ :}
+ :
+ :static void
+ :SetGlyphPrivatePointers (GlyphPtr glyph)
+ :{
+ : PictureScreenPtr ps;
+ : int i;
+ : char *ptr;
+ : DevUnion *ppriv;
+ : unsigned *sizes;
+ : unsigned size;
+ : int len;
+ :
+ : for (i = 0; i < screenInfo.numScreens; i++)
+ : {
+ : ps = GetPictureScreenIfSet (screenInfo.screens[i]);
+ : if (ps && ps->totalGlyphPrivateSize)
+ : {
+ : ppriv = glyph->devPrivates + ps->glyphPrivateOffset;
+ : sizes = ps->glyphPrivateSizes;
+ : ptr = (char *) (ppriv + ps->glyphPrivateLen);
+ : for (len = ps->glyphPrivateLen; --len >= 0; ppriv++, sizes++)
+ : {
+ : if ((size = *sizes) != 0)
+ : {
+ : ppriv->ptr = (pointer) ptr;
+ : ptr += size;
+ : }
+ : else
+ : ppriv->ptr = (pointer) 0;
+ : }
+ : }
+ : }
+ :}
+ :
+ :static Bool
+ :ReallocGlobalGlyphPrivate (GlyphPtr glyph)
+ :{
+ : PictureScreenPtr ps;
+ : DevUnion *devPrivates;
+ : char *ptr;
+ : int i;
+ :
+ : devPrivates = xalloc (globalTotalGlyphPrivateSize);
+ : if (!devPrivates)
+ : return FALSE;
+ :
+ : ptr = (char *) devPrivates;
+ : for (i = 0; i < screenInfo.numScreens; i++)
+ : {
+ : ps = GetPictureScreenIfSet (screenInfo.screens[i]);
+ : if (ps && ps->totalGlyphPrivateSize)
+ : {
+ : if (ps->glyphPrivateOffset != -1)
+ : {
+ : memcpy (ptr, glyph->devPrivates + ps->glyphPrivateOffset,
+ : ps->totalGlyphPrivateSize);
+ : }
+ : else if (ps->totalGlyphPrivateSize)
+ : {
+ : memset (ptr, 0, ps->totalGlyphPrivateSize);
+ : }
+ :
+ : ptr += ps->totalGlyphPrivateSize;
+ : }
+ : }
+ :
+ : if (glyph->devPrivates)
+ : xfree (glyph->devPrivates);
+ :
+ : glyph->devPrivates = devPrivates;
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :GlyphInit (ScreenPtr pScreen)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen (pScreen);
+ :
+ : ps->totalGlyphPrivateSize = 0;
+ : ps->glyphPrivateSizes = 0;
+ : ps->glyphPrivateLen = 0;
+ : ps->glyphPrivateOffset = -1;
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :GlyphFinishInit (ScreenPtr pScreen)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen (pScreen);
+ :
+ : if (ps->totalGlyphPrivateSize)
+ : {
+ : GlyphPtr glyph;
+ : int fdepth, i;
+ :
+ : globalTotalGlyphPrivateSize += ps->totalGlyphPrivateSize;
+ :
+ : for (fdepth = 0; fdepth < GlyphFormatNum; fdepth++)
+ : {
+ : if (!globalGlyphs[fdepth].hashSet)
+ : continue;
+ :
+ : for (i = 0; i < globalGlyphs[fdepth].hashSet->size; i++)
+ : {
+ : glyph = globalGlyphs[fdepth].table[i].glyph;
+ : if (glyph && glyph != DeletedGlyph)
+ : {
+ : if (!ReallocGlobalGlyphPrivate (glyph))
+ : return FALSE;
+ : }
+ : }
+ : }
+ :
+ : SetGlyphScreenPrivateOffsets ();
+ :
+ : for (fdepth = 0; fdepth < GlyphFormatNum; fdepth++)
+ : {
+ : if (!globalGlyphs[fdepth].hashSet)
+ : continue;
+ :
+ : for (i = 0; i < globalGlyphs[fdepth].hashSet->size; i++)
+ : {
+ : glyph = globalGlyphs[fdepth].table[i].glyph;
+ : if (glyph && glyph != DeletedGlyph)
+ : {
+ : SetGlyphPrivatePointers (glyph);
+ :
+ : if (!(*ps->RealizeGlyph) (pScreen, glyph))
+ : return FALSE;
+ : }
+ : }
+ : }
+ : }
+ : else
+ : ps->glyphPrivateOffset = 0;
+ :
+ : return TRUE;
+ :}
+ :
+ :void
+ :GlyphUninit (ScreenPtr pScreen)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen (pScreen);
+ : GlyphPtr glyph;
+ : int fdepth, i;
+ :
+ : globalTotalGlyphPrivateSize -= ps->totalGlyphPrivateSize;
+ :
+ : for (fdepth = 0; fdepth < GlyphFormatNum; fdepth++)
+ : {
+ : if (!globalGlyphs[fdepth].hashSet)
+ : continue;
+ :
+ : for (i = 0; i < globalGlyphs[fdepth].hashSet->size; i++)
+ : {
+ : glyph = globalGlyphs[fdepth].table[i].glyph;
+ : if (glyph && glyph != DeletedGlyph)
+ : {
+ : (*ps->UnrealizeGlyph) (pScreen, glyph);
+ :
+ : if (globalTotalGlyphPrivateSize)
+ : {
+ : if (!ReallocGlobalGlyphPrivate (glyph))
+ : return;
+ : }
+ : else
+ : {
+ : if (glyph->devPrivates)
+ : xfree (glyph->devPrivates);
+ : glyph->devPrivates = NULL;
+ : }
+ : }
+ : }
+ : }
+ :
+ : if (globalTotalGlyphPrivateSize)
+ : SetGlyphScreenPrivateOffsets ();
+ :
+ : for (fdepth = 0; fdepth < GlyphFormatNum; fdepth++)
+ : {
+ : if (!globalGlyphs[fdepth].hashSet)
+ : continue;
+ :
+ : for (i = 0; i < globalGlyphs[fdepth].hashSet->size; i++)
+ : {
+ : glyph = globalGlyphs[fdepth].table[i].glyph;
+ : if (glyph && glyph != DeletedGlyph)
+ : {
+ : if (globalTotalGlyphPrivateSize)
+ : SetGlyphPrivatePointers (glyph);
+ : }
+ : }
+ : }
+ :
+ : if (ps->glyphPrivateSizes)
+ : xfree (ps->glyphPrivateSizes);
+ :}
+ :
+ :GlyphHashSetPtr
+ :FindGlyphHashSet (CARD32 filled)
+ :{
+ : int i;
+ :
+ : for (i = 0; i < NGLYPHHASHSETS; i++)
+ : if (glyphHashSets[i].entries >= filled)
+ : return &glyphHashSets[i];
+ : return 0;
+ :}
+ :
+ :static int _GlyphSetPrivateAllocateIndex = 0;
+ :
+ :int
+ :AllocateGlyphSetPrivateIndex (void)
+ :{
+ : return _GlyphSetPrivateAllocateIndex++;
+ :}
+ :
+ :void
+ :ResetGlyphSetPrivateIndex (void)
+ :{
+ : _GlyphSetPrivateAllocateIndex = 0;
+ :}
+ :
+ :Bool
+ :_GlyphSetSetNewPrivate (GlyphSetPtr glyphSet, int n, pointer ptr)
+ :{
+ : pointer *new;
+ :
+ : if (n > glyphSet->maxPrivate) {
+ : if (glyphSet->devPrivates &&
+ : glyphSet->devPrivates != (pointer)(&glyphSet[1])) {
+ : new = (pointer *) xrealloc (glyphSet->devPrivates,
+ : (n + 1) * sizeof (pointer));
+ : if (!new)
+ : return FALSE;
+ : } else {
+ : new = (pointer *) xalloc ((n + 1) * sizeof (pointer));
+ : if (!new)
+ : return FALSE;
+ : if (glyphSet->devPrivates)
+ : memcpy (new,
+ : glyphSet->devPrivates,
+ : (glyphSet->maxPrivate + 1) * sizeof (pointer));
+ : }
+ : glyphSet->devPrivates = new;
+ : /* Zero out new, uninitialize privates */
+ : while (++glyphSet->maxPrivate < n)
+ : glyphSet->devPrivates[glyphSet->maxPrivate] = (pointer)0;
+ : }
+ : glyphSet->devPrivates[n] = ptr;
+ : return TRUE;
+ :}
+ :
+ :GlyphRefPtr
+ :FindGlyphRef (GlyphHashPtr hash, CARD32 signature, Bool match, GlyphPtr compare)
+ 9 0.0098 :{ /* FindGlyphRef total: 88 0.0959 */
+ : CARD32 elt, step, s;
+ : GlyphPtr glyph;
+ : GlyphRefPtr table, gr, del;
+ 2 0.0022 : CARD32 tableSize = hash->hashSet->size;
+ :
+ 1 0.0011 : table = hash->table;
+ 37 0.0403 : elt = signature % tableSize;
+ : step = 0;
+ : del = 0;
+ : for (;;)
+ : {
+ 6 0.0065 : gr = &table[elt];
+ 13 0.0142 : s = gr->signature;
+ 2 0.0022 : glyph = gr->glyph;
+ 5 0.0054 : if (!glyph)
+ : {
+ : if (del)
+ : gr = del;
+ : break;
+ : }
+ : if (glyph == DeletedGlyph)
+ : {
+ : if (!del)
+ : del = gr;
+ : else if (gr == del)
+ : break;
+ : }
+ 2 0.0022 : else if (s == signature &&
+ : (!match ||
+ : memcmp (&compare->info, &glyph->info, compare->size) == 0))
+ : {
+ : break;
+ : }
+ 3 0.0033 : if (!step)
+ : {
+ 1 0.0011 : step = signature % hash->hashSet->rehash;
+ 4 0.0044 : if (!step)
+ : step = 1;
+ : }
+ : elt += step;
+ : if (elt >= tableSize)
+ : elt -= tableSize;
+ : }
+ : return gr;
+ 3 0.0033 :}
+ :
+ :CARD32
+ :HashGlyph (GlyphPtr glyph)
+ :{
+ : CARD32 *bits = (CARD32 *) &(glyph->info);
+ : CARD32 hash;
+ : int n = glyph->size / sizeof (CARD32);
+ :
+ : hash = 0;
+ : while (n--)
+ : hash ^= *bits++;
+ : return hash;
+ :}
+ :
+ :#ifdef CHECK_DUPLICATES
+ :void
+ :DuplicateRef (GlyphPtr glyph, char *where)
+ :{
+ : ErrorF ("Duplicate Glyph 0x%x from %s\n", glyph, where);
+ :}
+ :
+ :void
+ :CheckDuplicates (GlyphHashPtr hash, char *where)
+ :{
+ : GlyphPtr g;
+ : int i, j;
+ :
+ : for (i = 0; i < hash->hashSet->size; i++)
+ : {
+ : g = hash->table[i].glyph;
+ : if (!g || g == DeletedGlyph)
+ : continue;
+ : for (j = i + 1; j < hash->hashSet->size; j++)
+ : if (hash->table[j].glyph == g)
+ : DuplicateRef (g, where);
+ : }
+ :}
+ :#else
+ :#define CheckDuplicates(a,b)
+ :#define DuplicateRef(a,b)
+ :#endif
+ :
+ :void
+ :FreeGlyph (GlyphPtr glyph, int format)
+ :{
+ : CheckDuplicates (&globalGlyphs[format], "FreeGlyph");
+ : if (--glyph->refcnt == 0)
+ : {
+ : PictureScreenPtr ps;
+ : GlyphRefPtr gr;
+ : int i;
+ : int first;
+ :
+ : first = -1;
+ : for (i = 0; i < globalGlyphs[format].hashSet->size; i++)
+ : if (globalGlyphs[format].table[i].glyph == glyph)
+ : {
+ : if (first != -1)
+ : DuplicateRef (glyph, "FreeGlyph check");
+ : first = i;
+ : }
+ :
+ : gr = FindGlyphRef (&globalGlyphs[format],
+ : HashGlyph (glyph), TRUE, glyph);
+ : if (gr - globalGlyphs[format].table != first)
+ : DuplicateRef (glyph, "Found wrong one");
+ : if (gr->glyph && gr->glyph != DeletedGlyph)
+ : {
+ : gr->glyph = DeletedGlyph;
+ : gr->signature = 0;
+ : globalGlyphs[format].tableEntries--;
+ : }
+ :
+ : for (i = 0; i < screenInfo.numScreens; i++)
+ : {
+ : ps = GetPictureScreenIfSet (screenInfo.screens[i]);
+ : if (ps)
+ : (*ps->UnrealizeGlyph) (screenInfo.screens[i], glyph);
+ : }
+ :
+ : if (glyph->devPrivates)
+ : xfree (glyph->devPrivates);
+ : xfree (glyph);
+ : }
+ :}
+ :
+ :void
+ :AddGlyph (GlyphSetPtr glyphSet, GlyphPtr glyph, Glyph id)
+ :{
+ : GlyphRefPtr gr;
+ : CARD32 hash;
+ :
+ : CheckDuplicates (&globalGlyphs[glyphSet->fdepth], "AddGlyph top global");
+ : /* Locate existing matching glyph */
+ : hash = HashGlyph (glyph);
+ : gr = FindGlyphRef (&globalGlyphs[glyphSet->fdepth], hash, TRUE, glyph);
+ : if (gr->glyph && gr->glyph != DeletedGlyph)
+ : {
+ : PictureScreenPtr ps;
+ : int i;
+ :
+ : for (i = 0; i < screenInfo.numScreens; i++)
+ : {
+ : ps = GetPictureScreenIfSet (screenInfo.screens[i]);
+ : if (ps)
+ : (*ps->UnrealizeGlyph) (screenInfo.screens[i], glyph);
+ : }
+ : if (glyph->devPrivates)
+ : xfree (glyph->devPrivates);
+ : xfree (glyph);
+ : glyph = gr->glyph;
+ : }
+ : else
+ : {
+ : gr->glyph = glyph;
+ : gr->signature = hash;
+ : globalGlyphs[glyphSet->fdepth].tableEntries++;
+ : }
+ :
+ : /* Insert/replace glyphset value */
+ : gr = FindGlyphRef (&glyphSet->hash, id, FALSE, 0);
+ : ++glyph->refcnt;
+ : if (gr->glyph && gr->glyph != DeletedGlyph)
+ : FreeGlyph (gr->glyph, glyphSet->fdepth);
+ : else
+ : glyphSet->hash.tableEntries++;
+ : gr->glyph = glyph;
+ : gr->signature = id;
+ : CheckDuplicates (&globalGlyphs[glyphSet->fdepth], "AddGlyph bottom");
+ :}
+ :
+ :Bool
+ :DeleteGlyph (GlyphSetPtr glyphSet, Glyph id)
+ :{
+ : GlyphRefPtr gr;
+ : GlyphPtr glyph;
+ :
+ : gr = FindGlyphRef (&glyphSet->hash, id, FALSE, 0);
+ : glyph = gr->glyph;
+ : if (glyph && glyph != DeletedGlyph)
+ : {
+ : gr->glyph = DeletedGlyph;
+ : glyphSet->hash.tableEntries--;
+ : FreeGlyph (glyph, glyphSet->fdepth);
+ : return TRUE;
+ : }
+ : return FALSE;
+ :}
+ :
+ :GlyphPtr
+ :FindGlyph (GlyphSetPtr glyphSet, Glyph id)
+ 6 0.0065 :{ /* FindGlyph total: 15 0.0163 */
+ : GlyphPtr glyph;
+ :
+ 3 0.0033 : glyph = FindGlyphRef (&glyphSet->hash, id, FALSE, 0)->glyph;
+ 2 0.0022 : if (glyph == DeletedGlyph)
+ : glyph = 0;
+ : return glyph;
+ 4 0.0044 :}
+ :
+ :GlyphPtr
+ :AllocateGlyph (xGlyphInfo *gi, int fdepth)
+ :{
+ : PictureScreenPtr ps;
+ : int size;
+ : GlyphPtr glyph;
+ : int i;
+ :
+ : size = gi->height * PixmapBytePad (gi->width, glyphDepths[fdepth]);
+ : glyph = (GlyphPtr) xalloc (size + sizeof (GlyphRec));
+ : if (!glyph)
+ : return 0;
+ : glyph->refcnt = 0;
+ : glyph->size = size + sizeof (xGlyphInfo);
+ : glyph->info = *gi;
+ :
+ : if (globalTotalGlyphPrivateSize)
+ : {
+ : glyph->devPrivates = xalloc (globalTotalGlyphPrivateSize);
+ : if (!glyph->devPrivates)
+ : return 0;
+ :
+ : SetGlyphPrivatePointers (glyph);
+ : } else
+ : glyph->devPrivates = NULL;
+ :
+ : for (i = 0; i < screenInfo.numScreens; i++)
+ : {
+ : ps = GetPictureScreenIfSet (screenInfo.screens[i]);
+ : if (ps)
+ : {
+ : if (!(*ps->RealizeGlyph) (screenInfo.screens[i], glyph))
+ : {
+ : while (i--)
+ : {
+ : ps = GetPictureScreenIfSet (screenInfo.screens[i]);
+ : if (ps)
+ : (*ps->UnrealizeGlyph) (screenInfo.screens[i], glyph);
+ : }
+ :
+ : if (glyph->devPrivates)
+ : xfree (glyph->devPrivates);
+ : xfree (glyph);
+ : return 0;
+ : }
+ : }
+ : }
+ :
+ : return glyph;
+ :}
+ :
+ :Bool
+ :AllocateGlyphHash (GlyphHashPtr hash, GlyphHashSetPtr hashSet)
+ :{
+ : hash->table = (GlyphRefPtr) xalloc (hashSet->size * sizeof (GlyphRefRec));
+ : if (!hash->table)
+ : return FALSE;
+ : memset (hash->table, 0, hashSet->size * sizeof (GlyphRefRec));
+ : hash->hashSet = hashSet;
+ : hash->tableEntries = 0;
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :ResizeGlyphHash (GlyphHashPtr hash, CARD32 change, Bool global)
+ :{
+ : CARD32 tableEntries;
+ : GlyphHashSetPtr hashSet;
+ : GlyphHashRec newHash;
+ : GlyphRefPtr gr;
+ : GlyphPtr glyph;
+ : int i;
+ : int oldSize;
+ : CARD32 s;
+ :
+ : tableEntries = hash->tableEntries + change;
+ : hashSet = FindGlyphHashSet (tableEntries);
+ : if (hashSet == hash->hashSet)
+ : return TRUE;
+ : if (global)
+ : CheckDuplicates (hash, "ResizeGlyphHash top");
+ : if (!AllocateGlyphHash (&newHash, hashSet))
+ : return FALSE;
+ : if (hash->table)
+ : {
+ : oldSize = hash->hashSet->size;
+ : for (i = 0; i < oldSize; i++)
+ : {
+ : glyph = hash->table[i].glyph;
+ : if (glyph && glyph != DeletedGlyph)
+ : {
+ : s = hash->table[i].signature;
+ : gr = FindGlyphRef (&newHash, s, global, glyph);
+ : gr->signature = s;
+ : gr->glyph = glyph;
+ : ++newHash.tableEntries;
+ : }
+ : }
+ : xfree (hash->table);
+ : }
+ : *hash = newHash;
+ : if (global)
+ : CheckDuplicates (hash, "ResizeGlyphHash bottom");
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :ResizeGlyphSet (GlyphSetPtr glyphSet, CARD32 change)
+ :{
+ : return (ResizeGlyphHash (&glyphSet->hash, change, FALSE) &&
+ : ResizeGlyphHash (&globalGlyphs[glyphSet->fdepth], change, TRUE));
+ :}
+ :
+ :GlyphSetPtr
+ :AllocateGlyphSet (int fdepth, PictFormatPtr format)
+ :{
+ : GlyphSetPtr glyphSet;
+ : int size;
+ :
+ : if (!globalGlyphs[fdepth].hashSet)
+ : {
+ : if (!AllocateGlyphHash (&globalGlyphs[fdepth], &glyphHashSets[0]))
+ : return FALSE;
+ : }
+ :
+ : size = (sizeof (GlyphSetRec) +
+ : (sizeof (pointer) * _GlyphSetPrivateAllocateIndex));
+ : glyphSet = xalloc (size);
+ : if (!glyphSet)
+ : return FALSE;
+ : bzero((char *)glyphSet, size);
+ : glyphSet->maxPrivate = _GlyphSetPrivateAllocateIndex - 1;
+ : if (_GlyphSetPrivateAllocateIndex)
+ : glyphSet->devPrivates = (pointer)(&glyphSet[1]);
+ :
+ : if (!AllocateGlyphHash (&glyphSet->hash, &glyphHashSets[0]))
+ : {
+ : xfree (glyphSet);
+ : return FALSE;
+ : }
+ : glyphSet->refcnt = 1;
+ : glyphSet->fdepth = fdepth;
+ : glyphSet->format = format;
+ : return glyphSet;
+ :}
+ :
+ :int
+ :FreeGlyphSet (pointer value,
+ : XID gid)
+ :{
+ : GlyphSetPtr glyphSet = (GlyphSetPtr) value;
+ :
+ : if (--glyphSet->refcnt == 0)
+ : {
+ : CARD32 i, tableSize = glyphSet->hash.hashSet->size;
+ : GlyphRefPtr table = glyphSet->hash.table;
+ : GlyphPtr glyph;
+ :
+ : for (i = 0; i < tableSize; i++)
+ : {
+ : glyph = table[i].glyph;
+ : if (glyph && glyph != DeletedGlyph)
+ : FreeGlyph (glyph, glyphSet->fdepth);
+ : }
+ : if (!globalGlyphs[glyphSet->fdepth].tableEntries)
+ : {
+ : xfree (globalGlyphs[glyphSet->fdepth].table);
+ : globalGlyphs[glyphSet->fdepth].table = 0;
+ : globalGlyphs[glyphSet->fdepth].hashSet = 0;
+ : }
+ : else
+ : ResizeGlyphHash (&globalGlyphs[glyphSet->fdepth], 0, TRUE);
+ : xfree (table);
+ :
+ : if (glyphSet->devPrivates &&
+ : glyphSet->devPrivates != (pointer)(&glyphSet[1]))
+ : xfree(glyphSet->devPrivates);
+ :
+ : xfree (glyphSet);
+ : }
+ : return Success;
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/Xext/xace.c"
+ *
+ * 101 0.1100
+ */
+
+
+ :/************************************************************
+ :
+ :Author: Eamon Walsh <ewalsh@epoch.ncsc.mil>
+ :
+ :Permission to use, copy, modify, distribute, and sell this software and its
+ :documentation for any purpose is hereby granted without fee, provided that
+ :this permission notice appear in supporting documentation. This permission
+ :notice shall be included in all copies or substantial portions of the
+ :Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :********************************************************/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <stdarg.h>
+ :#include "windowstr.h"
+ :#include "scrnintstr.h"
+ :#include "gcstruct.h"
+ :#include "xacestr.h"
+ :#include "modinit.h"
+ :
+ :CallbackListPtr XaceHooks[XACE_NUM_HOOKS] = {0};
+ :
+ :/* Proc vectors for untrusted clients, swapped and unswapped versions.
+ : * These are the same as the normal proc vectors except that extensions
+ : * that haven't declared themselves secure will have ProcBadRequest plugged
+ : * in for their major opcode dispatcher. This prevents untrusted clients
+ : * from guessing extension major opcodes and using the extension even though
+ : * the extension can't be listed or queried.
+ : */
+ :static int (*UntrustedProcVector[256])(
+ : ClientPtr /*client*/
+ :);
+ :static int (*SwappedUntrustedProcVector[256])(
+ : ClientPtr /*client*/
+ :);
+ :
+ :/* Entry point for hook functions. Called by Xserver.
+ : */
+ :int XaceHook(int hook, ...)
+ 22 0.0240 :{ /* XaceHook total: 74 0.0806 */
+ : pointer calldata; /* data passed to callback */
+ : int *prv = NULL; /* points to return value from callback */
+ : va_list ap; /* argument list */
+ 8 0.0087 : va_start(ap, hook);
+ :
+ : /* Marshal arguments for passing to callback.
+ : * Each callback has its own case, which sets up a structure to hold
+ : * the arguments and integer return parameter, or in some cases just
+ : * sets calldata directly to a single argument (with no return result)
+ : */
+ 7 0.0076 : switch (hook)
+ : {
+ : case XACE_CORE_DISPATCH: {
+ : XaceCoreDispatchRec rec = {
+ : va_arg(ap, ClientPtr),
+ : TRUE /* default allow */
+ : };
+ : calldata = &rec;
+ : prv = &rec.rval;
+ : break;
+ : }
+ : case XACE_RESOURCE_ACCESS: {
+ : XaceResourceAccessRec rec = {
+ : va_arg(ap, ClientPtr),
+ : va_arg(ap, XID),
+ : va_arg(ap, RESTYPE),
+ : va_arg(ap, Mask),
+ : va_arg(ap, pointer),
+ : TRUE /* default allow */
+ 13 0.0142 : };
+ : calldata = &rec;
+ : prv = &rec.rval;
+ : break;
+ : }
+ : case XACE_DEVICE_ACCESS: {
+ : XaceDeviceAccessRec rec = {
+ : va_arg(ap, ClientPtr),
+ : va_arg(ap, DeviceIntPtr),
+ : va_arg(ap, Bool),
+ : TRUE /* default allow */
+ : };
+ : calldata = &rec;
+ : prv = &rec.rval;
+ : break;
+ : }
+ : case XACE_PROPERTY_ACCESS: {
+ : XacePropertyAccessRec rec = {
+ : va_arg(ap, ClientPtr),
+ : va_arg(ap, WindowPtr),
+ : va_arg(ap, Atom),
+ : va_arg(ap, Mask),
+ : XaceAllowOperation /* default allow */
+ : };
+ : calldata = &rec;
+ : prv = &rec.rval;
+ : break;
+ : }
+ : case XACE_DRAWABLE_ACCESS: {
+ : XaceDrawableAccessRec rec = {
+ : va_arg(ap, ClientPtr),
+ : va_arg(ap, DrawablePtr),
+ : TRUE /* default allow */
+ : };
+ : calldata = &rec;
+ : prv = &rec.rval;
+ : break;
+ : }
+ : case XACE_MAP_ACCESS:
+ : case XACE_BACKGRND_ACCESS: {
+ : XaceMapAccessRec rec = {
+ : va_arg(ap, ClientPtr),
+ : va_arg(ap, WindowPtr),
+ : TRUE /* default allow */
+ : };
+ : calldata = &rec;
+ : prv = &rec.rval;
+ : break;
+ : }
+ : case XACE_EXT_DISPATCH:
+ : case XACE_EXT_ACCESS: {
+ : XaceExtAccessRec rec = {
+ : va_arg(ap, ClientPtr),
+ : va_arg(ap, ExtensionEntry*),
+ : TRUE /* default allow */
+ : };
+ : calldata = &rec;
+ : prv = &rec.rval;
+ : break;
+ : }
+ : case XACE_HOSTLIST_ACCESS: {
+ : XaceHostlistAccessRec rec = {
+ : va_arg(ap, ClientPtr),
+ : va_arg(ap, Mask),
+ : TRUE /* default allow */
+ : };
+ : calldata = &rec;
+ : prv = &rec.rval;
+ : break;
+ : }
+ : case XACE_SITE_POLICY: {
+ : XaceSitePolicyRec rec = {
+ : va_arg(ap, char*),
+ : va_arg(ap, int),
+ : FALSE /* default unrecognized */
+ : };
+ : calldata = &rec;
+ : prv = &rec.rval;
+ : break;
+ : }
+ : case XACE_DECLARE_EXT_SECURE: {
+ : XaceDeclareExtSecureRec rec = {
+ : va_arg(ap, ExtensionEntry*),
+ : va_arg(ap, Bool)
+ : };
+ : calldata = &rec;
+ : break;
+ : }
+ : case XACE_AUTH_AVAIL: {
+ : XaceAuthAvailRec rec = {
+ : va_arg(ap, ClientPtr),
+ : va_arg(ap, XID)
+ : };
+ : calldata = &rec;
+ : break;
+ : }
+ : case XACE_KEY_AVAIL: {
+ : XaceKeyAvailRec rec = {
+ : va_arg(ap, xEventPtr),
+ : va_arg(ap, DeviceIntPtr),
+ : va_arg(ap, int)
+ : };
+ : calldata = &rec;
+ : break;
+ : }
+ : case XACE_WINDOW_INIT: {
+ : XaceWindowRec rec = {
+ : va_arg(ap, ClientPtr),
+ : va_arg(ap, WindowPtr)
+ : };
+ : calldata = &rec;
+ : break;
+ : }
+ : case XACE_AUDIT_BEGIN: {
+ : XaceAuditRec rec = {
+ : va_arg(ap, ClientPtr),
+ : 0
+ 2 0.0022 : };
+ : calldata = &rec;
+ : break;
+ : }
+ : case XACE_AUDIT_END: {
+ : XaceAuditRec rec = {
+ : va_arg(ap, ClientPtr),
+ : va_arg(ap, int)
+ 2 0.0022 : };
+ : calldata = &rec;
+ : break;
+ : }
+ : default: {
+ : va_end(ap);
+ : return 0; /* unimplemented hook number */
+ : }
+ : }
+ : va_end(ap);
+ :
+ : /* call callbacks and return result, if any. */
+ 10 0.0109 : CallCallbacks(&XaceHooks[hook], calldata);
+ 4 0.0044 : return prv ? *prv : 0;
+ 6 0.0065 :}
+ :
+ :static int
+ :ProcXaceDispatch(ClientPtr client)
+ :{
+ : REQUEST(xReq);
+ :
+ : switch (stuff->data)
+ : {
+ : default:
+ : return BadRequest;
+ : }
+ :} /* ProcXaceDispatch */
+ :
+ :static int
+ :SProcXaceDispatch(ClientPtr client)
+ :{
+ : REQUEST(xReq);
+ :
+ : switch (stuff->data)
+ : {
+ : default:
+ : return BadRequest;
+ : }
+ :} /* SProcXaceDispatch */
+ :
+ :
+ :/* XaceResetProc
+ : *
+ : * Arguments:
+ : * extEntry is the extension information for the XACE extension.
+ : *
+ : * Returns: nothing.
+ : *
+ : * Side Effects:
+ : * Performs any cleanup needed by XACE at server shutdown time.
+ : */
+ :static void
+ :XaceResetProc(ExtensionEntry *extEntry)
+ :{
+ : int i;
+ :
+ : for (i=0; i<XACE_NUM_HOOKS; i++)
+ : {
+ : DeleteCallbackList(&XaceHooks[i]);
+ : XaceHooks[i] = NULL;
+ : }
+ :} /* XaceResetProc */
+ :
+ :
+ :static int
+ :XaceCatchDispatchProc(ClientPtr client)
+ :{ /* XaceCatchDispatchProc total: 5 0.0054 */
+ : REQUEST(xReq);
+ : int major = stuff->reqType;
+ :
+ 5 0.0054 : if (!ProcVector[major])
+ : return (BadRequest);
+ :
+ : if (!XaceHook(XACE_CORE_DISPATCH, client))
+ : return (BadAccess);
+ :
+ : return client->swapped ?
+ : (* SwappedProcVector[major])(client) :
+ : (* ProcVector[major])(client);
+ :}
+ :
+ :static int
+ :XaceCatchExtProc(ClientPtr client)
+ 4 0.0044 :{ /* XaceCatchExtProc total: 22 0.0240 */
+ : REQUEST(xReq);
+ : int major = stuff->reqType;
+ 2 0.0022 : ExtensionEntry *ext = GetExtensionEntry(major);
+ :
+ 2 0.0022 : if (!ext || !ProcVector[major])
+ : return (BadRequest);
+ :
+ 1 0.0011 : if (!XaceHook(XACE_EXT_DISPATCH, client, ext))
+ : return (BadRequest); /* pretend extension doesn't exist */
+ :
+ 1 0.0011 : return client->swapped ?
+ : (* SwappedProcVector[major])(client) :
+ : (* ProcVector[major])(client);
+ 12 0.0131 :}
+ :
+ :
+ :/* SecurityClientStateCallback
+ : *
+ : * Arguments:
+ : * pcbl is &ClientStateCallback.
+ : * nullata is NULL.
+ : * calldata is a pointer to a NewClientInfoRec (include/dixstruct.h)
+ : * which contains information about client state changes.
+ : *
+ : * Returns: nothing.
+ : *
+ : * Side Effects:
+ : *
+ : * If a new client is connecting, its authorization ID is copied to
+ : * client->authID. If this is a generated authorization, its reference
+ : * count is bumped, its timer is cancelled if it was running, and its
+ : * trustlevel is copied to TRUSTLEVEL(client).
+ : *
+ : * If a client is disconnecting and the client was using a generated
+ : * authorization, the authorization's reference count is decremented, and
+ : * if it is now zero, the timer for this authorization is started.
+ : */
+ :
+ :static void
+ :XaceClientStateCallback(
+ : CallbackListPtr *pcbl,
+ : pointer nulldata,
+ : pointer calldata)
+ :{
+ : NewClientInfoRec *pci = (NewClientInfoRec *)calldata;
+ : ClientPtr client = pci->client;
+ :
+ : switch (client->clientState)
+ : {
+ : case ClientStateRunning:
+ : {
+ : client->requestVector = client->swapped ?
+ : SwappedUntrustedProcVector : UntrustedProcVector;
+ : break;
+ : }
+ : default: break;
+ : }
+ :} /* XaceClientStateCallback */
+ :
+ :/* XaceExtensionInit
+ : *
+ : * Initialize the XACE Extension
+ : */
+ :void XaceExtensionInit(INITARGS)
+ :{
+ : ExtensionEntry *extEntry;
+ : int i;
+ :
+ : if (!AddCallback(&ClientStateCallback, XaceClientStateCallback, NULL))
+ : return;
+ :
+ : extEntry = AddExtension(XACE_EXTENSION_NAME,
+ : XaceNumberEvents, XaceNumberErrors,
+ : ProcXaceDispatch, SProcXaceDispatch,
+ : XaceResetProc, StandardMinorOpcode);
+ :
+ : /* initialize dispatching intercept functions */
+ : for (i = 0; i < 128; i++)
+ : {
+ : UntrustedProcVector[i] = XaceCatchDispatchProc;
+ : SwappedUntrustedProcVector[i] = XaceCatchDispatchProc;
+ : }
+ : for (i = 128; i < 256; i++)
+ : {
+ : UntrustedProcVector[i] = XaceCatchExtProc;
+ : SwappedUntrustedProcVector[i] = XaceCatchExtProc;
+ : }
+ :}
+ :
+ :/* XaceCensorImage
+ : *
+ : * Called after pScreen->GetImage to prevent pieces or trusted windows from
+ : * being returned in image data from an untrusted window.
+ : *
+ : * Arguments:
+ : * client is the client doing the GetImage.
+ : * pVisibleRegion is the visible region of the window.
+ : * widthBytesLine is the width in bytes of one horizontal line in pBuf.
+ : * pDraw is the source window.
+ : * x, y, w, h is the rectangle of image data from pDraw in pBuf.
+ : * format is the format of the image data in pBuf: ZPixmap or XYPixmap.
+ : * pBuf is the image data.
+ : *
+ : * Returns: nothing.
+ : *
+ : * Side Effects:
+ : * Any part of the rectangle (x, y, w, h) that is outside the visible
+ : * region of the window will be destroyed (overwritten) in pBuf.
+ : */
+ :void
+ :XaceCensorImage(client, pVisibleRegion, widthBytesLine, pDraw, x, y, w, h,
+ : format, pBuf)
+ : ClientPtr client;
+ : RegionPtr pVisibleRegion;
+ : long widthBytesLine;
+ : DrawablePtr pDraw;
+ : int x, y, w, h;
+ : unsigned int format;
+ : char * pBuf;
+ :{
+ : ScreenPtr pScreen;
+ : RegionRec imageRegion; /* region representing x,y,w,h */
+ : RegionRec censorRegion; /* region to obliterate */
+ : BoxRec imageBox;
+ : int nRects;
+ :
+ : pScreen = pDraw->pScreen;
+ :
+ : imageBox.x1 = x;
+ : imageBox.y1 = y;
+ : imageBox.x2 = x + w;
+ : imageBox.y2 = y + h;
+ : REGION_INIT(pScreen, &imageRegion, &imageBox, 1);
+ : REGION_NULL(pScreen, &censorRegion);
+ :
+ : /* censorRegion = imageRegion - visibleRegion */
+ : REGION_SUBTRACT(pScreen, &censorRegion, &imageRegion, pVisibleRegion);
+ : nRects = REGION_NUM_RECTS(&censorRegion);
+ : if (nRects > 0)
+ : { /* we have something to censor */
+ : GCPtr pScratchGC = NULL;
+ : PixmapPtr pPix = NULL;
+ : xRectangle *pRects = NULL;
+ : Bool failed = FALSE;
+ : int depth = 1;
+ : int bitsPerPixel = 1;
+ : int i;
+ : BoxPtr pBox;
+ :
+ : /* convert region to list-of-rectangles for PolyFillRect */
+ :
+ : pRects = (xRectangle *)ALLOCATE_LOCAL(nRects * sizeof(xRectangle *));
+ : if (!pRects)
+ : {
+ : failed = TRUE;
+ : goto failSafe;
+ : }
+ : for (pBox = REGION_RECTS(&censorRegion), i = 0;
+ : i < nRects;
+ : i++, pBox++)
+ : {
+ : pRects[i].x = pBox->x1;
+ : pRects[i].y = pBox->y1 - imageBox.y1;
+ : pRects[i].width = pBox->x2 - pBox->x1;
+ : pRects[i].height = pBox->y2 - pBox->y1;
+ : }
+ :
+ : /* use pBuf as a fake pixmap */
+ :
+ : if (format == ZPixmap)
+ : {
+ : depth = pDraw->depth;
+ : bitsPerPixel = pDraw->bitsPerPixel;
+ : }
+ :
+ : pPix = GetScratchPixmapHeader(pDraw->pScreen, w, h,
+ : depth, bitsPerPixel,
+ : widthBytesLine, (pointer)pBuf);
+ : if (!pPix)
+ : {
+ : failed = TRUE;
+ : goto failSafe;
+ : }
+ :
+ : pScratchGC = GetScratchGC(depth, pPix->drawable.pScreen);
+ : if (!pScratchGC)
+ : {
+ : failed = TRUE;
+ : goto failSafe;
+ : }
+ :
+ : ValidateGC(&pPix->drawable, pScratchGC);
+ : (* pScratchGC->ops->PolyFillRect)(&pPix->drawable,
+ : pScratchGC, nRects, pRects);
+ :
+ : failSafe:
+ : if (failed)
+ : {
+ : /* Censoring was not completed above. To be safe, wipe out
+ : * all the image data so that nothing trusted gets out.
+ : */
+ : bzero(pBuf, (int)(widthBytesLine * h));
+ : }
+ : if (pRects) DEALLOCATE_LOCAL(pRects);
+ : if (pScratchGC) FreeScratchGC(pScratchGC);
+ : if (pPix) FreeScratchPixmapHeader(pPix);
+ : }
+ : REGION_UNINIT(pScreen, &imageRegion);
+ : REGION_UNINIT(pScreen, &censorRegion);
+ :} /* XaceCensorImage */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/dix/dixutils.c"
+ *
+ * 87 0.0948
+ */
+
+
+ :/***********************************************************
+ :
+ :Copyright 1987, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :
+ :Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 Digital not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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.
+ :
+ :******************************************************************/
+ :
+ :/*
+ :
+ :(c)Copyright 1988,1991 Adobe Systems Incorporated. All rights reserved.
+ :
+ :Permission to use, copy, modify, distribute, and sublicense this software and its
+ :documentation for any purpose and without fee is hereby granted, provided that
+ :the above copyright notices appear in all copies and that both those copyright
+ :notices and this permission notice appear in supporting documentation and that
+ :the name of Adobe Systems Incorporated not be used in advertising or publicity
+ :pertaining to distribution of the software without specific, written prior
+ :permission. No trademark license to use the Adobe trademarks is hereby
+ :granted. If the Adobe trademark "Display PostScript"(tm) is used to describe
+ :this software, its functionality or for any other purpose, such use shall be
+ :limited to a statement that this software works in conjunction with the Display
+ :PostScript system. Proper trademark attribution to reflect Adobe's ownership
+ :of the trademark shall be given whenever any such reference to the Display
+ :PostScript system is made.
+ :
+ :ADOBE MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR ANY
+ :PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ADOBE
+ :DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
+ :WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-
+ :INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL ADOBE BE LIABLE TO YOU
+ :OR ANY OTHER PARTY FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
+ :DAMAGES WHATSOEVER WHETHER IN AN ACTION OF CONTRACT,NEGLIGENCE, STRICT
+ :LIABILITY OR ANY OTHER ACTION ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ :PERFORMANCE OF THIS SOFTWARE. ADOBE WILL NOT PROVIDE ANY TRAINING OR OTHER
+ :SUPPORT FOR THE SOFTWARE.
+ :
+ :Adobe, PostScript, and Display PostScript are trademarks of Adobe Systems
+ :Incorporated which may be registered in certain jurisdictions.
+ :
+ :Author: Adobe Systems Incorporated
+ :
+ :*/
+ :
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <X11/X.h>
+ :#include <X11/Xmd.h>
+ :#include "misc.h"
+ :#include "windowstr.h"
+ :#include "dixstruct.h"
+ :#include "pixmapstr.h"
+ :#include "scrnintstr.h"
+ :#define XK_LATIN1
+ :#include <X11/keysymdef.h>
+ :#include "xace.h"
+ :
+ :/*
+ : * CompareTimeStamps returns -1, 0, or +1 depending on if the first
+ : * argument is less than, equal to or greater than the second argument.
+ : */
+ :
+ :_X_EXPORT int
+ :CompareTimeStamps(TimeStamp a, TimeStamp b)
+ :{
+ : if (a.months < b.months)
+ : return EARLIER;
+ : if (a.months > b.months)
+ : return LATER;
+ : if (a.milliseconds < b.milliseconds)
+ : return EARLIER;
+ : if (a.milliseconds > b.milliseconds)
+ : return LATER;
+ : return SAMETIME;
+ :}
+ :
+ :/*
+ : * convert client times to server TimeStamps
+ : */
+ :
+ :#define HALFMONTH ((unsigned long) 1<<31)
+ :_X_EXPORT TimeStamp
+ :ClientTimeToServerTime(CARD32 c)
+ :{
+ : TimeStamp ts;
+ : if (c == CurrentTime)
+ : return currentTime;
+ : ts.months = currentTime.months;
+ : ts.milliseconds = c;
+ : if (c > currentTime.milliseconds)
+ : {
+ : if (((unsigned long) c - currentTime.milliseconds) > HALFMONTH)
+ : ts.months -= 1;
+ : }
+ : else if (c < currentTime.milliseconds)
+ : {
+ : if (((unsigned long)currentTime.milliseconds - c) > HALFMONTH)
+ : ts.months += 1;
+ : }
+ : return ts;
+ :}
+ :
+ :/*
+ : * ISO Latin-1 case conversion routine
+ : *
+ : * this routine always null-terminates the result, so
+ : * beware of too-small buffers
+ : */
+ :
+ :static unsigned char
+ :ISOLatin1ToLower (unsigned char source)
+ :{
+ : unsigned char dest;
+ : if ((source >= XK_A) && (source <= XK_Z))
+ : dest = source + (XK_a - XK_A);
+ : else if ((source >= XK_Agrave) && (source <= XK_Odiaeresis))
+ : dest = source + (XK_agrave - XK_Agrave);
+ : else if ((source >= XK_Ooblique) && (source <= XK_Thorn))
+ : dest = source + (XK_oslash - XK_Ooblique);
+ : else
+ : dest = source;
+ : return dest;
+ :}
+ :
+ :
+ :_X_EXPORT void
+ :CopyISOLatin1Lowered(unsigned char *dest, unsigned char *source, int length)
+ :{
+ : int i;
+ :
+ : for (i = 0; i < length; i++, source++, dest++)
+ : *dest = ISOLatin1ToLower (*source);
+ : *dest = '\0';
+ :}
+ :
+ :int
+ :CompareISOLatin1Lowered(unsigned char *s1, int s1len,
+ : unsigned char *s2, int s2len)
+ 1 0.0011 :{ /* CompareISOLatin1Lowered total: 22 0.0240 */
+ : unsigned char c1, c2;
+ :
+ : for (;;)
+ : {
+ : /* note -- compare against zero so that -1 ignores len */
+ 8 0.0087 : c1 = s1len-- ? *s1++ : '\0';
+ 10 0.0109 : c2 = s2len-- ? *s2++ : '\0';
+ 3 0.0033 : if (!c1 ||
+ : (c1 != c2 &&
+ : (c1 = ISOLatin1ToLower (c1)) != (c2 = ISOLatin1ToLower (c2))))
+ : break;
+ : }
+ : return (int) c1 - (int) c2;
+ :}
+ :
+ :/*
+ : * dixLookupWindow and dixLookupDrawable:
+ : * Look up the window/drawable taking into account the client doing the
+ : * lookup, the type of drawable desired, and the type of access desired.
+ : * Return Success with *pDraw set if the window/drawable exists and the client
+ : * is allowed access, else return an error code with *pDraw set to NULL. The
+ : * access mask values are defined in resource.h. The type mask values are
+ : * defined in pixmap.h, with zero equivalent to M_DRAWABLE.
+ : */
+ :_X_EXPORT int
+ :dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client,
+ : Mask type, Mask access)
+ 1 0.0011 :{ /* dixLookupDrawable total: 6 0.0065 */
+ : DrawablePtr pTmp;
+ : RESTYPE rtype;
+ : *pDraw = NULL;
+ : client->errorValue = id;
+ :
+ : if (id == INVALID)
+ : return BadDrawable;
+ :
+ : if (id == client->lastDrawableID) {
+ : pTmp = client->lastDrawable;
+ :
+ : /* an access check is required for cached drawables */
+ : rtype = (type & M_WINDOW) ? RT_WINDOW : RT_PIXMAP;
+ : if (!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, access, pTmp))
+ : return BadDrawable;
+ : } else
+ : pTmp = (DrawablePtr)SecurityLookupIDByClass(client, id, RC_DRAWABLE,
+ : access);
+ : if (!pTmp)
+ : return BadDrawable;
+ 3 0.0033 : if (!((1 << pTmp->type) & (type ? type : M_DRAWABLE)))
+ : return BadMatch;
+ :
+ : if (type & M_DRAWABLE) {
+ : client->lastDrawable = pTmp;
+ : client->lastDrawableID = id;
+ : client->lastGCID = INVALID;
+ : client->lastGC = (GCPtr)NULL;
+ : }
+ : *pDraw = pTmp;
+ : return Success;
+ 2 0.0022 :}
+ :
+ :_X_EXPORT int
+ :dixLookupWindow(WindowPtr *pWin, XID id, ClientPtr client, Mask access)
+ :{
+ : int rc;
+ : rc = dixLookupDrawable((DrawablePtr*)pWin, id, client, M_WINDOW, access);
+ : return (rc == BadDrawable) ? BadWindow : rc;
+ :}
+ :
+ :_X_EXPORT int
+ :dixLookupGC(GCPtr *pGC, XID id, ClientPtr client, Mask access)
+ 1 0.0011 :{ /* dixLookupGC total: 2 0.0022 */
+ 1 0.0011 : GCPtr pTmp = (GCPtr)SecurityLookupIDByType(client, id, RT_GC, access);
+ : if (pTmp) {
+ : *pGC = pTmp;
+ : return Success;
+ : }
+ : client->errorValue = id;
+ : *pGC = NULL;
+ : return BadGC;
+ :}
+ :
+ :_X_EXPORT int
+ :dixLookupClient(ClientPtr *pClient, XID rid, ClientPtr client, Mask access)
+ :{
+ : pointer pRes = (pointer)SecurityLookupIDByClass(client, rid, RC_ANY,
+ : access);
+ : int clientIndex = CLIENT_ID(rid);
+ : client->errorValue = rid;
+ :
+ : if (clientIndex && pRes && clients[clientIndex] && !(rid & SERVER_BIT)) {
+ : *pClient = clients[clientIndex];
+ : return Success;
+ : }
+ : *pClient = NULL;
+ : return BadValue;
+ :}
+ :
+ :/*
+ : * These are deprecated compatibility functions and will be removed soon!
+ : * Please use the new dixLookup*() functions above.
+ : */
+ :_X_EXPORT _X_DEPRECATED WindowPtr
+ :SecurityLookupWindow(XID id, ClientPtr client, Mask access_mode)
+ :{
+ : WindowPtr pWin;
+ : int i = dixLookupWindow(&pWin, id, client, access_mode);
+ : static int warn = 1;
+ : if (warn-- > 0)
+ : ErrorF("Warning: LookupWindow()/SecurityLookupWindow() "
+ : "are deprecated. Please convert your driver/module "
+ : "to use dixLookupWindow().\n");
+ : return (i == Success) ? pWin : NULL;
+ :}
+ :
+ :_X_EXPORT _X_DEPRECATED WindowPtr
+ :LookupWindow(XID id, ClientPtr client)
+ :{
+ : return SecurityLookupWindow(id, client, DixUnknownAccess);
+ :}
+ :
+ :_X_EXPORT _X_DEPRECATED pointer
+ :SecurityLookupDrawable(XID id, ClientPtr client, Mask access_mode)
+ :{
+ : DrawablePtr pDraw;
+ : int i = dixLookupDrawable(&pDraw, id, client, M_DRAWABLE, access_mode);
+ : static int warn = 1;
+ : if (warn-- > 0)
+ : ErrorF("Warning: LookupDrawable()/SecurityLookupDrawable() "
+ : "are deprecated. Please convert your driver/module "
+ : "to use dixLookupDrawable().\n");
+ : return (i == Success) ? pDraw : NULL;
+ :}
+ :
+ :_X_EXPORT _X_DEPRECATED pointer
+ :LookupDrawable(XID id, ClientPtr client)
+ :{
+ : return SecurityLookupDrawable(id, client, DixUnknownAccess);
+ :}
+ :
+ :_X_EXPORT _X_DEPRECATED ClientPtr
+ :LookupClient(XID id, ClientPtr client)
+ :{
+ : ClientPtr pClient;
+ : int i = dixLookupClient(&pClient, id, client, DixUnknownAccess);
+ : static int warn = 1;
+ : if (warn-- > 0)
+ : ErrorF("Warning: LookupClient() is deprecated. Please convert your "
+ : "driver/module to use dixLookupClient().\n");
+ : return (i == Success) ? pClient : NULL;
+ :}
+ :
+ :/* end deprecated functions */
+ :
+ :int
+ :AlterSaveSetForClient(ClientPtr client, WindowPtr pWin, unsigned mode,
+ : Bool toRoot, Bool remap)
+ :{
+ : int numnow;
+ : SaveSetElt *pTmp = NULL;
+ : int j;
+ :
+ : numnow = client->numSaved;
+ : j = 0;
+ : if (numnow)
+ : {
+ : pTmp = client->saveSet;
+ : while ((j < numnow) && (SaveSetWindow(pTmp[j]) != (pointer)pWin))
+ : j++;
+ : }
+ : if (mode == SetModeInsert)
+ : {
+ : if (j < numnow) /* duplicate */
+ : return(Success);
+ : numnow++;
+ : pTmp = (SaveSetElt *)xrealloc(client->saveSet, sizeof(*pTmp) * numnow);
+ : if (!pTmp)
+ : return(BadAlloc);
+ : client->saveSet = pTmp;
+ : client->numSaved = numnow;
+ : SaveSetAssignWindow(client->saveSet[numnow - 1], pWin);
+ : SaveSetAssignToRoot(client->saveSet[numnow - 1], toRoot);
+ : SaveSetAssignRemap(client->saveSet[numnow - 1], remap);
+ : return(Success);
+ : }
+ : else if ((mode == SetModeDelete) && (j < numnow))
+ : {
+ : while (j < numnow-1)
+ : {
+ : pTmp[j] = pTmp[j+1];
+ : j++;
+ : }
+ : numnow--;
+ : if (numnow)
+ : {
+ : pTmp = (SaveSetElt *)xrealloc(client->saveSet, sizeof(*pTmp) * numnow);
+ : if (pTmp)
+ : client->saveSet = pTmp;
+ : }
+ : else
+ : {
+ : xfree(client->saveSet);
+ : client->saveSet = (SaveSetElt *)NULL;
+ : }
+ : client->numSaved = numnow;
+ : return(Success);
+ : }
+ : return(Success);
+ :}
+ :
+ :void
+ :DeleteWindowFromAnySaveSet(WindowPtr pWin)
+ :{
+ : int i;
+ : ClientPtr client;
+ :
+ : for (i = 0; i< currentMaxClients; i++)
+ : {
+ : client = clients[i];
+ : if (client && client->numSaved)
+ : (void)AlterSaveSetForClient(client, pWin, SetModeDelete, FALSE, TRUE);
+ : }
+ :}
+ :
+ :/* No-op Don't Do Anything : sometimes we need to be able to call a procedure
+ : * that doesn't do anything. For example, on screen with only static
+ : * colormaps, if someone calls install colormap, it's easier to have a dummy
+ : * procedure to call than to check if there's a procedure
+ : */
+ :_X_EXPORT void
+ :NoopDDA(void)
+ :{
+ :}
+ :
+ :typedef struct _BlockHandler {
+ : BlockHandlerProcPtr BlockHandler;
+ : WakeupHandlerProcPtr WakeupHandler;
+ : pointer blockData;
+ : Bool deleted;
+ :} BlockHandlerRec, *BlockHandlerPtr;
+ :
+ :static BlockHandlerPtr handlers;
+ :static int numHandlers;
+ :static int sizeHandlers;
+ :static Bool inHandler;
+ :static Bool handlerDeleted;
+ :
+ :/**
+ : *
+ : * \param pTimeout DIX doesn't want to know how OS represents time
+ : * \param pReadMask nor how it represents the det of descriptors
+ : */
+ :void
+ :BlockHandler(pointer pTimeout, pointer pReadmask)
+ :{
+ : int i, j;
+ :
+ : ++inHandler;
+ : for (i = 0; i < screenInfo.numScreens; i++)
+ : (* screenInfo.screens[i]->BlockHandler)(i,
+ : screenInfo.screens[i]->blockData,
+ : pTimeout, pReadmask);
+ : for (i = 0; i < numHandlers; i++)
+ : (*handlers[i].BlockHandler) (handlers[i].blockData,
+ : pTimeout, pReadmask);
+ : if (handlerDeleted)
+ : {
+ : for (i = 0; i < numHandlers;)
+ : if (handlers[i].deleted)
+ : {
+ : for (j = i; j < numHandlers - 1; j++)
+ : handlers[j] = handlers[j+1];
+ : numHandlers--;
+ : }
+ : else
+ : i++;
+ : handlerDeleted = FALSE;
+ : }
+ : --inHandler;
+ :}
+ :
+ :/**
+ : *
+ : * \param result 32 bits of undefined result from the wait
+ : * \param pReadmask the resulting descriptor mask
+ : */
+ :void
+ :WakeupHandler(int result, pointer pReadmask)
+ :{
+ : int i, j;
+ :
+ : ++inHandler;
+ : for (i = numHandlers - 1; i >= 0; i--)
+ : (*handlers[i].WakeupHandler) (handlers[i].blockData,
+ : result, pReadmask);
+ : for (i = 0; i < screenInfo.numScreens; i++)
+ : (* screenInfo.screens[i]->WakeupHandler)(i,
+ : screenInfo.screens[i]->wakeupData,
+ : result, pReadmask);
+ : if (handlerDeleted)
+ : {
+ : for (i = 0; i < numHandlers;)
+ : if (handlers[i].deleted)
+ : {
+ : for (j = i; j < numHandlers - 1; j++)
+ : handlers[j] = handlers[j+1];
+ : numHandlers--;
+ : }
+ : else
+ : i++;
+ : handlerDeleted = FALSE;
+ : }
+ : --inHandler;
+ :}
+ :
+ :/**
+ : * Reentrant with BlockHandler and WakeupHandler, except wakeup won't
+ : * get called until next time
+ : */
+ :_X_EXPORT Bool
+ :RegisterBlockAndWakeupHandlers (BlockHandlerProcPtr blockHandler,
+ : WakeupHandlerProcPtr wakeupHandler,
+ : pointer blockData)
+ :{
+ : BlockHandlerPtr new;
+ :
+ : if (numHandlers >= sizeHandlers)
+ : {
+ : new = (BlockHandlerPtr) xrealloc (handlers, (numHandlers + 1) *
+ : sizeof (BlockHandlerRec));
+ : if (!new)
+ : return FALSE;
+ : handlers = new;
+ : sizeHandlers = numHandlers + 1;
+ : }
+ : handlers[numHandlers].BlockHandler = blockHandler;
+ : handlers[numHandlers].WakeupHandler = wakeupHandler;
+ : handlers[numHandlers].blockData = blockData;
+ : handlers[numHandlers].deleted = FALSE;
+ : numHandlers = numHandlers + 1;
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT void
+ :RemoveBlockAndWakeupHandlers (BlockHandlerProcPtr blockHandler,
+ : WakeupHandlerProcPtr wakeupHandler,
+ : pointer blockData)
+ :{
+ : int i;
+ :
+ : for (i = 0; i < numHandlers; i++)
+ : if (handlers[i].BlockHandler == blockHandler &&
+ : handlers[i].WakeupHandler == wakeupHandler &&
+ : handlers[i].blockData == blockData)
+ : {
+ : if (inHandler)
+ : {
+ : handlerDeleted = TRUE;
+ : handlers[i].deleted = TRUE;
+ : }
+ : else
+ : {
+ : for (; i < numHandlers - 1; i++)
+ : handlers[i] = handlers[i+1];
+ : numHandlers--;
+ : }
+ : break;
+ : }
+ :}
+ :
+ :void
+ :InitBlockAndWakeupHandlers (void)
+ :{
+ : xfree (handlers);
+ : handlers = (BlockHandlerPtr) 0;
+ : numHandlers = 0;
+ : sizeHandlers = 0;
+ :}
+ :
+ :/*
+ : * A general work queue. Perform some task before the server
+ : * sleeps for input.
+ : */
+ :
+ :WorkQueuePtr workQueue;
+ :static WorkQueuePtr *workQueueLast = &workQueue;
+ :
+ :void
+ :ProcessWorkQueue(void)
+ :{
+ : WorkQueuePtr q, *p;
+ :
+ : p = &workQueue;
+ : /*
+ : * Scan the work queue once, calling each function. Those
+ : * which return TRUE are removed from the queue, otherwise
+ : * they will be called again. This must be reentrant with
+ : * QueueWorkProc.
+ : */
+ : while ((q = *p))
+ : {
+ : if ((*q->function) (q->client, q->closure))
+ : {
+ : /* remove q from the list */
+ : *p = q->next; /* don't fetch until after func called */
+ : xfree (q);
+ : }
+ : else
+ : {
+ : p = &q->next; /* don't fetch until after func called */
+ : }
+ : }
+ : workQueueLast = p;
+ :}
+ :
+ :void
+ :ProcessWorkQueueZombies(void)
+ :{
+ : WorkQueuePtr q, *p;
+ :
+ : p = &workQueue;
+ : while ((q = *p))
+ : {
+ : if (q->client && q->client->clientGone)
+ : {
+ : (void) (*q->function) (q->client, q->closure);
+ : /* remove q from the list */
+ : *p = q->next; /* don't fetch until after func called */
+ : xfree (q);
+ : }
+ : else
+ : {
+ : p = &q->next; /* don't fetch until after func called */
+ : }
+ : }
+ : workQueueLast = p;
+ :}
+ :
+ :_X_EXPORT Bool
+ :QueueWorkProc (
+ : Bool (*function)(ClientPtr /* pClient */, pointer /* closure */),
+ : ClientPtr client, pointer closure)
+ :{
+ : WorkQueuePtr q;
+ :
+ : q = (WorkQueuePtr) xalloc (sizeof *q);
+ : if (!q)
+ : return FALSE;
+ : q->function = function;
+ : q->client = client;
+ : q->closure = closure;
+ : q->next = NULL;
+ : *workQueueLast = q;
+ : workQueueLast = &q->next;
+ : return TRUE;
+ :}
+ :
+ :/*
+ : * Manage a queue of sleeping clients, awakening them
+ : * when requested, by using the OS functions IgnoreClient
+ : * and AttendClient. Note that this *ignores* the troubles
+ : * with request data interleaving itself with events, but
+ : * we'll leave that until a later time.
+ : */
+ :
+ :typedef struct _SleepQueue {
+ : struct _SleepQueue *next;
+ : ClientPtr client;
+ : ClientSleepProcPtr function;
+ : pointer closure;
+ :} SleepQueueRec, *SleepQueuePtr;
+ :
+ :static SleepQueuePtr sleepQueue = NULL;
+ :
+ :_X_EXPORT Bool
+ :ClientSleep (ClientPtr client, ClientSleepProcPtr function, pointer closure)
+ :{
+ : SleepQueuePtr q;
+ :
+ : q = (SleepQueuePtr) xalloc (sizeof *q);
+ : if (!q)
+ : return FALSE;
+ :
+ : IgnoreClient (client);
+ : q->next = sleepQueue;
+ : q->client = client;
+ : q->function = function;
+ : q->closure = closure;
+ : sleepQueue = q;
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :ClientSignal (ClientPtr client)
+ :{
+ : SleepQueuePtr q;
+ :
+ : for (q = sleepQueue; q; q = q->next)
+ : if (q->client == client)
+ : {
+ : return QueueWorkProc (q->function, q->client, q->closure);
+ : }
+ : return FALSE;
+ :}
+ :
+ :_X_EXPORT void
+ :ClientWakeup (ClientPtr client)
+ :{
+ : SleepQueuePtr q, *prev;
+ :
+ : prev = &sleepQueue;
+ : while ( (q = *prev) )
+ : {
+ : if (q->client == client)
+ : {
+ : *prev = q->next;
+ : xfree (q);
+ : if (client->clientGone)
+ : /* Oops -- new zombie cleanup code ensures this only
+ : * happens from inside CloseDownClient; don't want to
+ : * recurse here...
+ : */
+ : /* CloseDownClient(client) */;
+ : else
+ : AttendClient (client);
+ : break;
+ : }
+ : prev = &q->next;
+ : }
+ :}
+ :
+ :Bool
+ :ClientIsAsleep (ClientPtr client)
+ :{
+ : SleepQueuePtr q;
+ :
+ : for (q = sleepQueue; q; q = q->next)
+ : if (q->client == client)
+ : return TRUE;
+ : return FALSE;
+ :}
+ :
+ :/*
+ : * Generic Callback Manager
+ : */
+ :
+ :/* ===== Private Procedures ===== */
+ :
+ :static int numCallbackListsToCleanup = 0;
+ :static CallbackListPtr **listsToCleanup = NULL;
+ :
+ :static Bool
+ :_AddCallback(
+ : CallbackListPtr *pcbl,
+ : CallbackProcPtr callback,
+ : pointer data)
+ :{
+ : CallbackPtr cbr;
+ :
+ : cbr = (CallbackPtr) xalloc(sizeof(CallbackRec));
+ : if (!cbr)
+ : return FALSE;
+ : cbr->proc = callback;
+ : cbr->data = data;
+ : cbr->next = (*pcbl)->list;
+ : cbr->deleted = FALSE;
+ : (*pcbl)->list = cbr;
+ : return TRUE;
+ :}
+ :
+ :static Bool
+ :_DeleteCallback(
+ : CallbackListPtr *pcbl,
+ : CallbackProcPtr callback,
+ : pointer data)
+ :{
+ : CallbackListPtr cbl = *pcbl;
+ : CallbackPtr cbr, pcbr;
+ :
+ : for (pcbr = NULL, cbr = cbl->list;
+ : cbr != NULL;
+ : pcbr = cbr, cbr = cbr->next)
+ : {
+ : if ((cbr->proc == callback) && (cbr->data == data))
+ : break;
+ : }
+ : if (cbr != NULL)
+ : {
+ : if (cbl->inCallback)
+ : {
+ : ++(cbl->numDeleted);
+ : cbr->deleted = TRUE;
+ : }
+ : else
+ : {
+ : if (pcbr == NULL)
+ : cbl->list = cbr->next;
+ : else
+ : pcbr->next = cbr->next;
+ : xfree(cbr);
+ : }
+ : return TRUE;
+ : }
+ : return FALSE;
+ :}
+ :
+ :static void
+ :_CallCallbacks(
+ : CallbackListPtr *pcbl,
+ : pointer call_data)
+ 17 0.0185 :{ /* _CallCallbacks total: 30 0.0327 */
+ : CallbackListPtr cbl = *pcbl;
+ : CallbackPtr cbr, pcbr;
+ :
+ 3 0.0033 : ++(cbl->inCallback);
+ 3 0.0033 : for (cbr = cbl->list; cbr != NULL; cbr = cbr->next)
+ : {
+ 6 0.0065 : (*(cbr->proc)) (pcbl, cbr->data, call_data);
+ : }
+ : --(cbl->inCallback);
+ :
+ : if (cbl->inCallback) return;
+ :
+ : /* Was the entire list marked for deletion? */
+ :
+ 1 0.0011 : if (cbl->deleted)
+ : {
+ : DeleteCallbackList(pcbl);
+ : return;
+ : }
+ :
+ : /* Were some individual callbacks on the list marked for deletion?
+ : * If so, do the deletions.
+ : */
+ :
+ : if (cbl->numDeleted)
+ : {
+ : for (pcbr = NULL, cbr = cbl->list; (cbr != NULL) && cbl->numDeleted; )
+ : {
+ : if (cbr->deleted)
+ : {
+ : if (pcbr)
+ : {
+ : cbr = cbr->next;
+ : xfree(pcbr->next);
+ : pcbr->next = cbr;
+ : } else
+ : {
+ : cbr = cbr->next;
+ : xfree(cbl->list);
+ : cbl->list = cbr;
+ : }
+ : cbl->numDeleted--;
+ : }
+ : else /* this one wasn't deleted */
+ : {
+ : pcbr = cbr;
+ : cbr = cbr->next;
+ : }
+ : }
+ : }
+ :}
+ :
+ :static void
+ :_DeleteCallbackList(
+ : CallbackListPtr *pcbl)
+ :{
+ : CallbackListPtr cbl = *pcbl;
+ : CallbackPtr cbr, nextcbr;
+ : int i;
+ :
+ : if (cbl->inCallback)
+ : {
+ : cbl->deleted = TRUE;
+ : return;
+ : }
+ :
+ : for (i = 0; i < numCallbackListsToCleanup; i++)
+ : {
+ : if ((listsToCleanup[i] = pcbl) != 0)
+ : {
+ : listsToCleanup[i] = NULL;
+ : break;
+ : }
+ : }
+ :
+ : for (cbr = cbl->list; cbr != NULL; cbr = nextcbr)
+ : {
+ : nextcbr = cbr->next;
+ : xfree(cbr);
+ : }
+ : xfree(cbl);
+ : *pcbl = NULL;
+ :}
+ :
+ :static CallbackFuncsRec default_cbfuncs =
+ :{
+ : _AddCallback,
+ : _DeleteCallback,
+ : _CallCallbacks,
+ : _DeleteCallbackList
+ :};
+ :
+ :static Bool
+ :CreateCallbackList(CallbackListPtr *pcbl, CallbackFuncsPtr cbfuncs)
+ :{
+ : CallbackListPtr cbl;
+ : int i;
+ :
+ : if (!pcbl) return FALSE;
+ : cbl = (CallbackListPtr) xalloc(sizeof(CallbackListRec));
+ : if (!cbl) return FALSE;
+ : cbl->funcs = cbfuncs ? *cbfuncs : default_cbfuncs;
+ : cbl->inCallback = 0;
+ : cbl->deleted = FALSE;
+ : cbl->numDeleted = 0;
+ : cbl->list = NULL;
+ : *pcbl = cbl;
+ :
+ : for (i = 0; i < numCallbackListsToCleanup; i++)
+ : {
+ : if (!listsToCleanup[i])
+ : {
+ : listsToCleanup[i] = pcbl;
+ : return TRUE;
+ : }
+ : }
+ :
+ : listsToCleanup = (CallbackListPtr **)xnfrealloc(listsToCleanup,
+ : sizeof(CallbackListPtr *) * (numCallbackListsToCleanup+1));
+ : listsToCleanup[numCallbackListsToCleanup] = pcbl;
+ : numCallbackListsToCleanup++;
+ : return TRUE;
+ :}
+ :
+ :/* ===== Public Procedures ===== */
+ :
+ :_X_EXPORT Bool
+ :AddCallback(CallbackListPtr *pcbl, CallbackProcPtr callback, pointer data)
+ :{
+ : if (!pcbl) return FALSE;
+ : if (!*pcbl)
+ : { /* list hasn't been created yet; go create it */
+ : if (!CreateCallbackList(pcbl, (CallbackFuncsPtr)NULL))
+ : return FALSE;
+ : }
+ : return ((*(*pcbl)->funcs.AddCallback) (pcbl, callback, data));
+ :}
+ :
+ :_X_EXPORT Bool
+ :DeleteCallback(CallbackListPtr *pcbl, CallbackProcPtr callback, pointer data)
+ :{
+ : if (!pcbl || !*pcbl) return FALSE;
+ : return ((*(*pcbl)->funcs.DeleteCallback) (pcbl, callback, data));
+ :}
+ :
+ :void
+ :CallCallbacks(CallbackListPtr *pcbl, pointer call_data)
+ 6 0.0065 :{ /* CallCallbacks total: 27 0.0294 */
+ 10 0.0109 : if (!pcbl || !*pcbl) return;
+ 5 0.0054 : (*(*pcbl)->funcs.CallCallbacks) (pcbl, call_data);
+ 6 0.0065 :}
+ :
+ :void
+ :DeleteCallbackList(CallbackListPtr *pcbl)
+ :{
+ : if (!pcbl || !*pcbl) return;
+ : (*(*pcbl)->funcs.DeleteCallbackList) (pcbl);
+ :}
+ :
+ :void
+ :InitCallbackManager(void)
+ :{
+ : int i;
+ :
+ : for (i = 0; i < numCallbackListsToCleanup; i++)
+ : {
+ : DeleteCallbackList(listsToCleanup[i]);
+ : }
+ : if (listsToCleanup) xfree(listsToCleanup);
+ :
+ : numCallbackListsToCleanup = 0;
+ : listsToCleanup = NULL;
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/render/render.c"
+ *
+ * 81 0.0882
+ */
+
+
+ :/*
+ : *
+ : * Copyright © 2000 SuSE, Inc.
+ : *
+ : * 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 SuSE not be used in advertising or
+ : * publicity pertaining to distribution of the software without specific,
+ : * written prior permission. SuSE makes no representations about the
+ : * suitability of this software for any purpose. It is provided "as is"
+ : * without express or implied warranty.
+ : *
+ : * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
+ : * 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.
+ : *
+ : * Author: Keith Packard, SuSE, Inc.
+ : */
+ :
+ :#define NEED_REPLIES
+ :#define NEED_EVENTS
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <X11/X.h>
+ :#include <X11/Xproto.h>
+ :#include "misc.h"
+ :#include "os.h"
+ :#include "dixstruct.h"
+ :#include "resource.h"
+ :#include "scrnintstr.h"
+ :#include "windowstr.h"
+ :#include "pixmapstr.h"
+ :#include "colormapst.h"
+ :#include "extnsionst.h"
+ :#include "servermd.h"
+ :#include <X11/extensions/render.h>
+ :#include <X11/extensions/renderproto.h>
+ :#include "picturestr.h"
+ :#include "glyphstr.h"
+ :#include <X11/Xfuncproto.h>
+ :#include "cursorstr.h"
+ :
+ :#if HAVE_STDINT_H
+ :#include <stdint.h>
+ :#elif !defined(UINT32_MAX)
+ :#define UINT32_MAX 0xffffffffU
+ :#endif
+ :
+ :static int ProcRenderQueryVersion (ClientPtr pClient);
+ :static int ProcRenderQueryPictFormats (ClientPtr pClient);
+ :static int ProcRenderQueryPictIndexValues (ClientPtr pClient);
+ :static int ProcRenderQueryDithers (ClientPtr pClient);
+ :static int ProcRenderCreatePicture (ClientPtr pClient);
+ :static int ProcRenderChangePicture (ClientPtr pClient);
+ :static int ProcRenderSetPictureClipRectangles (ClientPtr pClient);
+ :static int ProcRenderFreePicture (ClientPtr pClient);
+ :static int ProcRenderComposite (ClientPtr pClient);
+ :static int ProcRenderScale (ClientPtr pClient);
+ :static int ProcRenderTrapezoids (ClientPtr pClient);
+ :static int ProcRenderTriangles (ClientPtr pClient);
+ :static int ProcRenderTriStrip (ClientPtr pClient);
+ :static int ProcRenderTriFan (ClientPtr pClient);
+ :static int ProcRenderColorTrapezoids (ClientPtr pClient);
+ :static int ProcRenderColorTriangles (ClientPtr pClient);
+ :static int ProcRenderTransform (ClientPtr pClient);
+ :static int ProcRenderCreateGlyphSet (ClientPtr pClient);
+ :static int ProcRenderReferenceGlyphSet (ClientPtr pClient);
+ :static int ProcRenderFreeGlyphSet (ClientPtr pClient);
+ :static int ProcRenderAddGlyphs (ClientPtr pClient);
+ :static int ProcRenderAddGlyphsFromPicture (ClientPtr pClient);
+ :static int ProcRenderFreeGlyphs (ClientPtr pClient);
+ :static int ProcRenderCompositeGlyphs (ClientPtr pClient);
+ :static int ProcRenderFillRectangles (ClientPtr pClient);
+ :static int ProcRenderCreateCursor (ClientPtr pClient);
+ :static int ProcRenderSetPictureTransform (ClientPtr pClient);
+ :static int ProcRenderQueryFilters (ClientPtr pClient);
+ :static int ProcRenderSetPictureFilter (ClientPtr pClient);
+ :static int ProcRenderCreateAnimCursor (ClientPtr pClient);
+ :static int ProcRenderAddTraps (ClientPtr pClient);
+ :static int ProcRenderCreateSolidFill (ClientPtr pClient);
+ :static int ProcRenderCreateLinearGradient (ClientPtr pClient);
+ :static int ProcRenderCreateRadialGradient (ClientPtr pClient);
+ :static int ProcRenderCreateConicalGradient (ClientPtr pClient);
+ :
+ :static int ProcRenderDispatch (ClientPtr pClient);
+ :
+ :static int SProcRenderQueryVersion (ClientPtr pClient);
+ :static int SProcRenderQueryPictFormats (ClientPtr pClient);
+ :static int SProcRenderQueryPictIndexValues (ClientPtr pClient);
+ :static int SProcRenderQueryDithers (ClientPtr pClient);
+ :static int SProcRenderCreatePicture (ClientPtr pClient);
+ :static int SProcRenderChangePicture (ClientPtr pClient);
+ :static int SProcRenderSetPictureClipRectangles (ClientPtr pClient);
+ :static int SProcRenderFreePicture (ClientPtr pClient);
+ :static int SProcRenderComposite (ClientPtr pClient);
+ :static int SProcRenderScale (ClientPtr pClient);
+ :static int SProcRenderTrapezoids (ClientPtr pClient);
+ :static int SProcRenderTriangles (ClientPtr pClient);
+ :static int SProcRenderTriStrip (ClientPtr pClient);
+ :static int SProcRenderTriFan (ClientPtr pClient);
+ :static int SProcRenderColorTrapezoids (ClientPtr pClient);
+ :static int SProcRenderColorTriangles (ClientPtr pClient);
+ :static int SProcRenderTransform (ClientPtr pClient);
+ :static int SProcRenderCreateGlyphSet (ClientPtr pClient);
+ :static int SProcRenderReferenceGlyphSet (ClientPtr pClient);
+ :static int SProcRenderFreeGlyphSet (ClientPtr pClient);
+ :static int SProcRenderAddGlyphs (ClientPtr pClient);
+ :static int SProcRenderAddGlyphsFromPicture (ClientPtr pClient);
+ :static int SProcRenderFreeGlyphs (ClientPtr pClient);
+ :static int SProcRenderCompositeGlyphs (ClientPtr pClient);
+ :static int SProcRenderFillRectangles (ClientPtr pClient);
+ :static int SProcRenderCreateCursor (ClientPtr pClient);
+ :static int SProcRenderSetPictureTransform (ClientPtr pClient);
+ :static int SProcRenderQueryFilters (ClientPtr pClient);
+ :static int SProcRenderSetPictureFilter (ClientPtr pClient);
+ :static int SProcRenderCreateAnimCursor (ClientPtr pClient);
+ :static int SProcRenderAddTraps (ClientPtr pClient);
+ :static int SProcRenderCreateSolidFill (ClientPtr pClient);
+ :static int SProcRenderCreateLinearGradient (ClientPtr pClient);
+ :static int SProcRenderCreateRadialGradient (ClientPtr pClient);
+ :static int SProcRenderCreateConicalGradient (ClientPtr pClient);
+ :
+ :static int SProcRenderDispatch (ClientPtr pClient);
+ :
+ :int (*ProcRenderVector[RenderNumberRequests])(ClientPtr) = {
+ : ProcRenderQueryVersion,
+ : ProcRenderQueryPictFormats,
+ : ProcRenderQueryPictIndexValues,
+ : ProcRenderQueryDithers,
+ : ProcRenderCreatePicture,
+ : ProcRenderChangePicture,
+ : ProcRenderSetPictureClipRectangles,
+ : ProcRenderFreePicture,
+ : ProcRenderComposite,
+ : ProcRenderScale,
+ : ProcRenderTrapezoids,
+ : ProcRenderTriangles,
+ : ProcRenderTriStrip,
+ : ProcRenderTriFan,
+ : ProcRenderColorTrapezoids,
+ : ProcRenderColorTriangles,
+ : ProcRenderTransform,
+ : ProcRenderCreateGlyphSet,
+ : ProcRenderReferenceGlyphSet,
+ : ProcRenderFreeGlyphSet,
+ : ProcRenderAddGlyphs,
+ : ProcRenderAddGlyphsFromPicture,
+ : ProcRenderFreeGlyphs,
+ : ProcRenderCompositeGlyphs,
+ : ProcRenderCompositeGlyphs,
+ : ProcRenderCompositeGlyphs,
+ : ProcRenderFillRectangles,
+ : ProcRenderCreateCursor,
+ : ProcRenderSetPictureTransform,
+ : ProcRenderQueryFilters,
+ : ProcRenderSetPictureFilter,
+ : ProcRenderCreateAnimCursor,
+ : ProcRenderAddTraps,
+ : ProcRenderCreateSolidFill,
+ : ProcRenderCreateLinearGradient,
+ : ProcRenderCreateRadialGradient,
+ : ProcRenderCreateConicalGradient
+ :};
+ :
+ :int (*SProcRenderVector[RenderNumberRequests])(ClientPtr) = {
+ : SProcRenderQueryVersion,
+ : SProcRenderQueryPictFormats,
+ : SProcRenderQueryPictIndexValues,
+ : SProcRenderQueryDithers,
+ : SProcRenderCreatePicture,
+ : SProcRenderChangePicture,
+ : SProcRenderSetPictureClipRectangles,
+ : SProcRenderFreePicture,
+ : SProcRenderComposite,
+ : SProcRenderScale,
+ : SProcRenderTrapezoids,
+ : SProcRenderTriangles,
+ : SProcRenderTriStrip,
+ : SProcRenderTriFan,
+ : SProcRenderColorTrapezoids,
+ : SProcRenderColorTriangles,
+ : SProcRenderTransform,
+ : SProcRenderCreateGlyphSet,
+ : SProcRenderReferenceGlyphSet,
+ : SProcRenderFreeGlyphSet,
+ : SProcRenderAddGlyphs,
+ : SProcRenderAddGlyphsFromPicture,
+ : SProcRenderFreeGlyphs,
+ : SProcRenderCompositeGlyphs,
+ : SProcRenderCompositeGlyphs,
+ : SProcRenderCompositeGlyphs,
+ : SProcRenderFillRectangles,
+ : SProcRenderCreateCursor,
+ : SProcRenderSetPictureTransform,
+ : SProcRenderQueryFilters,
+ : SProcRenderSetPictureFilter,
+ : SProcRenderCreateAnimCursor,
+ : SProcRenderAddTraps,
+ : SProcRenderCreateSolidFill,
+ : SProcRenderCreateLinearGradient,
+ : SProcRenderCreateRadialGradient,
+ : SProcRenderCreateConicalGradient
+ :};
+ :
+ :static void
+ :RenderResetProc (ExtensionEntry *extEntry);
+ :
+ :#if 0
+ :static CARD8 RenderReqCode;
+ :#endif
+ :int RenderErrBase;
+ :int RenderClientPrivateIndex;
+ :
+ :typedef struct _RenderClient {
+ : int major_version;
+ : int minor_version;
+ :} RenderClientRec, *RenderClientPtr;
+ :
+ :#define GetRenderClient(pClient) ((RenderClientPtr) (pClient)->devPrivates[RenderClientPrivateIndex].ptr)
+ :
+ :static void
+ :RenderClientCallback (CallbackListPtr *list,
+ : pointer closure,
+ : pointer data)
+ :{
+ : NewClientInfoRec *clientinfo = (NewClientInfoRec *) data;
+ : ClientPtr pClient = clientinfo->client;
+ : RenderClientPtr pRenderClient = GetRenderClient (pClient);
+ :
+ : pRenderClient->major_version = 0;
+ : pRenderClient->minor_version = 0;
+ :}
+ :
+ :void
+ :RenderExtensionInit (void)
+ :{
+ : ExtensionEntry *extEntry;
+ :
+ : if (!PictureType)
+ : return;
+ : if (!PictureFinishInit ())
+ : return;
+ : RenderClientPrivateIndex = AllocateClientPrivateIndex ();
+ : if (!AllocateClientPrivate (RenderClientPrivateIndex,
+ : sizeof (RenderClientRec)))
+ : return;
+ : if (!AddCallback (&ClientStateCallback, RenderClientCallback, 0))
+ : return;
+ :
+ : extEntry = AddExtension (RENDER_NAME, 0, RenderNumberErrors,
+ : ProcRenderDispatch, SProcRenderDispatch,
+ : RenderResetProc, StandardMinorOpcode);
+ : if (!extEntry)
+ : return;
+ :#if 0
+ : RenderReqCode = (CARD8) extEntry->base;
+ :#endif
+ : RenderErrBase = extEntry->errorBase;
+ :}
+ :
+ :static void
+ :RenderResetProc (ExtensionEntry *extEntry)
+ :{
+ : ResetPicturePrivateIndex();
+ : ResetGlyphSetPrivateIndex();
+ :}
+ :
+ :static int
+ :ProcRenderQueryVersion (ClientPtr client)
+ :{
+ : RenderClientPtr pRenderClient = GetRenderClient (client);
+ : xRenderQueryVersionReply rep;
+ : register int n;
+ : REQUEST(xRenderQueryVersionReq);
+ :
+ : pRenderClient->major_version = stuff->majorVersion;
+ : pRenderClient->minor_version = stuff->minorVersion;
+ :
+ : REQUEST_SIZE_MATCH(xRenderQueryVersionReq);
+ : rep.type = X_Reply;
+ : rep.length = 0;
+ : rep.sequenceNumber = client->sequence;
+ : rep.majorVersion = RENDER_MAJOR;
+ : rep.minorVersion = RENDER_MINOR;
+ : if (client->swapped) {
+ : swaps(&rep.sequenceNumber, n);
+ : swapl(&rep.length, n);
+ : swapl(&rep.majorVersion, n);
+ : swapl(&rep.minorVersion, n);
+ : }
+ : WriteToClient(client, sizeof(xRenderQueryVersionReply), (char *)&rep);
+ : return (client->noClientException);
+ :}
+ :
+ :#if 0
+ :static int
+ :VisualDepth (ScreenPtr pScreen, VisualPtr pVisual)
+ :{
+ : DepthPtr pDepth;
+ : int d, v;
+ :
+ : for (d = 0; d < pScreen->numDepths; d++)
+ : {
+ : pDepth = pScreen->allowedDepths + d;
+ : for (v = 0; v < pDepth->numVids; v++)
+ : {
+ : if (pDepth->vids[v] == pVisual->vid)
+ : return pDepth->depth;
+ : }
+ : }
+ : return 0;
+ :}
+ :#endif
+ :
+ :static VisualPtr
+ :findVisual (ScreenPtr pScreen, VisualID vid)
+ :{
+ : VisualPtr pVisual;
+ : int v;
+ :
+ : for (v = 0; v < pScreen->numVisuals; v++)
+ : {
+ : pVisual = pScreen->visuals + v;
+ : if (pVisual->vid == vid)
+ : return pVisual;
+ : }
+ : return 0;
+ :}
+ :
+ :extern char *ConnectionInfo;
+ :
+ :static int
+ :ProcRenderQueryPictFormats (ClientPtr client)
+ :{
+ : RenderClientPtr pRenderClient = GetRenderClient (client);
+ : xRenderQueryPictFormatsReply *reply;
+ : xPictScreen *pictScreen;
+ : xPictDepth *pictDepth;
+ : xPictVisual *pictVisual;
+ : xPictFormInfo *pictForm;
+ : CARD32 *pictSubpixel;
+ : ScreenPtr pScreen;
+ : VisualPtr pVisual;
+ : DepthPtr pDepth;
+ : int v, d;
+ : PictureScreenPtr ps;
+ : PictFormatPtr pFormat;
+ : int nformat;
+ : int ndepth;
+ : int nvisual;
+ : int rlength;
+ : int s;
+ : int n;
+ : int numScreens;
+ : int numSubpixel;
+ :/* REQUEST(xRenderQueryPictFormatsReq); */
+ :
+ : REQUEST_SIZE_MATCH(xRenderQueryPictFormatsReq);
+ :
+ :#ifdef PANORAMIX
+ : if (noPanoramiXExtension)
+ : numScreens = screenInfo.numScreens;
+ : else
+ : numScreens = ((xConnSetup *)ConnectionInfo)->numRoots;
+ :#else
+ : numScreens = screenInfo.numScreens;
+ :#endif
+ : ndepth = nformat = nvisual = 0;
+ : for (s = 0; s < numScreens; s++)
+ : {
+ : pScreen = screenInfo.screens[s];
+ : for (d = 0; d < pScreen->numDepths; d++)
+ : {
+ : pDepth = pScreen->allowedDepths + d;
+ : ++ndepth;
+ :
+ : for (v = 0; v < pDepth->numVids; v++)
+ : {
+ : pVisual = findVisual (pScreen, pDepth->vids[v]);
+ : if (pVisual && PictureMatchVisual (pScreen, pDepth->depth, pVisual))
+ : ++nvisual;
+ : }
+ : }
+ : ps = GetPictureScreenIfSet(pScreen);
+ : if (ps)
+ : nformat += ps->nformats;
+ : }
+ : if (pRenderClient->major_version == 0 && pRenderClient->minor_version < 6)
+ : numSubpixel = 0;
+ : else
+ : numSubpixel = numScreens;
+ :
+ : rlength = (sizeof (xRenderQueryPictFormatsReply) +
+ : nformat * sizeof (xPictFormInfo) +
+ : numScreens * sizeof (xPictScreen) +
+ : ndepth * sizeof (xPictDepth) +
+ : nvisual * sizeof (xPictVisual) +
+ : numSubpixel * sizeof (CARD32));
+ : reply = (xRenderQueryPictFormatsReply *) xalloc (rlength);
+ : if (!reply)
+ : return BadAlloc;
+ : reply->type = X_Reply;
+ : reply->sequenceNumber = client->sequence;
+ : reply->length = (rlength - sizeof(xGenericReply)) >> 2;
+ : reply->numFormats = nformat;
+ : reply->numScreens = numScreens;
+ : reply->numDepths = ndepth;
+ : reply->numVisuals = nvisual;
+ : reply->numSubpixel = numSubpixel;
+ :
+ : pictForm = (xPictFormInfo *) (reply + 1);
+ :
+ : for (s = 0; s < numScreens; s++)
+ : {
+ : pScreen = screenInfo.screens[s];
+ : ps = GetPictureScreenIfSet(pScreen);
+ : if (ps)
+ : {
+ : for (nformat = 0, pFormat = ps->formats;
+ : nformat < ps->nformats;
+ : nformat++, pFormat++)
+ : {
+ : pictForm->id = pFormat->id;
+ : pictForm->type = pFormat->type;
+ : pictForm->depth = pFormat->depth;
+ : pictForm->direct.red = pFormat->direct.red;
+ : pictForm->direct.redMask = pFormat->direct.redMask;
+ : pictForm->direct.green = pFormat->direct.green;
+ : pictForm->direct.greenMask = pFormat->direct.greenMask;
+ : pictForm->direct.blue = pFormat->direct.blue;
+ : pictForm->direct.blueMask = pFormat->direct.blueMask;
+ : pictForm->direct.alpha = pFormat->direct.alpha;
+ : pictForm->direct.alphaMask = pFormat->direct.alphaMask;
+ : if (pFormat->type == PictTypeIndexed && pFormat->index.pColormap)
+ : pictForm->colormap = pFormat->index.pColormap->mid;
+ : else
+ : pictForm->colormap = None;
+ : if (client->swapped)
+ : {
+ : swapl (&pictForm->id, n);
+ : swaps (&pictForm->direct.red, n);
+ : swaps (&pictForm->direct.redMask, n);
+ : swaps (&pictForm->direct.green, n);
+ : swaps (&pictForm->direct.greenMask, n);
+ : swaps (&pictForm->direct.blue, n);
+ : swaps (&pictForm->direct.blueMask, n);
+ : swaps (&pictForm->direct.alpha, n);
+ : swaps (&pictForm->direct.alphaMask, n);
+ : swapl (&pictForm->colormap, n);
+ : }
+ : pictForm++;
+ : }
+ : }
+ : }
+ :
+ : pictScreen = (xPictScreen *) pictForm;
+ : for (s = 0; s < numScreens; s++)
+ : {
+ : pScreen = screenInfo.screens[s];
+ : pictDepth = (xPictDepth *) (pictScreen + 1);
+ : ndepth = 0;
+ : for (d = 0; d < pScreen->numDepths; d++)
+ : {
+ : pictVisual = (xPictVisual *) (pictDepth + 1);
+ : pDepth = pScreen->allowedDepths + d;
+ :
+ : nvisual = 0;
+ : for (v = 0; v < pDepth->numVids; v++)
+ : {
+ : pVisual = findVisual (pScreen, pDepth->vids[v]);
+ : if (pVisual && (pFormat = PictureMatchVisual (pScreen,
+ : pDepth->depth,
+ : pVisual)))
+ : {
+ : pictVisual->visual = pVisual->vid;
+ : pictVisual->format = pFormat->id;
+ : if (client->swapped)
+ : {
+ : swapl (&pictVisual->visual, n);
+ : swapl (&pictVisual->format, n);
+ : }
+ : pictVisual++;
+ : nvisual++;
+ : }
+ : }
+ : pictDepth->depth = pDepth->depth;
+ : pictDepth->nPictVisuals = nvisual;
+ : if (client->swapped)
+ : {
+ : swaps (&pictDepth->nPictVisuals, n);
+ : }
+ : ndepth++;
+ : pictDepth = (xPictDepth *) pictVisual;
+ : }
+ : pictScreen->nDepth = ndepth;
+ : ps = GetPictureScreenIfSet(pScreen);
+ : if (ps)
+ : pictScreen->fallback = ps->fallback->id;
+ : else
+ : pictScreen->fallback = 0;
+ : if (client->swapped)
+ : {
+ : swapl (&pictScreen->nDepth, n);
+ : swapl (&pictScreen->fallback, n);
+ : }
+ : pictScreen = (xPictScreen *) pictDepth;
+ : }
+ : pictSubpixel = (CARD32 *) pictScreen;
+ :
+ : for (s = 0; s < numSubpixel; s++)
+ : {
+ : pScreen = screenInfo.screens[s];
+ : ps = GetPictureScreenIfSet(pScreen);
+ : if (ps)
+ : *pictSubpixel = ps->subpixel;
+ : else
+ : *pictSubpixel = SubPixelUnknown;
+ : if (client->swapped)
+ : {
+ : swapl (pictSubpixel, n);
+ : }
+ : ++pictSubpixel;
+ : }
+ :
+ : if (client->swapped)
+ : {
+ : swaps (&reply->sequenceNumber, n);
+ : swapl (&reply->length, n);
+ : swapl (&reply->numFormats, n);
+ : swapl (&reply->numScreens, n);
+ : swapl (&reply->numDepths, n);
+ : swapl (&reply->numVisuals, n);
+ : swapl (&reply->numSubpixel, n);
+ : }
+ : WriteToClient(client, rlength, (char *) reply);
+ : xfree (reply);
+ : return client->noClientException;
+ :}
+ :
+ :static int
+ :ProcRenderQueryPictIndexValues (ClientPtr client)
+ :{
+ : PictFormatPtr pFormat;
+ : int num;
+ : int rlength;
+ : int i, n;
+ : REQUEST(xRenderQueryPictIndexValuesReq);
+ : xRenderQueryPictIndexValuesReply *reply;
+ : xIndexValue *values;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderQueryPictIndexValuesReq);
+ :
+ : pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
+ : stuff->format,
+ : PictFormatType,
+ : DixReadAccess);
+ :
+ : if (!pFormat)
+ : {
+ : client->errorValue = stuff->format;
+ : return RenderErrBase + BadPictFormat;
+ : }
+ : if (pFormat->type != PictTypeIndexed)
+ : {
+ : client->errorValue = stuff->format;
+ : return BadMatch;
+ : }
+ : num = pFormat->index.nvalues;
+ : rlength = (sizeof (xRenderQueryPictIndexValuesReply) +
+ : num * sizeof(xIndexValue));
+ : reply = (xRenderQueryPictIndexValuesReply *) xalloc (rlength);
+ : if (!reply)
+ : return BadAlloc;
+ :
+ : reply->type = X_Reply;
+ : reply->sequenceNumber = client->sequence;
+ : reply->length = (rlength - sizeof(xGenericReply)) >> 2;
+ : reply->numIndexValues = num;
+ :
+ : values = (xIndexValue *) (reply + 1);
+ :
+ : memcpy (reply + 1, pFormat->index.pValues, num * sizeof (xIndexValue));
+ :
+ : if (client->swapped)
+ : {
+ : for (i = 0; i < num; i++)
+ : {
+ : swapl (&values[i].pixel, n);
+ : swaps (&values[i].red, n);
+ : swaps (&values[i].green, n);
+ : swaps (&values[i].blue, n);
+ : swaps (&values[i].alpha, n);
+ : }
+ : swaps (&reply->sequenceNumber, n);
+ : swapl (&reply->length, n);
+ : swapl (&reply->numIndexValues, n);
+ : }
+ :
+ : WriteToClient(client, rlength, (char *) reply);
+ : xfree(reply);
+ : return (client->noClientException);
+ :}
+ :
+ :static int
+ :ProcRenderQueryDithers (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :ProcRenderCreatePicture (ClientPtr client)
+ 6 0.0065 :{ /* ProcRenderCreatePicture total: 14 0.0153 */
+ : PicturePtr pPicture;
+ : DrawablePtr pDrawable;
+ : PictFormatPtr pFormat;
+ : int len, error, rc;
+ : REQUEST(xRenderCreatePictureReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderCreatePictureReq);
+ :
+ 1 0.0011 : LEGAL_NEW_RESOURCE(stuff->pid, client);
+ 2 0.0022 : rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
+ : DixWriteAccess);
+ : if (rc != Success)
+ : return rc;
+ :
+ 1 0.0011 : pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
+ : stuff->format,
+ : PictFormatType,
+ : DixReadAccess);
+ : if (!pFormat)
+ : {
+ : client->errorValue = stuff->format;
+ : return RenderErrBase + BadPictFormat;
+ : }
+ : if (pFormat->depth != pDrawable->depth)
+ : return BadMatch;
+ : len = client->req_len - (sizeof(xRenderCreatePictureReq) >> 2);
+ : if (Ones(stuff->mask) != len)
+ : return BadLength;
+ :
+ : pPicture = CreatePicture (stuff->pid,
+ : pDrawable,
+ : pFormat,
+ : stuff->mask,
+ : (XID *) (stuff + 1),
+ : client,
+ : &error);
+ : if (!pPicture)
+ : return error;
+ 4 0.0044 : if (!AddResource (stuff->pid, PictureType, (pointer)pPicture))
+ : return BadAlloc;
+ : return Success;
+ :}
+ :
+ :static int
+ :ProcRenderChangePicture (ClientPtr client)
+ 6 0.0065 :{ /* ProcRenderChangePicture total: 7 0.0076 */
+ : PicturePtr pPicture;
+ : REQUEST(xRenderChangePictureReq);
+ : int len;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderChangePictureReq);
+ 1 0.0011 : VERIFY_PICTURE (pPicture, stuff->picture, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : len = client->req_len - (sizeof(xRenderChangePictureReq) >> 2);
+ : if (Ones(stuff->mask) != len)
+ : return BadLength;
+ :
+ : return ChangePicture (pPicture, stuff->mask, (XID *) (stuff + 1),
+ : (DevUnion *) 0, client);
+ :}
+ :
+ :static int
+ :ProcRenderSetPictureClipRectangles (ClientPtr client)
+ 1 0.0011 :{ /* ProcRenderSetPictureClipRectangles total: 1 0.0011 */
+ : REQUEST(xRenderSetPictureClipRectanglesReq);
+ : PicturePtr pPicture;
+ : int nr;
+ : int result;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderSetPictureClipRectanglesReq);
+ : VERIFY_PICTURE (pPicture, stuff->picture, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : if (!pPicture->pDrawable)
+ : return BadDrawable;
+ :
+ : nr = (client->req_len << 2) - sizeof(xRenderChangePictureReq);
+ : if (nr & 4)
+ : return BadLength;
+ : nr >>= 3;
+ : result = SetPictureClipRects (pPicture,
+ : stuff->xOrigin, stuff->yOrigin,
+ : nr, (xRectangle *) &stuff[1]);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(result);
+ :}
+ :
+ :static int
+ :ProcRenderFreePicture (ClientPtr client)
+ 1 0.0011 :{ /* ProcRenderFreePicture total: 2 0.0022 */
+ : PicturePtr pPicture;
+ : REQUEST(xRenderFreePictureReq);
+ :
+ 1 0.0011 : REQUEST_SIZE_MATCH(xRenderFreePictureReq);
+ :
+ : VERIFY_PICTURE (pPicture, stuff->picture, client, DixDestroyAccess,
+ : RenderErrBase + BadPicture);
+ : FreeResource (stuff->picture, RT_NONE);
+ : return(client->noClientException);
+ :}
+ :
+ :static Bool
+ :PictOpValid (CARD8 op)
+ :{
+ : if (/*PictOpMinimum <= op && */ op <= PictOpMaximum)
+ : return TRUE;
+ : if (PictOpDisjointMinimum <= op && op <= PictOpDisjointMaximum)
+ : return TRUE;
+ : if (PictOpConjointMinimum <= op && op <= PictOpConjointMaximum)
+ : return TRUE;
+ : return FALSE;
+ :}
+ :
+ :static int
+ :ProcRenderComposite (ClientPtr client)
+ 1 0.0011 :{ /* ProcRenderComposite total: 1 0.0011 */
+ : PicturePtr pSrc, pMask, pDst;
+ : REQUEST(xRenderCompositeReq);
+ :
+ : REQUEST_SIZE_MATCH(xRenderCompositeReq);
+ : if (!PictOpValid (stuff->op))
+ : {
+ : client->errorValue = stuff->op;
+ : return BadValue;
+ : }
+ : VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : if (!pDst->pDrawable)
+ : return BadDrawable;
+ : VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_ALPHA (pMask, stuff->mask, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : if ((pSrc->pDrawable && pSrc->pDrawable->pScreen != pDst->pDrawable->pScreen) ||
+ : (pMask && pMask->pDrawable && pDst->pDrawable->pScreen != pMask->pDrawable->pScreen))
+ : return BadMatch;
+ : CompositePicture (stuff->op,
+ : pSrc,
+ : pMask,
+ : pDst,
+ : stuff->xSrc,
+ : stuff->ySrc,
+ : stuff->xMask,
+ : stuff->yMask,
+ : stuff->xDst,
+ : stuff->yDst,
+ : stuff->width,
+ : stuff->height);
+ : return Success;
+ :}
+ :
+ :static int
+ :ProcRenderScale (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :ProcRenderTrapezoids (ClientPtr client)
+ :{
+ : int ntraps;
+ : PicturePtr pSrc, pDst;
+ : PictFormatPtr pFormat;
+ : REQUEST(xRenderTrapezoidsReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderTrapezoidsReq);
+ : if (!PictOpValid (stuff->op))
+ : {
+ : client->errorValue = stuff->op;
+ : return BadValue;
+ : }
+ : VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : if (!pDst->pDrawable)
+ : return BadDrawable;
+ : if (pSrc->pDrawable && pSrc->pDrawable->pScreen != pDst->pDrawable->pScreen)
+ : return BadMatch;
+ : if (stuff->maskFormat)
+ : {
+ : pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
+ : stuff->maskFormat,
+ : PictFormatType,
+ : DixReadAccess);
+ : if (!pFormat)
+ : {
+ : client->errorValue = stuff->maskFormat;
+ : return RenderErrBase + BadPictFormat;
+ : }
+ : }
+ : else
+ : pFormat = 0;
+ : ntraps = (client->req_len << 2) - sizeof (xRenderTrapezoidsReq);
+ : if (ntraps % sizeof (xTrapezoid))
+ : return BadLength;
+ : ntraps /= sizeof (xTrapezoid);
+ : if (ntraps)
+ : CompositeTrapezoids (stuff->op, pSrc, pDst, pFormat,
+ : stuff->xSrc, stuff->ySrc,
+ : ntraps, (xTrapezoid *) &stuff[1]);
+ : return client->noClientException;
+ :}
+ :
+ :static int
+ :ProcRenderTriangles (ClientPtr client)
+ :{
+ : int ntris;
+ : PicturePtr pSrc, pDst;
+ : PictFormatPtr pFormat;
+ : REQUEST(xRenderTrianglesReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderTrianglesReq);
+ : if (!PictOpValid (stuff->op))
+ : {
+ : client->errorValue = stuff->op;
+ : return BadValue;
+ : }
+ : VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : if (!pDst->pDrawable)
+ : return BadDrawable;
+ : if (pSrc->pDrawable && pSrc->pDrawable->pScreen != pDst->pDrawable->pScreen)
+ : return BadMatch;
+ : if (stuff->maskFormat)
+ : {
+ : pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
+ : stuff->maskFormat,
+ : PictFormatType,
+ : DixReadAccess);
+ : if (!pFormat)
+ : {
+ : client->errorValue = stuff->maskFormat;
+ : return RenderErrBase + BadPictFormat;
+ : }
+ : }
+ : else
+ : pFormat = 0;
+ : ntris = (client->req_len << 2) - sizeof (xRenderTrianglesReq);
+ : if (ntris % sizeof (xTriangle))
+ : return BadLength;
+ : ntris /= sizeof (xTriangle);
+ : if (ntris)
+ : CompositeTriangles (stuff->op, pSrc, pDst, pFormat,
+ : stuff->xSrc, stuff->ySrc,
+ : ntris, (xTriangle *) &stuff[1]);
+ : return client->noClientException;
+ :}
+ :
+ :static int
+ :ProcRenderTriStrip (ClientPtr client)
+ :{
+ : int npoints;
+ : PicturePtr pSrc, pDst;
+ : PictFormatPtr pFormat;
+ : REQUEST(xRenderTrianglesReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderTrianglesReq);
+ : if (!PictOpValid (stuff->op))
+ : {
+ : client->errorValue = stuff->op;
+ : return BadValue;
+ : }
+ : VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : if (!pDst->pDrawable)
+ : return BadDrawable;
+ : if (pSrc->pDrawable && pSrc->pDrawable->pScreen != pDst->pDrawable->pScreen)
+ : return BadMatch;
+ : if (stuff->maskFormat)
+ : {
+ : pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
+ : stuff->maskFormat,
+ : PictFormatType,
+ : DixReadAccess);
+ : if (!pFormat)
+ : {
+ : client->errorValue = stuff->maskFormat;
+ : return RenderErrBase + BadPictFormat;
+ : }
+ : }
+ : else
+ : pFormat = 0;
+ : npoints = ((client->req_len << 2) - sizeof (xRenderTriStripReq));
+ : if (npoints & 4)
+ : return(BadLength);
+ : npoints >>= 3;
+ : if (npoints >= 3)
+ : CompositeTriStrip (stuff->op, pSrc, pDst, pFormat,
+ : stuff->xSrc, stuff->ySrc,
+ : npoints, (xPointFixed *) &stuff[1]);
+ : return client->noClientException;
+ :}
+ :
+ :static int
+ :ProcRenderTriFan (ClientPtr client)
+ :{
+ : int npoints;
+ : PicturePtr pSrc, pDst;
+ : PictFormatPtr pFormat;
+ : REQUEST(xRenderTrianglesReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderTrianglesReq);
+ : if (!PictOpValid (stuff->op))
+ : {
+ : client->errorValue = stuff->op;
+ : return BadValue;
+ : }
+ : VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : if (!pDst->pDrawable)
+ : return BadDrawable;
+ : if (pSrc->pDrawable && pSrc->pDrawable->pScreen != pDst->pDrawable->pScreen)
+ : return BadMatch;
+ : if (stuff->maskFormat)
+ : {
+ : pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
+ : stuff->maskFormat,
+ : PictFormatType,
+ : DixReadAccess);
+ : if (!pFormat)
+ : {
+ : client->errorValue = stuff->maskFormat;
+ : return RenderErrBase + BadPictFormat;
+ : }
+ : }
+ : else
+ : pFormat = 0;
+ : npoints = ((client->req_len << 2) - sizeof (xRenderTriStripReq));
+ : if (npoints & 4)
+ : return(BadLength);
+ : npoints >>= 3;
+ : if (npoints >= 3)
+ : CompositeTriFan (stuff->op, pSrc, pDst, pFormat,
+ : stuff->xSrc, stuff->ySrc,
+ : npoints, (xPointFixed *) &stuff[1]);
+ : return client->noClientException;
+ :}
+ :
+ :static int
+ :ProcRenderColorTrapezoids (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :ProcRenderColorTriangles (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :ProcRenderTransform (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :ProcRenderCreateGlyphSet (ClientPtr client)
+ :{
+ : GlyphSetPtr glyphSet;
+ : PictFormatPtr format;
+ : int f;
+ : REQUEST(xRenderCreateGlyphSetReq);
+ :
+ : REQUEST_SIZE_MATCH(xRenderCreateGlyphSetReq);
+ :
+ : LEGAL_NEW_RESOURCE(stuff->gsid, client);
+ : format = (PictFormatPtr) SecurityLookupIDByType (client,
+ : stuff->format,
+ : PictFormatType,
+ : DixReadAccess);
+ : if (!format)
+ : {
+ : client->errorValue = stuff->format;
+ : return RenderErrBase + BadPictFormat;
+ : }
+ : switch (format->depth) {
+ : case 1:
+ : f = GlyphFormat1;
+ : break;
+ : case 4:
+ : f = GlyphFormat4;
+ : break;
+ : case 8:
+ : f = GlyphFormat8;
+ : break;
+ : case 16:
+ : f = GlyphFormat16;
+ : break;
+ : case 32:
+ : f = GlyphFormat32;
+ : break;
+ : default:
+ : return BadMatch;
+ : }
+ : if (format->type != PictTypeDirect)
+ : return BadMatch;
+ : glyphSet = AllocateGlyphSet (f, format);
+ : if (!glyphSet)
+ : return BadAlloc;
+ : if (!AddResource (stuff->gsid, GlyphSetType, (pointer)glyphSet))
+ : return BadAlloc;
+ : return Success;
+ :}
+ :
+ :static int
+ :ProcRenderReferenceGlyphSet (ClientPtr client)
+ :{
+ : GlyphSetPtr glyphSet;
+ : REQUEST(xRenderReferenceGlyphSetReq);
+ :
+ : REQUEST_SIZE_MATCH(xRenderReferenceGlyphSetReq);
+ :
+ : LEGAL_NEW_RESOURCE(stuff->gsid, client);
+ :
+ : glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
+ : stuff->existing,
+ : GlyphSetType,
+ : DixWriteAccess);
+ : if (!glyphSet)
+ : {
+ : client->errorValue = stuff->existing;
+ : return RenderErrBase + BadGlyphSet;
+ : }
+ : glyphSet->refcnt++;
+ : if (!AddResource (stuff->gsid, GlyphSetType, (pointer)glyphSet))
+ : return BadAlloc;
+ : return client->noClientException;
+ :}
+ :
+ :#define NLOCALDELTA 64
+ :#define NLOCALGLYPH 256
+ :
+ :static int
+ :ProcRenderFreeGlyphSet (ClientPtr client)
+ :{
+ : GlyphSetPtr glyphSet;
+ : REQUEST(xRenderFreeGlyphSetReq);
+ :
+ : REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq);
+ : glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
+ : stuff->glyphset,
+ : GlyphSetType,
+ : DixDestroyAccess);
+ : if (!glyphSet)
+ : {
+ : client->errorValue = stuff->glyphset;
+ : return RenderErrBase + BadGlyphSet;
+ : }
+ : FreeResource (stuff->glyphset, RT_NONE);
+ : return client->noClientException;
+ :}
+ :
+ :typedef struct _GlyphNew {
+ : Glyph id;
+ : GlyphPtr glyph;
+ :} GlyphNewRec, *GlyphNewPtr;
+ :
+ :static int
+ :ProcRenderAddGlyphs (ClientPtr client)
+ :{
+ : GlyphSetPtr glyphSet;
+ : REQUEST(xRenderAddGlyphsReq);
+ : GlyphNewRec glyphsLocal[NLOCALGLYPH];
+ : GlyphNewPtr glyphsBase, glyphs;
+ : GlyphPtr glyph;
+ : int remain, nglyphs;
+ : CARD32 *gids;
+ : xGlyphInfo *gi;
+ : CARD8 *bits;
+ : int size;
+ : int err = BadAlloc;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderAddGlyphsReq);
+ : glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
+ : stuff->glyphset,
+ : GlyphSetType,
+ : DixWriteAccess);
+ : if (!glyphSet)
+ : {
+ : client->errorValue = stuff->glyphset;
+ : return RenderErrBase + BadGlyphSet;
+ : }
+ :
+ : nglyphs = stuff->nglyphs;
+ : if (nglyphs > UINT32_MAX / sizeof(GlyphNewRec))
+ : return BadAlloc;
+ :
+ : if (nglyphs <= NLOCALGLYPH)
+ : glyphsBase = glyphsLocal;
+ : else
+ : {
+ : glyphsBase = (GlyphNewPtr) Xalloc (nglyphs * sizeof (GlyphNewRec));
+ : if (!glyphsBase)
+ : return BadAlloc;
+ : }
+ :
+ : remain = (client->req_len << 2) - sizeof (xRenderAddGlyphsReq);
+ :
+ : glyphs = glyphsBase;
+ :
+ : gids = (CARD32 *) (stuff + 1);
+ : gi = (xGlyphInfo *) (gids + nglyphs);
+ : bits = (CARD8 *) (gi + nglyphs);
+ : remain -= (sizeof (CARD32) + sizeof (xGlyphInfo)) * nglyphs;
+ : while (remain >= 0 && nglyphs)
+ : {
+ : glyph = AllocateGlyph (gi, glyphSet->fdepth);
+ : if (!glyph)
+ : {
+ : err = BadAlloc;
+ : goto bail;
+ : }
+ :
+ : glyphs->glyph = glyph;
+ : glyphs->id = *gids;
+ :
+ : size = glyph->size - sizeof (xGlyphInfo);
+ : if (remain < size)
+ : break;
+ : memcpy ((CARD8 *) (glyph + 1), bits, size);
+ :
+ : if (size & 3)
+ : size += 4 - (size & 3);
+ : bits += size;
+ : remain -= size;
+ : gi++;
+ : gids++;
+ : glyphs++;
+ : nglyphs--;
+ : }
+ : if (nglyphs || remain)
+ : {
+ : err = BadLength;
+ : goto bail;
+ : }
+ : nglyphs = stuff->nglyphs;
+ : if (!ResizeGlyphSet (glyphSet, nglyphs))
+ : {
+ : err = BadAlloc;
+ : goto bail;
+ : }
+ : glyphs = glyphsBase;
+ : while (nglyphs--) {
+ : AddGlyph (glyphSet, glyphs->glyph, glyphs->id);
+ : glyphs++;
+ : }
+ :
+ : if (glyphsBase != glyphsLocal)
+ : Xfree (glyphsBase);
+ : return client->noClientException;
+ :bail:
+ : while (glyphs != glyphsBase)
+ : {
+ : --glyphs;
+ : xfree (glyphs->glyph);
+ : }
+ : if (glyphsBase != glyphsLocal)
+ : Xfree (glyphsBase);
+ : return err;
+ :}
+ :
+ :static int
+ :ProcRenderAddGlyphsFromPicture (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :ProcRenderFreeGlyphs (ClientPtr client)
+ :{
+ : REQUEST(xRenderFreeGlyphsReq);
+ : GlyphSetPtr glyphSet;
+ : int nglyph;
+ : CARD32 *gids;
+ : CARD32 glyph;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderFreeGlyphsReq);
+ : glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
+ : stuff->glyphset,
+ : GlyphSetType,
+ : DixWriteAccess);
+ : if (!glyphSet)
+ : {
+ : client->errorValue = stuff->glyphset;
+ : return RenderErrBase + BadGlyphSet;
+ : }
+ : nglyph = ((client->req_len << 2) - sizeof (xRenderFreeGlyphsReq)) >> 2;
+ : gids = (CARD32 *) (stuff + 1);
+ : while (nglyph-- > 0)
+ : {
+ : glyph = *gids++;
+ : if (!DeleteGlyph (glyphSet, glyph))
+ : {
+ : client->errorValue = glyph;
+ : return RenderErrBase + BadGlyph;
+ : }
+ : }
+ : return client->noClientException;
+ :}
+ :
+ :static int
+ :ProcRenderCompositeGlyphs (ClientPtr client)
+ 4 0.0044 :{ /* ProcRenderCompositeGlyphs total: 30 0.0327 */
+ : GlyphSetPtr glyphSet;
+ : GlyphSet gs;
+ : PicturePtr pSrc, pDst;
+ : PictFormatPtr pFormat;
+ : GlyphListRec listsLocal[NLOCALDELTA];
+ : GlyphListPtr lists, listsBase;
+ : GlyphPtr glyphsLocal[NLOCALGLYPH];
+ : Glyph glyph;
+ : GlyphPtr *glyphs, *glyphsBase;
+ : xGlyphElt *elt;
+ : CARD8 *buffer, *end;
+ : int nglyph;
+ : int nlist;
+ : int space;
+ : int size;
+ : int n;
+ :
+ : REQUEST(xRenderCompositeGlyphsReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderCompositeGlyphsReq);
+ :
+ : switch (stuff->renderReqType) {
+ : default: size = 1; break;
+ : case X_RenderCompositeGlyphs16: size = 2; break;
+ : case X_RenderCompositeGlyphs32: size = 4; break;
+ : }
+ :
+ : if (!PictOpValid (stuff->op))
+ : {
+ : client->errorValue = stuff->op;
+ : return BadValue;
+ : }
+ : VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : if (!pDst->pDrawable)
+ : return BadDrawable;
+ : if (pSrc->pDrawable && pSrc->pDrawable->pScreen != pDst->pDrawable->pScreen)
+ : return BadMatch;
+ : if (stuff->maskFormat)
+ : {
+ 1 0.0011 : pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
+ : stuff->maskFormat,
+ : PictFormatType,
+ : DixReadAccess);
+ : if (!pFormat)
+ : {
+ : client->errorValue = stuff->maskFormat;
+ : return RenderErrBase + BadPictFormat;
+ : }
+ : }
+ : else
+ : pFormat = 0;
+ :
+ 1 0.0011 : glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
+ : stuff->glyphset,
+ : GlyphSetType,
+ : DixReadAccess);
+ : if (!glyphSet)
+ : {
+ : client->errorValue = stuff->glyphset;
+ : return RenderErrBase + BadGlyphSet;
+ : }
+ :
+ : buffer = (CARD8 *) (stuff + 1);
+ 2 0.0022 : end = (CARD8 *) stuff + (client->req_len << 2);
+ : nglyph = 0;
+ : nlist = 0;
+ : while (buffer + sizeof (xGlyphElt) < end)
+ : {
+ : elt = (xGlyphElt *) buffer;
+ : buffer += sizeof (xGlyphElt);
+ :
+ : if (elt->len == 0xff)
+ : {
+ : buffer += 4;
+ : }
+ : else
+ : {
+ 1 0.0011 : nlist++;
+ : nglyph += elt->len;
+ : space = size * elt->len;
+ : if (space & 3)
+ : space += 4 - (space & 3);
+ : buffer += space;
+ : }
+ : }
+ : if (nglyph <= NLOCALGLYPH)
+ : glyphsBase = glyphsLocal;
+ : else
+ : {
+ : glyphsBase = (GlyphPtr *) ALLOCATE_LOCAL (nglyph * sizeof (GlyphPtr));
+ : if (!glyphsBase)
+ : return BadAlloc;
+ : }
+ : if (nlist <= NLOCALDELTA)
+ : listsBase = listsLocal;
+ : else
+ : {
+ : listsBase = (GlyphListPtr) ALLOCATE_LOCAL (nlist * sizeof (GlyphListRec));
+ : if (!listsBase)
+ : return BadAlloc;
+ : }
+ : buffer = (CARD8 *) (stuff + 1);
+ : glyphs = glyphsBase;
+ : lists = listsBase;
+ 1 0.0011 : while (buffer + sizeof (xGlyphElt) < end)
+ : {
+ : elt = (xGlyphElt *) buffer;
+ : buffer += sizeof (xGlyphElt);
+ :
+ : if (elt->len == 0xff)
+ : {
+ : if (buffer + sizeof (GlyphSet) < end)
+ : {
+ : memcpy(&gs, buffer, sizeof(GlyphSet));
+ : glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
+ : gs,
+ : GlyphSetType,
+ : DixReadAccess);
+ : if (!glyphSet)
+ : {
+ : client->errorValue = gs;
+ : if (glyphsBase != glyphsLocal)
+ : DEALLOCATE_LOCAL (glyphsBase);
+ : if (listsBase != listsLocal)
+ : DEALLOCATE_LOCAL (listsBase);
+ : return RenderErrBase + BadGlyphSet;
+ : }
+ : }
+ : buffer += 4;
+ : }
+ : else
+ : {
+ : lists->xOff = elt->deltax;
+ : lists->yOff = elt->deltay;
+ 1 0.0011 : lists->format = glyphSet->format;
+ : lists->len = 0;
+ : n = elt->len;
+ 3 0.0033 : while (n--)
+ : {
+ : if (buffer + size <= end)
+ : {
+ : switch (size) {
+ : case 1:
+ 7 0.0076 : glyph = *((CARD8 *)buffer); break;
+ : case 2:
+ : glyph = *((CARD16 *)buffer); break;
+ : case 4:
+ : default:
+ : glyph = *((CARD32 *)buffer); break;
+ : }
+ 5 0.0054 : if ((*glyphs = FindGlyph (glyphSet, glyph)))
+ : {
+ 2 0.0022 : lists->len++;
+ : glyphs++;
+ : }
+ : }
+ : buffer += size;
+ : }
+ : space = size * elt->len;
+ : if (space & 3)
+ 1 0.0011 : buffer += 4 - (space & 3);
+ : lists++;
+ : }
+ : }
+ : if (buffer > end)
+ : return BadLength;
+ :
+ 1 0.0011 : CompositeGlyphs (stuff->op,
+ : pSrc,
+ : pDst,
+ : pFormat,
+ : stuff->xSrc,
+ : stuff->ySrc,
+ : nlist,
+ : listsBase,
+ : glyphsBase);
+ :
+ : if (glyphsBase != glyphsLocal)
+ : DEALLOCATE_LOCAL (glyphsBase);
+ : if (listsBase != listsLocal)
+ : DEALLOCATE_LOCAL (listsBase);
+ :
+ : return client->noClientException;
+ :}
+ :
+ :static int
+ :ProcRenderFillRectangles (ClientPtr client)
+ 4 0.0044 :{ /* ProcRenderFillRectangles total: 10 0.0109 */
+ : PicturePtr pDst;
+ : int things;
+ : REQUEST(xRenderFillRectanglesReq);
+ :
+ : REQUEST_AT_LEAST_SIZE (xRenderFillRectanglesReq);
+ 1 0.0011 : if (!PictOpValid (stuff->op))
+ : {
+ : client->errorValue = stuff->op;
+ : return BadValue;
+ : }
+ : VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : if (!pDst->pDrawable)
+ : return BadDrawable;
+ :
+ : things = (client->req_len << 2) - sizeof(xRenderFillRectanglesReq);
+ : if (things & 4)
+ : return(BadLength);
+ : things >>= 3;
+ :
+ 2 0.0022 : CompositeRects (stuff->op,
+ : pDst,
+ : &stuff->color,
+ : things,
+ : (xRectangle *) &stuff[1]);
+ :
+ 1 0.0011 : return client->noClientException;
+ 2 0.0022 :}
+ :
+ :static void
+ :SetBit (unsigned char *line, int x, int bit)
+ :{
+ : unsigned char mask;
+ :
+ : if (screenInfo.bitmapBitOrder == LSBFirst)
+ : mask = (1 << (x & 7));
+ : else
+ : mask = (0x80 >> (x & 7));
+ : /* XXX assumes byte order is host byte order */
+ : line += (x >> 3);
+ : if (bit)
+ : *line |= mask;
+ : else
+ : *line &= ~mask;
+ :}
+ :
+ :#define DITHER_DIM 2
+ :
+ :static CARD32 orderedDither[DITHER_DIM][DITHER_DIM] = {
+ : { 1, 3, },
+ : { 4, 2, },
+ :};
+ :
+ :#define DITHER_SIZE ((sizeof orderedDither / sizeof orderedDither[0][0]) + 1)
+ :
+ :static int
+ :ProcRenderCreateCursor (ClientPtr client)
+ :{
+ : REQUEST(xRenderCreateCursorReq);
+ : PicturePtr pSrc;
+ : ScreenPtr pScreen;
+ : unsigned short width, height;
+ : CARD32 *argbbits, *argb;
+ : unsigned char *srcbits, *srcline;
+ : unsigned char *mskbits, *mskline;
+ : int stride;
+ : int x, y;
+ : int nbytes_mono;
+ : CursorMetricRec cm;
+ : CursorPtr pCursor;
+ : CARD32 twocolor[3];
+ : int ncolor;
+ :
+ : REQUEST_SIZE_MATCH (xRenderCreateCursorReq);
+ : LEGAL_NEW_RESOURCE(stuff->cid, client);
+ :
+ : VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : if (!pSrc->pDrawable)
+ : return BadDrawable;
+ : pScreen = pSrc->pDrawable->pScreen;
+ : width = pSrc->pDrawable->width;
+ : height = pSrc->pDrawable->height;
+ : if ( stuff->x > width
+ : || stuff->y > height )
+ : return (BadMatch);
+ : argbbits = xalloc (width * height * sizeof (CARD32));
+ : if (!argbbits)
+ : return (BadAlloc);
+ :
+ : stride = BitmapBytePad(width);
+ : nbytes_mono = stride*height;
+ : srcbits = (unsigned char *)xalloc(nbytes_mono);
+ : if (!srcbits)
+ : {
+ : xfree (argbbits);
+ : return (BadAlloc);
+ : }
+ : mskbits = (unsigned char *)xalloc(nbytes_mono);
+ : if (!mskbits)
+ : {
+ : xfree(argbbits);
+ : xfree(srcbits);
+ : return (BadAlloc);
+ : }
+ : bzero ((char *) mskbits, nbytes_mono);
+ : bzero ((char *) srcbits, nbytes_mono);
+ :
+ : if (pSrc->format == PICT_a8r8g8b8)
+ : {
+ : (*pScreen->GetImage) (pSrc->pDrawable,
+ : 0, 0, width, height, ZPixmap,
+ : 0xffffffff, (pointer) argbbits);
+ : }
+ : else
+ : {
+ : PixmapPtr pPixmap;
+ : PicturePtr pPicture;
+ : PictFormatPtr pFormat;
+ : int error;
+ :
+ : pFormat = PictureMatchFormat (pScreen, 32, PICT_a8r8g8b8);
+ : if (!pFormat)
+ : {
+ : xfree (argbbits);
+ : xfree (srcbits);
+ : xfree (mskbits);
+ : return (BadImplementation);
+ : }
+ : pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, 32);
+ : if (!pPixmap)
+ : {
+ : xfree (argbbits);
+ : xfree (srcbits);
+ : xfree (mskbits);
+ : return (BadAlloc);
+ : }
+ : pPicture = CreatePicture (0, &pPixmap->drawable, pFormat, 0, 0,
+ : client, &error);
+ : if (!pPicture)
+ : {
+ : xfree (argbbits);
+ : xfree (srcbits);
+ : xfree (mskbits);
+ : return error;
+ : }
+ : (*pScreen->DestroyPixmap) (pPixmap);
+ : CompositePicture (PictOpSrc,
+ : pSrc, 0, pPicture,
+ : 0, 0, 0, 0, 0, 0, width, height);
+ : (*pScreen->GetImage) (pPicture->pDrawable,
+ : 0, 0, width, height, ZPixmap,
+ : 0xffffffff, (pointer) argbbits);
+ : FreePicture (pPicture, 0);
+ : }
+ : /*
+ : * Check whether the cursor can be directly supported by
+ : * the core cursor code
+ : */
+ : ncolor = 0;
+ : argb = argbbits;
+ : for (y = 0; ncolor <= 2 && y < height; y++)
+ : {
+ : for (x = 0; ncolor <= 2 && x < width; x++)
+ : {
+ : CARD32 p = *argb++;
+ : CARD32 a = (p >> 24);
+ :
+ : if (a == 0) /* transparent */
+ : continue;
+ : if (a == 0xff) /* opaque */
+ : {
+ : int n;
+ : for (n = 0; n < ncolor; n++)
+ : if (p == twocolor[n])
+ : break;
+ : if (n == ncolor)
+ : twocolor[ncolor++] = p;
+ : }
+ : else
+ : ncolor = 3;
+ : }
+ : }
+ :
+ : /*
+ : * Convert argb image to two plane cursor
+ : */
+ : srcline = srcbits;
+ : mskline = mskbits;
+ : argb = argbbits;
+ : for (y = 0; y < height; y++)
+ : {
+ : for (x = 0; x < width; x++)
+ : {
+ : CARD32 p = *argb++;
+ :
+ : if (ncolor <= 2)
+ : {
+ : CARD32 a = ((p >> 24));
+ :
+ : SetBit (mskline, x, a != 0);
+ : SetBit (srcline, x, a != 0 && p == twocolor[0]);
+ : }
+ : else
+ : {
+ : CARD32 a = ((p >> 24) * DITHER_SIZE + 127) / 255;
+ : CARD32 i = ((CvtR8G8B8toY15(p) >> 7) * DITHER_SIZE + 127) / 255;
+ : CARD32 d = orderedDither[y&(DITHER_DIM-1)][x&(DITHER_DIM-1)];
+ : /* Set mask from dithered alpha value */
+ : SetBit(mskline, x, a > d);
+ : /* Set src from dithered intensity value */
+ : SetBit(srcline, x, a > d && i <= d);
+ : }
+ : }
+ : srcline += stride;
+ : mskline += stride;
+ : }
+ : /*
+ : * Dither to white and black if the cursor has more than two colors
+ : */
+ : if (ncolor > 2)
+ : {
+ : twocolor[0] = 0xff000000;
+ : twocolor[1] = 0xffffffff;
+ : }
+ : else
+ : {
+ : xfree (argbbits);
+ : argbbits = 0;
+ : }
+ :
+ :#define GetByte(p,s) (((p) >> (s)) & 0xff)
+ :#define GetColor(p,s) (GetByte(p,s) | (GetByte(p,s) << 8))
+ :
+ : cm.width = width;
+ : cm.height = height;
+ : cm.xhot = stuff->x;
+ : cm.yhot = stuff->y;
+ : pCursor = AllocCursorARGB (srcbits, mskbits, argbbits, &cm,
+ : GetColor(twocolor[0], 16),
+ : GetColor(twocolor[0], 8),
+ : GetColor(twocolor[0], 0),
+ : GetColor(twocolor[1], 16),
+ : GetColor(twocolor[1], 8),
+ : GetColor(twocolor[1], 0));
+ : if (pCursor && AddResource(stuff->cid, RT_CURSOR, (pointer)pCursor))
+ : return (client->noClientException);
+ : return BadAlloc;
+ :}
+ :
+ :static int
+ :ProcRenderSetPictureTransform (ClientPtr client)
+ :{ /* ProcRenderSetPictureTransform total: 2 0.0022 */
+ : REQUEST(xRenderSetPictureTransformReq);
+ : PicturePtr pPicture;
+ : int result;
+ :
+ 1 0.0011 : REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq);
+ : VERIFY_PICTURE (pPicture, stuff->picture, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : result = SetPictureTransform (pPicture, (PictTransform *) &stuff->transform);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(result);
+ 1 0.0011 :}
+ :
+ :static int
+ :ProcRenderQueryFilters (ClientPtr client)
+ :{
+ : REQUEST (xRenderQueryFiltersReq);
+ : DrawablePtr pDrawable;
+ : xRenderQueryFiltersReply *reply;
+ : int nbytesName;
+ : int nnames;
+ : ScreenPtr pScreen;
+ : PictureScreenPtr ps;
+ : int i, j, len, total_bytes, rc;
+ : INT16 *aliases;
+ : char *names;
+ :
+ : REQUEST_SIZE_MATCH(xRenderQueryFiltersReq);
+ : rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
+ : DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ :
+ : pScreen = pDrawable->pScreen;
+ : nbytesName = 0;
+ : nnames = 0;
+ : ps = GetPictureScreenIfSet(pScreen);
+ : if (ps)
+ : {
+ : for (i = 0; i < ps->nfilters; i++)
+ : nbytesName += 1 + strlen (ps->filters[i].name);
+ : for (i = 0; i < ps->nfilterAliases; i++)
+ : nbytesName += 1 + strlen (ps->filterAliases[i].alias);
+ : nnames = ps->nfilters + ps->nfilterAliases;
+ : }
+ : len = ((nnames + 1) >> 1) + ((nbytesName + 3) >> 2);
+ : total_bytes = sizeof (xRenderQueryFiltersReply) + (len << 2);
+ : reply = (xRenderQueryFiltersReply *) xalloc (total_bytes);
+ : if (!reply)
+ : return BadAlloc;
+ : aliases = (INT16 *) (reply + 1);
+ : names = (char *) (aliases + ((nnames + 1) & ~1));
+ :
+ : reply->type = X_Reply;
+ : reply->sequenceNumber = client->sequence;
+ : reply->length = len;
+ : reply->numAliases = nnames;
+ : reply->numFilters = nnames;
+ : if (ps)
+ : {
+ :
+ : /* fill in alias values */
+ : for (i = 0; i < ps->nfilters; i++)
+ : aliases[i] = FilterAliasNone;
+ : for (i = 0; i < ps->nfilterAliases; i++)
+ : {
+ : for (j = 0; j < ps->nfilters; j++)
+ : if (ps->filterAliases[i].filter_id == ps->filters[j].id)
+ : break;
+ : if (j == ps->nfilters)
+ : {
+ : for (j = 0; j < ps->nfilterAliases; j++)
+ : if (ps->filterAliases[i].filter_id ==
+ : ps->filterAliases[j].alias_id)
+ : {
+ : break;
+ : }
+ : if (j == ps->nfilterAliases)
+ : j = FilterAliasNone;
+ : else
+ : j = j + ps->nfilters;
+ : }
+ : aliases[i + ps->nfilters] = j;
+ : }
+ :
+ : /* fill in filter names */
+ : for (i = 0; i < ps->nfilters; i++)
+ : {
+ : j = strlen (ps->filters[i].name);
+ : *names++ = j;
+ : strncpy (names, ps->filters[i].name, j);
+ : names += j;
+ : }
+ :
+ : /* fill in filter alias names */
+ : for (i = 0; i < ps->nfilterAliases; i++)
+ : {
+ : j = strlen (ps->filterAliases[i].alias);
+ : *names++ = j;
+ : strncpy (names, ps->filterAliases[i].alias, j);
+ : names += j;
+ : }
+ : }
+ :
+ : if (client->swapped)
+ : {
+ : register int n;
+ :
+ : for (i = 0; i < reply->numAliases; i++)
+ : {
+ : swaps (&aliases[i], n);
+ : }
+ : swaps(&reply->sequenceNumber, n);
+ : swapl(&reply->length, n);
+ : swapl(&reply->numAliases, n);
+ : swapl(&reply->numFilters, n);
+ : }
+ : WriteToClient(client, total_bytes, (char *) reply);
+ : xfree (reply);
+ :
+ : return(client->noClientException);
+ :}
+ :
+ :static int
+ :ProcRenderSetPictureFilter (ClientPtr client)
+ :{ /* ProcRenderSetPictureFilter total: 4 0.0044 */
+ : REQUEST (xRenderSetPictureFilterReq);
+ : PicturePtr pPicture;
+ : int result;
+ : xFixed *params;
+ : int nparams;
+ : char *name;
+ :
+ 1 0.0011 : REQUEST_AT_LEAST_SIZE (xRenderSetPictureFilterReq);
+ 2 0.0022 : VERIFY_PICTURE (pPicture, stuff->picture, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : name = (char *) (stuff + 1);
+ : params = (xFixed *) (name + ((stuff->nbytes + 3) & ~3));
+ : nparams = ((xFixed *) stuff + client->req_len) - params;
+ 1 0.0011 : result = SetPictureFilter (pPicture, name, stuff->nbytes, params, nparams);
+ : return result;
+ :}
+ :
+ :static int
+ :ProcRenderCreateAnimCursor (ClientPtr client)
+ :{
+ : REQUEST(xRenderCreateAnimCursorReq);
+ : CursorPtr *cursors;
+ : CARD32 *deltas;
+ : CursorPtr pCursor;
+ : int ncursor;
+ : xAnimCursorElt *elt;
+ : int i;
+ : int ret;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderCreateAnimCursorReq);
+ : LEGAL_NEW_RESOURCE(stuff->cid, client);
+ : if (client->req_len & 1)
+ : return BadLength;
+ : ncursor = (client->req_len - (SIZEOF(xRenderCreateAnimCursorReq) >> 2)) >> 1;
+ : cursors = xalloc (ncursor * (sizeof (CursorPtr) + sizeof (CARD32)));
+ : if (!cursors)
+ : return BadAlloc;
+ : deltas = (CARD32 *) (cursors + ncursor);
+ : elt = (xAnimCursorElt *) (stuff + 1);
+ : for (i = 0; i < ncursor; i++)
+ : {
+ : cursors[i] = (CursorPtr)SecurityLookupIDByType(client, elt->cursor,
+ : RT_CURSOR, DixReadAccess);
+ : if (!cursors[i])
+ : {
+ : xfree (cursors);
+ : client->errorValue = elt->cursor;
+ : return BadCursor;
+ : }
+ : deltas[i] = elt->delay;
+ : elt++;
+ : }
+ : ret = AnimCursorCreate (cursors, deltas, ncursor, &pCursor);
+ : xfree (cursors);
+ : if (ret != Success)
+ : return ret;
+ :
+ : if (AddResource (stuff->cid, RT_CURSOR, (pointer)pCursor))
+ : return client->noClientException;
+ : return BadAlloc;
+ :}
+ :
+ :static int
+ :ProcRenderAddTraps (ClientPtr client)
+ :{
+ : int ntraps;
+ : PicturePtr pPicture;
+ : REQUEST(xRenderAddTrapsReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderAddTrapsReq);
+ : VERIFY_PICTURE (pPicture, stuff->picture, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : if (!pPicture->pDrawable)
+ : return BadDrawable;
+ : ntraps = (client->req_len << 2) - sizeof (xRenderAddTrapsReq);
+ : if (ntraps % sizeof (xTrap))
+ : return BadLength;
+ : ntraps /= sizeof (xTrap);
+ : if (ntraps)
+ : AddTraps (pPicture,
+ : stuff->xOff, stuff->yOff,
+ : ntraps, (xTrap *) &stuff[1]);
+ : return client->noClientException;
+ :}
+ :
+ :static int ProcRenderCreateSolidFill(ClientPtr client)
+ :{
+ : PicturePtr pPicture;
+ : int error = 0;
+ : REQUEST(xRenderCreateSolidFillReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderCreateSolidFillReq);
+ :
+ : LEGAL_NEW_RESOURCE(stuff->pid, client);
+ :
+ : pPicture = CreateSolidPicture(stuff->pid, &stuff->color, &error);
+ : if (!pPicture)
+ : return error;
+ : if (!AddResource (stuff->pid, PictureType, (pointer)pPicture))
+ : return BadAlloc;
+ : return Success;
+ :}
+ :
+ :static int ProcRenderCreateLinearGradient (ClientPtr client)
+ :{
+ : PicturePtr pPicture;
+ : int len;
+ : int error = 0;
+ : xFixed *stops;
+ : xRenderColor *colors;
+ : REQUEST(xRenderCreateLinearGradientReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderCreateLinearGradientReq);
+ :
+ : LEGAL_NEW_RESOURCE(stuff->pid, client);
+ :
+ : len = (client->req_len << 2) - sizeof(xRenderCreateLinearGradientReq);
+ : if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
+ : return BadLength;
+ :
+ : stops = (xFixed *)(stuff + 1);
+ : colors = (xRenderColor *)(stops + stuff->nStops);
+ :
+ : pPicture = CreateLinearGradientPicture (stuff->pid, &stuff->p1, &stuff->p2,
+ : stuff->nStops, stops, colors, &error);
+ : if (!pPicture)
+ : return error;
+ : if (!AddResource (stuff->pid, PictureType, (pointer)pPicture))
+ : return BadAlloc;
+ : return Success;
+ :}
+ :
+ :static int ProcRenderCreateRadialGradient (ClientPtr client)
+ :{
+ : PicturePtr pPicture;
+ : int len;
+ : int error = 0;
+ : xFixed *stops;
+ : xRenderColor *colors;
+ : REQUEST(xRenderCreateRadialGradientReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderCreateRadialGradientReq);
+ :
+ : LEGAL_NEW_RESOURCE(stuff->pid, client);
+ :
+ : len = (client->req_len << 2) - sizeof(xRenderCreateRadialGradientReq);
+ : if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
+ : return BadLength;
+ :
+ : stops = (xFixed *)(stuff + 1);
+ : colors = (xRenderColor *)(stops + stuff->nStops);
+ :
+ : pPicture = CreateRadialGradientPicture (stuff->pid, &stuff->inner, &stuff->outer,
+ : stuff->inner_radius, stuff->outer_radius,
+ : stuff->nStops, stops, colors, &error);
+ : if (!pPicture)
+ : return error;
+ : if (!AddResource (stuff->pid, PictureType, (pointer)pPicture))
+ : return BadAlloc;
+ : return Success;
+ :}
+ :
+ :static int ProcRenderCreateConicalGradient (ClientPtr client)
+ :{
+ : PicturePtr pPicture;
+ : int len;
+ : int error = 0;
+ : xFixed *stops;
+ : xRenderColor *colors;
+ : REQUEST(xRenderCreateConicalGradientReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderCreateConicalGradientReq);
+ :
+ : LEGAL_NEW_RESOURCE(stuff->pid, client);
+ :
+ : len = (client->req_len << 2) - sizeof(xRenderCreateConicalGradientReq);
+ : if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
+ : return BadLength;
+ :
+ : stops = (xFixed *)(stuff + 1);
+ : colors = (xRenderColor *)(stops + stuff->nStops);
+ :
+ : pPicture = CreateConicalGradientPicture (stuff->pid, &stuff->center, stuff->angle,
+ : stuff->nStops, stops, colors, &error);
+ : if (!pPicture)
+ : return error;
+ : if (!AddResource (stuff->pid, PictureType, (pointer)pPicture))
+ : return BadAlloc;
+ : return Success;
+ :}
+ :
+ :
+ :static int
+ :ProcRenderDispatch (ClientPtr client)
+ 8 0.0087 :{ /* ProcRenderDispatch total: 10 0.0109 */
+ : REQUEST(xReq);
+ :
+ 1 0.0011 : if (stuff->data < RenderNumberRequests)
+ : return (*ProcRenderVector[stuff->data]) (client);
+ : else
+ : return BadRequest;
+ 1 0.0011 :}
+ :
+ :static int
+ :SProcRenderQueryVersion (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderQueryVersionReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->majorVersion, n);
+ : swapl(&stuff->minorVersion, n);
+ : return (*ProcRenderVector[stuff->renderReqType])(client);
+ :}
+ :
+ :static int
+ :SProcRenderQueryPictFormats (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderQueryPictFormatsReq);
+ : swaps(&stuff->length, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderQueryPictIndexValues (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderQueryPictIndexValuesReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->format, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderQueryDithers (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :SProcRenderCreatePicture (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderCreatePictureReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->pid, n);
+ : swapl(&stuff->drawable, n);
+ : swapl(&stuff->format, n);
+ : swapl(&stuff->mask, n);
+ : SwapRestL(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderChangePicture (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderChangePictureReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->picture, n);
+ : swapl(&stuff->mask, n);
+ : SwapRestL(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderSetPictureClipRectangles (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderSetPictureClipRectanglesReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->picture, n);
+ : swaps(&stuff->xOrigin, n);
+ : swaps(&stuff->yOrigin, n);
+ : SwapRestS(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderFreePicture (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderFreePictureReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->picture, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderComposite (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderCompositeReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->src, n);
+ : swapl(&stuff->mask, n);
+ : swapl(&stuff->dst, n);
+ : swaps(&stuff->xSrc, n);
+ : swaps(&stuff->ySrc, n);
+ : swaps(&stuff->xMask, n);
+ : swaps(&stuff->yMask, n);
+ : swaps(&stuff->xDst, n);
+ : swaps(&stuff->yDst, n);
+ : swaps(&stuff->width, n);
+ : swaps(&stuff->height, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderScale (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderScaleReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->src, n);
+ : swapl(&stuff->dst, n);
+ : swapl(&stuff->colorScale, n);
+ : swapl(&stuff->alphaScale, n);
+ : swaps(&stuff->xSrc, n);
+ : swaps(&stuff->ySrc, n);
+ : swaps(&stuff->xDst, n);
+ : swaps(&stuff->yDst, n);
+ : swaps(&stuff->width, n);
+ : swaps(&stuff->height, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderTrapezoids (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderTrapezoidsReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderTrapezoidsReq);
+ : swaps (&stuff->length, n);
+ : swapl (&stuff->src, n);
+ : swapl (&stuff->dst, n);
+ : swapl (&stuff->maskFormat, n);
+ : swaps (&stuff->xSrc, n);
+ : swaps (&stuff->ySrc, n);
+ : SwapRestL(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderTriangles (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderTrianglesReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderTrianglesReq);
+ : swaps (&stuff->length, n);
+ : swapl (&stuff->src, n);
+ : swapl (&stuff->dst, n);
+ : swapl (&stuff->maskFormat, n);
+ : swaps (&stuff->xSrc, n);
+ : swaps (&stuff->ySrc, n);
+ : SwapRestL(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderTriStrip (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderTriStripReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderTriStripReq);
+ : swaps (&stuff->length, n);
+ : swapl (&stuff->src, n);
+ : swapl (&stuff->dst, n);
+ : swapl (&stuff->maskFormat, n);
+ : swaps (&stuff->xSrc, n);
+ : swaps (&stuff->ySrc, n);
+ : SwapRestL(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderTriFan (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderTriFanReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderTriFanReq);
+ : swaps (&stuff->length, n);
+ : swapl (&stuff->src, n);
+ : swapl (&stuff->dst, n);
+ : swapl (&stuff->maskFormat, n);
+ : swaps (&stuff->xSrc, n);
+ : swaps (&stuff->ySrc, n);
+ : SwapRestL(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderColorTrapezoids (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :SProcRenderColorTriangles (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :SProcRenderTransform (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :SProcRenderCreateGlyphSet (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderCreateGlyphSetReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->gsid, n);
+ : swapl(&stuff->format, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderReferenceGlyphSet (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderReferenceGlyphSetReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->gsid, n);
+ : swapl(&stuff->existing, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderFreeGlyphSet (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderFreeGlyphSetReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->glyphset, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderAddGlyphs (ClientPtr client)
+ :{
+ : register int n;
+ : register int i;
+ : CARD32 *gids;
+ : void *end;
+ : xGlyphInfo *gi;
+ : REQUEST(xRenderAddGlyphsReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->glyphset, n);
+ : swapl(&stuff->nglyphs, n);
+ : if (stuff->nglyphs & 0xe0000000)
+ : return BadLength;
+ : end = (CARD8 *) stuff + (client->req_len << 2);
+ : gids = (CARD32 *) (stuff + 1);
+ : gi = (xGlyphInfo *) (gids + stuff->nglyphs);
+ : if ((char *) end - (char *) (gids + stuff->nglyphs) < 0)
+ : return BadLength;
+ : if ((char *) end - (char *) (gi + stuff->nglyphs) < 0)
+ : return BadLength;
+ : for (i = 0; i < stuff->nglyphs; i++)
+ : {
+ : swapl (&gids[i], n);
+ : swaps (&gi[i].width, n);
+ : swaps (&gi[i].height, n);
+ : swaps (&gi[i].x, n);
+ : swaps (&gi[i].y, n);
+ : swaps (&gi[i].xOff, n);
+ : swaps (&gi[i].yOff, n);
+ : }
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderAddGlyphsFromPicture (ClientPtr client)
+ :{
+ : return BadImplementation;
+ :}
+ :
+ :static int
+ :SProcRenderFreeGlyphs (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderFreeGlyphsReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->glyphset, n);
+ : SwapRestL(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderCompositeGlyphs (ClientPtr client)
+ :{
+ : register int n;
+ : xGlyphElt *elt;
+ : CARD8 *buffer;
+ : CARD8 *end;
+ : int space;
+ : int i;
+ : int size;
+ :
+ : REQUEST(xRenderCompositeGlyphsReq);
+ :
+ : switch (stuff->renderReqType) {
+ : default: size = 1; break;
+ : case X_RenderCompositeGlyphs16: size = 2; break;
+ : case X_RenderCompositeGlyphs32: size = 4; break;
+ : }
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->src, n);
+ : swapl(&stuff->dst, n);
+ : swapl(&stuff->maskFormat, n);
+ : swapl(&stuff->glyphset, n);
+ : swaps(&stuff->xSrc, n);
+ : swaps(&stuff->ySrc, n);
+ : buffer = (CARD8 *) (stuff + 1);
+ : end = (CARD8 *) stuff + (client->req_len << 2);
+ : while (buffer + sizeof (xGlyphElt) < end)
+ : {
+ : elt = (xGlyphElt *) buffer;
+ : buffer += sizeof (xGlyphElt);
+ :
+ : swaps (&elt->deltax, n);
+ : swaps (&elt->deltay, n);
+ :
+ : i = elt->len;
+ : if (i == 0xff)
+ : {
+ : swapl (buffer, n);
+ : buffer += 4;
+ : }
+ : else
+ : {
+ : space = size * i;
+ : switch (size) {
+ : case 1:
+ : buffer += i;
+ : break;
+ : case 2:
+ : while (i--)
+ : {
+ : swaps (buffer, n);
+ : buffer += 2;
+ : }
+ : break;
+ : case 4:
+ : while (i--)
+ : {
+ : swapl (buffer, n);
+ : buffer += 4;
+ : }
+ : break;
+ : }
+ : if (space & 3)
+ : buffer += 4 - (space & 3);
+ : }
+ : }
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderFillRectangles (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderFillRectanglesReq);
+ :
+ : REQUEST_AT_LEAST_SIZE (xRenderFillRectanglesReq);
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->dst, n);
+ : swaps(&stuff->color.red, n);
+ : swaps(&stuff->color.green, n);
+ : swaps(&stuff->color.blue, n);
+ : swaps(&stuff->color.alpha, n);
+ : SwapRestS(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderCreateCursor (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderCreateCursorReq);
+ : REQUEST_SIZE_MATCH (xRenderCreateCursorReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->cid, n);
+ : swapl(&stuff->src, n);
+ : swaps(&stuff->x, n);
+ : swaps(&stuff->y, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderSetPictureTransform (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST(xRenderSetPictureTransformReq);
+ : REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->picture, n);
+ : swapl(&stuff->transform.matrix11, n);
+ : swapl(&stuff->transform.matrix12, n);
+ : swapl(&stuff->transform.matrix13, n);
+ : swapl(&stuff->transform.matrix21, n);
+ : swapl(&stuff->transform.matrix22, n);
+ : swapl(&stuff->transform.matrix23, n);
+ : swapl(&stuff->transform.matrix31, n);
+ : swapl(&stuff->transform.matrix32, n);
+ : swapl(&stuff->transform.matrix33, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderQueryFilters (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST (xRenderQueryFiltersReq);
+ : REQUEST_SIZE_MATCH (xRenderQueryFiltersReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->drawable, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderSetPictureFilter (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST (xRenderSetPictureFilterReq);
+ : REQUEST_AT_LEAST_SIZE (xRenderSetPictureFilterReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->picture, n);
+ : swaps(&stuff->nbytes, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderCreateAnimCursor (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST (xRenderCreateAnimCursorReq);
+ : REQUEST_AT_LEAST_SIZE (xRenderCreateAnimCursorReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->cid, n);
+ : SwapRestL(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderAddTraps (ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST (xRenderAddTrapsReq);
+ : REQUEST_AT_LEAST_SIZE (xRenderAddTrapsReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->picture, n);
+ : swaps(&stuff->xOff, n);
+ : swaps(&stuff->yOff, n);
+ : SwapRestL(stuff);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderCreateSolidFill(ClientPtr client)
+ :{
+ : register int n;
+ : REQUEST (xRenderCreateSolidFillReq);
+ : REQUEST_AT_LEAST_SIZE (xRenderCreateSolidFillReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->pid, n);
+ : swaps(&stuff->color.alpha, n);
+ : swaps(&stuff->color.red, n);
+ : swaps(&stuff->color.green, n);
+ : swaps(&stuff->color.blue, n);
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static void swapStops(void *stuff, int n)
+ :{
+ : int i;
+ : CARD32 *stops;
+ : CARD16 *colors;
+ : stops = (CARD32 *)(stuff);
+ : for (i = 0; i < n; ++i) {
+ : swapl(stops, n);
+ : ++stops;
+ : }
+ : colors = (CARD16 *)(stops);
+ : for (i = 0; i < 4*n; ++i) {
+ : swaps(stops, n);
+ : ++stops;
+ : }
+ :}
+ :
+ :static int
+ :SProcRenderCreateLinearGradient (ClientPtr client)
+ :{
+ : register int n;
+ : int len;
+ : REQUEST (xRenderCreateLinearGradientReq);
+ : REQUEST_AT_LEAST_SIZE (xRenderCreateLinearGradientReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->pid, n);
+ : swapl(&stuff->p1.x, n);
+ : swapl(&stuff->p1.y, n);
+ : swapl(&stuff->p2.x, n);
+ : swapl(&stuff->p2.y, n);
+ : swapl(&stuff->nStops, n);
+ :
+ : len = (client->req_len << 2) - sizeof(xRenderCreateLinearGradientReq);
+ : if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
+ : return BadLength;
+ :
+ : swapStops(stuff+1, stuff->nStops);
+ :
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderCreateRadialGradient (ClientPtr client)
+ :{
+ : register int n;
+ : int len;
+ : REQUEST (xRenderCreateRadialGradientReq);
+ : REQUEST_AT_LEAST_SIZE (xRenderCreateRadialGradientReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->pid, n);
+ : swapl(&stuff->inner.x, n);
+ : swapl(&stuff->inner.y, n);
+ : swapl(&stuff->outer.x, n);
+ : swapl(&stuff->outer.y, n);
+ : swapl(&stuff->inner_radius, n);
+ : swapl(&stuff->outer_radius, n);
+ : swapl(&stuff->nStops, n);
+ :
+ : len = (client->req_len << 2) - sizeof(xRenderCreateRadialGradientReq);
+ : if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
+ : return BadLength;
+ :
+ : swapStops(stuff+1, stuff->nStops);
+ :
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderCreateConicalGradient (ClientPtr client)
+ :{
+ : register int n;
+ : int len;
+ : REQUEST (xRenderCreateConicalGradientReq);
+ : REQUEST_AT_LEAST_SIZE (xRenderCreateConicalGradientReq);
+ :
+ : swaps(&stuff->length, n);
+ : swapl(&stuff->pid, n);
+ : swapl(&stuff->center.x, n);
+ : swapl(&stuff->center.y, n);
+ : swapl(&stuff->angle, n);
+ : swapl(&stuff->nStops, n);
+ :
+ : len = (client->req_len << 2) - sizeof(xRenderCreateConicalGradientReq);
+ : if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
+ : return BadLength;
+ :
+ : swapStops(stuff+1, stuff->nStops);
+ :
+ : return (*ProcRenderVector[stuff->renderReqType]) (client);
+ :}
+ :
+ :static int
+ :SProcRenderDispatch (ClientPtr client)
+ :{
+ : REQUEST(xReq);
+ :
+ : if (stuff->data < RenderNumberRequests)
+ : return (*SProcRenderVector[stuff->data]) (client);
+ : else
+ : return BadRequest;
+ :}
+ :
+ :#ifdef PANORAMIX
+ :#include "panoramiX.h"
+ :#include "panoramiXsrv.h"
+ :
+ :#define VERIFY_XIN_PICTURE(pPicture, pid, client, mode, err) {\
+ : pPicture = SecurityLookupIDByType(client, pid, XRT_PICTURE, mode);\
+ : if (!pPicture) { \
+ : client->errorValue = pid; \
+ : return err; \
+ : } \
+ :}
+ :
+ :#define VERIFY_XIN_ALPHA(pPicture, pid, client, mode, err) {\
+ : if (pid == None) \
+ : pPicture = 0; \
+ : else { \
+ : VERIFY_XIN_PICTURE(pPicture, pid, client, mode, err); \
+ : } \
+ :} \
+ :
+ :int (*PanoramiXSaveRenderVector[RenderNumberRequests])(ClientPtr);
+ :
+ :unsigned long XRT_PICTURE;
+ :
+ :static int
+ :PanoramiXRenderCreatePicture (ClientPtr client)
+ :{
+ : REQUEST(xRenderCreatePictureReq);
+ : PanoramiXRes *refDraw, *newPict;
+ : int result = Success, j;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderCreatePictureReq);
+ : if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass(
+ : client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
+ : return BadDrawable;
+ : if(!(newPict = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
+ : return BadAlloc;
+ : newPict->type = XRT_PICTURE;
+ : newPict->info[0].id = stuff->pid;
+ :
+ : if (refDraw->type == XRT_WINDOW &&
+ : stuff->drawable == WindowTable[0]->drawable.id)
+ : {
+ : newPict->u.pict.root = TRUE;
+ : }
+ : else
+ : newPict->u.pict.root = FALSE;
+ :
+ : for(j = 1; j < PanoramiXNumScreens; j++)
+ : newPict->info[j].id = FakeClientID(client->index);
+ :
+ : FOR_NSCREENS_BACKWARD(j) {
+ : stuff->pid = newPict->info[j].id;
+ : stuff->drawable = refDraw->info[j].id;
+ : result = (*PanoramiXSaveRenderVector[X_RenderCreatePicture]) (client);
+ : if(result != Success) break;
+ : }
+ :
+ : if (result == Success)
+ : AddResource(newPict->info[0].id, XRT_PICTURE, newPict);
+ : else
+ : xfree(newPict);
+ :
+ : return (result);
+ :}
+ :
+ :static int
+ :PanoramiXRenderChangePicture (ClientPtr client)
+ :{
+ : PanoramiXRes *pict;
+ : int result = Success, j;
+ : REQUEST(xRenderChangePictureReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xChangeWindowAttributesReq);
+ :
+ : VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : FOR_NSCREENS_BACKWARD(j) {
+ : stuff->picture = pict->info[j].id;
+ : result = (*PanoramiXSaveRenderVector[X_RenderChangePicture]) (client);
+ : if(result != Success) break;
+ : }
+ :
+ : return (result);
+ :}
+ :
+ :static int
+ :PanoramiXRenderSetPictureClipRectangles (ClientPtr client)
+ :{
+ : REQUEST(xRenderSetPictureClipRectanglesReq);
+ : int result = Success, j;
+ : PanoramiXRes *pict;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderSetPictureClipRectanglesReq);
+ :
+ : VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : FOR_NSCREENS_BACKWARD(j) {
+ : stuff->picture = pict->info[j].id;
+ : result = (*PanoramiXSaveRenderVector[X_RenderSetPictureClipRectangles]) (client);
+ : if(result != Success) break;
+ : }
+ :
+ : return (result);
+ :}
+ :
+ :static int
+ :PanoramiXRenderSetPictureTransform (ClientPtr client)
+ :{
+ : REQUEST(xRenderSetPictureTransformReq);
+ : int result = Success, j;
+ : PanoramiXRes *pict;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderSetPictureTransformReq);
+ :
+ : VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : FOR_NSCREENS_BACKWARD(j) {
+ : stuff->picture = pict->info[j].id;
+ : result = (*PanoramiXSaveRenderVector[X_RenderSetPictureTransform]) (client);
+ : if(result != Success) break;
+ : }
+ :
+ : return (result);
+ :}
+ :
+ :static int
+ :PanoramiXRenderSetPictureFilter (ClientPtr client)
+ :{
+ : REQUEST(xRenderSetPictureFilterReq);
+ : int result = Success, j;
+ : PanoramiXRes *pict;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderSetPictureFilterReq);
+ :
+ : VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : FOR_NSCREENS_BACKWARD(j) {
+ : stuff->picture = pict->info[j].id;
+ : result = (*PanoramiXSaveRenderVector[X_RenderSetPictureFilter]) (client);
+ : if(result != Success) break;
+ : }
+ :
+ : return (result);
+ :}
+ :
+ :static int
+ :PanoramiXRenderFreePicture (ClientPtr client)
+ :{
+ : PanoramiXRes *pict;
+ : int result = Success, j;
+ : REQUEST(xRenderFreePictureReq);
+ :
+ : REQUEST_SIZE_MATCH(xRenderFreePictureReq);
+ :
+ : client->errorValue = stuff->picture;
+ :
+ : VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixDestroyAccess,
+ : RenderErrBase + BadPicture);
+ :
+ :
+ : FOR_NSCREENS_BACKWARD(j) {
+ : stuff->picture = pict->info[j].id;
+ : result = (*PanoramiXSaveRenderVector[X_RenderFreePicture]) (client);
+ : if(result != Success) break;
+ : }
+ :
+ : /* Since ProcRenderFreePicture is using FreeResource, it will free
+ : our resource for us on the last pass through the loop above */
+ :
+ : return (result);
+ :}
+ :
+ :static int
+ :PanoramiXRenderComposite (ClientPtr client)
+ :{
+ : PanoramiXRes *src, *msk, *dst;
+ : int result = Success, j;
+ : xRenderCompositeReq orig;
+ : REQUEST(xRenderCompositeReq);
+ :
+ : REQUEST_SIZE_MATCH(xRenderCompositeReq);
+ :
+ : VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_XIN_ALPHA (msk, stuff->mask, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : orig = *stuff;
+ :
+ : FOR_NSCREENS_FORWARD(j) {
+ : stuff->src = src->info[j].id;
+ : if (src->u.pict.root)
+ : {
+ : stuff->xSrc = orig.xSrc - panoramiXdataPtr[j].x;
+ : stuff->ySrc = orig.ySrc - panoramiXdataPtr[j].y;
+ : }
+ : stuff->dst = dst->info[j].id;
+ : if (dst->u.pict.root)
+ : {
+ : stuff->xDst = orig.xDst - panoramiXdataPtr[j].x;
+ : stuff->yDst = orig.yDst - panoramiXdataPtr[j].y;
+ : }
+ : if (msk)
+ : {
+ : stuff->mask = msk->info[j].id;
+ : if (msk->u.pict.root)
+ : {
+ : stuff->xMask = orig.xMask - panoramiXdataPtr[j].x;
+ : stuff->yMask = orig.yMask - panoramiXdataPtr[j].y;
+ : }
+ : }
+ : result = (*PanoramiXSaveRenderVector[X_RenderComposite]) (client);
+ : if(result != Success) break;
+ : }
+ :
+ : return result;
+ :}
+ :
+ :static int
+ :PanoramiXRenderCompositeGlyphs (ClientPtr client)
+ :{
+ : PanoramiXRes *src, *dst;
+ : int result = Success, j;
+ : REQUEST(xRenderCompositeGlyphsReq);
+ : xGlyphElt origElt, *elt;
+ : INT16 xSrc, ySrc;
+ :
+ : REQUEST_AT_LEAST_SIZE(xRenderCompositeGlyphsReq);
+ : VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : if (client->req_len << 2 >= (sizeof (xRenderCompositeGlyphsReq) +
+ : sizeof (xGlyphElt)))
+ : {
+ : elt = (xGlyphElt *) (stuff + 1);
+ : origElt = *elt;
+ : xSrc = stuff->xSrc;
+ : ySrc = stuff->ySrc;
+ : FOR_NSCREENS_FORWARD(j) {
+ : stuff->src = src->info[j].id;
+ : if (src->u.pict.root)
+ : {
+ : stuff->xSrc = xSrc - panoramiXdataPtr[j].x;
+ : stuff->ySrc = ySrc - panoramiXdataPtr[j].y;
+ : }
+ : stuff->dst = dst->info[j].id;
+ : if (dst->u.pict.root)
+ : {
+ : elt->deltax = origElt.deltax - panoramiXdataPtr[j].x;
+ : elt->deltay = origElt.deltay - panoramiXdataPtr[j].y;
+ : }
+ : result = (*PanoramiXSaveRenderVector[stuff->renderReqType]) (client);
+ : if(result != Success) break;
+ : }
+ : }
+ :
+ : return result;
+ :}
+ :
+ :static int
+ :PanoramiXRenderFillRectangles (ClientPtr client)
+ :{
+ : PanoramiXRes *dst;
+ : int result = Success, j;
+ : REQUEST(xRenderFillRectanglesReq);
+ : char *extra;
+ : int extra_len;
+ :
+ : REQUEST_AT_LEAST_SIZE (xRenderFillRectanglesReq);
+ : VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : extra_len = (client->req_len << 2) - sizeof (xRenderFillRectanglesReq);
+ : if (extra_len &&
+ : (extra = (char *) ALLOCATE_LOCAL (extra_len)))
+ : {
+ : memcpy (extra, stuff + 1, extra_len);
+ : FOR_NSCREENS_FORWARD(j) {
+ : if (j) memcpy (stuff + 1, extra, extra_len);
+ : if (dst->u.pict.root)
+ : {
+ : int x_off = panoramiXdataPtr[j].x;
+ : int y_off = panoramiXdataPtr[j].y;
+ :
+ : if(x_off || y_off) {
+ : xRectangle *rects = (xRectangle *) (stuff + 1);
+ : int i = extra_len / sizeof (xRectangle);
+ :
+ : while (i--)
+ : {
+ : rects->x -= x_off;
+ : rects->y -= y_off;
+ : rects++;
+ : }
+ : }
+ : }
+ : stuff->dst = dst->info[j].id;
+ : result = (*PanoramiXSaveRenderVector[X_RenderFillRectangles]) (client);
+ : if(result != Success) break;
+ : }
+ : DEALLOCATE_LOCAL(extra);
+ : }
+ :
+ : return result;
+ :}
+ :
+ :static int
+ :PanoramiXRenderTrapezoids(ClientPtr client)
+ :{
+ : PanoramiXRes *src, *dst;
+ : int result = Success, j;
+ : REQUEST(xRenderTrapezoidsReq);
+ : char *extra;
+ : int extra_len;
+ :
+ : REQUEST_AT_LEAST_SIZE (xRenderTrapezoidsReq);
+ :
+ : VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : extra_len = (client->req_len << 2) - sizeof (xRenderTrapezoidsReq);
+ :
+ : if (extra_len &&
+ : (extra = (char *) ALLOCATE_LOCAL (extra_len))) {
+ : memcpy (extra, stuff + 1, extra_len);
+ :
+ : FOR_NSCREENS_FORWARD(j) {
+ : if (j) memcpy (stuff + 1, extra, extra_len);
+ : if (dst->u.pict.root) {
+ : int x_off = panoramiXdataPtr[j].x;
+ : int y_off = panoramiXdataPtr[j].y;
+ :
+ : if(x_off || y_off) {
+ : xTrapezoid *trap = (xTrapezoid *) (stuff + 1);
+ : int i = extra_len / sizeof (xTrapezoid);
+ :
+ : while (i--) {
+ : trap->top -= y_off;
+ : trap->bottom -= y_off;
+ : trap->left.p1.x -= x_off;
+ : trap->left.p1.y -= y_off;
+ : trap->left.p2.x -= x_off;
+ : trap->left.p2.y -= y_off;
+ : trap->right.p1.x -= x_off;
+ : trap->right.p1.y -= y_off;
+ : trap->right.p2.x -= x_off;
+ : trap->right.p2.y -= y_off;
+ : trap++;
+ : }
+ : }
+ : }
+ :
+ : stuff->src = src->info[j].id;
+ : stuff->dst = dst->info[j].id;
+ : result =
+ : (*PanoramiXSaveRenderVector[X_RenderTrapezoids]) (client);
+ :
+ : if(result != Success) break;
+ : }
+ :
+ : DEALLOCATE_LOCAL(extra);
+ : }
+ :
+ : return result;
+ :}
+ :
+ :static int
+ :PanoramiXRenderTriangles(ClientPtr client)
+ :{
+ : PanoramiXRes *src, *dst;
+ : int result = Success, j;
+ : REQUEST(xRenderTrianglesReq);
+ : char *extra;
+ : int extra_len;
+ :
+ : REQUEST_AT_LEAST_SIZE (xRenderTrianglesReq);
+ :
+ : VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : extra_len = (client->req_len << 2) - sizeof (xRenderTrianglesReq);
+ :
+ : if (extra_len &&
+ : (extra = (char *) ALLOCATE_LOCAL (extra_len))) {
+ : memcpy (extra, stuff + 1, extra_len);
+ :
+ : FOR_NSCREENS_FORWARD(j) {
+ : if (j) memcpy (stuff + 1, extra, extra_len);
+ : if (dst->u.pict.root) {
+ : int x_off = panoramiXdataPtr[j].x;
+ : int y_off = panoramiXdataPtr[j].y;
+ :
+ : if(x_off || y_off) {
+ : xTriangle *tri = (xTriangle *) (stuff + 1);
+ : int i = extra_len / sizeof (xTriangle);
+ :
+ : while (i--) {
+ : tri->p1.x -= x_off;
+ : tri->p1.y -= y_off;
+ : tri->p2.x -= x_off;
+ : tri->p2.y -= y_off;
+ : tri->p3.x -= x_off;
+ : tri->p3.y -= y_off;
+ : tri++;
+ : }
+ : }
+ : }
+ :
+ : stuff->src = src->info[j].id;
+ : stuff->dst = dst->info[j].id;
+ : result =
+ : (*PanoramiXSaveRenderVector[X_RenderTriangles]) (client);
+ :
+ : if(result != Success) break;
+ : }
+ :
+ : DEALLOCATE_LOCAL(extra);
+ : }
+ :
+ : return result;
+ :}
+ :
+ :static int
+ :PanoramiXRenderTriStrip(ClientPtr client)
+ :{
+ : PanoramiXRes *src, *dst;
+ : int result = Success, j;
+ : REQUEST(xRenderTriStripReq);
+ : char *extra;
+ : int extra_len;
+ :
+ : REQUEST_AT_LEAST_SIZE (xRenderTriStripReq);
+ :
+ : VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : extra_len = (client->req_len << 2) - sizeof (xRenderTriStripReq);
+ :
+ : if (extra_len &&
+ : (extra = (char *) ALLOCATE_LOCAL (extra_len))) {
+ : memcpy (extra, stuff + 1, extra_len);
+ :
+ : FOR_NSCREENS_FORWARD(j) {
+ : if (j) memcpy (stuff + 1, extra, extra_len);
+ : if (dst->u.pict.root) {
+ : int x_off = panoramiXdataPtr[j].x;
+ : int y_off = panoramiXdataPtr[j].y;
+ :
+ : if(x_off || y_off) {
+ : xPointFixed *fixed = (xPointFixed *) (stuff + 1);
+ : int i = extra_len / sizeof (xPointFixed);
+ :
+ : while (i--) {
+ : fixed->x -= x_off;
+ : fixed->y -= y_off;
+ : fixed++;
+ : }
+ : }
+ : }
+ :
+ : stuff->src = src->info[j].id;
+ : stuff->dst = dst->info[j].id;
+ : result =
+ : (*PanoramiXSaveRenderVector[X_RenderTriStrip]) (client);
+ :
+ : if(result != Success) break;
+ : }
+ :
+ : DEALLOCATE_LOCAL(extra);
+ : }
+ :
+ : return result;
+ :}
+ :
+ :static int
+ :PanoramiXRenderTriFan(ClientPtr client)
+ :{
+ : PanoramiXRes *src, *dst;
+ : int result = Success, j;
+ : REQUEST(xRenderTriFanReq);
+ : char *extra;
+ : int extra_len;
+ :
+ : REQUEST_AT_LEAST_SIZE (xRenderTriFanReq);
+ :
+ : VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
+ : RenderErrBase + BadPicture);
+ : VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : extra_len = (client->req_len << 2) - sizeof (xRenderTriFanReq);
+ :
+ : if (extra_len &&
+ : (extra = (char *) ALLOCATE_LOCAL (extra_len))) {
+ : memcpy (extra, stuff + 1, extra_len);
+ :
+ : FOR_NSCREENS_FORWARD(j) {
+ : if (j) memcpy (stuff + 1, extra, extra_len);
+ : if (dst->u.pict.root) {
+ : int x_off = panoramiXdataPtr[j].x;
+ : int y_off = panoramiXdataPtr[j].y;
+ :
+ : if(x_off || y_off) {
+ : xPointFixed *fixed = (xPointFixed *) (stuff + 1);
+ : int i = extra_len / sizeof (xPointFixed);
+ :
+ : while (i--) {
+ : fixed->x -= x_off;
+ : fixed->y -= y_off;
+ : fixed++;
+ : }
+ : }
+ : }
+ :
+ : stuff->src = src->info[j].id;
+ : stuff->dst = dst->info[j].id;
+ : result =
+ : (*PanoramiXSaveRenderVector[X_RenderTriFan]) (client);
+ :
+ : if(result != Success) break;
+ : }
+ :
+ : DEALLOCATE_LOCAL(extra);
+ : }
+ :
+ : return result;
+ :}
+ :
+ :#if 0 /* Not implemented yet */
+ :
+ :static int
+ :PanoramiXRenderColorTrapezoids(ClientPtr client)
+ :{
+ : PanoramiXRes *src, *dst;
+ : int result = Success, j;
+ : REQUEST(xRenderColorTrapezoidsReq);
+ : char *extra;
+ : int extra_len;
+ :
+ : REQUEST_AT_LEAST_SIZE (xRenderColorTrapezoidsReq);
+ :
+ : VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : extra_len = (client->req_len << 2) - sizeof (xRenderColorTrapezoidsReq);
+ :
+ : if (extra_len &&
+ : (extra = (char *) ALLOCATE_LOCAL (extra_len))) {
+ : memcpy (extra, stuff + 1, extra_len);
+ :
+ : FOR_NSCREENS_FORWARD(j) {
+ : if (j) memcpy (stuff + 1, extra, extra_len);
+ : if (dst->u.pict.root) {
+ : int x_off = panoramiXdataPtr[j].x;
+ : int y_off = panoramiXdataPtr[j].y;
+ :
+ : if(x_off || y_off) {
+ : ....;
+ : }
+ : }
+ :
+ : stuff->dst = dst->info[j].id;
+ : result =
+ : (*PanoramiXSaveRenderVector[X_RenderColorTrapezoids]) (client);
+ :
+ : if(result != Success) break;
+ : }
+ :
+ : DEALLOCATE_LOCAL(extra);
+ : }
+ :
+ : return result;
+ :}
+ :
+ :static int
+ :PanoramiXRenderColorTriangles(ClientPtr client)
+ :{
+ : PanoramiXRes *src, *dst;
+ : int result = Success, j;
+ : REQUEST(xRenderColorTrianglesReq);
+ : char *extra;
+ : int extra_len;
+ :
+ : REQUEST_AT_LEAST_SIZE (xRenderColorTrianglesReq);
+ :
+ : VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ :
+ : extra_len = (client->req_len << 2) - sizeof (xRenderColorTrianglesReq);
+ :
+ : if (extra_len &&
+ : (extra = (char *) ALLOCATE_LOCAL (extra_len))) {
+ : memcpy (extra, stuff + 1, extra_len);
+ :
+ : FOR_NSCREENS_FORWARD(j) {
+ : if (j) memcpy (stuff + 1, extra, extra_len);
+ : if (dst->u.pict.root) {
+ : int x_off = panoramiXdataPtr[j].x;
+ : int y_off = panoramiXdataPtr[j].y;
+ :
+ : if(x_off || y_off) {
+ : ....;
+ : }
+ : }
+ :
+ : stuff->dst = dst->info[j].id;
+ : result =
+ : (*PanoramiXSaveRenderVector[X_RenderColorTriangles]) (client);
+ :
+ : if(result != Success) break;
+ : }
+ :
+ : DEALLOCATE_LOCAL(extra);
+ : }
+ :
+ : return result;
+ :}
+ :
+ :#endif
+ :
+ :static int
+ :PanoramiXRenderAddTraps (ClientPtr client)
+ :{
+ : PanoramiXRes *picture;
+ : int result = Success, j;
+ : REQUEST(xRenderAddTrapsReq);
+ : char *extra;
+ : int extra_len;
+ : INT16 x_off, y_off;
+ :
+ : REQUEST_AT_LEAST_SIZE (xRenderAddTrapsReq);
+ : VERIFY_XIN_PICTURE (picture, stuff->picture, client, DixWriteAccess,
+ : RenderErrBase + BadPicture);
+ : extra_len = (client->req_len << 2) - sizeof (xRenderAddTrapsReq);
+ : if (extra_len &&
+ : (extra = (char *) ALLOCATE_LOCAL (extra_len)))
+ : {
+ : memcpy (extra, stuff + 1, extra_len);
+ : x_off = stuff->xOff;
+ : y_off = stuff->yOff;
+ : FOR_NSCREENS_FORWARD(j) {
+ : if (j) memcpy (stuff + 1, extra, extra_len);
+ : stuff->picture = picture->info[j].id;
+ :
+ : if (picture->u.pict.root)
+ : {
+ : stuff->xOff = x_off + panoramiXdataPtr[j].x;
+ : stuff->yOff = y_off + panoramiXdataPtr[j].y;
+ : }
+ : result = (*PanoramiXSaveRenderVector[X_RenderAddTraps]) (client);
+ : if(result != Success) break;
+ : }
+ : DEALLOCATE_LOCAL(extra);
+ : }
+ :
+ : return result;
+ :}
+ :
+ :void
+ :PanoramiXRenderInit (void)
+ :{
+ : int i;
+ :
+ : XRT_PICTURE = CreateNewResourceType (XineramaDeleteResource);
+ : for (i = 0; i < RenderNumberRequests; i++)
+ : PanoramiXSaveRenderVector[i] = ProcRenderVector[i];
+ : /*
+ : * Stuff in Xinerama aware request processing hooks
+ : */
+ : ProcRenderVector[X_RenderCreatePicture] = PanoramiXRenderCreatePicture;
+ : ProcRenderVector[X_RenderChangePicture] = PanoramiXRenderChangePicture;
+ : ProcRenderVector[X_RenderSetPictureTransform] = PanoramiXRenderSetPictureTransform;
+ : ProcRenderVector[X_RenderSetPictureFilter] = PanoramiXRenderSetPictureFilter;
+ : ProcRenderVector[X_RenderSetPictureClipRectangles] = PanoramiXRenderSetPictureClipRectangles;
+ : ProcRenderVector[X_RenderFreePicture] = PanoramiXRenderFreePicture;
+ : ProcRenderVector[X_RenderComposite] = PanoramiXRenderComposite;
+ : ProcRenderVector[X_RenderCompositeGlyphs8] = PanoramiXRenderCompositeGlyphs;
+ : ProcRenderVector[X_RenderCompositeGlyphs16] = PanoramiXRenderCompositeGlyphs;
+ : ProcRenderVector[X_RenderCompositeGlyphs32] = PanoramiXRenderCompositeGlyphs;
+ : ProcRenderVector[X_RenderFillRectangles] = PanoramiXRenderFillRectangles;
+ :
+ : ProcRenderVector[X_RenderTrapezoids] = PanoramiXRenderTrapezoids;
+ : ProcRenderVector[X_RenderTriangles] = PanoramiXRenderTriangles;
+ : ProcRenderVector[X_RenderTriStrip] = PanoramiXRenderTriStrip;
+ : ProcRenderVector[X_RenderTriFan] = PanoramiXRenderTriFan;
+ : ProcRenderVector[X_RenderAddTraps] = PanoramiXRenderAddTraps;
+ :}
+ :
+ :void
+ :PanoramiXRenderReset (void)
+ :{
+ : int i;
+ : for (i = 0; i < RenderNumberRequests; i++)
+ : ProcRenderVector[i] = PanoramiXSaveRenderVector[i];
+ :}
+ :
+ :#endif /* PANORAMIX */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/render/picture.c"
+ *
+ * 74 0.0806
+ */
+
+
+ :/*
+ : *
+ : * Copyright © 2000 SuSE, Inc.
+ : *
+ : * 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 SuSE not be used in advertising or
+ : * publicity pertaining to distribution of the software without specific,
+ : * written prior permission. SuSE makes no representations about the
+ : * suitability of this software for any purpose. It is provided "as is"
+ : * without express or implied warranty.
+ : *
+ : * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
+ : * 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.
+ : *
+ : * Author: Keith Packard, SuSE, Inc.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "misc.h"
+ :#include "scrnintstr.h"
+ :#include "os.h"
+ :#include "regionstr.h"
+ :#include "validate.h"
+ :#include "windowstr.h"
+ :#include "input.h"
+ :#include "resource.h"
+ :#include "colormapst.h"
+ :#include "cursorstr.h"
+ :#include "dixstruct.h"
+ :#include "gcstruct.h"
+ :#include "servermd.h"
+ :#include "picturestr.h"
+ :
+ :_X_EXPORT int PictureScreenPrivateIndex = -1;
+ :int PictureWindowPrivateIndex;
+ :static int PictureGeneration;
+ :RESTYPE PictureType;
+ :RESTYPE PictFormatType;
+ :RESTYPE GlyphSetType;
+ :int PictureCmapPolicy = PictureCmapPolicyDefault;
+ :
+ :/* Picture Private machinery */
+ :
+ :static int picturePrivateCount;
+ :
+ :void
+ :ResetPicturePrivateIndex (void)
+ :{
+ : picturePrivateCount = 0;
+ :}
+ :
+ :int
+ :AllocatePicturePrivateIndex (void)
+ :{
+ : return picturePrivateCount++;
+ :}
+ :
+ :Bool
+ :AllocatePicturePrivate (ScreenPtr pScreen, int index2, unsigned int amount)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : unsigned int oldamount;
+ :
+ : /* Round up sizes for proper alignment */
+ : amount = ((amount + (sizeof(long) - 1)) / sizeof(long)) * sizeof(long);
+ :
+ : if (index2 >= ps->PicturePrivateLen)
+ : {
+ : unsigned int *nsizes;
+ :
+ : nsizes = (unsigned int *)xrealloc(ps->PicturePrivateSizes,
+ : (index2 + 1) * sizeof(unsigned int));
+ : if (!nsizes)
+ : return FALSE;
+ : while (ps->PicturePrivateLen <= index2)
+ : {
+ : nsizes[ps->PicturePrivateLen++] = 0;
+ : ps->totalPictureSize += sizeof(DevUnion);
+ : }
+ : ps->PicturePrivateSizes = nsizes;
+ : }
+ : oldamount = ps->PicturePrivateSizes[index2];
+ : if (amount > oldamount)
+ : {
+ : ps->PicturePrivateSizes[index2] = amount;
+ : ps->totalPictureSize += (amount - oldamount);
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :
+ :Bool
+ :PictureDestroyWindow (WindowPtr pWindow)
+ :{
+ : ScreenPtr pScreen = pWindow->drawable.pScreen;
+ : PicturePtr pPicture;
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : Bool ret;
+ :
+ : while ((pPicture = GetPictureWindow(pWindow)))
+ : {
+ : SetPictureWindow(pWindow, pPicture->pNext);
+ : if (pPicture->id)
+ : FreeResource (pPicture->id, PictureType);
+ : FreePicture ((pointer) pPicture, pPicture->id);
+ : }
+ : pScreen->DestroyWindow = ps->DestroyWindow;
+ : ret = (*pScreen->DestroyWindow) (pWindow);
+ : ps->DestroyWindow = pScreen->DestroyWindow;
+ : pScreen->DestroyWindow = PictureDestroyWindow;
+ : return ret;
+ :}
+ :
+ :Bool
+ :PictureCloseScreen (int index, ScreenPtr pScreen)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : Bool ret;
+ : int n;
+ :
+ : pScreen->CloseScreen = ps->CloseScreen;
+ : ret = (*pScreen->CloseScreen) (index, pScreen);
+ : PictureResetFilters (pScreen);
+ : for (n = 0; n < ps->nformats; n++)
+ : if (ps->formats[n].type == PictTypeIndexed)
+ : (*ps->CloseIndexed) (pScreen, &ps->formats[n]);
+ : GlyphUninit (pScreen);
+ : SetPictureScreen(pScreen, 0);
+ : if (ps->PicturePrivateSizes)
+ : xfree (ps->PicturePrivateSizes);
+ : xfree (ps->formats);
+ : xfree (ps);
+ : return ret;
+ :}
+ :
+ :void
+ :PictureStoreColors (ColormapPtr pColormap, int ndef, xColorItem *pdef)
+ :{
+ : ScreenPtr pScreen = pColormap->pScreen;
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ :
+ : pScreen->StoreColors = ps->StoreColors;
+ : (*pScreen->StoreColors) (pColormap, ndef, pdef);
+ : ps->StoreColors = pScreen->StoreColors;
+ : pScreen->StoreColors = PictureStoreColors;
+ :
+ : if (pColormap->class == PseudoColor || pColormap->class == GrayScale)
+ : {
+ : PictFormatPtr format = ps->formats;
+ : int nformats = ps->nformats;
+ :
+ : while (nformats--)
+ : {
+ : if (format->type == PictTypeIndexed &&
+ : format->index.pColormap == pColormap)
+ : {
+ : (*ps->UpdateIndexed) (pScreen, format, ndef, pdef);
+ : break;
+ : }
+ : format++;
+ : }
+ : }
+ :}
+ :
+ :static int
+ :visualDepth (ScreenPtr pScreen, VisualPtr pVisual)
+ :{
+ : int d, v;
+ : DepthPtr pDepth;
+ :
+ : for (d = 0; d < pScreen->numDepths; d++)
+ : {
+ : pDepth = &pScreen->allowedDepths[d];
+ : for (v = 0; v < pDepth->numVids; v++)
+ : if (pDepth->vids[v] == pVisual->vid)
+ : return pDepth->depth;
+ : }
+ : return 0;
+ :}
+ :
+ :typedef struct _formatInit {
+ : CARD32 format;
+ : CARD8 depth;
+ :} FormatInitRec, *FormatInitPtr;
+ :
+ :static int
+ :addFormat (FormatInitRec formats[256],
+ : int nformat,
+ : CARD32 format,
+ : CARD8 depth)
+ :{
+ : int n;
+ :
+ : for (n = 0; n < nformat; n++)
+ : if (formats[n].format == format && formats[n].depth == depth)
+ : return nformat;
+ : formats[nformat].format = format;
+ : formats[nformat].depth = depth;
+ : return ++nformat;
+ :}
+ :
+ :#define Mask(n) ((n) == 32 ? 0xffffffff : ((1 << (n))-1))
+ :
+ :PictFormatPtr
+ :PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
+ :{
+ : int nformats, f;
+ : PictFormatPtr pFormats;
+ : FormatInitRec formats[1024];
+ : CARD32 format;
+ : CARD8 depth;
+ : VisualPtr pVisual;
+ : int v;
+ : int bpp;
+ : int type;
+ : int r, g, b;
+ : int d;
+ : DepthPtr pDepth;
+ :
+ : nformats = 0;
+ : /* formats required by protocol */
+ : formats[nformats].format = PICT_a1;
+ : formats[nformats].depth = 1;
+ : nformats++;
+ : formats[nformats].format = PICT_FORMAT(BitsPerPixel(8),
+ : PICT_TYPE_A,
+ : 8, 0, 0, 0);
+ : formats[nformats].depth = 8;
+ : nformats++;
+ : formats[nformats].format = PICT_FORMAT(BitsPerPixel(4),
+ : PICT_TYPE_A,
+ : 4, 0, 0, 0);
+ : formats[nformats].depth = 4;
+ : nformats++;
+ : formats[nformats].format = PICT_a8r8g8b8;
+ : formats[nformats].depth = 32;
+ : nformats++;
+ : formats[nformats].format = PICT_x8r8g8b8;
+ : formats[nformats].depth = 32;
+ : nformats++;
+ :
+ : /* now look through the depths and visuals adding other formats */
+ : for (v = 0; v < pScreen->numVisuals; v++)
+ : {
+ : pVisual = &pScreen->visuals[v];
+ : depth = visualDepth (pScreen, pVisual);
+ : if (!depth)
+ : continue;
+ : bpp = BitsPerPixel (depth);
+ : switch (pVisual->class) {
+ : case DirectColor:
+ : case TrueColor:
+ : r = Ones (pVisual->redMask);
+ : g = Ones (pVisual->greenMask);
+ : b = Ones (pVisual->blueMask);
+ : type = PICT_TYPE_OTHER;
+ : /*
+ : * Current rendering code supports only two direct formats,
+ : * fields must be packed together at the bottom of the pixel
+ : * and must be either RGB or BGR
+ : */
+ : if (pVisual->offsetBlue == 0 &&
+ : pVisual->offsetGreen == b &&
+ : pVisual->offsetRed == b + g)
+ : {
+ : type = PICT_TYPE_ARGB;
+ : }
+ : else if (pVisual->offsetRed == 0 &&
+ : pVisual->offsetGreen == r &&
+ : pVisual->offsetBlue == r + g)
+ : {
+ : type = PICT_TYPE_ABGR;
+ : }
+ : if (type != PICT_TYPE_OTHER)
+ : {
+ : format = PICT_FORMAT(bpp, type, 0, r, g, b);
+ : nformats = addFormat (formats, nformats, format, depth);
+ : }
+ : break;
+ : case StaticColor:
+ : case PseudoColor:
+ : format = PICT_VISFORMAT (bpp, PICT_TYPE_COLOR, v);
+ : nformats = addFormat (formats, nformats, format, depth);
+ : break;
+ : case StaticGray:
+ : case GrayScale:
+ : format = PICT_VISFORMAT (bpp, PICT_TYPE_GRAY, v);
+ : nformats = addFormat (formats, nformats, format, depth);
+ : break;
+ : }
+ : }
+ : /*
+ : * Walk supported depths and add useful Direct formats
+ : */
+ : for (d = 0; d < pScreen->numDepths; d++)
+ : {
+ : pDepth = &pScreen->allowedDepths[d];
+ : bpp = BitsPerPixel (pDepth->depth);
+ : format = 0;
+ : switch (bpp) {
+ : case 16:
+ : /* depth 12 formats */
+ : if (pDepth->depth >= 12)
+ : {
+ : nformats = addFormat (formats, nformats,
+ : PICT_x4r4g4b4, pDepth->depth);
+ : nformats = addFormat (formats, nformats,
+ : PICT_x4b4g4r4, pDepth->depth);
+ : }
+ : /* depth 15 formats */
+ : if (pDepth->depth >= 15)
+ : {
+ : nformats = addFormat (formats, nformats,
+ : PICT_x1r5g5b5, pDepth->depth);
+ : nformats = addFormat (formats, nformats,
+ : PICT_x1b5g5r5, pDepth->depth);
+ : }
+ : /* depth 16 formats */
+ : if (pDepth->depth >= 16)
+ : {
+ : nformats = addFormat (formats, nformats,
+ : PICT_a1r5g5b5, pDepth->depth);
+ : nformats = addFormat (formats, nformats,
+ : PICT_a1b5g5r5, pDepth->depth);
+ : nformats = addFormat (formats, nformats,
+ : PICT_r5g6b5, pDepth->depth);
+ : nformats = addFormat (formats, nformats,
+ : PICT_b5g6r5, pDepth->depth);
+ : nformats = addFormat (formats, nformats,
+ : PICT_a4r4g4b4, pDepth->depth);
+ : nformats = addFormat (formats, nformats,
+ : PICT_a4b4g4r4, pDepth->depth);
+ : }
+ : break;
+ : case 24:
+ : if (pDepth->depth >= 24)
+ : {
+ : nformats = addFormat (formats, nformats,
+ : PICT_r8g8b8, pDepth->depth);
+ : nformats = addFormat (formats, nformats,
+ : PICT_b8g8r8, pDepth->depth);
+ : }
+ : break;
+ : case 32:
+ : if (pDepth->depth >= 24)
+ : {
+ : nformats = addFormat (formats, nformats,
+ : PICT_x8r8g8b8, pDepth->depth);
+ : nformats = addFormat (formats, nformats,
+ : PICT_x8b8g8r8, pDepth->depth);
+ : }
+ : break;
+ : }
+ : }
+ :
+ :
+ : pFormats = (PictFormatPtr) xalloc (nformats * sizeof (PictFormatRec));
+ : if (!pFormats)
+ : return 0;
+ : memset (pFormats, '\0', nformats * sizeof (PictFormatRec));
+ : for (f = 0; f < nformats; f++)
+ : {
+ : pFormats[f].id = FakeClientID (0);
+ : pFormats[f].depth = formats[f].depth;
+ : format = formats[f].format;
+ : pFormats[f].format = format;
+ : switch (PICT_FORMAT_TYPE(format)) {
+ : case PICT_TYPE_ARGB:
+ : pFormats[f].type = PictTypeDirect;
+ :
+ : pFormats[f].direct.alphaMask = Mask(PICT_FORMAT_A(format));
+ : if (pFormats[f].direct.alphaMask)
+ : pFormats[f].direct.alpha = (PICT_FORMAT_R(format) +
+ : PICT_FORMAT_G(format) +
+ : PICT_FORMAT_B(format));
+ :
+ : pFormats[f].direct.redMask = Mask(PICT_FORMAT_R(format));
+ : pFormats[f].direct.red = (PICT_FORMAT_G(format) +
+ : PICT_FORMAT_B(format));
+ :
+ : pFormats[f].direct.greenMask = Mask(PICT_FORMAT_G(format));
+ : pFormats[f].direct.green = PICT_FORMAT_B(format);
+ :
+ : pFormats[f].direct.blueMask = Mask(PICT_FORMAT_B(format));
+ : pFormats[f].direct.blue = 0;
+ : break;
+ :
+ : case PICT_TYPE_ABGR:
+ : pFormats[f].type = PictTypeDirect;
+ :
+ : pFormats[f].direct.alphaMask = Mask(PICT_FORMAT_A(format));
+ : if (pFormats[f].direct.alphaMask)
+ : pFormats[f].direct.alpha = (PICT_FORMAT_B(format) +
+ : PICT_FORMAT_G(format) +
+ : PICT_FORMAT_R(format));
+ :
+ : pFormats[f].direct.blueMask = Mask(PICT_FORMAT_B(format));
+ : pFormats[f].direct.blue = (PICT_FORMAT_G(format) +
+ : PICT_FORMAT_R(format));
+ :
+ : pFormats[f].direct.greenMask = Mask(PICT_FORMAT_G(format));
+ : pFormats[f].direct.green = PICT_FORMAT_R(format);
+ :
+ : pFormats[f].direct.redMask = Mask(PICT_FORMAT_R(format));
+ : pFormats[f].direct.red = 0;
+ : break;
+ :
+ : case PICT_TYPE_A:
+ : pFormats[f].type = PictTypeDirect;
+ :
+ : pFormats[f].direct.alpha = 0;
+ : pFormats[f].direct.alphaMask = Mask(PICT_FORMAT_A(format));
+ :
+ : /* remaining fields already set to zero */
+ : break;
+ :
+ : case PICT_TYPE_COLOR:
+ : case PICT_TYPE_GRAY:
+ : pFormats[f].type = PictTypeIndexed;
+ : pFormats[f].index.vid = pScreen->visuals[PICT_FORMAT_VIS(format)].vid;
+ : break;
+ : }
+ : }
+ : *nformatp = nformats;
+ : return pFormats;
+ :}
+ :
+ :static VisualPtr
+ :PictureFindVisual (ScreenPtr pScreen, VisualID visual)
+ :{
+ : int i;
+ : VisualPtr pVisual;
+ : for (i = 0, pVisual = pScreen->visuals;
+ : i < pScreen->numVisuals;
+ : i++, pVisual++)
+ : {
+ : if (pVisual->vid == visual)
+ : return pVisual;
+ : }
+ : return 0;
+ :}
+ :
+ :Bool
+ :PictureInitIndexedFormats (ScreenPtr pScreen)
+ :{
+ : PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
+ : PictFormatPtr format;
+ : int nformat;
+ :
+ : if (!ps)
+ : return FALSE;
+ : format = ps->formats;
+ : nformat = ps->nformats;
+ : while (nformat--)
+ : {
+ : if (format->type == PictTypeIndexed && !format->index.pColormap)
+ : {
+ : if (format->index.vid == pScreen->rootVisual)
+ : format->index.pColormap = (ColormapPtr) LookupIDByType(pScreen->defColormap,
+ : RT_COLORMAP);
+ : else
+ : {
+ : VisualPtr pVisual;
+ :
+ : pVisual = PictureFindVisual (pScreen, format->index.vid);
+ : if (CreateColormap (FakeClientID (0), pScreen,
+ : pVisual,
+ : &format->index.pColormap, AllocNone,
+ : 0) != Success)
+ : {
+ : return FALSE;
+ : }
+ : }
+ : if (!(*ps->InitIndexed) (pScreen, format))
+ : return FALSE;
+ : }
+ : format++;
+ : }
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :PictureFinishInit (void)
+ :{
+ : int s;
+ :
+ : for (s = 0; s < screenInfo.numScreens; s++)
+ : {
+ : if (!GlyphFinishInit (screenInfo.screens[s]))
+ : return FALSE;
+ : if (!PictureInitIndexedFormats (screenInfo.screens[s]))
+ : return FALSE;
+ : (void) AnimCurInit (screenInfo.screens[s]);
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :PictureSetSubpixelOrder (ScreenPtr pScreen, int subpixel)
+ :{
+ : PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
+ :
+ : if (!ps)
+ : return FALSE;
+ : ps->subpixel = subpixel;
+ : return TRUE;
+ :
+ :}
+ :
+ :_X_EXPORT int
+ :PictureGetSubpixelOrder (ScreenPtr pScreen)
+ :{
+ : PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
+ :
+ : if (!ps)
+ : return SubPixelUnknown;
+ : return ps->subpixel;
+ :}
+ :
+ :PictFormatPtr
+ :PictureMatchVisual (ScreenPtr pScreen, int depth, VisualPtr pVisual)
+ :{
+ : PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
+ : PictFormatPtr format;
+ : int nformat;
+ : int type;
+ :
+ : if (!ps)
+ : return 0;
+ : format = ps->formats;
+ : nformat = ps->nformats;
+ : switch (pVisual->class) {
+ : case StaticGray:
+ : case GrayScale:
+ : case StaticColor:
+ : case PseudoColor:
+ : type = PictTypeIndexed;
+ : break;
+ : case TrueColor:
+ : case DirectColor:
+ : type = PictTypeDirect;
+ : break;
+ : default:
+ : return 0;
+ : }
+ : while (nformat--)
+ : {
+ : if (format->depth == depth && format->type == type)
+ : {
+ : if (type == PictTypeIndexed)
+ : {
+ : if (format->index.vid == pVisual->vid)
+ : return format;
+ : }
+ : else
+ : {
+ : if (format->direct.redMask << format->direct.red ==
+ : pVisual->redMask &&
+ : format->direct.greenMask << format->direct.green ==
+ : pVisual->greenMask &&
+ : format->direct.blueMask << format->direct.blue ==
+ : pVisual->blueMask)
+ : {
+ : return format;
+ : }
+ : }
+ : }
+ : format++;
+ : }
+ : return 0;
+ :}
+ :
+ :PictFormatPtr
+ :PictureMatchFormat (ScreenPtr pScreen, int depth, CARD32 f)
+ :{
+ : PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
+ : PictFormatPtr format;
+ : int nformat;
+ :
+ : if (!ps)
+ : return 0;
+ : format = ps->formats;
+ : nformat = ps->nformats;
+ : while (nformat--)
+ : {
+ : if (format->depth == depth && format->format == (f & 0xffffff))
+ : return format;
+ : format++;
+ : }
+ : return 0;
+ :}
+ :
+ :int
+ :PictureParseCmapPolicy (const char *name)
+ :{
+ : if ( strcmp (name, "default" ) == 0)
+ : return PictureCmapPolicyDefault;
+ : else if ( strcmp (name, "mono" ) == 0)
+ : return PictureCmapPolicyMono;
+ : else if ( strcmp (name, "gray" ) == 0)
+ : return PictureCmapPolicyGray;
+ : else if ( strcmp (name, "color" ) == 0)
+ : return PictureCmapPolicyColor;
+ : else if ( strcmp (name, "all" ) == 0)
+ : return PictureCmapPolicyAll;
+ : else
+ : return PictureCmapPolicyInvalid;
+ :}
+ :
+ :_X_EXPORT Bool
+ :PictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
+ :{
+ : PictureScreenPtr ps;
+ : int n;
+ : CARD32 type, a, r, g, b;
+ :
+ : if (PictureGeneration != serverGeneration)
+ : {
+ : PictureType = CreateNewResourceType (FreePicture);
+ : if (!PictureType)
+ : return FALSE;
+ : PictFormatType = CreateNewResourceType (FreePictFormat);
+ : if (!PictFormatType)
+ : return FALSE;
+ : GlyphSetType = CreateNewResourceType (FreeGlyphSet);
+ : if (!GlyphSetType)
+ : return FALSE;
+ : PictureScreenPrivateIndex = AllocateScreenPrivateIndex();
+ : if (PictureScreenPrivateIndex < 0)
+ : return FALSE;
+ : PictureWindowPrivateIndex = AllocateWindowPrivateIndex();
+ : PictureGeneration = serverGeneration;
+ :#ifdef XResExtension
+ : RegisterResourceName (PictureType, "PICTURE");
+ : RegisterResourceName (PictFormatType, "PICTFORMAT");
+ : RegisterResourceName (GlyphSetType, "GLYPHSET");
+ :#endif
+ : }
+ : if (!AllocateWindowPrivate (pScreen, PictureWindowPrivateIndex, 0))
+ : return FALSE;
+ :
+ : if (!formats)
+ : {
+ : formats = PictureCreateDefaultFormats (pScreen, &nformats);
+ : if (!formats)
+ : return FALSE;
+ : }
+ : for (n = 0; n < nformats; n++)
+ : {
+ : if (!AddResource (formats[n].id, PictFormatType, (pointer) (formats+n)))
+ : {
+ : xfree (formats);
+ : return FALSE;
+ : }
+ : if (formats[n].type == PictTypeIndexed)
+ : {
+ : VisualPtr pVisual = PictureFindVisual (pScreen, formats[n].index.vid);
+ : if ((pVisual->class | DynamicClass) == PseudoColor)
+ : type = PICT_TYPE_COLOR;
+ : else
+ : type = PICT_TYPE_GRAY;
+ : a = r = g = b = 0;
+ : }
+ : else
+ : {
+ : if ((formats[n].direct.redMask|
+ : formats[n].direct.blueMask|
+ : formats[n].direct.greenMask) == 0)
+ : type = PICT_TYPE_A;
+ : else if (formats[n].direct.red > formats[n].direct.blue)
+ : type = PICT_TYPE_ARGB;
+ : else
+ : type = PICT_TYPE_ABGR;
+ : a = Ones (formats[n].direct.alphaMask);
+ : r = Ones (formats[n].direct.redMask);
+ : g = Ones (formats[n].direct.greenMask);
+ : b = Ones (formats[n].direct.blueMask);
+ : }
+ : formats[n].format = PICT_FORMAT(0,type,a,r,g,b);
+ : }
+ : ps = (PictureScreenPtr) xalloc (sizeof (PictureScreenRec));
+ : if (!ps)
+ : {
+ : xfree (formats);
+ : return FALSE;
+ : }
+ : SetPictureScreen(pScreen, ps);
+ : if (!GlyphInit (pScreen))
+ : {
+ : SetPictureScreen(pScreen, 0);
+ : xfree (formats);
+ : xfree (ps);
+ : return FALSE;
+ : }
+ :
+ : ps->totalPictureSize = sizeof (PictureRec);
+ : ps->PicturePrivateSizes = 0;
+ : ps->PicturePrivateLen = 0;
+ :
+ : ps->formats = formats;
+ : ps->fallback = formats;
+ : ps->nformats = nformats;
+ :
+ : ps->filters = 0;
+ : ps->nfilters = 0;
+ : ps->filterAliases = 0;
+ : ps->nfilterAliases = 0;
+ :
+ : ps->subpixel = SubPixelUnknown;
+ :
+ : ps->CloseScreen = pScreen->CloseScreen;
+ : ps->DestroyWindow = pScreen->DestroyWindow;
+ : ps->StoreColors = pScreen->StoreColors;
+ : pScreen->DestroyWindow = PictureDestroyWindow;
+ : pScreen->CloseScreen = PictureCloseScreen;
+ : pScreen->StoreColors = PictureStoreColors;
+ :
+ : if (!PictureSetDefaultFilters (pScreen))
+ : {
+ : PictureResetFilters (pScreen);
+ : SetPictureScreen(pScreen, 0);
+ : xfree (formats);
+ : xfree (ps);
+ : return FALSE;
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :void
+ :SetPictureToDefaults (PicturePtr pPicture)
+ :{ /* SetPictureToDefaults total: 8 0.0087 */
+ : pPicture->refcnt = 1;
+ : pPicture->repeat = 0;
+ : pPicture->graphicsExposures = FALSE;
+ : pPicture->subWindowMode = ClipByChildren;
+ : pPicture->polyEdge = PolyEdgeSharp;
+ : pPicture->polyMode = PolyModePrecise;
+ : pPicture->freeCompClip = FALSE;
+ : pPicture->clientClipType = CT_NONE;
+ : pPicture->componentAlpha = FALSE;
+ : pPicture->repeatType = RepeatNone;
+ :
+ : pPicture->alphaMap = 0;
+ : pPicture->alphaOrigin.x = 0;
+ : pPicture->alphaOrigin.y = 0;
+ :
+ : pPicture->clipOrigin.x = 0;
+ 1 0.0011 : pPicture->clipOrigin.y = 0;
+ : pPicture->clientClip = 0;
+ :
+ : pPicture->transform = 0;
+ :
+ : pPicture->dither = None;
+ 4 0.0044 : pPicture->filter = PictureGetFilterId (FilterNearest, -1, TRUE);
+ : pPicture->filter_params = 0;
+ : pPicture->filter_nparams = 0;
+ :
+ : pPicture->serialNumber = GC_CHANGE_SERIAL_BIT;
+ 1 0.0011 : pPicture->stateChanges = (1 << (CPLastBit+1)) - 1;
+ 1 0.0011 : pPicture->pSourcePict = 0;
+ 1 0.0011 :}
+ :
+ :PicturePtr
+ :AllocatePicture (ScreenPtr pScreen)
+ :{ /* AllocatePicture total: 4 0.0044 */
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : PicturePtr pPicture;
+ : char *ptr;
+ : DevUnion *ppriv;
+ : unsigned int *sizes;
+ : unsigned int size;
+ : int i;
+ :
+ 3 0.0033 : pPicture = (PicturePtr) xalloc (ps->totalPictureSize);
+ : if (!pPicture)
+ : return 0;
+ : ppriv = (DevUnion *)(pPicture + 1);
+ : pPicture->devPrivates = ppriv;
+ : sizes = ps->PicturePrivateSizes;
+ : ptr = (char *)(ppriv + ps->PicturePrivateLen);
+ : for (i = ps->PicturePrivateLen; --i >= 0; ppriv++, sizes++)
+ : {
+ : if ( (size = *sizes) )
+ : {
+ : ppriv->ptr = (pointer)ptr;
+ : ptr += size;
+ : }
+ : else
+ : ppriv->ptr = (pointer)NULL;
+ : }
+ : return pPicture;
+ 1 0.0011 :}
+ :
+ :PicturePtr
+ :CreatePicture (Picture pid,
+ : DrawablePtr pDrawable,
+ : PictFormatPtr pFormat,
+ : Mask vmask,
+ : XID *vlist,
+ : ClientPtr client,
+ : int *error)
+ 2 0.0022 :{ /* CreatePicture total: 12 0.0131 */
+ : PicturePtr pPicture;
+ 2 0.0022 : PictureScreenPtr ps = GetPictureScreen(pDrawable->pScreen);
+ :
+ : pPicture = AllocatePicture (pDrawable->pScreen);
+ : if (!pPicture)
+ : {
+ : *error = BadAlloc;
+ : return 0;
+ : }
+ :
+ : pPicture->id = pid;
+ : pPicture->pDrawable = pDrawable;
+ : pPicture->pFormat = pFormat;
+ 1 0.0011 : pPicture->format = pFormat->format | (pDrawable->bitsPerPixel << 24);
+ 1 0.0011 : if (pDrawable->type == DRAWABLE_PIXMAP)
+ : {
+ : ++((PixmapPtr)pDrawable)->refcnt;
+ : pPicture->pNext = 0;
+ : }
+ : else
+ : {
+ : pPicture->pNext = GetPictureWindow(((WindowPtr) pDrawable));
+ : SetPictureWindow(((WindowPtr) pDrawable), pPicture);
+ : }
+ :
+ : SetPictureToDefaults (pPicture);
+ :
+ : if (vmask)
+ : *error = ChangePicture (pPicture, vmask, vlist, 0, client);
+ : else
+ : *error = Success;
+ : if (*error == Success)
+ 4 0.0044 : *error = (*ps->CreatePicture) (pPicture);
+ 1 0.0011 : if (*error != Success)
+ : {
+ : FreePicture (pPicture, (XID) 0);
+ : pPicture = 0;
+ : }
+ : return pPicture;
+ 1 0.0011 :}
+ :
+ :static CARD32 xRenderColorToCard32(xRenderColor c)
+ :{
+ : return
+ : (c.alpha >> 8 << 24) |
+ : (c.red >> 8 << 16) |
+ : (c.green & 0xff00) |
+ : (c.blue >> 8);
+ :}
+ :
+ :static unsigned int premultiply(unsigned int x)
+ :{
+ : unsigned int a = x >> 24;
+ : unsigned int t = (x & 0xff00ff) * a + 0x800080;
+ : t = (t + ((t >> 8) & 0xff00ff)) >> 8;
+ : t &= 0xff00ff;
+ :
+ : x = ((x >> 8) & 0xff) * a + 0x80;
+ : x = (x + ((x >> 8) & 0xff));
+ : x &= 0xff00;
+ : x |= t | (a << 24);
+ : return x;
+ :}
+ :
+ :static unsigned int INTERPOLATE_PIXEL_256(unsigned int x, unsigned int a,
+ : unsigned int y, unsigned int b)
+ :{
+ : CARD32 t = (x & 0xff00ff) * a + (y & 0xff00ff) * b;
+ : t >>= 8;
+ : t &= 0xff00ff;
+ :
+ : x = ((x >> 8) & 0xff00ff) * a + ((y >> 8) & 0xff00ff) * b;
+ : x &= 0xff00ff00;
+ : x |= t;
+ : return x;
+ :}
+ :
+ :CARD32
+ :PictureGradientColor (PictGradientStopPtr stop1,
+ : PictGradientStopPtr stop2,
+ : CARD32 x)
+ :{
+ : CARD32 current_color, next_color;
+ : int dist, idist;
+ :
+ : current_color = xRenderColorToCard32 (stop1->color);
+ : next_color = xRenderColorToCard32 (stop2->color);
+ :
+ : dist = (int) (256 * (x - stop1->x) / (stop2->x - stop1->x));
+ : idist = 256 - dist;
+ :
+ : return premultiply (INTERPOLATE_PIXEL_256 (current_color, idist,
+ : next_color, dist));
+ :}
+ :
+ :static void initGradient(SourcePictPtr pGradient, int stopCount,
+ : xFixed *stopPoints, xRenderColor *stopColors, int *error)
+ :{
+ : int i;
+ : xFixed dpos;
+ :
+ : if (stopCount <= 0) {
+ : *error = BadValue;
+ : return;
+ : }
+ :
+ : dpos = -1;
+ : for (i = 0; i < stopCount; ++i) {
+ : if (stopPoints[i] < dpos || stopPoints[i] > (1<<16)) {
+ : *error = BadValue;
+ : return;
+ : }
+ : dpos = stopPoints[i];
+ : }
+ :
+ : pGradient->gradient.stops = xalloc(stopCount*sizeof(PictGradientStop));
+ : if (!pGradient->gradient.stops) {
+ : *error = BadAlloc;
+ : return;
+ : }
+ :
+ : pGradient->gradient.nstops = stopCount;
+ :
+ : for (i = 0; i < stopCount; ++i) {
+ : pGradient->gradient.stops[i].x = stopPoints[i];
+ : pGradient->gradient.stops[i].color = stopColors[i];
+ : }
+ :
+ : pGradient->gradient.class = SourcePictClassUnknown;
+ : pGradient->gradient.stopRange = 0xffff;
+ : pGradient->gradient.colorTable = NULL;
+ : pGradient->gradient.colorTableSize = 0;
+ :}
+ :
+ :static PicturePtr createSourcePicture(void)
+ :{
+ : PicturePtr pPicture;
+ : pPicture = (PicturePtr) xalloc(sizeof(PictureRec));
+ : pPicture->pDrawable = 0;
+ : pPicture->pFormat = 0;
+ : pPicture->pNext = 0;
+ : pPicture->format = PICT_a8r8g8b8;
+ : pPicture->devPrivates = 0;
+ :
+ : SetPictureToDefaults(pPicture);
+ : return pPicture;
+ :}
+ :
+ :PicturePtr
+ :CreateSolidPicture (Picture pid, xRenderColor *color, int *error)
+ :{
+ : PicturePtr pPicture;
+ : pPicture = createSourcePicture();
+ : if (!pPicture) {
+ : *error = BadAlloc;
+ : return 0;
+ : }
+ :
+ : pPicture->id = pid;
+ : pPicture->pSourcePict = (SourcePictPtr) xalloc(sizeof(PictSolidFill));
+ : if (!pPicture->pSourcePict) {
+ : *error = BadAlloc;
+ : xfree(pPicture);
+ : return 0;
+ : }
+ : pPicture->pSourcePict->type = SourcePictTypeSolidFill;
+ : pPicture->pSourcePict->solidFill.color = xRenderColorToCard32(*color);
+ : return pPicture;
+ :}
+ :
+ :PicturePtr
+ :CreateLinearGradientPicture (Picture pid, xPointFixed *p1, xPointFixed *p2,
+ : int nStops, xFixed *stops, xRenderColor *colors, int *error)
+ :{
+ : PicturePtr pPicture;
+ :
+ : if (nStops < 2) {
+ : *error = BadValue;
+ : return 0;
+ : }
+ :
+ : pPicture = createSourcePicture();
+ : if (!pPicture) {
+ : *error = BadAlloc;
+ : return 0;
+ : }
+ :
+ : pPicture->id = pid;
+ : pPicture->pSourcePict = (SourcePictPtr) xalloc(sizeof(PictLinearGradient));
+ : if (!pPicture->pSourcePict) {
+ : *error = BadAlloc;
+ : xfree(pPicture);
+ : return 0;
+ : }
+ :
+ : pPicture->pSourcePict->linear.type = SourcePictTypeLinear;
+ : pPicture->pSourcePict->linear.p1 = *p1;
+ : pPicture->pSourcePict->linear.p2 = *p2;
+ :
+ : initGradient(pPicture->pSourcePict, nStops, stops, colors, error);
+ : if (*error) {
+ : xfree(pPicture);
+ : return 0;
+ : }
+ : return pPicture;
+ :}
+ :
+ :#define FixedToDouble(x) ((x)/65536.)
+ :
+ :PicturePtr
+ :CreateRadialGradientPicture (Picture pid, xPointFixed *inner, xPointFixed *outer,
+ : xFixed innerRadius, xFixed outerRadius,
+ : int nStops, xFixed *stops, xRenderColor *colors, int *error)
+ :{
+ : PicturePtr pPicture;
+ : PictRadialGradient *radial;
+ :
+ : if (nStops < 2) {
+ : *error = BadValue;
+ : return 0;
+ : }
+ :
+ : pPicture = createSourcePicture();
+ : if (!pPicture) {
+ : *error = BadAlloc;
+ : return 0;
+ : }
+ :
+ : pPicture->id = pid;
+ : pPicture->pSourcePict = (SourcePictPtr) xalloc(sizeof(PictRadialGradient));
+ : if (!pPicture->pSourcePict) {
+ : *error = BadAlloc;
+ : xfree(pPicture);
+ : return 0;
+ : }
+ : radial = &pPicture->pSourcePict->radial;
+ :
+ : radial->type = SourcePictTypeRadial;
+ : radial->c1.x = inner->x;
+ : radial->c1.y = inner->y;
+ : radial->c1.radius = innerRadius;
+ : radial->c2.x = outer->x;
+ : radial->c2.y = outer->y;
+ : radial->c2.radius = outerRadius;
+ : radial->cdx = (radial->c2.x - radial->c1.x) / 65536.;
+ : radial->cdy = (radial->c2.y - radial->c1.y) / 65536.;
+ : radial->dr = (radial->c2.radius - radial->c1.radius) / 65536.;
+ : radial->A = ( radial->cdx * radial->cdx
+ : + radial->cdy * radial->cdy
+ : - radial->dr * radial->dr);
+ :
+ : initGradient(pPicture->pSourcePict, nStops, stops, colors, error);
+ : if (*error) {
+ : xfree(pPicture);
+ : return 0;
+ : }
+ : return pPicture;
+ :}
+ :
+ :PicturePtr
+ :CreateConicalGradientPicture (Picture pid, xPointFixed *center, xFixed angle,
+ : int nStops, xFixed *stops, xRenderColor *colors, int *error)
+ :{
+ : PicturePtr pPicture;
+ :
+ : if (nStops < 2) {
+ : *error = BadValue;
+ : return 0;
+ : }
+ :
+ : pPicture = createSourcePicture();
+ : if (!pPicture) {
+ : *error = BadAlloc;
+ : return 0;
+ : }
+ :
+ : pPicture->id = pid;
+ : pPicture->pSourcePict = (SourcePictPtr) xalloc(sizeof(PictConicalGradient));
+ : if (!pPicture->pSourcePict) {
+ : *error = BadAlloc;
+ : xfree(pPicture);
+ : return 0;
+ : }
+ :
+ : pPicture->pSourcePict->conical.type = SourcePictTypeConical;
+ : pPicture->pSourcePict->conical.center = *center;
+ : pPicture->pSourcePict->conical.angle = angle;
+ :
+ : initGradient(pPicture->pSourcePict, nStops, stops, colors, error);
+ : if (*error) {
+ : xfree(pPicture);
+ : return 0;
+ : }
+ : return pPicture;
+ :}
+ :
+ :#define NEXT_VAL(_type) (vlist ? (_type) *vlist++ : (_type) ulist++->val)
+ :
+ :#define NEXT_PTR(_type) ((_type) ulist++->ptr)
+ :
+ :int
+ :ChangePicture (PicturePtr pPicture,
+ : Mask vmask,
+ : XID *vlist,
+ : DevUnion *ulist,
+ : ClientPtr client)
+ 4 0.0044 :{ /* ChangePicture total: 16 0.0174 */
+ : ScreenPtr pScreen = pPicture->pDrawable ? pPicture->pDrawable->pScreen : 0;
+ 4 0.0044 : PictureScreenPtr ps = pScreen ? GetPictureScreen(pScreen) : 0;
+ : BITS32 index2;
+ : int error = 0;
+ : BITS32 maskQ;
+ :
+ : pPicture->serialNumber |= GC_CHANGE_SERIAL_BIT;
+ : maskQ = vmask;
+ 1 0.0011 : while (vmask && !error)
+ : {
+ : index2 = (BITS32) lowbit (vmask);
+ 1 0.0011 : vmask &= ~index2;
+ : pPicture->stateChanges |= index2;
+ 1 0.0011 : switch (index2)
+ : {
+ : case CPRepeat:
+ : {
+ : unsigned int newr;
+ 1 0.0011 : newr = NEXT_VAL(unsigned int);
+ : if (newr <= RepeatReflect)
+ : {
+ 1 0.0011 : pPicture->repeat = (newr != RepeatNone);
+ 1 0.0011 : pPicture->repeatType = newr;
+ : }
+ : else
+ : {
+ : client->errorValue = newr;
+ : error = BadValue;
+ : }
+ : }
+ : break;
+ : case CPAlphaMap:
+ : {
+ : PicturePtr pAlpha;
+ :
+ : if (vlist)
+ : {
+ : Picture pid = NEXT_VAL(Picture);
+ :
+ : if (pid == None)
+ : pAlpha = 0;
+ : else
+ : {
+ : pAlpha = (PicturePtr) SecurityLookupIDByType(client,
+ : pid,
+ : PictureType,
+ : DixWriteAccess|DixReadAccess);
+ : if (!pAlpha)
+ : {
+ : client->errorValue = pid;
+ : error = BadPixmap;
+ : break;
+ : }
+ : if (pAlpha->pDrawable == NULL ||
+ : pAlpha->pDrawable->type != DRAWABLE_PIXMAP)
+ : {
+ : client->errorValue = pid;
+ : error = BadMatch;
+ : break;
+ : }
+ : }
+ : }
+ : else
+ : pAlpha = NEXT_PTR(PicturePtr);
+ : if (!error)
+ : {
+ : if (pAlpha && pAlpha->pDrawable->type == DRAWABLE_PIXMAP)
+ : pAlpha->refcnt++;
+ : if (pPicture->alphaMap)
+ : FreePicture ((pointer) pPicture->alphaMap, (XID) 0);
+ : pPicture->alphaMap = pAlpha;
+ : }
+ : }
+ : break;
+ : case CPAlphaXOrigin:
+ : pPicture->alphaOrigin.x = NEXT_VAL(INT16);
+ : break;
+ : case CPAlphaYOrigin:
+ : pPicture->alphaOrigin.y = NEXT_VAL(INT16);
+ : break;
+ : case CPClipXOrigin:
+ : pPicture->clipOrigin.x = NEXT_VAL(INT16);
+ : break;
+ : case CPClipYOrigin:
+ : pPicture->clipOrigin.y = NEXT_VAL(INT16);
+ : break;
+ : case CPClipMask:
+ : {
+ : Pixmap pid;
+ : PixmapPtr pPixmap;
+ : int clipType;
+ : if (!pScreen)
+ : return BadDrawable;
+ :
+ : if (vlist)
+ : {
+ : pid = NEXT_VAL(Pixmap);
+ : if (pid == None)
+ : {
+ : clipType = CT_NONE;
+ : pPixmap = NullPixmap;
+ : }
+ : else
+ : {
+ : clipType = CT_PIXMAP;
+ : pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
+ : pid,
+ : RT_PIXMAP,
+ : DixReadAccess);
+ : if (!pPixmap)
+ : {
+ : client->errorValue = pid;
+ : error = BadPixmap;
+ : break;
+ : }
+ : }
+ : }
+ : else
+ : {
+ : pPixmap = NEXT_PTR(PixmapPtr);
+ : if (pPixmap)
+ : clipType = CT_PIXMAP;
+ : else
+ : clipType = CT_NONE;
+ : }
+ :
+ : if (pPixmap)
+ : {
+ : if ((pPixmap->drawable.depth != 1) ||
+ : (pPixmap->drawable.pScreen != pScreen))
+ : {
+ : error = BadMatch;
+ : break;
+ : }
+ : else
+ : {
+ : clipType = CT_PIXMAP;
+ : pPixmap->refcnt++;
+ : }
+ : }
+ : error = (*ps->ChangePictureClip)(pPicture, clipType,
+ : (pointer)pPixmap, 0);
+ : break;
+ : }
+ : case CPGraphicsExposure:
+ : {
+ : unsigned int newe;
+ : newe = NEXT_VAL(unsigned int);
+ : if (newe <= xTrue)
+ : pPicture->graphicsExposures = newe;
+ : else
+ : {
+ : client->errorValue = newe;
+ : error = BadValue;
+ : }
+ : }
+ : break;
+ : case CPSubwindowMode:
+ : {
+ : unsigned int news;
+ : news = NEXT_VAL(unsigned int);
+ : if (news == ClipByChildren || news == IncludeInferiors)
+ : pPicture->subWindowMode = news;
+ : else
+ : {
+ : client->errorValue = news;
+ : error = BadValue;
+ : }
+ : }
+ : break;
+ : case CPPolyEdge:
+ : {
+ : unsigned int newe;
+ : newe = NEXT_VAL(unsigned int);
+ : if (newe == PolyEdgeSharp || newe == PolyEdgeSmooth)
+ : pPicture->polyEdge = newe;
+ : else
+ : {
+ : client->errorValue = newe;
+ : error = BadValue;
+ : }
+ : }
+ : break;
+ : case CPPolyMode:
+ : {
+ : unsigned int newm;
+ : newm = NEXT_VAL(unsigned int);
+ : if (newm == PolyModePrecise || newm == PolyModeImprecise)
+ : pPicture->polyMode = newm;
+ : else
+ : {
+ : client->errorValue = newm;
+ : error = BadValue;
+ : }
+ : }
+ : break;
+ : case CPDither:
+ : pPicture->dither = NEXT_VAL(Atom);
+ : break;
+ : case CPComponentAlpha:
+ : {
+ : unsigned int newca;
+ :
+ 1 0.0011 : newca = NEXT_VAL (unsigned int);
+ : if (newca <= xTrue)
+ : pPicture->componentAlpha = newca;
+ : else
+ : {
+ : client->errorValue = newca;
+ : error = BadValue;
+ : }
+ : }
+ : break;
+ : default:
+ : client->errorValue = maskQ;
+ : error = BadValue;
+ : break;
+ : }
+ : }
+ : if (ps)
+ : (*ps->ChangePicture) (pPicture, maskQ);
+ : return error;
+ 1 0.0011 :}
+ :
+ :int
+ :SetPictureClipRects (PicturePtr pPicture,
+ : int xOrigin,
+ : int yOrigin,
+ : int nRect,
+ : xRectangle *rects)
+ :{
+ : ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : RegionPtr clientClip;
+ : int result;
+ :
+ : clientClip = RECTS_TO_REGION(pScreen,
+ : nRect, rects, CT_UNSORTED);
+ : if (!clientClip)
+ : return BadAlloc;
+ : result =(*ps->ChangePictureClip) (pPicture, CT_REGION,
+ : (pointer) clientClip, 0);
+ : if (result == Success)
+ : {
+ : pPicture->clipOrigin.x = xOrigin;
+ : pPicture->clipOrigin.y = yOrigin;
+ : pPicture->stateChanges |= CPClipXOrigin|CPClipYOrigin|CPClipMask;
+ : pPicture->serialNumber |= GC_CHANGE_SERIAL_BIT;
+ : }
+ : return result;
+ :}
+ :
+ :int
+ :SetPictureClipRegion (PicturePtr pPicture,
+ : int xOrigin,
+ : int yOrigin,
+ : RegionPtr pRegion)
+ :{
+ : ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : RegionPtr clientClip;
+ : int result;
+ : int type;
+ :
+ : if (pRegion)
+ : {
+ : type = CT_REGION;
+ : clientClip = REGION_CREATE (pScreen,
+ : REGION_EXTENTS(pScreen, pRegion),
+ : REGION_NUM_RECTS(pRegion));
+ : if (!clientClip)
+ : return BadAlloc;
+ : if (!REGION_COPY (pSCreen, clientClip, pRegion))
+ : {
+ : REGION_DESTROY (pScreen, clientClip);
+ : return BadAlloc;
+ : }
+ : }
+ : else
+ : {
+ : type = CT_NONE;
+ : clientClip = 0;
+ : }
+ :
+ : result =(*ps->ChangePictureClip) (pPicture, type,
+ : (pointer) clientClip, 0);
+ : if (result == Success)
+ : {
+ : pPicture->clipOrigin.x = xOrigin;
+ : pPicture->clipOrigin.y = yOrigin;
+ : pPicture->stateChanges |= CPClipXOrigin|CPClipYOrigin|CPClipMask;
+ : pPicture->serialNumber |= GC_CHANGE_SERIAL_BIT;
+ : }
+ : return result;
+ :}
+ :
+ :static Bool
+ :transformIsIdentity(PictTransform *t)
+ :{
+ : return ((t->matrix[0][0] == t->matrix[1][1]) &&
+ : (t->matrix[0][0] == t->matrix[2][2]) &&
+ : (t->matrix[0][0] != 0) &&
+ : (t->matrix[0][1] == 0) &&
+ : (t->matrix[0][2] == 0) &&
+ : (t->matrix[1][0] == 0) &&
+ : (t->matrix[1][2] == 0) &&
+ : (t->matrix[2][0] == 0) &&
+ : (t->matrix[2][1] == 0));
+ :}
+ :
+ :int
+ :SetPictureTransform (PicturePtr pPicture,
+ : PictTransform *transform)
+ 2 0.0022 :{ /* SetPictureTransform total: 10 0.0109 */
+ : if (transform && transformIsIdentity (transform))
+ : transform = 0;
+ :
+ : if (transform)
+ : {
+ : if (!pPicture->transform)
+ : {
+ : pPicture->transform = (PictTransform *) xalloc (sizeof (PictTransform));
+ : if (!pPicture->transform)
+ : return BadAlloc;
+ : }
+ : *pPicture->transform = *transform;
+ : }
+ : else
+ : {
+ : if (pPicture->transform)
+ : {
+ : xfree (pPicture->transform);
+ : pPicture->transform = 0;
+ : }
+ : }
+ : pPicture->serialNumber |= GC_CHANGE_SERIAL_BIT;
+ :
+ 5 0.0054 : if (pPicture->pDrawable != NULL) {
+ : int result;
+ : PictureScreenPtr ps = GetPictureScreen(pPicture->pDrawable->pScreen);
+ :
+ 1 0.0011 : result = (*ps->ChangePictureTransform) (pPicture, transform);
+ :
+ : return result;
+ : }
+ :
+ : return Success;
+ :}
+ :
+ :void
+ :CopyPicture (PicturePtr pSrc,
+ : Mask mask,
+ : PicturePtr pDst)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pSrc->pDrawable->pScreen);
+ : Mask origMask = mask;
+ :
+ : pDst->serialNumber |= GC_CHANGE_SERIAL_BIT;
+ : pDst->stateChanges |= mask;
+ :
+ : while (mask) {
+ : Mask bit = lowbit(mask);
+ :
+ : switch (bit)
+ : {
+ : case CPRepeat:
+ : pDst->repeat = pSrc->repeat;
+ : pDst->repeatType = pSrc->repeatType;
+ : break;
+ : case CPAlphaMap:
+ : if (pSrc->alphaMap && pSrc->alphaMap->pDrawable->type == DRAWABLE_PIXMAP)
+ : pSrc->alphaMap->refcnt++;
+ : if (pDst->alphaMap)
+ : FreePicture ((pointer) pDst->alphaMap, (XID) 0);
+ : pDst->alphaMap = pSrc->alphaMap;
+ : break;
+ : case CPAlphaXOrigin:
+ : pDst->alphaOrigin.x = pSrc->alphaOrigin.x;
+ : break;
+ : case CPAlphaYOrigin:
+ : pDst->alphaOrigin.y = pSrc->alphaOrigin.y;
+ : break;
+ : case CPClipXOrigin:
+ : pDst->clipOrigin.x = pSrc->clipOrigin.x;
+ : break;
+ : case CPClipYOrigin:
+ : pDst->clipOrigin.y = pSrc->clipOrigin.y;
+ : break;
+ : case CPClipMask:
+ : switch (pSrc->clientClipType) {
+ : case CT_NONE:
+ : (*ps->ChangePictureClip)(pDst, CT_NONE, NULL, 0);
+ : break;
+ : case CT_REGION:
+ : if (!pSrc->clientClip) {
+ : (*ps->ChangePictureClip)(pDst, CT_NONE, NULL, 0);
+ : } else {
+ : RegionPtr clientClip;
+ : RegionPtr srcClientClip = (RegionPtr)pSrc->clientClip;
+ :
+ : clientClip = REGION_CREATE(pSrc->pDrawable->pScreen,
+ : REGION_EXTENTS(pSrc->pDrawable->pScreen, srcClientClip),
+ : REGION_NUM_RECTS(srcClientClip));
+ : (*ps->ChangePictureClip)(pDst, CT_REGION, clientClip, 0);
+ : }
+ : break;
+ : default:
+ : /* XXX: CT_PIXMAP unimplemented */
+ : break;
+ : }
+ : break;
+ : case CPGraphicsExposure:
+ : pDst->graphicsExposures = pSrc->graphicsExposures;
+ : break;
+ : case CPPolyEdge:
+ : pDst->polyEdge = pSrc->polyEdge;
+ : break;
+ : case CPPolyMode:
+ : pDst->polyMode = pSrc->polyMode;
+ : break;
+ : case CPDither:
+ : pDst->dither = pSrc->dither;
+ : break;
+ : case CPComponentAlpha:
+ : pDst->componentAlpha = pSrc->componentAlpha;
+ : break;
+ : }
+ : mask &= ~bit;
+ : }
+ :
+ : (*ps->ChangePicture)(pDst, origMask);
+ :}
+ :
+ :static void
+ :ValidateOnePicture (PicturePtr pPicture)
+ 5 0.0054 :{ /* ValidateOnePicture total: 10 0.0109 */
+ 1 0.0011 : if (pPicture->pDrawable && pPicture->serialNumber != pPicture->pDrawable->serialNumber)
+ : {
+ : PictureScreenPtr ps = GetPictureScreen(pPicture->pDrawable->pScreen);
+ :
+ 4 0.0044 : (*ps->ValidatePicture) (pPicture, pPicture->stateChanges);
+ : pPicture->stateChanges = 0;
+ : pPicture->serialNumber = pPicture->pDrawable->serialNumber;
+ : }
+ :}
+ :
+ :void
+ :ValidatePicture(PicturePtr pPicture)
+ 1 0.0011 :{ /* ValidatePicture total: 3 0.0033 */
+ : ValidateOnePicture (pPicture);
+ 1 0.0011 : if (pPicture->alphaMap)
+ : ValidateOnePicture (pPicture->alphaMap);
+ 1 0.0011 :}
+ :
+ :int
+ :FreePicture (pointer value,
+ : XID pid)
+ 3 0.0033 :{ /* FreePicture total: 8 0.0087 */
+ : PicturePtr pPicture = (PicturePtr) value;
+ :
+ 2 0.0022 : if (--pPicture->refcnt == 0)
+ : {
+ : if (pPicture->transform)
+ : xfree (pPicture->transform);
+ :
+ : if (pPicture->pSourcePict)
+ : {
+ : if (pPicture->pSourcePict->type != SourcePictTypeSolidFill)
+ : xfree(pPicture->pSourcePict->linear.stops);
+ :
+ : xfree(pPicture->pSourcePict);
+ : }
+ :
+ : if (pPicture->pDrawable)
+ : {
+ : ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ 2 0.0022 : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ :
+ : if (pPicture->alphaMap)
+ : FreePicture ((pointer) pPicture->alphaMap, (XID) 0);
+ : (*ps->DestroyPicture) (pPicture);
+ : (*ps->DestroyPictureClip) (pPicture);
+ : if (pPicture->pDrawable->type == DRAWABLE_WINDOW)
+ : {
+ : WindowPtr pWindow = (WindowPtr) pPicture->pDrawable;
+ : PicturePtr *pPrev;
+ :
+ : for (pPrev = (PicturePtr *) &((pWindow)->devPrivates[PictureWindowPrivateIndex].ptr);
+ : *pPrev;
+ : pPrev = &(*pPrev)->pNext)
+ : {
+ : if (*pPrev == pPicture)
+ : {
+ : *pPrev = pPicture->pNext;
+ : break;
+ : }
+ : }
+ : }
+ 1 0.0011 : else if (pPicture->pDrawable->type == DRAWABLE_PIXMAP)
+ : {
+ : (*pScreen->DestroyPixmap) ((PixmapPtr)pPicture->pDrawable);
+ : }
+ : }
+ : xfree (pPicture);
+ : }
+ : return Success;
+ :}
+ :
+ :int
+ :FreePictFormat (pointer pPictFormat,
+ : XID pid)
+ :{
+ : return Success;
+ :}
+ :
+ :/**
+ : * ReduceCompositeOp is used to choose simpler ops for cases where alpha
+ : * channels are always one and so math on the alpha channel per pixel becomes
+ : * unnecessary. It may also avoid destination reads sometimes if apps aren't
+ : * being careful to avoid these cases.
+ : */
+ :static Bool
+ :ReduceCompositeOp (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst)
+ :{
+ : Bool no_src_alpha, no_dst_alpha;
+ :
+ : no_src_alpha = PICT_FORMAT_COLOR(pSrc->format) &&
+ : PICT_FORMAT_A(pSrc->format) == 0 &&
+ : pSrc->alphaMap == NULL &&
+ : pMask == NULL;
+ : no_dst_alpha = PICT_FORMAT_COLOR(pDst->format) &&
+ : PICT_FORMAT_A(pDst->format) == 0 &&
+ : pDst->alphaMap == NULL;
+ :
+ : /* TODO, maybe: Conjoint and Disjoint op reductions? */
+ :
+ : /* Deal with simplifications where the source alpha is always 1. */
+ : if (no_src_alpha)
+ : {
+ : switch (op) {
+ : case PictOpOver:
+ : op = PictOpSrc;
+ : break;
+ : case PictOpInReverse:
+ : op = PictOpDst;
+ : break;
+ : case PictOpOutReverse:
+ : op = PictOpClear;
+ : break;
+ : case PictOpAtop:
+ : op = PictOpIn;
+ : break;
+ : case PictOpAtopReverse:
+ : op = PictOpOverReverse;
+ : break;
+ : case PictOpXor:
+ : op = PictOpOut;
+ : break;
+ : default:
+ : break;
+ : }
+ : }
+ :
+ : /* Deal with simplifications when the destination alpha is always 1 */
+ : if (no_dst_alpha)
+ : {
+ : switch (op) {
+ : case PictOpOverReverse:
+ : op = PictOpDst;
+ : break;
+ : case PictOpIn:
+ : op = PictOpSrc;
+ : break;
+ : case PictOpOut:
+ : op = PictOpClear;
+ : break;
+ : case PictOpAtop:
+ : op = PictOpOver;
+ : break;
+ : case PictOpXor:
+ : op = PictOpOutReverse;
+ : break;
+ : default:
+ : break;
+ : }
+ : }
+ :
+ : /* Reduce some con/disjoint ops to the basic names. */
+ : switch (op) {
+ : case PictOpDisjointClear:
+ : case PictOpConjointClear:
+ : op = PictOpClear;
+ : break;
+ : case PictOpDisjointSrc:
+ : case PictOpConjointSrc:
+ : op = PictOpSrc;
+ : break;
+ : case PictOpDisjointDst:
+ : case PictOpConjointDst:
+ : op = PictOpDst;
+ : break;
+ : default:
+ : break;
+ : }
+ :
+ : return op;
+ :}
+ :
+ :void
+ :CompositePicture (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pMask,
+ : PicturePtr pDst,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : INT16 xMask,
+ : INT16 yMask,
+ : INT16 xDst,
+ : INT16 yDst,
+ : CARD16 width,
+ : CARD16 height)
+ 1 0.0011 :{ /* CompositePicture total: 4 0.0044 */
+ : PictureScreenPtr ps = GetPictureScreen(pDst->pDrawable->pScreen);
+ :
+ : ValidatePicture (pSrc);
+ : if (pMask)
+ : ValidatePicture (pMask);
+ 2 0.0022 : ValidatePicture (pDst);
+ :
+ : op = ReduceCompositeOp (op, pSrc, pMask, pDst);
+ : if (op == PictOpDst)
+ : return;
+ :
+ : (*ps->Composite) (op,
+ : pSrc,
+ : pMask,
+ : pDst,
+ : xSrc,
+ : ySrc,
+ : xMask,
+ : yMask,
+ : xDst,
+ : yDst,
+ : width,
+ : height);
+ :}
+ :
+ :void
+ :CompositeGlyphs (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pDst,
+ : PictFormatPtr maskFormat,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : int nlist,
+ : GlyphListPtr lists,
+ : GlyphPtr *glyphs)
+ 1 0.0011 :{ /* CompositeGlyphs total: 1 0.0011 */
+ : PictureScreenPtr ps = GetPictureScreen(pDst->pDrawable->pScreen);
+ :
+ : ValidatePicture (pSrc);
+ : ValidatePicture (pDst);
+ : (*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, lists, glyphs);
+ :}
+ :
+ :void
+ :CompositeRects (CARD8 op,
+ : PicturePtr pDst,
+ : xRenderColor *color,
+ : int nRect,
+ : xRectangle *rects)
+ :{ /* CompositeRects total: 1 0.0011 */
+ 1 0.0011 : PictureScreenPtr ps = GetPictureScreen(pDst->pDrawable->pScreen);
+ :
+ : ValidatePicture (pDst);
+ : (*ps->CompositeRects) (op, pDst, color, nRect, rects);
+ :}
+ :
+ :void
+ :CompositeTrapezoids (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pDst,
+ : PictFormatPtr maskFormat,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : int ntrap,
+ : xTrapezoid *traps)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pDst->pDrawable->pScreen);
+ :
+ : ValidatePicture (pSrc);
+ : ValidatePicture (pDst);
+ : (*ps->Trapezoids) (op, pSrc, pDst, maskFormat, xSrc, ySrc, ntrap, traps);
+ :}
+ :
+ :void
+ :CompositeTriangles (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pDst,
+ : PictFormatPtr maskFormat,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : int ntriangles,
+ : xTriangle *triangles)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pDst->pDrawable->pScreen);
+ :
+ : ValidatePicture (pSrc);
+ : ValidatePicture (pDst);
+ : (*ps->Triangles) (op, pSrc, pDst, maskFormat, xSrc, ySrc, ntriangles, triangles);
+ :}
+ :
+ :void
+ :CompositeTriStrip (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pDst,
+ : PictFormatPtr maskFormat,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : int npoints,
+ : xPointFixed *points)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pDst->pDrawable->pScreen);
+ :
+ : ValidatePicture (pSrc);
+ : ValidatePicture (pDst);
+ : (*ps->TriStrip) (op, pSrc, pDst, maskFormat, xSrc, ySrc, npoints, points);
+ :}
+ :
+ :void
+ :CompositeTriFan (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pDst,
+ : PictFormatPtr maskFormat,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : int npoints,
+ : xPointFixed *points)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pDst->pDrawable->pScreen);
+ :
+ : ValidatePicture (pSrc);
+ : ValidatePicture (pDst);
+ : (*ps->TriFan) (op, pSrc, pDst, maskFormat, xSrc, ySrc, npoints, points);
+ :}
+ :
+ :void
+ :AddTraps (PicturePtr pPicture,
+ : INT16 xOff,
+ : INT16 yOff,
+ : int ntrap,
+ : xTrap *traps)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pPicture->pDrawable->pScreen);
+ :
+ : ValidatePicture (pPicture);
+ : (*ps->AddTraps) (pPicture, xOff, yOff, ntrap, traps);
+ :}
+ :
+ :_X_EXPORT Bool
+ :PictureTransformPoint3d (PictTransformPtr transform,
+ : PictVectorPtr vector)
+ :{
+ : PictVector result;
+ : int i, j;
+ : xFixed_32_32 partial;
+ : xFixed_48_16 v;
+ :
+ : for (j = 0; j < 3; j++)
+ : {
+ : v = 0;
+ : for (i = 0; i < 3; i++)
+ : {
+ : partial = ((xFixed_48_16) transform->matrix[j][i] *
+ : (xFixed_48_16) vector->vector[i]);
+ : v += partial >> 16;
+ : }
+ : if (v > MAX_FIXED_48_16 || v < MIN_FIXED_48_16)
+ : return FALSE;
+ : result.vector[j] = (xFixed) v;
+ : }
+ : if (!result.vector[2])
+ : return FALSE;
+ : *vector = result;
+ : return TRUE;
+ :}
+ :
+ :
+ :_X_EXPORT Bool
+ :PictureTransformPoint (PictTransformPtr transform,
+ : PictVectorPtr vector)
+ :{
+ : PictVector result;
+ : int i, j;
+ : xFixed_32_32 partial;
+ : xFixed_48_16 v;
+ :
+ : for (j = 0; j < 3; j++)
+ : {
+ : v = 0;
+ : for (i = 0; i < 3; i++)
+ : {
+ : partial = ((xFixed_48_16) transform->matrix[j][i] *
+ : (xFixed_48_16) vector->vector[i]);
+ : v += partial >> 16;
+ : }
+ : if (v > MAX_FIXED_48_16 || v < MIN_FIXED_48_16)
+ : return FALSE;
+ : result.vector[j] = (xFixed) v;
+ : }
+ : if (!result.vector[2])
+ : return FALSE;
+ : for (j = 0; j < 2; j++)
+ : {
+ : partial = (xFixed_48_16) result.vector[j] << 16;
+ : v = partial / result.vector[2];
+ : if (v > MAX_FIXED_48_16 || v < MIN_FIXED_48_16)
+ : return FALSE;
+ : vector->vector[j] = (xFixed) v;
+ : }
+ : vector->vector[2] = xFixed1;
+ : return TRUE;
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/mi/miscrinit.c"
+ *
+ * 66 0.0719
+ */
+
+
+ :/*
+ :
+ :Copyright 1990, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included
+ :in all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ :OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ :MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ :IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ :OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ :ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ :OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall
+ :not be used in advertising or otherwise to promote the sale, use or
+ :other dealings in this Software without prior written authorization
+ :from The Open Group.
+ :
+ :*/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <X11/X.h>
+ :#include "servermd.h"
+ :#include "misc.h"
+ :#include "mi.h"
+ :#include "scrnintstr.h"
+ :#include "pixmapstr.h"
+ :#include "dix.h"
+ :#include "miline.h"
+ :#ifdef MITSHM
+ :#define _XSHM_SERVER_
+ :#include <X11/extensions/XShm.h>
+ :#endif
+ :
+ :/* We use this structure to propogate some information from miScreenInit to
+ : * miCreateScreenResources. miScreenInit allocates the structure, fills it
+ : * in, and puts it into pScreen->devPrivate. miCreateScreenResources
+ : * extracts the info and frees the structure. We could've accomplished the
+ : * same thing by adding fields to the screen structure, but they would have
+ : * ended up being redundant, and would have exposed this mi implementation
+ : * detail to the whole server.
+ : */
+ :
+ :typedef struct
+ :{
+ : pointer pbits; /* pointer to framebuffer */
+ : int width; /* delta to add to a framebuffer addr to move one row down */
+ :} miScreenInitParmsRec, *miScreenInitParmsPtr;
+ :
+ :
+ :/* this plugs into pScreen->ModifyPixmapHeader */
+ :_X_EXPORT Bool
+ :miModifyPixmapHeader(pPixmap, width, height, depth, bitsPerPixel, devKind,
+ : pPixData)
+ : PixmapPtr pPixmap;
+ : int width;
+ : int height;
+ : int depth;
+ : int bitsPerPixel;
+ : int devKind;
+ : pointer pPixData;
+ 12 0.0131 :{ /* miModifyPixmapHeader total: 66 0.0719 */
+ 2 0.0022 : if (!pPixmap)
+ : return FALSE;
+ :
+ : /*
+ : * If all arguments are specified, reinitialize everything (including
+ : * validated state).
+ : */
+ 7 0.0076 : if ((width > 0) && (height > 0) && (depth > 0) && (bitsPerPixel > 0) &&
+ : (devKind > 0) && pPixData) {
+ : pPixmap->drawable.depth = depth;
+ : pPixmap->drawable.bitsPerPixel = bitsPerPixel;
+ : pPixmap->drawable.id = 0;
+ : pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ : pPixmap->drawable.x = 0;
+ : pPixmap->drawable.y = 0;
+ : pPixmap->drawable.width = width;
+ : pPixmap->drawable.height = height;
+ : pPixmap->devKind = devKind;
+ : pPixmap->refcnt = 1;
+ : pPixmap->devPrivate.ptr = pPixData;
+ : } else {
+ : /*
+ : * Only modify specified fields, keeping all others intact.
+ : */
+ :
+ 3 0.0033 : if (width > 0)
+ : pPixmap->drawable.width = width;
+ :
+ 5 0.0054 : if (height > 0)
+ 1 0.0011 : pPixmap->drawable.height = height;
+ :
+ 1 0.0011 : if (depth > 0)
+ : pPixmap->drawable.depth = depth;
+ :
+ 8 0.0087 : if (bitsPerPixel > 0)
+ : pPixmap->drawable.bitsPerPixel = bitsPerPixel;
+ 1 0.0011 : else if ((bitsPerPixel < 0) && (depth > 0))
+ : pPixmap->drawable.bitsPerPixel = BitsPerPixel(depth);
+ :
+ : /*
+ : * CAVEAT: Non-SI DDXen may use devKind and devPrivate fields for
+ : * other purposes.
+ : */
+ 1 0.0011 : if (devKind > 0)
+ : pPixmap->devKind = devKind;
+ : else if ((devKind < 0) && ((width > 0) || (depth > 0)))
+ 14 0.0153 : pPixmap->devKind = PixmapBytePad(pPixmap->drawable.width,
+ : pPixmap->drawable.depth);
+ :
+ 4 0.0044 : if (pPixData)
+ 2 0.0022 : pPixmap->devPrivate.ptr = pPixData;
+ : }
+ : return TRUE;
+ 5 0.0054 :}
+ :
+ :static Bool
+ :miCloseScreen (int iScreen, ScreenPtr pScreen)
+ :{
+ : return ((*pScreen->DestroyPixmap)((PixmapPtr)pScreen->devPrivate));
+ :}
+ :
+ :/* With the introduction of pixmap privates, the "screen pixmap" can no
+ : * longer be created in miScreenInit, since all the modules that could
+ : * possibly ask for pixmap private space have not been initialized at
+ : * that time. pScreen->CreateScreenResources is called after all
+ : * possible private-requesting modules have been inited; we create the
+ : * screen pixmap here.
+ : */
+ :_X_EXPORT Bool
+ :miCreateScreenResources(pScreen)
+ : ScreenPtr pScreen;
+ :{
+ : miScreenInitParmsPtr pScrInitParms;
+ : pointer value;
+ :
+ : pScrInitParms = (miScreenInitParmsPtr)pScreen->devPrivate;
+ :
+ : /* if width is non-zero, pScreen->devPrivate will be a pixmap
+ : * else it will just take the value pbits
+ : */
+ : if (pScrInitParms->width)
+ : {
+ : PixmapPtr pPixmap;
+ :
+ : /* create a pixmap with no data, then redirect it to point to
+ : * the screen
+ : */
+ : pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0, pScreen->rootDepth);
+ : if (!pPixmap)
+ : return FALSE;
+ :
+ : if (!(*pScreen->ModifyPixmapHeader)(pPixmap, pScreen->width,
+ : pScreen->height, pScreen->rootDepth,
+ : BitsPerPixel(pScreen->rootDepth),
+ : PixmapBytePad(pScrInitParms->width, pScreen->rootDepth),
+ : pScrInitParms->pbits))
+ : return FALSE;
+ : value = (pointer)pPixmap;
+ : }
+ : else
+ : {
+ : value = pScrInitParms->pbits;
+ : }
+ : xfree(pScreen->devPrivate); /* freeing miScreenInitParmsRec */
+ : pScreen->devPrivate = value; /* pPixmap or pbits */
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :miScreenDevPrivateInit(pScreen, width, pbits)
+ : ScreenPtr pScreen;
+ : int width;
+ : pointer pbits;
+ :{
+ : miScreenInitParmsPtr pScrInitParms;
+ :
+ : /* Stash pbits and width in a short-lived miScreenInitParmsRec attached
+ : * to the screen, until CreateScreenResources can put them in the
+ : * screen pixmap.
+ : */
+ : pScrInitParms = (miScreenInitParmsPtr)xalloc(sizeof(miScreenInitParmsRec));
+ : if (!pScrInitParms)
+ : return FALSE;
+ : pScrInitParms->pbits = pbits;
+ : pScrInitParms->width = width;
+ : pScreen->devPrivate = (pointer)pScrInitParms;
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :miScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width,
+ : rootDepth, numDepths, depths, rootVisual, numVisuals, visuals)
+ : ScreenPtr pScreen;
+ : pointer pbits; /* pointer to screen bits */
+ : int xsize, ysize; /* in pixels */
+ : int dpix, dpiy; /* dots per inch */
+ : int width; /* pixel width of frame buffer */
+ : int rootDepth; /* depth of root window */
+ : int numDepths; /* number of depths supported */
+ : DepthRec *depths; /* supported depths */
+ : VisualID rootVisual; /* root visual */
+ : int numVisuals; /* number of visuals supported */
+ : VisualRec *visuals; /* supported visuals */
+ :{
+ : pScreen->width = xsize;
+ : pScreen->height = ysize;
+ : pScreen->mmWidth = (xsize * 254 + dpix * 5) / (dpix * 10);
+ : pScreen->mmHeight = (ysize * 254 + dpiy * 5) / (dpiy * 10);
+ : pScreen->numDepths = numDepths;
+ : pScreen->rootDepth = rootDepth;
+ : pScreen->allowedDepths = depths;
+ : pScreen->rootVisual = rootVisual;
+ : /* defColormap */
+ : pScreen->minInstalledCmaps = 1;
+ : pScreen->maxInstalledCmaps = 1;
+ : pScreen->backingStoreSupport = NotUseful;
+ : pScreen->saveUnderSupport = NotUseful;
+ : /* whitePixel, blackPixel */
+ : pScreen->ModifyPixmapHeader = miModifyPixmapHeader;
+ : pScreen->CreateScreenResources = miCreateScreenResources;
+ : pScreen->GetScreenPixmap = miGetScreenPixmap;
+ : pScreen->SetScreenPixmap = miSetScreenPixmap;
+ : pScreen->numVisuals = numVisuals;
+ : pScreen->visuals = visuals;
+ : if (width)
+ : {
+ :#ifdef MITSHM
+ : ShmRegisterFbFuncs(pScreen);
+ :#endif
+ : pScreen->CloseScreen = miCloseScreen;
+ : }
+ : /* else CloseScreen */
+ : /* QueryBestSize, SaveScreen, GetImage, GetSpans */
+ : pScreen->PointerNonInterestBox = (PointerNonInterestBoxProcPtr) 0;
+ : pScreen->SourceValidate = (SourceValidateProcPtr) 0;
+ : /* CreateWindow, DestroyWindow, PositionWindow, ChangeWindowAttributes */
+ : /* RealizeWindow, UnrealizeWindow */
+ : pScreen->ValidateTree = miValidateTree;
+ : pScreen->PostValidateTree = (PostValidateTreeProcPtr) 0;
+ : pScreen->WindowExposures = miWindowExposures;
+ : /* PaintWindowBackground, PaintWindowBorder, CopyWindow */
+ : pScreen->ClearToBackground = miClearToBackground;
+ : pScreen->ClipNotify = (ClipNotifyProcPtr) 0;
+ : pScreen->RestackWindow = (RestackWindowProcPtr) 0;
+ : /* CreatePixmap, DestroyPixmap */
+ : /* RealizeFont, UnrealizeFont */
+ : /* CreateGC */
+ : /* CreateColormap, DestroyColormap, InstallColormap, UninstallColormap */
+ : /* ListInstalledColormaps, StoreColors, ResolveColor */
+ : /* BitmapToRegion */
+ : pScreen->SendGraphicsExpose = miSendGraphicsExpose;
+ : pScreen->BlockHandler = (ScreenBlockHandlerProcPtr)NoopDDA;
+ : pScreen->WakeupHandler = (ScreenWakeupHandlerProcPtr)NoopDDA;
+ : pScreen->blockData = (pointer)0;
+ : pScreen->wakeupData = (pointer)0;
+ : pScreen->MarkWindow = miMarkWindow;
+ : pScreen->MarkOverlappedWindows = miMarkOverlappedWindows;
+ : pScreen->ChangeSaveUnder = miChangeSaveUnder;
+ : pScreen->PostChangeSaveUnder = miPostChangeSaveUnder;
+ : pScreen->MoveWindow = miMoveWindow;
+ : pScreen->ResizeWindow = miSlideAndSizeWindow;
+ : pScreen->GetLayerWindow = miGetLayerWindow;
+ : pScreen->HandleExposures = miHandleValidateExposures;
+ : pScreen->ReparentWindow = (ReparentWindowProcPtr) 0;
+ : pScreen->ChangeBorderWidth = miChangeBorderWidth;
+ :#ifdef SHAPE
+ : pScreen->SetShape = miSetShape;
+ :#endif
+ : pScreen->MarkUnrealizedWindow = miMarkUnrealizedWindow;
+ :
+ : pScreen->SaveDoomedAreas = 0;
+ : pScreen->RestoreAreas = 0;
+ : pScreen->ExposeCopy = 0;
+ : pScreen->TranslateBackingStore = 0;
+ : pScreen->ClearBackingStore = 0;
+ : pScreen->DrawGuarantee = 0;
+ :
+ : miSetZeroLineBias(pScreen, DEFAULTZEROLINEBIAS);
+ :
+ : return miScreenDevPrivateInit(pScreen, width, pbits);
+ :}
+ :
+ :_X_EXPORT int
+ :miAllocateGCPrivateIndex()
+ :{
+ : static int privateIndex = -1;
+ : static unsigned long miGeneration = 0;
+ :
+ : if (miGeneration != serverGeneration)
+ : {
+ : privateIndex = AllocateGCPrivateIndex();
+ : miGeneration = serverGeneration;
+ : }
+ : return privateIndex;
+ :}
+ :
+ :_X_EXPORT int miZeroLineScreenIndex;
+ :static unsigned int miZeroLineGeneration = 0;
+ :
+ :_X_EXPORT void
+ :miSetZeroLineBias(pScreen, bias)
+ : ScreenPtr pScreen;
+ : unsigned int bias;
+ :{
+ : if (miZeroLineGeneration != serverGeneration)
+ : {
+ : miZeroLineScreenIndex = AllocateScreenPrivateIndex();
+ : miZeroLineGeneration = serverGeneration;
+ : }
+ : if (miZeroLineScreenIndex >= 0)
+ : pScreen->devPrivates[miZeroLineScreenIndex].uval = bias;
+ :}
+ :
+ :_X_EXPORT PixmapPtr
+ :miGetScreenPixmap(pScreen)
+ : ScreenPtr pScreen;
+ :{
+ : return (PixmapPtr)(pScreen->devPrivate);
+ :}
+ :
+ :_X_EXPORT void
+ :miSetScreenPixmap(pPix)
+ : PixmapPtr pPix;
+ :{
+ : if (pPix)
+ : pPix->drawable.pScreen->devPrivate = (pointer)pPix;
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/mi/miregion.c"
+ *
+ * 66 0.0719
+ */
+
+
+ :/***********************************************************
+ :
+ :Copyright 1987, 1988, 1989, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :
+ :Copyright 1987, 1988, 1989 by
+ :Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 Digital not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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.
+ :
+ :******************************************************************/
+ :
+ :/* The panoramix components contained the following notice */
+ :/*****************************************************************
+ :
+ :Copyright (c) 1991, 1997 Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ :Permission is hereby granted, free of charge, to any person obtaining a copy
+ :of this software and associated documentation files (the "Software"), to deal
+ :in the Software without restriction, including without limitation the rights
+ :to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ :copies of the Software.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ :DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING,
+ :BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY,
+ :WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+ :IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of Digital Equipment Corporation
+ :shall not be used in advertising or otherwise to promote the sale, use or other
+ :dealings in this Software without prior written authorization from Digital
+ :Equipment Corporation.
+ :
+ :******************************************************************/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "regionstr.h"
+ :#include <X11/Xprotostr.h>
+ :#include <X11/Xfuncproto.h>
+ :#include "gc.h"
+ :#include "mi.h"
+ :#include "mispans.h"
+ :#include <pixman/pixman.h>
+ :
+ :#undef assert
+ :#ifdef DEBUG
+ :#define assert(expr) {if (!(expr)) \
+ : FatalError("Assertion failed file %s, line %d: expr\n", \
+ : __FILE__, __LINE__); }
+ :#else
+ :#define assert(expr)
+ :#endif
+ :
+ :#define good(reg) assert(miValidRegion(reg))
+ :
+ :/*
+ : * The functions in this file implement the Region abstraction used extensively
+ : * throughout the X11 sample server. A Region is simply a set of disjoint
+ : * (non-overlapping) rectangles, plus an "extent" rectangle which is the
+ : * smallest single rectangle that contains all the non-overlapping rectangles.
+ : *
+ : * A Region is implemented as a "y-x-banded" array of rectangles. This array
+ : * imposes two degrees of order. First, all rectangles are sorted by top side
+ : * y coordinate first (y1), and then by left side x coordinate (x1).
+ : *
+ : * Furthermore, the rectangles are grouped into "bands". Each rectangle in a
+ : * band has the same top y coordinate (y1), and each has the same bottom y
+ : * coordinate (y2). Thus all rectangles in a band differ only in their left
+ : * and right side (x1 and x2). Bands are implicit in the array of rectangles:
+ : * there is no separate list of band start pointers.
+ : *
+ : * The y-x band representation does not minimize rectangles. In particular,
+ : * if a rectangle vertically crosses a band (the rectangle has scanlines in
+ : * the y1 to y2 area spanned by the band), then the rectangle may be broken
+ : * down into two or more smaller rectangles stacked one atop the other.
+ : *
+ : * ----------- -----------
+ : * | | | | band 0
+ : * | | -------- ----------- --------
+ : * | | | | in y-x banded | | | | band 1
+ : * | | | | form is | | | |
+ : * ----------- | | ----------- --------
+ : * | | | | band 2
+ : * -------- --------
+ : *
+ : * An added constraint on the rectangles is that they must cover as much
+ : * horizontal area as possible: no two rectangles within a band are allowed
+ : * to touch.
+ : *
+ : * Whenever possible, bands will be merged together to cover a greater vertical
+ : * distance (and thus reduce the number of rectangles). Two bands can be merged
+ : * only if the bottom of one touches the top of the other and they have
+ : * rectangles in the same places (of the same width, of course).
+ : *
+ : * Adam de Boor wrote most of the original region code. Joel McCormack
+ : * substantially modified or rewrote most of the core arithmetic routines,
+ : * and added miRegionValidate in order to support several speed improvements
+ : * to miValidateTree. Bob Scheifler changed the representation to be more
+ : * compact when empty or a single rectangle, and did a bunch of gratuitous
+ : * reformatting.
+ : */
+ :
+ :/* true iff two Boxes overlap */
+ :#define EXTENTCHECK(r1,r2) \
+ : (!( ((r1)->x2 <= (r2)->x1) || \
+ : ((r1)->x1 >= (r2)->x2) || \
+ : ((r1)->y2 <= (r2)->y1) || \
+ : ((r1)->y1 >= (r2)->y2) ) )
+ :
+ :/* true iff (x,y) is in Box */
+ :#define INBOX(r,x,y) \
+ : ( ((r)->x2 > x) && \
+ : ((r)->x1 <= x) && \
+ : ((r)->y2 > y) && \
+ : ((r)->y1 <= y) )
+ :
+ :/* true iff Box r1 contains Box r2 */
+ :#define SUBSUMES(r1,r2) \
+ : ( ((r1)->x1 <= (r2)->x1) && \
+ : ((r1)->x2 >= (r2)->x2) && \
+ : ((r1)->y1 <= (r2)->y1) && \
+ : ((r1)->y2 >= (r2)->y2) )
+ :
+ :#define xallocData(n) (RegDataPtr)xalloc(REGION_SZOF(n))
+ :#define xfreeData(reg) if ((reg)->data && (reg)->data->size) xfree((reg)->data)
+ :
+ :#define RECTALLOC_BAIL(pReg,n,bail) \
+ :if (!(pReg)->data || (((pReg)->data->numRects + (n)) > (pReg)->data->size)) \
+ : if (!miRectAlloc(pReg, n)) { goto bail; }
+ :
+ :#define RECTALLOC(pReg,n) \
+ :if (!(pReg)->data || (((pReg)->data->numRects + (n)) > (pReg)->data->size)) \
+ : if (!miRectAlloc(pReg, n)) { return FALSE; }
+ :
+ :#define ADDRECT(pNextRect,nx1,ny1,nx2,ny2) \
+ :{ \
+ : pNextRect->x1 = nx1; \
+ : pNextRect->y1 = ny1; \
+ : pNextRect->x2 = nx2; \
+ : pNextRect->y2 = ny2; \
+ : pNextRect++; \
+ :}
+ :
+ :#define NEWRECT(pReg,pNextRect,nx1,ny1,nx2,ny2) \
+ :{ \
+ : if (!(pReg)->data || ((pReg)->data->numRects == (pReg)->data->size))\
+ : { \
+ : if (!miRectAlloc(pReg, 1)) \
+ : return FALSE; \
+ : pNextRect = REGION_TOP(pReg); \
+ : } \
+ : ADDRECT(pNextRect,nx1,ny1,nx2,ny2); \
+ : pReg->data->numRects++; \
+ : assert(pReg->data->numRects<=pReg->data->size); \
+ :}
+ :
+ :
+ :#define DOWNSIZE(reg,numRects) \
+ :if (((numRects) < ((reg)->data->size >> 1)) && ((reg)->data->size > 50)) \
+ :{ \
+ : RegDataPtr NewData; \
+ : NewData = (RegDataPtr)xrealloc((reg)->data, REGION_SZOF(numRects)); \
+ : if (NewData) \
+ : { \
+ : NewData->size = (numRects); \
+ : (reg)->data = NewData; \
+ : } \
+ :}
+ :
+ :
+ :_X_EXPORT BoxRec miEmptyBox = {0, 0, 0, 0};
+ :_X_EXPORT RegDataRec miEmptyData = {0, 0};
+ :
+ :RegDataRec miBrokenData = {0, 0};
+ :static RegionRec miBrokenRegion = { { 0, 0, 0, 0 }, &miBrokenData };
+ :
+ :extern void
+ :InitRegions (void)
+ :{
+ : pixman_region_set_static_pointers (&miEmptyBox, &miEmptyData, &miBrokenData);
+ :}
+ :
+ :/*****************************************************************
+ : * RegionCreate(rect, size)
+ : * This routine does a simple malloc to make a structure of
+ : * REGION of "size" number of rectangles.
+ : *****************************************************************/
+ :
+ :_X_EXPORT RegionPtr
+ :miRegionCreate(rect, size)
+ : BoxPtr rect;
+ : int size;
+ 3 0.0033 :{ /* miRegionCreate total: 5 0.0054 */
+ : RegionPtr pReg;
+ :
+ : pReg = (RegionPtr)xalloc(sizeof(RegionRec));
+ 1 0.0011 : if (!pReg)
+ : return &miBrokenRegion;
+ :
+ 1 0.0011 : miRegionInit (pReg, rect, size);
+ :
+ : return(pReg);
+ :}
+ :
+ :_X_EXPORT void
+ :miRegionDestroy(pReg)
+ : RegionPtr pReg;
+ 3 0.0033 :{ /* miRegionDestroy total: 5 0.0054 */
+ : pixman_region_fini (pReg);
+ : if (pReg != &miBrokenRegion)
+ 1 0.0011 : xfree(pReg);
+ 1 0.0011 :}
+ :
+ :_X_EXPORT void
+ :miPrintRegion(rgn)
+ : RegionPtr rgn;
+ :{
+ : int num, size;
+ : int i;
+ : BoxPtr rects;
+ :
+ : num = REGION_NUM_RECTS(rgn);
+ : size = REGION_SIZE(rgn);
+ : rects = REGION_RECTS(rgn);
+ : ErrorF("num: %d size: %d\n", num, size);
+ : ErrorF("extents: %d %d %d %d\n",
+ : rgn->extents.x1, rgn->extents.y1, rgn->extents.x2, rgn->extents.y2);
+ : for (i = 0; i < num; i++)
+ : ErrorF("%d %d %d %d \n",
+ : rects[i].x1, rects[i].y1, rects[i].x2, rects[i].y2);
+ : ErrorF("\n");
+ :}
+ :
+ :_X_EXPORT Bool
+ :miRegionEqual(reg1, reg2)
+ : RegionPtr reg1;
+ : RegionPtr reg2;
+ :{
+ : return pixman_region_equal (reg1, reg2);
+ :}
+ :
+ :#ifdef DEBUG
+ :Bool
+ :miValidRegion(reg)
+ : RegionPtr reg;
+ :{
+ : int i, numRects;
+ :
+ : if ((reg->extents.x1 > reg->extents.x2) ||
+ : (reg->extents.y1 > reg->extents.y2))
+ : return FALSE;
+ : numRects = REGION_NUM_RECTS(reg);
+ : if (!numRects)
+ : return ((reg->extents.x1 == reg->extents.x2) &&
+ : (reg->extents.y1 == reg->extents.y2) &&
+ : (reg->data->size || (reg->data == &miEmptyData)));
+ : else if (numRects == 1)
+ : return (!reg->data);
+ : else
+ : {
+ : BoxPtr pboxP, pboxN;
+ : BoxRec box;
+ :
+ : pboxP = REGION_RECTS(reg);
+ : box = *pboxP;
+ : box.y2 = pboxP[numRects-1].y2;
+ : pboxN = pboxP + 1;
+ : for (i = numRects; --i > 0; pboxP++, pboxN++)
+ : {
+ : if ((pboxN->x1 >= pboxN->x2) ||
+ : (pboxN->y1 >= pboxN->y2))
+ : return FALSE;
+ : if (pboxN->x1 < box.x1)
+ : box.x1 = pboxN->x1;
+ : if (pboxN->x2 > box.x2)
+ : box.x2 = pboxN->x2;
+ : if ((pboxN->y1 < pboxP->y1) ||
+ : ((pboxN->y1 == pboxP->y1) &&
+ : ((pboxN->x1 < pboxP->x2) || (pboxN->y2 != pboxP->y2))))
+ : return FALSE;
+ : }
+ : return ((box.x1 == reg->extents.x1) &&
+ : (box.x2 == reg->extents.x2) &&
+ : (box.y1 == reg->extents.y1) &&
+ : (box.y2 == reg->extents.y2));
+ : }
+ :}
+ :#endif /* DEBUG */
+ :
+ :/*****************************************************************
+ : * RegionInit(pReg, rect, size)
+ : * Outer region rect is statically allocated.
+ : *****************************************************************/
+ :
+ :_X_EXPORT void
+ :miRegionInit(pReg, rect, size)
+ : RegionPtr pReg;
+ : BoxPtr rect;
+ : int size;
+ 3 0.0033 :{ /* miRegionInit total: 5 0.0054 */
+ : if (rect)
+ : pixman_region_init_with_extents (pReg, rect);
+ : else
+ : pixman_region_init (pReg);
+ 2 0.0022 :}
+ :
+ :_X_EXPORT void
+ :miRegionUninit(pReg)
+ : RegionPtr pReg;
+ :{
+ : pixman_region_fini (pReg);
+ :}
+ :
+ :Bool
+ :miRegionBreak (pReg)
+ : RegionPtr pReg;
+ :{
+ : xfreeData (pReg);
+ : pReg->extents = miEmptyBox;
+ : pReg->data = &miBrokenData;
+ : return FALSE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :miRectAlloc(
+ : RegionPtr pRgn,
+ : int n)
+ :{
+ : RegDataPtr data;
+ :
+ : if (!pRgn->data)
+ : {
+ : n++;
+ : pRgn->data = xallocData(n);
+ : if (!pRgn->data)
+ : return miRegionBreak (pRgn);
+ : pRgn->data->numRects = 1;
+ : *REGION_BOXPTR(pRgn) = pRgn->extents;
+ : }
+ : else if (!pRgn->data->size)
+ : {
+ : pRgn->data = xallocData(n);
+ : if (!pRgn->data)
+ : return miRegionBreak (pRgn);
+ : pRgn->data->numRects = 0;
+ : }
+ : else
+ : {
+ : if (n == 1)
+ : {
+ : n = pRgn->data->numRects;
+ : if (n > 500) /* XXX pick numbers out of a hat */
+ : n = 250;
+ : }
+ : n += pRgn->data->numRects;
+ : data = (RegDataPtr)xrealloc(pRgn->data, REGION_SZOF(n));
+ : if (!data)
+ : return miRegionBreak (pRgn);
+ : pRgn->data = data;
+ : }
+ : pRgn->data->size = n;
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :miRegionCopy(dst, src)
+ : RegionPtr dst;
+ : RegionPtr src;
+ 1 0.0011 :{ /* miRegionCopy total: 1 0.0011 */
+ : return pixman_region_copy (dst, src);
+ :}
+ :
+ :/*======================================================================
+ : * Generic Region Operator
+ : *====================================================================*/
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miCoalesce --
+ : * Attempt to merge the boxes in the current band with those in the
+ : * previous one. We are guaranteed that the current band extends to
+ : * the end of the rects array. Used only by miRegionOp.
+ : *
+ : * Results:
+ : * The new index for the previous band.
+ : *
+ : * Side Effects:
+ : * If coalescing takes place:
+ : * - rectangles in the previous band will have their y2 fields
+ : * altered.
+ : * - pReg->data->numRects will be decreased.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :_X_INLINE static int
+ :miCoalesce (
+ : RegionPtr pReg, /* Region to coalesce */
+ : int prevStart, /* Index of start of previous band */
+ : int curStart) /* Index of start of current band */
+ :{
+ : BoxPtr pPrevBox; /* Current box in previous band */
+ : BoxPtr pCurBox; /* Current box in current band */
+ : int numRects; /* Number rectangles in both bands */
+ : int y2; /* Bottom of current band */
+ : /*
+ : * Figure out how many rectangles are in the band.
+ : */
+ : numRects = curStart - prevStart;
+ : assert(numRects == pReg->data->numRects - curStart);
+ :
+ : if (!numRects) return curStart;
+ :
+ : /*
+ : * The bands may only be coalesced if the bottom of the previous
+ : * matches the top scanline of the current.
+ : */
+ : pPrevBox = REGION_BOX(pReg, prevStart);
+ : pCurBox = REGION_BOX(pReg, curStart);
+ : if (pPrevBox->y2 != pCurBox->y1) return curStart;
+ :
+ : /*
+ : * Make sure the bands have boxes in the same places. This
+ : * assumes that boxes have been added in such a way that they
+ : * cover the most area possible. I.e. two boxes in a band must
+ : * have some horizontal space between them.
+ : */
+ : y2 = pCurBox->y2;
+ :
+ : do {
+ : if ((pPrevBox->x1 != pCurBox->x1) || (pPrevBox->x2 != pCurBox->x2)) {
+ : return (curStart);
+ : }
+ : pPrevBox++;
+ : pCurBox++;
+ : numRects--;
+ : } while (numRects);
+ :
+ : /*
+ : * The bands may be merged, so set the bottom y of each box
+ : * in the previous band to the bottom y of the current band.
+ : */
+ : numRects = curStart - prevStart;
+ : pReg->data->numRects -= numRects;
+ : do {
+ : pPrevBox--;
+ : pPrevBox->y2 = y2;
+ : numRects--;
+ : } while (numRects);
+ : return prevStart;
+ :}
+ :
+ :
+ :/* Quicky macro to avoid trivial reject procedure calls to miCoalesce */
+ :
+ :#define Coalesce(newReg, prevBand, curBand) \
+ : if (curBand - prevBand == newReg->data->numRects - curBand) { \
+ : prevBand = miCoalesce(newReg, prevBand, curBand); \
+ : } else { \
+ : prevBand = curBand; \
+ : }
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miAppendNonO --
+ : * Handle a non-overlapping band for the union and subtract operations.
+ : * Just adds the (top/bottom-clipped) rectangles into the region.
+ : * Doesn't have to check for subsumption or anything.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : * pReg->data->numRects is incremented and the rectangles overwritten
+ : * with the rectangles we're passed.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :
+ :_X_INLINE static Bool
+ :miAppendNonO (
+ : RegionPtr pReg,
+ : BoxPtr r,
+ : BoxPtr rEnd,
+ : int y1,
+ : int y2)
+ :{
+ : BoxPtr pNextRect;
+ : int newRects;
+ :
+ : newRects = rEnd - r;
+ :
+ : assert(y1 < y2);
+ : assert(newRects != 0);
+ :
+ : /* Make sure we have enough space for all rectangles to be added */
+ : RECTALLOC(pReg, newRects);
+ : pNextRect = REGION_TOP(pReg);
+ : pReg->data->numRects += newRects;
+ : do {
+ : assert(r->x1 < r->x2);
+ : ADDRECT(pNextRect, r->x1, y1, r->x2, y2);
+ : r++;
+ : } while (r != rEnd);
+ :
+ : return TRUE;
+ :}
+ :
+ :#define FindBand(r, rBandEnd, rEnd, ry1) \
+ :{ \
+ : ry1 = r->y1; \
+ : rBandEnd = r+1; \
+ : while ((rBandEnd != rEnd) && (rBandEnd->y1 == ry1)) { \
+ : rBandEnd++; \
+ : } \
+ :}
+ :
+ :#define AppendRegions(newReg, r, rEnd) \
+ :{ \
+ : int newRects; \
+ : if ((newRects = rEnd - r)) { \
+ : RECTALLOC(newReg, newRects); \
+ : memmove((char *)REGION_TOP(newReg),(char *)r, \
+ : newRects * sizeof(BoxRec)); \
+ : newReg->data->numRects += newRects; \
+ : } \
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miRegionOp --
+ : * Apply an operation to two regions. Called by miUnion, miInverse,
+ : * miSubtract, miIntersect.... Both regions MUST have at least one
+ : * rectangle, and cannot be the same object.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * The new region is overwritten.
+ : * pOverlap set to TRUE if overlapFunc ever returns TRUE.
+ : *
+ : * Notes:
+ : * The idea behind this function is to view the two regions as sets.
+ : * Together they cover a rectangle of area that this function divides
+ : * into horizontal bands where points are covered only by one region
+ : * or by both. For the first case, the nonOverlapFunc is called with
+ : * each the band and the band's upper and lower extents. For the
+ : * second, the overlapFunc is called to process the entire band. It
+ : * is responsible for clipping the rectangles in the band, though
+ : * this function provides the boundaries.
+ : * At the end of each band, the new region is coalesced, if possible,
+ : * to reduce the number of rectangles in the region.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :
+ :typedef Bool (*OverlapProcPtr)(
+ : RegionPtr pReg,
+ : BoxPtr r1,
+ : BoxPtr r1End,
+ : BoxPtr r2,
+ : BoxPtr r2End,
+ : short y1,
+ : short y2,
+ : Bool *pOverlap);
+ :
+ :static Bool
+ :miRegionOp(
+ : RegionPtr newReg, /* Place to store result */
+ : RegionPtr reg1, /* First region in operation */
+ : RegionPtr reg2, /* 2d region in operation */
+ : OverlapProcPtr overlapFunc, /* Function to call for over-
+ : * lapping bands */
+ : Bool appendNon1, /* Append non-overlapping bands */
+ : /* in region 1 ? */
+ : Bool appendNon2, /* Append non-overlapping bands */
+ : /* in region 2 ? */
+ : Bool *pOverlap)
+ :{
+ : BoxPtr r1; /* Pointer into first region */
+ : BoxPtr r2; /* Pointer into 2d region */
+ : BoxPtr r1End; /* End of 1st region */
+ : BoxPtr r2End; /* End of 2d region */
+ : short ybot; /* Bottom of intersection */
+ : short ytop; /* Top of intersection */
+ : RegDataPtr oldData; /* Old data for newReg */
+ : int prevBand; /* Index of start of
+ : * previous band in newReg */
+ : int curBand; /* Index of start of current
+ : * band in newReg */
+ : BoxPtr r1BandEnd; /* End of current band in r1 */
+ : BoxPtr r2BandEnd; /* End of current band in r2 */
+ : short top; /* Top of non-overlapping band */
+ : short bot; /* Bottom of non-overlapping band*/
+ : int r1y1; /* Temps for r1->y1 and r2->y1 */
+ : int r2y1;
+ : int newSize;
+ : int numRects;
+ :
+ : /*
+ : * Break any region computed from a broken region
+ : */
+ : if (REGION_NAR (reg1) || REGION_NAR(reg2))
+ : return miRegionBreak (newReg);
+ :
+ : /*
+ : * Initialization:
+ : * set r1, r2, r1End and r2End appropriately, save the rectangles
+ : * of the destination region until the end in case it's one of
+ : * the two source regions, then mark the "new" region empty, allocating
+ : * another array of rectangles for it to use.
+ : */
+ :
+ : r1 = REGION_RECTS(reg1);
+ : newSize = REGION_NUM_RECTS(reg1);
+ : r1End = r1 + newSize;
+ : numRects = REGION_NUM_RECTS(reg2);
+ : r2 = REGION_RECTS(reg2);
+ : r2End = r2 + numRects;
+ : assert(r1 != r1End);
+ : assert(r2 != r2End);
+ :
+ : oldData = (RegDataPtr)NULL;
+ : if (((newReg == reg1) && (newSize > 1)) ||
+ : ((newReg == reg2) && (numRects > 1)))
+ : {
+ : oldData = newReg->data;
+ : newReg->data = &miEmptyData;
+ : }
+ : /* guess at new size */
+ : if (numRects > newSize)
+ : newSize = numRects;
+ : newSize <<= 1;
+ : if (!newReg->data)
+ : newReg->data = &miEmptyData;
+ : else if (newReg->data->size)
+ : newReg->data->numRects = 0;
+ : if (newSize > newReg->data->size)
+ : if (!miRectAlloc(newReg, newSize))
+ : return FALSE;
+ :
+ : /*
+ : * Initialize ybot.
+ : * In the upcoming loop, ybot and ytop serve different functions depending
+ : * on whether the band being handled is an overlapping or non-overlapping
+ : * band.
+ : * In the case of a non-overlapping band (only one of the regions
+ : * has points in the band), ybot is the bottom of the most recent
+ : * intersection and thus clips the top of the rectangles in that band.
+ : * ytop is the top of the next intersection between the two regions and
+ : * serves to clip the bottom of the rectangles in the current band.
+ : * For an overlapping band (where the two regions intersect), ytop clips
+ : * the top of the rectangles of both regions and ybot clips the bottoms.
+ : */
+ :
+ : ybot = min(r1->y1, r2->y1);
+ :
+ : /*
+ : * prevBand serves to mark the start of the previous band so rectangles
+ : * can be coalesced into larger rectangles. qv. miCoalesce, above.
+ : * In the beginning, there is no previous band, so prevBand == curBand
+ : * (curBand is set later on, of course, but the first band will always
+ : * start at index 0). prevBand and curBand must be indices because of
+ : * the possible expansion, and resultant moving, of the new region's
+ : * array of rectangles.
+ : */
+ : prevBand = 0;
+ :
+ : do {
+ : /*
+ : * This algorithm proceeds one source-band (as opposed to a
+ : * destination band, which is determined by where the two regions
+ : * intersect) at a time. r1BandEnd and r2BandEnd serve to mark the
+ : * rectangle after the last one in the current band for their
+ : * respective regions.
+ : */
+ : assert(r1 != r1End);
+ : assert(r2 != r2End);
+ :
+ : FindBand(r1, r1BandEnd, r1End, r1y1);
+ : FindBand(r2, r2BandEnd, r2End, r2y1);
+ :
+ : /*
+ : * First handle the band that doesn't intersect, if any.
+ : *
+ : * Note that attention is restricted to one band in the
+ : * non-intersecting region at once, so if a region has n
+ : * bands between the current position and the next place it overlaps
+ : * the other, this entire loop will be passed through n times.
+ : */
+ : if (r1y1 < r2y1) {
+ : if (appendNon1) {
+ : top = max(r1y1, ybot);
+ : bot = min(r1->y2, r2y1);
+ : if (top != bot) {
+ : curBand = newReg->data->numRects;
+ : miAppendNonO(newReg, r1, r1BandEnd, top, bot);
+ : Coalesce(newReg, prevBand, curBand);
+ : }
+ : }
+ : ytop = r2y1;
+ : } else if (r2y1 < r1y1) {
+ : if (appendNon2) {
+ : top = max(r2y1, ybot);
+ : bot = min(r2->y2, r1y1);
+ : if (top != bot) {
+ : curBand = newReg->data->numRects;
+ : miAppendNonO(newReg, r2, r2BandEnd, top, bot);
+ : Coalesce(newReg, prevBand, curBand);
+ : }
+ : }
+ : ytop = r1y1;
+ : } else {
+ : ytop = r1y1;
+ : }
+ :
+ : /*
+ : * Now see if we've hit an intersecting band. The two bands only
+ : * intersect if ybot > ytop
+ : */
+ : ybot = min(r1->y2, r2->y2);
+ : if (ybot > ytop) {
+ : curBand = newReg->data->numRects;
+ : (* overlapFunc)(newReg, r1, r1BandEnd, r2, r2BandEnd, ytop, ybot,
+ : pOverlap);
+ : Coalesce(newReg, prevBand, curBand);
+ : }
+ :
+ : /*
+ : * If we've finished with a band (y2 == ybot) we skip forward
+ : * in the region to the next band.
+ : */
+ : if (r1->y2 == ybot) r1 = r1BandEnd;
+ : if (r2->y2 == ybot) r2 = r2BandEnd;
+ :
+ : } while (r1 != r1End && r2 != r2End);
+ :
+ : /*
+ : * Deal with whichever region (if any) still has rectangles left.
+ : *
+ : * We only need to worry about banding and coalescing for the very first
+ : * band left. After that, we can just group all remaining boxes,
+ : * regardless of how many bands, into one final append to the list.
+ : */
+ :
+ : if ((r1 != r1End) && appendNon1) {
+ : /* Do first nonOverlap1Func call, which may be able to coalesce */
+ : FindBand(r1, r1BandEnd, r1End, r1y1);
+ : curBand = newReg->data->numRects;
+ : miAppendNonO(newReg, r1, r1BandEnd, max(r1y1, ybot), r1->y2);
+ : Coalesce(newReg, prevBand, curBand);
+ : /* Just append the rest of the boxes */
+ : AppendRegions(newReg, r1BandEnd, r1End);
+ :
+ : } else if ((r2 != r2End) && appendNon2) {
+ : /* Do first nonOverlap2Func call, which may be able to coalesce */
+ : FindBand(r2, r2BandEnd, r2End, r2y1);
+ : curBand = newReg->data->numRects;
+ : miAppendNonO(newReg, r2, r2BandEnd, max(r2y1, ybot), r2->y2);
+ : Coalesce(newReg, prevBand, curBand);
+ : /* Append rest of boxes */
+ : AppendRegions(newReg, r2BandEnd, r2End);
+ : }
+ :
+ : if (oldData)
+ : xfree(oldData);
+ :
+ : if (!(numRects = newReg->data->numRects))
+ : {
+ : xfreeData(newReg);
+ : newReg->data = &miEmptyData;
+ : }
+ : else if (numRects == 1)
+ : {
+ : newReg->extents = *REGION_BOXPTR(newReg);
+ : xfreeData(newReg);
+ : newReg->data = (RegDataPtr)NULL;
+ : }
+ : else
+ : {
+ : DOWNSIZE(newReg, numRects);
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miSetExtents --
+ : * Reset the extents of a region to what they should be. Called by
+ : * miSubtract and miIntersect as they can't figure it out along the
+ : * way or do so easily, as miUnion can.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : * The region's 'extents' structure is overwritten.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miSetExtents (RegionPtr pReg)
+ :{
+ : BoxPtr pBox, pBoxEnd;
+ :
+ : if (!pReg->data)
+ : return;
+ : if (!pReg->data->size)
+ : {
+ : pReg->extents.x2 = pReg->extents.x1;
+ : pReg->extents.y2 = pReg->extents.y1;
+ : return;
+ : }
+ :
+ : pBox = REGION_BOXPTR(pReg);
+ : pBoxEnd = REGION_END(pReg);
+ :
+ : /*
+ : * Since pBox is the first rectangle in the region, it must have the
+ : * smallest y1 and since pBoxEnd is the last rectangle in the region,
+ : * it must have the largest y2, because of banding. Initialize x1 and
+ : * x2 from pBox and pBoxEnd, resp., as good things to initialize them
+ : * to...
+ : */
+ : pReg->extents.x1 = pBox->x1;
+ : pReg->extents.y1 = pBox->y1;
+ : pReg->extents.x2 = pBoxEnd->x2;
+ : pReg->extents.y2 = pBoxEnd->y2;
+ :
+ : assert(pReg->extents.y1 < pReg->extents.y2);
+ : while (pBox <= pBoxEnd) {
+ : if (pBox->x1 < pReg->extents.x1)
+ : pReg->extents.x1 = pBox->x1;
+ : if (pBox->x2 > pReg->extents.x2)
+ : pReg->extents.x2 = pBox->x2;
+ : pBox++;
+ : };
+ :
+ : assert(pReg->extents.x1 < pReg->extents.x2);
+ :}
+ :
+ :/*======================================================================
+ : * Region Intersection
+ : *====================================================================*/
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miIntersectO --
+ : * Handle an overlapping band for miIntersect.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * Rectangles may be added to the region.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :/*ARGSUSED*/
+ :_X_EXPORT Bool
+ :miIntersect(newReg, reg1, reg2)
+ : RegionPtr newReg; /* destination Region */
+ : RegionPtr reg1;
+ : RegionPtr reg2; /* source regions */
+ 1 0.0011 :{ /* miIntersect total: 6 0.0065 */
+ 2 0.0022 : return pixman_region_intersect (newReg, reg1, reg2);
+ 3 0.0033 :}
+ :
+ :#define MERGERECT(r) \
+ :{ \
+ : if (r->x1 <= x2) { \
+ : /* Merge with current rectangle */ \
+ : if (r->x1 < x2) *pOverlap = TRUE; \
+ : if (x2 < r->x2) x2 = r->x2; \
+ : } else { \
+ : /* Add current rectangle, start new one */ \
+ : NEWRECT(pReg, pNextRect, x1, y1, x2, y2); \
+ : x1 = r->x1; \
+ : x2 = r->x2; \
+ : } \
+ : r++; \
+ :}
+ :
+ :/*======================================================================
+ : * Region Union
+ : *====================================================================*/
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miUnionO --
+ : * Handle an overlapping band for the union operation. Picks the
+ : * left-most rectangle each time and merges it into the region.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * pReg is overwritten.
+ : * pOverlap is set to TRUE if any boxes overlap.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static Bool
+ :miUnionO (
+ : RegionPtr pReg,
+ : BoxPtr r1,
+ : BoxPtr r1End,
+ : BoxPtr r2,
+ : BoxPtr r2End,
+ : short y1,
+ : short y2,
+ : Bool *pOverlap)
+ :{
+ : BoxPtr pNextRect;
+ : int x1; /* left and right side of current union */
+ : int x2;
+ :
+ : assert (y1 < y2);
+ : assert(r1 != r1End && r2 != r2End);
+ :
+ : pNextRect = REGION_TOP(pReg);
+ :
+ : /* Start off current rectangle */
+ : if (r1->x1 < r2->x1)
+ : {
+ : x1 = r1->x1;
+ : x2 = r1->x2;
+ : r1++;
+ : }
+ : else
+ : {
+ : x1 = r2->x1;
+ : x2 = r2->x2;
+ : r2++;
+ : }
+ : while (r1 != r1End && r2 != r2End)
+ : {
+ : if (r1->x1 < r2->x1) MERGERECT(r1) else MERGERECT(r2);
+ : }
+ :
+ : /* Finish off whoever (if any) is left */
+ : if (r1 != r1End)
+ : {
+ : do
+ : {
+ : MERGERECT(r1);
+ : } while (r1 != r1End);
+ : }
+ : else if (r2 != r2End)
+ : {
+ : do
+ : {
+ : MERGERECT(r2);
+ : } while (r2 != r2End);
+ : }
+ :
+ : /* Add current rectangle */
+ : NEWRECT(pReg, pNextRect, x1, y1, x2, y2);
+ :
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :miUnion(newReg, reg1, reg2)
+ : RegionPtr newReg; /* destination Region */
+ : RegionPtr reg1;
+ : RegionPtr reg2; /* source regions */
+ 14 0.0153 :{ /* miUnion total: 27 0.0294 */
+ 2 0.0022 : return pixman_region_union (newReg, reg1, reg2);
+ 11 0.0120 :}
+ :
+ :/*======================================================================
+ : * Batch Rectangle Union
+ : *====================================================================*/
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miRegionAppend --
+ : *
+ : * "Append" the rgn rectangles onto the end of dstrgn, maintaining
+ : * knowledge of YX-banding when it's easy. Otherwise, dstrgn just
+ : * becomes a non-y-x-banded random collection of rectangles, and not
+ : * yet a true region. After a sequence of appends, the caller must
+ : * call miRegionValidate to ensure that a valid region is constructed.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * dstrgn is modified if rgn has rectangles.
+ : *
+ : */
+ :_X_EXPORT Bool
+ :miRegionAppend(dstrgn, rgn)
+ : RegionPtr dstrgn;
+ : RegionPtr rgn;
+ :{
+ : int numRects, dnumRects, size;
+ : BoxPtr new, old;
+ : Bool prepend;
+ :
+ : if (REGION_NAR(rgn))
+ : return miRegionBreak (dstrgn);
+ :
+ : if (!rgn->data && (dstrgn->data == &miEmptyData))
+ : {
+ : dstrgn->extents = rgn->extents;
+ : dstrgn->data = (RegDataPtr)NULL;
+ : return TRUE;
+ : }
+ :
+ : numRects = REGION_NUM_RECTS(rgn);
+ : if (!numRects)
+ : return TRUE;
+ : prepend = FALSE;
+ : size = numRects;
+ : dnumRects = REGION_NUM_RECTS(dstrgn);
+ : if (!dnumRects && (size < 200))
+ : size = 200; /* XXX pick numbers out of a hat */
+ : RECTALLOC(dstrgn, size);
+ : old = REGION_RECTS(rgn);
+ : if (!dnumRects)
+ : dstrgn->extents = rgn->extents;
+ : else if (dstrgn->extents.x2 > dstrgn->extents.x1)
+ : {
+ : BoxPtr first, last;
+ :
+ : first = old;
+ : last = REGION_BOXPTR(dstrgn) + (dnumRects - 1);
+ : if ((first->y1 > last->y2) ||
+ : ((first->y1 == last->y1) && (first->y2 == last->y2) &&
+ : (first->x1 > last->x2)))
+ : {
+ : if (rgn->extents.x1 < dstrgn->extents.x1)
+ : dstrgn->extents.x1 = rgn->extents.x1;
+ : if (rgn->extents.x2 > dstrgn->extents.x2)
+ : dstrgn->extents.x2 = rgn->extents.x2;
+ : dstrgn->extents.y2 = rgn->extents.y2;
+ : }
+ : else
+ : {
+ : first = REGION_BOXPTR(dstrgn);
+ : last = old + (numRects - 1);
+ : if ((first->y1 > last->y2) ||
+ : ((first->y1 == last->y1) && (first->y2 == last->y2) &&
+ : (first->x1 > last->x2)))
+ : {
+ : prepend = TRUE;
+ : if (rgn->extents.x1 < dstrgn->extents.x1)
+ : dstrgn->extents.x1 = rgn->extents.x1;
+ : if (rgn->extents.x2 > dstrgn->extents.x2)
+ : dstrgn->extents.x2 = rgn->extents.x2;
+ : dstrgn->extents.y1 = rgn->extents.y1;
+ : }
+ : else
+ : dstrgn->extents.x2 = dstrgn->extents.x1;
+ : }
+ : }
+ : if (prepend)
+ : {
+ : new = REGION_BOX(dstrgn, numRects);
+ : if (dnumRects == 1)
+ : *new = *REGION_BOXPTR(dstrgn);
+ : else
+ : memmove((char *)new,(char *)REGION_BOXPTR(dstrgn),
+ : dnumRects * sizeof(BoxRec));
+ : new = REGION_BOXPTR(dstrgn);
+ : }
+ : else
+ : new = REGION_BOXPTR(dstrgn) + dnumRects;
+ : if (numRects == 1)
+ : *new = *old;
+ : else
+ : memmove((char *)new, (char *)old, numRects * sizeof(BoxRec));
+ : dstrgn->data->numRects += numRects;
+ : return TRUE;
+ :}
+ :
+ :
+ :#define ExchangeRects(a, b) \
+ :{ \
+ : BoxRec t; \
+ : t = rects[a]; \
+ : rects[a] = rects[b]; \
+ : rects[b] = t; \
+ :}
+ :
+ :static void
+ :QuickSortRects(
+ : BoxRec rects[],
+ : int numRects)
+ :{ /* QuickSortRects total: 1 0.0011 */
+ : int y1;
+ : int x1;
+ : int i, j;
+ : BoxPtr r;
+ :
+ : /* Always called with numRects > 1 */
+ :
+ : do
+ : {
+ : if (numRects == 2)
+ : {
+ 1 0.0011 : if (rects[0].y1 > rects[1].y1 ||
+ : (rects[0].y1 == rects[1].y1 && rects[0].x1 > rects[1].x1))
+ : ExchangeRects(0, 1);
+ : return;
+ : }
+ :
+ : /* Choose partition element, stick in location 0 */
+ : ExchangeRects(0, numRects >> 1);
+ : y1 = rects[0].y1;
+ : x1 = rects[0].x1;
+ :
+ : /* Partition array */
+ : i = 0;
+ : j = numRects;
+ : do
+ : {
+ : r = &(rects[i]);
+ : do
+ : {
+ : r++;
+ : i++;
+ : } while (i != numRects &&
+ : (r->y1 < y1 || (r->y1 == y1 && r->x1 < x1)));
+ : r = &(rects[j]);
+ : do
+ : {
+ : r--;
+ : j--;
+ : } while (y1 < r->y1 || (y1 == r->y1 && x1 < r->x1));
+ : if (i < j)
+ : ExchangeRects(i, j);
+ : } while (i < j);
+ :
+ : /* Move partition element back to middle */
+ : ExchangeRects(0, j);
+ :
+ : /* Recurse */
+ : if (numRects-j-1 > 1)
+ : QuickSortRects(&rects[j+1], numRects-j-1);
+ : numRects = j;
+ : } while (numRects > 1);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miRegionValidate --
+ : *
+ : * Take a ``region'' which is a non-y-x-banded random collection of
+ : * rectangles, and compute a nice region which is the union of all the
+ : * rectangles.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * The passed-in ``region'' may be modified.
+ : * pOverlap set to TRUE if any retangles overlapped, else FALSE;
+ : *
+ : * Strategy:
+ : * Step 1. Sort the rectangles into ascending order with primary key y1
+ : * and secondary key x1.
+ : *
+ : * Step 2. Split the rectangles into the minimum number of proper y-x
+ : * banded regions. This may require horizontally merging
+ : * rectangles, and vertically coalescing bands. With any luck,
+ : * this step in an identity tranformation (ala the Box widget),
+ : * or a coalescing into 1 box (ala Menus).
+ : *
+ : * Step 3. Merge the separate regions down to a single region by calling
+ : * miUnion. Maximize the work each miUnion call does by using
+ : * a binary merge.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :
+ :_X_EXPORT Bool
+ :miRegionValidate(badreg, pOverlap)
+ : RegionPtr badreg;
+ : Bool *pOverlap;
+ 1 0.0011 :{ /* miRegionValidate total: 7 0.0076 */
+ : /* Descriptor for regions under construction in Step 2. */
+ : typedef struct {
+ : RegionRec reg;
+ : int prevBand;
+ : int curBand;
+ : } RegionInfo;
+ :
+ : int numRects; /* Original numRects for badreg */
+ : RegionInfo *ri; /* Array of current regions */
+ : int numRI; /* Number of entries used in ri */
+ : int sizeRI; /* Number of entries available in ri */
+ : int i; /* Index into rects */
+ : int j; /* Index into ri */
+ : RegionInfo *rit; /* &ri[j] */
+ : RegionPtr reg; /* ri[j].reg */
+ : BoxPtr box; /* Current box in rects */
+ : BoxPtr riBox; /* Last box in ri[j].reg */
+ : RegionPtr hreg; /* ri[j_half].reg */
+ : Bool ret = TRUE;
+ :
+ : *pOverlap = FALSE;
+ : if (!badreg->data)
+ : {
+ : good(badreg);
+ : return TRUE;
+ : }
+ : numRects = badreg->data->numRects;
+ : if (!numRects)
+ : {
+ : if (REGION_NAR(badreg))
+ : return FALSE;
+ : good(badreg);
+ : return TRUE;
+ : }
+ 1 0.0011 : if (badreg->extents.x1 < badreg->extents.x2)
+ : {
+ : if ((numRects) == 1)
+ : {
+ : xfreeData(badreg);
+ : badreg->data = (RegDataPtr) NULL;
+ : }
+ : else
+ : {
+ : DOWNSIZE(badreg, numRects);
+ : }
+ : good(badreg);
+ : return TRUE;
+ : }
+ :
+ : /* Step 1: Sort the rects array into ascending (y1, x1) order */
+ : QuickSortRects(REGION_BOXPTR(badreg), numRects);
+ :
+ : /* Step 2: Scatter the sorted array into the minimum number of regions */
+ :
+ : /* Set up the first region to be the first rectangle in badreg */
+ : /* Note that step 2 code will never overflow the ri[0].reg rects array */
+ : ri = (RegionInfo *) xalloc(4 * sizeof(RegionInfo));
+ : if (!ri)
+ : return miRegionBreak (badreg);
+ : sizeRI = 4;
+ : numRI = 1;
+ : ri[0].prevBand = 0;
+ : ri[0].curBand = 0;
+ : ri[0].reg = *badreg;
+ : box = REGION_BOXPTR(&ri[0].reg);
+ : ri[0].reg.extents = *box;
+ : ri[0].reg.data->numRects = 1;
+ :
+ : /* Now scatter rectangles into the minimum set of valid regions. If the
+ : next rectangle to be added to a region would force an existing rectangle
+ : in the region to be split up in order to maintain y-x banding, just
+ : forget it. Try the next region. If it doesn't fit cleanly into any
+ : region, make a new one. */
+ :
+ : for (i = numRects; --i > 0;)
+ : {
+ : box++;
+ : /* Look for a region to append box to */
+ : for (j = numRI, rit = ri; --j >= 0; rit++)
+ : {
+ : reg = &rit->reg;
+ : riBox = REGION_END(reg);
+ :
+ : if (box->y1 == riBox->y1 && box->y2 == riBox->y2)
+ : {
+ : /* box is in same band as riBox. Merge or append it */
+ : if (box->x1 <= riBox->x2)
+ : {
+ : /* Merge it with riBox */
+ : if (box->x1 < riBox->x2) *pOverlap = TRUE;
+ : if (box->x2 > riBox->x2) riBox->x2 = box->x2;
+ : }
+ : else
+ : {
+ : RECTALLOC_BAIL(reg, 1, bail);
+ : *REGION_TOP(reg) = *box;
+ : reg->data->numRects++;
+ : }
+ : goto NextRect; /* So sue me */
+ : }
+ 1 0.0011 : else if (box->y1 >= riBox->y2)
+ : {
+ : /* Put box into new band */
+ : if (reg->extents.x2 < riBox->x2) reg->extents.x2 = riBox->x2;
+ : if (reg->extents.x1 > box->x1) reg->extents.x1 = box->x1;
+ : Coalesce(reg, rit->prevBand, rit->curBand);
+ : rit->curBand = reg->data->numRects;
+ : RECTALLOC_BAIL(reg, 1, bail);
+ : *REGION_TOP(reg) = *box;
+ : reg->data->numRects++;
+ : goto NextRect;
+ : }
+ : /* Well, this region was inappropriate. Try the next one. */
+ : } /* for j */
+ :
+ : /* Uh-oh. No regions were appropriate. Create a new one. */
+ 1 0.0011 : if (sizeRI == numRI)
+ : {
+ : /* Oops, allocate space for new region information */
+ : sizeRI <<= 1;
+ : rit = (RegionInfo *) xrealloc(ri, sizeRI * sizeof(RegionInfo));
+ : if (!rit)
+ : goto bail;
+ : ri = rit;
+ : rit = &ri[numRI];
+ : }
+ : numRI++;
+ : rit->prevBand = 0;
+ : rit->curBand = 0;
+ : rit->reg.extents = *box;
+ : rit->reg.data = (RegDataPtr)NULL;
+ : if (!miRectAlloc(&rit->reg, (i+numRI) / numRI)) /* MUST force allocation */
+ : goto bail;
+ :NextRect: ;
+ : } /* for i */
+ :
+ : /* Make a final pass over each region in order to Coalesce and set
+ : extents.x2 and extents.y2 */
+ :
+ : for (j = numRI, rit = ri; --j >= 0; rit++)
+ : {
+ : reg = &rit->reg;
+ : riBox = REGION_END(reg);
+ : reg->extents.y2 = riBox->y2;
+ : if (reg->extents.x2 < riBox->x2) reg->extents.x2 = riBox->x2;
+ : Coalesce(reg, rit->prevBand, rit->curBand);
+ : if (reg->data->numRects == 1) /* keep unions happy below */
+ : {
+ : xfreeData(reg);
+ : reg->data = (RegDataPtr)NULL;
+ : }
+ : }
+ :
+ : /* Step 3: Union all regions into a single region */
+ 1 0.0011 : while (numRI > 1)
+ : {
+ : int half = numRI/2;
+ : for (j = numRI & 1; j < (half + (numRI & 1)); j++)
+ : {
+ : reg = &ri[j].reg;
+ : hreg = &ri[j+half].reg;
+ : if (!miRegionOp(reg, reg, hreg, miUnionO, TRUE, TRUE, pOverlap))
+ : ret = FALSE;
+ : if (hreg->extents.x1 < reg->extents.x1)
+ : reg->extents.x1 = hreg->extents.x1;
+ : if (hreg->extents.y1 < reg->extents.y1)
+ : reg->extents.y1 = hreg->extents.y1;
+ : if (hreg->extents.x2 > reg->extents.x2)
+ : reg->extents.x2 = hreg->extents.x2;
+ 1 0.0011 : if (hreg->extents.y2 > reg->extents.y2)
+ : reg->extents.y2 = hreg->extents.y2;
+ : xfreeData(hreg);
+ : }
+ : numRI -= half;
+ : }
+ : *badreg = ri[0].reg;
+ : xfree(ri);
+ : good(badreg);
+ : return ret;
+ :bail:
+ : for (i = 0; i < numRI; i++)
+ : xfreeData(&ri[i].reg);
+ : xfree (ri);
+ : return miRegionBreak (badreg);
+ :}
+ :
+ :_X_EXPORT RegionPtr
+ :miRectsToRegion(nrects, prect, ctype)
+ : int nrects;
+ : xRectangle *prect;
+ : int ctype;
+ 1 0.0011 :{ /* miRectsToRegion total: 8 0.0087 */
+ :
+ : RegionPtr pRgn;
+ : RegDataPtr pData;
+ : BoxPtr pBox;
+ : int i;
+ : int x1, y1, x2, y2;
+ :
+ : pRgn = miRegionCreate(NullBox, 0);
+ : if (REGION_NAR (pRgn))
+ : return pRgn;
+ 4 0.0044 : if (!nrects)
+ : return pRgn;
+ : if (nrects == 1)
+ : {
+ : x1 = prect->x;
+ : y1 = prect->y;
+ 1 0.0011 : if ((x2 = x1 + (int) prect->width) > MAXSHORT)
+ : x2 = MAXSHORT;
+ : if ((y2 = y1 + (int) prect->height) > MAXSHORT)
+ : y2 = MAXSHORT;
+ : if (x1 != x2 && y1 != y2)
+ : {
+ : pRgn->extents.x1 = x1;
+ : pRgn->extents.y1 = y1;
+ : pRgn->extents.x2 = x2;
+ : pRgn->extents.y2 = y2;
+ : pRgn->data = (RegDataPtr)NULL;
+ : }
+ : return pRgn;
+ : }
+ : pData = xallocData(nrects);
+ : if (!pData)
+ : {
+ : miRegionBreak (pRgn);
+ : return pRgn;
+ : }
+ : pBox = (BoxPtr) (pData + 1);
+ : for (i = nrects; --i >= 0; prect++)
+ : {
+ : x1 = prect->x;
+ : y1 = prect->y;
+ : if ((x2 = x1 + (int) prect->width) > MAXSHORT)
+ : x2 = MAXSHORT;
+ : if ((y2 = y1 + (int) prect->height) > MAXSHORT)
+ : y2 = MAXSHORT;
+ : if (x1 != x2 && y1 != y2)
+ : {
+ : pBox->x1 = x1;
+ : pBox->y1 = y1;
+ : pBox->x2 = x2;
+ : pBox->y2 = y2;
+ : pBox++;
+ : }
+ : }
+ 1 0.0011 : if (pBox != (BoxPtr) (pData + 1))
+ : {
+ : pData->size = nrects;
+ : pData->numRects = pBox - (BoxPtr) (pData + 1);
+ : pRgn->data = pData;
+ : if (ctype != CT_YXBANDED)
+ : {
+ : Bool overlap; /* result ignored */
+ : pRgn->extents.x1 = pRgn->extents.x2 = 0;
+ : miRegionValidate(pRgn, &overlap);
+ : }
+ : else
+ : miSetExtents(pRgn);
+ : good(pRgn);
+ : }
+ : else
+ : {
+ : xfree (pData);
+ : }
+ : return pRgn;
+ 1 0.0011 :}
+ :
+ :/*======================================================================
+ : * Region Subtraction
+ : *====================================================================*/
+ :
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miSubtractO --
+ : * Overlapping band subtraction. x1 is the left-most point not yet
+ : * checked.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * pReg may have rectangles added to it.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :/*ARGSUSED*/
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miSubtract --
+ : * Subtract regS from regM and leave the result in regD.
+ : * S stands for subtrahend, M for minuend and D for difference.
+ : *
+ : * Results:
+ : * TRUE if successful.
+ : *
+ : * Side Effects:
+ : * regD is overwritten.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :_X_EXPORT Bool
+ :miSubtract(regD, regM, regS)
+ : RegionPtr regD;
+ : RegionPtr regM;
+ : RegionPtr regS;
+ :{
+ : return pixman_region_subtract (regD, regM, regS);
+ :}
+ :
+ :/*======================================================================
+ : * Region Inversion
+ : *====================================================================*/
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miInverse --
+ : * Take a region and a box and return a region that is everything
+ : * in the box but not in the region. The careful reader will note
+ : * that this is the same as subtracting the region from the box...
+ : *
+ : * Results:
+ : * TRUE.
+ : *
+ : * Side Effects:
+ : * newReg is overwritten.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :_X_EXPORT Bool
+ :miInverse(newReg, reg1, invRect)
+ : RegionPtr newReg; /* Destination region */
+ : RegionPtr reg1; /* Region to invert */
+ : BoxPtr invRect; /* Bounding box for inversion */
+ :{
+ : return pixman_region_inverse (newReg, reg1, invRect);
+ :}
+ :_X_EXPORT int
+ :miRectIn(region, prect)
+ : RegionPtr region;
+ : BoxPtr prect;
+ :{
+ : return pixman_region_contains_rectangle (region, prect);
+ :}
+ :
+ :/* TranslateRegion(pReg, x, y)
+ : translates in place
+ :*/
+ :
+ :_X_EXPORT void
+ :miTranslateRegion(pReg, x, y)
+ : RegionPtr pReg;
+ : int x;
+ : int y;
+ 2 0.0022 :{ /* miTranslateRegion total: 2 0.0022 */
+ : pixman_region_translate (pReg, x, y);
+ :}
+ :
+ :_X_EXPORT void
+ :miRegionReset(pReg, pBox)
+ : RegionPtr pReg;
+ : BoxPtr pBox;
+ :{
+ : pixman_region_reset (pReg, pBox);
+ :}
+ :
+ :_X_EXPORT Bool
+ :miPointInRegion(pReg, x, y, box)
+ : RegionPtr pReg;
+ : int x, y;
+ : BoxPtr box; /* "return" value */
+ :{
+ : return pixman_region_contains_point (pReg, x, y, box);
+ :}
+ :
+ :_X_EXPORT Bool
+ :miRegionNotEmpty(pReg)
+ : RegionPtr pReg;
+ :{
+ : return pixman_region_not_empty (pReg);
+ :}
+ :
+ :Bool
+ :miRegionBroken(RegionPtr pReg)
+ :{
+ : good(pReg);
+ : return (REGION_NAR(pReg));
+ :}
+ :
+ :_X_EXPORT void
+ :miRegionEmpty(pReg)
+ : RegionPtr pReg;
+ :{
+ : good(pReg);
+ : xfreeData(pReg);
+ : pReg->extents.x2 = pReg->extents.x1;
+ : pReg->extents.y2 = pReg->extents.y1;
+ : pReg->data = &miEmptyData;
+ :}
+ :
+ :_X_EXPORT BoxPtr
+ :miRegionExtents(pReg)
+ : RegionPtr pReg;
+ :{
+ : good(pReg);
+ : return(&pReg->extents);
+ :}
+ :
+ :#define ExchangeSpans(a, b) \
+ :{ \
+ : DDXPointRec tpt; \
+ : int tw; \
+ : \
+ : tpt = spans[a]; spans[a] = spans[b]; spans[b] = tpt; \
+ : tw = widths[a]; widths[a] = widths[b]; widths[b] = tw; \
+ :}
+ :
+ :/* ||| I should apply the merge sort code to rectangle sorting above, and see
+ : if mapping time can be improved. But right now I've been at work 12 hours,
+ : so forget it.
+ :*/
+ :
+ :static void QuickSortSpans(
+ : DDXPointRec spans[],
+ : int widths[],
+ : int numSpans)
+ :{
+ : int y;
+ : int i, j, m;
+ : DDXPointPtr r;
+ :
+ : /* Always called with numSpans > 1 */
+ : /* Sorts only by y, doesn't bother to sort by x */
+ :
+ : do
+ : {
+ : if (numSpans < 9)
+ : {
+ : /* Do insertion sort */
+ : int yprev;
+ :
+ : yprev = spans[0].y;
+ : i = 1;
+ : do
+ : { /* while i != numSpans */
+ : y = spans[i].y;
+ : if (yprev > y)
+ : {
+ : /* spans[i] is out of order. Move into proper location. */
+ : DDXPointRec tpt;
+ : int tw, k;
+ :
+ : for (j = 0; y >= spans[j].y; j++) {}
+ : tpt = spans[i];
+ : tw = widths[i];
+ : for (k = i; k != j; k--)
+ : {
+ : spans[k] = spans[k-1];
+ : widths[k] = widths[k-1];
+ : }
+ : spans[j] = tpt;
+ : widths[j] = tw;
+ : y = spans[i].y;
+ : } /* if out of order */
+ : yprev = y;
+ : i++;
+ : } while (i != numSpans);
+ : return;
+ : }
+ :
+ : /* Choose partition element, stick in location 0 */
+ : m = numSpans / 2;
+ : if (spans[m].y > spans[0].y) ExchangeSpans(m, 0);
+ : if (spans[m].y > spans[numSpans-1].y) ExchangeSpans(m, numSpans-1);
+ : if (spans[m].y > spans[0].y) ExchangeSpans(m, 0);
+ : y = spans[0].y;
+ :
+ : /* Partition array */
+ : i = 0;
+ : j = numSpans;
+ : do
+ : {
+ : r = &(spans[i]);
+ : do
+ : {
+ : r++;
+ : i++;
+ : } while (i != numSpans && r->y < y);
+ : r = &(spans[j]);
+ : do
+ : {
+ : r--;
+ : j--;
+ : } while (y < r->y);
+ : if (i < j)
+ : ExchangeSpans(i, j);
+ : } while (i < j);
+ :
+ : /* Move partition element back to middle */
+ : ExchangeSpans(0, j);
+ :
+ : /* Recurse */
+ : if (numSpans-j-1 > 1)
+ : QuickSortSpans(&spans[j+1], &widths[j+1], numSpans-j-1);
+ : numSpans = j;
+ : } while (numSpans > 1);
+ :}
+ :
+ :#define NextBand() \
+ :{ \
+ : clipy1 = pboxBandStart->y1; \
+ : clipy2 = pboxBandStart->y2; \
+ : pboxBandEnd = pboxBandStart + 1; \
+ : while (pboxBandEnd != pboxLast && pboxBandEnd->y1 == clipy1) { \
+ : pboxBandEnd++; \
+ : } \
+ : for (; ppt != pptLast && ppt->y < clipy1; ppt++, pwidth++) {} \
+ :}
+ :
+ :/*
+ : Clip a list of scanlines to a region. The caller has allocated the
+ : space. FSorted is non-zero if the scanline origins are in ascending
+ : order.
+ : returns the number of new, clipped scanlines.
+ :*/
+ :
+ :_X_EXPORT int
+ :miClipSpans(
+ : RegionPtr prgnDst,
+ : DDXPointPtr ppt,
+ : int *pwidth,
+ : int nspans,
+ : DDXPointPtr pptNew,
+ : int *pwidthNew,
+ : int fSorted)
+ :{
+ : DDXPointPtr pptLast;
+ : int *pwidthNewStart; /* the vengeance of Xerox! */
+ : int y, x1, x2;
+ : int numRects;
+ :
+ : good(prgnDst);
+ : pptLast = ppt + nspans;
+ : pwidthNewStart = pwidthNew;
+ :
+ : if (!prgnDst->data)
+ : {
+ : /* Do special fast code with clip boundaries in registers(?) */
+ : /* It doesn't pay much to make use of fSorted in this case,
+ : so we lump everything together. */
+ :
+ : int clipx1, clipx2, clipy1, clipy2;
+ :
+ : clipx1 = prgnDst->extents.x1;
+ : clipy1 = prgnDst->extents.y1;
+ : clipx2 = prgnDst->extents.x2;
+ : clipy2 = prgnDst->extents.y2;
+ :
+ : for (; ppt != pptLast; ppt++, pwidth++)
+ : {
+ : y = ppt->y;
+ : x1 = ppt->x;
+ : if (clipy1 <= y && y < clipy2)
+ : {
+ : x2 = x1 + *pwidth;
+ : if (x1 < clipx1) x1 = clipx1;
+ : if (x2 > clipx2) x2 = clipx2;
+ : if (x1 < x2)
+ : {
+ : /* part of span in clip rectangle */
+ : pptNew->x = x1;
+ : pptNew->y = y;
+ : *pwidthNew = x2 - x1;
+ : pptNew++;
+ : pwidthNew++;
+ : }
+ : }
+ : } /* end for */
+ :
+ : }
+ : else if ((numRects = prgnDst->data->numRects))
+ : {
+ : /* Have to clip against many boxes */
+ : BoxPtr pboxBandStart, pboxBandEnd;
+ : BoxPtr pbox;
+ : BoxPtr pboxLast;
+ : int clipy1, clipy2;
+ :
+ : /* In this case, taking advantage of sorted spans gains more than
+ : the sorting costs. */
+ : if ((! fSorted) && (nspans > 1))
+ : QuickSortSpans(ppt, pwidth, nspans);
+ :
+ : pboxBandStart = REGION_BOXPTR(prgnDst);
+ : pboxLast = pboxBandStart + numRects;
+ :
+ : NextBand();
+ :
+ : for (; ppt != pptLast; )
+ : {
+ : y = ppt->y;
+ : if (y < clipy2)
+ : {
+ : /* span is in the current band */
+ : pbox = pboxBandStart;
+ : x1 = ppt->x;
+ : x2 = x1 + *pwidth;
+ : do
+ : { /* For each box in band */
+ : int newx1, newx2;
+ :
+ : newx1 = x1;
+ : newx2 = x2;
+ : if (newx1 < pbox->x1) newx1 = pbox->x1;
+ : if (newx2 > pbox->x2) newx2 = pbox->x2;
+ : if (newx1 < newx2)
+ : {
+ : /* Part of span in clip rectangle */
+ : pptNew->x = newx1;
+ : pptNew->y = y;
+ : *pwidthNew = newx2 - newx1;
+ : pptNew++;
+ : pwidthNew++;
+ : }
+ : pbox++;
+ : } while (pbox != pboxBandEnd);
+ : ppt++;
+ : pwidth++;
+ : }
+ : else
+ : {
+ : /* Move to next band, adjust ppt as needed */
+ : pboxBandStart = pboxBandEnd;
+ : if (pboxBandStart == pboxLast)
+ : break; /* We're completely done */
+ : NextBand();
+ : }
+ : }
+ : }
+ : return (pwidthNew - pwidthNewStart);
+ :}
+ :
+ :/* find the band in a region with the most rectangles */
+ :_X_EXPORT int
+ :miFindMaxBand(prgn)
+ : RegionPtr prgn;
+ :{
+ : int nbox;
+ : BoxPtr pbox;
+ : int nThisBand;
+ : int nMaxBand = 0;
+ : short yThisBand;
+ :
+ : good(prgn);
+ : nbox = REGION_NUM_RECTS(prgn);
+ : pbox = REGION_RECTS(prgn);
+ :
+ : while(nbox > 0)
+ : {
+ : yThisBand = pbox->y1;
+ : nThisBand = 0;
+ : while((nbox > 0) && (pbox->y1 == yThisBand))
+ : {
+ : nbox--;
+ : pbox++;
+ : nThisBand++;
+ : }
+ : if (nThisBand > nMaxBand)
+ : nMaxBand = nThisBand;
+ : }
+ : return (nMaxBand);
+ :}
+/*
+ * Total samples for file : "malloc.c"
+ *
+ * 65 0.0708
+ */
+
+<credited to line zero> 65 0.0708 :
+ /* malloc_consolidate total: 65 0.0708 */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/os/io.c"
+ *
+ * 60 0.0654
+ */
+
+
+ :/***********************************************************
+ :
+ :Copyright 1987, 1989, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :
+ :Copyright 1987, 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 Digital not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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.
+ :
+ :
+ :******************************************************************/
+ :/*****************************************************************
+ : * i/o functions
+ : *
+ : * WriteToClient, ReadRequestFromClient
+ : * InsertFakeRequest, ResetCurrentRequest
+ : *
+ : *****************************************************************/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#if 0
+ :#define DEBUG_COMMUNICATION
+ :#endif
+ :#ifdef WIN32
+ :#include <X11/Xwinsock.h>
+ :#endif
+ :#include <stdio.h>
+ :#define XSERV_t
+ :#define TRANS_SERVER
+ :#define TRANS_REOPEN
+ :#include <X11/Xtrans/Xtrans.h>
+ :#include <X11/Xmd.h>
+ :#include <errno.h>
+ :#if !defined(WIN32)
+ :#ifndef Lynx
+ :#include <sys/uio.h>
+ :#else
+ :#include <uio.h>
+ :#endif
+ :#endif
+ :#include <X11/X.h>
+ :#define NEED_REPLIES
+ :#include <X11/Xproto.h>
+ :#include "os.h"
+ :#include "osdep.h"
+ :#include <X11/Xpoll.h>
+ :#include "opaque.h"
+ :#include "dixstruct.h"
+ :#include "misc.h"
+ :
+ :_X_EXPORT CallbackListPtr ReplyCallback;
+ :_X_EXPORT CallbackListPtr FlushCallback;
+ :
+ :static ConnectionInputPtr AllocateInputBuffer(void);
+ :static ConnectionOutputPtr AllocateOutputBuffer(void);
+ :static xReqPtr PeekNextRequest(xReqPtr req, ClientPtr client, Bool readmore);
+ :static void SkipRequests(xReqPtr req, ClientPtr client, int numskipped);
+ :
+ :/* check for both EAGAIN and EWOULDBLOCK, because some supposedly POSIX
+ : * systems are broken and return EWOULDBLOCK when they should return EAGAIN
+ : */
+ :#ifndef WIN32
+ :#if defined(EAGAIN) && defined(EWOULDBLOCK)
+ :#define ETEST(err) (err == EAGAIN || err == EWOULDBLOCK)
+ :#else
+ :#ifdef EAGAIN
+ :#define ETEST(err) (err == EAGAIN)
+ :#else
+ :#define ETEST(err) (err == EWOULDBLOCK)
+ :#endif
+ :#endif
+ :#else /* WIN32 The socket errorcodes differ from the normal errors*/
+ :#define ETEST(err) (err == EAGAIN || err == WSAEWOULDBLOCK)
+ :#endif
+ :
+ :static Bool CriticalOutputPending;
+ :static int timesThisConnection = 0;
+ :static ConnectionInputPtr FreeInputs = (ConnectionInputPtr)NULL;
+ :static ConnectionOutputPtr FreeOutputs = (ConnectionOutputPtr)NULL;
+ :static OsCommPtr AvailableInput = (OsCommPtr)NULL;
+ :
+ :#define get_req_len(req,cli) ((cli)->swapped ? \
+ : lswaps((req)->length) : (req)->length)
+ :
+ :#ifdef BIGREQS
+ :#include <X11/extensions/bigreqstr.h>
+ :
+ :#define get_big_req_len(req,cli) ((cli)->swapped ? \
+ : lswapl(((xBigReq *)(req))->length) : \
+ : ((xBigReq *)(req))->length)
+ :#endif
+ :
+ :#define MAX_TIMES_PER 10
+ :
+ :/*
+ : * A lot of the code in this file manipulates a ConnectionInputPtr:
+ : *
+ : * -----------------------------------------------
+ : * |------- bufcnt ------->| | |
+ : * | |- gotnow ->| | |
+ : * | |-------- needed ------>| |
+ : * |-----------+--------- size --------+---------->|
+ : * -----------------------------------------------
+ : * ^ ^
+ : * | |
+ : * buffer bufptr
+ : *
+ : * buffer is a pointer to the start of the buffer.
+ : * bufptr points to the start of the current request.
+ : * bufcnt counts how many bytes are in the buffer.
+ : * size is the size of the buffer in bytes.
+ : *
+ : * In several of the functions, gotnow and needed are local variables
+ : * that do the following:
+ : *
+ : * gotnow is the number of bytes of the request that we're
+ : * trying to read that are currently in the buffer.
+ : * Typically, gotnow = (buffer + bufcnt) - bufptr
+ : *
+ : * needed = the length of the request that we're trying to
+ : * read. Watch out: needed sometimes counts bytes and sometimes
+ : * counts CARD32's.
+ : */
+ :
+ :
+ :/*****************************************************************
+ : * ReadRequestFromClient
+ : * Returns one request in client->requestBuffer. The request
+ : * length will be in client->req_len. Return status is:
+ : *
+ : * > 0 if successful, specifies length in bytes of the request
+ : * = 0 if entire request is not yet available
+ : * < 0 if client should be terminated
+ : *
+ : * The request returned must be contiguous so that it can be
+ : * cast in the dispatcher to the correct request type. Because requests
+ : * are variable length, ReadRequestFromClient() must look at the first 4
+ : * or 8 bytes of a request to determine the length (the request length is
+ : * in the 3rd and 4th bytes of the request unless it is a Big Request
+ : * (see the Big Request Extension), in which case the 3rd and 4th bytes
+ : * are zero and the following 4 bytes are the request length.
+ : *
+ : * Note: in order to make the server scheduler (WaitForSomething())
+ : * "fair", the ClientsWithInput mask is used. This mask tells which
+ : * clients have FULL requests left in their buffers. Clients with
+ : * partial requests require a read. Basically, client buffers
+ : * are drained before select() is called again. But, we can't keep
+ : * reading from a client that is sending buckets of data (or has
+ : * a partial request) because others clients need to be scheduled.
+ : *****************************************************************/
+ :
+ :#define YieldControl() \
+ : { isItTimeToYield = TRUE; \
+ : timesThisConnection = 0; }
+ :#define YieldControlNoInput() \
+ : { YieldControl(); \
+ : FD_CLR(fd, &ClientsWithInput); }
+ :#define YieldControlDeath() \
+ : { timesThisConnection = 0; }
+ :
+ :int
+ :ReadRequestFromClient(ClientPtr client)
+ 2 0.0022 :{ /* ReadRequestFromClient total: 60 0.0654 */
+ 3 0.0033 : OsCommPtr oc = (OsCommPtr)client->osPrivate;
+ : ConnectionInputPtr oci = oc->input;
+ : int fd = oc->fd;
+ : unsigned int gotnow, needed;
+ : int result;
+ : register xReq *request;
+ : Bool need_header;
+ :#ifdef BIGREQS
+ : Bool move_header;
+ :#endif
+ :
+ : /* If an input buffer was empty, either free it if it is too big
+ : * or link it into our list of free input buffers. This means that
+ : * different clients can share the same input buffer (at different
+ : * times). This was done to save memory.
+ : */
+ :
+ : if (AvailableInput)
+ : {
+ : if (AvailableInput != oc)
+ : {
+ : register ConnectionInputPtr aci = AvailableInput->input;
+ : if (aci->size > BUFWATERMARK)
+ : {
+ : xfree(aci->buffer);
+ : xfree(aci);
+ : }
+ : else
+ : {
+ : aci->next = FreeInputs;
+ : FreeInputs = aci;
+ : }
+ : AvailableInput->input = (ConnectionInputPtr)NULL;
+ : }
+ : AvailableInput = (OsCommPtr)NULL;
+ : }
+ :
+ : /* make sure we have an input buffer */
+ :
+ : if (!oci)
+ : {
+ : if ((oci = FreeInputs))
+ : {
+ : FreeInputs = oci->next;
+ : }
+ : else if (!(oci = AllocateInputBuffer()))
+ : {
+ : YieldControlDeath();
+ : return -1;
+ : }
+ : oc->input = oci;
+ : }
+ :
+ : /* advance to start of next request */
+ :
+ 3 0.0033 : oci->bufptr += oci->lenLastReq;
+ :
+ : need_header = FALSE;
+ :#ifdef BIGREQS
+ : move_header = FALSE;
+ :#endif
+ 6 0.0065 : gotnow = oci->bufcnt + oci->buffer - oci->bufptr;
+ 2 0.0022 : if (gotnow < sizeof(xReq))
+ : {
+ : /* We don't have an entire xReq yet. Can't tell how big
+ : * the request will be until we get the whole xReq.
+ : */
+ : needed = sizeof(xReq);
+ : need_header = TRUE;
+ : }
+ : else
+ : {
+ : /* We have a whole xReq. We can tell how big the whole
+ : * request will be unless it is a Big Request.
+ : */
+ : request = (xReq *)oci->bufptr;
+ 2 0.0022 : needed = get_req_len(request, client);
+ :#ifdef BIGREQS
+ 1 0.0011 : if (!needed && client->big_requests)
+ : {
+ : /* It's a Big Request. */
+ : move_header = TRUE;
+ : if (gotnow < sizeof(xBigReq))
+ : {
+ : /* Still need more data to tell just how big. */
+ : needed = sizeof(xBigReq) >> 2; /* needed is in CARD32s now */
+ : need_header = TRUE;
+ : }
+ : else
+ : needed = get_big_req_len(request, client);
+ : }
+ :#endif
+ 1 0.0011 : client->req_len = needed;
+ : needed <<= 2; /* needed is in bytes now */
+ : }
+ : if (gotnow < needed)
+ : {
+ : /* Need to read more data, either so that we can get a
+ : * complete xReq (if need_header is TRUE), a complete
+ : * xBigReq (if move_header is TRUE), or the rest of the
+ : * request (if need_header and move_header are both FALSE).
+ : */
+ :
+ : oci->lenLastReq = 0;
+ 2 0.0022 : if (needed > MAXBUFSIZE)
+ : {
+ : /* request is too big for us to handle */
+ : YieldControlDeath();
+ : return -1;
+ : }
+ : if ((gotnow == 0) ||
+ : ((oci->bufptr - oci->buffer + needed) > oci->size))
+ : {
+ : /* no data, or the request is too big to fit in the buffer */
+ :
+ : if ((gotnow > 0) && (oci->bufptr != oci->buffer))
+ : /* save the data we've already read */
+ : memmove(oci->buffer, oci->bufptr, gotnow);
+ : if (needed > oci->size)
+ : {
+ : /* make buffer bigger to accomodate request */
+ : char *ibuf;
+ :
+ : ibuf = (char *)xrealloc(oci->buffer, needed);
+ : if (!ibuf)
+ : {
+ : YieldControlDeath();
+ : return -1;
+ : }
+ : oci->size = needed;
+ : oci->buffer = ibuf;
+ : }
+ : oci->bufptr = oci->buffer;
+ : oci->bufcnt = gotnow;
+ : }
+ : /* XXX this is a workaround. This function is sometimes called
+ : * after the trans_conn has been freed. In this case trans_conn
+ : * will be null. Really ought to restructure things so that we
+ : * never get here in those circumstances.
+ : */
+ : if (!oc->trans_conn)
+ : {
+ : /* treat as if an error occured on the read, which is what
+ : * used to happen
+ : */
+ : YieldControlDeath();
+ : return -1;
+ : }
+ : result = _XSERVTransRead(oc->trans_conn, oci->buffer + oci->bufcnt,
+ : oci->size - oci->bufcnt);
+ : if (result <= 0)
+ : {
+ : if ((result < 0) && ETEST(errno))
+ : {
+ :#if defined(SVR4) && defined(i386) && !defined(sun)
+ : if (0)
+ :#endif
+ : {
+ : YieldControlNoInput();
+ : return 0;
+ : }
+ : }
+ : YieldControlDeath();
+ : return -1;
+ : }
+ : oci->bufcnt += result;
+ : gotnow += result;
+ : /* free up some space after huge requests */
+ : if ((oci->size > BUFWATERMARK) &&
+ : (oci->bufcnt < BUFSIZE) && (needed < BUFSIZE))
+ : {
+ : char *ibuf;
+ :
+ : ibuf = (char *)xrealloc(oci->buffer, BUFSIZE);
+ : if (ibuf)
+ : {
+ : oci->size = BUFSIZE;
+ : oci->buffer = ibuf;
+ : oci->bufptr = ibuf + oci->bufcnt - gotnow;
+ : }
+ : }
+ : if (need_header && gotnow >= needed)
+ : {
+ : /* We wanted an xReq, now we've gotten it. */
+ : request = (xReq *)oci->bufptr;
+ : needed = get_req_len(request, client);
+ :#ifdef BIGREQS
+ : if (!needed && client->big_requests)
+ : {
+ : move_header = TRUE;
+ : if (gotnow < sizeof(xBigReq))
+ : needed = sizeof(xBigReq) >> 2;
+ : else
+ : needed = get_big_req_len(request, client);
+ : }
+ :#endif
+ : client->req_len = needed;
+ : needed <<= 2;
+ : }
+ : if (gotnow < needed)
+ : {
+ : /* Still don't have enough; punt. */
+ : YieldControlNoInput();
+ : return 0;
+ : }
+ : }
+ 1 0.0011 : if (needed == 0)
+ : {
+ :#ifdef BIGREQS
+ : if (client->big_requests)
+ : needed = sizeof(xBigReq);
+ : else
+ :#endif
+ : needed = sizeof(xReq);
+ : }
+ 3 0.0033 : oci->lenLastReq = needed;
+ :
+ : /*
+ : * Check to see if client has at least one whole request in the
+ : * buffer beyond the request we're returning to the caller.
+ : * If there is only a partial request, treat like buffer
+ : * is empty so that select() will be called again and other clients
+ : * can get into the queue.
+ : */
+ :
+ 1 0.0011 : gotnow -= needed;
+ : if (gotnow >= sizeof(xReq))
+ : {
+ 1 0.0011 : request = (xReq *)(oci->bufptr + needed);
+ 9 0.0098 : if (gotnow >= (result = (get_req_len(request, client) << 2))
+ :#ifdef BIGREQS
+ : && (result ||
+ : (client->big_requests &&
+ : (gotnow >= sizeof(xBigReq) &&
+ : gotnow >= (get_big_req_len(request, client) << 2))))
+ :#endif
+ : )
+ 11 0.0120 : FD_SET(fd, &ClientsWithInput);
+ : else
+ : {
+ :#ifdef SMART_SCHEDULE
+ 1 0.0011 : if (!SmartScheduleDisable)
+ : FD_CLR(fd, &ClientsWithInput);
+ : else
+ :#endif
+ : YieldControlNoInput();
+ : }
+ : }
+ : else
+ : {
+ : if (!gotnow)
+ : AvailableInput = oc;
+ :#ifdef SMART_SCHEDULE
+ : if (!SmartScheduleDisable)
+ : FD_CLR(fd, &ClientsWithInput);
+ : else
+ :#endif
+ : YieldControlNoInput();
+ : }
+ :#ifdef SMART_SCHEDULE
+ 3 0.0033 : if (SmartScheduleDisable)
+ :#endif
+ : if (++timesThisConnection >= MAX_TIMES_PER)
+ : YieldControl();
+ :#ifdef BIGREQS
+ : if (move_header)
+ : {
+ : request = (xReq *)oci->bufptr;
+ : oci->bufptr += (sizeof(xBigReq) - sizeof(xReq));
+ : *(xReq *)oci->bufptr = *request;
+ : oci->lenLastReq -= (sizeof(xBigReq) - sizeof(xReq));
+ : client->req_len -= (sizeof(xBigReq) - sizeof(xReq)) >> 2;
+ : }
+ :#endif
+ 3 0.0033 : client->requestBuffer = (pointer)oci->bufptr;
+ :#ifdef DEBUG_COMMUNICATION
+ : {
+ : xReq *req = client->requestBuffer;
+ : ErrorF("REQUEST: ClientIDX: %i, type: 0x%x data: 0x%x len: %i\n",
+ : client->index,req->reqType,req->data,req->length);
+ : }
+ :#endif
+ : return needed;
+ 5 0.0054 :}
+ :
+ :/*****************************************************************
+ : * InsertFakeRequest
+ : * Splice a consed up (possibly partial) request in as the next request.
+ : *
+ : **********************/
+ :
+ :Bool
+ :InsertFakeRequest(ClientPtr client, char *data, int count)
+ :{
+ : OsCommPtr oc = (OsCommPtr)client->osPrivate;
+ : ConnectionInputPtr oci = oc->input;
+ : int fd = oc->fd;
+ : int gotnow, moveup;
+ :
+ : if (AvailableInput)
+ : {
+ : if (AvailableInput != oc)
+ : {
+ : ConnectionInputPtr aci = AvailableInput->input;
+ : if (aci->size > BUFWATERMARK)
+ : {
+ : xfree(aci->buffer);
+ : xfree(aci);
+ : }
+ : else
+ : {
+ : aci->next = FreeInputs;
+ : FreeInputs = aci;
+ : }
+ : AvailableInput->input = (ConnectionInputPtr)NULL;
+ : }
+ : AvailableInput = (OsCommPtr)NULL;
+ : }
+ : if (!oci)
+ : {
+ : if ((oci = FreeInputs))
+ : FreeInputs = oci->next;
+ : else if (!(oci = AllocateInputBuffer()))
+ : return FALSE;
+ : oc->input = oci;
+ : }
+ : oci->bufptr += oci->lenLastReq;
+ : oci->lenLastReq = 0;
+ : gotnow = oci->bufcnt + oci->buffer - oci->bufptr;
+ : if ((gotnow + count) > oci->size)
+ : {
+ : char *ibuf;
+ :
+ : ibuf = (char *)xrealloc(oci->buffer, gotnow + count);
+ : if (!ibuf)
+ : return(FALSE);
+ : oci->size = gotnow + count;
+ : oci->buffer = ibuf;
+ : oci->bufptr = ibuf + oci->bufcnt - gotnow;
+ : }
+ : moveup = count - (oci->bufptr - oci->buffer);
+ : if (moveup > 0)
+ : {
+ : if (gotnow > 0)
+ : memmove(oci->bufptr + moveup, oci->bufptr, gotnow);
+ : oci->bufptr += moveup;
+ : oci->bufcnt += moveup;
+ : }
+ : memmove(oci->bufptr - count, data, count);
+ : oci->bufptr -= count;
+ : gotnow += count;
+ : if ((gotnow >= sizeof(xReq)) &&
+ : (gotnow >= (int)(get_req_len((xReq *)oci->bufptr, client) << 2)))
+ : FD_SET(fd, &ClientsWithInput);
+ : else
+ : YieldControlNoInput();
+ : return(TRUE);
+ :}
+ :
+ :/*****************************************************************
+ : * ResetRequestFromClient
+ : * Reset to reexecute the current request, and yield.
+ : *
+ : **********************/
+ :
+ :_X_EXPORT void
+ :ResetCurrentRequest(ClientPtr client)
+ :{
+ : OsCommPtr oc = (OsCommPtr)client->osPrivate;
+ : register ConnectionInputPtr oci = oc->input;
+ : int fd = oc->fd;
+ : register xReq *request;
+ : int gotnow, needed;
+ : if (AvailableInput == oc)
+ : AvailableInput = (OsCommPtr)NULL;
+ : oci->lenLastReq = 0;
+ : gotnow = oci->bufcnt + oci->buffer - oci->bufptr;
+ : if (gotnow < sizeof(xReq))
+ : {
+ : YieldControlNoInput();
+ : }
+ : else
+ : {
+ : request = (xReq *)oci->bufptr;
+ : needed = get_req_len(request, client);
+ :#ifdef BIGREQS
+ : if (!needed && client->big_requests)
+ : {
+ : oci->bufptr -= sizeof(xBigReq) - sizeof(xReq);
+ : *(xReq *)oci->bufptr = *request;
+ : ((xBigReq *)oci->bufptr)->length = client->req_len;
+ : if (client->swapped)
+ : {
+ : char n;
+ : swapl(&((xBigReq *)oci->bufptr)->length, n);
+ : }
+ : }
+ :#endif
+ : if (gotnow >= (needed << 2))
+ : {
+ : if (FD_ISSET(fd, &AllClients))
+ : {
+ : FD_SET(fd, &ClientsWithInput);
+ : }
+ : else
+ : {
+ : FD_SET(fd, &IgnoredClientsWithInput);
+ : }
+ : YieldControl();
+ : }
+ : else
+ : YieldControlNoInput();
+ : }
+ :}
+ :
+ :
+ :
+ :/*****************************************************************
+ : * PeekNextRequest and SkipRequests were implemented to support DBE
+ : * idioms, but can certainly be used outside of DBE. There are two
+ : * related macros in os.h, ReqLen and CastxReq. See the porting
+ : * layer document for more details.
+ : *
+ : **********************/
+ :
+ :
+ :/*****************************************************************
+ : * PeekNextRequest
+ : * lets you look ahead at the unexecuted requests in a
+ : * client's request buffer.
+ : *
+ : * Note: this implementation of PeekNextRequest ignores the
+ : * readmore parameter.
+ : *
+ : **********************/
+ :
+ :static xReqPtr
+ :PeekNextRequest(
+ : xReqPtr req, /* request we're starting from */
+ : ClientPtr client, /* client whose requests we're skipping */
+ : Bool readmore) /* attempt to read more if next request isn't there? */
+ :{
+ : register ConnectionInputPtr oci = ((OsCommPtr)client->osPrivate)->input;
+ : xReqPtr pnextreq;
+ : int needed, gotnow, reqlen;
+ :
+ : if (!oci) return NULL;
+ :
+ : if (!req)
+ : {
+ : /* caller wants the request after the one currently being executed */
+ : pnextreq = (xReqPtr)
+ : (((CARD32 *)client->requestBuffer) + client->req_len);
+ : }
+ : else
+ : {
+ : /* caller wants the request after the one specified by req */
+ : reqlen = get_req_len(req, client);
+ :#ifdef BIGREQS
+ : if (!reqlen) reqlen = get_big_req_len(req, client);
+ :#endif
+ : pnextreq = (xReqPtr)(((char *)req) + (reqlen << 2));
+ : }
+ :
+ : /* see how much of the next request we have available */
+ :
+ : gotnow = oci->bufcnt - (((char *)pnextreq) - oci->buffer);
+ :
+ : if (gotnow < sizeof(xReq))
+ : return NULL;
+ :
+ : needed = get_req_len(pnextreq, client) << 2;
+ :#ifdef BIGREQS
+ : if (!needed)
+ : {
+ : /* it's a big request */
+ : if (gotnow < sizeof(xBigReq))
+ : return NULL;
+ : needed = get_big_req_len(pnextreq, client) << 2;
+ : }
+ :#endif
+ :
+ : /* if we have less than we need, return NULL */
+ :
+ : return (gotnow < needed) ? NULL : pnextreq;
+ :}
+ :
+ :/*****************************************************************
+ : * SkipRequests
+ : * lets you skip over some of the requests in a client's
+ : * request buffer. Presumably the caller has used PeekNextRequest
+ : * to examine the requests being skipped and has performed whatever
+ : * actions they dictate.
+ : *
+ : **********************/
+ :
+ :_X_EXPORT CallbackListPtr SkippedRequestsCallback = NULL;
+ :
+ :static void
+ :SkipRequests(
+ : xReqPtr req, /* last request being skipped */
+ : ClientPtr client, /* client whose requests we're skipping */
+ : int numskipped) /* how many requests we're skipping */
+ :{
+ : OsCommPtr oc = (OsCommPtr)client->osPrivate;
+ : register ConnectionInputPtr oci = oc->input;
+ : int reqlen;
+ :
+ : /* see if anyone wants to snoop the skipped requests */
+ :
+ : if (SkippedRequestsCallback)
+ : {
+ : SkippedRequestInfoRec skipinfo;
+ : skipinfo.req = req;
+ : skipinfo.client = client;
+ : skipinfo.numskipped = numskipped;
+ : CallCallbacks(&SkippedRequestsCallback, &skipinfo);
+ : }
+ :
+ : /* adjust the sequence number */
+ : client->sequence += numskipped;
+ :
+ : /* twiddle the oci to skip over the requests */
+ :
+ : reqlen = get_req_len(req, client);
+ :#ifdef BIGREQS
+ : if (!reqlen) reqlen = get_big_req_len(req, client);
+ :#endif
+ : reqlen <<= 2;
+ : oci->bufptr = (char *)req;
+ : oci->lenLastReq = reqlen;
+ :
+ : /* see if any requests left in the buffer */
+ :
+ : if ( ((char *)req + reqlen) == (oci->buffer + oci->bufcnt) )
+ : {
+ : /* no requests; mark input buffer as available and client
+ : * as having no input
+ : */
+ : int fd = oc->fd;
+ : AvailableInput = oc;
+ : YieldControlNoInput();
+ : }
+ :}
+ :
+ :
+ : /* lookup table for adding padding bytes to data that is read from
+ : or written to the X socket. */
+ :static int padlength[4] = {0, 3, 2, 1};
+ :
+ : /********************
+ : * FlushAllOutput()
+ : * Flush all clients with output. However, if some client still
+ : * has input in the queue (more requests), then don't flush. This
+ : * will prevent the output queue from being flushed every time around
+ : * the round robin queue. Now, some say that it SHOULD be flushed
+ : * every time around, but...
+ : *
+ : **********************/
+ :
+ :void
+ :FlushAllOutput(void)
+ :{
+ : register int index, base;
+ : register fd_mask mask; /* raphael */
+ : OsCommPtr oc;
+ : register ClientPtr client;
+ : Bool newoutput = NewOutputPending;
+ :#if defined(WIN32)
+ : fd_set newOutputPending;
+ :#endif
+ :
+ : if (FlushCallback)
+ : CallCallbacks(&FlushCallback, NULL);
+ :
+ : if (!newoutput)
+ : return;
+ :
+ : /*
+ : * It may be that some client still has critical output pending,
+ : * but he is not yet ready to receive it anyway, so we will
+ : * simply wait for the select to tell us when he's ready to receive.
+ : */
+ : CriticalOutputPending = FALSE;
+ : NewOutputPending = FALSE;
+ :
+ :#ifndef WIN32
+ : for (base = 0; base < howmany(XFD_SETSIZE, NFDBITS); base++)
+ : {
+ : mask = OutputPending.fds_bits[ base ];
+ : OutputPending.fds_bits[ base ] = 0;
+ : while (mask)
+ : {
+ : index = ffs(mask) - 1;
+ : mask &= ~lowbit(mask);
+ : if ((index = ConnectionTranslation[(base * (sizeof(fd_mask)*8)) + index]) == 0)
+ : continue;
+ : client = clients[index];
+ : if (client->clientGone)
+ : continue;
+ : oc = (OsCommPtr)client->osPrivate;
+ : if (FD_ISSET(oc->fd, &ClientsWithInput))
+ : {
+ : FD_SET(oc->fd, &OutputPending); /* set the bit again */
+ : NewOutputPending = TRUE;
+ : }
+ : else
+ : (void)FlushClient(client, oc, (char *)NULL, 0);
+ : }
+ : }
+ :#else /* WIN32 */
+ : FD_ZERO(&newOutputPending);
+ : for (base = 0; base < XFD_SETCOUNT(&OutputPending); base++)
+ : {
+ : index = XFD_FD(&OutputPending, base);
+ : if ((index = GetConnectionTranslation(index)) == 0)
+ : continue;
+ : client = clients[index];
+ : if (client->clientGone)
+ : continue;
+ : oc = (OsCommPtr)client->osPrivate;
+ : if (FD_ISSET(oc->fd, &ClientsWithInput))
+ : {
+ : FD_SET(oc->fd, &newOutputPending); /* set the bit again */
+ : NewOutputPending = TRUE;
+ : }
+ : else
+ : (void)FlushClient(client, oc, (char *)NULL, 0);
+ : }
+ : XFD_COPYSET(&newOutputPending, &OutputPending);
+ :#endif /* WIN32 */
+ :}
+ :
+ :void
+ :FlushIfCriticalOutputPending(void)
+ :{
+ : if (CriticalOutputPending)
+ : FlushAllOutput();
+ :}
+ :
+ :_X_EXPORT void
+ :SetCriticalOutputPending(void)
+ :{
+ : CriticalOutputPending = TRUE;
+ :}
+ :
+ :/*****************
+ : * WriteToClient
+ : * Copies buf into ClientPtr.buf if it fits (with padding), else
+ : * flushes ClientPtr.buf and buf to client. As of this writing,
+ : * every use of WriteToClient is cast to void, and the result
+ : * is ignored. Potentially, this could be used by requests
+ : * that are sending several chunks of data and want to break
+ : * out of a loop on error. Thus, we will leave the type of
+ : * this routine as int.
+ : *****************/
+ :
+ :_X_EXPORT int
+ :WriteToClient (ClientPtr who, int count, char *buf)
+ :{
+ : OsCommPtr oc = (OsCommPtr)who->osPrivate;
+ : ConnectionOutputPtr oco = oc->output;
+ : int padBytes;
+ :#ifdef DEBUG_COMMUNICATION
+ : Bool multicount = FALSE;
+ :#endif
+ : if (!count)
+ : return(0);
+ :#ifdef DEBUG_COMMUNICATION
+ : {
+ : char info[128];
+ : xError *err;
+ : xGenericReply *rep;
+ : xEvent *ev;
+ :
+ : if (!who->replyBytesRemaining) {
+ : switch(buf[0]) {
+ : case X_Reply:
+ : rep = (xGenericReply*)buf;
+ : if (rep->sequenceNumber == who->sequence) {
+ : snprintf(info,127,"Xreply: type: 0x%x data: 0x%x "
+ : "len: %i seq#: 0x%x", rep->type, rep->data1,
+ : rep->length, rep->sequenceNumber);
+ : multicount = TRUE;
+ : }
+ : break;
+ : case X_Error:
+ : err = (xError*)buf;
+ : snprintf(info,127,"Xerror: Code: 0x%x resID: 0x%x maj: 0x%x "
+ : "min: %x", err->errorCode,err->resourceID,
+ : err->minorCode,err->majorCode);
+ : break;
+ : default:
+ : if ((buf[0] & 0x7f) == KeymapNotify)
+ : snprintf(info,127,"KeymapNotifyEvent: %i",buf[0]);
+ : else {
+ : ev = (xEvent*)buf;
+ : snprintf(info,127,"XEvent: type: 0x%x detail: 0x%x "
+ : "seq#: 0x%x", ev->u.u.type, ev->u.u.detail,
+ : ev->u.u.sequenceNumber);
+ : }
+ : }
+ : ErrorF("REPLY: ClientIDX: %i %s\n",who->index, info);
+ : } else
+ : multicount = TRUE;
+ : }
+ :#endif
+ :
+ : if (!oco)
+ : {
+ : if ((oco = FreeOutputs))
+ : {
+ : FreeOutputs = oco->next;
+ : }
+ : else if (!(oco = AllocateOutputBuffer()))
+ : {
+ : if (oc->trans_conn) {
+ : _XSERVTransDisconnect(oc->trans_conn);
+ : _XSERVTransClose(oc->trans_conn);
+ : oc->trans_conn = NULL;
+ : }
+ : MarkClientException(who);
+ : return -1;
+ : }
+ : oc->output = oco;
+ : }
+ :
+ : padBytes = padlength[count & 3];
+ :
+ : if(ReplyCallback)
+ : {
+ : ReplyInfoRec replyinfo;
+ :
+ : replyinfo.client = who;
+ : replyinfo.replyData = buf;
+ : replyinfo.dataLenBytes = count + padBytes;
+ : if (who->replyBytesRemaining)
+ : { /* still sending data of an earlier reply */
+ : who->replyBytesRemaining -= count + padBytes;
+ : replyinfo.startOfReply = FALSE;
+ : replyinfo.bytesRemaining = who->replyBytesRemaining;
+ : CallCallbacks((&ReplyCallback), (pointer)&replyinfo);
+ : }
+ : else if (who->clientState == ClientStateRunning
+ : && buf[0] == X_Reply)
+ : { /* start of new reply */
+ : CARD32 replylen;
+ : unsigned long bytesleft;
+ : char n;
+ :
+ : replylen = ((xGenericReply *)buf)->length;
+ : if (who->swapped)
+ : swapl(&replylen, n);
+ : bytesleft = (replylen * 4) + SIZEOF(xReply) - count - padBytes;
+ : replyinfo.startOfReply = TRUE;
+ : replyinfo.bytesRemaining = who->replyBytesRemaining = bytesleft;
+ : CallCallbacks((&ReplyCallback), (pointer)&replyinfo);
+ : }
+ : }
+ :#ifdef DEBUG_COMMUNICATION
+ : else if (multicount) {
+ : if (who->replyBytesRemaining) {
+ : who->replyBytesRemaining -= (count + padBytes);
+ : } else {
+ : CARD32 replylen;
+ : replylen = ((xGenericReply *)buf)->length;
+ : who->replyBytesRemaining =
+ : (replylen * 4) + SIZEOF(xReply) - count - padBytes;
+ : }
+ : }
+ :#endif
+ : if (oco->count + count + padBytes > oco->size)
+ : {
+ : FD_CLR(oc->fd, &OutputPending);
+ : if(!XFD_ANYSET(&OutputPending)) {
+ : CriticalOutputPending = FALSE;
+ : NewOutputPending = FALSE;
+ : }
+ : return FlushClient(who, oc, buf, count);
+ : }
+ :
+ : NewOutputPending = TRUE;
+ : FD_SET(oc->fd, &OutputPending);
+ : memmove((char *)oco->buf + oco->count, buf, count);
+ : oco->count += count + padBytes;
+ : return(count);
+ :}
+ :
+ : /********************
+ : * FlushClient()
+ : * If the client isn't keeping up with us, then we try to continue
+ : * buffering the data and set the apropriate bit in ClientsWritable
+ : * (which is used by WaitFor in the select). If the connection yields
+ : * a permanent error, or we can't allocate any more space, we then
+ : * close the connection.
+ : *
+ : **********************/
+ :
+ :int
+ :FlushClient(ClientPtr who, OsCommPtr oc, char *extraBuf, int extraCount)
+ :{
+ : ConnectionOutputPtr oco = oc->output;
+ : int connection = oc->fd;
+ : XtransConnInfo trans_conn = oc->trans_conn;
+ : struct iovec iov[3];
+ : static char padBuffer[3];
+ : long written;
+ : long padsize;
+ : long notWritten;
+ : long todo;
+ :
+ : if (!oco)
+ : return 0;
+ : written = 0;
+ : padsize = padlength[extraCount & 3];
+ : notWritten = oco->count + extraCount + padsize;
+ : todo = notWritten;
+ : while (notWritten) {
+ : long before = written; /* amount of whole thing written */
+ : long remain = todo; /* amount to try this time, <= notWritten */
+ : int i = 0;
+ : long len;
+ :
+ : /* You could be very general here and have "in" and "out" iovecs
+ : * and write a loop without using a macro, but what the heck. This
+ : * translates to:
+ : *
+ : * how much of this piece is new?
+ : * if more new then we are trying this time, clamp
+ : * if nothing new
+ : * then bump down amount already written, for next piece
+ : * else put new stuff in iovec, will need all of next piece
+ : *
+ : * Note that todo had better be at least 1 or else we'll end up
+ : * writing 0 iovecs.
+ : */
+ :#define InsertIOV(pointer, length) \
+ : len = (length) - before; \
+ : if (len > remain) \
+ : len = remain; \
+ : if (len <= 0) { \
+ : before = (-len); \
+ : } else { \
+ : iov[i].iov_len = len; \
+ : iov[i].iov_base = (pointer) + before; \
+ : i++; \
+ : remain -= len; \
+ : before = 0; \
+ : }
+ :
+ : InsertIOV ((char *)oco->buf, oco->count)
+ : InsertIOV (extraBuf, extraCount)
+ : InsertIOV (padBuffer, padsize)
+ :
+ : errno = 0;
+ : if (trans_conn && (len = _XSERVTransWritev(trans_conn, iov, i)) >= 0)
+ : {
+ : written += len;
+ : notWritten -= len;
+ : todo = notWritten;
+ : }
+ : else if (ETEST(errno)
+ :#ifdef SUNSYSV /* check for another brain-damaged OS bug */
+ : || (errno == 0)
+ :#endif
+ :#ifdef EMSGSIZE /* check for another brain-damaged OS bug */
+ : || ((errno == EMSGSIZE) && (todo == 1))
+ :#endif
+ : )
+ : {
+ : /* If we've arrived here, then the client is stuffed to the gills
+ : and not ready to accept more. Make a note of it and buffer
+ : the rest. */
+ : FD_SET(connection, &ClientsWriteBlocked);
+ : AnyClientsWriteBlocked = TRUE;
+ :
+ : if (written < oco->count)
+ : {
+ : if (written > 0)
+ : {
+ : oco->count -= written;
+ : memmove((char *)oco->buf,
+ : (char *)oco->buf + written,
+ : oco->count);
+ : written = 0;
+ : }
+ : }
+ : else
+ : {
+ : written -= oco->count;
+ : oco->count = 0;
+ : }
+ :
+ : if (notWritten > oco->size)
+ : {
+ : unsigned char *obuf;
+ :
+ : obuf = (unsigned char *)xrealloc(oco->buf,
+ : notWritten + BUFSIZE);
+ : if (!obuf)
+ : {
+ : _XSERVTransDisconnect(oc->trans_conn);
+ : _XSERVTransClose(oc->trans_conn);
+ : oc->trans_conn = NULL;
+ : MarkClientException(who);
+ : oco->count = 0;
+ : return(-1);
+ : }
+ : oco->size = notWritten + BUFSIZE;
+ : oco->buf = obuf;
+ : }
+ :
+ : /* If the amount written extended into the padBuffer, then the
+ : difference "extraCount - written" may be less than 0 */
+ : if ((len = extraCount - written) > 0)
+ : memmove ((char *)oco->buf + oco->count,
+ : extraBuf + written,
+ : len);
+ :
+ : oco->count = notWritten; /* this will include the pad */
+ : /* return only the amount explicitly requested */
+ : return extraCount;
+ : }
+ :#ifdef EMSGSIZE /* check for another brain-damaged OS bug */
+ : else if (errno == EMSGSIZE)
+ : {
+ : todo >>= 1;
+ : }
+ :#endif
+ : else
+ : {
+ : if (oc->trans_conn)
+ : {
+ : _XSERVTransDisconnect(oc->trans_conn);
+ : _XSERVTransClose(oc->trans_conn);
+ : oc->trans_conn = NULL;
+ : }
+ : MarkClientException(who);
+ : oco->count = 0;
+ : return(-1);
+ : }
+ : }
+ :
+ : /* everything was flushed out */
+ : oco->count = 0;
+ : /* check to see if this client was write blocked */
+ : if (AnyClientsWriteBlocked)
+ : {
+ : FD_CLR(oc->fd, &ClientsWriteBlocked);
+ : if (! XFD_ANYSET(&ClientsWriteBlocked))
+ : AnyClientsWriteBlocked = FALSE;
+ : }
+ : if (oco->size > BUFWATERMARK)
+ : {
+ : xfree(oco->buf);
+ : xfree(oco);
+ : }
+ : else
+ : {
+ : oco->next = FreeOutputs;
+ : FreeOutputs = oco;
+ : }
+ : oc->output = (ConnectionOutputPtr)NULL;
+ : return extraCount; /* return only the amount explicitly requested */
+ :}
+ :
+ :static ConnectionInputPtr
+ :AllocateInputBuffer(void)
+ :{
+ : ConnectionInputPtr oci;
+ :
+ : oci = (ConnectionInputPtr)xalloc(sizeof(ConnectionInput));
+ : if (!oci)
+ : return (ConnectionInputPtr)NULL;
+ : oci->buffer = (char *)xalloc(BUFSIZE);
+ : if (!oci->buffer)
+ : {
+ : xfree(oci);
+ : return (ConnectionInputPtr)NULL;
+ : }
+ : oci->size = BUFSIZE;
+ : oci->bufptr = oci->buffer;
+ : oci->bufcnt = 0;
+ : oci->lenLastReq = 0;
+ : return oci;
+ :}
+ :
+ :static ConnectionOutputPtr
+ :AllocateOutputBuffer(void)
+ :{
+ : ConnectionOutputPtr oco;
+ :
+ : oco = (ConnectionOutputPtr)xalloc(sizeof(ConnectionOutput));
+ : if (!oco)
+ : return (ConnectionOutputPtr)NULL;
+ : oco->buf = (unsigned char *) xalloc(BUFSIZE);
+ : if (!oco->buf)
+ : {
+ : xfree(oco);
+ : return (ConnectionOutputPtr)NULL;
+ : }
+ : oco->size = BUFSIZE;
+ : oco->count = 0;
+ : return oco;
+ :}
+ :
+ :void
+ :FreeOsBuffers(OsCommPtr oc)
+ :{
+ : ConnectionInputPtr oci;
+ : ConnectionOutputPtr oco;
+ :
+ : if (AvailableInput == oc)
+ : AvailableInput = (OsCommPtr)NULL;
+ : if ((oci = oc->input))
+ : {
+ : if (FreeInputs)
+ : {
+ : xfree(oci->buffer);
+ : xfree(oci);
+ : }
+ : else
+ : {
+ : FreeInputs = oci;
+ : oci->next = (ConnectionInputPtr)NULL;
+ : oci->bufptr = oci->buffer;
+ : oci->bufcnt = 0;
+ : oci->lenLastReq = 0;
+ : }
+ : }
+ : if ((oco = oc->output))
+ : {
+ : if (FreeOutputs)
+ : {
+ : xfree(oco->buf);
+ : xfree(oco);
+ : }
+ : else
+ : {
+ : FreeOutputs = oco;
+ : oco->next = (ConnectionOutputPtr)NULL;
+ : oco->count = 0;
+ : }
+ : }
+ :}
+ :
+ :void
+ :ResetOsBuffers(void)
+ :{
+ : ConnectionInputPtr oci;
+ : ConnectionOutputPtr oco;
+ :
+ : while ((oci = FreeInputs))
+ : {
+ : FreeInputs = oci->next;
+ : xfree(oci->buffer);
+ : xfree(oci);
+ : }
+ : while ((oco = FreeOutputs))
+ : {
+ : FreeOutputs = oco->next;
+ : xfree(oco->buf);
+ : xfree(oco);
+ : }
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/dix/dispatch.c"
+ *
+ * 60 0.0654
+ */
+
+
+ :/************************************************************
+ :
+ :Copyright 1987, 1989, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :
+ :Copyright 1987, 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 Digital not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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.
+ :
+ :********************************************************/
+ :
+ :/* The panoramix components contained the following notice */
+ :/*****************************************************************
+ :
+ :Copyright (c) 1991, 1997 Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ :Permission is hereby granted, free of charge, to any person obtaining a copy
+ :of this software and associated documentation files (the "Software"), to deal
+ :in the Software without restriction, including without limitation the rights
+ :to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ :copies of the Software.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ :DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING,
+ :BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY,
+ :WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+ :IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of Digital Equipment Corporation
+ :shall not be used in advertising or otherwise to promote the sale, use or other
+ :dealings in this Software without prior written authorization from Digital
+ :Equipment Corporation.
+ :
+ :******************************************************************/
+ :
+ :/* XSERVER_DTRACE additions:
+ : * Copyright 2005-2006 Sun Microsystems, Inc. All rights reserved.
+ : *
+ : * Permission is hereby granted, free of charge, to any person obtaining a
+ : * copy of this software and associated documentation files (the
+ : * "Software"), to deal in the Software without restriction, including
+ : * without limitation the rights to use, copy, modify, merge, publish,
+ : * distribute, and/or sell copies of the Software, and to permit persons
+ : * to whom the Software is furnished to do so, provided that the above
+ : * copyright notice(s) and this permission notice appear in all copies of
+ : * the Software and that both the above copyright notice(s) and this
+ : * permission notice appear in supporting documentation.
+ : *
+ : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ : * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ : * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ : * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ : * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
+ : *
+ : * Except as contained in this notice, the name of a copyright holder
+ : * shall not be used in advertising or otherwise to promote the sale, use
+ : * or other dealings in this Software without prior written authorization
+ : * of the copyright holder.
+ : */
+ :
+ :
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#ifdef PANORAMIX_DEBUG
+ :#include <stdio.h>
+ :int ProcInitialConnection();
+ :#endif
+ :
+ :#include "windowstr.h"
+ :#include <X11/fonts/fontstruct.h>
+ :#include "dixfontstr.h"
+ :#include "gcstruct.h"
+ :#include "selection.h"
+ :#include "colormapst.h"
+ :#include "cursorstr.h"
+ :#include "scrnintstr.h"
+ :#include "opaque.h"
+ :#include "input.h"
+ :#include "servermd.h"
+ :#include "extnsionst.h"
+ :#include "dixfont.h"
+ :#include "dispatch.h"
+ :#include "swaprep.h"
+ :#include "swapreq.h"
+ :#ifdef PANORAMIX
+ :#include "panoramiX.h"
+ :#include "panoramiXsrv.h"
+ :#endif
+ :#include "xace.h"
+ :#ifdef XAPPGROUP
+ :#include "appgroup.h"
+ :#endif
+ :#ifdef XKB
+ :#ifndef XKB_IN_SERVER
+ :#define XKB_IN_SERVER
+ :#endif
+ :#include "inputstr.h"
+ :#include <xkbsrv.h>
+ :#endif
+ :
+ :#ifdef XSERVER_DTRACE
+ :#include <sys/types.h>
+ :typedef const char *string;
+ :#include "Xserver-dtrace.h"
+ :
+ :char *RequestNames[256];
+ :static void LoadRequestNames(void);
+ :static void FreeRequestNames(void);
+ :#define GetRequestName(i) (RequestNames[i])
+ :#endif
+ :
+ :#define mskcnt ((MAXCLIENTS + 31) / 32)
+ :#define BITMASK(i) (1U << ((i) & 31))
+ :#define MASKIDX(i) ((i) >> 5)
+ :#define MASKWORD(buf, i) buf[MASKIDX(i)]
+ :#define BITSET(buf, i) MASKWORD(buf, i) |= BITMASK(i)
+ :#define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i)
+ :#define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i))
+ :
+ :extern xConnSetupPrefix connSetupPrefix;
+ :extern char *ConnectionInfo;
+ :
+ :_X_EXPORT Selection *CurrentSelections;
+ :_X_EXPORT int NumCurrentSelections;
+ :CallbackListPtr SelectionCallback = NULL;
+ :
+ :static ClientPtr grabClient;
+ :#define GrabNone 0
+ :#define GrabActive 1
+ :#define GrabKickout 2
+ :static int grabState = GrabNone;
+ :static long grabWaiters[mskcnt];
+ :_X_EXPORT CallbackListPtr ServerGrabCallback = NULL;
+ :HWEventQueuePtr checkForInput[2];
+ :extern int connBlockScreenStart;
+ :
+ :static void KillAllClients(void);
+ :
+ :static void DeleteClientFromAnySelections(ClientPtr client);
+ :
+ :static int nextFreeClientID; /* always MIN free client ID */
+ :
+ :static int nClients; /* number of authorized clients */
+ :
+ :_X_EXPORT CallbackListPtr ClientStateCallback;
+ :
+ :/* dispatchException & isItTimeToYield must be declared volatile since they
+ : * are modified by signal handlers - otherwise optimizer may assume it doesn't
+ : * need to actually check value in memory when used and may miss changes from
+ : * signal handlers.
+ : */
+ :_X_EXPORT volatile char dispatchException = 0;
+ :_X_EXPORT volatile char isItTimeToYield;
+ :
+ :/* Various of the DIX function interfaces were not designed to allow
+ : * the client->errorValue to be set on BadValue and other errors.
+ : * Rather than changing interfaces and breaking untold code we introduce
+ : * a new global that dispatch can use.
+ : */
+ :XID clientErrorValue; /* XXX this is a kludge */
+ :
+ :#define SAME_SCREENS(a, b) (\
+ : (a.pScreen == b.pScreen))
+ :
+ :_X_EXPORT void
+ :SetInputCheck(HWEventQueuePtr c0, HWEventQueuePtr c1)
+ :{
+ : checkForInput[0] = c0;
+ : checkForInput[1] = c1;
+ :}
+ :
+ :_X_EXPORT void
+ :UpdateCurrentTime(void)
+ :{
+ : TimeStamp systime;
+ :
+ : /* To avoid time running backwards, we must call GetTimeInMillis before
+ : * calling ProcessInputEvents.
+ : */
+ : systime.months = currentTime.months;
+ : systime.milliseconds = GetTimeInMillis();
+ : if (systime.milliseconds < currentTime.milliseconds)
+ : systime.months++;
+ : if (*checkForInput[0] != *checkForInput[1])
+ : ProcessInputEvents();
+ : if (CompareTimeStamps(systime, currentTime) == LATER)
+ : currentTime = systime;
+ :}
+ :
+ :/* Like UpdateCurrentTime, but can't call ProcessInputEvents */
+ :_X_EXPORT void
+ :UpdateCurrentTimeIf(void)
+ :{
+ : TimeStamp systime;
+ :
+ : systime.months = currentTime.months;
+ : systime.milliseconds = GetTimeInMillis();
+ : if (systime.milliseconds < currentTime.milliseconds)
+ : systime.months++;
+ : if (*checkForInput[0] == *checkForInput[1])
+ : currentTime = systime;
+ :}
+ :
+ :void
+ :InitSelections(void)
+ :{
+ : if (CurrentSelections)
+ : xfree(CurrentSelections);
+ : CurrentSelections = (Selection *)NULL;
+ : NumCurrentSelections = 0;
+ :}
+ :
+ :void
+ :FlushClientCaches(XID id)
+ :{ /* FlushClientCaches total: 4 0.0044 */
+ : int i;
+ : ClientPtr client;
+ :
+ : client = clients[CLIENT_ID(id)];
+ 1 0.0011 : if (client == NullClient)
+ : return ;
+ 1 0.0011 : for (i=0; i<currentMaxClients; i++)
+ : {
+ : client = clients[i];
+ : if (client != NullClient)
+ : {
+ : if (client->lastDrawableID == id)
+ : {
+ : client->lastDrawableID = WindowTable[0]->drawable.id;
+ : client->lastDrawable = (DrawablePtr)WindowTable[0];
+ : }
+ : else if (client->lastGCID == id)
+ : {
+ : client->lastGCID = INVALID;
+ : client->lastGC = (GCPtr)NULL;
+ : }
+ : }
+ : }
+ 2 0.0022 :}
+ :#ifdef SMART_SCHEDULE
+ :
+ :#undef SMART_DEBUG
+ :
+ :#define SMART_SCHEDULE_DEFAULT_INTERVAL 20 /* ms */
+ :#define SMART_SCHEDULE_MAX_SLICE 200 /* ms */
+ :
+ :Bool SmartScheduleDisable = FALSE;
+ :long SmartScheduleSlice = SMART_SCHEDULE_DEFAULT_INTERVAL;
+ :long SmartScheduleInterval = SMART_SCHEDULE_DEFAULT_INTERVAL;
+ :long SmartScheduleMaxSlice = SMART_SCHEDULE_MAX_SLICE;
+ :long SmartScheduleTime;
+ :static ClientPtr SmartLastClient;
+ :static int SmartLastIndex[SMART_MAX_PRIORITY-SMART_MIN_PRIORITY+1];
+ :
+ :#ifdef SMART_DEBUG
+ :long SmartLastPrint;
+ :#endif
+ :
+ :void Dispatch(void);
+ :void InitProcVectors(void);
+ :
+ :static int
+ :SmartScheduleClient (int *clientReady, int nready)
+ :{
+ : ClientPtr pClient;
+ : int i;
+ : int client;
+ : int bestPrio, best = 0;
+ : int bestRobin, robin;
+ : long now = SmartScheduleTime;
+ : long idle;
+ :
+ : bestPrio = -0x7fffffff;
+ : bestRobin = 0;
+ : idle = 2 * SmartScheduleSlice;
+ : for (i = 0; i < nready; i++)
+ : {
+ : client = clientReady[i];
+ : pClient = clients[client];
+ : /* Praise clients which are idle */
+ : if ((now - pClient->smart_check_tick) >= idle)
+ : {
+ : if (pClient->smart_priority < 0)
+ : pClient->smart_priority++;
+ : }
+ : pClient->smart_check_tick = now;
+ :
+ : /* check priority to select best client */
+ : robin = (pClient->index - SmartLastIndex[pClient->smart_priority-SMART_MIN_PRIORITY]) & 0xff;
+ : if (pClient->smart_priority > bestPrio ||
+ : (pClient->smart_priority == bestPrio && robin > bestRobin))
+ : {
+ : bestPrio = pClient->smart_priority;
+ : bestRobin = robin;
+ : best = client;
+ : }
+ :#ifdef SMART_DEBUG
+ : if ((now - SmartLastPrint) >= 5000)
+ : fprintf (stderr, " %2d: %3d", client, pClient->smart_priority);
+ :#endif
+ : }
+ :#ifdef SMART_DEBUG
+ : if ((now - SmartLastPrint) >= 5000)
+ : {
+ : fprintf (stderr, " use %2d\n", best);
+ : SmartLastPrint = now;
+ : }
+ :#endif
+ : pClient = clients[best];
+ : SmartLastIndex[bestPrio-SMART_MIN_PRIORITY] = pClient->index;
+ : /*
+ : * Set current client pointer
+ : */
+ : if (SmartLastClient != pClient)
+ : {
+ : pClient->smart_start_tick = now;
+ : SmartLastClient = pClient;
+ : }
+ : /*
+ : * Adjust slice
+ : */
+ : if (nready == 1)
+ : {
+ : /*
+ : * If it's been a long time since another client
+ : * has run, bump the slice up to get maximal
+ : * performance from a single client
+ : */
+ : if ((now - pClient->smart_start_tick) > 1000 &&
+ : SmartScheduleSlice < SmartScheduleMaxSlice)
+ : {
+ : SmartScheduleSlice += SmartScheduleInterval;
+ : }
+ : }
+ : else
+ : {
+ : SmartScheduleSlice = SmartScheduleInterval;
+ : }
+ : return best;
+ :}
+ :#endif
+ :
+ :#define MAJOROP ((xReq *)client->requestBuffer)->reqType
+ :
+ :void
+ :Dispatch(void)
+ :{ /* Dispatch total: 37 0.0403 */
+ : int *clientReady; /* array of request ready clients */
+ : int result;
+ : ClientPtr client;
+ : int nready;
+ : HWEventQueuePtr* icheck = checkForInput;
+ :#ifdef SMART_SCHEDULE
+ : long start_tick;
+ :#endif
+ :
+ : nextFreeClientID = 1;
+ : InitSelections();
+ : nClients = 0;
+ :
+ : clientReady = (int *) ALLOCATE_LOCAL(sizeof(int) * MaxClients);
+ : if (!clientReady)
+ : return;
+ :
+ :#ifdef XSERVER_DTRACE
+ : LoadRequestNames();
+ :#endif
+ :
+ : while (!dispatchException)
+ : {
+ : if (*icheck[0] != *icheck[1])
+ : {
+ : ProcessInputEvents();
+ : FlushIfCriticalOutputPending();
+ : }
+ :
+ : nready = WaitForSomething(clientReady);
+ :
+ :#ifdef SMART_SCHEDULE
+ : if (nready && !SmartScheduleDisable)
+ : {
+ : clientReady[0] = SmartScheduleClient (clientReady, nready);
+ : nready = 1;
+ : }
+ :#endif
+ : /*****************
+ : * Handle events in round robin fashion, doing input between
+ : * each round
+ : *****************/
+ :
+ : while (!dispatchException && (--nready >= 0))
+ : {
+ : client = clients[clientReady[nready]];
+ : if (! client)
+ : {
+ : /* KillClient can cause this to happen */
+ : continue;
+ : }
+ : /* GrabServer activation can cause this to be true */
+ : if (grabState == GrabKickout)
+ : {
+ : grabState = GrabActive;
+ : break;
+ : }
+ : isItTimeToYield = FALSE;
+ :
+ : requestingClient = client;
+ :#ifdef SMART_SCHEDULE
+ : start_tick = SmartScheduleTime;
+ :#endif
+ 1 0.0011 : while (!isItTimeToYield)
+ : {
+ 8 0.0087 : if (*icheck[0] != *icheck[1])
+ : {
+ : ProcessInputEvents();
+ : FlushIfCriticalOutputPending();
+ : }
+ :#ifdef SMART_SCHEDULE
+ 6 0.0065 : if (!SmartScheduleDisable &&
+ : (SmartScheduleTime - start_tick) >= SmartScheduleSlice)
+ : {
+ : /* Penalize clients which consume ticks */
+ : if (client->smart_priority > SMART_MIN_PRIORITY)
+ : client->smart_priority--;
+ : break;
+ : }
+ :#endif
+ : /* now, finally, deal with client requests */
+ :
+ 2 0.0022 : result = ReadRequestFromClient(client);
+ 2 0.0022 : if (result <= 0)
+ : {
+ : if (result < 0)
+ : CloseDownClient(client);
+ : break;
+ : }
+ :
+ 2 0.0022 : client->sequence++;
+ :#ifdef DEBUG
+ : if (client->requestLogIndex == MAX_REQUEST_LOG)
+ : client->requestLogIndex = 0;
+ : client->requestLog[client->requestLogIndex] = MAJOROP;
+ : client->requestLogIndex++;
+ :#endif
+ :#ifdef XSERVER_DTRACE
+ : XSERVER_REQUEST_START(GetRequestName(MAJOROP), MAJOROP,
+ : ((xReq *)client->requestBuffer)->length,
+ : client->index, client->requestBuffer);
+ :#endif
+ 4 0.0044 : if (result > (maxBigRequestSize << 2))
+ : result = BadLength;
+ : else {
+ : XaceHook(XACE_AUDIT_BEGIN, client);
+ 3 0.0033 : result = (* client->requestVector[MAJOROP])(client);
+ 8 0.0087 : XaceHook(XACE_AUDIT_END, client, result);
+ : }
+ :#ifdef XSERVER_DTRACE
+ : XSERVER_REQUEST_DONE(GetRequestName(MAJOROP), MAJOROP,
+ : client->sequence, client->index, result);
+ :#endif
+ :
+ 1 0.0011 : if (result != Success)
+ : {
+ : if (client->noClientException != Success)
+ : CloseDownClient(client);
+ : else
+ : SendErrorToClient(client, MAJOROP,
+ : MinorOpcodeOfRequest(client),
+ : client->errorValue, result);
+ : break;
+ : }
+ :#ifdef DAMAGEEXT
+ : FlushIfCriticalOutputPending ();
+ :#endif
+ : }
+ : FlushAllOutput();
+ :#ifdef SMART_SCHEDULE
+ : client = clients[clientReady[nready]];
+ : if (client)
+ : client->smart_stop_tick = SmartScheduleTime;
+ :#endif
+ : requestingClient = NULL;
+ : }
+ : dispatchException &= ~DE_PRIORITYCHANGE;
+ : }
+ :#if defined(DDXBEFORERESET)
+ : ddxBeforeReset ();
+ :#endif
+ : KillAllClients();
+ : DEALLOCATE_LOCAL(clientReady);
+ : dispatchException &= ~DE_RESET;
+ :#ifdef XSERVER_DTRACE
+ : FreeRequestNames();
+ :#endif
+ :}
+ :
+ :#undef MAJOROP
+ :
+ :_X_EXPORT int
+ :ProcBadRequest(ClientPtr client)
+ :{
+ : return (BadRequest);
+ :}
+ :
+ :int
+ :ProcCreateWindow(ClientPtr client)
+ :{
+ : WindowPtr pParent, pWin;
+ : REQUEST(xCreateWindowReq);
+ : int result, len, rc;
+ :
+ : REQUEST_AT_LEAST_SIZE(xCreateWindowReq);
+ :
+ : LEGAL_NEW_RESOURCE(stuff->wid, client);
+ : rc = dixLookupWindow(&pParent, stuff->parent, client, DixWriteAccess);
+ : if (rc != Success)
+ : return rc;
+ : len = client->req_len - (sizeof(xCreateWindowReq) >> 2);
+ : if (Ones(stuff->mask) != len)
+ : return BadLength;
+ : if (!stuff->width || !stuff->height)
+ : {
+ : client->errorValue = 0;
+ : return BadValue;
+ : }
+ : pWin = CreateWindow(stuff->wid, pParent, stuff->x,
+ : stuff->y, stuff->width, stuff->height,
+ : stuff->borderWidth, stuff->class,
+ : stuff->mask, (XID *) &stuff[1],
+ : (int)stuff->depth,
+ : client, stuff->visual, &result);
+ : if (pWin)
+ : {
+ : Mask mask = pWin->eventMask;
+ :
+ : pWin->eventMask = 0; /* subterfuge in case AddResource fails */
+ : if (!AddResource(stuff->wid, RT_WINDOW, (pointer)pWin))
+ : return BadAlloc;
+ : pWin->eventMask = mask;
+ : }
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(result);
+ :}
+ :
+ :int
+ :ProcChangeWindowAttributes(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xChangeWindowAttributesReq);
+ : int result;
+ : int len, rc;
+ :
+ : REQUEST_AT_LEAST_SIZE(xChangeWindowAttributesReq);
+ : rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
+ : if (rc != Success)
+ : return rc;
+ : len = client->req_len - (sizeof(xChangeWindowAttributesReq) >> 2);
+ : if (len != Ones(stuff->valueMask))
+ : return BadLength;
+ : result = ChangeWindowAttributes(pWin,
+ : stuff->valueMask,
+ : (XID *) &stuff[1],
+ : client);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(result);
+ :}
+ :
+ :int
+ :ProcGetWindowAttributes(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xResourceReq);
+ : xGetWindowAttributesReply wa;
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : GetWindowAttributes(pWin, client, &wa);
+ : WriteReplyToClient(client, sizeof(xGetWindowAttributesReply), &wa);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcDestroyWindow(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xResourceReq);
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : rc = dixLookupWindow(&pWin, stuff->id, client, DixDestroyAccess);
+ : if (rc != Success)
+ : return rc;
+ : if (pWin->parent)
+ : FreeResource(stuff->id, RT_NONE);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcDestroySubwindows(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xResourceReq);
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : rc = dixLookupWindow(&pWin, stuff->id, client, DixDestroyAccess);
+ : if (rc != Success)
+ : return rc;
+ : DestroySubwindows(pWin, client);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcChangeSaveSet(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xChangeSaveSetReq);
+ : int result, rc;
+ :
+ : REQUEST_SIZE_MATCH(xChangeSaveSetReq);
+ : rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : if (client->clientAsMask == (CLIENT_BITS(pWin->drawable.id)))
+ : return BadMatch;
+ : if ((stuff->mode == SetModeInsert) || (stuff->mode == SetModeDelete))
+ : {
+ : result = AlterSaveSetForClient(client, pWin, stuff->mode, FALSE, TRUE);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(result);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->mode;
+ : return( BadValue );
+ : }
+ :}
+ :
+ :int
+ :ProcReparentWindow(ClientPtr client)
+ :{
+ : WindowPtr pWin, pParent;
+ : REQUEST(xReparentWindowReq);
+ : int result, rc;
+ :
+ : REQUEST_SIZE_MATCH(xReparentWindowReq);
+ : rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
+ : if (rc != Success)
+ : return rc;
+ : rc = dixLookupWindow(&pParent, stuff->parent, client, DixWriteAccess);
+ : if (rc != Success)
+ : return rc;
+ : if (SAME_SCREENS(pWin->drawable, pParent->drawable))
+ : {
+ : if ((pWin->backgroundState == ParentRelative) &&
+ : (pParent->drawable.depth != pWin->drawable.depth))
+ : return BadMatch;
+ : if ((pWin->drawable.class != InputOnly) &&
+ : (pParent->drawable.class == InputOnly))
+ : return BadMatch;
+ : result = ReparentWindow(pWin, pParent,
+ : (short)stuff->x, (short)stuff->y, client);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(result);
+ : }
+ : else
+ : return (BadMatch);
+ :}
+ :
+ :int
+ :ProcMapWindow(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xResourceReq);
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : MapWindow(pWin, client);
+ : /* update cache to say it is mapped */
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcMapSubwindows(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xResourceReq);
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : MapSubwindows(pWin, client);
+ : /* update cache to say it is mapped */
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcUnmapWindow(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xResourceReq);
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : UnmapWindow(pWin, FALSE);
+ : /* update cache to say it is mapped */
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcUnmapSubwindows(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xResourceReq);
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : UnmapSubwindows(pWin);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcConfigureWindow(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xConfigureWindowReq);
+ : int result;
+ : int len, rc;
+ :
+ : REQUEST_AT_LEAST_SIZE(xConfigureWindowReq);
+ : rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
+ : if (rc != Success)
+ : return rc;
+ : len = client->req_len - (sizeof(xConfigureWindowReq) >> 2);
+ : if (Ones((Mask)stuff->mask) != len)
+ : return BadLength;
+ : result = ConfigureWindow(pWin, (Mask)stuff->mask, (XID *) &stuff[1],
+ : client);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(result);
+ :}
+ :
+ :int
+ :ProcCirculateWindow(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : REQUEST(xCirculateWindowReq);
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xCirculateWindowReq);
+ : if ((stuff->direction != RaiseLowest) &&
+ : (stuff->direction != LowerHighest))
+ : {
+ : client->errorValue = stuff->direction;
+ : return BadValue;
+ : }
+ : rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
+ : if (rc != Success)
+ : return rc;
+ : CirculateWindow(pWin, (int)stuff->direction, client);
+ : return(client->noClientException);
+ :}
+ :
+ :static int
+ :GetGeometry(ClientPtr client, xGetGeometryReply *rep)
+ :{
+ : DrawablePtr pDraw;
+ : int rc;
+ : REQUEST(xResourceReq);
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ :
+ : rc = dixLookupDrawable(&pDraw, stuff->id, client, M_ANY, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ :
+ : rep->type = X_Reply;
+ : rep->length = 0;
+ : rep->sequenceNumber = client->sequence;
+ : rep->root = WindowTable[pDraw->pScreen->myNum]->drawable.id;
+ : rep->depth = pDraw->depth;
+ : rep->width = pDraw->width;
+ : rep->height = pDraw->height;
+ :
+ : /* XXX - Because the pixmap-implementation of the multibuffer extension
+ : * may have the buffer-id's drawable resource value be a pointer
+ : * to the buffer's window instead of the buffer itself
+ : * (this happens if the buffer is the displayed buffer),
+ : * we also have to check that the id matches before we can
+ : * truly say that it is a DRAWABLE_WINDOW.
+ : */
+ :
+ : if ((pDraw->type == UNDRAWABLE_WINDOW) ||
+ : ((pDraw->type == DRAWABLE_WINDOW) && (stuff->id == pDraw->id)))
+ : {
+ : WindowPtr pWin = (WindowPtr)pDraw;
+ : rep->x = pWin->origin.x - wBorderWidth (pWin);
+ : rep->y = pWin->origin.y - wBorderWidth (pWin);
+ : rep->borderWidth = pWin->borderWidth;
+ : }
+ : else /* DRAWABLE_PIXMAP or DRAWABLE_BUFFER */
+ : {
+ : rep->x = rep->y = rep->borderWidth = 0;
+ : }
+ :
+ : return Success;
+ :}
+ :
+ :
+ :int
+ :ProcGetGeometry(ClientPtr client)
+ :{
+ : xGetGeometryReply rep;
+ : int status;
+ :
+ : if ((status = GetGeometry(client, &rep)) != Success)
+ : return status;
+ :
+ : WriteReplyToClient(client, sizeof(xGetGeometryReply), &rep);
+ : return(client->noClientException);
+ :}
+ :
+ :
+ :int
+ :ProcQueryTree(ClientPtr client)
+ :{
+ : xQueryTreeReply reply;
+ : int rc, numChildren = 0;
+ : WindowPtr pChild, pWin, pHead;
+ : Window *childIDs = (Window *)NULL;
+ : REQUEST(xResourceReq);
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : reply.type = X_Reply;
+ : reply.root = WindowTable[pWin->drawable.pScreen->myNum]->drawable.id;
+ : reply.sequenceNumber = client->sequence;
+ : if (pWin->parent)
+ : reply.parent = pWin->parent->drawable.id;
+ : else
+ : reply.parent = (Window)None;
+ : pHead = RealChildHead(pWin);
+ : for (pChild = pWin->lastChild; pChild != pHead; pChild = pChild->prevSib)
+ : numChildren++;
+ : if (numChildren)
+ : {
+ : int curChild = 0;
+ :
+ : childIDs = (Window *) ALLOCATE_LOCAL(numChildren * sizeof(Window));
+ : if (!childIDs)
+ : return BadAlloc;
+ : for (pChild = pWin->lastChild; pChild != pHead; pChild = pChild->prevSib)
+ : childIDs[curChild++] = pChild->drawable.id;
+ : }
+ :
+ : reply.nChildren = numChildren;
+ : reply.length = (numChildren * sizeof(Window)) >> 2;
+ :
+ : WriteReplyToClient(client, sizeof(xQueryTreeReply), &reply);
+ : if (numChildren)
+ : {
+ : client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
+ : WriteSwappedDataToClient(client, numChildren * sizeof(Window), childIDs);
+ : DEALLOCATE_LOCAL(childIDs);
+ : }
+ :
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcInternAtom(ClientPtr client)
+ :{
+ : Atom atom;
+ : char *tchar;
+ : REQUEST(xInternAtomReq);
+ :
+ : REQUEST_FIXED_SIZE(xInternAtomReq, stuff->nbytes);
+ : if ((stuff->onlyIfExists != xTrue) && (stuff->onlyIfExists != xFalse))
+ : {
+ : client->errorValue = stuff->onlyIfExists;
+ : return(BadValue);
+ : }
+ : tchar = (char *) &stuff[1];
+ : atom = MakeAtom(tchar, stuff->nbytes, !stuff->onlyIfExists);
+ : if (atom != BAD_RESOURCE)
+ : {
+ : xInternAtomReply reply;
+ : reply.type = X_Reply;
+ : reply.length = 0;
+ : reply.sequenceNumber = client->sequence;
+ : reply.atom = atom;
+ : WriteReplyToClient(client, sizeof(xInternAtomReply), &reply);
+ : return(client->noClientException);
+ : }
+ : else
+ : return (BadAlloc);
+ :}
+ :
+ :int
+ :ProcGetAtomName(ClientPtr client)
+ :{
+ : char *str;
+ : xGetAtomNameReply reply;
+ : int len;
+ : REQUEST(xResourceReq);
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : if ( (str = NameForAtom(stuff->id)) )
+ : {
+ : len = strlen(str);
+ : reply.type = X_Reply;
+ : reply.length = (len + 3) >> 2;
+ : reply.sequenceNumber = client->sequence;
+ : reply.nameLength = len;
+ : WriteReplyToClient(client, sizeof(xGetAtomNameReply), &reply);
+ : (void)WriteToClient(client, len, str);
+ : return(client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->id;
+ : return (BadAtom);
+ : }
+ :}
+ :
+ :int
+ :ProcSetSelectionOwner(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : TimeStamp time;
+ : REQUEST(xSetSelectionOwnerReq);
+ :
+ : REQUEST_SIZE_MATCH(xSetSelectionOwnerReq);
+ : UpdateCurrentTime();
+ : time = ClientTimeToServerTime(stuff->time);
+ :
+ : /* If the client's time stamp is in the future relative to the server's
+ : time stamp, do not set the selection, just return success. */
+ : if (CompareTimeStamps(time, currentTime) == LATER)
+ : return Success;
+ : if (stuff->window != None)
+ : {
+ : int rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : }
+ : else
+ : pWin = (WindowPtr)None;
+ : if (ValidAtom(stuff->selection))
+ : {
+ : int i = 0;
+ :
+ : /*
+ : * First, see if the selection is already set...
+ : */
+ : while ((i < NumCurrentSelections) &&
+ : CurrentSelections[i].selection != stuff->selection)
+ : i++;
+ : if (i < NumCurrentSelections)
+ : {
+ : xEvent event;
+ :
+ : /* If the timestamp in client's request is in the past relative
+ : to the time stamp indicating the last time the owner of the
+ : selection was set, do not set the selection, just return
+ : success. */
+ : if (CompareTimeStamps(time, CurrentSelections[i].lastTimeChanged)
+ : == EARLIER)
+ : return Success;
+ : if (CurrentSelections[i].client &&
+ : (!pWin || (CurrentSelections[i].client != client)))
+ : {
+ : event.u.u.type = SelectionClear;
+ : event.u.selectionClear.time = time.milliseconds;
+ : event.u.selectionClear.window = CurrentSelections[i].window;
+ : event.u.selectionClear.atom = CurrentSelections[i].selection;
+ : (void) TryClientEvents (CurrentSelections[i].client, &event, 1,
+ : NoEventMask, NoEventMask /* CantBeFiltered */,
+ : NullGrab);
+ : }
+ : }
+ : else
+ : {
+ : /*
+ : * It doesn't exist, so add it...
+ : */
+ : Selection *newsels;
+ :
+ : if (i == 0)
+ : newsels = (Selection *)xalloc(sizeof(Selection));
+ : else
+ : newsels = (Selection *)xrealloc(CurrentSelections,
+ : (NumCurrentSelections + 1) * sizeof(Selection));
+ : if (!newsels)
+ : return BadAlloc;
+ : NumCurrentSelections++;
+ : CurrentSelections = newsels;
+ : CurrentSelections[i].selection = stuff->selection;
+ : }
+ : CurrentSelections[i].lastTimeChanged = time;
+ : CurrentSelections[i].window = stuff->window;
+ : CurrentSelections[i].pWin = pWin;
+ : CurrentSelections[i].client = (pWin ? client : NullClient);
+ : if (SelectionCallback)
+ : {
+ : SelectionInfoRec info;
+ :
+ : info.selection = &CurrentSelections[i];
+ : info.kind= SelectionSetOwner;
+ : CallCallbacks(&SelectionCallback, &info);
+ : }
+ : return (client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->selection;
+ : return (BadAtom);
+ : }
+ :}
+ :
+ :int
+ :ProcGetSelectionOwner(ClientPtr client)
+ :{
+ : REQUEST(xResourceReq);
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : if (ValidAtom(stuff->id))
+ : {
+ : int i;
+ : xGetSelectionOwnerReply reply;
+ :
+ : i = 0;
+ : while ((i < NumCurrentSelections) &&
+ : CurrentSelections[i].selection != stuff->id) i++;
+ : reply.type = X_Reply;
+ : reply.length = 0;
+ : reply.sequenceNumber = client->sequence;
+ : if (i < NumCurrentSelections)
+ : reply.owner = CurrentSelections[i].window;
+ : else
+ : reply.owner = None;
+ : WriteReplyToClient(client, sizeof(xGetSelectionOwnerReply), &reply);
+ : return(client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->id;
+ : return (BadAtom);
+ : }
+ :}
+ :
+ :int
+ :ProcConvertSelection(ClientPtr client)
+ :{
+ : Bool paramsOkay;
+ : xEvent event;
+ : WindowPtr pWin;
+ : REQUEST(xConvertSelectionReq);
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xConvertSelectionReq);
+ : rc = dixLookupWindow(&pWin, stuff->requestor, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ :
+ : paramsOkay = (ValidAtom(stuff->selection) && ValidAtom(stuff->target));
+ : if (stuff->property != None)
+ : paramsOkay &= ValidAtom(stuff->property);
+ : if (paramsOkay)
+ : {
+ : int i;
+ :
+ : i = 0;
+ : while ((i < NumCurrentSelections) &&
+ : CurrentSelections[i].selection != stuff->selection) i++;
+ : if ((i < NumCurrentSelections) &&
+ : (CurrentSelections[i].window != None) &&
+ : XaceHook(XACE_RESOURCE_ACCESS, client,
+ : CurrentSelections[i].window, RT_WINDOW,
+ : DixReadAccess, CurrentSelections[i].pWin))
+ : {
+ : event.u.u.type = SelectionRequest;
+ : event.u.selectionRequest.time = stuff->time;
+ : event.u.selectionRequest.owner =
+ : CurrentSelections[i].window;
+ : event.u.selectionRequest.requestor = stuff->requestor;
+ : event.u.selectionRequest.selection = stuff->selection;
+ : event.u.selectionRequest.target = stuff->target;
+ : event.u.selectionRequest.property = stuff->property;
+ : if (TryClientEvents(
+ : CurrentSelections[i].client, &event, 1, NoEventMask,
+ : NoEventMask /* CantBeFiltered */, NullGrab))
+ : return (client->noClientException);
+ : }
+ : event.u.u.type = SelectionNotify;
+ : event.u.selectionNotify.time = stuff->time;
+ : event.u.selectionNotify.requestor = stuff->requestor;
+ : event.u.selectionNotify.selection = stuff->selection;
+ : event.u.selectionNotify.target = stuff->target;
+ : event.u.selectionNotify.property = None;
+ : (void) TryClientEvents(client, &event, 1, NoEventMask,
+ : NoEventMask /* CantBeFiltered */, NullGrab);
+ : return (client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->property;
+ : return (BadAtom);
+ : }
+ :}
+ :
+ :int
+ :ProcGrabServer(ClientPtr client)
+ :{
+ : REQUEST_SIZE_MATCH(xReq);
+ : if (grabState != GrabNone && client != grabClient)
+ : {
+ : ResetCurrentRequest(client);
+ : client->sequence--;
+ : BITSET(grabWaiters, client->index);
+ : IgnoreClient(client);
+ : return(client->noClientException);
+ : }
+ : OnlyListenToOneClient(client);
+ : grabState = GrabKickout;
+ : grabClient = client;
+ :
+ : if (ServerGrabCallback)
+ : {
+ : ServerGrabInfoRec grabinfo;
+ : grabinfo.client = client;
+ : grabinfo.grabstate = SERVER_GRABBED;
+ : CallCallbacks(&ServerGrabCallback, (pointer)&grabinfo);
+ : }
+ :
+ : return(client->noClientException);
+ :}
+ :
+ :static void
+ :UngrabServer(ClientPtr client)
+ :{
+ : int i;
+ :
+ : grabState = GrabNone;
+ : ListenToAllClients();
+ : for (i = mskcnt; --i >= 0 && !grabWaiters[i]; )
+ : ;
+ : if (i >= 0)
+ : {
+ : i <<= 5;
+ : while (!GETBIT(grabWaiters, i))
+ : i++;
+ : BITCLEAR(grabWaiters, i);
+ : AttendClient(clients[i]);
+ : }
+ :
+ : if (ServerGrabCallback)
+ : {
+ : ServerGrabInfoRec grabinfo;
+ : grabinfo.client = client;
+ : grabinfo.grabstate = SERVER_UNGRABBED;
+ : CallCallbacks(&ServerGrabCallback, (pointer)&grabinfo);
+ : }
+ :}
+ :
+ :int
+ :ProcUngrabServer(ClientPtr client)
+ :{
+ : REQUEST_SIZE_MATCH(xReq);
+ : UngrabServer(client);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcTranslateCoords(ClientPtr client)
+ :{
+ : REQUEST(xTranslateCoordsReq);
+ :
+ : WindowPtr pWin, pDst;
+ : xTranslateCoordsReply rep;
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xTranslateCoordsReq);
+ : rc = dixLookupWindow(&pWin, stuff->srcWid, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : rc = dixLookupWindow(&pDst, stuff->dstWid, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : rep.type = X_Reply;
+ : rep.length = 0;
+ : rep.sequenceNumber = client->sequence;
+ : if (!SAME_SCREENS(pWin->drawable, pDst->drawable))
+ : {
+ : rep.sameScreen = xFalse;
+ : rep.child = None;
+ : rep.dstX = rep.dstY = 0;
+ : }
+ : else
+ : {
+ : INT16 x, y;
+ : rep.sameScreen = xTrue;
+ : rep.child = None;
+ : /* computing absolute coordinates -- adjust to destination later */
+ : x = pWin->drawable.x + stuff->srcX;
+ : y = pWin->drawable.y + stuff->srcY;
+ : pWin = pDst->firstChild;
+ : while (pWin)
+ : {
+ :#ifdef SHAPE
+ : BoxRec box;
+ :#endif
+ : if ((pWin->mapped) &&
+ : (x >= pWin->drawable.x - wBorderWidth (pWin)) &&
+ : (x < pWin->drawable.x + (int)pWin->drawable.width +
+ : wBorderWidth (pWin)) &&
+ : (y >= pWin->drawable.y - wBorderWidth (pWin)) &&
+ : (y < pWin->drawable.y + (int)pWin->drawable.height +
+ : wBorderWidth (pWin))
+ :#ifdef SHAPE
+ : /* When a window is shaped, a further check
+ : * is made to see if the point is inside
+ : * borderSize
+ : */
+ : && (!wBoundingShape(pWin) ||
+ : POINT_IN_REGION(pWin->drawable.pScreen,
+ : &pWin->borderSize, x, y, &box))
+ :
+ : && (!wInputShape(pWin) ||
+ : POINT_IN_REGION(pWin->drawable.pScreen,
+ : wInputShape(pWin),
+ : x - pWin->drawable.x,
+ : y - pWin->drawable.y, &box))
+ :#endif
+ : )
+ : {
+ : rep.child = pWin->drawable.id;
+ : pWin = (WindowPtr) NULL;
+ : }
+ : else
+ : pWin = pWin->nextSib;
+ : }
+ : /* adjust to destination coordinates */
+ : rep.dstX = x - pDst->drawable.x;
+ : rep.dstY = y - pDst->drawable.y;
+ : }
+ : WriteReplyToClient(client, sizeof(xTranslateCoordsReply), &rep);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcOpenFont(ClientPtr client)
+ :{
+ : int err;
+ : REQUEST(xOpenFontReq);
+ :
+ : REQUEST_FIXED_SIZE(xOpenFontReq, stuff->nbytes);
+ : client->errorValue = stuff->fid;
+ : LEGAL_NEW_RESOURCE(stuff->fid, client);
+ : err = OpenFont(client, stuff->fid, (Mask) 0,
+ : stuff->nbytes, (char *)&stuff[1]);
+ : if (err == Success)
+ : {
+ : return(client->noClientException);
+ : }
+ : else
+ : return err;
+ :}
+ :
+ :int
+ :ProcCloseFont(ClientPtr client)
+ :{
+ : FontPtr pFont;
+ : REQUEST(xResourceReq);
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT,
+ : DixDestroyAccess);
+ : if ( pFont != (FontPtr)NULL) /* id was valid */
+ : {
+ : FreeResource(stuff->id, RT_NONE);
+ : return(client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->id;
+ : return (BadFont);
+ : }
+ :}
+ :
+ :int
+ :ProcQueryFont(ClientPtr client)
+ :{
+ : xQueryFontReply *reply;
+ : FontPtr pFont;
+ : GC *pGC;
+ : REQUEST(xResourceReq);
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : client->errorValue = stuff->id; /* EITHER font or gc */
+ : pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT,
+ : DixReadAccess);
+ : if (!pFont)
+ : {
+ : pGC = (GC *) SecurityLookupIDByType(client, stuff->id, RT_GC,
+ : DixReadAccess);
+ : if (!pGC)
+ : {
+ : client->errorValue = stuff->id;
+ : return(BadFont); /* procotol spec says only error is BadFont */
+ : }
+ : pFont = pGC->font;
+ : }
+ :
+ : {
+ : xCharInfo *pmax = FONTINKMAX(pFont);
+ : xCharInfo *pmin = FONTINKMIN(pFont);
+ : int nprotoxcistructs;
+ : int rlength;
+ :
+ : nprotoxcistructs = (
+ : pmax->rightSideBearing == pmin->rightSideBearing &&
+ : pmax->leftSideBearing == pmin->leftSideBearing &&
+ : pmax->descent == pmin->descent &&
+ : pmax->ascent == pmin->ascent &&
+ : pmax->characterWidth == pmin->characterWidth) ?
+ : 0 : N2dChars(pFont);
+ :
+ : rlength = sizeof(xQueryFontReply) +
+ : FONTINFONPROPS(FONTCHARSET(pFont)) * sizeof(xFontProp) +
+ : nprotoxcistructs * sizeof(xCharInfo);
+ : reply = (xQueryFontReply *)ALLOCATE_LOCAL(rlength);
+ : if(!reply)
+ : {
+ : return(BadAlloc);
+ : }
+ :
+ : reply->type = X_Reply;
+ : reply->length = (rlength - sizeof(xGenericReply)) >> 2;
+ : reply->sequenceNumber = client->sequence;
+ : QueryFont( pFont, reply, nprotoxcistructs);
+ :
+ : WriteReplyToClient(client, rlength, reply);
+ : DEALLOCATE_LOCAL(reply);
+ : return(client->noClientException);
+ : }
+ :}
+ :
+ :int
+ :ProcQueryTextExtents(ClientPtr client)
+ :{
+ : REQUEST(xQueryTextExtentsReq);
+ : xQueryTextExtentsReply reply;
+ : FontPtr pFont;
+ : GC *pGC;
+ : ExtentInfoRec info;
+ : unsigned long length;
+ :
+ : REQUEST_AT_LEAST_SIZE(xQueryTextExtentsReq);
+ :
+ : pFont = (FontPtr)SecurityLookupIDByType(client, stuff->fid, RT_FONT,
+ : DixReadAccess);
+ : if (!pFont)
+ : {
+ : pGC = (GC *)SecurityLookupIDByType(client, stuff->fid, RT_GC,
+ : DixReadAccess);
+ : if (!pGC)
+ : {
+ : client->errorValue = stuff->fid;
+ : return(BadFont);
+ : }
+ : pFont = pGC->font;
+ : }
+ : length = client->req_len - (sizeof(xQueryTextExtentsReq) >> 2);
+ : length = length << 1;
+ : if (stuff->oddLength)
+ : {
+ : if (length == 0)
+ : return(BadLength);
+ : length--;
+ : }
+ : if (!QueryTextExtents(pFont, length, (unsigned char *)&stuff[1], &info))
+ : return(BadAlloc);
+ : reply.type = X_Reply;
+ : reply.length = 0;
+ : reply.sequenceNumber = client->sequence;
+ : reply.drawDirection = info.drawDirection;
+ : reply.fontAscent = info.fontAscent;
+ : reply.fontDescent = info.fontDescent;
+ : reply.overallAscent = info.overallAscent;
+ : reply.overallDescent = info.overallDescent;
+ : reply.overallWidth = info.overallWidth;
+ : reply.overallLeft = info.overallLeft;
+ : reply.overallRight = info.overallRight;
+ : WriteReplyToClient(client, sizeof(xQueryTextExtentsReply), &reply);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcListFonts(ClientPtr client)
+ :{
+ : REQUEST(xListFontsReq);
+ :
+ : REQUEST_FIXED_SIZE(xListFontsReq, stuff->nbytes);
+ :
+ : return ListFonts(client, (unsigned char *) &stuff[1], stuff->nbytes,
+ : stuff->maxNames);
+ :}
+ :
+ :int
+ :ProcListFontsWithInfo(ClientPtr client)
+ :{
+ : REQUEST(xListFontsWithInfoReq);
+ :
+ : REQUEST_FIXED_SIZE(xListFontsWithInfoReq, stuff->nbytes);
+ :
+ : return StartListFontsWithInfo(client, stuff->nbytes,
+ : (unsigned char *) &stuff[1], stuff->maxNames);
+ :}
+ :
+ :/**
+ : *
+ : * \param value must conform to DeleteType
+ : */
+ :int
+ :dixDestroyPixmap(pointer value, XID pid)
+ :{
+ : PixmapPtr pPixmap = (PixmapPtr)value;
+ : return (*pPixmap->drawable.pScreen->DestroyPixmap)(pPixmap);
+ :}
+ :
+ :int
+ :ProcCreatePixmap(ClientPtr client)
+ 1 0.0011 :{ /* ProcCreatePixmap total: 9 0.0098 */
+ : PixmapPtr pMap;
+ : DrawablePtr pDraw;
+ : REQUEST(xCreatePixmapReq);
+ : DepthPtr pDepth;
+ : int i, rc;
+ :
+ : REQUEST_SIZE_MATCH(xCreatePixmapReq);
+ : client->errorValue = stuff->pid;
+ 1 0.0011 : LEGAL_NEW_RESOURCE(stuff->pid, client);
+ :
+ 1 0.0011 : rc = dixLookupDrawable(&pDraw, stuff->drawable, client, M_ANY,
+ : DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ :
+ : if (!stuff->width || !stuff->height)
+ : {
+ : client->errorValue = 0;
+ : return BadValue;
+ : }
+ 1 0.0011 : if (stuff->width > 32767 || stuff->height > 32767)
+ : {
+ : /* It is allowed to try and allocate a pixmap which is larger than
+ : * 32767 in either dimension. However, all of the framebuffer code
+ : * is buggy and does not reliably draw to such big pixmaps, basically
+ : * because the Region data structure operates with signed shorts
+ : * for the rectangles in it.
+ : *
+ : * Furthermore, several places in the X server computes the
+ : * size in bytes of the pixmap and tries to store it in an
+ : * integer. This integer can overflow and cause the allocated size
+ : * to be much smaller.
+ : *
+ : * So, such big pixmaps are rejected here with a BadAlloc
+ : */
+ : return BadAlloc;
+ : }
+ : if (stuff->depth != 1)
+ : {
+ 1 0.0011 : pDepth = pDraw->pScreen->allowedDepths;
+ 1 0.0011 : for (i=0; i<pDraw->pScreen->numDepths; i++, pDepth++)
+ 2 0.0022 : if (pDepth->depth == stuff->depth)
+ : goto CreatePmap;
+ : client->errorValue = stuff->depth;
+ : return BadValue;
+ : }
+ :CreatePmap:
+ 1 0.0011 : pMap = (PixmapPtr)(*pDraw->pScreen->CreatePixmap)
+ : (pDraw->pScreen, stuff->width,
+ : stuff->height, stuff->depth);
+ : if (pMap)
+ : {
+ : pMap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ : pMap->drawable.id = stuff->pid;
+ : if (AddResource(stuff->pid, RT_PIXMAP, (pointer)pMap))
+ : return(client->noClientException);
+ : }
+ : return (BadAlloc);
+ :}
+ :
+ :int
+ :ProcFreePixmap(ClientPtr client)
+ 1 0.0011 :{ /* ProcFreePixmap total: 6 0.0065 */
+ : PixmapPtr pMap;
+ :
+ : REQUEST(xResourceReq);
+ :
+ 4 0.0044 : REQUEST_SIZE_MATCH(xResourceReq);
+ : pMap = (PixmapPtr)SecurityLookupIDByType(client, stuff->id, RT_PIXMAP,
+ : DixDestroyAccess);
+ : if (pMap)
+ : {
+ 1 0.0011 : FreeResource(stuff->id, RT_NONE);
+ : return(client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->id;
+ : return (BadPixmap);
+ : }
+ :}
+ :
+ :int
+ :ProcCreateGC(ClientPtr client)
+ :{
+ : int error, rc;
+ : GC *pGC;
+ : DrawablePtr pDraw;
+ : unsigned len;
+ : REQUEST(xCreateGCReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xCreateGCReq);
+ : client->errorValue = stuff->gc;
+ : LEGAL_NEW_RESOURCE(stuff->gc, client);
+ : rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ :
+ : len = client->req_len - (sizeof(xCreateGCReq) >> 2);
+ : if (len != Ones(stuff->mask))
+ : return BadLength;
+ : pGC = (GC *)CreateGC(pDraw, stuff->mask,
+ : (XID *) &stuff[1], &error);
+ : if (error != Success)
+ : return error;
+ : if (!AddResource(stuff->gc, RT_GC, (pointer)pGC))
+ : return (BadAlloc);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcChangeGC(ClientPtr client)
+ 1 0.0011 :{ /* ProcChangeGC total: 1 0.0011 */
+ : GC *pGC;
+ : int result;
+ : unsigned len;
+ : REQUEST(xChangeGCReq);
+ : REQUEST_AT_LEAST_SIZE(xChangeGCReq);
+ :
+ : result = dixLookupGC(&pGC, stuff->gc, client, DixWriteAccess);
+ : if (result != Success)
+ : return result;
+ :
+ : len = client->req_len - (sizeof(xChangeGCReq) >> 2);
+ : if (len != Ones(stuff->mask))
+ : return BadLength;
+ :
+ : result = dixChangeGC(client, pGC, stuff->mask, (CARD32 *) &stuff[1], 0);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : {
+ : client->errorValue = clientErrorValue;
+ : return(result);
+ : }
+ :}
+ :
+ :int
+ :ProcCopyGC(ClientPtr client)
+ :{
+ : GC *dstGC;
+ : GC *pGC;
+ : int result;
+ : REQUEST(xCopyGCReq);
+ : REQUEST_SIZE_MATCH(xCopyGCReq);
+ :
+ : result = dixLookupGC(&pGC, stuff->srcGC, client, DixReadAccess);
+ : if (result != Success)
+ : return result;
+ : result = dixLookupGC(&dstGC, stuff->dstGC, client, DixWriteAccess);
+ : if (result != Success)
+ : return result;
+ : if ((dstGC->pScreen != pGC->pScreen) || (dstGC->depth != pGC->depth))
+ : return (BadMatch);
+ : result = CopyGC(pGC, dstGC, stuff->mask);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : {
+ : client->errorValue = clientErrorValue;
+ : return(result);
+ : }
+ :}
+ :
+ :int
+ :ProcSetDashes(ClientPtr client)
+ :{
+ : GC *pGC;
+ : int result;
+ : REQUEST(xSetDashesReq);
+ :
+ : REQUEST_FIXED_SIZE(xSetDashesReq, stuff->nDashes);
+ : if (stuff->nDashes == 0)
+ : {
+ : client->errorValue = 0;
+ : return BadValue;
+ : }
+ :
+ : result = dixLookupGC(&pGC,stuff->gc, client, DixWriteAccess);
+ : if (result != Success)
+ : return result;
+ :
+ : result = SetDashes(pGC, stuff->dashOffset, stuff->nDashes,
+ : (unsigned char *)&stuff[1]);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : {
+ : client->errorValue = clientErrorValue;
+ : return(result);
+ : }
+ :}
+ :
+ :int
+ :ProcSetClipRectangles(ClientPtr client)
+ :{ /* ProcSetClipRectangles total: 1 0.0011 */
+ : int nr, result;
+ : GC *pGC;
+ : REQUEST(xSetClipRectanglesReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq);
+ : if ((stuff->ordering != Unsorted) && (stuff->ordering != YSorted) &&
+ : (stuff->ordering != YXSorted) && (stuff->ordering != YXBanded))
+ : {
+ : client->errorValue = stuff->ordering;
+ : return BadValue;
+ : }
+ 1 0.0011 : result = dixLookupGC(&pGC,stuff->gc, client, DixWriteAccess);
+ : if (result != Success)
+ : return result;
+ :
+ : nr = (client->req_len << 2) - sizeof(xSetClipRectanglesReq);
+ : if (nr & 4)
+ : return(BadLength);
+ : nr >>= 3;
+ : result = SetClipRects(pGC, stuff->xOrigin, stuff->yOrigin,
+ : nr, (xRectangle *)&stuff[1], (int)stuff->ordering);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(result);
+ :}
+ :
+ :int
+ :ProcFreeGC(ClientPtr client)
+ :{
+ : GC *pGC;
+ : int rc;
+ : REQUEST(xResourceReq);
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ :
+ : rc = dixLookupGC(&pGC, stuff->id, client, DixDestroyAccess);
+ : if (rc != Success)
+ : return rc;
+ :
+ : FreeResource(stuff->id, RT_NONE);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcClearToBackground(ClientPtr client)
+ :{
+ : REQUEST(xClearAreaReq);
+ : WindowPtr pWin;
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xClearAreaReq);
+ : rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
+ : if (rc != Success)
+ : return rc;
+ : if (pWin->drawable.class == InputOnly)
+ : {
+ : client->errorValue = stuff->window;
+ : return (BadMatch);
+ : }
+ : if ((stuff->exposures != xTrue) && (stuff->exposures != xFalse))
+ : {
+ : client->errorValue = stuff->exposures;
+ : return(BadValue);
+ : }
+ : (*pWin->drawable.pScreen->ClearToBackground)(pWin, stuff->x, stuff->y,
+ : stuff->width, stuff->height,
+ : (Bool)stuff->exposures);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcCopyArea(ClientPtr client)
+ 1 0.0011 :{ /* ProcCopyArea total: 1 0.0011 */
+ : DrawablePtr pDst;
+ : DrawablePtr pSrc;
+ : GC *pGC;
+ : REQUEST(xCopyAreaReq);
+ : RegionPtr pRgn;
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xCopyAreaReq);
+ :
+ : VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pDst, pGC, client);
+ : if (stuff->dstDrawable != stuff->srcDrawable)
+ : {
+ : rc = dixLookupDrawable(&pSrc, stuff->srcDrawable, client, 0,
+ : DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : if ((pDst->pScreen != pSrc->pScreen) || (pDst->depth != pSrc->depth))
+ : {
+ : client->errorValue = stuff->dstDrawable;
+ : return (BadMatch);
+ : }
+ : }
+ : else
+ : pSrc = pDst;
+ :
+ : pRgn = (*pGC->ops->CopyArea)(pSrc, pDst, pGC, stuff->srcX, stuff->srcY,
+ : stuff->width, stuff->height,
+ : stuff->dstX, stuff->dstY);
+ : if (pGC->graphicsExposures)
+ : {
+ : (*pDst->pScreen->SendGraphicsExpose)
+ : (client, pRgn, stuff->dstDrawable, X_CopyArea, 0);
+ : if (pRgn)
+ : REGION_DESTROY(pDst->pScreen, pRgn);
+ : }
+ :
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcCopyPlane(ClientPtr client)
+ :{
+ : DrawablePtr psrcDraw, pdstDraw;
+ : GC *pGC;
+ : REQUEST(xCopyPlaneReq);
+ : RegionPtr pRgn;
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xCopyPlaneReq);
+ :
+ : VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pdstDraw, pGC, client);
+ : if (stuff->dstDrawable != stuff->srcDrawable)
+ : {
+ : rc = dixLookupDrawable(&psrcDraw, stuff->srcDrawable, client, 0,
+ : DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ :
+ : if (pdstDraw->pScreen != psrcDraw->pScreen)
+ : {
+ : client->errorValue = stuff->dstDrawable;
+ : return (BadMatch);
+ : }
+ : }
+ : else
+ : psrcDraw = pdstDraw;
+ :
+ : /* Check to see if stuff->bitPlane has exactly ONE good bit set */
+ : if(stuff->bitPlane == 0 || (stuff->bitPlane & (stuff->bitPlane - 1)) ||
+ : (stuff->bitPlane > (1L << (psrcDraw->depth - 1))))
+ : {
+ : client->errorValue = stuff->bitPlane;
+ : return(BadValue);
+ : }
+ :
+ : pRgn = (*pGC->ops->CopyPlane)(psrcDraw, pdstDraw, pGC, stuff->srcX, stuff->srcY,
+ : stuff->width, stuff->height,
+ : stuff->dstX, stuff->dstY, stuff->bitPlane);
+ : if (pGC->graphicsExposures)
+ : {
+ : (*pdstDraw->pScreen->SendGraphicsExpose)
+ : (client, pRgn, stuff->dstDrawable, X_CopyPlane, 0);
+ : if (pRgn)
+ : REGION_DESTROY(pdstDraw->pScreen, pRgn);
+ : }
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcPolyPoint(ClientPtr client)
+ :{
+ : int npoint;
+ : GC *pGC;
+ : DrawablePtr pDraw;
+ : REQUEST(xPolyPointReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xPolyPointReq);
+ : if ((stuff->coordMode != CoordModeOrigin) &&
+ : (stuff->coordMode != CoordModePrevious))
+ : {
+ : client->errorValue = stuff->coordMode;
+ : return BadValue;
+ : }
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ : npoint = ((client->req_len << 2) - sizeof(xPolyPointReq)) >> 2;
+ : if (npoint)
+ : (*pGC->ops->PolyPoint)(pDraw, pGC, stuff->coordMode, npoint,
+ : (xPoint *) &stuff[1]);
+ : return (client->noClientException);
+ :}
+ :
+ :int
+ :ProcPolyLine(ClientPtr client)
+ :{
+ : int npoint;
+ : GC *pGC;
+ : DrawablePtr pDraw;
+ : REQUEST(xPolyLineReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xPolyLineReq);
+ : if ((stuff->coordMode != CoordModeOrigin) &&
+ : (stuff->coordMode != CoordModePrevious))
+ : {
+ : client->errorValue = stuff->coordMode;
+ : return BadValue;
+ : }
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ : npoint = ((client->req_len << 2) - sizeof(xPolyLineReq)) >> 2;
+ : if (npoint > 1)
+ : (*pGC->ops->Polylines)(pDraw, pGC, stuff->coordMode, npoint,
+ : (DDXPointPtr) &stuff[1]);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcPolySegment(ClientPtr client)
+ :{
+ : int nsegs;
+ : GC *pGC;
+ : DrawablePtr pDraw;
+ : REQUEST(xPolySegmentReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xPolySegmentReq);
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ : nsegs = (client->req_len << 2) - sizeof(xPolySegmentReq);
+ : if (nsegs & 4)
+ : return(BadLength);
+ : nsegs >>= 3;
+ : if (nsegs)
+ : (*pGC->ops->PolySegment)(pDraw, pGC, nsegs, (xSegment *) &stuff[1]);
+ : return (client->noClientException);
+ :}
+ :
+ :int
+ :ProcPolyRectangle (ClientPtr client)
+ :{
+ : int nrects;
+ : GC *pGC;
+ : DrawablePtr pDraw;
+ : REQUEST(xPolyRectangleReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xPolyRectangleReq);
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ : nrects = (client->req_len << 2) - sizeof(xPolyRectangleReq);
+ : if (nrects & 4)
+ : return(BadLength);
+ : nrects >>= 3;
+ : if (nrects)
+ : (*pGC->ops->PolyRectangle)(pDraw, pGC,
+ : nrects, (xRectangle *) &stuff[1]);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcPolyArc(ClientPtr client)
+ :{
+ : int narcs;
+ : GC *pGC;
+ : DrawablePtr pDraw;
+ : REQUEST(xPolyArcReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xPolyArcReq);
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ : narcs = (client->req_len << 2) - sizeof(xPolyArcReq);
+ : if (narcs % sizeof(xArc))
+ : return(BadLength);
+ : narcs /= sizeof(xArc);
+ : if (narcs)
+ : (*pGC->ops->PolyArc)(pDraw, pGC, narcs, (xArc *) &stuff[1]);
+ : return (client->noClientException);
+ :}
+ :
+ :int
+ :ProcFillPoly(ClientPtr client)
+ :{
+ : int things;
+ : GC *pGC;
+ : DrawablePtr pDraw;
+ : REQUEST(xFillPolyReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xFillPolyReq);
+ : if ((stuff->shape != Complex) && (stuff->shape != Nonconvex) &&
+ : (stuff->shape != Convex))
+ : {
+ : client->errorValue = stuff->shape;
+ : return BadValue;
+ : }
+ : if ((stuff->coordMode != CoordModeOrigin) &&
+ : (stuff->coordMode != CoordModePrevious))
+ : {
+ : client->errorValue = stuff->coordMode;
+ : return BadValue;
+ : }
+ :
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ : things = ((client->req_len << 2) - sizeof(xFillPolyReq)) >> 2;
+ : if (things)
+ : (*pGC->ops->FillPolygon) (pDraw, pGC, stuff->shape,
+ : stuff->coordMode, things,
+ : (DDXPointPtr) &stuff[1]);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcPolyFillRectangle(ClientPtr client)
+ :{ /* ProcPolyFillRectangle total: 1 0.0011 */
+ : int things;
+ : GC *pGC;
+ : DrawablePtr pDraw;
+ : REQUEST(xPolyFillRectangleReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq);
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ : things = (client->req_len << 2) - sizeof(xPolyFillRectangleReq);
+ : if (things & 4)
+ : return(BadLength);
+ 1 0.0011 : things >>= 3;
+ :
+ : if (things)
+ : (*pGC->ops->PolyFillRect) (pDraw, pGC, things,
+ : (xRectangle *) &stuff[1]);
+ : return (client->noClientException);
+ :}
+ :
+ :int
+ :ProcPolyFillArc(ClientPtr client)
+ :{
+ : int narcs;
+ : GC *pGC;
+ : DrawablePtr pDraw;
+ : REQUEST(xPolyFillArcReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xPolyFillArcReq);
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ : narcs = (client->req_len << 2) - sizeof(xPolyFillArcReq);
+ : if (narcs % sizeof(xArc))
+ : return(BadLength);
+ : narcs /= sizeof(xArc);
+ : if (narcs)
+ : (*pGC->ops->PolyFillArc) (pDraw, pGC, narcs, (xArc *) &stuff[1]);
+ : return (client->noClientException);
+ :}
+ :
+ :#ifdef MATCH_CLIENT_ENDIAN
+ :
+ :int
+ :ServerOrder (void)
+ :{
+ : int whichbyte = 1;
+ :
+ : if (*((char *) &whichbyte))
+ : return LSBFirst;
+ : return MSBFirst;
+ :}
+ :
+ :#define ClientOrder(client) ((client)->swapped ? !ServerOrder() : ServerOrder())
+ :
+ :void
+ :ReformatImage (char *base, int nbytes, int bpp, int order)
+ :{
+ : switch (bpp) {
+ : case 1: /* yuck */
+ : if (BITMAP_BIT_ORDER != order)
+ : BitOrderInvert ((unsigned char *) base, nbytes);
+ :#if IMAGE_BYTE_ORDER != BITMAP_BIT_ORDER && BITMAP_SCANLINE_UNIT != 8
+ : ReformatImage (base, nbytes, BITMAP_SCANLINE_UNIT, order);
+ :#endif
+ : break;
+ : case 4:
+ : break; /* yuck */
+ : case 8:
+ : break;
+ : case 16:
+ : if (IMAGE_BYTE_ORDER != order)
+ : TwoByteSwap ((unsigned char *) base, nbytes);
+ : break;
+ : case 32:
+ : if (IMAGE_BYTE_ORDER != order)
+ : FourByteSwap ((unsigned char *) base, nbytes);
+ : break;
+ : }
+ :}
+ :#else
+ :#define ReformatImage(b,n,bpp,o)
+ :#endif
+ :
+ :/* 64-bit server notes: the protocol restricts padding of images to
+ : * 8-, 16-, or 32-bits. We would like to have 64-bits for the server
+ : * to use internally. Removes need for internal alignment checking.
+ : * All of the PutImage functions could be changed individually, but
+ : * as currently written, they call other routines which require things
+ : * to be 64-bit padded on scanlines, so we changed things here.
+ : * If an image would be padded differently for 64- versus 32-, then
+ : * copy each scanline to a 64-bit padded scanline.
+ : * Also, we need to make sure that the image is aligned on a 64-bit
+ : * boundary, even if the scanlines are padded to our satisfaction.
+ : */
+ :int
+ :ProcPutImage(ClientPtr client)
+ :{
+ : GC *pGC;
+ : DrawablePtr pDraw;
+ : long length; /* length of scanline server padded */
+ : long lengthProto; /* length of scanline protocol padded */
+ : char *tmpImage;
+ : REQUEST(xPutImageReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xPutImageReq);
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ : if (stuff->format == XYBitmap)
+ : {
+ : if ((stuff->depth != 1) ||
+ : (stuff->leftPad >= (unsigned int)screenInfo.bitmapScanlinePad))
+ : return BadMatch;
+ : length = BitmapBytePad(stuff->width + stuff->leftPad);
+ : }
+ : else if (stuff->format == XYPixmap)
+ : {
+ : if ((pDraw->depth != stuff->depth) ||
+ : (stuff->leftPad >= (unsigned int)screenInfo.bitmapScanlinePad))
+ : return BadMatch;
+ : length = BitmapBytePad(stuff->width + stuff->leftPad);
+ : length *= stuff->depth;
+ : }
+ : else if (stuff->format == ZPixmap)
+ : {
+ : if ((pDraw->depth != stuff->depth) || (stuff->leftPad != 0))
+ : return BadMatch;
+ : length = PixmapBytePad(stuff->width, stuff->depth);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->format;
+ : return BadValue;
+ : }
+ :
+ : tmpImage = (char *)&stuff[1];
+ : lengthProto = length;
+ :
+ : if (((((lengthProto * stuff->height) + (unsigned)3) >> 2) +
+ : (sizeof(xPutImageReq) >> 2)) != client->req_len)
+ : return BadLength;
+ :
+ : ReformatImage (tmpImage, lengthProto * stuff->height,
+ : stuff->format == ZPixmap ? BitsPerPixel (stuff->depth) : 1,
+ : ClientOrder(client));
+ :
+ : (*pGC->ops->PutImage) (pDraw, pGC, stuff->depth, stuff->dstX, stuff->dstY,
+ : stuff->width, stuff->height,
+ : stuff->leftPad, stuff->format, tmpImage);
+ :
+ : return (client->noClientException);
+ :}
+ :
+ :static int
+ :DoGetImage(ClientPtr client, int format, Drawable drawable,
+ : int x, int y, int width, int height,
+ : Mask planemask, xGetImageReply **im_return)
+ :{
+ : DrawablePtr pDraw;
+ : int nlines, linesPerBuf, rc;
+ : int linesDone;
+ : long widthBytesLine, length;
+ : Mask plane = 0;
+ : char *pBuf;
+ : xGetImageReply xgi;
+ : RegionPtr pVisibleRegion = NULL;
+ :
+ : if ((format != XYPixmap) && (format != ZPixmap))
+ : {
+ : client->errorValue = format;
+ : return(BadValue);
+ : }
+ : rc = dixLookupDrawable(&pDraw, drawable, client, 0, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ :
+ : if(pDraw->type == DRAWABLE_WINDOW)
+ : {
+ : if( /* check for being viewable */
+ : !((WindowPtr) pDraw)->realized ||
+ : /* check for being on screen */
+ : pDraw->x + x < 0 ||
+ : pDraw->x + x + width > pDraw->pScreen->width ||
+ : pDraw->y + y < 0 ||
+ : pDraw->y + y + height > pDraw->pScreen->height ||
+ : /* check for being inside of border */
+ : x < - wBorderWidth((WindowPtr)pDraw) ||
+ : x + width > wBorderWidth((WindowPtr)pDraw) + (int)pDraw->width ||
+ : y < -wBorderWidth((WindowPtr)pDraw) ||
+ : y + height > wBorderWidth ((WindowPtr)pDraw) + (int)pDraw->height
+ : )
+ : return(BadMatch);
+ : xgi.visual = wVisual (((WindowPtr) pDraw));
+ : }
+ : else
+ : {
+ : if(x < 0 ||
+ : x+width > (int)pDraw->width ||
+ : y < 0 ||
+ : y+height > (int)pDraw->height
+ : )
+ : return(BadMatch);
+ : xgi.visual = None;
+ : }
+ :
+ : xgi.type = X_Reply;
+ : xgi.sequenceNumber = client->sequence;
+ : xgi.depth = pDraw->depth;
+ : if(format == ZPixmap)
+ : {
+ : widthBytesLine = PixmapBytePad(width, pDraw->depth);
+ : length = widthBytesLine * height;
+ :
+ : }
+ : else
+ : {
+ : widthBytesLine = BitmapBytePad(width);
+ : plane = ((Mask)1) << (pDraw->depth - 1);
+ : /* only planes asked for */
+ : length = widthBytesLine * height *
+ : Ones(planemask & (plane | (plane - 1)));
+ :
+ : }
+ :
+ : xgi.length = length;
+ :
+ : if (im_return) {
+ : pBuf = (char *)xalloc(sz_xGetImageReply + length);
+ : if (!pBuf)
+ : return (BadAlloc);
+ : if (widthBytesLine == 0)
+ : linesPerBuf = 0;
+ : else
+ : linesPerBuf = height;
+ : *im_return = (xGetImageReply *)pBuf;
+ : *(xGetImageReply *)pBuf = xgi;
+ : pBuf += sz_xGetImageReply;
+ : } else {
+ : xgi.length = (xgi.length + 3) >> 2;
+ : if (widthBytesLine == 0 || height == 0)
+ : linesPerBuf = 0;
+ : else if (widthBytesLine >= IMAGE_BUFSIZE)
+ : linesPerBuf = 1;
+ : else
+ : {
+ : linesPerBuf = IMAGE_BUFSIZE / widthBytesLine;
+ : if (linesPerBuf > height)
+ : linesPerBuf = height;
+ : }
+ : length = linesPerBuf * widthBytesLine;
+ : if (linesPerBuf < height)
+ : {
+ : /* we have to make sure intermediate buffers don't need padding */
+ : while ((linesPerBuf > 1) &&
+ : (length & ((1L << LOG2_BYTES_PER_SCANLINE_PAD)-1)))
+ : {
+ : linesPerBuf--;
+ : length -= widthBytesLine;
+ : }
+ : while (length & ((1L << LOG2_BYTES_PER_SCANLINE_PAD)-1))
+ : {
+ : linesPerBuf++;
+ : length += widthBytesLine;
+ : }
+ : }
+ : if(!(pBuf = (char *) ALLOCATE_LOCAL(length)))
+ : return (BadAlloc);
+ : WriteReplyToClient(client, sizeof (xGetImageReply), &xgi);
+ : }
+ :
+ : if (pDraw->type == DRAWABLE_WINDOW &&
+ : !XaceHook(XACE_DRAWABLE_ACCESS, client, pDraw))
+ : {
+ : pVisibleRegion = NotClippedByChildren((WindowPtr)pDraw);
+ : if (pVisibleRegion)
+ : {
+ : REGION_TRANSLATE(pDraw->pScreen, pVisibleRegion,
+ : -pDraw->x, -pDraw->y);
+ : }
+ : }
+ :
+ : if (linesPerBuf == 0)
+ : {
+ : /* nothing to do */
+ : }
+ : else if (format == ZPixmap)
+ : {
+ : linesDone = 0;
+ : while (height - linesDone > 0)
+ : {
+ : nlines = min(linesPerBuf, height - linesDone);
+ : (*pDraw->pScreen->GetImage) (pDraw,
+ : x,
+ : y + linesDone,
+ : width,
+ : nlines,
+ : format,
+ : planemask,
+ : (pointer) pBuf);
+ : if (pVisibleRegion)
+ : XaceCensorImage(client, pVisibleRegion, widthBytesLine,
+ : pDraw, x, y + linesDone, width,
+ : nlines, format, pBuf);
+ :
+ : /* Note that this is NOT a call to WriteSwappedDataToClient,
+ : as we do NOT byte swap */
+ : if (!im_return)
+ : {
+ : ReformatImage (pBuf, (int)(nlines * widthBytesLine),
+ : BitsPerPixel (pDraw->depth),
+ : ClientOrder(client));
+ :
+ :/* Don't split me, gcc pukes when you do */
+ : (void)WriteToClient(client,
+ : (int)(nlines * widthBytesLine),
+ : pBuf);
+ : }
+ : linesDone += nlines;
+ : }
+ : }
+ : else /* XYPixmap */
+ : {
+ : for (; plane; plane >>= 1)
+ : {
+ : if (planemask & plane)
+ : {
+ : linesDone = 0;
+ : while (height - linesDone > 0)
+ : {
+ : nlines = min(linesPerBuf, height - linesDone);
+ : (*pDraw->pScreen->GetImage) (pDraw,
+ : x,
+ : y + linesDone,
+ : width,
+ : nlines,
+ : format,
+ : plane,
+ : (pointer)pBuf);
+ : if (pVisibleRegion)
+ : XaceCensorImage(client, pVisibleRegion,
+ : widthBytesLine,
+ : pDraw, x, y + linesDone, width,
+ : nlines, format, pBuf);
+ :
+ : /* Note: NOT a call to WriteSwappedDataToClient,
+ : as we do NOT byte swap */
+ : if (im_return) {
+ : pBuf += nlines * widthBytesLine;
+ : } else {
+ : ReformatImage (pBuf,
+ : (int)(nlines * widthBytesLine),
+ : 1,
+ : ClientOrder (client));
+ :
+ :/* Don't split me, gcc pukes when you do */
+ : (void)WriteToClient(client,
+ : (int)(nlines * widthBytesLine),
+ : pBuf);
+ : }
+ : linesDone += nlines;
+ : }
+ : }
+ : }
+ : }
+ : if (pVisibleRegion)
+ : REGION_DESTROY(pDraw->pScreen, pVisibleRegion);
+ : if (!im_return)
+ : DEALLOCATE_LOCAL(pBuf);
+ : return (client->noClientException);
+ :}
+ :
+ :int
+ :ProcGetImage(ClientPtr client)
+ :{
+ : REQUEST(xGetImageReq);
+ :
+ : REQUEST_SIZE_MATCH(xGetImageReq);
+ :
+ : return DoGetImage(client, stuff->format, stuff->drawable,
+ : stuff->x, stuff->y,
+ : (int)stuff->width, (int)stuff->height,
+ : stuff->planeMask, (xGetImageReply **)NULL);
+ :}
+ :
+ :int
+ :ProcPolyText(ClientPtr client)
+ :{
+ : int err;
+ : REQUEST(xPolyTextReq);
+ : DrawablePtr pDraw;
+ : GC *pGC;
+ :
+ : REQUEST_AT_LEAST_SIZE(xPolyTextReq);
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ :
+ : err = PolyText(client,
+ : pDraw,
+ : pGC,
+ : (unsigned char *)&stuff[1],
+ : ((unsigned char *) stuff) + (client->req_len << 2),
+ : stuff->x,
+ : stuff->y,
+ : stuff->reqType,
+ : stuff->drawable);
+ :
+ : if (err == Success)
+ : {
+ : return(client->noClientException);
+ : }
+ : else
+ : return err;
+ :}
+ :
+ :int
+ :ProcImageText8(ClientPtr client)
+ :{
+ : int err;
+ : DrawablePtr pDraw;
+ : GC *pGC;
+ :
+ : REQUEST(xImageTextReq);
+ :
+ : REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars);
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ :
+ : err = ImageText(client,
+ : pDraw,
+ : pGC,
+ : stuff->nChars,
+ : (unsigned char *)&stuff[1],
+ : stuff->x,
+ : stuff->y,
+ : stuff->reqType,
+ : stuff->drawable);
+ :
+ : if (err == Success)
+ : {
+ : return(client->noClientException);
+ : }
+ : else
+ : return err;
+ :}
+ :
+ :int
+ :ProcImageText16(ClientPtr client)
+ :{
+ : int err;
+ : DrawablePtr pDraw;
+ : GC *pGC;
+ :
+ : REQUEST(xImageTextReq);
+ :
+ : REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars << 1);
+ : VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, pGC, client);
+ :
+ : err = ImageText(client,
+ : pDraw,
+ : pGC,
+ : stuff->nChars,
+ : (unsigned char *)&stuff[1],
+ : stuff->x,
+ : stuff->y,
+ : stuff->reqType,
+ : stuff->drawable);
+ :
+ : if (err == Success)
+ : {
+ : return(client->noClientException);
+ : }
+ : else
+ : return err;
+ :}
+ :
+ :
+ :int
+ :ProcCreateColormap(ClientPtr client)
+ :{
+ : VisualPtr pVisual;
+ : ColormapPtr pmap;
+ : Colormap mid;
+ : WindowPtr pWin;
+ : ScreenPtr pScreen;
+ : REQUEST(xCreateColormapReq);
+ : int i, result;
+ :
+ : REQUEST_SIZE_MATCH(xCreateColormapReq);
+ :
+ : if ((stuff->alloc != AllocNone) && (stuff->alloc != AllocAll))
+ : {
+ : client->errorValue = stuff->alloc;
+ : return(BadValue);
+ : }
+ : mid = stuff->mid;
+ : LEGAL_NEW_RESOURCE(mid, client);
+ : result = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
+ : if (result != Success)
+ : return result;
+ :
+ : pScreen = pWin->drawable.pScreen;
+ : for (i = 0, pVisual = pScreen->visuals;
+ : i < pScreen->numVisuals;
+ : i++, pVisual++)
+ : {
+ : if (pVisual->vid != stuff->visual)
+ : continue;
+ : result = CreateColormap(mid, pScreen, pVisual, &pmap,
+ : (int)stuff->alloc, client->index);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(result);
+ : }
+ : client->errorValue = stuff->visual;
+ : return(BadMatch);
+ :}
+ :
+ :int
+ :ProcFreeColormap(ClientPtr client)
+ :{
+ : ColormapPtr pmap;
+ : REQUEST(xResourceReq);
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : pmap = (ColormapPtr )SecurityLookupIDByType(client, stuff->id, RT_COLORMAP,
+ : DixDestroyAccess);
+ : if (pmap)
+ : {
+ : /* Freeing a default colormap is a no-op */
+ : if (!(pmap->flags & IsDefault))
+ : FreeResource(stuff->id, RT_NONE);
+ : return (client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->id;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :
+ :int
+ :ProcCopyColormapAndFree(ClientPtr client)
+ :{
+ : Colormap mid;
+ : ColormapPtr pSrcMap;
+ : REQUEST(xCopyColormapAndFreeReq);
+ : int result;
+ :
+ : REQUEST_SIZE_MATCH(xCopyColormapAndFreeReq);
+ : mid = stuff->mid;
+ : LEGAL_NEW_RESOURCE(mid, client);
+ : if( (pSrcMap = (ColormapPtr )SecurityLookupIDByType(client, stuff->srcCmap,
+ : RT_COLORMAP, DixReadAccess|DixWriteAccess)) )
+ : {
+ : result = CopyColormapAndFree(mid, pSrcMap, client->index);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(result);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->srcCmap;
+ : return(BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcInstallColormap(ClientPtr client)
+ :{
+ : ColormapPtr pcmp;
+ : REQUEST(xResourceReq);
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->id,
+ : RT_COLORMAP, DixReadAccess);
+ : if (pcmp)
+ : {
+ : (*(pcmp->pScreen->InstallColormap)) (pcmp);
+ : return (client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->id;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcUninstallColormap(ClientPtr client)
+ :{
+ : ColormapPtr pcmp;
+ : REQUEST(xResourceReq);
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->id,
+ : RT_COLORMAP, DixReadAccess);
+ : if (pcmp)
+ : {
+ : if(pcmp->mid != pcmp->pScreen->defColormap)
+ : (*(pcmp->pScreen->UninstallColormap)) (pcmp);
+ : return (client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->id;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcListInstalledColormaps(ClientPtr client)
+ :{
+ : xListInstalledColormapsReply *preply;
+ : int nummaps, rc;
+ : WindowPtr pWin;
+ : REQUEST(xResourceReq);
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ :
+ : preply = (xListInstalledColormapsReply *)
+ : ALLOCATE_LOCAL(sizeof(xListInstalledColormapsReply) +
+ : pWin->drawable.pScreen->maxInstalledCmaps *
+ : sizeof(Colormap));
+ : if(!preply)
+ : return(BadAlloc);
+ :
+ : preply->type = X_Reply;
+ : preply->sequenceNumber = client->sequence;
+ : nummaps = (*pWin->drawable.pScreen->ListInstalledColormaps)
+ : (pWin->drawable.pScreen, (Colormap *)&preply[1]);
+ : preply->nColormaps = nummaps;
+ : preply->length = nummaps;
+ : WriteReplyToClient(client, sizeof (xListInstalledColormapsReply), preply);
+ : client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
+ : WriteSwappedDataToClient(client, nummaps * sizeof(Colormap), &preply[1]);
+ : DEALLOCATE_LOCAL(preply);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcAllocColor (ClientPtr client)
+ :{
+ : ColormapPtr pmap;
+ : int retval;
+ : xAllocColorReply acr;
+ : REQUEST(xAllocColorReq);
+ :
+ : REQUEST_SIZE_MATCH(xAllocColorReq);
+ : pmap = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
+ : RT_COLORMAP, DixWriteAccess);
+ : if (pmap)
+ : {
+ : acr.type = X_Reply;
+ : acr.length = 0;
+ : acr.sequenceNumber = client->sequence;
+ : acr.red = stuff->red;
+ : acr.green = stuff->green;
+ : acr.blue = stuff->blue;
+ : acr.pixel = 0;
+ : if( (retval = AllocColor(pmap, &acr.red, &acr.green, &acr.blue,
+ : &acr.pixel, client->index)) )
+ : {
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return (retval);
+ : }
+ :#ifdef PANORAMIX
+ : if (noPanoramiXExtension || !pmap->pScreen->myNum)
+ :#endif
+ : WriteReplyToClient(client, sizeof(xAllocColorReply), &acr);
+ : return (client->noClientException);
+ :
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->cmap;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcAllocNamedColor (ClientPtr client)
+ :{
+ : ColormapPtr pcmp;
+ : REQUEST(xAllocNamedColorReq);
+ :
+ : REQUEST_FIXED_SIZE(xAllocNamedColorReq, stuff->nbytes);
+ : pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
+ : RT_COLORMAP, DixWriteAccess);
+ : if (pcmp)
+ : {
+ : int retval;
+ :
+ : xAllocNamedColorReply ancr;
+ :
+ : ancr.type = X_Reply;
+ : ancr.length = 0;
+ : ancr.sequenceNumber = client->sequence;
+ :
+ : if(OsLookupColor(pcmp->pScreen->myNum, (char *)&stuff[1], stuff->nbytes,
+ : &ancr.exactRed, &ancr.exactGreen, &ancr.exactBlue))
+ : {
+ : ancr.screenRed = ancr.exactRed;
+ : ancr.screenGreen = ancr.exactGreen;
+ : ancr.screenBlue = ancr.exactBlue;
+ : ancr.pixel = 0;
+ : if( (retval = AllocColor(pcmp,
+ : &ancr.screenRed, &ancr.screenGreen, &ancr.screenBlue,
+ : &ancr.pixel, client->index)) )
+ : {
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(retval);
+ : }
+ :#ifdef PANORAMIX
+ : if (noPanoramiXExtension || !pcmp->pScreen->myNum)
+ :#endif
+ : WriteReplyToClient(client, sizeof (xAllocNamedColorReply), &ancr);
+ : return (client->noClientException);
+ : }
+ : else
+ : return(BadName);
+ :
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->cmap;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcAllocColorCells (ClientPtr client)
+ :{
+ : ColormapPtr pcmp;
+ : REQUEST(xAllocColorCellsReq);
+ :
+ : REQUEST_SIZE_MATCH(xAllocColorCellsReq);
+ : pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
+ : RT_COLORMAP, DixWriteAccess);
+ : if (pcmp)
+ : {
+ : xAllocColorCellsReply accr;
+ : int npixels, nmasks, retval;
+ : long length;
+ : Pixel *ppixels, *pmasks;
+ :
+ : npixels = stuff->colors;
+ : if (!npixels)
+ : {
+ : client->errorValue = npixels;
+ : return (BadValue);
+ : }
+ : if (stuff->contiguous != xTrue && stuff->contiguous != xFalse)
+ : {
+ : client->errorValue = stuff->contiguous;
+ : return (BadValue);
+ : }
+ : nmasks = stuff->planes;
+ : length = ((long)npixels + (long)nmasks) * sizeof(Pixel);
+ : ppixels = (Pixel *)ALLOCATE_LOCAL(length);
+ : if(!ppixels)
+ : return(BadAlloc);
+ : pmasks = ppixels + npixels;
+ :
+ : if( (retval = AllocColorCells(client->index, pcmp, npixels, nmasks,
+ : (Bool)stuff->contiguous, ppixels, pmasks)) )
+ : {
+ : DEALLOCATE_LOCAL(ppixels);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(retval);
+ : }
+ :#ifdef PANORAMIX
+ : if (noPanoramiXExtension || !pcmp->pScreen->myNum)
+ :#endif
+ : {
+ : accr.type = X_Reply;
+ : accr.length = length >> 2;
+ : accr.sequenceNumber = client->sequence;
+ : accr.nPixels = npixels;
+ : accr.nMasks = nmasks;
+ : WriteReplyToClient(client, sizeof (xAllocColorCellsReply), &accr);
+ : client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
+ : WriteSwappedDataToClient(client, length, ppixels);
+ : }
+ : DEALLOCATE_LOCAL(ppixels);
+ : return (client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->cmap;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcAllocColorPlanes(ClientPtr client)
+ :{
+ : ColormapPtr pcmp;
+ : REQUEST(xAllocColorPlanesReq);
+ :
+ : REQUEST_SIZE_MATCH(xAllocColorPlanesReq);
+ : pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
+ : RT_COLORMAP, DixWriteAccess);
+ : if (pcmp)
+ : {
+ : xAllocColorPlanesReply acpr;
+ : int npixels, retval;
+ : long length;
+ : Pixel *ppixels;
+ :
+ : npixels = stuff->colors;
+ : if (!npixels)
+ : {
+ : client->errorValue = npixels;
+ : return (BadValue);
+ : }
+ : if (stuff->contiguous != xTrue && stuff->contiguous != xFalse)
+ : {
+ : client->errorValue = stuff->contiguous;
+ : return (BadValue);
+ : }
+ : acpr.type = X_Reply;
+ : acpr.sequenceNumber = client->sequence;
+ : acpr.nPixels = npixels;
+ : length = (long)npixels * sizeof(Pixel);
+ : ppixels = (Pixel *)ALLOCATE_LOCAL(length);
+ : if(!ppixels)
+ : return(BadAlloc);
+ : if( (retval = AllocColorPlanes(client->index, pcmp, npixels,
+ : (int)stuff->red, (int)stuff->green, (int)stuff->blue,
+ : (Bool)stuff->contiguous, ppixels,
+ : &acpr.redMask, &acpr.greenMask, &acpr.blueMask)) )
+ : {
+ : DEALLOCATE_LOCAL(ppixels);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(retval);
+ : }
+ : acpr.length = length >> 2;
+ :#ifdef PANORAMIX
+ : if (noPanoramiXExtension || !pcmp->pScreen->myNum)
+ :#endif
+ : {
+ : WriteReplyToClient(client, sizeof(xAllocColorPlanesReply), &acpr);
+ : client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
+ : WriteSwappedDataToClient(client, length, ppixels);
+ : }
+ : DEALLOCATE_LOCAL(ppixels);
+ : return (client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->cmap;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcFreeColors(ClientPtr client)
+ :{
+ : ColormapPtr pcmp;
+ : REQUEST(xFreeColorsReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xFreeColorsReq);
+ : pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
+ : RT_COLORMAP, DixWriteAccess);
+ : if (pcmp)
+ : {
+ : int count;
+ : int retval;
+ :
+ : if(pcmp->flags & AllAllocated)
+ : return(BadAccess);
+ : count = ((client->req_len << 2)- sizeof(xFreeColorsReq)) >> 2;
+ : retval = FreeColors(pcmp, client->index, count,
+ : (Pixel *)&stuff[1], (Pixel)stuff->planeMask);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : {
+ : client->errorValue = clientErrorValue;
+ : return(retval);
+ : }
+ :
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->cmap;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcStoreColors (ClientPtr client)
+ :{
+ : ColormapPtr pcmp;
+ : REQUEST(xStoreColorsReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xStoreColorsReq);
+ : pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
+ : RT_COLORMAP, DixWriteAccess);
+ : if (pcmp)
+ : {
+ : int count;
+ : int retval;
+ :
+ : count = (client->req_len << 2) - sizeof(xStoreColorsReq);
+ : if (count % sizeof(xColorItem))
+ : return(BadLength);
+ : count /= sizeof(xColorItem);
+ : retval = StoreColors(pcmp, count, (xColorItem *)&stuff[1]);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : {
+ : client->errorValue = clientErrorValue;
+ : return(retval);
+ : }
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->cmap;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcStoreNamedColor (ClientPtr client)
+ :{
+ : ColormapPtr pcmp;
+ : REQUEST(xStoreNamedColorReq);
+ :
+ : REQUEST_FIXED_SIZE(xStoreNamedColorReq, stuff->nbytes);
+ : pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
+ : RT_COLORMAP, DixWriteAccess);
+ : if (pcmp)
+ : {
+ : xColorItem def;
+ : int retval;
+ :
+ : if(OsLookupColor(pcmp->pScreen->myNum, (char *)&stuff[1],
+ : stuff->nbytes, &def.red, &def.green, &def.blue))
+ : {
+ : def.flags = stuff->flags;
+ : def.pixel = stuff->pixel;
+ : retval = StoreColors(pcmp, 1, &def);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : return(retval);
+ : }
+ : return (BadName);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->cmap;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcQueryColors(ClientPtr client)
+ :{
+ : ColormapPtr pcmp;
+ : REQUEST(xQueryColorsReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xQueryColorsReq);
+ : pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
+ : RT_COLORMAP, DixReadAccess);
+ : if (pcmp)
+ : {
+ : int count, retval;
+ : xrgb *prgbs;
+ : xQueryColorsReply qcr;
+ :
+ : count = ((client->req_len << 2) - sizeof(xQueryColorsReq)) >> 2;
+ : prgbs = (xrgb *)ALLOCATE_LOCAL(count * sizeof(xrgb));
+ : if(!prgbs && count)
+ : return(BadAlloc);
+ : if( (retval = QueryColors(pcmp, count, (Pixel *)&stuff[1], prgbs)) )
+ : {
+ : if (prgbs) DEALLOCATE_LOCAL(prgbs);
+ : if (client->noClientException != Success)
+ : return(client->noClientException);
+ : else
+ : {
+ : client->errorValue = clientErrorValue;
+ : return (retval);
+ : }
+ : }
+ : qcr.type = X_Reply;
+ : qcr.length = (count * sizeof(xrgb)) >> 2;
+ : qcr.sequenceNumber = client->sequence;
+ : qcr.nColors = count;
+ : WriteReplyToClient(client, sizeof(xQueryColorsReply), &qcr);
+ : if (count)
+ : {
+ : client->pSwapReplyFunc = (ReplySwapPtr) SQColorsExtend;
+ : WriteSwappedDataToClient(client, count * sizeof(xrgb), prgbs);
+ : }
+ : if (prgbs) DEALLOCATE_LOCAL(prgbs);
+ : return(client->noClientException);
+ :
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->cmap;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcLookupColor(ClientPtr client)
+ :{
+ : ColormapPtr pcmp;
+ : REQUEST(xLookupColorReq);
+ :
+ : REQUEST_FIXED_SIZE(xLookupColorReq, stuff->nbytes);
+ : pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
+ : RT_COLORMAP, DixReadAccess);
+ : if (pcmp)
+ : {
+ : xLookupColorReply lcr;
+ :
+ : if(OsLookupColor(pcmp->pScreen->myNum, (char *)&stuff[1], stuff->nbytes,
+ : &lcr.exactRed, &lcr.exactGreen, &lcr.exactBlue))
+ : {
+ : lcr.type = X_Reply;
+ : lcr.length = 0;
+ : lcr.sequenceNumber = client->sequence;
+ : lcr.screenRed = lcr.exactRed;
+ : lcr.screenGreen = lcr.exactGreen;
+ : lcr.screenBlue = lcr.exactBlue;
+ : (*pcmp->pScreen->ResolveColor)(&lcr.screenRed,
+ : &lcr.screenGreen,
+ : &lcr.screenBlue,
+ : pcmp->pVisual);
+ : WriteReplyToClient(client, sizeof(xLookupColorReply), &lcr);
+ : return(client->noClientException);
+ : }
+ : return (BadName);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->cmap;
+ : return (BadColor);
+ : }
+ :}
+ :
+ :int
+ :ProcCreateCursor (ClientPtr client)
+ :{
+ : CursorPtr pCursor;
+ : PixmapPtr src;
+ : PixmapPtr msk;
+ : unsigned char * srcbits;
+ : unsigned char * mskbits;
+ : unsigned short width, height;
+ : long n;
+ : CursorMetricRec cm;
+ :
+ :
+ : REQUEST(xCreateCursorReq);
+ :
+ : REQUEST_SIZE_MATCH(xCreateCursorReq);
+ : LEGAL_NEW_RESOURCE(stuff->cid, client);
+ :
+ : src = (PixmapPtr)SecurityLookupIDByType(client, stuff->source,
+ : RT_PIXMAP, DixReadAccess);
+ : msk = (PixmapPtr)SecurityLookupIDByType(client, stuff->mask,
+ : RT_PIXMAP, DixReadAccess);
+ : if ( src == (PixmapPtr)NULL)
+ : {
+ : client->errorValue = stuff->source;
+ : return (BadPixmap);
+ : }
+ : if ( msk == (PixmapPtr)NULL)
+ : {
+ : if (stuff->mask != None)
+ : {
+ : client->errorValue = stuff->mask;
+ : return (BadPixmap);
+ : }
+ : }
+ : else if ( src->drawable.width != msk->drawable.width
+ : || src->drawable.height != msk->drawable.height
+ : || src->drawable.depth != 1
+ : || msk->drawable.depth != 1)
+ : return (BadMatch);
+ :
+ : width = src->drawable.width;
+ : height = src->drawable.height;
+ :
+ : if ( stuff->x > width
+ : || stuff->y > height )
+ : return (BadMatch);
+ :
+ : n = BitmapBytePad(width)*height;
+ : srcbits = (unsigned char *)xalloc(n);
+ : if (!srcbits)
+ : return (BadAlloc);
+ : mskbits = (unsigned char *)xalloc(n);
+ : if (!mskbits)
+ : {
+ : xfree(srcbits);
+ : return (BadAlloc);
+ : }
+ :
+ : /* zeroing the (pad) bits helps some ddx cursor handling */
+ : bzero((char *)srcbits, n);
+ : (* src->drawable.pScreen->GetImage)( (DrawablePtr)src, 0, 0, width, height,
+ : XYPixmap, 1, (pointer)srcbits);
+ : if ( msk == (PixmapPtr)NULL)
+ : {
+ : unsigned char *bits = mskbits;
+ : while (--n >= 0)
+ : *bits++ = ~0;
+ : }
+ : else
+ : {
+ : /* zeroing the (pad) bits helps some ddx cursor handling */
+ : bzero((char *)mskbits, n);
+ : (* msk->drawable.pScreen->GetImage)( (DrawablePtr)msk, 0, 0, width,
+ : height, XYPixmap, 1, (pointer)mskbits);
+ : }
+ : cm.width = width;
+ : cm.height = height;
+ : cm.xhot = stuff->x;
+ : cm.yhot = stuff->y;
+ : pCursor = AllocCursor( srcbits, mskbits, &cm,
+ : stuff->foreRed, stuff->foreGreen, stuff->foreBlue,
+ : stuff->backRed, stuff->backGreen, stuff->backBlue);
+ :
+ : if (pCursor && AddResource(stuff->cid, RT_CURSOR, (pointer)pCursor))
+ : return (client->noClientException);
+ : return BadAlloc;
+ :}
+ :
+ :int
+ :ProcCreateGlyphCursor (ClientPtr client)
+ :{
+ : CursorPtr pCursor;
+ : int res;
+ :
+ : REQUEST(xCreateGlyphCursorReq);
+ :
+ : REQUEST_SIZE_MATCH(xCreateGlyphCursorReq);
+ : LEGAL_NEW_RESOURCE(stuff->cid, client);
+ :
+ : res = AllocGlyphCursor(stuff->source, stuff->sourceChar,
+ : stuff->mask, stuff->maskChar,
+ : stuff->foreRed, stuff->foreGreen, stuff->foreBlue,
+ : stuff->backRed, stuff->backGreen, stuff->backBlue,
+ : &pCursor, client);
+ : if (res != Success)
+ : return res;
+ : if (AddResource(stuff->cid, RT_CURSOR, (pointer)pCursor))
+ : return client->noClientException;
+ : return BadAlloc;
+ :}
+ :
+ :
+ :int
+ :ProcFreeCursor (ClientPtr client)
+ :{
+ : CursorPtr pCursor;
+ : REQUEST(xResourceReq);
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : pCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->id,
+ : RT_CURSOR, DixDestroyAccess);
+ : if (pCursor)
+ : {
+ : FreeResource(stuff->id, RT_NONE);
+ : return (client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->id;
+ : return (BadCursor);
+ : }
+ :}
+ :
+ :int
+ :ProcQueryBestSize (ClientPtr client)
+ :{
+ : xQueryBestSizeReply reply;
+ : DrawablePtr pDraw;
+ : ScreenPtr pScreen;
+ : int rc;
+ : REQUEST(xQueryBestSizeReq);
+ : REQUEST_SIZE_MATCH(xQueryBestSizeReq);
+ :
+ : if ((stuff->class != CursorShape) &&
+ : (stuff->class != TileShape) &&
+ : (stuff->class != StippleShape))
+ : {
+ : client->errorValue = stuff->class;
+ : return(BadValue);
+ : }
+ :
+ : rc = dixLookupDrawable(&pDraw, stuff->drawable, client, M_ANY,
+ : DixReadAccess);
+ : if (rc != Success)
+ : return rc;
+ : if (stuff->class != CursorShape && pDraw->type == UNDRAWABLE_WINDOW)
+ : return (BadMatch);
+ : pScreen = pDraw->pScreen;
+ : (* pScreen->QueryBestSize)(stuff->class, &stuff->width,
+ : &stuff->height, pScreen);
+ : reply.type = X_Reply;
+ : reply.length = 0;
+ : reply.sequenceNumber = client->sequence;
+ : reply.width = stuff->width;
+ : reply.height = stuff->height;
+ : WriteReplyToClient(client, sizeof(xQueryBestSizeReply), &reply);
+ : return (client->noClientException);
+ :}
+ :
+ :
+ :int
+ :ProcSetScreenSaver (ClientPtr client)
+ :{
+ : int blankingOption, exposureOption;
+ : REQUEST(xSetScreenSaverReq);
+ :
+ : REQUEST_SIZE_MATCH(xSetScreenSaverReq);
+ : blankingOption = stuff->preferBlank;
+ : if ((blankingOption != DontPreferBlanking) &&
+ : (blankingOption != PreferBlanking) &&
+ : (blankingOption != DefaultBlanking))
+ : {
+ : client->errorValue = blankingOption;
+ : return BadValue;
+ : }
+ : exposureOption = stuff->allowExpose;
+ : if ((exposureOption != DontAllowExposures) &&
+ : (exposureOption != AllowExposures) &&
+ : (exposureOption != DefaultExposures))
+ : {
+ : client->errorValue = exposureOption;
+ : return BadValue;
+ : }
+ : if (stuff->timeout < -1)
+ : {
+ : client->errorValue = stuff->timeout;
+ : return BadValue;
+ : }
+ : if (stuff->interval < -1)
+ : {
+ : client->errorValue = stuff->interval;
+ : return BadValue;
+ : }
+ :
+ : if (blankingOption == DefaultBlanking)
+ : ScreenSaverBlanking = defaultScreenSaverBlanking;
+ : else
+ : ScreenSaverBlanking = blankingOption;
+ : if (exposureOption == DefaultExposures)
+ : ScreenSaverAllowExposures = defaultScreenSaverAllowExposures;
+ : else
+ : ScreenSaverAllowExposures = exposureOption;
+ :
+ : if (stuff->timeout >= 0)
+ : ScreenSaverTime = stuff->timeout * MILLI_PER_SECOND;
+ : else
+ : ScreenSaverTime = defaultScreenSaverTime;
+ : if (stuff->interval >= 0)
+ : ScreenSaverInterval = stuff->interval * MILLI_PER_SECOND;
+ : else
+ : ScreenSaverInterval = defaultScreenSaverInterval;
+ :
+ : SetScreenSaverTimer();
+ : return (client->noClientException);
+ :}
+ :
+ :int
+ :ProcGetScreenSaver(ClientPtr client)
+ :{
+ : xGetScreenSaverReply rep;
+ :
+ : REQUEST_SIZE_MATCH(xReq);
+ : rep.type = X_Reply;
+ : rep.length = 0;
+ : rep.sequenceNumber = client->sequence;
+ : rep.timeout = ScreenSaverTime / MILLI_PER_SECOND;
+ : rep.interval = ScreenSaverInterval / MILLI_PER_SECOND;
+ : rep.preferBlanking = ScreenSaverBlanking;
+ : rep.allowExposures = ScreenSaverAllowExposures;
+ : WriteReplyToClient(client, sizeof(xGetScreenSaverReply), &rep);
+ : return (client->noClientException);
+ :}
+ :
+ :int
+ :ProcChangeHosts(ClientPtr client)
+ :{
+ : REQUEST(xChangeHostsReq);
+ : int result;
+ :
+ : REQUEST_FIXED_SIZE(xChangeHostsReq, stuff->hostLength);
+ :
+ : if(stuff->mode == HostInsert)
+ : result = AddHost(client, (int)stuff->hostFamily,
+ : stuff->hostLength, (pointer)&stuff[1]);
+ : else if (stuff->mode == HostDelete)
+ : result = RemoveHost(client, (int)stuff->hostFamily,
+ : stuff->hostLength, (pointer)&stuff[1]);
+ : else
+ : {
+ : client->errorValue = stuff->mode;
+ : return BadValue;
+ : }
+ : if (!result)
+ : result = client->noClientException;
+ : return (result);
+ :}
+ :
+ :int
+ :ProcListHosts(ClientPtr client)
+ :{
+ : xListHostsReply reply;
+ : int len, nHosts, result;
+ : pointer pdata;
+ : /* REQUEST(xListHostsReq); */
+ :
+ : REQUEST_SIZE_MATCH(xListHostsReq);
+ :
+ : /* untrusted clients can't list hosts */
+ : if (!XaceHook(XACE_HOSTLIST_ACCESS, client, DixReadAccess))
+ : return BadAccess;
+ :
+ : result = GetHosts(&pdata, &nHosts, &len, &reply.enabled);
+ : if (result != Success)
+ : return(result);
+ : reply.type = X_Reply;
+ : reply.sequenceNumber = client->sequence;
+ : reply.nHosts = nHosts;
+ : reply.length = len >> 2;
+ : WriteReplyToClient(client, sizeof(xListHostsReply), &reply);
+ : if (nHosts)
+ : {
+ : client->pSwapReplyFunc = (ReplySwapPtr) SLHostsExtend;
+ : WriteSwappedDataToClient(client, len, pdata);
+ : }
+ : xfree(pdata);
+ : return (client->noClientException);
+ :}
+ :
+ :int
+ :ProcChangeAccessControl(ClientPtr client)
+ :{
+ : int result;
+ : REQUEST(xSetAccessControlReq);
+ :
+ : REQUEST_SIZE_MATCH(xSetAccessControlReq);
+ : if ((stuff->mode != EnableAccess) && (stuff->mode != DisableAccess))
+ : {
+ : client->errorValue = stuff->mode;
+ : return BadValue;
+ : }
+ : result = ChangeAccessControl(client, stuff->mode == EnableAccess);
+ : if (!result)
+ : result = client->noClientException;
+ : return (result);
+ :}
+ :
+ :/*********************
+ : * CloseDownRetainedResources
+ : *
+ : * Find all clients that are gone and have terminated in RetainTemporary
+ : * and destroy their resources.
+ : *********************/
+ :
+ :static void
+ :CloseDownRetainedResources(void)
+ :{
+ : int i;
+ : ClientPtr client;
+ :
+ : for (i=1; i<currentMaxClients; i++)
+ : {
+ : client = clients[i];
+ : if (client && (client->closeDownMode == RetainTemporary)
+ : && (client->clientGone))
+ : CloseDownClient(client);
+ : }
+ :}
+ :
+ :int
+ :ProcKillClient(ClientPtr client)
+ :{
+ : REQUEST(xResourceReq);
+ : ClientPtr killclient;
+ : int rc;
+ :
+ : REQUEST_SIZE_MATCH(xResourceReq);
+ : if (stuff->id == AllTemporary)
+ : {
+ : CloseDownRetainedResources();
+ : return (client->noClientException);
+ : }
+ :
+ : rc = dixLookupClient(&killclient, stuff->id, client, DixDestroyAccess);
+ : if (rc == Success) {
+ : CloseDownClient(killclient);
+ : /* if an LBX proxy gets killed, isItTimeToYield will be set */
+ : if (isItTimeToYield || (client == killclient))
+ : {
+ : /* force yield and return Success, so that Dispatch()
+ : * doesn't try to touch client
+ : */
+ : isItTimeToYield = TRUE;
+ : return (Success);
+ : }
+ : return (client->noClientException);
+ : }
+ : else
+ : return rc;
+ :}
+ :
+ :int
+ :ProcSetFontPath(ClientPtr client)
+ :{
+ : unsigned char *ptr;
+ : unsigned long nbytes, total;
+ : long nfonts;
+ : int n, result;
+ : int error;
+ : REQUEST(xSetFontPathReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xSetFontPathReq);
+ :
+ : nbytes = (client->req_len << 2) - sizeof(xSetFontPathReq);
+ : total = nbytes;
+ : ptr = (unsigned char *)&stuff[1];
+ : nfonts = stuff->nFonts;
+ : while (--nfonts >= 0)
+ : {
+ : if ((total == 0) || (total < (n = (*ptr + 1))))
+ : return(BadLength);
+ : total -= n;
+ : ptr += n;
+ : }
+ : if (total >= 4)
+ : return(BadLength);
+ : result = SetFontPath(client, stuff->nFonts, (unsigned char *)&stuff[1],
+ : &error);
+ : if (!result)
+ : {
+ : result = client->noClientException;
+ : client->errorValue = error;
+ : }
+ : return (result);
+ :}
+ :
+ :int
+ :ProcGetFontPath(ClientPtr client)
+ :{
+ : xGetFontPathReply reply;
+ : int stringLens, numpaths;
+ : unsigned char *bufferStart;
+ : /* REQUEST (xReq); */
+ :
+ : REQUEST_SIZE_MATCH(xReq);
+ : bufferStart = GetFontPath(&numpaths, &stringLens);
+ :
+ : reply.type = X_Reply;
+ : reply.sequenceNumber = client->sequence;
+ : reply.length = (stringLens + numpaths + 3) >> 2;
+ : reply.nPaths = numpaths;
+ :
+ : WriteReplyToClient(client, sizeof(xGetFontPathReply), &reply);
+ : if (stringLens || numpaths)
+ : (void)WriteToClient(client, stringLens + numpaths, (char *)bufferStart);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcChangeCloseDownMode(ClientPtr client)
+ :{
+ : REQUEST(xSetCloseDownModeReq);
+ :
+ : REQUEST_SIZE_MATCH(xSetCloseDownModeReq);
+ : if ((stuff->mode == AllTemporary) ||
+ : (stuff->mode == RetainPermanent) ||
+ : (stuff->mode == RetainTemporary))
+ : {
+ : client->closeDownMode = stuff->mode;
+ : return (client->noClientException);
+ : }
+ : else
+ : {
+ : client->errorValue = stuff->mode;
+ : return (BadValue);
+ : }
+ :}
+ :
+ :int ProcForceScreenSaver(ClientPtr client)
+ :{
+ : REQUEST(xForceScreenSaverReq);
+ :
+ : REQUEST_SIZE_MATCH(xForceScreenSaverReq);
+ :
+ : if ((stuff->mode != ScreenSaverReset) &&
+ : (stuff->mode != ScreenSaverActive))
+ : {
+ : client->errorValue = stuff->mode;
+ : return BadValue;
+ : }
+ : SaveScreens(SCREEN_SAVER_FORCER, (int)stuff->mode);
+ : return client->noClientException;
+ :}
+ :
+ :int ProcNoOperation(ClientPtr client)
+ :{
+ : REQUEST_AT_LEAST_SIZE(xReq);
+ :
+ : /* noop -- don't do anything */
+ : return(client->noClientException);
+ :}
+ :
+ :void
+ :InitProcVectors(void)
+ :{
+ : int i;
+ : for (i = 0; i<256; i++)
+ : {
+ : if(!ProcVector[i])
+ : {
+ : ProcVector[i] = SwappedProcVector[i] = ProcBadRequest;
+ : ReplySwapVector[i] = ReplyNotSwappd;
+ : }
+ : }
+ : for(i = LASTEvent; i < 128; i++)
+ : {
+ : EventSwapVector[i] = NotImplemented;
+ : }
+ :
+ :}
+ :
+ :/**********************
+ : * CloseDownClient
+ : *
+ : * Client can either mark his resources destroy or retain. If retained and
+ : * then killed again, the client is really destroyed.
+ : *********************/
+ :
+ :char dispatchExceptionAtReset = DE_RESET;
+ :
+ :void
+ :CloseDownClient(ClientPtr client)
+ :{
+ : Bool really_close_down = client->clientGone ||
+ : client->closeDownMode == DestroyAll;
+ :
+ : if (!client->clientGone)
+ : {
+ : /* ungrab server if grabbing client dies */
+ : if (grabState != GrabNone && grabClient == client)
+ : {
+ : UngrabServer(client);
+ : }
+ : BITCLEAR(grabWaiters, client->index);
+ : DeleteClientFromAnySelections(client);
+ : ReleaseActiveGrabs(client);
+ : DeleteClientFontStuff(client);
+ : if (!really_close_down)
+ : {
+ : /* This frees resources that should never be retained
+ : * no matter what the close down mode is. Actually we
+ : * could do this unconditionally, but it's probably
+ : * better not to traverse all the client's resources
+ : * twice (once here, once a few lines down in
+ : * FreeClientResources) in the common case of
+ : * really_close_down == TRUE.
+ : */
+ : FreeClientNeverRetainResources(client);
+ : client->clientState = ClientStateRetained;
+ : if (ClientStateCallback)
+ : {
+ : NewClientInfoRec clientinfo;
+ :
+ : clientinfo.client = client;
+ : clientinfo.prefix = (xConnSetupPrefix *)NULL;
+ : clientinfo.setup = (xConnSetup *) NULL;
+ : CallCallbacks((&ClientStateCallback), (pointer)&clientinfo);
+ : }
+ : }
+ : client->clientGone = TRUE; /* so events aren't sent to client */
+ : if (ClientIsAsleep(client))
+ : ClientSignal (client);
+ : ProcessWorkQueueZombies();
+ : CloseDownConnection(client);
+ :
+ : /* If the client made it to the Running stage, nClients has
+ : * been incremented on its behalf, so we need to decrement it
+ : * now. If it hasn't gotten to Running, nClients has *not*
+ : * been incremented, so *don't* decrement it.
+ : */
+ : if (client->clientState != ClientStateInitial &&
+ : client->clientState != ClientStateAuthenticating )
+ : {
+ : --nClients;
+ : }
+ : }
+ :
+ : if (really_close_down)
+ : {
+ : if (client->clientState == ClientStateRunning && nClients == 0)
+ : dispatchException |= dispatchExceptionAtReset;
+ :
+ : client->clientState = ClientStateGone;
+ : if (ClientStateCallback)
+ : {
+ : NewClientInfoRec clientinfo;
+ :
+ : clientinfo.client = client;
+ : clientinfo.prefix = (xConnSetupPrefix *)NULL;
+ : clientinfo.setup = (xConnSetup *) NULL;
+ : CallCallbacks((&ClientStateCallback), (pointer)&clientinfo);
+ : }
+ : FreeClientResources(client);
+ :#ifdef XSERVER_DTRACE
+ : XSERVER_CLIENT_DISCONNECT(client->index);
+ :#endif
+ : if (client->index < nextFreeClientID)
+ : nextFreeClientID = client->index;
+ : clients[client->index] = NullClient;
+ :#ifdef SMART_SCHEDULE
+ : SmartLastClient = NullClient;
+ :#endif
+ : xfree(client);
+ :
+ : while (!clients[currentMaxClients-1])
+ : currentMaxClients--;
+ : }
+ :}
+ :
+ :static void
+ :KillAllClients(void)
+ :{
+ : int i;
+ : for (i=1; i<currentMaxClients; i++)
+ : if (clients[i]) {
+ : /* Make sure Retained clients are released. */
+ : clients[i]->closeDownMode = DestroyAll;
+ : CloseDownClient(clients[i]);
+ : }
+ :}
+ :
+ :extern int clientPrivateLen;
+ :extern unsigned *clientPrivateSizes;
+ :extern unsigned totalClientSize;
+ :
+ :void InitClient(ClientPtr client, int i, pointer ospriv)
+ :{
+ : client->index = i;
+ : client->sequence = 0;
+ : client->clientAsMask = ((Mask)i) << CLIENTOFFSET;
+ : client->clientGone = FALSE;
+ : if (i)
+ : {
+ : client->closeDownMode = DestroyAll;
+ : client->lastDrawable = (DrawablePtr)WindowTable[0];
+ : client->lastDrawableID = WindowTable[0]->drawable.id;
+ : }
+ : else
+ : {
+ : client->closeDownMode = RetainPermanent;
+ : client->lastDrawable = (DrawablePtr)NULL;
+ : client->lastDrawableID = INVALID;
+ : }
+ : client->lastGC = (GCPtr) NULL;
+ : client->lastGCID = INVALID;
+ : client->numSaved = 0;
+ : client->saveSet = (SaveSetElt *)NULL;
+ : client->noClientException = Success;
+ :#ifdef DEBUG
+ : client->requestLogIndex = 0;
+ :#endif
+ : client->requestVector = InitialVector;
+ : client->osPrivate = ospriv;
+ : client->swapped = FALSE;
+ : client->big_requests = FALSE;
+ : client->priority = 0;
+ : client->clientState = ClientStateInitial;
+ :#ifdef XKB
+ : if (!noXkbExtension) {
+ : client->xkbClientFlags = 0;
+ : client->mapNotifyMask = 0;
+ : QueryMinMaxKeyCodes(&client->minKC,&client->maxKC);
+ : }
+ :#endif
+ : client->replyBytesRemaining = 0;
+ :#ifdef XAPPGROUP
+ : client->appgroup = NULL;
+ :#endif
+ : client->fontResFunc = NULL;
+ :#ifdef SMART_SCHEDULE
+ : client->smart_priority = 0;
+ : client->smart_start_tick = SmartScheduleTime;
+ : client->smart_stop_tick = SmartScheduleTime;
+ : client->smart_check_tick = SmartScheduleTime;
+ :#endif
+ :}
+ :
+ :int
+ :InitClientPrivates(ClientPtr client)
+ :{
+ : char *ptr;
+ : DevUnion *ppriv;
+ : unsigned *sizes;
+ : unsigned size;
+ : int i;
+ :
+ : if (totalClientSize == sizeof(ClientRec))
+ : ppriv = (DevUnion *)NULL;
+ : else if (client->index)
+ : ppriv = (DevUnion *)(client + 1);
+ : else
+ : {
+ : ppriv = (DevUnion *)xalloc(totalClientSize - sizeof(ClientRec));
+ : if (!ppriv)
+ : return 0;
+ : }
+ : client->devPrivates = ppriv;
+ : sizes = clientPrivateSizes;
+ : ptr = (char *)(ppriv + clientPrivateLen);
+ : if (ppriv)
+ : bzero(ppriv, totalClientSize - sizeof(ClientRec));
+ : for (i = clientPrivateLen; --i >= 0; ppriv++, sizes++)
+ : {
+ : if ( (size = *sizes) )
+ : {
+ : ppriv->ptr = (pointer)ptr;
+ : ptr += size;
+ : }
+ : else
+ : ppriv->ptr = (pointer)NULL;
+ : }
+ :
+ : /* Allow registrants to initialize the serverClient devPrivates */
+ : if (!client->index && ClientStateCallback)
+ : {
+ : NewClientInfoRec clientinfo;
+ :
+ : clientinfo.client = client;
+ : clientinfo.prefix = (xConnSetupPrefix *)NULL;
+ : clientinfo.setup = (xConnSetup *) NULL;
+ : CallCallbacks((&ClientStateCallback), (pointer)&clientinfo);
+ : }
+ : return 1;
+ :}
+ :
+ :/************************
+ : * int NextAvailableClient(ospriv)
+ : *
+ : * OS dependent portion can't assign client id's because of CloseDownModes.
+ : * Returns NULL if there are no free clients.
+ : *************************/
+ :
+ :ClientPtr NextAvailableClient(pointer ospriv)
+ :{
+ : int i;
+ : ClientPtr client;
+ : xReq data;
+ :
+ : i = nextFreeClientID;
+ : if (i == MAXCLIENTS)
+ : return (ClientPtr)NULL;
+ : clients[i] = client = (ClientPtr)xalloc(totalClientSize);
+ : if (!client)
+ : return (ClientPtr)NULL;
+ : InitClient(client, i, ospriv);
+ : InitClientPrivates(client);
+ : if (!InitClientResources(client))
+ : {
+ : xfree(client);
+ : return (ClientPtr)NULL;
+ : }
+ : data.reqType = 1;
+ : data.length = (sz_xReq + sz_xConnClientPrefix) >> 2;
+ : if (!InsertFakeRequest(client, (char *)&data, sz_xReq))
+ : {
+ : FreeClientResources(client);
+ : xfree(client);
+ : return (ClientPtr)NULL;
+ : }
+ : if (i == currentMaxClients)
+ : currentMaxClients++;
+ : while ((nextFreeClientID < MAXCLIENTS) && clients[nextFreeClientID])
+ : nextFreeClientID++;
+ : if (ClientStateCallback)
+ : {
+ : NewClientInfoRec clientinfo;
+ :
+ : clientinfo.client = client;
+ : clientinfo.prefix = (xConnSetupPrefix *)NULL;
+ : clientinfo.setup = (xConnSetup *) NULL;
+ : CallCallbacks((&ClientStateCallback), (pointer)&clientinfo);
+ : }
+ : return(client);
+ :}
+ :
+ :int
+ :ProcInitialConnection(ClientPtr client)
+ :{
+ : REQUEST(xReq);
+ : xConnClientPrefix *prefix;
+ : int whichbyte = 1;
+ :
+ : prefix = (xConnClientPrefix *)((char *)stuff + sz_xReq);
+ : if ((prefix->byteOrder != 'l') && (prefix->byteOrder != 'B'))
+ : return (client->noClientException = -1);
+ : if (((*(char *) &whichbyte) && (prefix->byteOrder == 'B')) ||
+ : (!(*(char *) &whichbyte) && (prefix->byteOrder == 'l')))
+ : {
+ : client->swapped = TRUE;
+ : SwapConnClientPrefix(prefix);
+ : }
+ : stuff->reqType = 2;
+ : stuff->length += ((prefix->nbytesAuthProto + (unsigned)3) >> 2) +
+ : ((prefix->nbytesAuthString + (unsigned)3) >> 2);
+ : if (client->swapped)
+ : {
+ : swaps(&stuff->length, whichbyte);
+ : }
+ : ResetCurrentRequest(client);
+ : return (client->noClientException);
+ :}
+ :
+ :int
+ :SendConnSetup(ClientPtr client, char *reason)
+ :{
+ : xWindowRoot *root;
+ : int i;
+ : int numScreens;
+ : char* lConnectionInfo;
+ : xConnSetupPrefix* lconnSetupPrefix;
+ :
+ : if (reason)
+ : {
+ : xConnSetupPrefix csp;
+ :
+ : csp.success = xFalse;
+ : csp.lengthReason = strlen(reason);
+ : csp.length = (csp.lengthReason + (unsigned)3) >> 2;
+ : csp.majorVersion = X_PROTOCOL;
+ : csp.minorVersion = X_PROTOCOL_REVISION;
+ : if (client->swapped)
+ : WriteSConnSetupPrefix(client, &csp);
+ : else
+ : (void)WriteToClient(client, sz_xConnSetupPrefix, (char *) &csp);
+ : (void)WriteToClient(client, (int)csp.lengthReason, reason);
+ : return (client->noClientException = -1);
+ : }
+ :
+ : numScreens = screenInfo.numScreens;
+ : lConnectionInfo = ConnectionInfo;
+ : lconnSetupPrefix = &connSetupPrefix;
+ :
+ : /* We're about to start speaking X protocol back to the client by
+ : * sending the connection setup info. This means the authorization
+ : * step is complete, and we can count the client as an
+ : * authorized one.
+ : */
+ : nClients++;
+ :
+ : client->requestVector = client->swapped ? SwappedProcVector : ProcVector;
+ : client->sequence = 0;
+ :#ifdef XAPPGROUP
+ : XagConnectionInfo (client, &lconnSetupPrefix, &lConnectionInfo, &numScreens);
+ :#endif
+ : ((xConnSetup *)lConnectionInfo)->ridBase = client->clientAsMask;
+ : ((xConnSetup *)lConnectionInfo)->ridMask = RESOURCE_ID_MASK;
+ :#ifdef MATCH_CLIENT_ENDIAN
+ : ((xConnSetup *)lConnectionInfo)->imageByteOrder = ClientOrder (client);
+ : ((xConnSetup *)lConnectionInfo)->bitmapBitOrder = ClientOrder (client);
+ :#endif
+ : /* fill in the "currentInputMask" */
+ : root = (xWindowRoot *)(lConnectionInfo + connBlockScreenStart);
+ :#ifdef PANORAMIX
+ : if (noPanoramiXExtension)
+ : numScreens = screenInfo.numScreens;
+ : else
+ : numScreens = ((xConnSetup *)ConnectionInfo)->numRoots;
+ :#endif
+ :
+ : for (i=0; i<numScreens; i++)
+ : {
+ : unsigned int j;
+ : xDepth *pDepth;
+ :
+ : root->currentInputMask = WindowTable[i]->eventMask |
+ : wOtherEventMasks (WindowTable[i]);
+ : pDepth = (xDepth *)(root + 1);
+ : for (j = 0; j < root->nDepths; j++)
+ : {
+ : pDepth = (xDepth *)(((char *)(pDepth + 1)) +
+ : pDepth->nVisuals * sizeof(xVisualType));
+ : }
+ : root = (xWindowRoot *)pDepth;
+ : }
+ :
+ : if (client->swapped)
+ : {
+ : WriteSConnSetupPrefix(client, lconnSetupPrefix);
+ : WriteSConnectionInfo(client,
+ : (unsigned long)(lconnSetupPrefix->length << 2),
+ : lConnectionInfo);
+ : }
+ : else
+ : {
+ : (void)WriteToClient(client, sizeof(xConnSetupPrefix),
+ : (char *) lconnSetupPrefix);
+ : (void)WriteToClient(client, (int)(lconnSetupPrefix->length << 2),
+ : lConnectionInfo);
+ : }
+ : client->clientState = ClientStateRunning;
+ : if (ClientStateCallback)
+ : {
+ : NewClientInfoRec clientinfo;
+ :
+ : clientinfo.client = client;
+ : clientinfo.prefix = lconnSetupPrefix;
+ : clientinfo.setup = (xConnSetup *)lConnectionInfo;
+ : CallCallbacks((&ClientStateCallback), (pointer)&clientinfo);
+ : }
+ : return (client->noClientException);
+ :}
+ :
+ :int
+ :ProcEstablishConnection(ClientPtr client)
+ :{
+ : char *reason, *auth_proto, *auth_string;
+ : xConnClientPrefix *prefix;
+ : REQUEST(xReq);
+ :
+ : prefix = (xConnClientPrefix *)((char *)stuff + sz_xReq);
+ : auth_proto = (char *)prefix + sz_xConnClientPrefix;
+ : auth_string = auth_proto + ((prefix->nbytesAuthProto + 3) & ~3);
+ : if ((prefix->majorVersion != X_PROTOCOL) ||
+ : (prefix->minorVersion != X_PROTOCOL_REVISION))
+ : reason = "Protocol version mismatch";
+ : else
+ : reason = ClientAuthorized(client,
+ : (unsigned short)prefix->nbytesAuthProto,
+ : auth_proto,
+ : (unsigned short)prefix->nbytesAuthString,
+ : auth_string);
+ : /*
+ : * If Kerberos is being used for this client, the clientState
+ : * will be set to ClientStateAuthenticating at this point.
+ : * More messages need to be exchanged among the X server, Kerberos
+ : * server, and client to figure out if everyone is authorized.
+ : * So we don't want to send the connection setup info yet, since
+ : * the auth step isn't really done.
+ : */
+ : if (client->clientState == ClientStateCheckingSecurity)
+ : client->clientState = ClientStateCheckedSecurity;
+ : else if (client->clientState != ClientStateAuthenticating)
+ : return(SendConnSetup(client, reason));
+ : return(client->noClientException);
+ :}
+ :
+ :_X_EXPORT void
+ :SendErrorToClient(ClientPtr client, unsigned majorCode, unsigned minorCode,
+ : XID resId, int errorCode)
+ :{
+ : xError rep;
+ :
+ : rep.type = X_Error;
+ : rep.sequenceNumber = client->sequence;
+ : rep.errorCode = errorCode;
+ : rep.majorCode = majorCode;
+ : rep.minorCode = minorCode;
+ : rep.resourceID = resId;
+ :
+ : WriteEventsToClient (client, 1, (xEvent *)&rep);
+ :}
+ :
+ :void
+ :DeleteWindowFromAnySelections(WindowPtr pWin)
+ :{
+ : int i;
+ :
+ : for (i = 0; i< NumCurrentSelections; i++)
+ : if (CurrentSelections[i].pWin == pWin)
+ : {
+ : if (SelectionCallback)
+ : {
+ : SelectionInfoRec info;
+ :
+ : info.selection = &CurrentSelections[i];
+ : info.kind = SelectionWindowDestroy;
+ : CallCallbacks(&SelectionCallback, &info);
+ : }
+ : CurrentSelections[i].pWin = (WindowPtr)NULL;
+ : CurrentSelections[i].window = None;
+ : CurrentSelections[i].client = NullClient;
+ : }
+ :}
+ :
+ :static void
+ :DeleteClientFromAnySelections(ClientPtr client)
+ :{
+ : int i;
+ :
+ : for (i = 0; i< NumCurrentSelections; i++)
+ : if (CurrentSelections[i].client == client)
+ : {
+ : if (SelectionCallback)
+ : {
+ : SelectionInfoRec info;
+ :
+ : info.selection = &CurrentSelections[i];
+ : info.kind = SelectionWindowDestroy;
+ : CallCallbacks(&SelectionCallback, &info);
+ : }
+ : CurrentSelections[i].pWin = (WindowPtr)NULL;
+ : CurrentSelections[i].window = None;
+ : CurrentSelections[i].client = NullClient;
+ : }
+ :}
+ :
+ :void
+ :MarkClientException(ClientPtr client)
+ :{
+ : client->noClientException = -1;
+ :}
+ :
+ :#ifdef XSERVER_DTRACE
+ :#include <ctype.h>
+ :
+ :/* Load table of request names for dtrace probes */
+ :static void LoadRequestNames(void)
+ :{
+ : int i;
+ : FILE *xedb;
+ : extern void LoadExtensionNames(char **RequestNames);
+ :
+ : bzero(RequestNames, 256 * sizeof(char *));
+ :
+ : xedb = fopen(XERRORDB_PATH, "r");
+ : if (xedb != NULL) {
+ : char buf[256];
+ : while (fgets(buf, sizeof(buf), xedb)) {
+ : if ((strncmp("XRequest.", buf, 9) == 0) && (isdigit(buf[9]))) {
+ : char *name;
+ : i = strtol(buf + 9, &name, 10);
+ : if (RequestNames[i] == 0) {
+ : char *end = strchr(name, '\n');
+ : if (end) { *end = '\0'; }
+ : RequestNames[i] = strdup(name + 1);
+ : }
+ : }
+ : }
+ : fclose(xedb);
+ : }
+ :
+ : LoadExtensionNames(RequestNames);
+ :
+ : for (i = 0; i < 256; i++) {
+ : if (RequestNames[i] == 0) {
+ :#define RN_SIZE 12 /* "Request#' + up to 3 digits + \0 */
+ : RequestNames[i] = xalloc(RN_SIZE);
+ : if (RequestNames[i]) {
+ : snprintf(RequestNames[i], RN_SIZE, "Request#%d", i);
+ : }
+ : }
+ : /* fprintf(stderr, "%d: %s\n", i, RequestNames[i]); */
+ : }
+ :}
+ :
+ :static void FreeRequestNames(void)
+ :{
+ : int i;
+ :
+ : for (i = 0; i < 256; i++) {
+ : if (RequestNames[i] != 0) {
+ : free(RequestNames[i]);
+ : RequestNames[i] = 0;
+ : }
+ : }
+ :}
+ :
+ :#endif
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/dix/gc.c"
+ *
+ * 57 0.0621
+ */
+
+
+ :/***********************************************************
+ :
+ :Copyright 1987, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :
+ :Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 Digital not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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.
+ :
+ :******************************************************************/
+ :
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <X11/X.h>
+ :#include <X11/Xmd.h>
+ :#include <X11/Xproto.h>
+ :#include "misc.h"
+ :#include "resource.h"
+ :#include "gcstruct.h"
+ :#include "pixmapstr.h"
+ :#include "dixfontstr.h"
+ :#include "scrnintstr.h"
+ :#include "region.h"
+ :
+ :#include "dix.h"
+ :#include <assert.h>
+ :
+ :extern XID clientErrorValue;
+ :extern FontPtr defaultFont;
+ :
+ :static Bool CreateDefaultTile(GCPtr pGC);
+ :
+ :static unsigned char DefaultDash[2] = {4, 4};
+ :
+ :_X_EXPORT void
+ :ValidateGC(DrawablePtr pDraw, GC *pGC)
+ 3 0.0033 :{ /* ValidateGC total: 3 0.0033 */
+ : (*pGC->funcs->ValidateGC) (pGC, pGC->stateChanges, pDraw);
+ : pGC->stateChanges = 0;
+ : pGC->serialNumber = pDraw->serialNumber;
+ :}
+ :
+ :
+ :/* dixChangeGC(client, pGC, mask, pC32, pUnion)
+ : *
+ : * This function was created as part of the Security extension
+ : * implementation. The client performing the gc change must be passed so
+ : * that access checks can be performed on any tiles, stipples, or fonts
+ : * that are specified. ddxen can call this too; they should normally
+ : * pass NullClient for the client since any access checking should have
+ : * already been done at a higher level.
+ : *
+ : * Since we had to create a new function anyway, we decided to change the
+ : * way the list of gc values is passed to eliminate the compiler warnings
+ : * caused by the DoChangeGC interface. You can pass the values via pC32
+ : * or pUnion, but not both; one of them must be NULL. If you don't need
+ : * to pass any pointers, you can use either one:
+ : *
+ : * example calling dixChangeGC using pC32 parameter
+ : *
+ : * CARD32 v[2];
+ : * v[0] = foreground;
+ : * v[1] = background;
+ : * dixChangeGC(client, pGC, GCForeground|GCBackground, v, NULL);
+ : *
+ : * example calling dixChangeGC using pUnion parameter;
+ : * same effect as above
+ : *
+ : * ChangeGCVal v[2];
+ : * v[0].val = foreground;
+ : * v[1].val = background;
+ : * dixChangeGC(client, pGC, GCForeground|GCBackground, NULL, v);
+ : *
+ : * However, if you need to pass a pointer to a pixmap or font, you MUST
+ : * use the pUnion parameter.
+ : *
+ : * example calling dixChangeGC passing pointers in the value list
+ : * v[1].ptr is a pointer to a pixmap
+ : *
+ : * ChangeGCVal v[2];
+ : * v[0].val = FillTiled;
+ : * v[1].ptr = pPixmap;
+ : * dixChangeGC(client, pGC, GCFillStyle|GCTile, NULL, v);
+ : *
+ : * Note: we could have gotten by with just the pUnion parameter, but on
+ : * 64 bit machines that would have forced us to copy the value list that
+ : * comes in the ChangeGC request.
+ : *
+ : * Ideally, we'd change all the DoChangeGC calls to dixChangeGC, but this
+ : * is far too many changes to consider at this time, so we've only
+ : * changed the ones that caused compiler warnings. New code should use
+ : * dixChangeGC.
+ : *
+ : * dpw
+ : */
+ :
+ :#define NEXTVAL(_type, _var) { \
+ : if (pC32) _var = (_type)*pC32++; \
+ : else { \
+ : _var = (_type)(pUnion->val); pUnion++; \
+ : } \
+ : }
+ :
+ :#define NEXT_PTR(_type, _var) { \
+ : assert(pUnion); _var = (_type)pUnion->ptr; pUnion++; }
+ :
+ :_X_EXPORT int
+ :dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr pUnion)
+ :{ /* dixChangeGC total: 24 0.0261 */
+ : BITS32 index2;
+ : int error = 0;
+ : PixmapPtr pPixmap;
+ : BITS32 maskQ;
+ :
+ : assert( (pC32 && !pUnion) || (!pC32 && pUnion) );
+ : pGC->serialNumber |= GC_CHANGE_SERIAL_BIT;
+ :
+ : maskQ = mask; /* save these for when we walk the GCque */
+ 5 0.0054 : while (mask && !error)
+ : {
+ 1 0.0011 : index2 = (BITS32) lowbit (mask);
+ 7 0.0076 : mask &= ~index2;
+ : pGC->stateChanges |= index2;
+ 1 0.0011 : switch (index2)
+ : {
+ : case GCFunction:
+ : {
+ : CARD8 newalu;
+ 3 0.0033 : NEXTVAL(CARD8, newalu);
+ : if (newalu <= GXset)
+ 1 0.0011 : pGC->alu = newalu;
+ : else
+ : {
+ : clientErrorValue = newalu;
+ : error = BadValue;
+ : }
+ : break;
+ : }
+ : case GCPlaneMask:
+ : NEXTVAL(unsigned long, pGC->planemask);
+ : break;
+ : case GCForeground:
+ 1 0.0011 : NEXTVAL(unsigned long, pGC->fgPixel);
+ : /*
+ : * this is for CreateGC
+ : */
+ : if (!pGC->tileIsPixel && !pGC->tile.pixmap)
+ : {
+ : pGC->tileIsPixel = TRUE;
+ : pGC->tile.pixel = pGC->fgPixel;
+ : }
+ : break;
+ : case GCBackground:
+ : NEXTVAL(unsigned long, pGC->bgPixel);
+ : break;
+ : case GCLineWidth: /* ??? line width is a CARD16 */
+ : NEXTVAL(CARD16, pGC->lineWidth);
+ : break;
+ : case GCLineStyle:
+ : {
+ : unsigned int newlinestyle;
+ : NEXTVAL(unsigned int, newlinestyle);
+ : if (newlinestyle <= LineDoubleDash)
+ : pGC->lineStyle = newlinestyle;
+ : else
+ : {
+ : clientErrorValue = newlinestyle;
+ : error = BadValue;
+ : }
+ : break;
+ : }
+ : case GCCapStyle:
+ : {
+ : unsigned int newcapstyle;
+ : NEXTVAL(unsigned int, newcapstyle);
+ : if (newcapstyle <= CapProjecting)
+ : pGC->capStyle = newcapstyle;
+ : else
+ : {
+ : clientErrorValue = newcapstyle;
+ : error = BadValue;
+ : }
+ : break;
+ : }
+ : case GCJoinStyle:
+ : {
+ : unsigned int newjoinstyle;
+ : NEXTVAL(unsigned int, newjoinstyle);
+ : if (newjoinstyle <= JoinBevel)
+ : pGC->joinStyle = newjoinstyle;
+ : else
+ : {
+ : clientErrorValue = newjoinstyle;
+ : error = BadValue;
+ : }
+ : break;
+ : }
+ : case GCFillStyle:
+ : {
+ : unsigned int newfillstyle;
+ : NEXTVAL(unsigned int, newfillstyle);
+ : if (newfillstyle <= FillOpaqueStippled)
+ : pGC->fillStyle = newfillstyle;
+ : else
+ : {
+ : clientErrorValue = newfillstyle;
+ : error = BadValue;
+ : }
+ : break;
+ : }
+ : case GCFillRule:
+ : {
+ : unsigned int newfillrule;
+ : NEXTVAL(unsigned int, newfillrule);
+ : if (newfillrule <= WindingRule)
+ : pGC->fillRule = newfillrule;
+ : else
+ : {
+ : clientErrorValue = newfillrule;
+ : error = BadValue;
+ : }
+ : break;
+ : }
+ : case GCTile:
+ : {
+ : XID newpix = 0;
+ : if (pUnion)
+ : {
+ : NEXT_PTR(PixmapPtr, pPixmap);
+ : }
+ : else
+ : {
+ : NEXTVAL(XID, newpix);
+ : pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
+ : newpix, RT_PIXMAP, DixReadAccess);
+ : }
+ : if (pPixmap)
+ : {
+ : if ((pPixmap->drawable.depth != pGC->depth) ||
+ : (pPixmap->drawable.pScreen != pGC->pScreen))
+ : {
+ : error = BadMatch;
+ : }
+ : else
+ : {
+ : pPixmap->refcnt++;
+ : if (!pGC->tileIsPixel)
+ : (* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
+ : pGC->tileIsPixel = FALSE;
+ : pGC->tile.pixmap = pPixmap;
+ : }
+ : }
+ : else
+ : {
+ : clientErrorValue = newpix;
+ : error = BadPixmap;
+ : }
+ : break;
+ : }
+ : case GCStipple:
+ : {
+ : XID newstipple = 0;
+ : if (pUnion)
+ : {
+ : NEXT_PTR(PixmapPtr, pPixmap);
+ : }
+ : else
+ : {
+ : NEXTVAL(XID, newstipple)
+ : pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
+ : newstipple, RT_PIXMAP, DixReadAccess);
+ : }
+ : if (pPixmap)
+ : {
+ : if ((pPixmap->drawable.depth != 1) ||
+ : (pPixmap->drawable.pScreen != pGC->pScreen))
+ : {
+ : error = BadMatch;
+ : }
+ : else
+ : {
+ : pPixmap->refcnt++;
+ : if (pGC->stipple)
+ : (* pGC->pScreen->DestroyPixmap)(pGC->stipple);
+ : pGC->stipple = pPixmap;
+ : }
+ : }
+ : else
+ : {
+ : clientErrorValue = newstipple;
+ : error = BadPixmap;
+ : }
+ : break;
+ : }
+ : case GCTileStipXOrigin:
+ : NEXTVAL(INT16, pGC->patOrg.x);
+ : break;
+ : case GCTileStipYOrigin:
+ : NEXTVAL(INT16, pGC->patOrg.y);
+ : break;
+ : case GCFont:
+ : {
+ : FontPtr pFont;
+ : XID newfont = 0;
+ : if (pUnion)
+ : {
+ : NEXT_PTR(FontPtr, pFont);
+ : }
+ : else
+ : {
+ : NEXTVAL(XID, newfont)
+ : pFont = (FontPtr)SecurityLookupIDByType(client, newfont,
+ : RT_FONT, DixReadAccess);
+ : }
+ : if (pFont)
+ : {
+ : pFont->refcnt++;
+ : if (pGC->font)
+ : CloseFont(pGC->font, (Font)0);
+ : pGC->font = pFont;
+ : }
+ : else
+ : {
+ : clientErrorValue = newfont;
+ : error = BadFont;
+ : }
+ : break;
+ : }
+ : case GCSubwindowMode:
+ : {
+ : unsigned int newclipmode;
+ 1 0.0011 : NEXTVAL(unsigned int, newclipmode);
+ : if (newclipmode <= IncludeInferiors)
+ 1 0.0011 : pGC->subWindowMode = newclipmode;
+ : else
+ : {
+ : clientErrorValue = newclipmode;
+ : error = BadValue;
+ : }
+ : break;
+ : }
+ : case GCGraphicsExposures:
+ : {
+ : unsigned int newge;
+ : NEXTVAL(unsigned int, newge);
+ : if (newge <= xTrue)
+ : pGC->graphicsExposures = newge;
+ : else
+ : {
+ : clientErrorValue = newge;
+ : error = BadValue;
+ : }
+ : break;
+ : }
+ : case GCClipXOrigin:
+ 2 0.0022 : NEXTVAL(INT16, pGC->clipOrg.x);
+ : break;
+ : case GCClipYOrigin:
+ : NEXTVAL(INT16, pGC->clipOrg.y);
+ : break;
+ : case GCClipMask:
+ : {
+ : Pixmap pid = 0;
+ : int clipType = 0;
+ :
+ : if (pUnion)
+ : {
+ : NEXT_PTR(PixmapPtr, pPixmap);
+ : }
+ : else
+ : {
+ : NEXTVAL(Pixmap, pid)
+ : if (pid == None)
+ : {
+ : clipType = CT_NONE;
+ : pPixmap = NullPixmap;
+ : }
+ : else
+ : pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
+ : pid, RT_PIXMAP, DixReadAccess);
+ : }
+ :
+ : if (pPixmap)
+ : {
+ : if ((pPixmap->drawable.depth != 1) ||
+ : (pPixmap->drawable.pScreen != pGC->pScreen))
+ : {
+ : error = BadMatch;
+ : }
+ : else
+ : {
+ : clipType = CT_PIXMAP;
+ : pPixmap->refcnt++;
+ : }
+ : }
+ : else if (!pUnion && (pid != None))
+ : {
+ : clientErrorValue = pid;
+ : error = BadPixmap;
+ : }
+ : if(error == Success)
+ : {
+ : (*pGC->funcs->ChangeClip)(pGC, clipType,
+ : (pointer)pPixmap, 0);
+ : }
+ : break;
+ : }
+ : case GCDashOffset:
+ : NEXTVAL(INT16, pGC->dashOffset);
+ : break;
+ : case GCDashList:
+ : {
+ : CARD8 newdash;
+ : NEXTVAL(CARD8, newdash);
+ : if (newdash == 4)
+ : {
+ : if (pGC->dash != DefaultDash)
+ : {
+ : xfree(pGC->dash);
+ : pGC->numInDashList = 2;
+ : pGC->dash = DefaultDash;
+ : }
+ : }
+ : else if (newdash != 0)
+ : {
+ : unsigned char *dash;
+ :
+ : dash = (unsigned char *)xalloc(2 * sizeof(unsigned char));
+ : if (dash)
+ : {
+ : if (pGC->dash != DefaultDash)
+ : xfree(pGC->dash);
+ : pGC->numInDashList = 2;
+ : pGC->dash = dash;
+ : dash[0] = newdash;
+ : dash[1] = newdash;
+ : }
+ : else
+ : error = BadAlloc;
+ : }
+ : else
+ : {
+ : clientErrorValue = newdash;
+ : error = BadValue;
+ : }
+ : break;
+ : }
+ : case GCArcMode:
+ : {
+ : unsigned int newarcmode;
+ : NEXTVAL(unsigned int, newarcmode);
+ : if (newarcmode <= ArcPieSlice)
+ : pGC->arcMode = newarcmode;
+ : else
+ : {
+ : clientErrorValue = newarcmode;
+ : error = BadValue;
+ : }
+ : break;
+ : }
+ : default:
+ : clientErrorValue = maskQ;
+ : error = BadValue;
+ : break;
+ : }
+ : } /* end while mask && !error */
+ :
+ 1 0.0011 : if (pGC->fillStyle == FillTiled && pGC->tileIsPixel)
+ : {
+ : if (!CreateDefaultTile (pGC))
+ : {
+ : pGC->fillStyle = FillSolid;
+ : error = BadAlloc;
+ : }
+ : }
+ : (*pGC->funcs->ChangeGC)(pGC, maskQ);
+ : return error;
+ :}
+ :
+ :#undef NEXTVAL
+ :#undef NEXT_PTR
+ :
+ :/* Publically defined entry to ChangeGC. Just calls dixChangeGC and tells
+ : * it that all of the entries are constants or IDs */
+ :_X_EXPORT int
+ :ChangeGC(GC *pGC, BITS32 mask, XID *pval)
+ 2 0.0022 :{ /* ChangeGC total: 5 0.0054 */
+ 3 0.0033 : return (dixChangeGC(NullClient, pGC, mask, pval, NULL));
+ :}
+ :
+ :/* DoChangeGC(pGC, mask, pval, fPointer)
+ : mask is a set of bits indicating which values to change.
+ : pval contains an appropriate value for each mask.
+ : fPointer is true if the values for tiles, stipples, fonts or clipmasks
+ : are pointers instead of IDs. Note: if you are passing pointers you
+ : MUST declare the array of values as type pointer! Other data types
+ : may not be large enough to hold pointers on some machines. Yes,
+ : this means you have to cast to (XID *) when you pass the array to
+ : DoChangeGC. Similarly, if you are not passing pointers (fPointer = 0) you
+ : MUST declare the array as type XID (not unsigned long!), or again the wrong
+ : size data type may be used. To avoid this cruftiness, use dixChangeGC
+ : above.
+ :
+ : if there is an error, the value is marked as changed
+ : anyway, which is probably wrong, but infrequent.
+ :
+ :NOTE:
+ : all values sent over the protocol for ChangeGC requests are
+ :32 bits long
+ :*/
+ :_X_EXPORT int
+ :DoChangeGC(GC *pGC, BITS32 mask, XID *pval, int fPointer)
+ :{
+ : if (fPointer)
+ : /* XXX might be a problem on 64 bit big-endian servers */
+ : return dixChangeGC(NullClient, pGC, mask, NULL, (ChangeGCValPtr)pval);
+ : else
+ : return dixChangeGC(NullClient, pGC, mask, pval, NULL);
+ :}
+ :
+ :
+ :/* CreateGC(pDrawable, mask, pval, pStatus)
+ : creates a default GC for the given drawable, using mask to fill
+ : in any non-default values.
+ : Returns a pointer to the new GC on success, NULL otherwise.
+ : returns status of non-default fields in pStatus
+ :BUG:
+ : should check for failure to create default tile
+ :
+ :*/
+ :
+ :static GCPtr
+ :AllocateGC(ScreenPtr pScreen)
+ :{ /* AllocateGC total: 2 0.0022 */
+ : GCPtr pGC;
+ : char *ptr;
+ : DevUnion *ppriv;
+ : unsigned *sizes;
+ : unsigned size;
+ : int i;
+ :
+ : pGC = (GCPtr)xalloc(pScreen->totalGCSize);
+ : if (pGC)
+ : {
+ : ppriv = (DevUnion *)(pGC + 1);
+ : pGC->devPrivates = ppriv;
+ : sizes = pScreen->GCPrivateSizes;
+ : ptr = (char *)(ppriv + pScreen->GCPrivateLen);
+ : for (i = pScreen->GCPrivateLen; --i >= 0; ppriv++, sizes++)
+ : {
+ : if ( (size = *sizes) )
+ : {
+ : ppriv->ptr = (pointer)ptr;
+ : ptr += size;
+ : }
+ : else
+ 1 0.0011 : ppriv->ptr = (pointer)NULL;
+ : }
+ : }
+ : return pGC;
+ 1 0.0011 :}
+ :
+ :_X_EXPORT GCPtr
+ :CreateGC(DrawablePtr pDrawable, BITS32 mask, XID *pval, int *pStatus)
+ :{ /* CreateGC total: 1 0.0011 */
+ : GCPtr pGC;
+ :
+ : pGC = AllocateGC(pDrawable->pScreen);
+ : if (!pGC)
+ : {
+ : *pStatus = BadAlloc;
+ : return (GCPtr)NULL;
+ : }
+ :
+ : pGC->pScreen = pDrawable->pScreen;
+ : pGC->depth = pDrawable->depth;
+ : pGC->alu = GXcopy; /* dst <- src */
+ : pGC->planemask = ~0;
+ : pGC->serialNumber = GC_CHANGE_SERIAL_BIT;
+ : pGC->funcs = 0;
+ :
+ : pGC->fgPixel = 0;
+ : pGC->bgPixel = 1;
+ : pGC->lineWidth = 0;
+ : pGC->lineStyle = LineSolid;
+ : pGC->capStyle = CapButt;
+ : pGC->joinStyle = JoinMiter;
+ : pGC->fillStyle = FillSolid;
+ : pGC->fillRule = EvenOddRule;
+ : pGC->arcMode = ArcPieSlice;
+ : if (mask & GCForeground)
+ : {
+ : /*
+ : * magic special case -- ChangeGC checks for this condition
+ : * and snags the Foreground value to create a pseudo default-tile
+ : */
+ : pGC->tileIsPixel = FALSE;
+ : pGC->tile.pixmap = NullPixmap;
+ : }
+ : else
+ : {
+ : pGC->tileIsPixel = TRUE;
+ : pGC->tile.pixel = 0;
+ : }
+ :
+ 1 0.0011 : pGC->patOrg.x = 0;
+ : pGC->patOrg.y = 0;
+ : pGC->subWindowMode = ClipByChildren;
+ : pGC->graphicsExposures = TRUE;
+ : pGC->clipOrg.x = 0;
+ : pGC->clipOrg.y = 0;
+ : pGC->clientClipType = CT_NONE;
+ : pGC->clientClip = (pointer)NULL;
+ : pGC->numInDashList = 2;
+ : pGC->dash = DefaultDash;
+ : pGC->dashOffset = 0;
+ : pGC->lastWinOrg.x = 0;
+ : pGC->lastWinOrg.y = 0;
+ :
+ : /* use the default font and stipple */
+ : pGC->font = defaultFont;
+ : defaultFont->refcnt++;
+ : pGC->stipple = pGC->pScreen->PixmapPerDepth[0];
+ : pGC->stipple->refcnt++;
+ :
+ : pGC->stateChanges = (1 << (GCLastBit+1)) - 1;
+ : if (!(*pGC->pScreen->CreateGC)(pGC))
+ : *pStatus = BadAlloc;
+ : else if (mask)
+ : *pStatus = ChangeGC(pGC, mask, pval);
+ : else
+ : *pStatus = Success;
+ : if (*pStatus != Success)
+ : {
+ : if (!pGC->tileIsPixel && !pGC->tile.pixmap)
+ : pGC->tileIsPixel = TRUE; /* undo special case */
+ : FreeGC(pGC, (XID)0);
+ : pGC = (GCPtr)NULL;
+ : }
+ :
+ : return (pGC);
+ :}
+ :
+ :static Bool
+ :CreateDefaultTile (GCPtr pGC)
+ :{
+ : XID tmpval[3];
+ : PixmapPtr pTile;
+ : GCPtr pgcScratch;
+ : xRectangle rect;
+ : CARD16 w, h;
+ :
+ : w = 1;
+ : h = 1;
+ : (*pGC->pScreen->QueryBestSize)(TileShape, &w, &h, pGC->pScreen);
+ : pTile = (PixmapPtr)
+ : (*pGC->pScreen->CreatePixmap)(pGC->pScreen,
+ : w, h, pGC->depth);
+ : pgcScratch = GetScratchGC(pGC->depth, pGC->pScreen);
+ : if (!pTile || !pgcScratch)
+ : {
+ : if (pTile)
+ : (*pTile->drawable.pScreen->DestroyPixmap)(pTile);
+ : if (pgcScratch)
+ : FreeScratchGC(pgcScratch);
+ : return FALSE;
+ : }
+ : tmpval[0] = GXcopy;
+ : tmpval[1] = pGC->tile.pixel;
+ : tmpval[2] = FillSolid;
+ : (void)ChangeGC(pgcScratch, GCFunction | GCForeground | GCFillStyle,
+ : tmpval);
+ : ValidateGC((DrawablePtr)pTile, pgcScratch);
+ : rect.x = 0;
+ : rect.y = 0;
+ : rect.width = w;
+ : rect.height = h;
+ : (*pgcScratch->ops->PolyFillRect)((DrawablePtr)pTile, pgcScratch, 1, &rect);
+ : /* Always remember to free the scratch graphics context after use. */
+ : FreeScratchGC(pgcScratch);
+ :
+ : pGC->tileIsPixel = FALSE;
+ : pGC->tile.pixmap = pTile;
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT int
+ :CopyGC(GC *pgcSrc, GC *pgcDst, BITS32 mask)
+ :{
+ : BITS32 index2;
+ : BITS32 maskQ;
+ : int error = 0;
+ :
+ : if (pgcSrc == pgcDst)
+ : return Success;
+ : pgcDst->serialNumber |= GC_CHANGE_SERIAL_BIT;
+ : pgcDst->stateChanges |= mask;
+ : maskQ = mask;
+ : while (mask)
+ : {
+ : index2 = (BITS32) lowbit (mask);
+ : mask &= ~index2;
+ : switch (index2)
+ : {
+ : case GCFunction:
+ : pgcDst->alu = pgcSrc->alu;
+ : break;
+ : case GCPlaneMask:
+ : pgcDst->planemask = pgcSrc->planemask;
+ : break;
+ : case GCForeground:
+ : pgcDst->fgPixel = pgcSrc->fgPixel;
+ : break;
+ : case GCBackground:
+ : pgcDst->bgPixel = pgcSrc->bgPixel;
+ : break;
+ : case GCLineWidth:
+ : pgcDst->lineWidth = pgcSrc->lineWidth;
+ : break;
+ : case GCLineStyle:
+ : pgcDst->lineStyle = pgcSrc->lineStyle;
+ : break;
+ : case GCCapStyle:
+ : pgcDst->capStyle = pgcSrc->capStyle;
+ : break;
+ : case GCJoinStyle:
+ : pgcDst->joinStyle = pgcSrc->joinStyle;
+ : break;
+ : case GCFillStyle:
+ : pgcDst->fillStyle = pgcSrc->fillStyle;
+ : break;
+ : case GCFillRule:
+ : pgcDst->fillRule = pgcSrc->fillRule;
+ : break;
+ : case GCTile:
+ : {
+ : if (EqualPixUnion(pgcDst->tileIsPixel,
+ : pgcDst->tile,
+ : pgcSrc->tileIsPixel,
+ : pgcSrc->tile))
+ : {
+ : break;
+ : }
+ : if (!pgcDst->tileIsPixel)
+ : (* pgcDst->pScreen->DestroyPixmap)(pgcDst->tile.pixmap);
+ : pgcDst->tileIsPixel = pgcSrc->tileIsPixel;
+ : pgcDst->tile = pgcSrc->tile;
+ : if (!pgcDst->tileIsPixel)
+ : pgcDst->tile.pixmap->refcnt++;
+ : break;
+ : }
+ : case GCStipple:
+ : {
+ : if (pgcDst->stipple == pgcSrc->stipple)
+ : break;
+ : if (pgcDst->stipple)
+ : (* pgcDst->pScreen->DestroyPixmap)(pgcDst->stipple);
+ : pgcDst->stipple = pgcSrc->stipple;
+ : if (pgcDst->stipple)
+ : pgcDst->stipple->refcnt ++;
+ : break;
+ : }
+ : case GCTileStipXOrigin:
+ : pgcDst->patOrg.x = pgcSrc->patOrg.x;
+ : break;
+ : case GCTileStipYOrigin:
+ : pgcDst->patOrg.y = pgcSrc->patOrg.y;
+ : break;
+ : case GCFont:
+ : if (pgcDst->font == pgcSrc->font)
+ : break;
+ : if (pgcDst->font)
+ : CloseFont(pgcDst->font, (Font)0);
+ : if ((pgcDst->font = pgcSrc->font) != NullFont)
+ : (pgcDst->font)->refcnt++;
+ : break;
+ : case GCSubwindowMode:
+ : pgcDst->subWindowMode = pgcSrc->subWindowMode;
+ : break;
+ : case GCGraphicsExposures:
+ : pgcDst->graphicsExposures = pgcSrc->graphicsExposures;
+ : break;
+ : case GCClipXOrigin:
+ : pgcDst->clipOrg.x = pgcSrc->clipOrg.x;
+ : break;
+ : case GCClipYOrigin:
+ : pgcDst->clipOrg.y = pgcSrc->clipOrg.y;
+ : break;
+ : case GCClipMask:
+ : (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
+ : break;
+ : case GCDashOffset:
+ : pgcDst->dashOffset = pgcSrc->dashOffset;
+ : break;
+ : case GCDashList:
+ : if (pgcSrc->dash == DefaultDash)
+ : {
+ : if (pgcDst->dash != DefaultDash)
+ : {
+ : xfree(pgcDst->dash);
+ : pgcDst->numInDashList = pgcSrc->numInDashList;
+ : pgcDst->dash = pgcSrc->dash;
+ : }
+ : }
+ : else
+ : {
+ : unsigned char *dash;
+ : unsigned int i;
+ :
+ : dash = (unsigned char *)xalloc(pgcSrc->numInDashList *
+ : sizeof(unsigned char));
+ : if (dash)
+ : {
+ : if (pgcDst->dash != DefaultDash)
+ : xfree(pgcDst->dash);
+ : pgcDst->numInDashList = pgcSrc->numInDashList;
+ : pgcDst->dash = dash;
+ : for (i=0; i<pgcSrc->numInDashList; i++)
+ : dash[i] = pgcSrc->dash[i];
+ : }
+ : else
+ : error = BadAlloc;
+ : }
+ : break;
+ : case GCArcMode:
+ : pgcDst->arcMode = pgcSrc->arcMode;
+ : break;
+ : default:
+ : clientErrorValue = maskQ;
+ : error = BadValue;
+ : break;
+ : }
+ : }
+ : if (pgcDst->fillStyle == FillTiled && pgcDst->tileIsPixel)
+ : {
+ : if (!CreateDefaultTile (pgcDst))
+ : {
+ : pgcDst->fillStyle = FillSolid;
+ : error = BadAlloc;
+ : }
+ : }
+ : (*pgcDst->funcs->CopyGC) (pgcSrc, maskQ, pgcDst);
+ : return error;
+ :}
+ :
+ :/**
+ : * does the diX part of freeing the characteristics in the GC.
+ : *
+ : * \param value must conform to DeleteType
+ : */
+ :_X_EXPORT int
+ :FreeGC(pointer value, XID gid)
+ :{ /* FreeGC total: 1 0.0011 */
+ : GCPtr pGC = (GCPtr)value;
+ :
+ : CloseFont(pGC->font, (Font)0);
+ : (* pGC->funcs->DestroyClip)(pGC);
+ :
+ : if (!pGC->tileIsPixel)
+ : (* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
+ : if (pGC->stipple)
+ : (* pGC->pScreen->DestroyPixmap)(pGC->stipple);
+ :
+ : (*pGC->funcs->DestroyGC) (pGC);
+ 1 0.0011 : if (pGC->dash != DefaultDash)
+ : xfree(pGC->dash);
+ : xfree(pGC);
+ : return(Success);
+ :}
+ :
+ :/* CreateScratchGC(pScreen, depth)
+ : like CreateGC, but doesn't do the default tile or stipple,
+ :since we can't create them without already having a GC. any code
+ :using the tile or stipple has to set them explicitly anyway,
+ :since the state of the scratch gc is unknown. This is OK
+ :because ChangeGC() has to be able to deal with NULL tiles and
+ :stipples anyway (in case the CreateGC() call has provided a
+ :value for them -- we can't set the default tile until the
+ :client-supplied attributes are installed, since the fgPixel
+ :is what fills the default tile. (maybe this comment should
+ :go with CreateGC() or ChangeGC().)
+ :*/
+ :
+ :_X_EXPORT GCPtr
+ :CreateScratchGC(ScreenPtr pScreen, unsigned depth)
+ :{
+ : GCPtr pGC;
+ :
+ : pGC = AllocateGC(pScreen);
+ : if (!pGC)
+ : return (GCPtr)NULL;
+ :
+ : pGC->pScreen = pScreen;
+ : pGC->depth = depth;
+ : pGC->alu = GXcopy; /* dst <- src */
+ : pGC->planemask = ~0;
+ : pGC->serialNumber = 0;
+ :
+ : pGC->fgPixel = 0;
+ : pGC->bgPixel = 1;
+ : pGC->lineWidth = 0;
+ : pGC->lineStyle = LineSolid;
+ : pGC->capStyle = CapButt;
+ : pGC->joinStyle = JoinMiter;
+ : pGC->fillStyle = FillSolid;
+ : pGC->fillRule = EvenOddRule;
+ : pGC->arcMode = ArcPieSlice;
+ : pGC->font = defaultFont;
+ : if ( pGC->font) /* necessary, because open of default font could fail */
+ : pGC->font->refcnt++;
+ : pGC->tileIsPixel = TRUE;
+ : pGC->tile.pixel = 0;
+ : pGC->stipple = NullPixmap;
+ : pGC->patOrg.x = 0;
+ : pGC->patOrg.y = 0;
+ : pGC->subWindowMode = ClipByChildren;
+ : pGC->graphicsExposures = TRUE;
+ : pGC->clipOrg.x = 0;
+ : pGC->clipOrg.y = 0;
+ : pGC->clientClipType = CT_NONE;
+ : pGC->dashOffset = 0;
+ : pGC->numInDashList = 2;
+ : pGC->dash = DefaultDash;
+ : pGC->lastWinOrg.x = 0;
+ : pGC->lastWinOrg.y = 0;
+ :
+ : pGC->stateChanges = (1 << (GCLastBit+1)) - 1;
+ : if (!(*pScreen->CreateGC)(pGC))
+ : {
+ : FreeGC(pGC, (XID)0);
+ : pGC = (GCPtr)NULL;
+ : }
+ : return pGC;
+ :}
+ :
+ :void
+ :FreeGCperDepth(int screenNum)
+ :{
+ : int i;
+ : ScreenPtr pScreen;
+ : GCPtr *ppGC;
+ :
+ : pScreen = screenInfo.screens[screenNum];
+ : ppGC = pScreen->GCperDepth;
+ :
+ : for (i = 0; i <= pScreen->numDepths; i++)
+ : (void)FreeGC(ppGC[i], (XID)0);
+ : pScreen->rgf = ~0L;
+ :}
+ :
+ :
+ :Bool
+ :CreateGCperDepth(int screenNum)
+ :{
+ : int i;
+ : ScreenPtr pScreen;
+ : DepthPtr pDepth;
+ : GCPtr *ppGC;
+ :
+ : pScreen = screenInfo.screens[screenNum];
+ : pScreen->rgf = 0;
+ : ppGC = pScreen->GCperDepth;
+ : /* do depth 1 separately because it's not included in list */
+ : if (!(ppGC[0] = CreateScratchGC(pScreen, 1)))
+ : return FALSE;
+ : ppGC[0]->graphicsExposures = FALSE;
+ : /* Make sure we don't overflow GCperDepth[] */
+ : if( pScreen->numDepths > MAXFORMATS )
+ : return FALSE;
+ :
+ : pDepth = pScreen->allowedDepths;
+ : for (i=0; i<pScreen->numDepths; i++, pDepth++)
+ : {
+ : if (!(ppGC[i+1] = CreateScratchGC(pScreen, pDepth->depth)))
+ : {
+ : for (; i >= 0; i--)
+ : (void)FreeGC(ppGC[i], (XID)0);
+ : return FALSE;
+ : }
+ : ppGC[i+1]->graphicsExposures = FALSE;
+ : }
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :CreateDefaultStipple(int screenNum)
+ :{
+ : ScreenPtr pScreen;
+ : XID tmpval[3];
+ : xRectangle rect;
+ : CARD16 w, h;
+ : GCPtr pgcScratch;
+ :
+ : pScreen = screenInfo.screens[screenNum];
+ :
+ : w = 16;
+ : h = 16;
+ : (* pScreen->QueryBestSize)(StippleShape, &w, &h, pScreen);
+ : if (!(pScreen->PixmapPerDepth[0] =
+ : (*pScreen->CreatePixmap)(pScreen, w, h, 1)))
+ : return FALSE;
+ : /* fill stipple with 1 */
+ : tmpval[0] = GXcopy; tmpval[1] = 1; tmpval[2] = FillSolid;
+ : pgcScratch = GetScratchGC(1, pScreen);
+ : if (!pgcScratch)
+ : {
+ : (*pScreen->DestroyPixmap)(pScreen->PixmapPerDepth[0]);
+ : return FALSE;
+ : }
+ : (void)ChangeGC(pgcScratch, GCFunction|GCForeground|GCFillStyle, tmpval);
+ : ValidateGC((DrawablePtr)pScreen->PixmapPerDepth[0], pgcScratch);
+ : rect.x = 0;
+ : rect.y = 0;
+ : rect.width = w;
+ : rect.height = h;
+ : (*pgcScratch->ops->PolyFillRect)((DrawablePtr)pScreen->PixmapPerDepth[0],
+ : pgcScratch, 1, &rect);
+ : FreeScratchGC(pgcScratch);
+ : return TRUE;
+ :}
+ :
+ :void
+ :FreeDefaultStipple(int screenNum)
+ :{
+ : ScreenPtr pScreen = screenInfo.screens[screenNum];
+ : (*pScreen->DestroyPixmap)(pScreen->PixmapPerDepth[0]);
+ :}
+ :
+ :_X_EXPORT int
+ :SetDashes(GCPtr pGC, unsigned offset, unsigned ndash, unsigned char *pdash)
+ :{
+ : long i;
+ : unsigned char *p, *indash;
+ : BITS32 maskQ = 0;
+ :
+ : i = ndash;
+ : p = pdash;
+ : while (i--)
+ : {
+ : if (!*p++)
+ : {
+ : /* dash segment must be > 0 */
+ : clientErrorValue = 0;
+ : return BadValue;
+ : }
+ : }
+ :
+ : if (ndash & 1)
+ : p = (unsigned char *)xalloc(2 * ndash * sizeof(unsigned char));
+ : else
+ : p = (unsigned char *)xalloc(ndash * sizeof(unsigned char));
+ : if (!p)
+ : return BadAlloc;
+ :
+ : pGC->serialNumber |= GC_CHANGE_SERIAL_BIT;
+ : if (offset != pGC->dashOffset)
+ : {
+ : pGC->dashOffset = offset;
+ : pGC->stateChanges |= GCDashOffset;
+ : maskQ |= GCDashOffset;
+ : }
+ :
+ : if (pGC->dash != DefaultDash)
+ : xfree(pGC->dash);
+ : pGC->numInDashList = ndash;
+ : pGC->dash = p;
+ : if (ndash & 1)
+ : {
+ : pGC->numInDashList += ndash;
+ : indash = pdash;
+ : i = ndash;
+ : while (i--)
+ : *p++ = *indash++;
+ : }
+ : while(ndash--)
+ : *p++ = *pdash++;
+ : pGC->stateChanges |= GCDashList;
+ : maskQ |= GCDashList;
+ :
+ : if (pGC->funcs->ChangeGC)
+ : (*pGC->funcs->ChangeGC) (pGC, maskQ);
+ : return Success;
+ :}
+ :
+ :_X_EXPORT int
+ :VerifyRectOrder(int nrects, xRectangle *prects, int ordering)
+ :{ /* VerifyRectOrder total: 1 0.0011 */
+ : xRectangle *prectP, *prectN;
+ : int i;
+ :
+ : switch(ordering)
+ : {
+ : case Unsorted:
+ : return CT_UNSORTED;
+ : case YSorted:
+ : if(nrects > 1)
+ : {
+ : for(i = 1, prectP = prects, prectN = prects + 1;
+ : i < nrects;
+ : i++, prectP++, prectN++)
+ : if(prectN->y < prectP->y)
+ : return -1;
+ : }
+ : return CT_YSORTED;
+ : case YXSorted:
+ : if(nrects > 1)
+ : {
+ : for(i = 1, prectP = prects, prectN = prects + 1;
+ : i < nrects;
+ : i++, prectP++, prectN++)
+ : if((prectN->y < prectP->y) ||
+ : ( (prectN->y == prectP->y) &&
+ : (prectN->x < prectP->x) ) )
+ : return -1;
+ : }
+ : return CT_YXSORTED;
+ : case YXBanded:
+ 1 0.0011 : if(nrects > 1)
+ : {
+ : for(i = 1, prectP = prects, prectN = prects + 1;
+ : i < nrects;
+ : i++, prectP++, prectN++)
+ : if((prectN->y != prectP->y &&
+ : prectN->y < prectP->y + (int) prectP->height) ||
+ : ((prectN->y == prectP->y) &&
+ : (prectN->height != prectP->height ||
+ : prectN->x < prectP->x + (int) prectP->width)))
+ : return -1;
+ : }
+ : return CT_YXBANDED;
+ : }
+ : return -1;
+ :}
+ :
+ :_X_EXPORT int
+ :SetClipRects(GCPtr pGC, int xOrigin, int yOrigin, int nrects,
+ : xRectangle *prects, int ordering)
+ :{ /* SetClipRects total: 2 0.0022 */
+ : int newct, size;
+ : xRectangle *prectsNew;
+ :
+ : newct = VerifyRectOrder(nrects, prects, ordering);
+ : if (newct < 0)
+ : return(BadMatch);
+ : size = nrects * sizeof(xRectangle);
+ : prectsNew = (xRectangle *) xalloc(size);
+ : if (!prectsNew && size)
+ : return BadAlloc;
+ :
+ : pGC->serialNumber |= GC_CHANGE_SERIAL_BIT;
+ 1 0.0011 : pGC->clipOrg.x = xOrigin;
+ : pGC->stateChanges |= GCClipXOrigin;
+ :
+ : pGC->clipOrg.y = yOrigin;
+ : pGC->stateChanges |= GCClipYOrigin;
+ :
+ : if (size)
+ : memmove((char *)prectsNew, (char *)prects, size);
+ : (*pGC->funcs->ChangeClip)(pGC, newct, (pointer)prectsNew, nrects);
+ 1 0.0011 : if (pGC->funcs->ChangeGC)
+ : (*pGC->funcs->ChangeGC) (pGC, GCClipXOrigin|GCClipYOrigin|GCClipMask);
+ : return Success;
+ :}
+ :
+ :
+ :/*
+ : sets reasonable defaults
+ : if we can get a pre-allocated one, use it and mark it as used.
+ : if we can't, create one out of whole cloth (The Velveteen GC -- if
+ : you use it often enough it will become real.)
+ :*/
+ :_X_EXPORT GCPtr
+ :GetScratchGC(unsigned depth, ScreenPtr pScreen)
+ 2 0.0022 :{ /* GetScratchGC total: 8 0.0087 */
+ : int i;
+ : GCPtr pGC;
+ :
+ : for (i=0; i<=pScreen->numDepths; i++)
+ 2 0.0022 : if ( pScreen->GCperDepth[i]->depth == depth &&
+ : !(pScreen->rgf & (1L << (i+1)))
+ : )
+ : {
+ : pScreen->rgf |= (1L << (i+1));
+ : pGC = (pScreen->GCperDepth[i]);
+ :
+ : pGC->alu = GXcopy;
+ : pGC->planemask = ~0;
+ : pGC->serialNumber = 0;
+ : pGC->fgPixel = 0;
+ : pGC->bgPixel = 1;
+ : pGC->lineWidth = 0;
+ : pGC->lineStyle = LineSolid;
+ : pGC->capStyle = CapButt;
+ : pGC->joinStyle = JoinMiter;
+ : pGC->fillStyle = FillSolid;
+ : pGC->fillRule = EvenOddRule;
+ : pGC->arcMode = ArcChord;
+ 3 0.0033 : pGC->patOrg.x = 0;
+ : pGC->patOrg.y = 0;
+ : pGC->subWindowMode = ClipByChildren;
+ : pGC->graphicsExposures = FALSE;
+ : pGC->clipOrg.x = 0;
+ : pGC->clipOrg.y = 0;
+ : if (pGC->clientClipType != CT_NONE)
+ : (*pGC->funcs->ChangeClip) (pGC, CT_NONE, NULL, 0);
+ : pGC->stateChanges = (1 << (GCLastBit+1)) - 1;
+ : return pGC;
+ : }
+ : /* if we make it this far, need to roll our own */
+ : pGC = CreateScratchGC(pScreen, depth);
+ : if (pGC)
+ : pGC->graphicsExposures = FALSE;
+ : return pGC;
+ 1 0.0011 :}
+ :
+ :/*
+ : if the gc to free is in the table of pre-existing ones,
+ :mark it as available.
+ : if not, free it for real
+ :*/
+ :_X_EXPORT void
+ :FreeScratchGC(GCPtr pGC)
+ 4 0.0044 :{ /* FreeScratchGC total: 10 0.0109 */
+ : ScreenPtr pScreen = pGC->pScreen;
+ : int i;
+ :
+ 1 0.0011 : for (i=0; i<=pScreen->numDepths; i++)
+ : {
+ 3 0.0033 : if ( pScreen->GCperDepth[i] == pGC)
+ : {
+ : pScreen->rgf &= ~(1L << (i+1));
+ 1 0.0011 : return;
+ : }
+ : }
+ : (void)FreeGC(pGC, (GContext)0);
+ 1 0.0011 :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/Xext/security.c"
+ *
+ * 50 0.0545
+ */
+
+
+ :/*
+ :
+ :Copyright 1996, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :*/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "dixstruct.h"
+ :#include "extnsionst.h"
+ :#include "windowstr.h"
+ :#include "inputstr.h"
+ :#include "scrnintstr.h"
+ :#include "gcstruct.h"
+ :#include "colormapst.h"
+ :#include "propertyst.h"
+ :#include "xacestr.h"
+ :#include "securitysrv.h"
+ :#include <X11/extensions/securstr.h>
+ :#include <assert.h>
+ :#include <stdarg.h>
+ :#ifdef XAPPGROUP
+ :#include "appgroup.h"
+ :#endif
+ :#include <stdio.h> /* for file reading operations */
+ :#include <X11/Xatom.h> /* for XA_STRING */
+ :
+ :#ifndef DEFAULTPOLICYFILE
+ :# define DEFAULTPOLICYFILE NULL
+ :#endif
+ :#if defined(WIN32) || defined(__CYGWIN__)
+ :#include <X11/Xos.h>
+ :#undef index
+ :#endif
+ :
+ :#include "modinit.h"
+ :
+ :static int SecurityErrorBase; /* first Security error number */
+ :static int SecurityEventBase; /* first Security event number */
+ :static int securityClientPrivateIndex;
+ :static int securityExtnsnPrivateIndex;
+ :
+ :/* this is what we store as client security state */
+ :typedef struct {
+ : unsigned int trustLevel;
+ : XID authId;
+ :} SecurityClientStateRec;
+ :
+ :#define STATEVAL(extnsn) \
+ : ((extnsn)->devPrivates[securityExtnsnPrivateIndex].val)
+ :#define STATEPTR(client) \
+ : ((client)->devPrivates[securityClientPrivateIndex].ptr)
+ :#define TRUSTLEVEL(client) \
+ : (((SecurityClientStateRec*)STATEPTR(client))->trustLevel)
+ :#define AUTHID(client) \
+ : (((SecurityClientStateRec*)STATEPTR(client))->authId)
+ :
+ :static CallbackListPtr SecurityValidateGroupCallback = NULL;
+ :
+ :RESTYPE SecurityAuthorizationResType; /* resource type for authorizations */
+ :
+ :static RESTYPE RTEventClient;
+ :
+ :#define CALLBACK(name) static void \
+ :name(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
+ :
+ :/* SecurityAudit
+ : *
+ : * Arguments:
+ : * format is the formatting string to be used to interpret the
+ : * remaining arguments.
+ : *
+ : * Returns: nothing.
+ : *
+ : * Side Effects:
+ : * Writes the message to the log file if security logging is on.
+ : */
+ :
+ :static void
+ :SecurityAudit(char *format, ...)
+ :{
+ : va_list args;
+ :
+ : if (auditTrailLevel < SECURITY_AUDIT_LEVEL)
+ : return;
+ : va_start(args, format);
+ : VAuditF(format, args);
+ : va_end(args);
+ :} /* SecurityAudit */
+ :
+ :#define rClient(obj) (clients[CLIENT_ID((obj)->resource)])
+ :
+ :/* SecurityDeleteAuthorization
+ : *
+ : * Arguments:
+ : * value is the authorization to delete.
+ : * id is its resource ID.
+ : *
+ : * Returns: Success.
+ : *
+ : * Side Effects:
+ : * Frees everything associated with the authorization.
+ : */
+ :
+ :static int
+ :SecurityDeleteAuthorization(
+ : pointer value,
+ : XID id)
+ :{
+ : SecurityAuthorizationPtr pAuth = (SecurityAuthorizationPtr)value;
+ : unsigned short name_len, data_len;
+ : char *name, *data;
+ : int status;
+ : int i;
+ : OtherClientsPtr pEventClient;
+ :
+ : /* Remove the auth using the os layer auth manager */
+ :
+ : status = AuthorizationFromID(pAuth->id, &name_len, &name,
+ : &data_len, &data);
+ : assert(status);
+ : status = RemoveAuthorization(name_len, name, data_len, data);
+ : assert(status);
+ : (void)status;
+ :
+ : /* free the auth timer if there is one */
+ :
+ : if (pAuth->timer) TimerFree(pAuth->timer);
+ :
+ : /* send revoke events */
+ :
+ : while ((pEventClient = pAuth->eventClients))
+ : {
+ : /* send revocation event event */
+ : ClientPtr client = rClient(pEventClient);
+ :
+ : if (!client->clientGone)
+ : {
+ : xSecurityAuthorizationRevokedEvent are;
+ : are.type = SecurityEventBase + XSecurityAuthorizationRevoked;
+ : are.sequenceNumber = client->sequence;
+ : are.authId = pAuth->id;
+ : WriteEventsToClient(client, 1, (xEvent *)&are);
+ : }
+ : FreeResource(pEventClient->resource, RT_NONE);
+ : }
+ :
+ : /* kill all clients using this auth */
+ :
+ : for (i = 1; i<currentMaxClients; i++)
+ : {
+ : if (clients[i] && (AUTHID(clients[i]) == pAuth->id))
+ : CloseDownClient(clients[i]);
+ : }
+ :
+ : SecurityAudit("revoked authorization ID %d\n", pAuth->id);
+ : xfree(pAuth);
+ : return Success;
+ :
+ :} /* SecurityDeleteAuthorization */
+ :
+ :
+ :/* resource delete function for RTEventClient */
+ :static int
+ :SecurityDeleteAuthorizationEventClient(
+ : pointer value,
+ : XID id)
+ :{
+ : OtherClientsPtr pEventClient, prev = NULL;
+ : SecurityAuthorizationPtr pAuth = (SecurityAuthorizationPtr)value;
+ :
+ : for (pEventClient = pAuth->eventClients;
+ : pEventClient;
+ : pEventClient = pEventClient->next)
+ : {
+ : if (pEventClient->resource == id)
+ : {
+ : if (prev)
+ : prev->next = pEventClient->next;
+ : else
+ : pAuth->eventClients = pEventClient->next;
+ : xfree(pEventClient);
+ : return(Success);
+ : }
+ : prev = pEventClient;
+ : }
+ : /*NOTREACHED*/
+ : return -1; /* make compiler happy */
+ :} /* SecurityDeleteAuthorizationEventClient */
+ :
+ :
+ :/* SecurityComputeAuthorizationTimeout
+ : *
+ : * Arguments:
+ : * pAuth is the authorization for which we are computing the timeout
+ : * seconds is the number of seconds we want to wait
+ : *
+ : * Returns:
+ : * the number of milliseconds that the auth timer should be set to
+ : *
+ : * Side Effects:
+ : * Sets pAuth->secondsRemaining to any "overflow" amount of time
+ : * that didn't fit in 32 bits worth of milliseconds
+ : */
+ :
+ :static CARD32
+ :SecurityComputeAuthorizationTimeout(
+ : SecurityAuthorizationPtr pAuth,
+ : unsigned int seconds)
+ :{
+ : /* maxSecs is the number of full seconds that can be expressed in
+ : * 32 bits worth of milliseconds
+ : */
+ : CARD32 maxSecs = (CARD32)(~0) / (CARD32)MILLI_PER_SECOND;
+ :
+ : if (seconds > maxSecs)
+ : { /* only come here if we want to wait more than 49 days */
+ : pAuth->secondsRemaining = seconds - maxSecs;
+ : return maxSecs * MILLI_PER_SECOND;
+ : }
+ : else
+ : { /* by far the common case */
+ : pAuth->secondsRemaining = 0;
+ : return seconds * MILLI_PER_SECOND;
+ : }
+ :} /* SecurityStartAuthorizationTimer */
+ :
+ :/* SecurityAuthorizationExpired
+ : *
+ : * This function is passed as an argument to TimerSet and gets called from
+ : * the timer manager in the os layer when its time is up.
+ : *
+ : * Arguments:
+ : * timer is the timer for this authorization.
+ : * time is the current time.
+ : * pval is the authorization whose time is up.
+ : *
+ : * Returns:
+ : * A new time delay in milliseconds if the timer should wait some
+ : * more, else zero.
+ : *
+ : * Side Effects:
+ : * Frees the authorization resource if the timeout period is really
+ : * over, otherwise recomputes pAuth->secondsRemaining.
+ : */
+ :
+ :static CARD32
+ :SecurityAuthorizationExpired(
+ : OsTimerPtr timer,
+ : CARD32 time,
+ : pointer pval)
+ :{
+ : SecurityAuthorizationPtr pAuth = (SecurityAuthorizationPtr)pval;
+ :
+ : assert(pAuth->timer == timer);
+ :
+ : if (pAuth->secondsRemaining)
+ : {
+ : return SecurityComputeAuthorizationTimeout(pAuth,
+ : pAuth->secondsRemaining);
+ : }
+ : else
+ : {
+ : FreeResource(pAuth->id, RT_NONE);
+ : return 0;
+ : }
+ :} /* SecurityAuthorizationExpired */
+ :
+ :/* SecurityStartAuthorizationTimer
+ : *
+ : * Arguments:
+ : * pAuth is the authorization whose timer should be started.
+ : *
+ : * Returns: nothing.
+ : *
+ : * Side Effects:
+ : * A timer is started, set to expire after the timeout period for
+ : * this authorization. When it expires, the function
+ : * SecurityAuthorizationExpired will be called.
+ : */
+ :
+ :static void
+ :SecurityStartAuthorizationTimer(
+ : SecurityAuthorizationPtr pAuth)
+ :{
+ : pAuth->timer = TimerSet(pAuth->timer, 0,
+ : SecurityComputeAuthorizationTimeout(pAuth, pAuth->timeout),
+ : SecurityAuthorizationExpired, pAuth);
+ :} /* SecurityStartAuthorizationTimer */
+ :
+ :
+ :/* Proc functions all take a client argument, execute the request in
+ : * client->requestBuffer, and return a protocol error status.
+ : */
+ :
+ :static int
+ :ProcSecurityQueryVersion(
+ : ClientPtr client)
+ :{
+ : /* REQUEST(xSecurityQueryVersionReq); */
+ : xSecurityQueryVersionReply rep;
+ :
+ : /* paranoia: this "can't happen" because this extension is hidden
+ : * from untrusted clients, but just in case...
+ : */
+ : if (TRUSTLEVEL(client) != XSecurityClientTrusted)
+ : return BadRequest;
+ :
+ : REQUEST_SIZE_MATCH(xSecurityQueryVersionReq);
+ : rep.type = X_Reply;
+ : rep.sequenceNumber = client->sequence;
+ : rep.length = 0;
+ : rep.majorVersion = SECURITY_MAJOR_VERSION;
+ : rep.minorVersion = SECURITY_MINOR_VERSION;
+ : if(client->swapped)
+ : {
+ : register char n;
+ : swaps(&rep.sequenceNumber, n);
+ : swaps(&rep.majorVersion, n);
+ : swaps(&rep.minorVersion, n);
+ : }
+ : (void)WriteToClient(client, SIZEOF(xSecurityQueryVersionReply),
+ : (char *)&rep);
+ : return (client->noClientException);
+ :} /* ProcSecurityQueryVersion */
+ :
+ :
+ :static int
+ :SecurityEventSelectForAuthorization(
+ : SecurityAuthorizationPtr pAuth,
+ : ClientPtr client,
+ : Mask mask)
+ :{
+ : OtherClients *pEventClient;
+ :
+ : for (pEventClient = pAuth->eventClients;
+ : pEventClient;
+ : pEventClient = pEventClient->next)
+ : {
+ : if (SameClient(pEventClient, client))
+ : {
+ : if (mask == 0)
+ : FreeResource(pEventClient->resource, RT_NONE);
+ : else
+ : pEventClient->mask = mask;
+ : return Success;
+ : }
+ : }
+ :
+ : pEventClient = (OtherClients *) xalloc(sizeof(OtherClients));
+ : if (!pEventClient)
+ : return BadAlloc;
+ : pEventClient->mask = mask;
+ : pEventClient->resource = FakeClientID(client->index);
+ : pEventClient->next = pAuth->eventClients;
+ : if (!AddResource(pEventClient->resource, RTEventClient,
+ : (pointer)pAuth))
+ : {
+ : xfree(pEventClient);
+ : return BadAlloc;
+ : }
+ : pAuth->eventClients = pEventClient;
+ :
+ : return Success;
+ :} /* SecurityEventSelectForAuthorization */
+ :
+ :
+ :static int
+ :ProcSecurityGenerateAuthorization(
+ : ClientPtr client)
+ :{
+ : REQUEST(xSecurityGenerateAuthorizationReq);
+ : int len; /* request length in CARD32s*/
+ : Bool removeAuth = FALSE; /* if bailout, call RemoveAuthorization? */
+ : SecurityAuthorizationPtr pAuth = NULL; /* auth we are creating */
+ : int err; /* error to return from this function */
+ : XID authId; /* authorization ID assigned by os layer */
+ : xSecurityGenerateAuthorizationReply rep; /* reply struct */
+ : unsigned int trustLevel; /* trust level of new auth */
+ : XID group; /* group of new auth */
+ : CARD32 timeout; /* timeout of new auth */
+ : CARD32 *values; /* list of supplied attributes */
+ : char *protoname; /* auth proto name sent in request */
+ : char *protodata; /* auth proto data sent in request */
+ : unsigned int authdata_len; /* # bytes of generated auth data */
+ : char *pAuthdata; /* generated auth data */
+ : Mask eventMask; /* what events on this auth does client want */
+ :
+ : /* paranoia: this "can't happen" because this extension is hidden
+ : * from untrusted clients, but just in case...
+ : */
+ : if (TRUSTLEVEL(client) != XSecurityClientTrusted)
+ : return BadRequest;
+ :
+ : /* check request length */
+ :
+ : REQUEST_AT_LEAST_SIZE(xSecurityGenerateAuthorizationReq);
+ : len = SIZEOF(xSecurityGenerateAuthorizationReq) >> 2;
+ : len += (stuff->nbytesAuthProto + (unsigned)3) >> 2;
+ : len += (stuff->nbytesAuthData + (unsigned)3) >> 2;
+ : values = ((CARD32 *)stuff) + len;
+ : len += Ones(stuff->valueMask);
+ : if (client->req_len != len)
+ : return BadLength;
+ :
+ : /* check valuemask */
+ : if (stuff->valueMask & ~XSecurityAllAuthorizationAttributes)
+ : {
+ : client->errorValue = stuff->valueMask;
+ : return BadValue;
+ : }
+ :
+ : /* check timeout */
+ : timeout = 60;
+ : if (stuff->valueMask & XSecurityTimeout)
+ : {
+ : timeout = *values++;
+ : }
+ :
+ : /* check trustLevel */
+ : trustLevel = XSecurityClientUntrusted;
+ : if (stuff->valueMask & XSecurityTrustLevel)
+ : {
+ : trustLevel = *values++;
+ : if (trustLevel != XSecurityClientTrusted &&
+ : trustLevel != XSecurityClientUntrusted)
+ : {
+ : client->errorValue = trustLevel;
+ : return BadValue;
+ : }
+ : }
+ :
+ : /* check group */
+ : group = None;
+ : if (stuff->valueMask & XSecurityGroup)
+ : {
+ : group = *values++;
+ : if (SecurityValidateGroupCallback)
+ : {
+ : SecurityValidateGroupInfoRec vgi;
+ : vgi.group = group;
+ : vgi.valid = FALSE;
+ : CallCallbacks(&SecurityValidateGroupCallback, (pointer)&vgi);
+ :
+ : /* if nobody said they recognized it, it's an error */
+ :
+ : if (!vgi.valid)
+ : {
+ : client->errorValue = group;
+ : return BadValue;
+ : }
+ : }
+ : }
+ :
+ : /* check event mask */
+ : eventMask = 0;
+ : if (stuff->valueMask & XSecurityEventMask)
+ : {
+ : eventMask = *values++;
+ : if (eventMask & ~XSecurityAllEventMasks)
+ : {
+ : client->errorValue = eventMask;
+ : return BadValue;
+ : }
+ : }
+ :
+ : protoname = (char *)&stuff[1];
+ : protodata = protoname + ((stuff->nbytesAuthProto + (unsigned)3) >> 2);
+ :
+ : /* call os layer to generate the authorization */
+ :
+ : authId = GenerateAuthorization(stuff->nbytesAuthProto, protoname,
+ : stuff->nbytesAuthData, protodata,
+ : &authdata_len, &pAuthdata);
+ : if ((XID) ~0L == authId)
+ : {
+ : err = SecurityErrorBase + XSecurityBadAuthorizationProtocol;
+ : goto bailout;
+ : }
+ :
+ : /* now that we've added the auth, remember to remove it if we have to
+ : * abort the request for some reason (like allocation failure)
+ : */
+ : removeAuth = TRUE;
+ :
+ : /* associate additional information with this auth ID */
+ :
+ : pAuth = (SecurityAuthorizationPtr)xalloc(sizeof(SecurityAuthorizationRec));
+ : if (!pAuth)
+ : {
+ : err = BadAlloc;
+ : goto bailout;
+ : }
+ :
+ : /* fill in the auth fields */
+ :
+ : pAuth->id = authId;
+ : pAuth->timeout = timeout;
+ : pAuth->group = group;
+ : pAuth->trustLevel = trustLevel;
+ : pAuth->refcnt = 0; /* the auth was just created; nobody's using it yet */
+ : pAuth->secondsRemaining = 0;
+ : pAuth->timer = NULL;
+ : pAuth->eventClients = NULL;
+ :
+ : /* handle event selection */
+ : if (eventMask)
+ : {
+ : err = SecurityEventSelectForAuthorization(pAuth, client, eventMask);
+ : if (err != Success)
+ : goto bailout;
+ : }
+ :
+ : if (!AddResource(authId, SecurityAuthorizationResType, pAuth))
+ : {
+ : err = BadAlloc;
+ : goto bailout;
+ : }
+ :
+ : /* start the timer ticking */
+ :
+ : if (pAuth->timeout != 0)
+ : SecurityStartAuthorizationTimer(pAuth);
+ :
+ : /* tell client the auth id and data */
+ :
+ : rep.type = X_Reply;
+ : rep.length = (authdata_len + 3) >> 2;
+ : rep.sequenceNumber = client->sequence;
+ : rep.authId = authId;
+ : rep.dataLength = authdata_len;
+ :
+ : if (client->swapped)
+ : {
+ : register char n;
+ : swapl(&rep.length, n);
+ : swaps(&rep.sequenceNumber, n);
+ : swapl(&rep.authId, n);
+ : swaps(&rep.dataLength, n);
+ : }
+ :
+ : WriteToClient(client, SIZEOF(xSecurityGenerateAuthorizationReply),
+ : (char *)&rep);
+ : WriteToClient(client, authdata_len, pAuthdata);
+ :
+ : SecurityAudit("client %d generated authorization %d trust %d timeout %d group %d events %d\n",
+ : client->index, pAuth->id, pAuth->trustLevel, pAuth->timeout,
+ : pAuth->group, eventMask);
+ :
+ : /* the request succeeded; don't call RemoveAuthorization or free pAuth */
+ :
+ : removeAuth = FALSE;
+ : pAuth = NULL;
+ : err = client->noClientException;
+ :
+ :bailout:
+ : if (removeAuth)
+ : RemoveAuthorization(stuff->nbytesAuthProto, protoname,
+ : authdata_len, pAuthdata);
+ : if (pAuth) xfree(pAuth);
+ : return err;
+ :
+ :} /* ProcSecurityGenerateAuthorization */
+ :
+ :static int
+ :ProcSecurityRevokeAuthorization(
+ : ClientPtr client)
+ :{
+ : REQUEST(xSecurityRevokeAuthorizationReq);
+ : SecurityAuthorizationPtr pAuth;
+ :
+ : /* paranoia: this "can't happen" because this extension is hidden
+ : * from untrusted clients, but just in case...
+ : */
+ : if (TRUSTLEVEL(client) != XSecurityClientTrusted)
+ : return BadRequest;
+ :
+ : REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq);
+ :
+ : pAuth = (SecurityAuthorizationPtr)SecurityLookupIDByType(client,
+ : stuff->authId, SecurityAuthorizationResType, DixDestroyAccess);
+ : if (!pAuth)
+ : return SecurityErrorBase + XSecurityBadAuthorization;
+ :
+ : FreeResource(stuff->authId, RT_NONE);
+ : return Success;
+ :} /* ProcSecurityRevokeAuthorization */
+ :
+ :
+ :static int
+ :ProcSecurityDispatch(
+ : ClientPtr client)
+ :{
+ : REQUEST(xReq);
+ :
+ : switch (stuff->data)
+ : {
+ : case X_SecurityQueryVersion:
+ : return ProcSecurityQueryVersion(client);
+ : case X_SecurityGenerateAuthorization:
+ : return ProcSecurityGenerateAuthorization(client);
+ : case X_SecurityRevokeAuthorization:
+ : return ProcSecurityRevokeAuthorization(client);
+ : default:
+ : return BadRequest;
+ : }
+ :} /* ProcSecurityDispatch */
+ :
+ :static int
+ :SProcSecurityQueryVersion(
+ : ClientPtr client)
+ :{
+ : REQUEST(xSecurityQueryVersionReq);
+ : register char n;
+ :
+ : swaps(&stuff->length, n);
+ : REQUEST_SIZE_MATCH(xSecurityQueryVersionReq);
+ : swaps(&stuff->majorVersion, n);
+ : swaps(&stuff->minorVersion,n);
+ : return ProcSecurityQueryVersion(client);
+ :} /* SProcSecurityQueryVersion */
+ :
+ :
+ :static int
+ :SProcSecurityGenerateAuthorization(
+ : ClientPtr client)
+ :{
+ : REQUEST(xSecurityGenerateAuthorizationReq);
+ : register char n;
+ : CARD32 *values;
+ : unsigned long nvalues;
+ :
+ : swaps(&stuff->length, n);
+ : REQUEST_AT_LEAST_SIZE(xSecurityGenerateAuthorizationReq);
+ : swaps(&stuff->nbytesAuthProto, n);
+ : swaps(&stuff->nbytesAuthData, n);
+ : swapl(&stuff->valueMask, n);
+ : values = (CARD32 *)(&stuff[1]) +
+ : ((stuff->nbytesAuthProto + (unsigned)3) >> 2) +
+ : ((stuff->nbytesAuthData + (unsigned)3) >> 2);
+ : nvalues = (((CARD32 *)stuff) + stuff->length) - values;
+ : SwapLongs(values, nvalues);
+ : return ProcSecurityGenerateAuthorization(client);
+ :} /* SProcSecurityGenerateAuthorization */
+ :
+ :
+ :static int
+ :SProcSecurityRevokeAuthorization(
+ : ClientPtr client)
+ :{
+ : REQUEST(xSecurityRevokeAuthorizationReq);
+ : register char n;
+ :
+ : swaps(&stuff->length, n);
+ : REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq);
+ : swapl(&stuff->authId, n);
+ : return ProcSecurityRevokeAuthorization(client);
+ :} /* SProcSecurityRevokeAuthorization */
+ :
+ :
+ :static int
+ :SProcSecurityDispatch(
+ : ClientPtr client)
+ :{
+ : REQUEST(xReq);
+ :
+ : switch (stuff->data)
+ : {
+ : case X_SecurityQueryVersion:
+ : return SProcSecurityQueryVersion(client);
+ : case X_SecurityGenerateAuthorization:
+ : return SProcSecurityGenerateAuthorization(client);
+ : case X_SecurityRevokeAuthorization:
+ : return SProcSecurityRevokeAuthorization(client);
+ : default:
+ : return BadRequest;
+ : }
+ :} /* SProcSecurityDispatch */
+ :
+ :static void
+ :SwapSecurityAuthorizationRevokedEvent(
+ : xSecurityAuthorizationRevokedEvent *from,
+ : xSecurityAuthorizationRevokedEvent *to)
+ :{
+ : to->type = from->type;
+ : to->detail = from->detail;
+ : cpswaps(from->sequenceNumber, to->sequenceNumber);
+ : cpswapl(from->authId, to->authId);
+ :}
+ :
+ :/* SecurityDetermineEventPropogationLimits
+ : *
+ : * This is a helper function for SecurityCheckDeviceAccess.
+ : *
+ : * Arguments:
+ : * dev is the device for which the starting and stopping windows for
+ : * event propogation should be determined.
+ : * The values pointed to by ppWin and ppStopWin are not used.
+ : *
+ : * Returns:
+ : * ppWin is filled in with a pointer to the window at which event
+ : * propogation for the given device should start given the current
+ : * state of the server (pointer position, window layout, etc.)
+ : * ppStopWin is filled in with the window at which event propogation
+ : * should stop; events should not go to ppStopWin.
+ : *
+ : * Side Effects: none.
+ : */
+ :
+ :static void
+ :SecurityDetermineEventPropogationLimits(
+ : DeviceIntPtr dev,
+ : WindowPtr *ppWin,
+ : WindowPtr *ppStopWin)
+ :{
+ : WindowPtr pFocusWin = dev->focus ? dev->focus->win : NoneWin;
+ :
+ : if (pFocusWin == NoneWin)
+ : { /* no focus -- events don't go anywhere */
+ : *ppWin = *ppStopWin = NULL;
+ : return;
+ : }
+ :
+ : if (pFocusWin == PointerRootWin)
+ : { /* focus follows the pointer */
+ : *ppWin = GetSpriteWindow();
+ : *ppStopWin = NULL; /* propogate all the way to the root */
+ : }
+ : else
+ : { /* a real window is set for the focus */
+ : WindowPtr pSpriteWin = GetSpriteWindow();
+ : *ppStopWin = pFocusWin->parent; /* don't go past the focus window */
+ :
+ : /* if the pointer is in a subwindow of the focus window, start
+ : * at that subwindow, else start at the focus window itself
+ : */
+ : if (IsParent(pFocusWin, pSpriteWin))
+ : *ppWin = pSpriteWin;
+ : else *ppWin = pFocusWin;
+ : }
+ :} /* SecurityDetermineEventPropogationLimits */
+ :
+ :
+ :/* SecurityCheckDeviceAccess
+ : *
+ : * Arguments:
+ : * client is the client attempting to access a device.
+ : * dev is the device being accessed.
+ : * fromRequest is TRUE if the device access is a direct result of
+ : * the client executing some request and FALSE if it is a
+ : * result of the server trying to send an event (e.g. KeymapNotify)
+ : * to the client.
+ : * Returns:
+ : * TRUE if the device access should be allowed, else FALSE.
+ : *
+ : * Side Effects:
+ : * An audit message is generated if access is denied.
+ : */
+ :
+ :CALLBACK(SecurityCheckDeviceAccess)
+ :{
+ : XaceDeviceAccessRec *rec = (XaceDeviceAccessRec*)calldata;
+ : ClientPtr client = rec->client;
+ : DeviceIntPtr dev = rec->dev;
+ : Bool fromRequest = rec->fromRequest;
+ : WindowPtr pWin, pStopWin;
+ : Bool untrusted_got_event;
+ : Bool found_event_window;
+ : Mask eventmask;
+ : int reqtype = 0;
+ :
+ : /* trusted clients always allowed to do anything */
+ : if (TRUSTLEVEL(client) == XSecurityClientTrusted)
+ : return;
+ :
+ : /* device security other than keyboard is not implemented yet */
+ : if (dev != inputInfo.keyboard)
+ : return;
+ :
+ : /* some untrusted client wants access */
+ :
+ : if (fromRequest)
+ : {
+ : reqtype = ((xReq *)client->requestBuffer)->reqType;
+ : switch (reqtype)
+ : {
+ : /* never allow these */
+ : case X_ChangeKeyboardMapping:
+ : case X_ChangeKeyboardControl:
+ : case X_SetModifierMapping:
+ : SecurityAudit("client %d attempted request %d\n",
+ : client->index, reqtype);
+ : rec->rval = FALSE;
+ : return;
+ : default:
+ : break;
+ : }
+ : }
+ :
+ : untrusted_got_event = FALSE;
+ : found_event_window = FALSE;
+ :
+ : if (dev->grab)
+ : {
+ : untrusted_got_event =
+ : (TRUSTLEVEL(rClient(dev->grab)) != XSecurityClientTrusted);
+ : }
+ : else
+ : {
+ : SecurityDetermineEventPropogationLimits(dev, &pWin, &pStopWin);
+ :
+ : eventmask = KeyPressMask | KeyReleaseMask;
+ : while ( (pWin != pStopWin) && !found_event_window)
+ : {
+ : OtherClients *other;
+ :
+ : if (pWin->eventMask & eventmask)
+ : {
+ : found_event_window = TRUE;
+ : client = wClient(pWin);
+ : if (TRUSTLEVEL(client) != XSecurityClientTrusted)
+ : {
+ : untrusted_got_event = TRUE;
+ : }
+ : }
+ : if (wOtherEventMasks(pWin) & eventmask)
+ : {
+ : found_event_window = TRUE;
+ : for (other = wOtherClients(pWin); other; other = other->next)
+ : {
+ : if (other->mask & eventmask)
+ : {
+ : client = rClient(other);
+ : if (TRUSTLEVEL(client) != XSecurityClientTrusted)
+ : {
+ : untrusted_got_event = TRUE;
+ : break;
+ : }
+ : }
+ : }
+ : }
+ : if (wDontPropagateMask(pWin) & eventmask)
+ : break;
+ : pWin = pWin->parent;
+ : } /* while propogating the event */
+ : }
+ :
+ : /* allow access by untrusted clients only if an event would have gone
+ : * to an untrusted client
+ : */
+ :
+ : if (!untrusted_got_event)
+ : {
+ : char *devname = dev->name;
+ : if (!devname) devname = "unnamed";
+ : if (fromRequest)
+ : SecurityAudit("client %d attempted request %d device %d (%s)\n",
+ : client->index, reqtype, dev->id, devname);
+ : else
+ : SecurityAudit("client %d attempted to access device %d (%s)\n",
+ : client->index, dev->id, devname);
+ : rec->rval = FALSE;
+ : }
+ : return;
+ :} /* SecurityCheckDeviceAccess */
+ :
+ :
+ :
+ :/* SecurityAuditResourceIDAccess
+ : *
+ : * Arguments:
+ : * client is the client doing the resource access.
+ : * id is the resource id.
+ : *
+ : * Returns: NULL
+ : *
+ : * Side Effects:
+ : * An audit message is generated with details of the denied
+ : * resource access.
+ : */
+ :
+ :static pointer
+ :SecurityAuditResourceIDAccess(
+ : ClientPtr client,
+ : XID id)
+ :{
+ : int cid = CLIENT_ID(id);
+ : int reqtype = ((xReq *)client->requestBuffer)->reqType;
+ : switch (reqtype)
+ : {
+ : case X_ChangeProperty:
+ : case X_DeleteProperty:
+ : case X_GetProperty:
+ : {
+ : xChangePropertyReq *req =
+ : (xChangePropertyReq *)client->requestBuffer;
+ : int propertyatom = req->property;
+ : char *propertyname = NameForAtom(propertyatom);
+ :
+ : SecurityAudit("client %d attempted request %d with window 0x%x property %s of client %d\n",
+ : client->index, reqtype, id, propertyname, cid);
+ : break;
+ : }
+ : default:
+ : {
+ : SecurityAudit("client %d attempted request %d with resource 0x%x of client %d\n",
+ : client->index, reqtype, id, cid);
+ : break;
+ : }
+ : }
+ : return NULL;
+ :} /* SecurityAuditResourceIDAccess */
+ :
+ :
+ :/* SecurityCheckResourceIDAccess
+ : *
+ : * This function gets plugged into client->CheckAccess and is called from
+ : * SecurityLookupIDByType/Class to determine if the client can access the
+ : * resource.
+ : *
+ : * Arguments:
+ : * client is the client doing the resource access.
+ : * id is the resource id.
+ : * rtype is its type or class.
+ : * access_mode represents the intended use of the resource; see
+ : * resource.h.
+ : * res is a pointer to the resource structure for this resource.
+ : *
+ : * Returns:
+ : * If access is granted, the value of rval that was passed in, else FALSE.
+ : *
+ : * Side Effects:
+ : * Disallowed resource accesses are audited.
+ : */
+ :
+ :CALLBACK(SecurityCheckResourceIDAccess)
+ 8 0.0087 :{ /* SecurityCheckResourceIDAccess total: 36 0.0392 */
+ : XaceResourceAccessRec *rec = (XaceResourceAccessRec*)calldata;
+ : ClientPtr client = rec->client;
+ 1 0.0011 : XID id = rec->id;
+ 3 0.0033 : RESTYPE rtype = rec->rtype;
+ : Mask access_mode = rec->access_mode;
+ : pointer rval = rec->res;
+ : int cid, reqtype;
+ :
+ 22 0.0240 : if (TRUSTLEVEL(client) == XSecurityClientTrusted ||
+ : DixUnknownAccess == access_mode)
+ : return; /* for compatibility, we have to allow access */
+ :
+ : cid = CLIENT_ID(id);
+ : reqtype = ((xReq *)client->requestBuffer)->reqType;
+ : switch (reqtype)
+ : { /* these are always allowed */
+ : case X_QueryTree:
+ : case X_TranslateCoords:
+ : case X_GetGeometry:
+ : /* property access is controlled in SecurityCheckPropertyAccess */
+ : case X_GetProperty:
+ : case X_ChangeProperty:
+ : case X_DeleteProperty:
+ : case X_RotateProperties:
+ : case X_ListProperties:
+ : return;
+ : default:
+ : break;
+ : }
+ :
+ : if (cid != 0)
+ : { /* not a server-owned resource */
+ : /*
+ : * The following 'if' restricts clients to only access resources at
+ : * the same trustLevel. Since there are currently only two trust levels,
+ : * and trusted clients never call this function, this degenerates into
+ : * saying that untrusted clients can only access resources of other
+ : * untrusted clients. One way to add the notion of groups would be to
+ : * allow values other than Trusted (0) and Untrusted (1) for this field.
+ : * Clients at the same trust level would be able to use each other's
+ : * resources, but not those of clients at other trust levels. I haven't
+ : * tried it, but this probably mostly works already. The obvious
+ : * competing alternative for grouping clients for security purposes is to
+ : * use app groups. dpw
+ : */
+ : if (TRUSTLEVEL(client) == TRUSTLEVEL(clients[cid])
+ :#ifdef XAPPGROUP
+ : || (RT_COLORMAP == rtype &&
+ : XagDefaultColormap (client) == (Colormap) id)
+ :#endif
+ : )
+ : return;
+ : else
+ : goto deny;
+ : }
+ : else /* server-owned resource - probably a default colormap or root window */
+ : {
+ : if (RT_WINDOW == rtype || RC_DRAWABLE == rtype)
+ : {
+ : switch (reqtype)
+ : { /* the following operations are allowed on root windows */
+ : case X_CreatePixmap:
+ : case X_CreateGC:
+ : case X_CreateWindow:
+ : case X_CreateColormap:
+ : case X_ListProperties:
+ : case X_GrabPointer:
+ : case X_UngrabButton:
+ : case X_QueryBestSize:
+ : case X_GetWindowAttributes:
+ : break;
+ : case X_SendEvent:
+ : { /* see if it is an event specified by the ICCCM */
+ : xSendEventReq *req = (xSendEventReq *)
+ : (client->requestBuffer);
+ : if (req->propagate == xTrue
+ : ||
+ : (req->eventMask != ColormapChangeMask &&
+ : req->eventMask != StructureNotifyMask &&
+ : req->eventMask !=
+ : (SubstructureRedirectMask|SubstructureNotifyMask)
+ : )
+ : ||
+ : (req->event.u.u.type != UnmapNotify &&
+ : req->event.u.u.type != ConfigureRequest &&
+ : req->event.u.u.type != ClientMessage
+ : )
+ : )
+ : { /* not an ICCCM event */
+ : goto deny;
+ : }
+ : break;
+ : } /* case X_SendEvent on root */
+ :
+ : case X_ChangeWindowAttributes:
+ : { /* Allow selection of PropertyNotify and StructureNotify
+ : * events on the root.
+ : */
+ : xChangeWindowAttributesReq *req =
+ : (xChangeWindowAttributesReq *)(client->requestBuffer);
+ : if (req->valueMask == CWEventMask)
+ : {
+ : CARD32 value = *((CARD32 *)(req + 1));
+ : if ( (value &
+ : ~(PropertyChangeMask|StructureNotifyMask)) == 0)
+ : break;
+ : }
+ : goto deny;
+ : } /* case X_ChangeWindowAttributes on root */
+ :
+ : default:
+ : {
+ : /* others not allowed */
+ : goto deny;
+ : }
+ : }
+ : } /* end server-owned window or drawable */
+ : else if (SecurityAuthorizationResType == rtype)
+ : {
+ : SecurityAuthorizationPtr pAuth = (SecurityAuthorizationPtr)rval;
+ : if (pAuth->trustLevel != TRUSTLEVEL(client))
+ : goto deny;
+ : }
+ : else if (RT_COLORMAP != rtype)
+ : { /* don't allow anything else besides colormaps */
+ : goto deny;
+ : }
+ : }
+ : return;
+ : deny:
+ : SecurityAuditResourceIDAccess(client, id);
+ : rec->rval = FALSE; /* deny access */
+ 2 0.0022 :} /* SecurityCheckResourceIDAccess */
+ :
+ :
+ :/* SecurityClientStateCallback
+ : *
+ : * Arguments:
+ : * pcbl is &ClientStateCallback.
+ : * nullata is NULL.
+ : * calldata is a pointer to a NewClientInfoRec (include/dixstruct.h)
+ : * which contains information about client state changes.
+ : *
+ : * Returns: nothing.
+ : *
+ : * Side Effects:
+ : *
+ : * If a new client is connecting, its authorization ID is copied to
+ : * client->authID. If this is a generated authorization, its reference
+ : * count is bumped, its timer is cancelled if it was running, and its
+ : * trustlevel is copied to TRUSTLEVEL(client).
+ : *
+ : * If a client is disconnecting and the client was using a generated
+ : * authorization, the authorization's reference count is decremented, and
+ : * if it is now zero, the timer for this authorization is started.
+ : */
+ :
+ :CALLBACK(SecurityClientStateCallback)
+ :{
+ : NewClientInfoRec *pci = (NewClientInfoRec *)calldata;
+ : ClientPtr client = pci->client;
+ :
+ : switch (client->clientState)
+ : {
+ : case ClientStateInitial:
+ : TRUSTLEVEL(client) = XSecurityClientTrusted;
+ : AUTHID(client) = None;
+ : break;
+ :
+ : case ClientStateRunning:
+ : {
+ : XID authId = AuthorizationIDOfClient(client);
+ : SecurityAuthorizationPtr pAuth;
+ :
+ : TRUSTLEVEL(client) = XSecurityClientTrusted;
+ : AUTHID(client) = authId;
+ : pAuth = (SecurityAuthorizationPtr)LookupIDByType(authId,
+ : SecurityAuthorizationResType);
+ : if (pAuth)
+ : { /* it is a generated authorization */
+ : pAuth->refcnt++;
+ : if (pAuth->refcnt == 1)
+ : {
+ : if (pAuth->timer) TimerCancel(pAuth->timer);
+ : }
+ : TRUSTLEVEL(client) = pAuth->trustLevel;
+ : }
+ : break;
+ : }
+ : case ClientStateGone:
+ : case ClientStateRetained: /* client disconnected */
+ : {
+ : SecurityAuthorizationPtr pAuth;
+ :
+ : /* client may not have any state (bad authorization) */
+ : if (!STATEPTR(client))
+ : break;
+ :
+ : pAuth = (SecurityAuthorizationPtr)LookupIDByType(AUTHID(client),
+ : SecurityAuthorizationResType);
+ : if (pAuth)
+ : { /* it is a generated authorization */
+ : pAuth->refcnt--;
+ : if (pAuth->refcnt == 0)
+ : {
+ : SecurityStartAuthorizationTimer(pAuth);
+ : }
+ : }
+ : break;
+ : }
+ : default: break;
+ : }
+ :} /* SecurityClientStateCallback */
+ :
+ :CALLBACK(SecurityCheckDrawableAccess)
+ :{
+ : XaceDrawableAccessRec *rec = (XaceDrawableAccessRec*)calldata;
+ :
+ : if (TRUSTLEVEL(rec->client) != XSecurityClientTrusted)
+ : rec->rval = FALSE;
+ :}
+ :
+ :CALLBACK(SecurityCheckMapAccess)
+ :{
+ : XaceMapAccessRec *rec = (XaceMapAccessRec*)calldata;
+ : WindowPtr pWin = rec->pWin;
+ :
+ : if (STATEPTR(rec->client) &&
+ : (TRUSTLEVEL(rec->client) != XSecurityClientTrusted) &&
+ : (pWin->drawable.class == InputOnly) &&
+ : pWin->parent && pWin->parent->parent &&
+ : (TRUSTLEVEL(wClient(pWin->parent)) == XSecurityClientTrusted))
+ :
+ : rec->rval = FALSE;
+ :}
+ :
+ :CALLBACK(SecurityCheckBackgrndAccess)
+ :{
+ : XaceMapAccessRec *rec = (XaceMapAccessRec*)calldata;
+ :
+ : if (TRUSTLEVEL(rec->client) != XSecurityClientTrusted)
+ : rec->rval = FALSE;
+ :}
+ :
+ :CALLBACK(SecurityCheckExtAccess)
+ 3 0.0033 :{ /* SecurityCheckExtAccess total: 14 0.0153 */
+ : XaceExtAccessRec *rec = (XaceExtAccessRec*)calldata;
+ :
+ 10 0.0109 : if ((TRUSTLEVEL(rec->client) != XSecurityClientTrusted) &&
+ : !STATEVAL(rec->ext))
+ :
+ : rec->rval = FALSE;
+ 1 0.0011 :}
+ :
+ :CALLBACK(SecurityCheckHostlistAccess)
+ :{
+ : XaceHostlistAccessRec *rec = (XaceHostlistAccessRec*)calldata;
+ :
+ : if (TRUSTLEVEL(rec->client) != XSecurityClientTrusted)
+ : {
+ : rec->rval = FALSE;
+ : if (rec->access_mode == DixWriteAccess)
+ : SecurityAudit("client %d attempted to change host access\n",
+ : rec->client->index);
+ : else
+ : SecurityAudit("client %d attempted to list hosts\n",
+ : rec->client->index);
+ : }
+ :}
+ :
+ :CALLBACK(SecurityDeclareExtSecure)
+ :{
+ : XaceDeclareExtSecureRec *rec = (XaceDeclareExtSecureRec*)calldata;
+ :
+ : /* security state for extensions is simply a boolean trust value */
+ : STATEVAL(rec->ext) = rec->secure;
+ :}
+ :
+ :/**********************************************************************/
+ :
+ :typedef struct _PropertyAccessRec {
+ : ATOM name;
+ : ATOM mustHaveProperty;
+ : char *mustHaveValue;
+ : char windowRestriction;
+ :#define SecurityAnyWindow 0
+ :#define SecurityRootWindow 1
+ :#define SecurityWindowWithProperty 2
+ : char readAction;
+ : char writeAction;
+ : char destroyAction;
+ : struct _PropertyAccessRec *next;
+ :} PropertyAccessRec, *PropertyAccessPtr;
+ :
+ :static PropertyAccessPtr PropertyAccessList = NULL;
+ :static char SecurityDefaultAction = XaceErrorOperation;
+ :static char *SecurityPolicyFile = DEFAULTPOLICYFILE;
+ :static ATOM SecurityMaxPropertyName = 0;
+ :
+ :static char *SecurityKeywords[] = {
+ :#define SecurityKeywordComment 0
+ : "#",
+ :#define SecurityKeywordProperty 1
+ : "property",
+ :#define SecurityKeywordSitePolicy 2
+ : "sitepolicy",
+ :#define SecurityKeywordRoot 3
+ : "root",
+ :#define SecurityKeywordAny 4
+ : "any"
+ :};
+ :
+ :#define NUMKEYWORDS (sizeof(SecurityKeywords) / sizeof(char *))
+ :
+ :#undef PROPDEBUG
+ :/*#define PROPDEBUG 1*/
+ :
+ :static void
+ :SecurityFreePropertyAccessList(void)
+ :{
+ : while (PropertyAccessList)
+ : {
+ : PropertyAccessPtr freeit = PropertyAccessList;
+ : PropertyAccessList = PropertyAccessList->next;
+ : xfree(freeit);
+ : }
+ :} /* SecurityFreePropertyAccessList */
+ :
+ :#define SecurityIsWhitespace(c) ( (c == ' ') || (c == '\t') || (c == '\n') )
+ :
+ :static char *
+ :SecuritySkipWhitespace(
+ : char *p)
+ :{
+ : while (SecurityIsWhitespace(*p))
+ : p++;
+ : return p;
+ :} /* SecuritySkipWhitespace */
+ :
+ :
+ :static char *
+ :SecurityParseString(
+ : char **rest)
+ :{
+ : char *startOfString;
+ : char *s = *rest;
+ : char endChar = 0;
+ :
+ : s = SecuritySkipWhitespace(s);
+ :
+ : if (*s == '"' || *s == '\'')
+ : {
+ : endChar = *s++;
+ : startOfString = s;
+ : while (*s && (*s != endChar))
+ : s++;
+ : }
+ : else
+ : {
+ : startOfString = s;
+ : while (*s && !SecurityIsWhitespace(*s))
+ : s++;
+ : }
+ : if (*s)
+ : {
+ : *s = '\0';
+ : *rest = s + 1;
+ : return startOfString;
+ : }
+ : else
+ : {
+ : *rest = s;
+ : return (endChar) ? NULL : startOfString;
+ : }
+ :} /* SecurityParseString */
+ :
+ :
+ :static int
+ :SecurityParseKeyword(
+ : char **p)
+ :{
+ : int i;
+ : char *s = *p;
+ : s = SecuritySkipWhitespace(s);
+ : for (i = 0; i < NUMKEYWORDS; i++)
+ : {
+ : int len = strlen(SecurityKeywords[i]);
+ : if (strncmp(s, SecurityKeywords[i], len) == 0)
+ : {
+ : *p = s + len;
+ : return (i);
+ : }
+ : }
+ : *p = s;
+ : return -1;
+ :} /* SecurityParseKeyword */
+ :
+ :
+ :static Bool
+ :SecurityParsePropertyAccessRule(
+ : char *p)
+ :{
+ : char *propname;
+ : char c;
+ : char action = SecurityDefaultAction;
+ : char readAction, writeAction, destroyAction;
+ : PropertyAccessPtr pacl, prev, cur;
+ : char *mustHaveProperty = NULL;
+ : char *mustHaveValue = NULL;
+ : Bool invalid;
+ : char windowRestriction;
+ : int size;
+ : int keyword;
+ :
+ : /* get property name */
+ : propname = SecurityParseString(&p);
+ : if (!propname || (strlen(propname) == 0))
+ : return FALSE;
+ :
+ : /* get window on which property must reside for rule to apply */
+ :
+ : keyword = SecurityParseKeyword(&p);
+ : if (keyword == SecurityKeywordRoot)
+ : windowRestriction = SecurityRootWindow;
+ : else if (keyword == SecurityKeywordAny)
+ : windowRestriction = SecurityAnyWindow;
+ : else /* not root or any, must be a property name */
+ : {
+ : mustHaveProperty = SecurityParseString(&p);
+ : if (!mustHaveProperty || (strlen(mustHaveProperty) == 0))
+ : return FALSE;
+ : windowRestriction = SecurityWindowWithProperty;
+ : p = SecuritySkipWhitespace(p);
+ : if (*p == '=')
+ : { /* property value is specified too */
+ : p++; /* skip over '=' */
+ : mustHaveValue = SecurityParseString(&p);
+ : if (!mustHaveValue)
+ : return FALSE;
+ : }
+ : }
+ :
+ : /* get operations and actions */
+ :
+ : invalid = FALSE;
+ : readAction = writeAction = destroyAction = SecurityDefaultAction;
+ : while ( (c = *p++) && !invalid)
+ : {
+ : switch (c)
+ : {
+ : case 'i': action = XaceIgnoreOperation; break;
+ : case 'a': action = XaceAllowOperation; break;
+ : case 'e': action = XaceErrorOperation; break;
+ :
+ : case 'r': readAction = action; break;
+ : case 'w': writeAction = action; break;
+ : case 'd': destroyAction = action; break;
+ :
+ : default :
+ : if (!SecurityIsWhitespace(c))
+ : invalid = TRUE;
+ : break;
+ : }
+ : }
+ : if (invalid)
+ : return FALSE;
+ :
+ : /* We've successfully collected all the information needed for this
+ : * property access rule. Now record it in a PropertyAccessRec.
+ : */
+ : size = sizeof(PropertyAccessRec);
+ :
+ : /* If there is a property value string, allocate space for it
+ : * right after the PropertyAccessRec.
+ : */
+ : if (mustHaveValue)
+ : size += strlen(mustHaveValue) + 1;
+ : pacl = (PropertyAccessPtr)Xalloc(size);
+ : if (!pacl)
+ : return FALSE;
+ :
+ : pacl->name = MakeAtom(propname, strlen(propname), TRUE);
+ : if (pacl->name == BAD_RESOURCE)
+ : {
+ : Xfree(pacl);
+ : return FALSE;
+ : }
+ : if (mustHaveProperty)
+ : {
+ : pacl->mustHaveProperty = MakeAtom(mustHaveProperty,
+ : strlen(mustHaveProperty), TRUE);
+ : if (pacl->mustHaveProperty == BAD_RESOURCE)
+ : {
+ : Xfree(pacl);
+ : return FALSE;
+ : }
+ : }
+ : else
+ : pacl->mustHaveProperty = 0;
+ :
+ : if (mustHaveValue)
+ : {
+ : pacl->mustHaveValue = (char *)(pacl + 1);
+ : strcpy(pacl->mustHaveValue, mustHaveValue);
+ : }
+ : else
+ : pacl->mustHaveValue = NULL;
+ :
+ : SecurityMaxPropertyName = max(SecurityMaxPropertyName, pacl->name);
+ :
+ : pacl->windowRestriction = windowRestriction;
+ : pacl->readAction = readAction;
+ : pacl->writeAction = writeAction;
+ : pacl->destroyAction = destroyAction;
+ :
+ : /* link the new rule into the list of rules in order of increasing
+ : * property name (atom) value to make searching easier
+ : */
+ :
+ : for (prev = NULL, cur = PropertyAccessList;
+ : cur && cur->name <= pacl->name;
+ : prev = cur, cur = cur->next)
+ : ;
+ : if (!prev)
+ : {
+ : pacl->next = cur;
+ : PropertyAccessList = pacl;
+ : }
+ : else
+ : {
+ : prev->next = pacl;
+ : pacl->next = cur;
+ : }
+ : return TRUE;
+ :} /* SecurityParsePropertyAccessRule */
+ :
+ :static char **SecurityPolicyStrings = NULL;
+ :static int nSecurityPolicyStrings = 0;
+ :
+ :static Bool
+ :SecurityParseSitePolicy(
+ : char *p)
+ :{
+ : char *policyStr = SecurityParseString(&p);
+ : char *copyPolicyStr;
+ : char **newStrings;
+ :
+ : if (!policyStr)
+ : return FALSE;
+ :
+ : copyPolicyStr = (char *)Xalloc(strlen(policyStr) + 1);
+ : if (!copyPolicyStr)
+ : return TRUE;
+ : strcpy(copyPolicyStr, policyStr);
+ : newStrings = (char **)Xrealloc(SecurityPolicyStrings,
+ : sizeof (char *) * (nSecurityPolicyStrings + 1));
+ : if (!newStrings)
+ : {
+ : Xfree(copyPolicyStr);
+ : return TRUE;
+ : }
+ :
+ : SecurityPolicyStrings = newStrings;
+ : SecurityPolicyStrings[nSecurityPolicyStrings++] = copyPolicyStr;
+ :
+ : return TRUE;
+ :
+ :} /* SecurityParseSitePolicy */
+ :
+ :
+ :char **
+ :SecurityGetSitePolicyStrings(n)
+ : int *n;
+ :{
+ : *n = nSecurityPolicyStrings;
+ : return SecurityPolicyStrings;
+ :} /* SecurityGetSitePolicyStrings */
+ :
+ :static void
+ :SecurityFreeSitePolicyStrings(void)
+ :{
+ : if (SecurityPolicyStrings)
+ : {
+ : assert(nSecurityPolicyStrings);
+ : while (nSecurityPolicyStrings--)
+ : {
+ : Xfree(SecurityPolicyStrings[nSecurityPolicyStrings]);
+ : }
+ : Xfree(SecurityPolicyStrings);
+ : SecurityPolicyStrings = NULL;
+ : nSecurityPolicyStrings = 0;
+ : }
+ :} /* SecurityFreeSitePolicyStrings */
+ :
+ :
+ :static void
+ :SecurityLoadPropertyAccessList(void)
+ :{
+ : FILE *f;
+ : int lineNumber = 0;
+ :
+ : SecurityMaxPropertyName = 0;
+ :
+ : if (!SecurityPolicyFile)
+ : return;
+ :
+ : f = fopen(SecurityPolicyFile, "r");
+ : if (!f)
+ : {
+ : ErrorF("error opening security policy file %s\n",
+ : SecurityPolicyFile);
+ : return;
+ : }
+ :
+ : while (!feof(f))
+ : {
+ : char buf[200];
+ : Bool validLine;
+ : char *p;
+ :
+ : if (!(p = fgets(buf, sizeof(buf), f)))
+ : break;
+ : lineNumber++;
+ :
+ : /* if first line, check version number */
+ : if (lineNumber == 1)
+ : {
+ : char *v = SecurityParseString(&p);
+ : if (strcmp(v, SECURITY_POLICY_FILE_VERSION) != 0)
+ : {
+ : ErrorF("%s: invalid security policy file version, ignoring file\n",
+ : SecurityPolicyFile);
+ : break;
+ : }
+ : validLine = TRUE;
+ : }
+ : else
+ : {
+ : switch (SecurityParseKeyword(&p))
+ : {
+ : case SecurityKeywordComment:
+ : validLine = TRUE;
+ : break;
+ :
+ : case SecurityKeywordProperty:
+ : validLine = SecurityParsePropertyAccessRule(p);
+ : break;
+ :
+ : case SecurityKeywordSitePolicy:
+ : validLine = SecurityParseSitePolicy(p);
+ : break;
+ :
+ : default:
+ : validLine = (*p == '\0'); /* blank lines OK, others not */
+ : break;
+ : }
+ : }
+ :
+ : if (!validLine)
+ : ErrorF("Line %d of %s invalid, ignoring\n",
+ : lineNumber, SecurityPolicyFile);
+ : } /* end while more input */
+ :
+ :#ifdef PROPDEBUG
+ : {
+ : PropertyAccessPtr pacl;
+ : char *op = "aie";
+ : for (pacl = PropertyAccessList; pacl; pacl = pacl->next)
+ : {
+ : ErrorF("property %s ", NameForAtom(pacl->name));
+ : switch (pacl->windowRestriction)
+ : {
+ : case SecurityAnyWindow: ErrorF("any "); break;
+ : case SecurityRootWindow: ErrorF("root "); break;
+ : case SecurityWindowWithProperty:
+ : {
+ : ErrorF("%s ", NameForAtom(pacl->mustHaveProperty));
+ : if (pacl->mustHaveValue)
+ : ErrorF(" = \"%s\" ", pacl->mustHaveValue);
+ :
+ : }
+ : break;
+ : }
+ : ErrorF("%cr %cw %cd\n", op[pacl->readAction],
+ : op[pacl->writeAction], op[pacl->destroyAction]);
+ : }
+ : }
+ :#endif /* PROPDEBUG */
+ :
+ : fclose(f);
+ :} /* SecurityLoadPropertyAccessList */
+ :
+ :
+ :static Bool
+ :SecurityMatchString(
+ : char *ws,
+ : char *cs)
+ :{
+ : while (*ws && *cs)
+ : {
+ : if (*ws == '*')
+ : {
+ : Bool match = FALSE;
+ : ws++;
+ : while (!(match = SecurityMatchString(ws, cs)) && *cs)
+ : {
+ : cs++;
+ : }
+ : return match;
+ : }
+ : else if (*ws == *cs)
+ : {
+ : ws++;
+ : cs++;
+ : }
+ : else break;
+ : }
+ : return ( ( (*ws == '\0') || ((*ws == '*') && *(ws+1) == '\0') )
+ : && (*cs == '\0') );
+ :} /* SecurityMatchString */
+ :
+ :#ifdef PROPDEBUG
+ :#include <sys/types.h>
+ :#include <sys/stat.h>
+ :#endif
+ :
+ :
+ :CALLBACK(SecurityCheckPropertyAccess)
+ :{
+ : XacePropertyAccessRec *rec = (XacePropertyAccessRec*)calldata;
+ : ClientPtr client = rec->client;
+ : WindowPtr pWin = rec->pWin;
+ : ATOM propertyName = rec->propertyName;
+ : Mask access_mode = rec->access_mode;
+ : PropertyAccessPtr pacl;
+ : char action = SecurityDefaultAction;
+ :
+ : /* if client trusted or window untrusted, allow operation */
+ :
+ : if ( (TRUSTLEVEL(client) == XSecurityClientTrusted) ||
+ : (TRUSTLEVEL(wClient(pWin)) != XSecurityClientTrusted) )
+ : return;
+ :
+ :#ifdef PROPDEBUG
+ : /* For testing, it's more convenient if the property rules file gets
+ : * reloaded whenever it changes, so we can rapidly try things without
+ : * having to reset the server.
+ : */
+ : {
+ : struct stat buf;
+ : static time_t lastmod = 0;
+ : int ret = stat(SecurityPolicyFile , &buf);
+ : if ( (ret == 0) && (buf.st_mtime > lastmod) )
+ : {
+ : ErrorF("reloading property rules\n");
+ : SecurityFreePropertyAccessList();
+ : SecurityLoadPropertyAccessList();
+ : lastmod = buf.st_mtime;
+ : }
+ : }
+ :#endif
+ :
+ : /* If the property atom is bigger than any atoms on the list,
+ : * we know we won't find it, so don't even bother looking.
+ : */
+ : if (propertyName <= SecurityMaxPropertyName)
+ : {
+ : /* untrusted client operating on trusted window; see if it's allowed */
+ :
+ : for (pacl = PropertyAccessList; pacl; pacl = pacl->next)
+ : {
+ : if (pacl->name < propertyName)
+ : continue;
+ : if (pacl->name > propertyName)
+ : break;
+ :
+ : /* pacl->name == propertyName, so see if it applies to this window */
+ :
+ : switch (pacl->windowRestriction)
+ : {
+ : case SecurityAnyWindow: /* always applies */
+ : break;
+ :
+ : case SecurityRootWindow:
+ : {
+ : /* if not a root window, this rule doesn't apply */
+ : if (pWin->parent)
+ : continue;
+ : }
+ : break;
+ :
+ : case SecurityWindowWithProperty:
+ : {
+ : PropertyPtr pProp = wUserProps (pWin);
+ : Bool match = FALSE;
+ : char *p;
+ : char *pEndData;
+ :
+ : while (pProp)
+ : {
+ : if (pProp->propertyName == pacl->mustHaveProperty)
+ : break;
+ : pProp = pProp->next;
+ : }
+ : if (!pProp)
+ : continue;
+ : if (!pacl->mustHaveValue)
+ : break;
+ : if (pProp->type != XA_STRING || pProp->format != 8)
+ : continue;
+ :
+ : p = pProp->data;
+ : pEndData = ((char *)pProp->data) + pProp->size;
+ : while (!match && p < pEndData)
+ : {
+ : if (SecurityMatchString(pacl->mustHaveValue, p))
+ : match = TRUE;
+ : else
+ : { /* skip to the next string */
+ : while (*p++ && p < pEndData)
+ : ;
+ : }
+ : }
+ : if (!match)
+ : continue;
+ : }
+ : break; /* end case SecurityWindowWithProperty */
+ : } /* end switch on windowRestriction */
+ :
+ : /* If we get here, the property access rule pacl applies.
+ : * If pacl doesn't apply, something above should have
+ : * executed a continue, which will skip the follwing code.
+ : */
+ : action = XaceAllowOperation;
+ : if (access_mode & DixReadAccess)
+ : action = max(action, pacl->readAction);
+ : if (access_mode & DixWriteAccess)
+ : action = max(action, pacl->writeAction);
+ : if (access_mode & DixDestroyAccess)
+ : action = max(action, pacl->destroyAction);
+ : break;
+ : } /* end for each pacl */
+ : } /* end if propertyName <= SecurityMaxPropertyName */
+ :
+ : if (XaceAllowOperation != action)
+ : { /* audit the access violation */
+ : int cid = CLIENT_ID(pWin->drawable.id);
+ : int reqtype = ((xReq *)client->requestBuffer)->reqType;
+ : char *actionstr = (XaceIgnoreOperation == action) ?
+ : "ignored" : "error";
+ : SecurityAudit("client %d attempted request %d with window 0x%x property %s (atom 0x%x) of client %d, %s\n",
+ : client->index, reqtype, pWin->drawable.id,
+ : NameForAtom(propertyName), propertyName, cid, actionstr);
+ : }
+ : /* return codes increase with strictness */
+ : if (action > rec->rval)
+ : rec->rval = action;
+ :} /* SecurityCheckPropertyAccess */
+ :
+ :
+ :/* SecurityResetProc
+ : *
+ : * Arguments:
+ : * extEntry is the extension information for the security extension.
+ : *
+ : * Returns: nothing.
+ : *
+ : * Side Effects:
+ : * Performs any cleanup needed by Security at server shutdown time.
+ : */
+ :
+ :static void
+ :SecurityResetProc(
+ : ExtensionEntry *extEntry)
+ :{
+ : SecurityFreePropertyAccessList();
+ : SecurityFreeSitePolicyStrings();
+ :} /* SecurityResetProc */
+ :
+ :
+ :int
+ :XSecurityOptions(argc, argv, i)
+ : int argc;
+ : char **argv;
+ : int i;
+ :{
+ : if (strcmp(argv[i], "-sp") == 0)
+ : {
+ : if (i < argc)
+ : SecurityPolicyFile = argv[++i];
+ : return (i + 1);
+ : }
+ : return (i);
+ :} /* XSecurityOptions */
+ :
+ :
+ :/* SecurityExtensionSetup
+ : *
+ : * Arguments: none.
+ : *
+ : * Returns: nothing.
+ : *
+ : * Side Effects:
+ : * Sets up the Security extension if possible.
+ : * This function contains things that need to be done
+ : * before any other extension init functions get called.
+ : */
+ :
+ :void
+ :SecurityExtensionSetup(INITARGS)
+ :{
+ : /* Allocate the client private index */
+ : securityClientPrivateIndex = AllocateClientPrivateIndex();
+ : if (!AllocateClientPrivate(securityClientPrivateIndex,
+ : sizeof (SecurityClientStateRec)))
+ : FatalError("SecurityExtensionSetup: Can't allocate client private.\n");
+ :
+ : /* Allocate the extension private index */
+ : securityExtnsnPrivateIndex = AllocateExtensionPrivateIndex();
+ : if (!AllocateExtensionPrivate(securityExtnsnPrivateIndex, 0))
+ : FatalError("SecurityExtensionSetup: Can't allocate extnsn private.\n");
+ :
+ : /* register callbacks */
+ :#define XaceRC XaceRegisterCallback
+ : XaceRC(XACE_RESOURCE_ACCESS, SecurityCheckResourceIDAccess, NULL);
+ : XaceRC(XACE_DEVICE_ACCESS, SecurityCheckDeviceAccess, NULL);
+ : XaceRC(XACE_PROPERTY_ACCESS, SecurityCheckPropertyAccess, NULL);
+ : XaceRC(XACE_DRAWABLE_ACCESS, SecurityCheckDrawableAccess, NULL);
+ : XaceRC(XACE_MAP_ACCESS, SecurityCheckMapAccess, NULL);
+ : XaceRC(XACE_BACKGRND_ACCESS, SecurityCheckBackgrndAccess, NULL);
+ : XaceRC(XACE_EXT_DISPATCH, SecurityCheckExtAccess, NULL);
+ : XaceRC(XACE_EXT_ACCESS, SecurityCheckExtAccess, NULL);
+ : XaceRC(XACE_HOSTLIST_ACCESS, SecurityCheckHostlistAccess, NULL);
+ : XaceRC(XACE_DECLARE_EXT_SECURE, SecurityDeclareExtSecure, NULL);
+ :} /* SecurityExtensionSetup */
+ :
+ :
+ :/* SecurityExtensionInit
+ : *
+ : * Arguments: none.
+ : *
+ : * Returns: nothing.
+ : *
+ : * Side Effects:
+ : * Enables the Security extension if possible.
+ : */
+ :
+ :void
+ :SecurityExtensionInit(INITARGS)
+ :{
+ : ExtensionEntry *extEntry;
+ :
+ : SecurityAuthorizationResType =
+ : CreateNewResourceType(SecurityDeleteAuthorization);
+ :
+ : RTEventClient = CreateNewResourceType(
+ : SecurityDeleteAuthorizationEventClient);
+ :
+ : if (!SecurityAuthorizationResType || !RTEventClient)
+ : return;
+ :
+ : RTEventClient |= RC_NEVERRETAIN;
+ :
+ : if (!AddCallback(&ClientStateCallback, SecurityClientStateCallback, NULL))
+ : return;
+ :
+ : extEntry = AddExtension(SECURITY_EXTENSION_NAME,
+ : XSecurityNumberEvents, XSecurityNumberErrors,
+ : ProcSecurityDispatch, SProcSecurityDispatch,
+ : SecurityResetProc, StandardMinorOpcode);
+ :
+ : SecurityErrorBase = extEntry->errorBase;
+ : SecurityEventBase = extEntry->eventBase;
+ :
+ : EventSwapVector[SecurityEventBase + XSecurityAuthorizationRevoked] =
+ : (EventSwapPtr)SwapSecurityAuthorizationRevokedEvent;
+ :
+ : SecurityLoadPropertyAccessList();
+ :
+ :} /* SecurityExtensionInit */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/hw/xfree86/dri/dri.c"
+ *
+ * 41 0.0447
+ */
+
+
+ :/**************************************************************************
+ :
+ :Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+ :Copyright 2000 VA Linux Systems, Inc.
+ :All Rights Reserved.
+ :
+ :Permission is hereby granted, free of charge, to any person obtaining a
+ :copy of this software and associated documentation files (the
+ :"Software"), to deal in the Software without restriction, including
+ :without limitation the rights to use, copy, modify, merge, publish,
+ :distribute, sub license, and/or sell copies of the Software, and to
+ :permit persons to whom the Software is furnished to do so, subject to
+ :the following conditions:
+ :
+ :The above copyright notice and this permission notice (including the
+ :next paragraph) shall be included in all copies or substantial portions
+ :of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ :OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ :MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ :IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ :ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ :TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ :SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :**************************************************************************/
+ :
+ :/*
+ : * Authors:
+ : * Jens Owen <jens@tungstengraphics.com>
+ : * Rickard E. (Rik) Faith <faith@valinux.com>
+ : *
+ : */
+ :
+ :#ifdef HAVE_XORG_CONFIG_H
+ :#include <xorg-config.h>
+ :#endif
+ :
+ :#include "xf86.h"
+ :#include <sys/time.h>
+ :#include <unistd.h>
+ :#include <string.h>
+ :#include <stdio.h>
+ :#include <sys/ioctl.h>
+ :#include <errno.h>
+ :
+ :#define NEED_REPLIES
+ :#define NEED_EVENTS
+ :#include <X11/X.h>
+ :#include <X11/Xproto.h>
+ :#include "xf86drm.h"
+ :#include "misc.h"
+ :#include "dixstruct.h"
+ :#include "extnsionst.h"
+ :#include "colormapst.h"
+ :#include "cursorstr.h"
+ :#include "scrnintstr.h"
+ :#include "windowstr.h"
+ :#include "servermd.h"
+ :#define _XF86DRI_SERVER_
+ :#include "xf86dristr.h"
+ :#include "swaprep.h"
+ :#include "xf86str.h"
+ :#include "dri.h"
+ :#include "sarea.h"
+ :#include "dristruct.h"
+ :#include "xf86.h"
+ :#include "xf86drm.h"
+ :#include "glxserver.h"
+ :#include "mi.h"
+ :#include "mipointer.h"
+ :#include "xf86_OSproc.h"
+ :
+ :#define PCI_BUS_NO_DOMAIN(bus) ((bus) & 0xffu)
+ :
+ :#if !defined(PANORAMIX)
+ :extern Bool noPanoramiXExtension;
+ :#endif
+ :
+ :static int DRIEntPrivIndex = -1;
+ :static int DRIScreenPrivIndex = -1;
+ :static int DRIWindowPrivIndex = -1;
+ :static unsigned long DRIGeneration = 0;
+ :static unsigned int DRIDrawableValidationStamp = 0;
+ :
+ :static RESTYPE DRIDrawablePrivResType;
+ :static RESTYPE DRIContextPrivResType;
+ :static void DRIDestroyDummyContext(ScreenPtr pScreen, Bool hasCtxPriv);
+ :
+ :drmServerInfo DRIDRMServerInfo;
+ :
+ : /* Wrapper just like xf86DrvMsg, but
+ : without the verbosity level checking.
+ : This will make it easy to turn off some
+ : messages later, based on verbosity
+ : level. */
+ :
+ :/*
+ : * Since we're already referencing things from the XFree86 common layer in
+ : * this file, we'd might as well just call xf86VDrvMsgVerb, and have
+ : * consistent message formatting. The verbosity of these messages can be
+ : * easily changed here.
+ : */
+ :#define DRI_MSG_VERBOSITY 1
+ :static void
+ :DRIDrvMsg(int scrnIndex, MessageType type, const char *format, ...)
+ :{
+ : va_list ap;
+ :
+ : va_start(ap, format);
+ : xf86VDrvMsgVerb(scrnIndex, type, DRI_MSG_VERBOSITY, format, ap);
+ : va_end(ap);
+ :}
+ :
+ :
+ :static void
+ :DRIOpenDRMCleanup(DRIEntPrivPtr pDRIEntPriv)
+ :{
+ : if (pDRIEntPriv->pLSAREA != NULL) {
+ : drmUnmap(pDRIEntPriv->pLSAREA, pDRIEntPriv->sAreaSize);
+ : pDRIEntPriv->pLSAREA = NULL;
+ : }
+ : if (pDRIEntPriv->hLSAREA != 0) {
+ : drmRmMap(pDRIEntPriv->drmFD, pDRIEntPriv->hLSAREA);
+ : }
+ : if (pDRIEntPriv->drmFD >= 0) {
+ : drmClose(pDRIEntPriv->drmFD);
+ : pDRIEntPriv->drmFD = 0;
+ : }
+ :}
+ :
+ :int
+ :DRIMasterFD(ScrnInfoPtr pScrn)
+ :{
+ : return DRI_ENT_PRIV(pScrn)->drmFD;
+ :}
+ :
+ :void *
+ :DRIMasterSareaPointer(ScrnInfoPtr pScrn)
+ :{
+ : return DRI_ENT_PRIV(pScrn)->pLSAREA;
+ :}
+ :
+ :drm_handle_t
+ :DRIMasterSareaHandle(ScrnInfoPtr pScrn)
+ :{
+ : return DRI_ENT_PRIV(pScrn)->hLSAREA;
+ :}
+ :
+ :
+ :Bool
+ :DRIOpenDRMMaster(ScrnInfoPtr pScrn,
+ : unsigned long sAreaSize,
+ : const char *busID,
+ : const char *drmDriverName)
+ :{
+ : drmSetVersion saveSv, sv;
+ : Bool drmWasAvailable;
+ : DRIEntPrivPtr pDRIEntPriv;
+ : DRIEntPrivRec tmp;
+ : drmVersionPtr drmlibv;
+ : int drmlibmajor, drmlibminor;
+ : const char *openBusID;
+ : int count;
+ : int err;
+ :
+ : if (DRIEntPrivIndex == -1)
+ : DRIEntPrivIndex = xf86AllocateEntityPrivateIndex();
+ :
+ : pDRIEntPriv = DRI_ENT_PRIV(pScrn);
+ :
+ : if (pDRIEntPriv && pDRIEntPriv->drmFD != -1)
+ : return TRUE;
+ :
+ : drmWasAvailable = drmAvailable();
+ :
+ : memset(&tmp, 0, sizeof(tmp));
+ :
+ : /* Check the DRM lib version.
+ : * drmGetLibVersion was not supported in version 1.0, so check for
+ : * symbol first to avoid possible crash or hang.
+ : */
+ :
+ : drmlibmajor = 1;
+ : drmlibminor = 0;
+ : if (xf86LoaderCheckSymbol("drmGetLibVersion")) {
+ : drmlibv = drmGetLibVersion(-1);
+ : if (drmlibv != NULL) {
+ : drmlibmajor = drmlibv->version_major;
+ : drmlibminor = drmlibv->version_minor;
+ : drmFreeVersion(drmlibv);
+ : }
+ : }
+ :
+ : /* Check if the libdrm can handle falling back to loading based on name
+ : * if a busid string is passed.
+ : */
+ : openBusID = (drmlibmajor == 1 && drmlibminor >= 2) ? busID : NULL;
+ :
+ : tmp.drmFD = -1;
+ : sv.drm_di_major = 1;
+ : sv.drm_di_minor = 1;
+ : sv.drm_dd_major = -1;
+ :
+ : saveSv = sv;
+ : count = 10;
+ : while (count--) {
+ : tmp.drmFD = drmOpen(drmDriverName, openBusID);
+ :
+ : if (tmp.drmFD < 0) {
+ : DRIDrvMsg(-1, X_ERROR, "[drm] drmOpen failed.\n");
+ : goto out_err;
+ : }
+ :
+ : err = drmSetInterfaceVersion(tmp.drmFD, &sv);
+ :
+ : if (err != -EPERM)
+ : break;
+ :
+ : sv = saveSv;
+ : drmClose(tmp.drmFD);
+ : tmp.drmFD = -1;
+ : usleep(100000);
+ : }
+ :
+ : if (tmp.drmFD <= 0) {
+ : DRIDrvMsg(-1, X_ERROR, "[drm] DRM was busy with another master.\n");
+ : goto out_err;
+ : }
+ :
+ : if (!drmWasAvailable) {
+ : DRIDrvMsg(-1, X_INFO,
+ : "[drm] loaded kernel module for \"%s\" driver.\n",
+ : drmDriverName);
+ : }
+ :
+ : if (err != 0) {
+ : sv.drm_di_major = 1;
+ : sv.drm_di_minor = 0;
+ : }
+ :
+ : DRIDrvMsg(-1, X_INFO, "[drm] DRM interface version %d.%d\n",
+ : sv.drm_di_major, sv.drm_di_minor);
+ :
+ : if (sv.drm_di_major == 1 && sv.drm_di_minor >= 1)
+ : err = 0;
+ : else
+ : err = drmSetBusid(tmp.drmFD, busID);
+ :
+ : if (err) {
+ : DRIDrvMsg(-1, X_ERROR, "[drm] Could not set DRM device bus ID.\n");
+ : goto out_err;
+ : }
+ :
+ : /*
+ : * Create a lock-containing sarea.
+ : */
+ :
+ : if (drmAddMap( tmp.drmFD, 0, sAreaSize, DRM_SHM,
+ : DRM_CONTAINS_LOCK, &tmp.hLSAREA) < 0) {
+ : DRIDrvMsg(-1, X_INFO, "[drm] Could not create SAREA for DRM lock.\n");
+ : tmp.hLSAREA = 0;
+ : goto out_err;
+ : }
+ :
+ : if (drmMap( tmp.drmFD, tmp.hLSAREA, sAreaSize,
+ : (drmAddressPtr)(&tmp.pLSAREA)) < 0) {
+ : DRIDrvMsg(-1, X_INFO, "[drm] Mapping SAREA for DRM lock failed.\n");
+ : tmp.pLSAREA = NULL;
+ : goto out_err;
+ : }
+ :
+ : memset(tmp.pLSAREA, 0, sAreaSize);
+ :
+ : /*
+ : * Reserved contexts are handled by the first opened screen.
+ : */
+ :
+ : tmp.resOwner = NULL;
+ :
+ : if (!pDRIEntPriv)
+ : pDRIEntPriv = xnfcalloc(sizeof(*pDRIEntPriv), 1);
+ :
+ : if (!pDRIEntPriv) {
+ : DRIDrvMsg(-1, X_INFO, "[drm] Failed to allocate memory for "
+ : "DRM device.\n");
+ : goto out_err;
+ : }
+ : *pDRIEntPriv = tmp;
+ : xf86GetEntityPrivate((pScrn)->entityList[0],DRIEntPrivIndex)->ptr =
+ : pDRIEntPriv;
+ :
+ : DRIDrvMsg(-1, X_INFO, "[drm] DRM open master succeeded.\n");
+ : return TRUE;
+ :
+ : out_err:
+ :
+ : DRIOpenDRMCleanup(&tmp);
+ : return FALSE;
+ :}
+ :
+ :
+ :Bool
+ :DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
+ :{
+ : DRIScreenPrivPtr pDRIPriv;
+ : drm_context_t * reserved;
+ : int reserved_count;
+ : int i;
+ : Bool xineramaInCore = FALSE;
+ : DRIEntPrivPtr pDRIEntPriv;
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ :
+ : /* If the DRI extension is disabled, do not initialize the DRI */
+ : if (noXFree86DRIExtension) {
+ : DRIDrvMsg(pScreen->myNum, X_WARNING,
+ : "Direct rendering has been disabled.\n");
+ : return FALSE;
+ : }
+ :
+ : /*
+ : * If Xinerama is on, don't allow DRI to initialise. It won't be usable
+ : * anyway.
+ : */
+ : if (xf86LoaderCheckSymbol("noPanoramiXExtension"))
+ : xineramaInCore = TRUE;
+ :
+ : if (xineramaInCore) {
+ : if (!noPanoramiXExtension) {
+ : DRIDrvMsg(pScreen->myNum, X_WARNING,
+ : "Direct rendering is not supported when Xinerama is enabled\n");
+ : return FALSE;
+ : }
+ : }
+ :
+ : if (!DRIOpenDRMMaster(pScrn, pDRIInfo->SAREASize,
+ : pDRIInfo->busIdString,
+ : pDRIInfo->drmDriverName))
+ : return FALSE;
+ :
+ : pDRIEntPriv = DRI_ENT_PRIV(pScrn);
+ :
+ : if (DRIGeneration != serverGeneration) {
+ : if ((DRIScreenPrivIndex = AllocateScreenPrivateIndex()) < 0)
+ : return FALSE;
+ : DRIGeneration = serverGeneration;
+ : }
+ :
+ : pDRIPriv = (DRIScreenPrivPtr) xcalloc(1, sizeof(DRIScreenPrivRec));
+ : if (!pDRIPriv) {
+ : pScreen->devPrivates[DRIScreenPrivIndex].ptr = NULL;
+ : DRIScreenPrivIndex = -1;
+ : return FALSE;
+ : }
+ :
+ : pScreen->devPrivates[DRIScreenPrivIndex].ptr = (pointer) pDRIPriv;
+ : pDRIPriv->drmFD = pDRIEntPriv->drmFD;
+ : pDRIPriv->directRenderingSupport = TRUE;
+ : pDRIPriv->pDriverInfo = pDRIInfo;
+ : pDRIPriv->nrWindows = 0;
+ : pDRIPriv->nrWindowsVisible = 0;
+ : pDRIPriv->fullscreen = NULL;
+ :
+ : pDRIPriv->createDummyCtx = pDRIInfo->createDummyCtx;
+ : pDRIPriv->createDummyCtxPriv = pDRIInfo->createDummyCtxPriv;
+ :
+ : pDRIPriv->grabbedDRILock = FALSE;
+ : pDRIPriv->drmSIGIOHandlerInstalled = FALSE;
+ : *pDRMFD = pDRIPriv->drmFD;
+ :
+ : if (pDRIEntPriv->sAreaGrabbed || pDRIInfo->allocSarea) {
+ :
+ : if (drmAddMap( pDRIPriv->drmFD,
+ : 0,
+ : pDRIPriv->pDriverInfo->SAREASize,
+ : DRM_SHM,
+ : 0,
+ : &pDRIPriv->hSAREA) < 0)
+ : {
+ : pDRIPriv->directRenderingSupport = FALSE;
+ : pScreen->devPrivates[DRIScreenPrivIndex].ptr = NULL;
+ : drmClose(pDRIPriv->drmFD);
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[drm] drmAddMap failed\n");
+ : return FALSE;
+ : }
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[drm] added %d byte SAREA at %p\n",
+ : pDRIPriv->pDriverInfo->SAREASize, pDRIPriv->hSAREA);
+ :
+ : /* Backwards compat. */
+ : if (drmMap( pDRIPriv->drmFD,
+ : pDRIPriv->hSAREA,
+ : pDRIPriv->pDriverInfo->SAREASize,
+ : (drmAddressPtr)(&pDRIPriv->pSAREA)) < 0)
+ : {
+ : pDRIPriv->directRenderingSupport = FALSE;
+ : pScreen->devPrivates[DRIScreenPrivIndex].ptr = NULL;
+ : drmClose(pDRIPriv->drmFD);
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[drm] drmMap failed\n");
+ : return FALSE;
+ : }
+ : DRIDrvMsg(pScreen->myNum, X_INFO, "[drm] mapped SAREA %p to %p\n",
+ : pDRIPriv->hSAREA, pDRIPriv->pSAREA);
+ : memset(pDRIPriv->pSAREA, 0, pDRIPriv->pDriverInfo->SAREASize);
+ : } else {
+ : DRIDrvMsg(pScreen->myNum, X_INFO, "[drm] Using the DRM lock "
+ : "SAREA also for drawables.\n");
+ : pDRIPriv->hSAREA = pDRIEntPriv->hLSAREA;
+ : pDRIPriv->pSAREA = (XF86DRISAREAPtr) pDRIEntPriv->pLSAREA;
+ : pDRIEntPriv->sAreaGrabbed = TRUE;
+ : }
+ :
+ : pDRIPriv->hLSAREA = pDRIEntPriv->hLSAREA;
+ : pDRIPriv->pLSAREA = pDRIEntPriv->pLSAREA;
+ :
+ : if (drmAddMap( pDRIPriv->drmFD,
+ : (drm_handle_t)pDRIPriv->pDriverInfo->frameBufferPhysicalAddress,
+ : pDRIPriv->pDriverInfo->frameBufferSize,
+ : DRM_FRAME_BUFFER,
+ : 0,
+ : &pDRIPriv->hFrameBuffer) < 0)
+ : {
+ : pDRIPriv->directRenderingSupport = FALSE;
+ : pScreen->devPrivates[DRIScreenPrivIndex].ptr = NULL;
+ : drmUnmap(pDRIPriv->pSAREA, pDRIPriv->pDriverInfo->SAREASize);
+ : drmClose(pDRIPriv->drmFD);
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[drm] drmAddMap failed\n");
+ : return FALSE;
+ : }
+ : DRIDrvMsg(pScreen->myNum, X_INFO, "[drm] framebuffer handle = %p\n",
+ : pDRIPriv->hFrameBuffer);
+ :
+ : if (pDRIEntPriv->resOwner == NULL) {
+ : pDRIEntPriv->resOwner = pScreen;
+ :
+ : /* Add tags for reserved contexts */
+ : if ((reserved = drmGetReservedContextList(pDRIPriv->drmFD,
+ : &reserved_count))) {
+ : int i;
+ : void *tag;
+ :
+ : for (i = 0; i < reserved_count; i++) {
+ : tag = DRICreateContextPrivFromHandle(pScreen,
+ : reserved[i],
+ : DRI_CONTEXT_RESERVED);
+ : drmAddContextTag(pDRIPriv->drmFD, reserved[i], tag);
+ : }
+ : drmFreeReservedContextList(reserved);
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[drm] added %d reserved context%s for kernel\n",
+ : reserved_count, reserved_count > 1 ? "s" : "");
+ : }
+ : }
+ :
+ : /* validate max drawable table entry set by driver */
+ : if ((pDRIPriv->pDriverInfo->maxDrawableTableEntry <= 0) ||
+ : (pDRIPriv->pDriverInfo->maxDrawableTableEntry > SAREA_MAX_DRAWABLES)) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "Invalid max drawable table size set by driver: %d\n",
+ : pDRIPriv->pDriverInfo->maxDrawableTableEntry);
+ : }
+ :
+ : /* Initialize drawable tables (screen private and SAREA) */
+ : for( i=0; i < pDRIPriv->pDriverInfo->maxDrawableTableEntry; i++) {
+ : pDRIPriv->DRIDrawables[i] = NULL;
+ : pDRIPriv->pSAREA->drawableTable[i].stamp = 0;
+ : pDRIPriv->pSAREA->drawableTable[i].flags = 0;
+ : }
+ :
+ : pDRIPriv->pLockRefCount = &pDRIEntPriv->lockRefCount;
+ : pDRIPriv->pLockingContext = &pDRIEntPriv->lockingContext;
+ :
+ : if (!pDRIEntPriv->keepFDOpen)
+ : pDRIEntPriv->keepFDOpen = pDRIInfo->keepFDOpen;
+ :
+ : pDRIEntPriv->refCount++;
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :DRIFinishScreenInit(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIInfoPtr pDRIInfo = pDRIPriv->pDriverInfo;
+ : DRIContextFlags flags = 0;
+ : DRIContextPrivPtr pDRIContextPriv;
+ :
+ : /* Set up flags for DRICreateContextPriv */
+ : switch (pDRIInfo->driverSwapMethod) {
+ : case DRI_KERNEL_SWAP: flags = DRI_CONTEXT_2DONLY; break;
+ : case DRI_HIDE_X_CONTEXT: flags = DRI_CONTEXT_PRESERVED; break;
+ : }
+ :
+ : if (!(pDRIContextPriv = DRICreateContextPriv(pScreen,
+ : &pDRIPriv->myContext,
+ : flags))) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "failed to create server context\n");
+ : return FALSE;
+ : }
+ : pDRIPriv->myContextPriv = pDRIContextPriv;
+ :
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "X context handle = %p\n", pDRIPriv->myContext);
+ :
+ : /* Now that we have created the X server's context, we can grab the
+ : * hardware lock for the X server.
+ : */
+ : DRILock(pScreen, 0);
+ : pDRIPriv->grabbedDRILock = TRUE;
+ :
+ : /* pointers so that we can prevent memory leaks later */
+ : pDRIPriv->hiddenContextStore = NULL;
+ : pDRIPriv->partial3DContextStore = NULL;
+ :
+ : switch(pDRIInfo->driverSwapMethod) {
+ : case DRI_HIDE_X_CONTEXT:
+ : /* Server will handle 3D swaps, and hide 2D swaps from kernel.
+ : * Register server context as a preserved context.
+ : */
+ :
+ : /* allocate memory for hidden context store */
+ : pDRIPriv->hiddenContextStore
+ : = (void *)xcalloc(1, pDRIInfo->contextSize);
+ : if (!pDRIPriv->hiddenContextStore) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "failed to allocate hidden context\n");
+ : DRIDestroyContextPriv(pDRIContextPriv);
+ : return FALSE;
+ : }
+ :
+ : /* allocate memory for partial 3D context store */
+ : pDRIPriv->partial3DContextStore
+ : = (void *)xcalloc(1, pDRIInfo->contextSize);
+ : if (!pDRIPriv->partial3DContextStore) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "[DRI] failed to allocate partial 3D context\n");
+ : xfree(pDRIPriv->hiddenContextStore);
+ : DRIDestroyContextPriv(pDRIContextPriv);
+ : return FALSE;
+ : }
+ :
+ : /* save initial context store */
+ : if (pDRIInfo->SwapContext) {
+ : (*pDRIInfo->SwapContext)(
+ : pScreen,
+ : DRI_NO_SYNC,
+ : DRI_2D_CONTEXT,
+ : pDRIPriv->hiddenContextStore,
+ : DRI_NO_CONTEXT,
+ : NULL);
+ : }
+ : /* fall through */
+ :
+ : case DRI_SERVER_SWAP:
+ : /* For swap methods of DRI_SERVER_SWAP and DRI_HIDE_X_CONTEXT
+ : * setup signal handler for receiving swap requests from kernel
+ : */
+ : if (!(pDRIPriv->drmSIGIOHandlerInstalled =
+ : drmInstallSIGIOHandler(pDRIPriv->drmFD, DRISwapContext))) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "[drm] failed to setup DRM signal handler\n");
+ : if (pDRIPriv->hiddenContextStore)
+ : xfree(pDRIPriv->hiddenContextStore);
+ : if (pDRIPriv->partial3DContextStore)
+ : xfree(pDRIPriv->partial3DContextStore);
+ : DRIDestroyContextPriv(pDRIContextPriv);
+ : return FALSE;
+ : } else {
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[drm] installed DRM signal handler\n");
+ : }
+ :
+ : default:
+ : break;
+ : }
+ :
+ : /* Wrap DRI support */
+ : if (pDRIInfo->wrap.ValidateTree) {
+ : pDRIPriv->wrap.ValidateTree = pScreen->ValidateTree;
+ : pScreen->ValidateTree = pDRIInfo->wrap.ValidateTree;
+ : }
+ : if (pDRIInfo->wrap.PostValidateTree) {
+ : pDRIPriv->wrap.PostValidateTree = pScreen->PostValidateTree;
+ : pScreen->PostValidateTree = pDRIInfo->wrap.PostValidateTree;
+ : }
+ : if (pDRIInfo->wrap.WindowExposures) {
+ : pDRIPriv->wrap.WindowExposures = pScreen->WindowExposures;
+ : pScreen->WindowExposures = pDRIInfo->wrap.WindowExposures;
+ : }
+ : if (pDRIInfo->wrap.CopyWindow) {
+ : pDRIPriv->wrap.CopyWindow = pScreen->CopyWindow;
+ : pScreen->CopyWindow = pDRIInfo->wrap.CopyWindow;
+ : }
+ : if (pDRIInfo->wrap.ClipNotify) {
+ : pDRIPriv->wrap.ClipNotify = pScreen->ClipNotify;
+ : pScreen->ClipNotify = pDRIInfo->wrap.ClipNotify;
+ : }
+ : if (pDRIInfo->wrap.AdjustFrame) {
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ : pDRIPriv->wrap.AdjustFrame = pScrn->AdjustFrame;
+ : pScrn->AdjustFrame = pDRIInfo->wrap.AdjustFrame;
+ : }
+ : pDRIPriv->wrapped = TRUE;
+ :
+ : DRIDrvMsg(pScreen->myNum, X_INFO, "[DRI] installation complete\n");
+ :
+ : return TRUE;
+ :}
+ :
+ :void
+ :DRICloseScreen(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIInfoPtr pDRIInfo;
+ : drm_context_t * reserved;
+ : int reserved_count;
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ : DRIEntPrivPtr pDRIEntPriv = DRI_ENT_PRIV(pScrn);
+ : Bool closeMaster;
+ :
+ : if (pDRIPriv) {
+ :
+ : pDRIInfo = pDRIPriv->pDriverInfo;
+ :
+ : if (pDRIPriv->wrapped) {
+ : /* Unwrap DRI Functions */
+ : if (pDRIInfo->wrap.ValidateTree) {
+ : pScreen->ValidateTree = pDRIPriv->wrap.ValidateTree;
+ : pDRIPriv->wrap.ValidateTree = NULL;
+ : }
+ : if (pDRIInfo->wrap.PostValidateTree) {
+ : pScreen->PostValidateTree = pDRIPriv->wrap.PostValidateTree;
+ : pDRIPriv->wrap.PostValidateTree = NULL;
+ : }
+ : if (pDRIInfo->wrap.WindowExposures) {
+ : pScreen->WindowExposures = pDRIPriv->wrap.WindowExposures;
+ : pDRIPriv->wrap.WindowExposures = NULL;
+ : }
+ : if (pDRIInfo->wrap.CopyWindow) {
+ : pScreen->CopyWindow = pDRIPriv->wrap.CopyWindow;
+ : pDRIPriv->wrap.CopyWindow = NULL;
+ : }
+ : if (pDRIInfo->wrap.ClipNotify) {
+ : pScreen->ClipNotify = pDRIPriv->wrap.ClipNotify;
+ : pDRIPriv->wrap.ClipNotify = NULL;
+ : }
+ : if (pDRIInfo->wrap.AdjustFrame) {
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ : pScrn->AdjustFrame = pDRIPriv->wrap.AdjustFrame;
+ : pDRIPriv->wrap.AdjustFrame = NULL;
+ : }
+ : pDRIPriv->wrapped = FALSE;
+ : }
+ :
+ : if (pDRIPriv->drmSIGIOHandlerInstalled) {
+ : if (!drmRemoveSIGIOHandler(pDRIPriv->drmFD)) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "[drm] failed to remove DRM signal handler\n");
+ : }
+ : }
+ :
+ : if (pDRIPriv->dummyCtxPriv && pDRIPriv->createDummyCtx) {
+ : DRIDestroyDummyContext(pScreen, pDRIPriv->createDummyCtxPriv);
+ : }
+ :
+ : if (!DRIDestroyContextPriv(pDRIPriv->myContextPriv)) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "failed to destroy server context\n");
+ : }
+ :
+ : /* Remove tags for reserved contexts */
+ : if (pDRIEntPriv->resOwner == pScreen) {
+ : pDRIEntPriv->resOwner = NULL;
+ :
+ : if ((reserved = drmGetReservedContextList(pDRIPriv->drmFD,
+ : &reserved_count))) {
+ : int i;
+ :
+ : for (i = 0; i < reserved_count; i++) {
+ : DRIDestroyContextPriv(drmGetContextTag(pDRIPriv->drmFD,
+ : reserved[i]));
+ : }
+ : drmFreeReservedContextList(reserved);
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[drm] removed %d reserved context%s for kernel\n",
+ : reserved_count, reserved_count > 1 ? "s" : "");
+ : }
+ : }
+ :
+ : /* Make sure signals get unblocked etc. */
+ : drmUnlock(pDRIPriv->drmFD, pDRIPriv->myContext);
+ : pDRIPriv->pLockRefCount = NULL;
+ : closeMaster = (--pDRIEntPriv->refCount == 0) &&
+ : !pDRIEntPriv->keepFDOpen;
+ : if (closeMaster || pDRIPriv->hSAREA != pDRIEntPriv->hLSAREA) {
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[drm] unmapping %d bytes of SAREA %p at %p\n",
+ : pDRIInfo->SAREASize,
+ : pDRIPriv->hSAREA,
+ : pDRIPriv->pSAREA);
+ : if (drmUnmap(pDRIPriv->pSAREA, pDRIInfo->SAREASize)) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "[drm] unable to unmap %d bytes"
+ : " of SAREA %p at %p\n",
+ : pDRIInfo->SAREASize,
+ : pDRIPriv->hSAREA,
+ : pDRIPriv->pSAREA);
+ : }
+ : } else {
+ : pDRIEntPriv->sAreaGrabbed = FALSE;
+ : }
+ :
+ : if (closeMaster || (pDRIEntPriv->drmFD != pDRIPriv->drmFD)) {
+ : drmClose(pDRIPriv->drmFD);
+ : if (pDRIEntPriv->drmFD == pDRIPriv->drmFD) {
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[drm] Closed DRM master.\n");
+ : pDRIEntPriv->drmFD = -1;
+ : }
+ : }
+ :
+ : xfree(pDRIPriv);
+ : pScreen->devPrivates[DRIScreenPrivIndex].ptr = NULL;
+ : DRIScreenPrivIndex = -1;
+ : }
+ :}
+ :
+ :#define DRM_MSG_VERBOSITY 3
+ :
+ :static int dri_drm_debug_print(const char *format, va_list ap)
+ :{
+ : xf86VDrvMsgVerb(-1, X_NONE, DRM_MSG_VERBOSITY, format, ap);
+ : return 0;
+ :}
+ :
+ :static void dri_drm_get_perms(gid_t *group, mode_t *mode)
+ :{
+ : *group = xf86ConfigDRI.group;
+ : *mode = xf86ConfigDRI.mode;
+ :}
+ :
+ :drmServerInfo DRIDRMServerInfo = {
+ : dri_drm_debug_print,
+ : xf86LoadKernelModule,
+ : dri_drm_get_perms,
+ :};
+ :
+ :Bool
+ :DRIExtensionInit(void)
+ :{
+ : int i;
+ : ScreenPtr pScreen;
+ :
+ : if (DRIScreenPrivIndex < 0 || DRIGeneration != serverGeneration) {
+ : return FALSE;
+ : }
+ :
+ : /* Allocate a window private index with a zero sized private area for
+ : * each window, then should a window become a DRI window, we'll hang
+ : * a DRIWindowPrivateRec off of this private index.
+ : */
+ : if ((DRIWindowPrivIndex = AllocateWindowPrivateIndex()) < 0)
+ : return FALSE;
+ :
+ : DRIDrawablePrivResType = CreateNewResourceType(DRIDrawablePrivDelete);
+ : DRIContextPrivResType = CreateNewResourceType(DRIContextPrivDelete);
+ :
+ : for (i = 0; i < screenInfo.numScreens; i++)
+ : {
+ : pScreen = screenInfo.screens[i];
+ : if (!AllocateWindowPrivate(pScreen, DRIWindowPrivIndex, 0))
+ : return FALSE;
+ : }
+ :
+ : RegisterBlockAndWakeupHandlers(DRIBlockHandler, DRIWakeupHandler, NULL);
+ :
+ : return TRUE;
+ :}
+ :
+ :void
+ :DRIReset(void)
+ :{
+ : /*
+ : * This stub routine is called when the X Server recycles, resources
+ : * allocated by DRIExtensionInit need to be managed here.
+ : *
+ : * Currently this routine is a stub because all the interesting resources
+ : * are managed via the screen init process.
+ : */
+ :}
+ :
+ :Bool
+ :DRIQueryDirectRenderingCapable(ScreenPtr pScreen, Bool* isCapable)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if (pDRIPriv)
+ : *isCapable = pDRIPriv->directRenderingSupport;
+ : else
+ : *isCapable = FALSE;
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :DRIOpenConnection(ScreenPtr pScreen, drm_handle_t * hSAREA, char **busIdString)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : *hSAREA = pDRIPriv->hSAREA;
+ : *busIdString = pDRIPriv->pDriverInfo->busIdString;
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :DRIAuthConnection(ScreenPtr pScreen, drm_magic_t magic)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if (drmAuthMagic(pDRIPriv->drmFD, magic)) return FALSE;
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :DRICloseConnection(ScreenPtr pScreen)
+ :{
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :DRIGetClientDriverName(ScreenPtr pScreen,
+ : int *ddxDriverMajorVersion,
+ : int *ddxDriverMinorVersion,
+ : int *ddxDriverPatchVersion,
+ : char **clientDriverName)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : *ddxDriverMajorVersion = pDRIPriv->pDriverInfo->ddxDriverMajorVersion;
+ : *ddxDriverMinorVersion = pDRIPriv->pDriverInfo->ddxDriverMinorVersion;
+ : *ddxDriverPatchVersion = pDRIPriv->pDriverInfo->ddxDriverPatchVersion;
+ : *clientDriverName = pDRIPriv->pDriverInfo->clientDriverName;
+ :
+ : return TRUE;
+ :}
+ :
+ :/* DRICreateContextPriv and DRICreateContextPrivFromHandle are helper
+ : functions that layer on drmCreateContext and drmAddContextTag.
+ :
+ : DRICreateContextPriv always creates a kernel drm_context_t and then calls
+ : DRICreateContextPrivFromHandle to create a DRIContextPriv structure for
+ : DRI tracking. For the SIGIO handler, the drm_context_t is associated with
+ : DRIContextPrivPtr. Any special flags are stored in the DRIContextPriv
+ : area and are passed to the kernel (if necessary).
+ :
+ : DRICreateContextPriv returns a pointer to newly allocated
+ : DRIContextPriv, and returns the kernel drm_context_t in pHWContext. */
+ :
+ :DRIContextPrivPtr
+ :DRICreateContextPriv(ScreenPtr pScreen,
+ : drm_context_t * pHWContext,
+ : DRIContextFlags flags)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if (drmCreateContext(pDRIPriv->drmFD, pHWContext)) {
+ : return NULL;
+ : }
+ :
+ : return DRICreateContextPrivFromHandle(pScreen, *pHWContext, flags);
+ :}
+ :
+ :DRIContextPrivPtr
+ :DRICreateContextPrivFromHandle(ScreenPtr pScreen,
+ : drm_context_t hHWContext,
+ : DRIContextFlags flags)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIContextPrivPtr pDRIContextPriv;
+ : int contextPrivSize;
+ :
+ : contextPrivSize = sizeof(DRIContextPrivRec) +
+ : pDRIPriv->pDriverInfo->contextSize;
+ : if (!(pDRIContextPriv = xcalloc(1, contextPrivSize))) {
+ : return NULL;
+ : }
+ : pDRIContextPriv->pContextStore = (void *)(pDRIContextPriv + 1);
+ :
+ : drmAddContextTag(pDRIPriv->drmFD, hHWContext, pDRIContextPriv);
+ :
+ : pDRIContextPriv->hwContext = hHWContext;
+ : pDRIContextPriv->pScreen = pScreen;
+ : pDRIContextPriv->flags = flags;
+ : pDRIContextPriv->valid3D = FALSE;
+ :
+ : if (flags & DRI_CONTEXT_2DONLY) {
+ : if (drmSetContextFlags(pDRIPriv->drmFD,
+ : hHWContext,
+ : DRM_CONTEXT_2DONLY)) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "[drm] failed to set 2D context flag\n");
+ : DRIDestroyContextPriv(pDRIContextPriv);
+ : return NULL;
+ : }
+ : }
+ : if (flags & DRI_CONTEXT_PRESERVED) {
+ : if (drmSetContextFlags(pDRIPriv->drmFD,
+ : hHWContext,
+ : DRM_CONTEXT_PRESERVED)) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "[drm] failed to set preserved flag\n");
+ : DRIDestroyContextPriv(pDRIContextPriv);
+ : return NULL;
+ : }
+ : }
+ : return pDRIContextPriv;
+ :}
+ :
+ :Bool
+ :DRIDestroyContextPriv(DRIContextPrivPtr pDRIContextPriv)
+ :{
+ : DRIScreenPrivPtr pDRIPriv;
+ :
+ : if (!pDRIContextPriv) return TRUE;
+ :
+ : pDRIPriv = DRI_SCREEN_PRIV(pDRIContextPriv->pScreen);
+ :
+ : if (!(pDRIContextPriv->flags & DRI_CONTEXT_RESERVED)) {
+ : /* Don't delete reserved contexts from
+ : kernel area -- the kernel manages its
+ : reserved contexts itself. */
+ : if (drmDestroyContext(pDRIPriv->drmFD, pDRIContextPriv->hwContext))
+ : return FALSE;
+ : }
+ :
+ : /* Remove the tag last to prevent a race
+ : condition where the context has pending
+ : buffers. The context can't be re-used
+ : while in this thread, but buffers can be
+ : dispatched asynchronously. */
+ : drmDelContextTag(pDRIPriv->drmFD, pDRIContextPriv->hwContext);
+ : xfree(pDRIContextPriv);
+ : return TRUE;
+ :}
+ :
+ :static Bool
+ :DRICreateDummyContext(ScreenPtr pScreen, Bool needCtxPriv)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : __GLXscreen *pGLXScreen = __glXgetActiveScreen(pScreen->myNum);
+ : __GLcontextModes *modes = pGLXScreen->modes;
+ : void **pVisualConfigPriv = pGLXScreen->pVisualPriv;
+ : DRIContextPrivPtr pDRIContextPriv;
+ : void *contextStore;
+ : VisualPtr visual;
+ : int visNum;
+ :
+ : visual = pScreen->visuals;
+ :
+ : /* Find the X visual that corresponds the the first GLX visual */
+ : for (visNum = 0;
+ : visNum < pScreen->numVisuals;
+ : visNum++, visual++) {
+ : if (modes->visualID == visual->vid)
+ : break;
+ : }
+ : if (visNum == pScreen->numVisuals) return FALSE;
+ :
+ : if (!(pDRIContextPriv =
+ : DRICreateContextPriv(pScreen,
+ : &pDRIPriv->pSAREA->dummy_context, 0))) {
+ : return FALSE;
+ : }
+ :
+ : contextStore = DRIGetContextStore(pDRIContextPriv);
+ : if (pDRIPriv->pDriverInfo->CreateContext && needCtxPriv) {
+ : if (!pDRIPriv->pDriverInfo->CreateContext(pScreen, visual,
+ : pDRIPriv->pSAREA->dummy_context,
+ : *pVisualConfigPriv,
+ : (DRIContextType)(long)contextStore)) {
+ : DRIDestroyContextPriv(pDRIContextPriv);
+ : return FALSE;
+ : }
+ : }
+ :
+ : pDRIPriv->dummyCtxPriv = pDRIContextPriv;
+ : return TRUE;
+ :}
+ :
+ :static void
+ :DRIDestroyDummyContext(ScreenPtr pScreen, Bool hasCtxPriv)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIContextPrivPtr pDRIContextPriv = pDRIPriv->dummyCtxPriv;
+ : void *contextStore;
+ :
+ : if (!pDRIContextPriv) return;
+ : if (pDRIPriv->pDriverInfo->DestroyContext && hasCtxPriv) {
+ : contextStore = DRIGetContextStore(pDRIContextPriv);
+ : pDRIPriv->pDriverInfo->DestroyContext(pDRIContextPriv->pScreen,
+ : pDRIContextPriv->hwContext,
+ : (DRIContextType)(long)contextStore);
+ : }
+ :
+ : DRIDestroyContextPriv(pDRIPriv->dummyCtxPriv);
+ : pDRIPriv->dummyCtxPriv = NULL;
+ :}
+ :
+ :Bool
+ :DRICreateContext(ScreenPtr pScreen, VisualPtr visual,
+ : XID context, drm_context_t * pHWContext)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : __GLXscreen *pGLXScreen = __glXgetActiveScreen(pScreen->myNum);
+ : __GLcontextModes *modes = pGLXScreen->modes;
+ : void **pVisualConfigPriv = pGLXScreen->pVisualPriv;
+ : DRIContextPrivPtr pDRIContextPriv;
+ : void *contextStore;
+ :
+ : if (pDRIPriv->createDummyCtx && !pDRIPriv->dummyCtxPriv) {
+ : if (!DRICreateDummyContext(pScreen, pDRIPriv->createDummyCtxPriv)) {
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[drm] Could not create dummy context\n");
+ : return FALSE;
+ : }
+ : }
+ :
+ : /* Find the GLX visual associated with the one requested */
+ : for (modes = pGLXScreen->modes; modes != NULL; modes = modes->next) {
+ : if (modes->visualID == visual->vid)
+ : break;
+ : pVisualConfigPriv++;
+ : }
+ :
+ : if (modes == NULL) {
+ : /* No matching GLX visual found */
+ : return FALSE;
+ : }
+ :
+ : if (!(pDRIContextPriv = DRICreateContextPriv(pScreen, pHWContext, 0))) {
+ : return FALSE;
+ : }
+ :
+ : contextStore = DRIGetContextStore(pDRIContextPriv);
+ : if (pDRIPriv->pDriverInfo->CreateContext) {
+ : if (!((*pDRIPriv->pDriverInfo->CreateContext)(pScreen, visual,
+ : *pHWContext, *pVisualConfigPriv,
+ : (DRIContextType)(long)contextStore))) {
+ : DRIDestroyContextPriv(pDRIContextPriv);
+ : return FALSE;
+ : }
+ : }
+ :
+ : /* track this in case the client dies before cleanup */
+ : AddResource(context, DRIContextPrivResType, (pointer)pDRIContextPriv);
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :DRIDestroyContext(ScreenPtr pScreen, XID context)
+ :{
+ : FreeResourceByType(context, DRIContextPrivResType, FALSE);
+ :
+ : return TRUE;
+ :}
+ :
+ :/* DRIContextPrivDelete is called by the resource manager. */
+ :Bool
+ :DRIContextPrivDelete(pointer pResource, XID id)
+ :{
+ : DRIContextPrivPtr pDRIContextPriv = (DRIContextPrivPtr)pResource;
+ : DRIScreenPrivPtr pDRIPriv;
+ : void *contextStore;
+ :
+ : pDRIPriv = DRI_SCREEN_PRIV(pDRIContextPriv->pScreen);
+ : if (pDRIPriv->pDriverInfo->DestroyContext) {
+ : contextStore = DRIGetContextStore(pDRIContextPriv);
+ : pDRIPriv->pDriverInfo->DestroyContext(pDRIContextPriv->pScreen,
+ : pDRIContextPriv->hwContext,
+ : (DRIContextType)(long)contextStore);
+ : }
+ : return DRIDestroyContextPriv(pDRIContextPriv);
+ :}
+ :
+ :
+ :/* This walks the drawable timestamp array and invalidates all of them
+ : * in the case of transition from private to shared backbuffers. It's
+ : * not necessary for correctness, because DRIClipNotify gets called in
+ : * time to prevent any conflict, but the transition from
+ : * shared->private is sometimes missed if we don't do this.
+ : */
+ :static void
+ :DRIClipNotifyAllDrawables(ScreenPtr pScreen)
+ :{
+ : int i;
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : for( i=0; i < pDRIPriv->pDriverInfo->maxDrawableTableEntry; i++) {
+ : pDRIPriv->pSAREA->drawableTable[i].stamp = DRIDrawableValidationStamp++;
+ : }
+ :}
+ :
+ :
+ :static void
+ :DRITransitionToSharedBuffers(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIInfoPtr pDRIInfo = pDRIPriv->pDriverInfo;
+ :
+ : DRIClipNotifyAllDrawables( pScreen );
+ :
+ : if (pDRIInfo->TransitionSingleToMulti3D)
+ : pDRIInfo->TransitionSingleToMulti3D( pScreen );
+ :}
+ :
+ :
+ :static void
+ :DRITransitionToPrivateBuffers(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIInfoPtr pDRIInfo = pDRIPriv->pDriverInfo;
+ :
+ : DRIClipNotifyAllDrawables( pScreen );
+ :
+ : if (pDRIInfo->TransitionMultiToSingle3D)
+ : pDRIInfo->TransitionMultiToSingle3D( pScreen );
+ :}
+ :
+ :
+ :static void
+ :DRITransitionTo3d(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIInfoPtr pDRIInfo = pDRIPriv->pDriverInfo;
+ :
+ : DRIClipNotifyAllDrawables( pScreen );
+ :
+ : if (pDRIInfo->TransitionTo3d)
+ : pDRIInfo->TransitionTo3d( pScreen );
+ :}
+ :
+ :static void
+ :DRITransitionTo2d(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIInfoPtr pDRIInfo = pDRIPriv->pDriverInfo;
+ :
+ : DRIClipNotifyAllDrawables( pScreen );
+ :
+ : if (pDRIInfo->TransitionTo2d)
+ : pDRIInfo->TransitionTo2d( pScreen );
+ :}
+ :
+ :
+ :static int
+ :DRIDCNTreeTraversal(WindowPtr pWin, pointer data)
+ :{
+ : DRIDrawablePrivPtr pDRIDrawablePriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin);
+ :
+ : if (pDRIDrawablePriv) {
+ : ScreenPtr pScreen = pWin->drawable.pScreen;
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if (REGION_NUM_RECTS(&pWin->clipList) > 0) {
+ : WindowPtr *pDRIWindows = (WindowPtr*)data;
+ : int i = 0;
+ :
+ : while (pDRIWindows[i])
+ : i++;
+ :
+ : pDRIWindows[i] = pWin;
+ :
+ : pDRIPriv->nrWalked++;
+ : }
+ :
+ : if (pDRIPriv->nrWindows == pDRIPriv->nrWalked)
+ : return WT_STOPWALKING;
+ : }
+ :
+ : return WT_WALKCHILDREN;
+ :}
+ :
+ :static void
+ :DRIDriverClipNotify(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if (pDRIPriv->pDriverInfo->ClipNotify) {
+ : WindowPtr *pDRIWindows = xcalloc(sizeof(WindowPtr), pDRIPriv->nrWindows);
+ : DRIInfoPtr pDRIInfo = pDRIPriv->pDriverInfo;
+ :
+ : if (pDRIPriv->nrWindows > 0) {
+ : pDRIPriv->nrWalked = 0;
+ : TraverseTree(WindowTable[pScreen->myNum], DRIDCNTreeTraversal,
+ : (pointer)pDRIWindows);
+ : }
+ :
+ : pDRIInfo->ClipNotify(pScreen, pDRIWindows, pDRIPriv->nrWindows);
+ :
+ : xfree(pDRIWindows);
+ : }
+ :}
+ :
+ :static void
+ :DRIIncreaseNumberVisible(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : switch (++pDRIPriv->nrWindowsVisible) {
+ : case 1:
+ : DRITransitionTo3d( pScreen );
+ : break;
+ : case 2:
+ : DRITransitionToSharedBuffers( pScreen );
+ : break;
+ : default:
+ : break;
+ : }
+ :
+ : DRIDriverClipNotify(pScreen);
+ :}
+ :
+ :static void
+ :DRIDecreaseNumberVisible(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : switch (--pDRIPriv->nrWindowsVisible) {
+ : case 0:
+ : DRITransitionTo2d( pScreen );
+ : break;
+ : case 1:
+ : DRITransitionToPrivateBuffers( pScreen );
+ : break;
+ : default:
+ : break;
+ : }
+ :
+ : DRIDriverClipNotify(pScreen);
+ :}
+ :
+ :Bool
+ :DRICreateDrawable(ScreenPtr pScreen, Drawable id,
+ : DrawablePtr pDrawable, drm_drawable_t * hHWDrawable)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIDrawablePrivPtr pDRIDrawablePriv;
+ : WindowPtr pWin;
+ :
+ : if (pDrawable->type == DRAWABLE_WINDOW) {
+ : pWin = (WindowPtr)pDrawable;
+ : if ((pDRIDrawablePriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin))) {
+ : pDRIDrawablePriv->refCount++;
+ :
+ : if (!pDRIDrawablePriv->hwDrawable) {
+ : drmCreateDrawable(pDRIPriv->drmFD, &pDRIDrawablePriv->hwDrawable);
+ : }
+ : }
+ : else {
+ : /* allocate a DRI Window Private record */
+ : if (!(pDRIDrawablePriv = xalloc(sizeof(DRIDrawablePrivRec)))) {
+ : return FALSE;
+ : }
+ :
+ : /* Only create a drm_drawable_t once */
+ : if (drmCreateDrawable(pDRIPriv->drmFD,
+ : &pDRIDrawablePriv->hwDrawable)) {
+ : xfree(pDRIDrawablePriv);
+ : return FALSE;
+ : }
+ :
+ : /* add it to the list of DRI drawables for this screen */
+ : pDRIDrawablePriv->pScreen = pScreen;
+ : pDRIDrawablePriv->refCount = 1;
+ : pDRIDrawablePriv->drawableIndex = -1;
+ : pDRIDrawablePriv->nrects = REGION_NUM_RECTS(&pWin->clipList);
+ :
+ : /* save private off of preallocated index */
+ : pWin->devPrivates[DRIWindowPrivIndex].ptr =
+ : (pointer)pDRIDrawablePriv;
+ :
+ : pDRIPriv->nrWindows++;
+ :
+ : if (pDRIDrawablePriv->nrects)
+ : DRIIncreaseNumberVisible(pScreen);
+ :
+ : /* track this in case this window is destroyed */
+ : AddResource(id, DRIDrawablePrivResType, (pointer)pWin);
+ : }
+ :
+ : if (pDRIDrawablePriv->hwDrawable) {
+ : drmUpdateDrawableInfo(pDRIPriv->drmFD,
+ : pDRIDrawablePriv->hwDrawable,
+ : DRM_DRAWABLE_CLIPRECTS,
+ : REGION_NUM_RECTS(&pWin->clipList),
+ : REGION_RECTS(&pWin->clipList));
+ : *hHWDrawable = pDRIDrawablePriv->hwDrawable;
+ : }
+ : }
+ : else { /* pixmap (or for GLX 1.3, a PBuffer) */
+ : /* NOT_DONE */
+ : return FALSE;
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :DRIDestroyDrawable(ScreenPtr pScreen, Drawable id, DrawablePtr pDrawable)
+ :{
+ : DRIDrawablePrivPtr pDRIDrawablePriv;
+ : WindowPtr pWin;
+ :
+ :
+ : if (pDrawable->type == DRAWABLE_WINDOW) {
+ : pWin = (WindowPtr)pDrawable;
+ : pDRIDrawablePriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin);
+ : pDRIDrawablePriv->refCount--;
+ : if (pDRIDrawablePriv->refCount <= 0) {
+ : /* This calls back DRIDrawablePrivDelete which frees private area */
+ : FreeResourceByType(id, DRIDrawablePrivResType, FALSE);
+ : }
+ : }
+ : else { /* pixmap (or for GLX 1.3, a PBuffer) */
+ : /* NOT_DONE */
+ : return FALSE;
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :DRIDrawablePrivDelete(pointer pResource, XID id)
+ :{
+ : DrawablePtr pDrawable = (DrawablePtr)pResource;
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pDrawable->pScreen);
+ : DRIDrawablePrivPtr pDRIDrawablePriv;
+ : WindowPtr pWin;
+ :
+ : if (pDrawable->type == DRAWABLE_WINDOW) {
+ : pWin = (WindowPtr)pDrawable;
+ : pDRIDrawablePriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin);
+ :
+ : if (pDRIDrawablePriv->drawableIndex != -1) {
+ : /* bump stamp to force outstanding 3D requests to resync */
+ : pDRIPriv->pSAREA->drawableTable[pDRIDrawablePriv->drawableIndex].stamp
+ : = DRIDrawableValidationStamp++;
+ :
+ : /* release drawable table entry */
+ : pDRIPriv->DRIDrawables[pDRIDrawablePriv->drawableIndex] = NULL;
+ : }
+ :
+ : if (drmDestroyDrawable(pDRIPriv->drmFD,
+ : pDRIDrawablePriv->hwDrawable)) {
+ : return FALSE;
+ : }
+ :
+ : xfree(pDRIDrawablePriv);
+ : pWin->devPrivates[DRIWindowPrivIndex].ptr = NULL;
+ :
+ : pDRIPriv->nrWindows--;
+ :
+ : if (REGION_NUM_RECTS(&pWin->clipList))
+ : DRIDecreaseNumberVisible(pDrawable->pScreen);
+ : }
+ : else { /* pixmap (or for GLX 1.3, a PBuffer) */
+ : /* NOT_DONE */
+ : return FALSE;
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :DRIGetDrawableInfo(ScreenPtr pScreen,
+ : DrawablePtr pDrawable,
+ : unsigned int* index,
+ : unsigned int* stamp,
+ : int* X,
+ : int* Y,
+ : int* W,
+ : int* H,
+ : int* numClipRects,
+ : drm_clip_rect_t ** pClipRects,
+ : int* backX,
+ : int* backY,
+ : int* numBackClipRects,
+ : drm_clip_rect_t ** pBackClipRects)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIDrawablePrivPtr pDRIDrawablePriv, pOldDrawPriv;
+ : WindowPtr pWin, pOldWin;
+ : int i;
+ :
+ :#if 0
+ : printf("maxDrawableTableEntry = %d\n", pDRIPriv->pDriverInfo->maxDrawableTableEntry);
+ :#endif
+ :
+ : if (pDrawable->type == DRAWABLE_WINDOW) {
+ : pWin = (WindowPtr)pDrawable;
+ : if ((pDRIDrawablePriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin))) {
+ :
+ : /* Manage drawable table */
+ : if (pDRIDrawablePriv->drawableIndex == -1) { /* load SAREA table */
+ :
+ : /* Search table for empty entry */
+ : i = 0;
+ : while (i < pDRIPriv->pDriverInfo->maxDrawableTableEntry) {
+ : if (!(pDRIPriv->DRIDrawables[i])) {
+ : pDRIPriv->DRIDrawables[i] = pDrawable;
+ : pDRIDrawablePriv->drawableIndex = i;
+ : pDRIPriv->pSAREA->drawableTable[i].stamp =
+ : DRIDrawableValidationStamp++;
+ : break;
+ : }
+ : i++;
+ : }
+ :
+ : /* Search table for oldest entry */
+ : if (i == pDRIPriv->pDriverInfo->maxDrawableTableEntry) {
+ : unsigned int oldestStamp = ~0;
+ : int oldestIndex = 0;
+ : i = pDRIPriv->pDriverInfo->maxDrawableTableEntry;
+ : while (i--) {
+ : if (pDRIPriv->pSAREA->drawableTable[i].stamp <
+ : oldestStamp) {
+ : oldestIndex = i;
+ : oldestStamp =
+ : pDRIPriv->pSAREA->drawableTable[i].stamp;
+ : }
+ : }
+ : pDRIDrawablePriv->drawableIndex = oldestIndex;
+ :
+ : /* release oldest drawable table entry */
+ : pOldWin = (WindowPtr)pDRIPriv->DRIDrawables[oldestIndex];
+ : pOldDrawPriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pOldWin);
+ : pOldDrawPriv->drawableIndex = -1;
+ :
+ : /* claim drawable table entry */
+ : pDRIPriv->DRIDrawables[oldestIndex] = pDrawable;
+ :
+ : /* validate SAREA entry */
+ : pDRIPriv->pSAREA->drawableTable[oldestIndex].stamp =
+ : DRIDrawableValidationStamp++;
+ :
+ : /* check for stamp wrap around */
+ : if (oldestStamp > DRIDrawableValidationStamp) {
+ :
+ : /* walk SAREA table and invalidate all drawables */
+ : for( i=0;
+ : i < pDRIPriv->pDriverInfo->maxDrawableTableEntry;
+ : i++) {
+ : pDRIPriv->pSAREA->drawableTable[i].stamp =
+ : DRIDrawableValidationStamp++;
+ : }
+ : }
+ : }
+ :
+ : /* If the driver wants to be notified when the index is
+ : * set for a drawable, let it know now.
+ : */
+ : if (pDRIPriv->pDriverInfo->SetDrawableIndex)
+ : pDRIPriv->pDriverInfo->SetDrawableIndex(pWin,
+ : pDRIDrawablePriv->drawableIndex);
+ :
+ : /* reinit drawable ID if window is visible */
+ : if ((pWin->viewable) &&
+ : (pDRIPriv->pDriverInfo->bufferRequests != DRI_NO_WINDOWS))
+ : {
+ : (*pDRIPriv->pDriverInfo->InitBuffers)(pWin,
+ : &pWin->clipList, pDRIDrawablePriv->drawableIndex);
+ : }
+ : }
+ :
+ : *index = pDRIDrawablePriv->drawableIndex;
+ : *stamp = pDRIPriv->pSAREA->drawableTable[*index].stamp;
+ : *X = (int)(pWin->drawable.x);
+ : *Y = (int)(pWin->drawable.y);
+ :#if 0
+ : *W = (int)(pWin->winSize.extents.x2 - pWin->winSize.extents.x1);
+ : *H = (int)(pWin->winSize.extents.y2 - pWin->winSize.extents.y1);
+ :#endif
+ : *W = (int)(pWin->drawable.width);
+ : *H = (int)(pWin->drawable.height);
+ : *numClipRects = REGION_NUM_RECTS(&pWin->clipList);
+ : *pClipRects = (drm_clip_rect_t *)REGION_RECTS(&pWin->clipList);
+ :
+ : if (!*numClipRects && pDRIPriv->fullscreen) {
+ : /* use fake full-screen clip rect */
+ : pDRIPriv->fullscreen_rect.x1 = *X;
+ : pDRIPriv->fullscreen_rect.y1 = *Y;
+ : pDRIPriv->fullscreen_rect.x2 = *X + *W;
+ : pDRIPriv->fullscreen_rect.y2 = *Y + *H;
+ :
+ : *numClipRects = 1;
+ : *pClipRects = &pDRIPriv->fullscreen_rect;
+ : }
+ :
+ : *backX = *X;
+ : *backY = *Y;
+ :
+ : if (pDRIPriv->nrWindowsVisible == 1 && *numClipRects) {
+ : /* Use a single cliprect. */
+ :
+ : int x0 = *X;
+ : int y0 = *Y;
+ : int x1 = x0 + *W;
+ : int y1 = y0 + *H;
+ :
+ : if (x0 < 0) x0 = 0;
+ : if (y0 < 0) y0 = 0;
+ : if (x1 > pScreen->width) x1 = pScreen->width;
+ : if (y1 > pScreen->height) y1 = pScreen->height;
+ :
+ : if (y0 >= y1 || x0 >= x1) {
+ : *numBackClipRects = 0;
+ : *pBackClipRects = NULL;
+ : } else {
+ : pDRIPriv->private_buffer_rect.x1 = x0;
+ : pDRIPriv->private_buffer_rect.y1 = y0;
+ : pDRIPriv->private_buffer_rect.x2 = x1;
+ : pDRIPriv->private_buffer_rect.y2 = y1;
+ :
+ : *numBackClipRects = 1;
+ : *pBackClipRects = &(pDRIPriv->private_buffer_rect);
+ : }
+ : } else {
+ : /* Use the frontbuffer cliprects for back buffers. */
+ : *numBackClipRects = 0;
+ : *pBackClipRects = 0;
+ : }
+ : }
+ : else {
+ : /* Not a DRIDrawable */
+ : return FALSE;
+ : }
+ : }
+ : else { /* pixmap (or for GLX 1.3, a PBuffer) */
+ : /* NOT_DONE */
+ : return FALSE;
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :DRIGetDeviceInfo(ScreenPtr pScreen,
+ : drm_handle_t * hFrameBuffer,
+ : int* fbOrigin,
+ : int* fbSize,
+ : int* fbStride,
+ : int* devPrivateSize,
+ : void** pDevPrivate)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : *hFrameBuffer = pDRIPriv->hFrameBuffer;
+ : *fbOrigin = 0;
+ : *fbSize = pDRIPriv->pDriverInfo->frameBufferSize;
+ : *fbStride = pDRIPriv->pDriverInfo->frameBufferStride;
+ : *devPrivateSize = pDRIPriv->pDriverInfo->devPrivateSize;
+ : *pDevPrivate = pDRIPriv->pDriverInfo->devPrivate;
+ :
+ : return TRUE;
+ :}
+ :
+ :DRIInfoPtr
+ :DRICreateInfoRec(void)
+ :{
+ : DRIInfoPtr inforec = (DRIInfoPtr)xcalloc(1, sizeof(DRIInfoRec));
+ : if (!inforec) return NULL;
+ :
+ : /* Initialize defaults */
+ : inforec->busIdString = NULL;
+ :
+ : /* Wrapped function defaults */
+ : inforec->wrap.WakeupHandler = DRIDoWakeupHandler;
+ : inforec->wrap.BlockHandler = DRIDoBlockHandler;
+ : inforec->wrap.WindowExposures = DRIWindowExposures;
+ : inforec->wrap.CopyWindow = DRICopyWindow;
+ : inforec->wrap.ValidateTree = DRIValidateTree;
+ : inforec->wrap.PostValidateTree = DRIPostValidateTree;
+ : inforec->wrap.ClipNotify = DRIClipNotify;
+ : inforec->wrap.AdjustFrame = DRIAdjustFrame;
+ :
+ : inforec->TransitionTo2d = 0;
+ : inforec->TransitionTo3d = 0;
+ : inforec->SetDrawableIndex = 0;
+ :
+ : return inforec;
+ :}
+ :
+ :void
+ :DRIDestroyInfoRec(DRIInfoPtr DRIInfo)
+ :{
+ : if (DRIInfo->busIdString) xfree(DRIInfo->busIdString);
+ : xfree((char*)DRIInfo);
+ :}
+ :
+ :
+ :void
+ :DRIWakeupHandler(pointer wakeupData, int result, pointer pReadmask)
+ :{
+ : int i;
+ :
+ : for (i = 0; i < screenInfo.numScreens; i++) {
+ : ScreenPtr pScreen = screenInfo.screens[i];
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if (pDRIPriv &&
+ : pDRIPriv->pDriverInfo->wrap.WakeupHandler)
+ : (*pDRIPriv->pDriverInfo->wrap.WakeupHandler)(i, wakeupData,
+ : result, pReadmask);
+ : }
+ :}
+ :
+ :void
+ :DRIBlockHandler(pointer blockData, OSTimePtr pTimeout, pointer pReadmask)
+ :{
+ : int i;
+ :
+ : for (i = 0; i < screenInfo.numScreens; i++) {
+ : ScreenPtr pScreen = screenInfo.screens[i];
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if (pDRIPriv &&
+ : pDRIPriv->pDriverInfo->wrap.BlockHandler)
+ : (*pDRIPriv->pDriverInfo->wrap.BlockHandler)(i, blockData,
+ : pTimeout, pReadmask);
+ : }
+ :}
+ :
+ :void
+ :DRIDoWakeupHandler(int screenNum, pointer wakeupData,
+ : unsigned long result, pointer pReadmask)
+ :{
+ : ScreenPtr pScreen = screenInfo.screens[screenNum];
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : DRILock(pScreen, 0);
+ : if (pDRIPriv->pDriverInfo->driverSwapMethod == DRI_HIDE_X_CONTEXT) {
+ : /* hide X context by swapping 2D component here */
+ : (*pDRIPriv->pDriverInfo->SwapContext)(pScreen,
+ : DRI_3D_SYNC,
+ : DRI_2D_CONTEXT,
+ : pDRIPriv->partial3DContextStore,
+ : DRI_2D_CONTEXT,
+ : pDRIPriv->hiddenContextStore);
+ : }
+ :}
+ :
+ :void
+ :DRIDoBlockHandler(int screenNum, pointer blockData,
+ : pointer pTimeout, pointer pReadmask)
+ :{
+ : ScreenPtr pScreen = screenInfo.screens[screenNum];
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if (pDRIPriv->pDriverInfo->driverSwapMethod == DRI_HIDE_X_CONTEXT) {
+ : /* hide X context by swapping 2D component here */
+ : (*pDRIPriv->pDriverInfo->SwapContext)(pScreen,
+ : DRI_2D_SYNC,
+ : DRI_NO_CONTEXT,
+ : NULL,
+ : DRI_2D_CONTEXT,
+ : pDRIPriv->partial3DContextStore);
+ : }
+ :
+ : if (pDRIPriv->windowsTouched)
+ : DRM_SPINUNLOCK(&pDRIPriv->pSAREA->drawable_lock, 1);
+ : pDRIPriv->windowsTouched = FALSE;
+ :
+ : DRIUnlock(pScreen);
+ :}
+ :
+ :void
+ :DRISwapContext(int drmFD, void *oldctx, void *newctx)
+ :{
+ : DRIContextPrivPtr oldContext = (DRIContextPrivPtr)oldctx;
+ : DRIContextPrivPtr newContext = (DRIContextPrivPtr)newctx;
+ : ScreenPtr pScreen = newContext->pScreen;
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : void* oldContextStore = NULL;
+ : DRIContextType oldContextType;
+ : void* newContextStore = NULL;
+ : DRIContextType newContextType;
+ : DRISyncType syncType;
+ :#ifdef DEBUG
+ : static int count = 0;
+ :
+ : if (!newContext) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "[DRI] Context Switch Error: oldContext=%x, newContext=%x\n",
+ : oldContext, newContext);
+ : return;
+ : }
+ :
+ : /* usefull for debugging, just print out after n context switches */
+ : if (!count || !(count % 1)) {
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[DRI] Context switch %5d from %p/0x%08x (%d)\n",
+ : count,
+ : oldContext,
+ : oldContext ? oldContext->flags : 0,
+ : oldContext ? oldContext->hwContext : -1);
+ : DRIDrvMsg(pScreen->myNum, X_INFO,
+ : "[DRI] Context switch %5d to %p/0x%08x (%d)\n",
+ : count,
+ : newContext,
+ : newContext ? newContext->flags : 0,
+ : newContext ? newContext->hwContext : -1);
+ : }
+ : ++count;
+ :#endif
+ :
+ : if (!pDRIPriv->pDriverInfo->SwapContext) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "[DRI] DDX driver missing context swap call back\n");
+ : return;
+ : }
+ :
+ : if (pDRIPriv->pDriverInfo->driverSwapMethod == DRI_HIDE_X_CONTEXT) {
+ :
+ : /* only 3D contexts are swapped in this case */
+ : if (oldContext) {
+ : oldContextStore = DRIGetContextStore(oldContext);
+ : oldContext->valid3D = TRUE;
+ : oldContextType = DRI_3D_CONTEXT;
+ : } else {
+ : oldContextType = DRI_NO_CONTEXT;
+ : }
+ : newContextStore = DRIGetContextStore(newContext);
+ : if ((newContext->valid3D) &&
+ : (newContext->hwContext != pDRIPriv->myContext)) {
+ : newContextType = DRI_3D_CONTEXT;
+ : }
+ : else {
+ : newContextType = DRI_2D_CONTEXT;
+ : }
+ : syncType = DRI_3D_SYNC;
+ : }
+ : else /* default: driverSwapMethod == DRI_SERVER_SWAP */ {
+ :
+ : /* optimize 2D context swaps */
+ :
+ : if (newContext->flags & DRI_CONTEXT_2DONLY) {
+ : /* go from 3D context to 2D context and only save 2D
+ : * subset of 3D state
+ : */
+ : oldContextStore = DRIGetContextStore(oldContext);
+ : oldContextType = DRI_2D_CONTEXT;
+ : newContextStore = DRIGetContextStore(newContext);
+ : newContextType = DRI_2D_CONTEXT;
+ : syncType = DRI_3D_SYNC;
+ : pDRIPriv->lastPartial3DContext = oldContext;
+ : }
+ : else if (oldContext->flags & DRI_CONTEXT_2DONLY) {
+ : if (pDRIPriv->lastPartial3DContext == newContext) {
+ : /* go from 2D context back to previous 3D context and
+ : * only restore 2D subset of previous 3D state
+ : */
+ : oldContextStore = DRIGetContextStore(oldContext);
+ : oldContextType = DRI_2D_CONTEXT;
+ : newContextStore = DRIGetContextStore(newContext);
+ : newContextType = DRI_2D_CONTEXT;
+ : syncType = DRI_2D_SYNC;
+ : }
+ : else {
+ : /* go from 2D context to a different 3D context */
+ :
+ : /* call DDX driver to do partial restore */
+ : oldContextStore = DRIGetContextStore(oldContext);
+ : newContextStore =
+ : DRIGetContextStore(pDRIPriv->lastPartial3DContext);
+ : (*pDRIPriv->pDriverInfo->SwapContext)(pScreen,
+ : DRI_2D_SYNC,
+ : DRI_2D_CONTEXT,
+ : oldContextStore,
+ : DRI_2D_CONTEXT,
+ : newContextStore);
+ :
+ : /* now setup for a complete 3D swap */
+ : oldContextStore = newContextStore;
+ : oldContext->valid3D = TRUE;
+ : oldContextType = DRI_3D_CONTEXT;
+ : newContextStore = DRIGetContextStore(newContext);
+ : if ((newContext->valid3D) &&
+ : (newContext->hwContext != pDRIPriv->myContext)) {
+ : newContextType = DRI_3D_CONTEXT;
+ : }
+ : else {
+ : newContextType = DRI_2D_CONTEXT;
+ : }
+ : syncType = DRI_NO_SYNC;
+ : }
+ : }
+ : else {
+ : /* now setup for a complete 3D swap */
+ : oldContextStore = newContextStore;
+ : oldContext->valid3D = TRUE;
+ : oldContextType = DRI_3D_CONTEXT;
+ : newContextStore = DRIGetContextStore(newContext);
+ : if ((newContext->valid3D) &&
+ : (newContext->hwContext != pDRIPriv->myContext)) {
+ : newContextType = DRI_3D_CONTEXT;
+ : }
+ : else {
+ : newContextType = DRI_2D_CONTEXT;
+ : }
+ : syncType = DRI_3D_SYNC;
+ : }
+ : }
+ :
+ : /* call DDX driver to perform the swap */
+ : (*pDRIPriv->pDriverInfo->SwapContext)(pScreen,
+ : syncType,
+ : oldContextType,
+ : oldContextStore,
+ : newContextType,
+ : newContextStore);
+ :}
+ :
+ :void*
+ :DRIGetContextStore(DRIContextPrivPtr context)
+ :{
+ : return((void *)context->pContextStore);
+ :}
+ :
+ :void
+ :DRIWindowExposures(WindowPtr pWin, RegionPtr prgn, RegionPtr bsreg)
+ :{
+ : ScreenPtr pScreen = pWin->drawable.pScreen;
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIDrawablePrivPtr pDRIDrawablePriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin);
+ :
+ : if(pDRIDrawablePriv) {
+ : (*pDRIPriv->pDriverInfo->InitBuffers)(pWin, prgn,
+ : pDRIDrawablePriv->drawableIndex);
+ : }
+ :
+ : /* call lower wrapped functions */
+ : if (pDRIPriv && pDRIPriv->wrap.WindowExposures) {
+ :
+ : /* unwrap */
+ : pScreen->WindowExposures = pDRIPriv->wrap.WindowExposures;
+ :
+ : /* call lower layers */
+ : (*pScreen->WindowExposures)(pWin, prgn, bsreg);
+ :
+ : /* rewrap */
+ : pDRIPriv->wrap.WindowExposures = pScreen->WindowExposures;
+ : pScreen->WindowExposures = DRIWindowExposures;
+ : }
+ :}
+ :
+ :
+ :static int
+ :DRITreeTraversal(WindowPtr pWin, pointer data)
+ :{
+ : DRIDrawablePrivPtr pDRIDrawablePriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin);
+ :
+ : if(pDRIDrawablePriv) {
+ : ScreenPtr pScreen = pWin->drawable.pScreen;
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if(REGION_NUM_RECTS(&(pWin->clipList)) > 0) {
+ : RegionPtr reg = (RegionPtr)data;
+ :
+ : REGION_UNION(pScreen, reg, reg, &(pWin->clipList));
+ : pDRIPriv->nrWalked++;
+ : }
+ :
+ : if(pDRIPriv->nrWindows == pDRIPriv->nrWalked)
+ : return WT_STOPWALKING;
+ : }
+ : return WT_WALKCHILDREN;
+ :}
+ :
+ :void
+ :DRICopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
+ :{
+ : ScreenPtr pScreen = pWin->drawable.pScreen;
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if(!pDRIPriv) return;
+ :
+ : if(pDRIPriv->nrWindowsVisible > 0) {
+ : RegionRec reg;
+ :
+ : REGION_NULL(pScreen, ®);
+ : pDRIPriv->nrWalked = 0;
+ : TraverseTree(pWin, DRITreeTraversal, (pointer)(®));
+ :
+ : if(REGION_NOTEMPTY(pScreen, ®)) {
+ : REGION_TRANSLATE(pScreen, ®, ptOldOrg.x - pWin->drawable.x,
+ : ptOldOrg.y - pWin->drawable.y);
+ : REGION_INTERSECT(pScreen, ®, ®, prgnSrc);
+ :
+ : /* The MoveBuffers interface is not ideal */
+ : (*pDRIPriv->pDriverInfo->MoveBuffers)(pWin, ptOldOrg, ®,
+ : pDRIPriv->pDriverInfo->ddxDrawableTableEntry);
+ : }
+ :
+ : REGION_UNINIT(pScreen, ®);
+ : }
+ :
+ : /* call lower wrapped functions */
+ : if(pDRIPriv->wrap.CopyWindow) {
+ : /* unwrap */
+ : pScreen->CopyWindow = pDRIPriv->wrap.CopyWindow;
+ :
+ : /* call lower layers */
+ : (*pScreen->CopyWindow)(pWin, ptOldOrg, prgnSrc);
+ :
+ : /* rewrap */
+ : pDRIPriv->wrap.CopyWindow = pScreen->CopyWindow;
+ : pScreen->CopyWindow = DRICopyWindow;
+ : }
+ :}
+ :
+ :static void
+ :DRIGetSecs(long *secs, long *usecs)
+ :{
+ : struct timeval tv;
+ :
+ : gettimeofday(&tv, NULL);
+ :
+ : *secs = tv.tv_sec;
+ : *usecs = tv.tv_usec;
+ :}
+ :
+ :static unsigned long
+ :DRIComputeMilliSeconds(unsigned long s_secs, unsigned long s_usecs,
+ : unsigned long f_secs, unsigned long f_usecs)
+ :{
+ : if (f_usecs < s_usecs) {
+ : --f_secs;
+ : f_usecs += 1000000;
+ : }
+ : return (f_secs - s_secs) * 1000 + (f_usecs - s_usecs) / 1000;
+ :}
+ :
+ :static void
+ :DRISpinLockTimeout(drmLock *lock, int val, unsigned long timeout /* in mS */)
+ :{
+ : int count = 10000;
+ :#if !defined(__alpha__) && !defined(__powerpc__)
+ : char ret;
+ :#else
+ : int ret;
+ :#endif
+ : long s_secs, s_usecs;
+ : long f_secs, f_usecs;
+ : long msecs;
+ : long prev = 0;
+ :
+ : DRIGetSecs(&s_secs, &s_usecs);
+ :
+ : do {
+ : DRM_SPINLOCK_COUNT(lock, val, count, ret);
+ : if (!ret) return; /* Got lock */
+ : DRIGetSecs(&f_secs, &f_usecs);
+ : msecs = DRIComputeMilliSeconds(s_secs, s_usecs, f_secs, f_usecs);
+ : if (msecs - prev < 250) count *= 2; /* Not more than 0.5S */
+ : } while (msecs < timeout);
+ :
+ : /* Didn't get lock, so take it. The worst
+ : that can happen is that there is some
+ : garbage written to the wrong part of the
+ : framebuffer that a refresh will repair.
+ : That's undesirable, but better than
+ : locking the server. This should be a
+ : very rare event. */
+ : DRM_SPINLOCK_TAKE(lock, val);
+ :}
+ :
+ :static void
+ :DRILockTree(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if(!pDRIPriv) return;
+ :
+ : /* Restore the last known 3D context if the X context is hidden */
+ : if (pDRIPriv->pDriverInfo->driverSwapMethod == DRI_HIDE_X_CONTEXT) {
+ : (*pDRIPriv->pDriverInfo->SwapContext)(pScreen,
+ : DRI_2D_SYNC,
+ : DRI_NO_CONTEXT,
+ : NULL,
+ : DRI_2D_CONTEXT,
+ : pDRIPriv->partial3DContextStore);
+ : }
+ :
+ : /* Call kernel to release lock */
+ : DRIUnlock(pScreen);
+ :
+ : /* Grab drawable spin lock: a time out between 10 and 30 seconds is
+ : appropriate, since this should never time out except in the case of
+ : client death while the lock is being held. The timeout must be
+ : greater than any reasonable rendering time. */
+ : DRISpinLockTimeout(&pDRIPriv->pSAREA->drawable_lock, 1, 10000); /*10 secs*/
+ :
+ : /* Call kernel flush outstanding buffers and relock */
+ : DRILock(pScreen, DRM_LOCK_QUIESCENT|DRM_LOCK_FLUSH_ALL);
+ :
+ : /* Switch back to our 2D context if the X context is hidden */
+ : if (pDRIPriv->pDriverInfo->driverSwapMethod == DRI_HIDE_X_CONTEXT) {
+ : /* hide X context by swapping 2D component here */
+ : (*pDRIPriv->pDriverInfo->SwapContext)(pScreen,
+ : DRI_3D_SYNC,
+ : DRI_2D_CONTEXT,
+ : pDRIPriv->partial3DContextStore,
+ : DRI_2D_CONTEXT,
+ : pDRIPriv->hiddenContextStore);
+ : }
+ :}
+ :
+ :int
+ :DRIValidateTree(WindowPtr pParent, WindowPtr pChild, VTKind kind)
+ :{
+ : ScreenPtr pScreen = pParent->drawable.pScreen;
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : int returnValue = 1; /* always return 1, not checked by dix/window.c */
+ :
+ : if(!pDRIPriv) return returnValue;
+ :
+ : /* call lower wrapped functions */
+ : if(pDRIPriv->wrap.ValidateTree) {
+ : /* unwrap */
+ : pScreen->ValidateTree = pDRIPriv->wrap.ValidateTree;
+ :
+ : /* call lower layers */
+ : returnValue = (*pScreen->ValidateTree)(pParent, pChild, kind);
+ :
+ : /* rewrap */
+ : pDRIPriv->wrap.ValidateTree = pScreen->ValidateTree;
+ : pScreen->ValidateTree = DRIValidateTree;
+ : }
+ :
+ : return returnValue;
+ :}
+ :
+ :void
+ :DRIPostValidateTree(WindowPtr pParent, WindowPtr pChild, VTKind kind)
+ :{
+ : ScreenPtr pScreen;
+ : DRIScreenPrivPtr pDRIPriv;
+ :
+ : if (pParent) {
+ : pScreen = pParent->drawable.pScreen;
+ : } else {
+ : pScreen = pChild->drawable.pScreen;
+ : }
+ : if(!(pDRIPriv = DRI_SCREEN_PRIV(pScreen))) return;
+ :
+ : if (pDRIPriv->wrap.PostValidateTree) {
+ : /* unwrap */
+ : pScreen->PostValidateTree = pDRIPriv->wrap.PostValidateTree;
+ :
+ : /* call lower layers */
+ : (*pScreen->PostValidateTree)(pParent, pChild, kind);
+ :
+ : /* rewrap */
+ : pDRIPriv->wrap.PostValidateTree = pScreen->PostValidateTree;
+ : pScreen->PostValidateTree = DRIPostValidateTree;
+ : }
+ :}
+ :
+ :void
+ :DRIClipNotify(WindowPtr pWin, int dx, int dy)
+ :{
+ : ScreenPtr pScreen = pWin->drawable.pScreen;
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIDrawablePrivPtr pDRIDrawablePriv;
+ :
+ : if(!pDRIPriv) return;
+ :
+ : if ((pDRIDrawablePriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin))) {
+ : int nrects = REGION_NUM_RECTS(&pWin->clipList);
+ :
+ : if(!pDRIPriv->windowsTouched) {
+ : DRILockTree(pScreen);
+ : pDRIPriv->windowsTouched = TRUE;
+ : }
+ :
+ : if (nrects && !pDRIDrawablePriv->nrects)
+ : DRIIncreaseNumberVisible(pScreen);
+ : else if (!nrects && pDRIDrawablePriv->nrects)
+ : DRIDecreaseNumberVisible(pScreen);
+ : else
+ : DRIDriverClipNotify(pScreen);
+ :
+ : pDRIDrawablePriv->nrects = nrects;
+ :
+ : pDRIPriv->pSAREA->drawableTable[pDRIDrawablePriv->drawableIndex].stamp
+ : = DRIDrawableValidationStamp++;
+ :
+ : drmUpdateDrawableInfo(pDRIPriv->drmFD, pDRIDrawablePriv->hwDrawable,
+ : DRM_DRAWABLE_CLIPRECTS,
+ : nrects, REGION_RECTS(&pWin->clipList));
+ : }
+ :
+ : /* call lower wrapped functions */
+ : if(pDRIPriv->wrap.ClipNotify) {
+ :
+ : /* unwrap */
+ : pScreen->ClipNotify = pDRIPriv->wrap.ClipNotify;
+ :
+ : /* call lower layers */
+ : (*pScreen->ClipNotify)(pWin, dx, dy);
+ :
+ : /* rewrap */
+ : pDRIPriv->wrap.ClipNotify = pScreen->ClipNotify;
+ : pScreen->ClipNotify = DRIClipNotify;
+ : }
+ :}
+ :
+ :CARD32
+ :DRIGetDrawableIndex(WindowPtr pWin)
+ :{
+ : ScreenPtr pScreen = pWin->drawable.pScreen;
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : DRIDrawablePrivPtr pDRIDrawablePriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin);
+ : CARD32 index;
+ :
+ : if (pDRIDrawablePriv) {
+ : index = pDRIDrawablePriv->drawableIndex;
+ : }
+ : else {
+ : index = pDRIPriv->pDriverInfo->ddxDrawableTableEntry;
+ : }
+ :
+ : return index;
+ :}
+ :
+ :unsigned int
+ :DRIGetDrawableStamp(ScreenPtr pScreen, CARD32 drawable_index)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : return pDRIPriv->pSAREA->drawableTable[drawable_index].stamp;
+ :}
+ :
+ :
+ :void
+ :DRIPrintDrawableLock(ScreenPtr pScreen, char *msg)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : ErrorF("%s: %d\n", msg, pDRIPriv->pSAREA->drawable_lock.lock);
+ :}
+ :
+ :void
+ :DRILock(ScreenPtr pScreen, int flags)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if(!pDRIPriv || !pDRIPriv->pLockRefCount) return;
+ :
+ : if (!*pDRIPriv->pLockRefCount) {
+ : DRM_LOCK(pDRIPriv->drmFD, pDRIPriv->pLSAREA, pDRIPriv->myContext, flags);
+ : *pDRIPriv->pLockingContext = pDRIPriv->myContext;
+ : } else if (*pDRIPriv->pLockingContext != pDRIPriv->myContext) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "[DRI] Locking deadlock.\n"
+ : "\tAlready locked with context %d,\n"
+ : "\ttrying to lock with context %d.\n",
+ : pDRIPriv->pLockingContext,
+ : pDRIPriv->myContext);
+ : }
+ : (*pDRIPriv->pLockRefCount)++;
+ :}
+ :
+ :void
+ :DRIUnlock(ScreenPtr pScreen)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if(!pDRIPriv || !pDRIPriv->pLockRefCount) return;
+ :
+ : if (*pDRIPriv->pLockRefCount > 0) {
+ : if (pDRIPriv->myContext != *pDRIPriv->pLockingContext) {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "[DRI] Unlocking inconsistency:\n"
+ : "\tContext %d trying to unlock lock held by context %d\n",
+ : pDRIPriv->pLockingContext,
+ : pDRIPriv->myContext);
+ : }
+ : (*pDRIPriv->pLockRefCount)--;
+ : } else {
+ : DRIDrvMsg(pScreen->myNum, X_ERROR,
+ : "DRIUnlock called when not locked.\n");
+ : return;
+ : }
+ : if (! *pDRIPriv->pLockRefCount)
+ : DRM_UNLOCK(pDRIPriv->drmFD, pDRIPriv->pLSAREA, pDRIPriv->myContext);
+ :}
+ :
+ :void *
+ :DRIGetSAREAPrivate(ScreenPtr pScreen)
+ 6 0.0065 :{ /* DRIGetSAREAPrivate total: 25 0.0272 */
+ 4 0.0044 : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ 2 0.0022 : if (!pDRIPriv) return 0;
+ :
+ 1 0.0011 : return (void *)(((char*)pDRIPriv->pSAREA)+sizeof(XF86DRISAREARec));
+ 12 0.0131 :}
+ :
+ :drm_context_t
+ :DRIGetContext(ScreenPtr pScreen)
+ 8 0.0087 :{ /* DRIGetContext total: 16 0.0174 */
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ 1 0.0011 : if (!pDRIPriv) return 0;
+ :
+ : return pDRIPriv->myContext;
+ 7 0.0076 :}
+ :
+ :void
+ :DRIGetTexOffsetFuncs(ScreenPtr pScreen,
+ : DRITexOffsetStartProcPtr *texOffsetStartFunc,
+ : DRITexOffsetFinishProcPtr *texOffsetFinishFunc)
+ :{
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ :
+ : if (!pDRIPriv) return;
+ :
+ : *texOffsetStartFunc = pDRIPriv->pDriverInfo->texOffsetStart;
+ : *texOffsetFinishFunc = pDRIPriv->pDriverInfo->texOffsetFinish;
+ :}
+ :
+ :/* This lets get at the unwrapped functions so that they can correctly
+ : * call the lowerlevel functions, and choose whether they will be
+ : * called at every level of recursion (eg in validatetree).
+ : */
+ :DRIWrappedFuncsRec *
+ :DRIGetWrappedFuncs(ScreenPtr pScreen)
+ :{
+ : return &(DRI_SCREEN_PRIV(pScreen)->wrap);
+ :}
+ :
+ :/* note that this returns the library version, not the protocol version */
+ :void
+ :DRIQueryVersion(int *majorVersion,
+ : int *minorVersion,
+ : int *patchVersion)
+ :{
+ : *majorVersion = DRIINFO_MAJOR_VERSION;
+ : *minorVersion = DRIINFO_MINOR_VERSION;
+ : *patchVersion = DRIINFO_PATCH_VERSION;
+ :}
+ :
+ :static void
+ :_DRIAdjustFrame(ScrnInfoPtr pScrn, DRIScreenPrivPtr pDRIPriv, int x, int y)
+ :{
+ : pDRIPriv->pSAREA->frame.x = x;
+ : pDRIPriv->pSAREA->frame.y = y;
+ : pDRIPriv->pSAREA->frame.width = pScrn->frameX1 - x + 1;
+ : pDRIPriv->pSAREA->frame.height = pScrn->frameY1 - y + 1;
+ :}
+ :
+ :void
+ :DRIAdjustFrame(int scrnIndex, int x, int y, int flags)
+ :{
+ : ScreenPtr pScreen = screenInfo.screens[scrnIndex];
+ : DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
+ : ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ : int px, py;
+ :
+ : if (!pDRIPriv || !pDRIPriv->pSAREA) {
+ : DRIDrvMsg(scrnIndex, X_ERROR, "[DRI] No SAREA (%p %p)\n",
+ : pDRIPriv, pDRIPriv ? pDRIPriv->pSAREA : NULL);
+ : return;
+ : }
+ :
+ : if (pDRIPriv->fullscreen) {
+ : /* Fix up frame */
+ : pScrn->frameX0 = pDRIPriv->pSAREA->frame.x;
+ : pScrn->frameY0 = pDRIPriv->pSAREA->frame.y;
+ : pScrn->frameX1 = pScrn->frameX0 + pDRIPriv->pSAREA->frame.width - 1;
+ : pScrn->frameY1 = pScrn->frameY0 + pDRIPriv->pSAREA->frame.height - 1;
+ :
+ : /* Fix up cursor */
+ : miPointerPosition(&px, &py);
+ : if (px < pScrn->frameX0) px = pScrn->frameX0;
+ : if (px > pScrn->frameX1) px = pScrn->frameX1;
+ : if (py < pScrn->frameY0) py = pScrn->frameY0;
+ : if (py > pScrn->frameY1) py = pScrn->frameY1;
+ : pScreen->SetCursorPosition(pScreen, px, py, TRUE);
+ : return;
+ : }
+ :
+ : if (pDRIPriv->wrap.AdjustFrame) {
+ : /* unwrap */
+ : pScrn->AdjustFrame = pDRIPriv->wrap.AdjustFrame;
+ : /* call lower layers */
+ : (*pScrn->AdjustFrame)(scrnIndex, x, y, flags);
+ : /* rewrap */
+ : pDRIPriv->wrap.AdjustFrame = pScrn->AdjustFrame;
+ : pScrn->AdjustFrame = DRIAdjustFrame;
+ : }
+ :
+ : _DRIAdjustFrame(pScrn, pDRIPriv, x, y);
+ :}
+ :
+ :/*
+ : * DRIMoveBuffersHelper swaps the regions rects in place leaving you
+ : * a region with the rects in the order that you need to blit them,
+ : * but it is possibly (likely) an invalid region afterwards. If you
+ : * need to use the region again for anything you have to call
+ : * REGION_VALIDATE on it, or better yet, save a copy first.
+ : */
+ :
+ :void
+ :DRIMoveBuffersHelper(
+ : ScreenPtr pScreen,
+ : int dx,
+ : int dy,
+ : int *xdir,
+ : int *ydir,
+ : RegionPtr reg
+ :)
+ :{
+ : BoxPtr extents, pbox, firstBox, lastBox;
+ : BoxRec tmpBox;
+ : int y, nbox;
+ :
+ : extents = REGION_EXTENTS(pScreen, reg);
+ : nbox = REGION_NUM_RECTS(reg);
+ : pbox = REGION_RECTS(reg);
+ :
+ : if((dy > 0) && (dy < (extents->y2 - extents->y1))) {
+ : *ydir = -1;
+ : if(nbox > 1) {
+ : firstBox = pbox;
+ : lastBox = pbox + nbox - 1;
+ : while((unsigned long)firstBox < (unsigned long)lastBox) {
+ : tmpBox = *firstBox;
+ : *firstBox = *lastBox;
+ : *lastBox = tmpBox;
+ : firstBox++;
+ : lastBox--;
+ : }
+ : }
+ : } else *ydir = 1;
+ :
+ : if((dx > 0) && (dx < (extents->x2 - extents->x1))) {
+ : *xdir = -1;
+ : if(nbox > 1) {
+ : firstBox = lastBox = pbox;
+ : y = pbox->y1;
+ : while(--nbox) {
+ : pbox++;
+ : if(pbox->y1 == y) lastBox++;
+ : else {
+ : while((unsigned long)firstBox < (unsigned long)lastBox) {
+ : tmpBox = *firstBox;
+ : *firstBox = *lastBox;
+ : *lastBox = tmpBox;
+ : firstBox++;
+ : lastBox--;
+ : }
+ :
+ : firstBox = lastBox = pbox;
+ : y = pbox->y1;
+ : }
+ : }
+ : while((unsigned long)firstBox < (unsigned long)lastBox) {
+ : tmpBox = *firstBox;
+ : *firstBox = *lastBox;
+ : *lastBox = tmpBox;
+ : firstBox++;
+ : lastBox--;
+ : }
+ : }
+ : } else *xdir = 1;
+ :
+ :}
+ :
+ :char *
+ :DRICreatePCIBusID(pciVideoPtr PciInfo)
+ :{
+ : char *busID;
+ : int domain;
+ : PCITAG tag;
+ :
+ : busID = xalloc(20);
+ : if (busID == NULL)
+ : return NULL;
+ :
+ : tag = pciTag(PciInfo->bus, PciInfo->device, PciInfo->func);
+ : domain = xf86GetPciDomain(tag);
+ : snprintf(busID, 20, "pci:%04x:%02x:%02x.%d", domain,
+ : PCI_BUS_NO_DOMAIN(PciInfo->bus), PciInfo->device, PciInfo->func);
+ : return busID;
+ :}
+ :
+ :static void drmSIGIOHandler(int interrupt, void *closure)
+ :{
+ : unsigned long key;
+ : void *value;
+ : ssize_t count;
+ : drm_ctx_t ctx;
+ : typedef void (*_drmCallback)(int, void *, void *);
+ : char buf[256];
+ : drm_context_t old;
+ : drm_context_t new;
+ : void *oldctx;
+ : void *newctx;
+ : char *pt;
+ : drmHashEntry *entry;
+ : void *hash_table;
+ :
+ : hash_table = drmGetHashTable();
+ :
+ : if (!hash_table) return;
+ : if (drmHashFirst(hash_table, &key, &value)) {
+ : entry = value;
+ : do {
+ :#if 0
+ : fprintf(stderr, "Trying %d\n", entry->fd);
+ :#endif
+ : if ((count = read(entry->fd, buf, sizeof(buf))) > 0) {
+ : buf[count] = '\0';
+ :#if 0
+ : fprintf(stderr, "Got %s\n", buf);
+ :#endif
+ :
+ : for (pt = buf; *pt != ' '; ++pt); /* Find first space */
+ : ++pt;
+ : old = strtol(pt, &pt, 0);
+ : new = strtol(pt, NULL, 0);
+ : oldctx = drmGetContextTag(entry->fd, old);
+ : newctx = drmGetContextTag(entry->fd, new);
+ :#if 0
+ : fprintf(stderr, "%d %d %p %p\n", old, new, oldctx, newctx);
+ :#endif
+ : ((_drmCallback)entry->f)(entry->fd, oldctx, newctx);
+ : ctx.handle = new;
+ : ioctl(entry->fd, DRM_IOCTL_NEW_CTX, &ctx);
+ : }
+ : } while (drmHashNext(hash_table, &key, &value));
+ : }
+ :}
+ :
+ :
+ :int drmInstallSIGIOHandler(int fd, void (*f)(int, void *, void *))
+ :{
+ : drmHashEntry *entry;
+ :
+ : entry = drmGetEntry(fd);
+ : entry->f = f;
+ :
+ : return xf86InstallSIGIOHandler(fd, drmSIGIOHandler, 0);
+ :}
+ :
+ :int drmRemoveSIGIOHandler(int fd)
+ :{
+ : drmHashEntry *entry = drmGetEntry(fd);
+ :
+ : entry->f = NULL;
+ :
+ : return xf86RemoveSIGIOHandler(fd);
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/render/filter.c"
+ *
+ * 34 0.0370
+ */
+
+
+ :/*
+ : * Copyright © 2002 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "misc.h"
+ :#include "scrnintstr.h"
+ :#include "os.h"
+ :#include "regionstr.h"
+ :#include "validate.h"
+ :#include "windowstr.h"
+ :#include "input.h"
+ :#include "resource.h"
+ :#include "colormapst.h"
+ :#include "cursorstr.h"
+ :#include "dixstruct.h"
+ :#include "gcstruct.h"
+ :#include "servermd.h"
+ :#include "picturestr.h"
+ :
+ :static char **filterNames;
+ :static int nfilterNames;
+ :
+ :/*
+ : * standard but not required filters don't have constant indices
+ : */
+ :
+ :int
+ :PictureGetFilterId (char *filter, int len, Bool makeit)
+ 3 0.0033 :{ /* PictureGetFilterId total: 16 0.0174 */
+ : int i;
+ : char *name;
+ : char **names;
+ :
+ : if (len < 0)
+ 7 0.0076 : len = strlen (filter);
+ : for (i = 0; i < nfilterNames; i++)
+ 6 0.0065 : if (!CompareISOLatin1Lowered ((unsigned char *) filterNames[i], -1, (unsigned char *) filter, len))
+ : return i;
+ : if (!makeit)
+ : return -1;
+ : name = xalloc (len + 1);
+ : if (!name)
+ : return -1;
+ : memcpy (name, filter, len);
+ : name[len] = '\0';
+ : if (filterNames)
+ : names = xrealloc (filterNames, (nfilterNames + 1) * sizeof (char *));
+ : else
+ : names = xalloc (sizeof (char *));
+ : if (!names)
+ : {
+ : xfree (name);
+ : return -1;
+ : }
+ : filterNames = names;
+ : i = nfilterNames++;
+ : filterNames[i] = name;
+ : return i;
+ :}
+ :
+ :static Bool
+ :PictureSetDefaultIds (void)
+ :{
+ : /* careful here -- this list must match the #define values */
+ :
+ : if (PictureGetFilterId (FilterNearest, -1, TRUE) != PictFilterNearest)
+ : return FALSE;
+ : if (PictureGetFilterId (FilterBilinear, -1, TRUE) != PictFilterBilinear)
+ : return FALSE;
+ :
+ : if (PictureGetFilterId (FilterFast, -1, TRUE) != PictFilterFast)
+ : return FALSE;
+ : if (PictureGetFilterId (FilterGood, -1, TRUE) != PictFilterGood)
+ : return FALSE;
+ : if (PictureGetFilterId (FilterBest, -1, TRUE) != PictFilterBest)
+ : return FALSE;
+ :
+ : if (PictureGetFilterId (FilterConvolution, -1, TRUE) != PictFilterConvolution)
+ : return FALSE;
+ : return TRUE;
+ :}
+ :
+ :char *
+ :PictureGetFilterName (int id)
+ :{
+ : if (0 <= id && id < nfilterNames)
+ : return filterNames[id];
+ : else
+ : return 0;
+ :}
+ :
+ :static void
+ :PictureFreeFilterIds (void)
+ :{
+ : int i;
+ :
+ : for (i = 0; i < nfilterNames; i++)
+ : xfree (filterNames[i]);
+ : xfree (filterNames);
+ : nfilterNames = 0;
+ : filterNames = 0;
+ :}
+ :
+ :_X_EXPORT int
+ :PictureAddFilter (ScreenPtr pScreen,
+ : char *filter,
+ : PictFilterValidateParamsProcPtr ValidateParams)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : int id = PictureGetFilterId (filter, -1, TRUE);
+ : int i;
+ : PictFilterPtr filters;
+ :
+ : if (id < 0)
+ : return -1;
+ : /*
+ : * It's an error to attempt to reregister a filter
+ : */
+ : for (i = 0; i < ps->nfilters; i++)
+ : if (ps->filters[i].id == id)
+ : return -1;
+ : if (ps->filters)
+ : filters = xrealloc (ps->filters, (ps->nfilters + 1) * sizeof (PictFilterRec));
+ : else
+ : filters = xalloc (sizeof (PictFilterRec));
+ : if (!filters)
+ : return -1;
+ : ps->filters = filters;
+ : i = ps->nfilters++;
+ : ps->filters[i].name = PictureGetFilterName (id);
+ : ps->filters[i].id = id;
+ : ps->filters[i].ValidateParams = ValidateParams;
+ : return id;
+ :}
+ :
+ :_X_EXPORT Bool
+ :PictureSetFilterAlias (ScreenPtr pScreen, char *filter, char *alias)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : int filter_id = PictureGetFilterId (filter, -1, FALSE);
+ : int alias_id = PictureGetFilterId (alias, -1, TRUE);
+ : int i;
+ :
+ : if (filter_id < 0 || alias_id < 0)
+ : return FALSE;
+ : for (i = 0; i < ps->nfilterAliases; i++)
+ : if (ps->filterAliases[i].alias_id == alias_id)
+ : break;
+ : if (i == ps->nfilterAliases)
+ : {
+ : PictFilterAliasPtr aliases;
+ :
+ : if (ps->filterAliases)
+ : aliases = xrealloc (ps->filterAliases,
+ : (ps->nfilterAliases + 1) *
+ : sizeof (PictFilterAliasRec));
+ : else
+ : aliases = xalloc (sizeof (PictFilterAliasRec));
+ : if (!aliases)
+ : return FALSE;
+ : ps->filterAliases = aliases;
+ : ps->filterAliases[i].alias = PictureGetFilterName (alias_id);
+ : ps->filterAliases[i].alias_id = alias_id;
+ : ps->nfilterAliases++;
+ : }
+ : ps->filterAliases[i].filter_id = filter_id;
+ : return TRUE;
+ :}
+ :
+ :PictFilterPtr
+ :PictureFindFilter (ScreenPtr pScreen, char *name, int len)
+ 2 0.0022 :{ /* PictureFindFilter total: 8 0.0087 */
+ 1 0.0011 : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ : int id = PictureGetFilterId (name, len, FALSE);
+ : int i;
+ :
+ : if (id < 0)
+ : return 0;
+ : /* Check for an alias, allow them to recurse */
+ : for (i = 0; i < ps->nfilterAliases; i++)
+ 4 0.0044 : if (ps->filterAliases[i].alias_id == id)
+ : {
+ : id = ps->filterAliases[i].filter_id;
+ : i = 0;
+ : }
+ : /* find the filter */
+ : for (i = 0; i < ps->nfilters; i++)
+ : if (ps->filters[i].id == id)
+ : return &ps->filters[i];
+ : return 0;
+ 1 0.0011 :}
+ :
+ :static Bool
+ :convolutionFilterValidateParams (PicturePtr pPicture,
+ : int filter,
+ : xFixed *params,
+ : int nparams)
+ :{
+ : if (nparams < 3)
+ : return FALSE;
+ :
+ : if (xFixedFrac (params[0]) || xFixedFrac (params[1]))
+ : return FALSE;
+ :
+ : nparams -= 2;
+ : if ((xFixedToInt (params[0]) * xFixedToInt (params[1])) > nparams)
+ : return FALSE;
+ :
+ : return TRUE;
+ :}
+ :
+ :
+ :Bool
+ :PictureSetDefaultFilters (ScreenPtr pScreen)
+ :{
+ : if (!filterNames)
+ : if (!PictureSetDefaultIds ())
+ : return FALSE;
+ : if (PictureAddFilter (pScreen, FilterNearest, 0) < 0)
+ : return FALSE;
+ : if (PictureAddFilter (pScreen, FilterBilinear, 0) < 0)
+ : return FALSE;
+ :
+ : if (!PictureSetFilterAlias (pScreen, FilterNearest, FilterFast))
+ : return FALSE;
+ : if (!PictureSetFilterAlias (pScreen, FilterBilinear, FilterGood))
+ : return FALSE;
+ : if (!PictureSetFilterAlias (pScreen, FilterBilinear, FilterBest))
+ : return FALSE;
+ :
+ : if (PictureAddFilter (pScreen, FilterConvolution, convolutionFilterValidateParams) < 0)
+ : return FALSE;
+ :
+ : return TRUE;
+ :}
+ :
+ :void
+ :PictureResetFilters (ScreenPtr pScreen)
+ :{
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ :
+ : xfree (ps->filters);
+ : xfree (ps->filterAliases);
+ : PictureFreeFilterIds ();
+ :}
+ :
+ :int
+ :SetPictureFilter (PicturePtr pPicture, char *name, int len, xFixed *params, int nparams)
+ :{ /* SetPictureFilter total: 10 0.0109 */
+ : PictFilterPtr pFilter;
+ : xFixed *new_params;
+ : int i, s, result;
+ :
+ 3 0.0033 : pFilter = PictureFindFilter (screenInfo.screens[0], name, len);
+ :
+ : if (pPicture->pDrawable == NULL) {
+ : /* For source pictures, the picture isn't tied to a screen. So, ensure
+ : * that all screens can handle a filter we set for the picture.
+ : */
+ : for (s = 0; s < screenInfo.numScreens; s++) {
+ : if (PictureFindFilter (screenInfo.screens[s], name, len)->id !=
+ : pFilter->id)
+ : {
+ : return BadMatch;
+ : }
+ : }
+ : }
+ :
+ : if (!pFilter)
+ : return BadName;
+ : if (pFilter->ValidateParams)
+ : {
+ : if (!(*pFilter->ValidateParams) (pPicture, pFilter->id, params, nparams))
+ : return BadMatch;
+ : }
+ : else if (nparams)
+ : return BadMatch;
+ :
+ 5 0.0054 : if (nparams != pPicture->filter_nparams)
+ : {
+ : new_params = xalloc (nparams * sizeof (xFixed));
+ : if (!new_params)
+ : return BadAlloc;
+ : xfree (pPicture->filter_params);
+ : pPicture->filter_params = new_params;
+ : pPicture->filter_nparams = nparams;
+ : }
+ : for (i = 0; i < nparams; i++)
+ : pPicture->filter_params[i] = params[i];
+ : pPicture->filter = pFilter->id;
+ :
+ : if (pPicture->pDrawable) {
+ : ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ :
+ 1 0.0011 : result = (*ps->ChangePictureFilter) (pPicture, pPicture->filter,
+ : params, nparams);
+ : return result;
+ : }
+ : return Success;
+ 1 0.0011 :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/fb/fbgc.c"
+ *
+ * 34 0.0370
+ */
+
+
+ :/*
+ : * Copyright © 1998 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <stdlib.h>
+ :
+ :#include "fb.h"
+ :
+ :const GCFuncs fbGCFuncs = {
+ : fbValidateGC,
+ : miChangeGC,
+ : miCopyGC,
+ : miDestroyGC,
+ : miChangeClip,
+ : miDestroyClip,
+ : miCopyClip,
+ :};
+ :
+ :const GCOps fbGCOps = {
+ : fbFillSpans,
+ : fbSetSpans,
+ : fbPutImage,
+ : fbCopyArea,
+ : fbCopyPlane,
+ : fbPolyPoint,
+ : fbPolyLine,
+ : fbPolySegment,
+ : fbPolyRectangle,
+ : fbPolyArc,
+ : miFillPolygon,
+ : fbPolyFillRect,
+ : fbPolyFillArc,
+ : miPolyText8,
+ : miPolyText16,
+ : miImageText8,
+ : miImageText16,
+ : fbImageGlyphBlt,
+ : fbPolyGlyphBlt,
+ : fbPushPixels
+ :};
+ :
+ :Bool
+ :fbCreateGC(GCPtr pGC)
+ :{
+ : pGC->clientClip = NULL;
+ : pGC->clientClipType = CT_NONE;
+ :
+ : pGC->ops = (GCOps *) &fbGCOps;
+ : pGC->funcs = (GCFuncs *) &fbGCFuncs;
+ :
+ : /* fb wants to translate before scan conversion */
+ : pGC->miTranslate = 1;
+ :
+ : fbGetRotatedPixmap(pGC) = 0;
+ : fbGetExpose(pGC) = 1;
+ : fbGetFreeCompClip(pGC) = 0;
+ : fbGetCompositeClip(pGC) = 0;
+ : fbGetGCPrivate(pGC)->bpp = BitsPerPixel (pGC->depth);
+ : return TRUE;
+ :}
+ :
+ :/*
+ : * Pad pixmap to FB_UNIT bits wide
+ : */
+ :void
+ :fbPadPixmap (PixmapPtr pPixmap)
+ :{
+ : int width;
+ : FbBits *bits;
+ : FbBits b;
+ : FbBits mask;
+ : int height;
+ : int w;
+ : int stride;
+ : int bpp;
+ : int xOff, yOff;
+ :
+ : fbGetDrawable (&pPixmap->drawable, bits, stride, bpp, xOff, yOff);
+ :
+ : width = pPixmap->drawable.width * pPixmap->drawable.bitsPerPixel;
+ : height = pPixmap->drawable.height;
+ : mask = FbBitsMask (0, width);
+ : while (height--)
+ : {
+ : b = READ(bits) & mask;
+ : w = width;
+ : while (w < FB_UNIT)
+ : {
+ : b = b | FbScrRight(b, w);
+ : w <<= 1;
+ : }
+ : WRITE(bits, b);
+ : bits += stride;
+ : }
+ :
+ : fbFinishAccess (&pPixmap->drawable);
+ :}
+ :
+ :/*
+ : * Verify that 'bits' repeats every 'len' bits
+ : */
+ :static Bool
+ :fbBitsRepeat (FbBits bits, int len, int width)
+ :{
+ : FbBits mask = FbBitsMask(0, len);
+ : FbBits orig = bits & mask;
+ : int i;
+ :
+ : if (width > FB_UNIT)
+ : width = FB_UNIT;
+ : for (i = 0; i < width / len; i++)
+ : {
+ : if ((bits & mask) != orig)
+ : return FALSE;
+ : bits = FbScrLeft(bits,len);
+ : }
+ : return TRUE;
+ :}
+ :
+ :/*
+ : * Check whether an entire bitmap line is a repetition of
+ : * the first 'len' bits
+ : */
+ :static Bool
+ :fbLineRepeat (FbBits *bits, int len, int width)
+ :{
+ : FbBits first = bits[0];
+ :
+ : if (!fbBitsRepeat (first, len, width))
+ : return FALSE;
+ : width = (width + FB_UNIT-1) >> FB_SHIFT;
+ : bits++;
+ : while (--width)
+ : if (READ(bits) != first)
+ : return FALSE;
+ : return TRUE;
+ :}
+ :
+ :/*
+ : * The even stipple code wants the first FB_UNIT/bpp bits on
+ : * each scanline to represent the entire stipple
+ : */
+ :static Bool
+ :fbCanEvenStipple (PixmapPtr pStipple, int bpp)
+ :{
+ : int len = FB_UNIT / bpp;
+ : FbBits *bits;
+ : int stride;
+ : int stip_bpp;
+ : int stipXoff, stipYoff;
+ : int h;
+ :
+ : /* can't even stipple 24bpp drawables */
+ : if ((bpp & (bpp-1)) != 0)
+ : return FALSE;
+ : /* make sure the stipple width is a multiple of the even stipple width */
+ : if (pStipple->drawable.width % len != 0)
+ : return FALSE;
+ : fbGetDrawable (&pStipple->drawable, bits, stride, stip_bpp, stipXoff, stipYoff);
+ : h = pStipple->drawable.height;
+ : /* check to see that the stipple repeats horizontally */
+ : while (h--)
+ : {
+ : if (!fbLineRepeat (bits, len, pStipple->drawable.width)) {
+ : fbFinishAccess (&pStipple->drawable);
+ : return FALSE;
+ : }
+ : bits += stride;
+ : }
+ : fbFinishAccess (&pStipple->drawable);
+ : return TRUE;
+ :}
+ :
+ :void
+ :fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
+ 2 0.0022 :{ /* fbValidateGC total: 34 0.0370 */
+ : FbGCPrivPtr pPriv = fbGetGCPrivate(pGC);
+ : FbBits mask;
+ :
+ 1 0.0011 : pGC->lastWinOrg.x = pDrawable->x;
+ : pGC->lastWinOrg.y = pDrawable->y;
+ :
+ : /*
+ : * if the client clip is different or moved OR the subwindowMode has
+ : * changed OR the window's clip has changed since the last validation
+ : * we need to recompute the composite clip
+ : */
+ :
+ : if ((changes & (GCClipXOrigin|GCClipYOrigin|GCClipMask|GCSubwindowMode)) ||
+ : (pDrawable->serialNumber != (pGC->serialNumber & DRAWABLE_SERIAL_BITS))
+ : )
+ : {
+ : miComputeCompositeClip (pGC, pDrawable);
+ 1 0.0011 : pPriv->oneRect = REGION_NUM_RECTS(fbGetCompositeClip(pGC)) == 1;
+ : }
+ :
+ :#ifdef FB_24_32BIT
+ : if (pPriv->bpp != pDrawable->bitsPerPixel)
+ : {
+ : changes |= GCStipple|GCForeground|GCBackground|GCPlaneMask;
+ : pPriv->bpp = pDrawable->bitsPerPixel;
+ : }
+ : if ((changes & GCTile) && fbGetRotatedPixmap(pGC))
+ : {
+ : (*pGC->pScreen->DestroyPixmap) (fbGetRotatedPixmap(pGC));
+ : fbGetRotatedPixmap(pGC) = 0;
+ : }
+ :
+ : if (pGC->fillStyle == FillTiled)
+ : {
+ : PixmapPtr pOldTile, pNewTile;
+ :
+ : pOldTile = pGC->tile.pixmap;
+ : if (pOldTile->drawable.bitsPerPixel != pDrawable->bitsPerPixel)
+ : {
+ : pNewTile = fbGetRotatedPixmap(pGC);
+ : if (!pNewTile || pNewTile ->drawable.bitsPerPixel != pDrawable->bitsPerPixel)
+ : {
+ : if (pNewTile)
+ : (*pGC->pScreen->DestroyPixmap) (pNewTile);
+ : pNewTile = fb24_32ReformatTile (pOldTile, pDrawable->bitsPerPixel);
+ : }
+ : if (pNewTile)
+ : {
+ : fbGetRotatedPixmap(pGC) = pOldTile;
+ : pGC->tile.pixmap = pNewTile;
+ : changes |= GCTile;
+ : }
+ : }
+ : }
+ :#endif
+ : if (changes & GCTile)
+ : {
+ : if (!pGC->tileIsPixel &&
+ : FbEvenTile (pGC->tile.pixmap->drawable.width *
+ : pDrawable->bitsPerPixel))
+ : fbPadPixmap (pGC->tile.pixmap);
+ : }
+ 1 0.0011 : if (changes & GCStipple)
+ : {
+ : pPriv->evenStipple = FALSE;
+ :
+ 3 0.0033 : if (pGC->stipple) {
+ :
+ : /* can we do an even stipple ?? */
+ : if (FbEvenStip (pGC->stipple->drawable.width,
+ : pDrawable->bitsPerPixel) &&
+ : (fbCanEvenStipple (pGC->stipple, pDrawable->bitsPerPixel)))
+ : pPriv->evenStipple = TRUE;
+ :
+ : if (pGC->stipple->drawable.width * pDrawable->bitsPerPixel < FB_UNIT)
+ : fbPadPixmap (pGC->stipple);
+ : }
+ : }
+ : /*
+ : * Recompute reduced rop values
+ : */
+ 3 0.0033 : if (changes & (GCForeground|GCBackground|GCPlaneMask|GCFunction))
+ : {
+ : int s;
+ : FbBits depthMask;
+ :
+ 3 0.0033 : mask = FbFullMask(pDrawable->bitsPerPixel);
+ 2 0.0022 : depthMask = FbFullMask(pDrawable->depth);
+ :
+ 1 0.0011 : pPriv->fg = pGC->fgPixel & mask;
+ 1 0.0011 : pPriv->bg = pGC->bgPixel & mask;
+ :
+ : if ((pGC->planemask & depthMask) == depthMask)
+ 2 0.0022 : pPriv->pm = mask;
+ : else
+ : pPriv->pm = pGC->planemask & mask;
+ :
+ 1 0.0011 : s = pDrawable->bitsPerPixel;
+ : while (s < FB_UNIT)
+ : {
+ : pPriv->fg |= pPriv->fg << s;
+ : pPriv->bg |= pPriv->bg << s;
+ : pPriv->pm |= pPriv->pm << s;
+ : s <<= 1;
+ : }
+ 7 0.0076 : pPriv->and = fbAnd(pGC->alu, pPriv->fg, pPriv->pm);
+ 1 0.0011 : pPriv->xor = fbXor(pGC->alu, pPriv->fg, pPriv->pm);
+ : pPriv->bgand = fbAnd(pGC->alu, pPriv->bg, pPriv->pm);
+ 3 0.0033 : pPriv->bgxor = fbXor(pGC->alu, pPriv->bg, pPriv->pm);
+ : }
+ : if (changes & GCDashList)
+ : {
+ : unsigned short n = pGC->numInDashList;
+ : unsigned char *dash = pGC->dash;
+ : unsigned int dashLength = 0;
+ :
+ : while (n--)
+ 1 0.0011 : dashLength += (unsigned int ) *dash++;
+ : pPriv->dashLength = dashLength;
+ : }
+ 1 0.0011 :}
+/*
+ * Total samples for file : "pixman-mmx.c"
+ *
+ * 33 0.0359
+ */
+
+<credited to line zero> 33 0.0359 :
+ /* __i686.get_pc_thunk.bx total: 15 0.0163 */
+ /* __divdi3 total: 18 0.0196 */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/mi/migc.c"
+ *
+ * 31 0.0338
+ */
+
+
+ :/*
+ :
+ :Copyright 1993, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included
+ :in all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ :OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ :MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ :IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ :OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ :ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ :OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall
+ :not be used in advertising or otherwise to promote the sale, use or
+ :other dealings in this Software without prior written authorization
+ :from The Open Group.
+ :
+ :*/
+ :
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "scrnintstr.h"
+ :#include "gcstruct.h"
+ :#include "pixmapstr.h"
+ :#include "windowstr.h"
+ :#include "migc.h"
+ :
+ :/* ARGSUSED */
+ :_X_EXPORT void
+ :miChangeGC(pGC, mask)
+ : GCPtr pGC;
+ : unsigned long mask;
+ 6 0.0065 :{ /* miChangeGC total: 6 0.0065 */
+ : return;
+ :}
+ :
+ :_X_EXPORT void
+ :miDestroyGC(pGC)
+ : GCPtr pGC;
+ :{
+ : if (pGC->pRotatedPixmap)
+ : (*pGC->pScreen->DestroyPixmap) (pGC->pRotatedPixmap);
+ : if (pGC->freeCompClip)
+ : REGION_DESTROY(pGC->pScreen, pGC->pCompositeClip);
+ : miDestroyGCOps(pGC->ops);
+ :}
+ :
+ :/*
+ : * create a private op array for a gc
+ : */
+ :
+ :_X_EXPORT GCOpsPtr
+ :miCreateGCOps(prototype)
+ : GCOpsPtr prototype;
+ :{
+ : GCOpsPtr ret;
+ :
+ : /* XXX */ Must_have_memory = TRUE;
+ : ret = (GCOpsPtr) xalloc(sizeof(GCOps));
+ : /* XXX */ Must_have_memory = FALSE;
+ : if (!ret)
+ : return 0;
+ : *ret = *prototype;
+ : ret->devPrivate.val = 1;
+ : return ret;
+ :}
+ :
+ :_X_EXPORT void
+ :miDestroyGCOps(ops)
+ : GCOpsPtr ops;
+ :{
+ : if (ops->devPrivate.val)
+ : xfree(ops);
+ :}
+ :
+ :
+ :_X_EXPORT void
+ :miDestroyClip(pGC)
+ : GCPtr pGC;
+ 1 0.0011 :{ /* miDestroyClip total: 1 0.0011 */
+ : if (pGC->clientClipType == CT_NONE)
+ : return;
+ : else if (pGC->clientClipType == CT_PIXMAP)
+ : {
+ : (*pGC->pScreen->DestroyPixmap) ((PixmapPtr) (pGC->clientClip));
+ : }
+ : else
+ : {
+ : /*
+ : * we know we'll never have a list of rectangles, since ChangeClip
+ : * immediately turns them into a region
+ : */
+ : REGION_DESTROY(pGC->pScreen, pGC->clientClip);
+ : }
+ : pGC->clientClip = NULL;
+ : pGC->clientClipType = CT_NONE;
+ :}
+ :
+ :_X_EXPORT void
+ :miChangeClip(pGC, type, pvalue, nrects)
+ : GCPtr pGC;
+ : int type;
+ : pointer pvalue;
+ : int nrects;
+ 3 0.0033 :{ /* miChangeClip total: 4 0.0044 */
+ : (*pGC->funcs->DestroyClip) (pGC);
+ : if (type == CT_PIXMAP)
+ : {
+ : /* convert the pixmap to a region */
+ : pGC->clientClip = (pointer) BITMAP_TO_REGION(pGC->pScreen,
+ : (PixmapPtr) pvalue);
+ : (*pGC->pScreen->DestroyPixmap) (pvalue);
+ : }
+ : else if (type == CT_REGION)
+ : {
+ : /* stuff the region in the GC */
+ : pGC->clientClip = pvalue;
+ : }
+ 1 0.0011 : else if (type != CT_NONE)
+ : {
+ : pGC->clientClip = (pointer) RECTS_TO_REGION(pGC->pScreen, nrects,
+ : (xRectangle *) pvalue,
+ : type);
+ : xfree(pvalue);
+ : }
+ : pGC->clientClipType = (type != CT_NONE && pGC->clientClip) ? CT_REGION : CT_NONE;
+ : pGC->stateChanges |= GCClipMask;
+ :}
+ :
+ :_X_EXPORT void
+ :miCopyClip(pgcDst, pgcSrc)
+ : GCPtr pgcDst, pgcSrc;
+ :{
+ : RegionPtr prgnNew;
+ :
+ : switch (pgcSrc->clientClipType)
+ : {
+ : case CT_PIXMAP:
+ : ((PixmapPtr) pgcSrc->clientClip)->refcnt++;
+ : /* Fall through !! */
+ : case CT_NONE:
+ : (*pgcDst->funcs->ChangeClip) (pgcDst, (int) pgcSrc->clientClipType,
+ : pgcSrc->clientClip, 0);
+ : break;
+ : case CT_REGION:
+ : prgnNew = REGION_CREATE(pgcSrc->pScreen, NULL, 1);
+ : REGION_COPY(pgcDst->pScreen, prgnNew,
+ : (RegionPtr) (pgcSrc->clientClip));
+ : (*pgcDst->funcs->ChangeClip) (pgcDst, CT_REGION, (pointer) prgnNew, 0);
+ : break;
+ : }
+ :}
+ :
+ :/* ARGSUSED */
+ :_X_EXPORT void
+ :miCopyGC(pGCSrc, changes, pGCDst)
+ : GCPtr pGCSrc;
+ : unsigned long changes;
+ : GCPtr pGCDst;
+ :{
+ : return;
+ :}
+ :
+ :_X_EXPORT void
+ :miComputeCompositeClip(pGC, pDrawable)
+ : GCPtr pGC;
+ : DrawablePtr pDrawable;
+ 4 0.0044 :{ /* miComputeCompositeClip total: 20 0.0218 */
+ : ScreenPtr pScreen;
+ :
+ : /* This prevents warnings about pScreen not being used. */
+ : pGC->pScreen = pScreen = pGC->pScreen;
+ :
+ : if (pDrawable->type == DRAWABLE_WINDOW)
+ : {
+ : WindowPtr pWin = (WindowPtr) pDrawable;
+ : RegionPtr pregWin;
+ : Bool freeTmpClip, freeCompClip;
+ :
+ : if (pGC->subWindowMode == IncludeInferiors)
+ : {
+ : pregWin = NotClippedByChildren(pWin);
+ : freeTmpClip = TRUE;
+ : }
+ : else
+ : {
+ : pregWin = &pWin->clipList;
+ : freeTmpClip = FALSE;
+ : }
+ : freeCompClip = pGC->freeCompClip;
+ :
+ : /*
+ : * if there is no client clip, we can get by with just keeping the
+ : * pointer we got, and remembering whether or not should destroy (or
+ : * maybe re-use) it later. this way, we avoid unnecessary copying of
+ : * regions. (this wins especially if many clients clip by children
+ : * and have no client clip.)
+ : */
+ : if (pGC->clientClipType == CT_NONE)
+ : {
+ : if (freeCompClip)
+ : REGION_DESTROY(pScreen, pGC->pCompositeClip);
+ : pGC->pCompositeClip = pregWin;
+ : pGC->freeCompClip = freeTmpClip;
+ : }
+ : else
+ : {
+ : /*
+ : * we need one 'real' region to put into the composite clip. if
+ : * pregWin the current composite clip are real, we can get rid of
+ : * one. if pregWin is real and the current composite clip isn't,
+ : * use pregWin for the composite clip. if the current composite
+ : * clip is real and pregWin isn't, use the current composite
+ : * clip. if neither is real, create a new region.
+ : */
+ :
+ : REGION_TRANSLATE(pScreen, pGC->clientClip,
+ : pDrawable->x + pGC->clipOrg.x,
+ : pDrawable->y + pGC->clipOrg.y);
+ :
+ : if (freeCompClip)
+ : {
+ : REGION_INTERSECT(pGC->pScreen, pGC->pCompositeClip,
+ : pregWin, pGC->clientClip);
+ : if (freeTmpClip)
+ : REGION_DESTROY(pScreen, pregWin);
+ : }
+ : else if (freeTmpClip)
+ : {
+ : REGION_INTERSECT(pScreen, pregWin, pregWin, pGC->clientClip);
+ : pGC->pCompositeClip = pregWin;
+ : }
+ : else
+ : {
+ 1 0.0011 : pGC->pCompositeClip = REGION_CREATE(pScreen, NullBox, 0);
+ : REGION_INTERSECT(pScreen, pGC->pCompositeClip,
+ : pregWin, pGC->clientClip);
+ : }
+ : pGC->freeCompClip = TRUE;
+ : REGION_TRANSLATE(pScreen, pGC->clientClip,
+ : -(pDrawable->x + pGC->clipOrg.x),
+ : -(pDrawable->y + pGC->clipOrg.y));
+ : }
+ : } /* end of composite clip for a window */
+ : else
+ : {
+ : BoxRec pixbounds;
+ :
+ : /* XXX should we translate by drawable.x/y here ? */
+ : /* If you want pixmaps in offscreen memory, yes */
+ 3 0.0033 : pixbounds.x1 = pDrawable->x;
+ 1 0.0011 : pixbounds.y1 = pDrawable->y;
+ : pixbounds.x2 = pDrawable->x + pDrawable->width;
+ : pixbounds.y2 = pDrawable->y + pDrawable->height;
+ :
+ 1 0.0011 : if (pGC->freeCompClip)
+ : {
+ 8 0.0087 : REGION_RESET(pScreen, pGC->pCompositeClip, &pixbounds);
+ : }
+ : else
+ : {
+ : pGC->freeCompClip = TRUE;
+ : pGC->pCompositeClip = REGION_CREATE(pScreen, &pixbounds, 1);
+ : }
+ :
+ : if (pGC->clientClipType == CT_REGION)
+ : {
+ : if(pDrawable->x || pDrawable->y) {
+ : REGION_TRANSLATE(pScreen, pGC->clientClip,
+ : pDrawable->x + pGC->clipOrg.x,
+ : pDrawable->y + pGC->clipOrg.y);
+ : REGION_INTERSECT(pScreen, pGC->pCompositeClip,
+ : pGC->pCompositeClip, pGC->clientClip);
+ : REGION_TRANSLATE(pScreen, pGC->clientClip,
+ : -(pDrawable->x + pGC->clipOrg.x),
+ : -(pDrawable->y + pGC->clipOrg.y));
+ : } else {
+ 1 0.0011 : REGION_TRANSLATE(pScreen, pGC->pCompositeClip,
+ : -pGC->clipOrg.x, -pGC->clipOrg.y);
+ : REGION_INTERSECT(pScreen, pGC->pCompositeClip,
+ : pGC->pCompositeClip, pGC->clientClip);
+ : REGION_TRANSLATE(pScreen, pGC->pCompositeClip,
+ : pGC->clipOrg.x, pGC->clipOrg.y);
+ : }
+ : }
+ : } /* end of composite clip for pixmap */
+ 1 0.0011 :} /* end miComputeCompositeClip */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/Xext/xvmain.c"
+ *
+ * 26 0.0283
+ */
+
+
+ :/***********************************************************
+ :Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts,
+ :and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 names of Digital or MIT not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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.
+ :
+ :******************************************************************/
+ :
+ :/*
+ :** File:
+ :**
+ :** xvmain.c --- Xv server extension main device independent module.
+ :**
+ :** Author:
+ :**
+ :** David Carver (Digital Workstation Engineering/Project Athena)
+ :**
+ :** Revisions:
+ :**
+ :** 04.09.91 Carver
+ :** - change: stop video always generates an event even when video
+ :** wasn't active
+ :**
+ :** 29.08.91 Carver
+ :** - change: unrealizing windows no longer preempts video
+ :**
+ :** 11.06.91 Carver
+ :** - changed SetPortControl to SetPortAttribute
+ :** - changed GetPortControl to GetPortAttribute
+ :** - changed QueryBestSize
+ :**
+ :** 28.05.91 Carver
+ :** - fixed Put and Get requests to not preempt operations to same drawable
+ :**
+ :** 15.05.91 Carver
+ :** - version 2.0 upgrade
+ :**
+ :** 19.03.91 Carver
+ :** - fixed Put and Get requests to honor grabbed ports.
+ :** - fixed Video requests to update di structure with new drawable, and
+ :** client after calling ddx.
+ :**
+ :** 24.01.91 Carver
+ :** - version 1.4 upgrade
+ :**
+ :** Notes:
+ :**
+ :** Port structures reference client structures in a two different
+ :** ways: when grabs, or video is active. Each reference is encoded
+ :** as fake client resources and thus when the client is goes away so
+ :** does the reference (it is zeroed). No other action is taken, so
+ :** video doesn't necessarily stop. It probably will as a result of
+ :** other resources going away, but if a client starts video using
+ :** none of its own resources, then the video will continue to play
+ :** after the client disappears.
+ :**
+ :**
+ :*/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <string.h>
+ :
+ :#include <X11/X.h>
+ :#include <X11/Xproto.h>
+ :#include "misc.h"
+ :#include "os.h"
+ :#include "scrnintstr.h"
+ :#include "windowstr.h"
+ :#include "pixmapstr.h"
+ :#include "gc.h"
+ :#include "extnsionst.h"
+ :#include "dixstruct.h"
+ :#include "resource.h"
+ :#include "opaque.h"
+ :#include "input.h"
+ :
+ :#define GLOBAL
+ :
+ :#include <X11/extensions/Xv.h>
+ :#include <X11/extensions/Xvproto.h>
+ :#include "xvdix.h"
+ :
+ :#ifdef PANORAMIX
+ :#include "panoramiX.h"
+ :#include "panoramiXsrv.h"
+ :#include "xvdisp.h"
+ :#endif
+ :
+ :int XvScreenIndex = -1;
+ :unsigned long XvExtensionGeneration = 0;
+ :unsigned long XvScreenGeneration = 0;
+ :unsigned long XvResourceGeneration = 0;
+ :
+ :int XvReqCode;
+ :int XvEventBase;
+ :int XvErrorBase;
+ :
+ :unsigned long XvRTPort;
+ :unsigned long XvRTEncoding;
+ :unsigned long XvRTGrab;
+ :unsigned long XvRTVideoNotify;
+ :unsigned long XvRTVideoNotifyList;
+ :unsigned long XvRTPortNotify;
+ :
+ :
+ :
+ :/* EXTERNAL */
+ :
+ :extern XID clientErrorValue;
+ :
+ :static void WriteSwappedVideoNotifyEvent(xvEvent *, xvEvent *);
+ :static void WriteSwappedPortNotifyEvent(xvEvent *, xvEvent *);
+ :static Bool CreateResourceTypes(void);
+ :
+ :static Bool XvCloseScreen(int, ScreenPtr);
+ :static Bool XvDestroyPixmap(PixmapPtr);
+ :static Bool XvDestroyWindow(WindowPtr);
+ :static void XvResetProc(ExtensionEntry*);
+ :static int XvdiDestroyGrab(pointer, XID);
+ :static int XvdiDestroyEncoding(pointer, XID);
+ :static int XvdiDestroyVideoNotify(pointer, XID);
+ :static int XvdiDestroyPortNotify(pointer, XID);
+ :static int XvdiDestroyVideoNotifyList(pointer, XID);
+ :static int XvdiDestroyPort(pointer, XID);
+ :static int XvdiSendVideoNotify(XvPortPtr, DrawablePtr, int);
+ :
+ :
+ :
+ :
+ :/*
+ :** XvExtensionInit
+ :**
+ :**
+ :*/
+ :
+ :void
+ :XvExtensionInit(void)
+ :{
+ : ExtensionEntry *extEntry;
+ :
+ : /* LOOK TO SEE IF ANY SCREENS WERE INITIALIZED; IF NOT THEN
+ : INIT GLOBAL VARIABLES SO THE EXTENSION CAN FUNCTION */
+ : if (XvScreenGeneration != serverGeneration)
+ : {
+ : if (!CreateResourceTypes())
+ : {
+ : ErrorF("XvExtensionInit: Unable to allocate resource types\n");
+ : return;
+ : }
+ : XvScreenIndex = AllocateScreenPrivateIndex ();
+ : if (XvScreenIndex < 0)
+ : {
+ : ErrorF("XvExtensionInit: Unable to allocate screen private index\n");
+ : return;
+ : }
+ :#ifdef PANORAMIX
+ : XineramaRegisterConnectionBlockCallback(XineramifyXv);
+ :#endif
+ : XvScreenGeneration = serverGeneration;
+ : }
+ :
+ : if (XvExtensionGeneration != serverGeneration)
+ : {
+ : XvExtensionGeneration = serverGeneration;
+ :
+ : extEntry = AddExtension(XvName, XvNumEvents, XvNumErrors,
+ : ProcXvDispatch, SProcXvDispatch,
+ : XvResetProc, StandardMinorOpcode);
+ : if (!extEntry)
+ : {
+ : FatalError("XvExtensionInit: AddExtensions failed\n");
+ : }
+ :
+ : XvReqCode = extEntry->base;
+ : XvEventBase = extEntry->eventBase;
+ : XvErrorBase = extEntry->errorBase;
+ :
+ : EventSwapVector[XvEventBase+XvVideoNotify] =
+ : (EventSwapPtr)WriteSwappedVideoNotifyEvent;
+ : EventSwapVector[XvEventBase+XvPortNotify] =
+ : (EventSwapPtr)WriteSwappedPortNotifyEvent;
+ :
+ : (void)MakeAtom(XvName, strlen(XvName), xTrue);
+ :
+ : }
+ :}
+ :
+ :static Bool
+ :CreateResourceTypes(void)
+ :
+ :{
+ :
+ : if (XvResourceGeneration == serverGeneration) return TRUE;
+ :
+ : XvResourceGeneration = serverGeneration;
+ :
+ : if (!(XvRTPort = CreateNewResourceType(XvdiDestroyPort)))
+ : {
+ : ErrorF("CreateResourceTypes: failed to allocate port resource.\n");
+ : return FALSE;
+ : }
+ :
+ : if (!(XvRTGrab = CreateNewResourceType(XvdiDestroyGrab)))
+ : {
+ : ErrorF("CreateResourceTypes: failed to allocate grab resource.\n");
+ : return FALSE;
+ : }
+ :
+ : if (!(XvRTEncoding = CreateNewResourceType(XvdiDestroyEncoding)))
+ : {
+ : ErrorF("CreateResourceTypes: failed to allocate encoding resource.\n");
+ : return FALSE;
+ : }
+ :
+ : if (!(XvRTVideoNotify = CreateNewResourceType(XvdiDestroyVideoNotify)))
+ : {
+ : ErrorF("CreateResourceTypes: failed to allocate video notify resource.\n");
+ : return FALSE;
+ : }
+ :
+ : if (!(XvRTVideoNotifyList = CreateNewResourceType(XvdiDestroyVideoNotifyList)))
+ : {
+ : ErrorF("CreateResourceTypes: failed to allocate video notify list resource.\n");
+ : return FALSE;
+ : }
+ :
+ : if (!(XvRTPortNotify = CreateNewResourceType(XvdiDestroyPortNotify)))
+ : {
+ : ErrorF("CreateResourceTypes: failed to allocate port notify resource.\n");
+ : return FALSE;
+ : }
+ :
+ : return TRUE;
+ :
+ :}
+ :
+ :_X_EXPORT int
+ :XvScreenInit(ScreenPtr pScreen)
+ :{
+ : XvScreenPtr pxvs;
+ :
+ : if (XvScreenGeneration != serverGeneration)
+ : {
+ : if (!CreateResourceTypes())
+ : {
+ : ErrorF("XvScreenInit: Unable to allocate resource types\n");
+ : return BadAlloc;
+ : }
+ : XvScreenIndex = AllocateScreenPrivateIndex ();
+ : if (XvScreenIndex < 0)
+ : {
+ : ErrorF("XvScreenInit: Unable to allocate screen private index\n");
+ : return BadAlloc;
+ : }
+ :#ifdef PANORAMIX
+ : XineramaRegisterConnectionBlockCallback(XineramifyXv);
+ :#endif
+ : XvScreenGeneration = serverGeneration;
+ : }
+ :
+ : if (pScreen->devPrivates[XvScreenIndex].ptr)
+ : {
+ : ErrorF("XvScreenInit: screen devPrivates ptr non-NULL before init\n");
+ : }
+ :
+ : /* ALLOCATE SCREEN PRIVATE RECORD */
+ :
+ : pxvs = (XvScreenPtr) xalloc (sizeof (XvScreenRec));
+ : if (!pxvs)
+ : {
+ : ErrorF("XvScreenInit: Unable to allocate screen private structure\n");
+ : return BadAlloc;
+ : }
+ :
+ : pScreen->devPrivates[XvScreenIndex].ptr = (pointer)pxvs;
+ :
+ :
+ : pxvs->DestroyPixmap = pScreen->DestroyPixmap;
+ : pxvs->DestroyWindow = pScreen->DestroyWindow;
+ : pxvs->CloseScreen = pScreen->CloseScreen;
+ :
+ : pScreen->DestroyPixmap = XvDestroyPixmap;
+ : pScreen->DestroyWindow = XvDestroyWindow;
+ : pScreen->CloseScreen = XvCloseScreen;
+ :
+ : return Success;
+ :}
+ :
+ :static Bool
+ :XvCloseScreen(
+ : int ii,
+ : ScreenPtr pScreen
+ :){
+ :
+ : XvScreenPtr pxvs;
+ :
+ : pxvs = (XvScreenPtr) pScreen->devPrivates[XvScreenIndex].ptr;
+ :
+ : pScreen->DestroyPixmap = pxvs->DestroyPixmap;
+ : pScreen->DestroyWindow = pxvs->DestroyWindow;
+ : pScreen->CloseScreen = pxvs->CloseScreen;
+ :
+ : (* pxvs->ddCloseScreen)(ii, pScreen);
+ :
+ : xfree(pxvs);
+ :
+ : pScreen->devPrivates[XvScreenIndex].ptr = (pointer)NULL;
+ :
+ : return (*pScreen->CloseScreen)(ii, pScreen);
+ :
+ :}
+ :
+ :static void
+ :XvResetProc(ExtensionEntry* extEntry)
+ :{
+ :}
+ :
+ :_X_EXPORT int
+ :XvGetScreenIndex(void)
+ :{
+ : return XvScreenIndex;
+ :}
+ :
+ :_X_EXPORT unsigned long
+ :XvGetRTPort(void)
+ :{
+ : return XvRTPort;
+ :}
+ :
+ :static Bool
+ :XvDestroyPixmap(PixmapPtr pPix)
+ 4 0.0044 :{ /* XvDestroyPixmap total: 26 0.0283 */
+ : Bool status;
+ : ScreenPtr pScreen;
+ : XvScreenPtr pxvs;
+ : XvAdaptorPtr pa;
+ : int na;
+ : XvPortPtr pp;
+ : int np;
+ :
+ 2 0.0022 : pScreen = pPix->drawable.pScreen;
+ :
+ 1 0.0011 : SCREEN_PROLOGUE(pScreen, DestroyPixmap);
+ :
+ : pxvs = (XvScreenPtr)pScreen->devPrivates[XvScreenIndex].ptr;
+ :
+ : /* CHECK TO SEE IF THIS PORT IS IN USE */
+ :
+ : pa = pxvs->pAdaptors;
+ 1 0.0011 : na = pxvs->nAdaptors;
+ 1 0.0011 : while (na--)
+ : {
+ 1 0.0011 : np = pa->nPorts;
+ 1 0.0011 : pp = pa->pPorts;
+ :
+ 3 0.0033 : while (np--)
+ : {
+ 2 0.0022 : if (pp->pDraw == (DrawablePtr)pPix)
+ : {
+ : XvdiSendVideoNotify(pp, pp->pDraw, XvPreempted);
+ :
+ : (void)(* pp->pAdaptor->ddStopVideo)((ClientPtr)NULL, pp,
+ : pp->pDraw);
+ :
+ : pp->pDraw = (DrawablePtr)NULL;
+ : pp->client = (ClientPtr)NULL;
+ 4 0.0044 : pp->time = currentTime;
+ : }
+ 4 0.0044 : pp++;
+ : }
+ : pa++;
+ : }
+ :
+ : status = (* pScreen->DestroyPixmap)(pPix);
+ :
+ 1 0.0011 : SCREEN_EPILOGUE(pScreen, DestroyPixmap, XvDestroyPixmap);
+ :
+ : return status;
+ :
+ 1 0.0011 :}
+ :
+ :static Bool
+ :XvDestroyWindow(WindowPtr pWin)
+ :{
+ : Bool status;
+ : ScreenPtr pScreen;
+ : XvScreenPtr pxvs;
+ : XvAdaptorPtr pa;
+ : int na;
+ : XvPortPtr pp;
+ : int np;
+ :
+ : pScreen = pWin->drawable.pScreen;
+ :
+ : SCREEN_PROLOGUE(pScreen, DestroyWindow);
+ :
+ : pxvs = (XvScreenPtr)pScreen->devPrivates[XvScreenIndex].ptr;
+ :
+ : /* CHECK TO SEE IF THIS PORT IS IN USE */
+ :
+ : pa = pxvs->pAdaptors;
+ : na = pxvs->nAdaptors;
+ : while (na--)
+ : {
+ : np = pa->nPorts;
+ : pp = pa->pPorts;
+ :
+ : while (np--)
+ : {
+ : if (pp->pDraw == (DrawablePtr)pWin)
+ : {
+ : XvdiSendVideoNotify(pp, pp->pDraw, XvPreempted);
+ :
+ : (void)(* pp->pAdaptor->ddStopVideo)((ClientPtr)NULL, pp,
+ : pp->pDraw);
+ :
+ : pp->pDraw = (DrawablePtr)NULL;
+ : pp->client = (ClientPtr)NULL;
+ : pp->time = currentTime;
+ : }
+ : pp++;
+ : }
+ : pa++;
+ : }
+ :
+ :
+ : status = (* pScreen->DestroyWindow)(pWin);
+ :
+ : SCREEN_EPILOGUE(pScreen, DestroyWindow, XvDestroyWindow);
+ :
+ : return status;
+ :
+ :}
+ :
+ :/* The XvdiVideoStopped procedure is a hook for the device dependent layer.
+ : It provides a way for the dd layer to inform the di layer that video has
+ : stopped in a port for reasons that the di layer had no control over; note
+ : that it doesn't call back into the dd layer */
+ :
+ :int
+ :XvdiVideoStopped(XvPortPtr pPort, int reason)
+ :{
+ :
+ : /* IF PORT ISN'T ACTIVE THEN WE'RE DONE */
+ :
+ : if (!pPort->pDraw) return Success;
+ :
+ : XvdiSendVideoNotify(pPort, pPort->pDraw, reason);
+ :
+ : pPort->pDraw = (DrawablePtr)NULL;
+ : pPort->client = (ClientPtr)NULL;
+ : pPort->time = currentTime;
+ :
+ : return Success;
+ :
+ :}
+ :
+ :static int
+ :XvdiDestroyPort(pointer pPort, XID id)
+ :{
+ : return (* ((XvPortPtr)pPort)->pAdaptor->ddFreePort)(pPort);
+ :}
+ :
+ :static int
+ :XvdiDestroyGrab(pointer pGrab, XID id)
+ :{
+ : ((XvGrabPtr)pGrab)->client = (ClientPtr)NULL;
+ : return Success;
+ :}
+ :
+ :static int
+ :XvdiDestroyVideoNotify(pointer pn, XID id)
+ :{
+ : /* JUST CLEAR OUT THE client POINTER FIELD */
+ :
+ : ((XvVideoNotifyPtr)pn)->client = (ClientPtr)NULL;
+ : return Success;
+ :}
+ :
+ :static int
+ :XvdiDestroyPortNotify(pointer pn, XID id)
+ :{
+ : /* JUST CLEAR OUT THE client POINTER FIELD */
+ :
+ : ((XvPortNotifyPtr)pn)->client = (ClientPtr)NULL;
+ : return Success;
+ :}
+ :
+ :static int
+ :XvdiDestroyVideoNotifyList(pointer pn, XID id)
+ :{
+ : XvVideoNotifyPtr npn,cpn;
+ :
+ : /* ACTUALLY DESTROY THE NOTITY LIST */
+ :
+ : cpn = (XvVideoNotifyPtr)pn;
+ :
+ : while (cpn)
+ : {
+ : npn = cpn->next;
+ : if (cpn->client) FreeResource(cpn->id, XvRTVideoNotify);
+ : xfree(cpn);
+ : cpn = npn;
+ : }
+ : return Success;
+ :}
+ :
+ :static int
+ :XvdiDestroyEncoding(pointer value, XID id)
+ :{
+ : return Success;
+ :}
+ :
+ :static int
+ :XvdiSendVideoNotify(pPort, pDraw, reason)
+ :
+ :XvPortPtr pPort;
+ :DrawablePtr pDraw;
+ :int reason;
+ :
+ :{
+ : xvEvent event;
+ : XvVideoNotifyPtr pn;
+ :
+ : pn = (XvVideoNotifyPtr)LookupIDByType(pDraw->id, XvRTVideoNotifyList);
+ :
+ : while (pn)
+ : {
+ : if (pn->client)
+ : {
+ : event.u.u.type = XvEventBase + XvVideoNotify;
+ : event.u.u.sequenceNumber = pn->client->sequence;
+ : event.u.videoNotify.time = currentTime.milliseconds;
+ : event.u.videoNotify.drawable = pDraw->id;
+ : event.u.videoNotify.port = pPort->id;
+ : event.u.videoNotify.reason = reason;
+ : (void) TryClientEvents(pn->client, (xEventPtr)&event, 1, NoEventMask,
+ : NoEventMask, NullGrab);
+ : }
+ : pn = pn->next;
+ : }
+ :
+ : return Success;
+ :
+ :}
+ :
+ :
+ :int
+ :XvdiSendPortNotify(
+ : XvPortPtr pPort,
+ : Atom attribute,
+ : INT32 value
+ :){
+ : xvEvent event;
+ : XvPortNotifyPtr pn;
+ :
+ : pn = pPort->pNotify;
+ :
+ : while (pn)
+ : {
+ : if (pn->client)
+ : {
+ : event.u.u.type = XvEventBase + XvPortNotify;
+ : event.u.u.sequenceNumber = pn->client->sequence;
+ : event.u.portNotify.time = currentTime.milliseconds;
+ : event.u.portNotify.port = pPort->id;
+ : event.u.portNotify.attribute = attribute;
+ : event.u.portNotify.value = value;
+ : (void) TryClientEvents(pn->client, (xEventPtr)&event, 1, NoEventMask,
+ : NoEventMask, NullGrab);
+ : }
+ : pn = pn->next;
+ : }
+ :
+ : return Success;
+ :
+ :}
+ :
+ :
+ :#define CHECK_SIZE(dw, dh, sw, sh) { \
+ : if(!dw || !dh || !sw || !sh) return Success; \
+ : /* The region code will break these if they are too large */ \
+ : if((dw > 32767) || (dh > 32767) || (sw > 32767) || (sh > 32767)) \
+ : return BadValue; \
+ :}
+ :
+ :
+ :int
+ :XvdiPutVideo(
+ : ClientPtr client,
+ : DrawablePtr pDraw,
+ : XvPortPtr pPort,
+ : GCPtr pGC,
+ : INT16 vid_x, INT16 vid_y,
+ : CARD16 vid_w, CARD16 vid_h,
+ : INT16 drw_x, INT16 drw_y,
+ : CARD16 drw_w, CARD16 drw_h
+ :){
+ : DrawablePtr pOldDraw;
+ :
+ : CHECK_SIZE(drw_w, drw_h, vid_w, vid_h);
+ :
+ : /* UPDATE TIME VARIABLES FOR USE IN EVENTS */
+ :
+ : UpdateCurrentTime();
+ :
+ : /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
+ : INFORM CLIENT OF ITS FAILURE */
+ :
+ : if (pPort->grab.client && (pPort->grab.client != client))
+ : {
+ : XvdiSendVideoNotify(pPort, pDraw, XvBusy);
+ : return Success;
+ : }
+ :
+ : /* CHECK TO SEE IF PORT IS IN USE; IF SO THEN WE MUST DELIVER INTERRUPTED
+ : EVENTS TO ANY CLIENTS WHO WANT THEM */
+ :
+ : pOldDraw = pPort->pDraw;
+ : if ((pOldDraw) && (pOldDraw != pDraw))
+ : {
+ : XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted);
+ : }
+ :
+ : (void) (* pPort->pAdaptor->ddPutVideo)(client, pDraw, pPort, pGC,
+ : vid_x, vid_y, vid_w, vid_h,
+ : drw_x, drw_y, drw_w, drw_h);
+ :
+ : if ((pPort->pDraw) && (pOldDraw != pDraw))
+ : {
+ : pPort->client = client;
+ : XvdiSendVideoNotify(pPort, pPort->pDraw, XvStarted);
+ : }
+ :
+ : pPort->time = currentTime;
+ :
+ : return (Success);
+ :
+ :}
+ :
+ :int
+ :XvdiPutStill(
+ : ClientPtr client,
+ : DrawablePtr pDraw,
+ : XvPortPtr pPort,
+ : GCPtr pGC,
+ : INT16 vid_x, INT16 vid_y,
+ : CARD16 vid_w, CARD16 vid_h,
+ : INT16 drw_x, INT16 drw_y,
+ : CARD16 drw_w, CARD16 drw_h
+ :){
+ : int status;
+ :
+ : CHECK_SIZE(drw_w, drw_h, vid_w, vid_h);
+ :
+ : /* UPDATE TIME VARIABLES FOR USE IN EVENTS */
+ :
+ : UpdateCurrentTime();
+ :
+ : /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
+ : INFORM CLIENT OF ITS FAILURE */
+ :
+ : if (pPort->grab.client && (pPort->grab.client != client))
+ : {
+ : XvdiSendVideoNotify(pPort, pDraw, XvBusy);
+ : return Success;
+ : }
+ :
+ : pPort->time = currentTime;
+ :
+ : status = (* pPort->pAdaptor->ddPutStill)(client, pDraw, pPort, pGC,
+ : vid_x, vid_y, vid_w, vid_h,
+ : drw_x, drw_y, drw_w, drw_h);
+ :
+ : return status;
+ :
+ :}
+ :
+ :int
+ :XvdiPutImage(
+ : ClientPtr client,
+ : DrawablePtr pDraw,
+ : XvPortPtr pPort,
+ : GCPtr pGC,
+ : INT16 src_x, INT16 src_y,
+ : CARD16 src_w, CARD16 src_h,
+ : INT16 drw_x, INT16 drw_y,
+ : CARD16 drw_w, CARD16 drw_h,
+ : XvImagePtr image,
+ : unsigned char* data,
+ : Bool sync,
+ : CARD16 width, CARD16 height
+ :){
+ : CHECK_SIZE(drw_w, drw_h, src_w, src_h);
+ :
+ : /* UPDATE TIME VARIABLES FOR USE IN EVENTS */
+ :
+ : UpdateCurrentTime();
+ :
+ : /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
+ : INFORM CLIENT OF ITS FAILURE */
+ :
+ : if (pPort->grab.client && (pPort->grab.client != client))
+ : {
+ : XvdiSendVideoNotify(pPort, pDraw, XvBusy);
+ : return Success;
+ : }
+ :
+ : pPort->time = currentTime;
+ :
+ : return (* pPort->pAdaptor->ddPutImage)(client, pDraw, pPort, pGC,
+ : src_x, src_y, src_w, src_h,
+ : drw_x, drw_y, drw_w, drw_h,
+ : image, data, sync, width, height);
+ :}
+ :
+ :
+ :int
+ :XvdiGetVideo(
+ : ClientPtr client,
+ : DrawablePtr pDraw,
+ : XvPortPtr pPort,
+ : GCPtr pGC,
+ : INT16 vid_x, INT16 vid_y,
+ : CARD16 vid_w, CARD16 vid_h,
+ : INT16 drw_x, INT16 drw_y,
+ : CARD16 drw_w, CARD16 drw_h
+ :){
+ : DrawablePtr pOldDraw;
+ :
+ : CHECK_SIZE(drw_w, drw_h, vid_w, vid_h);
+ :
+ : /* UPDATE TIME VARIABLES FOR USE IN EVENTS */
+ :
+ : UpdateCurrentTime();
+ :
+ : /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
+ : INFORM CLIENT OF ITS FAILURE */
+ :
+ : if (pPort->grab.client && (pPort->grab.client != client))
+ : {
+ : XvdiSendVideoNotify(pPort, pDraw, XvBusy);
+ : return Success;
+ : }
+ :
+ : /* CHECK TO SEE IF PORT IS IN USE; IF SO THEN WE MUST DELIVER INTERRUPTED
+ : EVENTS TO ANY CLIENTS WHO WANT THEM */
+ :
+ : pOldDraw = pPort->pDraw;
+ : if ((pOldDraw) && (pOldDraw != pDraw))
+ : {
+ : XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted);
+ : }
+ :
+ : (void) (* pPort->pAdaptor->ddGetVideo)(client, pDraw, pPort, pGC,
+ : vid_x, vid_y, vid_w, vid_h,
+ : drw_x, drw_y, drw_w, drw_h);
+ :
+ : if ((pPort->pDraw) && (pOldDraw != pDraw))
+ : {
+ : pPort->client = client;
+ : XvdiSendVideoNotify(pPort, pPort->pDraw, XvStarted);
+ : }
+ :
+ : pPort->time = currentTime;
+ :
+ : return (Success);
+ :
+ :}
+ :
+ :int
+ :XvdiGetStill(
+ : ClientPtr client,
+ : DrawablePtr pDraw,
+ : XvPortPtr pPort,
+ : GCPtr pGC,
+ : INT16 vid_x, INT16 vid_y,
+ : CARD16 vid_w, CARD16 vid_h,
+ : INT16 drw_x, INT16 drw_y,
+ : CARD16 drw_w, CARD16 drw_h
+ :){
+ : int status;
+ :
+ : CHECK_SIZE(drw_w, drw_h, vid_w, vid_h);
+ :
+ : /* UPDATE TIME VARIABLES FOR USE IN EVENTS */
+ :
+ : UpdateCurrentTime();
+ :
+ : /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
+ : INFORM CLIENT OF ITS FAILURE */
+ :
+ : if (pPort->grab.client && (pPort->grab.client != client))
+ : {
+ : XvdiSendVideoNotify(pPort, pDraw, XvBusy);
+ : return Success;
+ : }
+ :
+ : status = (* pPort->pAdaptor->ddGetStill)(client, pDraw, pPort, pGC,
+ : vid_x, vid_y, vid_w, vid_h,
+ : drw_x, drw_y, drw_w, drw_h);
+ :
+ : pPort->time = currentTime;
+ :
+ : return status;
+ :
+ :}
+ :
+ :int
+ :XvdiGrabPort(
+ : ClientPtr client,
+ : XvPortPtr pPort,
+ : Time ctime,
+ : int *p_result
+ :){
+ : unsigned long id;
+ : TimeStamp time;
+ :
+ : UpdateCurrentTime();
+ : time = ClientTimeToServerTime(ctime);
+ :
+ : if (pPort->grab.client && (client != pPort->grab.client))
+ : {
+ : *p_result = XvAlreadyGrabbed;
+ : return Success;
+ : }
+ :
+ : if ((CompareTimeStamps(time, currentTime) == LATER) ||
+ : (CompareTimeStamps(time, pPort->time) == EARLIER))
+ : {
+ : *p_result = XvInvalidTime;
+ : return Success;
+ : }
+ :
+ : if (client == pPort->grab.client)
+ : {
+ : *p_result = Success;
+ : return Success;
+ : }
+ :
+ : id = FakeClientID(client->index);
+ :
+ : if (!AddResource(id, XvRTGrab, &pPort->grab))
+ : {
+ : return BadAlloc;
+ : }
+ :
+ : /* IF THERE IS ACTIVE VIDEO THEN STOP IT */
+ :
+ : if ((pPort->pDraw) && (client != pPort->client))
+ : {
+ : XVCALL(diStopVideo)((ClientPtr)NULL, pPort, pPort->pDraw);
+ : }
+ :
+ : pPort->grab.client = client;
+ : pPort->grab.id = id;
+ :
+ : pPort->time = currentTime;
+ :
+ : *p_result = Success;
+ :
+ : return Success;
+ :
+ :}
+ :
+ :int
+ :XvdiUngrabPort(
+ : ClientPtr client,
+ : XvPortPtr pPort,
+ : Time ctime
+ :){
+ : TimeStamp time;
+ :
+ : UpdateCurrentTime();
+ : time = ClientTimeToServerTime(ctime);
+ :
+ : if ((!pPort->grab.client) || (client != pPort->grab.client))
+ : {
+ : return Success;
+ : }
+ :
+ : if ((CompareTimeStamps(time, currentTime) == LATER) ||
+ : (CompareTimeStamps(time, pPort->time) == EARLIER))
+ : {
+ : return Success;
+ : }
+ :
+ : /* FREE THE GRAB RESOURCE; AND SET THE GRAB CLIENT TO NULL */
+ :
+ : FreeResource(pPort->grab.id, XvRTGrab);
+ : pPort->grab.client = (ClientPtr)NULL;
+ :
+ : pPort->time = currentTime;
+ :
+ : return Success;
+ :
+ :}
+ :
+ :
+ :int
+ :XvdiSelectVideoNotify(
+ : ClientPtr client,
+ : DrawablePtr pDraw,
+ : BOOL onoff
+ :){
+ : XvVideoNotifyPtr pn,tpn,fpn;
+ :
+ : /* FIND VideoNotify LIST */
+ :
+ : pn = (XvVideoNotifyPtr)LookupIDByType(pDraw->id, XvRTVideoNotifyList);
+ :
+ : /* IF ONE DONES'T EXIST AND NO MASK, THEN JUST RETURN */
+ :
+ : if (!onoff && !pn) return Success;
+ :
+ : /* IF ONE DOESN'T EXIST CREATE IT AND ADD A RESOURCE SO THAT THE LIST
+ : WILL BE DELETED WHEN THE DRAWABLE IS DESTROYED */
+ :
+ : if (!pn)
+ : {
+ : if (!(tpn = (XvVideoNotifyPtr)xalloc(sizeof(XvVideoNotifyRec))))
+ : return BadAlloc;
+ : tpn->next = (XvVideoNotifyPtr)NULL;
+ : if (!AddResource(pDraw->id, XvRTVideoNotifyList, tpn))
+ : {
+ : xfree(tpn);
+ : return BadAlloc;
+ : }
+ : }
+ : else
+ : {
+ : /* LOOK TO SEE IF ENTRY ALREADY EXISTS */
+ :
+ : fpn = (XvVideoNotifyPtr)NULL;
+ : tpn = pn;
+ : while (tpn)
+ : {
+ : if (tpn->client == client)
+ : {
+ : if (!onoff) tpn->client = (ClientPtr)NULL;
+ : return Success;
+ : }
+ : if (!tpn->client) fpn = tpn; /* TAKE NOTE OF FREE ENTRY */
+ : tpn = tpn->next;
+ : }
+ :
+ : /* IF TUNNING OFF, THEN JUST RETURN */
+ :
+ : if (!onoff) return Success;
+ :
+ : /* IF ONE ISN'T FOUND THEN ALLOCATE ONE AND LINK IT INTO THE LIST */
+ :
+ : if (fpn)
+ : {
+ : tpn = fpn;
+ : }
+ : else
+ : {
+ : if (!(tpn = (XvVideoNotifyPtr)xalloc(sizeof(XvVideoNotifyRec))))
+ : return BadAlloc;
+ : tpn->next = pn->next;
+ : pn->next = tpn;
+ : }
+ : }
+ :
+ : /* INIT CLIENT PTR IN CASE WE CAN'T ADD RESOURCE */
+ : /* ADD RESOURCE SO THAT IF CLIENT EXITS THE CLIENT PTR WILL BE CLEARED */
+ :
+ : tpn->client = (ClientPtr)NULL;
+ : tpn->id = FakeClientID(client->index);
+ : AddResource(tpn->id, XvRTVideoNotify, tpn);
+ :
+ : tpn->client = client;
+ : return Success;
+ :
+ :}
+ :
+ :int
+ :XvdiSelectPortNotify(
+ : ClientPtr client,
+ : XvPortPtr pPort,
+ : BOOL onoff
+ :){
+ : XvPortNotifyPtr pn,tpn;
+ :
+ : /* SEE IF CLIENT IS ALREADY IN LIST */
+ :
+ : tpn = (XvPortNotifyPtr)NULL;
+ : pn = pPort->pNotify;
+ : while (pn)
+ : {
+ : if (!pn->client) tpn = pn; /* TAKE NOTE OF FREE ENTRY */
+ : if (pn->client == client) break;
+ : pn = pn->next;
+ : }
+ :
+ : /* IS THE CLIENT ALREADY ON THE LIST? */
+ :
+ : if (pn)
+ : {
+ : /* REMOVE IT? */
+ :
+ : if (!onoff)
+ : {
+ : pn->client = (ClientPtr)NULL;
+ : FreeResource(pn->id, XvRTPortNotify);
+ : }
+ :
+ : return Success;
+ : }
+ :
+ : /* DIDN'T FIND IT; SO REUSE LIST ELEMENT IF ONE IS FREE OTHERWISE
+ : CREATE A NEW ONE AND ADD IT TO THE BEGINNING OF THE LIST */
+ :
+ : if (!tpn)
+ : {
+ : if (!(tpn = (XvPortNotifyPtr)xalloc(sizeof(XvPortNotifyRec))))
+ : return BadAlloc;
+ : tpn->next = pPort->pNotify;
+ : pPort->pNotify = tpn;
+ : }
+ :
+ : tpn->client = client;
+ : tpn->id = FakeClientID(client->index);
+ : AddResource(tpn->id, XvRTPortNotify, tpn);
+ :
+ : return Success;
+ :
+ :}
+ :
+ :int
+ :XvdiStopVideo(
+ : ClientPtr client,
+ : XvPortPtr pPort,
+ : DrawablePtr pDraw
+ :){
+ : int status;
+ :
+ : /* IF PORT ISN'T ACTIVE THEN WE'RE DONE */
+ :
+ : if (!pPort->pDraw || (pPort->pDraw != pDraw))
+ : {
+ : XvdiSendVideoNotify(pPort, pDraw, XvStopped);
+ : return Success;
+ : }
+ :
+ : /* CHECK FOR GRAB; IF THIS CLIENT DOESN'T HAVE THE PORT GRABBED THEN
+ : INFORM CLIENT OF ITS FAILURE */
+ :
+ : if ((client) && (pPort->grab.client) && (pPort->grab.client != client))
+ : {
+ : XvdiSendVideoNotify(pPort, pDraw, XvBusy);
+ : return Success;
+ : }
+ :
+ : XvdiSendVideoNotify(pPort, pDraw, XvStopped);
+ :
+ : status = (* pPort->pAdaptor->ddStopVideo)(client, pPort, pDraw);
+ :
+ : pPort->pDraw = (DrawablePtr)NULL;
+ : pPort->client = (ClientPtr)client;
+ : pPort->time = currentTime;
+ :
+ : return status;
+ :
+ :}
+ :
+ :int
+ :XvdiPreemptVideo(
+ : ClientPtr client,
+ : XvPortPtr pPort,
+ : DrawablePtr pDraw
+ :){
+ : int status;
+ :
+ : /* IF PORT ISN'T ACTIVE THEN WE'RE DONE */
+ :
+ : if (!pPort->pDraw || (pPort->pDraw != pDraw)) return Success;
+ :
+ : XvdiSendVideoNotify(pPort, pPort->pDraw, XvPreempted);
+ :
+ : status = (* pPort->pAdaptor->ddStopVideo)(client, pPort, pPort->pDraw);
+ :
+ : pPort->pDraw = (DrawablePtr)NULL;
+ : pPort->client = (ClientPtr)client;
+ : pPort->time = currentTime;
+ :
+ : return status;
+ :
+ :}
+ :
+ :int
+ :XvdiMatchPort(
+ : XvPortPtr pPort,
+ : DrawablePtr pDraw
+ :){
+ :
+ : XvAdaptorPtr pa;
+ : XvFormatPtr pf;
+ : int nf;
+ :
+ : pa = pPort->pAdaptor;
+ :
+ : if (pa->pScreen != pDraw->pScreen) return BadMatch;
+ :
+ : nf = pa->nFormats;
+ : pf = pa->pFormats;
+ :
+ : while (nf--)
+ : {
+ : if ((pf->depth == pDraw->depth)
+ :#if 0
+ : && ((pDraw->type == DRAWABLE_PIXMAP) ||
+ : (wVisual(((WindowPtr)pDraw)) == pf->visual))
+ :#endif
+ : )
+ : return Success;
+ : pf++;
+ : }
+ :
+ : return BadMatch;
+ :
+ :}
+ :
+ :int
+ :XvdiSetPortAttribute(
+ : ClientPtr client,
+ : XvPortPtr pPort,
+ : Atom attribute,
+ : INT32 value
+ :){
+ :
+ : XvdiSendPortNotify(pPort, attribute, value);
+ :
+ : return
+ : (* pPort->pAdaptor->ddSetPortAttribute)(client, pPort, attribute, value);
+ :
+ :}
+ :
+ :int
+ :XvdiGetPortAttribute(
+ : ClientPtr client,
+ : XvPortPtr pPort,
+ : Atom attribute,
+ : INT32 *p_value
+ :){
+ :
+ : return
+ : (* pPort->pAdaptor->ddGetPortAttribute)(client, pPort, attribute, p_value);
+ :
+ :}
+ :
+ :static void
+ :WriteSwappedVideoNotifyEvent(xvEvent *from, xvEvent *to)
+ :
+ :{
+ :
+ : to->u.u.type = from->u.u.type;
+ : to->u.u.detail = from->u.u.detail;
+ : cpswaps(from->u.videoNotify.sequenceNumber,
+ : to->u.videoNotify.sequenceNumber);
+ : cpswapl(from->u.videoNotify.time, to->u.videoNotify.time);
+ : cpswapl(from->u.videoNotify.drawable, to->u.videoNotify.drawable);
+ : cpswapl(from->u.videoNotify.port, to->u.videoNotify.port);
+ :
+ :}
+ :
+ :static void
+ :WriteSwappedPortNotifyEvent(xvEvent *from, xvEvent *to)
+ :
+ :{
+ :
+ : to->u.u.type = from->u.u.type;
+ : to->u.u.detail = from->u.u.detail;
+ : cpswaps(from->u.portNotify.sequenceNumber, to->u.portNotify.sequenceNumber);
+ : cpswapl(from->u.portNotify.time, to->u.portNotify.time);
+ : cpswapl(from->u.portNotify.port, to->u.portNotify.port);
+ : cpswapl(from->u.portNotify.value, to->u.portNotify.value);
+ :
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/render/mirect.c"
+ *
+ * 24 0.0261
+ */
+
+
+ :/*
+ : *
+ : * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
+ : *
+ : * 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "scrnintstr.h"
+ :#include "gcstruct.h"
+ :#include "pixmapstr.h"
+ :#include "windowstr.h"
+ :#include "mi.h"
+ :#include "picturestr.h"
+ :#include "mipict.h"
+ :
+ :static void
+ :miColorRects (PicturePtr pDst,
+ : PicturePtr pClipPict,
+ : xRenderColor *color,
+ : int nRect,
+ : xRectangle *rects,
+ : int xoff,
+ : int yoff)
+ 1 0.0011 :{ /* miColorRects total: 15 0.0163 */
+ : ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ : CARD32 pixel;
+ : GCPtr pGC;
+ : CARD32 tmpval[5];
+ : RegionPtr pClip;
+ : unsigned long mask;
+ :
+ 1 0.0011 : miRenderColorToPixel (pDst->pFormat, color, &pixel);
+ :
+ : pGC = GetScratchGC (pDst->pDrawable->depth, pScreen);
+ : if (!pGC)
+ : return;
+ : tmpval[0] = GXcopy;
+ : tmpval[1] = pixel;
+ 1 0.0011 : tmpval[2] = pDst->subWindowMode;
+ : mask = GCFunction | GCForeground | GCSubwindowMode;
+ 4 0.0044 : if (pClipPict->clientClipType == CT_REGION)
+ : {
+ 1 0.0011 : tmpval[3] = pDst->clipOrigin.x - xoff;
+ : tmpval[4] = pDst->clipOrigin.y - yoff;
+ : mask |= GCClipXOrigin|GCClipYOrigin;
+ :
+ : pClip = REGION_CREATE (pScreen, NULL, 1);
+ : REGION_COPY (pScreen, pClip,
+ : (RegionPtr) pClipPict->clientClip);
+ : (*pGC->funcs->ChangeClip) (pGC, CT_REGION, pClip, 0);
+ : }
+ :
+ 1 0.0011 : ChangeGC (pGC, mask, tmpval);
+ 2 0.0022 : ValidateGC (pDst->pDrawable, pGC);
+ 1 0.0011 : if (xoff || yoff)
+ : {
+ : int i;
+ : for (i = 0; i < nRect; i++)
+ : {
+ : rects[i].x -= xoff;
+ : rects[i].y -= yoff;
+ : }
+ : }
+ 3 0.0033 : (*pGC->ops->PolyFillRect) (pDst->pDrawable, pGC, nRect, rects);
+ : if (xoff || yoff)
+ : {
+ : int i;
+ : for (i = 0; i < nRect; i++)
+ : {
+ : rects[i].x += xoff;
+ : rects[i].y += yoff;
+ : }
+ : }
+ : FreeScratchGC (pGC);
+ :}
+ :
+ :_X_EXPORT void
+ :miCompositeRects (CARD8 op,
+ : PicturePtr pDst,
+ : xRenderColor *color,
+ : int nRect,
+ : xRectangle *rects)
+ 3 0.0033 :{ /* miCompositeRects total: 9 0.0098 */
+ : ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ :
+ : if (color->alpha == 0xffff)
+ : {
+ 2 0.0022 : if (op == PictOpOver)
+ : op = PictOpSrc;
+ : }
+ 1 0.0011 : if (op == PictOpClear)
+ : color->red = color->green = color->blue = color->alpha = 0;
+ :
+ 1 0.0011 : if (op == PictOpSrc || op == PictOpClear)
+ : {
+ : miColorRects (pDst, pDst, color, nRect, rects, 0, 0);
+ 1 0.0011 : if (pDst->alphaMap)
+ : miColorRects (pDst->alphaMap, pDst,
+ : color, nRect, rects,
+ : pDst->alphaOrigin.x,
+ : pDst->alphaOrigin.y);
+ : }
+ : else
+ : {
+ : PictFormatPtr rgbaFormat;
+ : PixmapPtr pPixmap;
+ : PicturePtr pSrc;
+ : xRectangle one;
+ : int error;
+ : Pixel pixel;
+ : GCPtr pGC;
+ : CARD32 tmpval[2];
+ :
+ : rgbaFormat = PictureMatchFormat (pScreen, 32, PICT_a8r8g8b8);
+ : if (!rgbaFormat)
+ : goto bail1;
+ :
+ : pPixmap = (*pScreen->CreatePixmap) (pScreen, 1, 1,
+ : rgbaFormat->depth);
+ : if (!pPixmap)
+ : goto bail2;
+ :
+ : miRenderColorToPixel (rgbaFormat, color, &pixel);
+ :
+ : pGC = GetScratchGC (rgbaFormat->depth, pScreen);
+ : if (!pGC)
+ : goto bail3;
+ : tmpval[0] = GXcopy;
+ : tmpval[1] = pixel;
+ :
+ : ChangeGC (pGC, GCFunction | GCForeground, tmpval);
+ : ValidateGC (&pPixmap->drawable, pGC);
+ : one.x = 0;
+ : one.y = 0;
+ : one.width = 1;
+ : one.height = 1;
+ : (*pGC->ops->PolyFillRect) (&pPixmap->drawable, pGC, 1, &one);
+ :
+ : tmpval[0] = xTrue;
+ : pSrc = CreatePicture (0, &pPixmap->drawable, rgbaFormat,
+ : CPRepeat, tmpval, 0, &error);
+ :
+ : if (!pSrc)
+ : goto bail4;
+ :
+ : while (nRect--)
+ : {
+ : CompositePicture (op, pSrc, 0, pDst, 0, 0, 0, 0,
+ : rects->x,
+ : rects->y,
+ : rects->width,
+ : rects->height);
+ : rects++;
+ : }
+ :
+ : FreePicture ((pointer) pSrc, 0);
+ :bail4:
+ : FreeScratchGC (pGC);
+ :bail3:
+ : (*pScreen->DestroyPixmap) (pPixmap);
+ :bail2:
+ :bail1:
+ : ;
+ : }
+ 1 0.0011 :}
+/*
+ * Total samples for file : "/home/cworth/src/pixman/pixman/pixman-utils.c"
+ *
+ * 24 0.0261
+ */
+
+
+ :/*
+ : * Copyright © 2000 SuSE, Inc.
+ : *
+ : * 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 SuSE not be used in advertising or
+ : * publicity pertaining to distribution of the software without specific,
+ : * written prior permission. SuSE makes no representations about the
+ : * suitability of this software for any purpose. It is provided "as is"
+ : * without express or implied warranty.
+ : *
+ : * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
+ : * 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.
+ : *
+ : * Author: Keith Packard, SuSE, Inc.
+ : */
+ :
+ :#include <config.h>
+ :#include "pixman.h"
+ :#include "pixman-private.h"
+ :#include "pixman-mmx.h"
+ :
+ :pixman_bool_t
+ :pixman_transform_point_3d (pixman_transform_t *transform,
+ : pixman_vector_t *vector)
+ :{
+ : pixman_vector_t result;
+ : int i, j;
+ : pixman_fixed_32_32_t partial;
+ : pixman_fixed_48_16_t v;
+ :
+ : for (j = 0; j < 3; j++)
+ : {
+ : v = 0;
+ : for (i = 0; i < 3; i++)
+ : {
+ : partial = ((pixman_fixed_48_16_t) transform->matrix[j][i] *
+ : (pixman_fixed_48_16_t) vector->vector[i]);
+ : v += partial >> 16;
+ : }
+ :
+ : if (v > pixman_max_fixed_48_16 || v < pixman_min_fixed_48_16)
+ : return FALSE;
+ :
+ : result.vector[j] = (pixman_fixed_48_16_t) v;
+ : }
+ :
+ : if (!result.vector[2])
+ : return FALSE;
+ :
+ : *vector = result;
+ : return TRUE;
+ :}
+ :
+ :pixman_bool_t
+ :pixman_blt (uint32_t *src_bits,
+ : uint32_t *dst_bits,
+ : int src_stride,
+ : int dst_stride,
+ : int src_bpp,
+ : int dst_bpp,
+ : int src_x, int src_y,
+ : int dst_x, int dst_y,
+ : int width, int height)
+ :{
+ :#ifdef USE_MMX
+ : if (pixman_have_mmx())
+ : {
+ : return pixman_blt_mmx (src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+ : src_x, src_y, dst_x, dst_y, width, height);
+ : }
+ : else
+ :#endif
+ : return FALSE;
+ :}
+ :
+ :static void
+ :pixman_fill8 (uint32_t *bits,
+ : int stride,
+ : int x,
+ : int y,
+ : int width,
+ : int height,
+ : uint32_t xor)
+ :{
+ : int byte_stride = stride * sizeof (uint32_t);
+ : uint8_t *dst = (uint8_t *) bits;
+ : uint8_t v = xor & 0xff;
+ : int i;
+ :
+ : dst = dst + y * byte_stride + x;
+ :
+ : while (height--)
+ : {
+ : for (i = 0; i < width; ++i)
+ : dst[i] = v;
+ :
+ : dst += byte_stride;
+ : }
+ :}
+ :
+ :static void
+ :pixman_fill16 (uint32_t *bits,
+ : int stride,
+ : int x,
+ : int y,
+ : int width,
+ : int height,
+ : uint32_t xor)
+ :{
+ : int short_stride = (stride * sizeof (uint32_t)) / sizeof (uint16_t);
+ : uint16_t *dst = (uint16_t *)bits;
+ : uint16_t v = xor & 0xffff;
+ : int i;
+ :
+ : dst = dst + y * short_stride + x;
+ :
+ : while (height--)
+ : {
+ : for (i = 0; i < width; ++i)
+ : dst[i] = v;
+ :
+ : dst += short_stride;
+ : }
+ :}
+ :
+ :static void
+ :pixman_fill32 (uint32_t *bits,
+ : int stride,
+ : int x,
+ : int y,
+ : int width,
+ : int height,
+ : uint32_t xor)
+ :{
+ : int i;
+ :
+ : bits = bits + y * stride + x;
+ :
+ : while (height--)
+ : {
+ : for (i = 0; i < width; ++i)
+ : bits[i] = xor;
+ :
+ : bits += stride;
+ : }
+ :}
+ :
+ :pixman_bool_t
+ :pixman_fill (uint32_t *bits,
+ : int stride,
+ : int bpp,
+ : int x,
+ : int y,
+ : int width,
+ : int height,
+ : uint32_t xor)
+ :{
+ :#if 0
+ : printf ("filling: %d %d %d %d (stride: %d, bpp: %d) pixel: %x\n",
+ : x, y, width, height, stride, bpp, xor);
+ :#endif
+ :
+ :#ifdef USE_MMX
+ : if (!pixman_have_mmx() || !pixman_fill_mmx (bits, stride, bpp, x, y, width, height, xor))
+ :#endif
+ : {
+ : switch (bpp)
+ : {
+ : case 8:
+ : pixman_fill8 (bits, stride, x, y, width, height, xor);
+ : break;
+ :
+ : case 16:
+ : pixman_fill16 (bits, stride, x, y, width, height, xor);
+ : break;
+ :
+ : case 32:
+ : pixman_fill32 (bits, stride, x, y, width, height, xor);
+ : break;
+ :
+ : default:
+ : return FALSE;
+ : break;
+ : }
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :
+ :/*
+ : * Compute the smallest value no less than y which is on a
+ : * grid row
+ : */
+ :
+ :pixman_fixed_t
+ :pixman_sample_ceil_y (pixman_fixed_t y, int n)
+ :{ /* pixman_sample_ceil_y total: 1 0.0011 */
+ : pixman_fixed_t f = pixman_fixed_frac(y);
+ : pixman_fixed_t i = pixman_fixed_floor(y);
+ :
+ 1 0.0011 : f = ((f + Y_FRAC_FIRST(n)) / STEP_Y_SMALL(n)) * STEP_Y_SMALL(n) + Y_FRAC_FIRST(n);
+ : if (f > Y_FRAC_LAST(n))
+ : {
+ : f = Y_FRAC_FIRST(n);
+ : i += pixman_fixed_1;
+ : }
+ : return (i | f);
+ :}
+ :
+ :#define _div(a,b) ((a) >= 0 ? (a) / (b) : -((-(a) + (b) - 1) / (b)))
+ :
+ :/*
+ : * Compute the largest value no greater than y which is on a
+ : * grid row
+ : */
+ :pixman_fixed_t
+ :pixman_sample_floor_y (pixman_fixed_t y, int n)
+ :{ /* pixman_sample_floor_y total: 5 0.0054 */
+ : pixman_fixed_t f = pixman_fixed_frac(y);
+ 1 0.0011 : pixman_fixed_t i = pixman_fixed_floor (y);
+ :
+ 4 0.0044 : f = _div(f - Y_FRAC_FIRST(n), STEP_Y_SMALL(n)) * STEP_Y_SMALL(n) + Y_FRAC_FIRST(n);
+ : if (f < Y_FRAC_FIRST(n))
+ : {
+ : f = Y_FRAC_LAST(n);
+ : i -= pixman_fixed_1;
+ : }
+ : return (i | f);
+ :}
+ :
+ :/*
+ : * Step an edge by any amount (including negative values)
+ : */
+ :void
+ :pixman_edge_step (pixman_edge_t *e, int n)
+ :{ /* pixman_edge_step total: 3 0.0033 */
+ : pixman_fixed_48_16_t ne;
+ :
+ : e->x += n * e->stepx;
+ :
+ : ne = e->e + n * (pixman_fixed_48_16_t) e->dx;
+ :
+ : if (n >= 0)
+ : {
+ 1 0.0011 : if (ne > 0)
+ : {
+ 2 0.0022 : int nx = (ne + e->dy - 1) / e->dy;
+ : e->e = ne - nx * (pixman_fixed_48_16_t) e->dy;
+ : e->x += nx * e->signdx;
+ : }
+ : }
+ : else
+ : {
+ : if (ne <= -e->dy)
+ : {
+ : int nx = (-ne) / e->dy;
+ : e->e = ne + nx * (pixman_fixed_48_16_t) e->dy;
+ : e->x -= nx * e->signdx;
+ : }
+ : }
+ :}
+ :
+ :/*
+ : * A private routine to initialize the multi-step
+ : * elements of an edge structure
+ : */
+ :static void
+ :_pixman_edge_tMultiInit (pixman_edge_t *e, int n, pixman_fixed_t *stepx_p, pixman_fixed_t *dx_p)
+ 2 0.0022 :{ /* _pixman_edge_tMultiInit total: 7 0.0076 */
+ : pixman_fixed_t stepx;
+ : pixman_fixed_48_16_t ne;
+ :
+ 2 0.0022 : ne = n * (pixman_fixed_48_16_t) e->dx;
+ : stepx = n * e->stepx;
+ : if (ne > 0)
+ : {
+ 1 0.0011 : int nx = ne / e->dy;
+ : ne -= nx * e->dy;
+ 1 0.0011 : stepx += nx * e->signdx;
+ : }
+ 1 0.0011 : *dx_p = ne;
+ : *stepx_p = stepx;
+ :}
+ :
+ :/*
+ : * Initialize one edge structure given the line endpoints and a
+ : * starting y value
+ : */
+ :void
+ :pixman_edge_init (pixman_edge_t *e,
+ : int n,
+ : pixman_fixed_t y_start,
+ : pixman_fixed_t x_top,
+ : pixman_fixed_t y_top,
+ : pixman_fixed_t x_bot,
+ : pixman_fixed_t y_bot)
+ 2 0.0022 :{ /* pixman_edge_init total: 7 0.0076 */
+ : pixman_fixed_t dx, dy;
+ :
+ : e->x = x_top;
+ : e->e = 0;
+ : dx = x_bot - x_top;
+ : dy = y_bot - y_top;
+ : e->dy = dy;
+ : e->dx = 0;
+ : if (dy)
+ : {
+ : if (dx >= 0)
+ : {
+ : e->signdx = 1;
+ : e->stepx = dx / dy;
+ : e->dx = dx % dy;
+ : e->e = -dy;
+ : }
+ : else
+ : {
+ 1 0.0011 : e->signdx = -1;
+ : e->stepx = -(-dx / dy);
+ : e->dx = -dx % dy;
+ : e->e = 0;
+ : }
+ :
+ 3 0.0033 : _pixman_edge_tMultiInit (e, STEP_Y_SMALL(n), &e->stepx_small, &e->dx_small);
+ : _pixman_edge_tMultiInit (e, STEP_Y_BIG(n), &e->stepx_big, &e->dx_big);
+ : }
+ 1 0.0011 : pixman_edge_step (e, y_start - y_top);
+ :}
+ :
+ :/*
+ : * Initialize one edge structure given a line, starting y value
+ : * and a pixel offset for the line
+ : */
+ :void
+ :pixman_line_fixed_edge_init (pixman_edge_t *e,
+ : int n,
+ : pixman_fixed_t y,
+ : const pixman_line_fixed_t *line,
+ : int x_off,
+ : int y_off)
+ 1 0.0011 :{ /* pixman_line_fixed_edge_init total: 1 0.0011 */
+ : pixman_fixed_t x_off_fixed = pixman_int_to_fixed(x_off);
+ : pixman_fixed_t y_off_fixed = pixman_int_to_fixed(y_off);
+ : const pixman_point_fixed_t *top, *bot;
+ :
+ : if (line->p1.y <= line->p2.y)
+ : {
+ : top = &line->p1;
+ : bot = &line->p2;
+ : }
+ : else
+ : {
+ : top = &line->p2;
+ : bot = &line->p1;
+ : }
+ : pixman_edge_init (e, n, y,
+ : top->x + x_off_fixed,
+ : top->y + y_off_fixed,
+ : bot->x + x_off_fixed,
+ : bot->y + y_off_fixed);
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/os/utils.c"
+ *
+ * 21 0.0229
+ */
+
+
+ :/*
+ :
+ :Copyright 1987, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included
+ :in all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ :OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ :MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ :IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ :OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ :ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ :OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall
+ :not be used in advertising or otherwise to promote the sale, use or
+ :other dealings in this Software without prior written authorization
+ :from The Open Group.
+ :
+ :
+ :Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
+ :Copyright 1994 Quarterdeck Office Systems.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 names of Digital and
+ :Quarterdeck not be used in advertising or publicity pertaining to
+ :distribution of the software without specific, written prior
+ :permission.
+ :
+ :DIGITAL AND QUARTERDECK DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ :SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ :FITNESS, IN NO EVENT SHALL DIGITAL 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.
+ :
+ :*/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#ifdef __CYGWIN__
+ :#include <stdlib.h>
+ :#include <signal.h>
+ :#endif
+ :
+ :#if defined(WIN32) && !defined(__CYGWIN__)
+ :#include <X11/Xwinsock.h>
+ :#endif
+ :#include <X11/Xos.h>
+ :#include <stdio.h>
+ :#include <time.h>
+ :#if !defined(WIN32) || !defined(__MINGW32__)
+ :#include <sys/time.h>
+ :#include <sys/resource.h>
+ :#endif
+ :#include "misc.h"
+ :#include <X11/X.h>
+ :#define XSERV_t
+ :#define TRANS_SERVER
+ :#define TRANS_REOPEN
+ :#include <X11/Xtrans/Xtrans.h>
+ :#include "input.h"
+ :#include "dixfont.h"
+ :#include "osdep.h"
+ :#include "extension.h"
+ :#ifdef X_POSIX_C_SOURCE
+ :#define _POSIX_C_SOURCE X_POSIX_C_SOURCE
+ :#include <signal.h>
+ :#undef _POSIX_C_SOURCE
+ :#else
+ :#if defined(X_NOT_POSIX) || defined(_POSIX_SOURCE)
+ :#include <signal.h>
+ :#else
+ :#define _POSIX_SOURCE
+ :#include <signal.h>
+ :#undef _POSIX_SOURCE
+ :#endif
+ :#endif
+ :#ifndef WIN32
+ :#include <sys/wait.h>
+ :#endif
+ :#if !defined(SYSV) && !defined(WIN32) && !defined(Lynx) && !defined(QNX4)
+ :#include <sys/resource.h>
+ :#endif
+ :#include <sys/stat.h>
+ :#include <ctype.h> /* for isspace */
+ :#include <stdarg.h>
+ :
+ :#if defined(DGUX)
+ :#include <sys/resource.h>
+ :#include <netdb.h>
+ :#endif
+ :
+ :#include <stdlib.h> /* for malloc() */
+ :
+ :#if defined(TCPCONN) || defined(STREAMSCONN)
+ :# ifndef WIN32
+ :# include <netdb.h>
+ :# endif
+ :#endif
+ :
+ :#include "opaque.h"
+ :
+ :#ifdef SMART_SCHEDULE
+ :#include "dixstruct.h"
+ :#endif
+ :
+ :#ifdef XKB
+ :#include <xkbsrv.h>
+ :#endif
+ :#ifdef XCSECURITY
+ :#include "securitysrv.h"
+ :#endif
+ :
+ :#ifdef RENDER
+ :#include "picture.h"
+ :#endif
+ :
+ :#ifdef XPRINT
+ :#include "DiPrint.h"
+ :#endif
+ :
+ :_X_EXPORT Bool noTestExtensions;
+ :#ifdef BIGREQS
+ :_X_EXPORT Bool noBigReqExtension = FALSE;
+ :#endif
+ :#ifdef COMPOSITE
+ :_X_EXPORT Bool noCompositeExtension = FALSE;
+ :#endif
+ :
+ :#ifdef DAMAGE
+ :_X_EXPORT Bool noDamageExtension = FALSE;
+ :#endif
+ :#ifdef DBE
+ :_X_EXPORT Bool noDbeExtension = FALSE;
+ :#endif
+ :#ifdef DPMSExtension
+ :_X_EXPORT Bool noDPMSExtension = FALSE;
+ :#endif
+ :#ifdef EVI
+ :_X_EXPORT Bool noEVIExtension = FALSE;
+ :#endif
+ :#ifdef FONTCACHE
+ :_X_EXPORT Bool noFontCacheExtension = FALSE;
+ :#endif
+ :#ifdef GLXEXT
+ :_X_EXPORT Bool noGlxExtension = FALSE;
+ :#endif
+ :#ifdef SCREENSAVER
+ :_X_EXPORT Bool noScreenSaverExtension = FALSE;
+ :#endif
+ :#ifdef MITSHM
+ :_X_EXPORT Bool noMITShmExtension = FALSE;
+ :#endif
+ :#ifdef MITMISC
+ :_X_EXPORT Bool noMITMiscExtension = FALSE;
+ :#endif
+ :#ifdef MULTIBUFFER
+ :_X_EXPORT Bool noMultibufferExtension = FALSE;
+ :#endif
+ :#ifdef RANDR
+ :_X_EXPORT Bool noRRExtension = FALSE;
+ :#endif
+ :#ifdef RENDER
+ :_X_EXPORT Bool noRenderExtension = FALSE;
+ :#endif
+ :#ifdef SHAPE
+ :_X_EXPORT Bool noShapeExtension = FALSE;
+ :#endif
+ :#ifdef XCSECURITY
+ :_X_EXPORT Bool noSecurityExtension = FALSE;
+ :#endif
+ :#ifdef XSYNC
+ :_X_EXPORT Bool noSyncExtension = FALSE;
+ :#endif
+ :#ifdef TOGCUP
+ :_X_EXPORT Bool noXcupExtension = FALSE;
+ :#endif
+ :#ifdef RES
+ :_X_EXPORT Bool noResExtension = FALSE;
+ :#endif
+ :#ifdef XAPPGROUP
+ :_X_EXPORT Bool noXagExtension = FALSE;
+ :#endif
+ :#ifdef XCMISC
+ :_X_EXPORT Bool noXCMiscExtension = FALSE;
+ :#endif
+ :#ifdef XEVIE
+ :/* Xevie is disabled by default for now until the
+ : * interface is stable */
+ :_X_EXPORT Bool noXevieExtension = TRUE;
+ :#endif
+ :#ifdef XF86BIGFONT
+ :_X_EXPORT Bool noXFree86BigfontExtension = FALSE;
+ :#endif
+ :#ifdef XFreeXDGA
+ :_X_EXPORT Bool noXFree86DGAExtension = FALSE;
+ :#endif
+ :#ifdef XF86DRI
+ :_X_EXPORT Bool noXFree86DRIExtension = FALSE;
+ :#endif
+ :#ifdef XF86MISC
+ :_X_EXPORT Bool noXFree86MiscExtension = FALSE;
+ :#endif
+ :#ifdef XF86VIDMODE
+ :_X_EXPORT Bool noXFree86VidModeExtension = FALSE;
+ :#endif
+ :#ifdef XFIXES
+ :_X_EXPORT Bool noXFixesExtension = FALSE;
+ :#endif
+ :/* |noXkbExtension| is defined in xc/programs/Xserver/xkb/xkbInit.c */
+ :#ifdef PANORAMIX
+ :/* Xinerama is disabled by default unless enabled via +xinerama */
+ :_X_EXPORT Bool noPanoramiXExtension = TRUE;
+ :#endif
+ :#ifdef XINPUT
+ :_X_EXPORT Bool noXInputExtension = FALSE;
+ :#endif
+ :#ifdef XIDLE
+ :_X_EXPORT Bool noXIdleExtension = FALSE;
+ :#endif
+ :#ifdef XV
+ :_X_EXPORT Bool noXvExtension = FALSE;
+ :#endif
+ :
+ :#define X_INCLUDE_NETDB_H
+ :#include <X11/Xos_r.h>
+ :
+ :#include <errno.h>
+ :
+ :Bool CoreDump;
+ :
+ :#ifdef PANORAMIX
+ :Bool PanoramiXExtensionDisabledHack = FALSE;
+ :#endif
+ :
+ :int auditTrailLevel = 1;
+ :
+ :_X_EXPORT Bool Must_have_memory = FALSE;
+ :
+ :#ifdef AIXV3
+ :int SyncOn = 0;
+ :extern int SelectWaitTime;
+ :#endif
+ :
+ :#if defined(SVR4) || defined(__linux__) || defined(CSRG_BASED)
+ :#define HAS_SAVED_IDS_AND_SETEUID
+ :#endif
+ :
+ :#ifdef MEMBUG
+ :#define MEM_FAIL_SCALE 100000
+ :long Memory_fail = 0;
+ :#include <stdlib.h> /* for random() */
+ :#endif
+ :
+ :static char *dev_tty_from_init = NULL; /* since we need to parse it anyway */
+ :
+ :OsSigHandlerPtr
+ :OsSignal(sig, handler)
+ : int sig;
+ : OsSigHandlerPtr handler;
+ :{
+ :#ifdef X_NOT_POSIX
+ : return signal(sig, handler);
+ :#else
+ : struct sigaction act, oact;
+ :
+ : sigemptyset(&act.sa_mask);
+ : if (handler != SIG_IGN)
+ : sigaddset(&act.sa_mask, sig);
+ : act.sa_flags = 0;
+ : act.sa_handler = handler;
+ : sigaction(sig, &act, &oact);
+ : return oact.sa_handler;
+ :#endif
+ :}
+ :
+ :#ifdef SERVER_LOCK
+ :/*
+ : * Explicit support for a server lock file like the ones used for UUCP.
+ : * For architectures with virtual terminals that can run more than one
+ : * server at a time. This keeps the servers from stomping on each other
+ : * if the user forgets to give them different display numbers.
+ : */
+ :#define LOCK_DIR "/tmp"
+ :#define LOCK_TMP_PREFIX "/.tX"
+ :#define LOCK_PREFIX "/.X"
+ :#define LOCK_SUFFIX "-lock"
+ :
+ :#if defined(DGUX)
+ :#include <limits.h>
+ :#include <sys/param.h>
+ :#endif
+ :
+ :#ifndef PATH_MAX
+ :#ifndef Lynx
+ :#include <sys/param.h>
+ :#else
+ :#include <param.h>
+ :#endif
+ :#ifndef PATH_MAX
+ :#ifdef MAXPATHLEN
+ :#define PATH_MAX MAXPATHLEN
+ :#else
+ :#define PATH_MAX 1024
+ :#endif
+ :#endif
+ :#endif
+ :
+ :static Bool StillLocking = FALSE;
+ :static char LockFile[PATH_MAX];
+ :static Bool nolock = FALSE;
+ :
+ :/*
+ : * LockServer --
+ : * Check if the server lock file exists. If so, check if the PID
+ : * contained inside is valid. If so, then die. Otherwise, create
+ : * the lock file containing the PID.
+ : */
+ :void
+ :LockServer(void)
+ :{
+ : char tmp[PATH_MAX], pid_str[12];
+ : int lfd, i, haslock, l_pid, t;
+ : char *tmppath = NULL;
+ : int len;
+ : char port[20];
+ :
+ : if (nolock) return;
+ : /*
+ : * Path names
+ : */
+ : tmppath = LOCK_DIR;
+ :
+ : sprintf(port, "%d", atoi(display));
+ : len = strlen(LOCK_PREFIX) > strlen(LOCK_TMP_PREFIX) ? strlen(LOCK_PREFIX) :
+ : strlen(LOCK_TMP_PREFIX);
+ : len += strlen(tmppath) + strlen(port) + strlen(LOCK_SUFFIX) + 1;
+ : if (len > sizeof(LockFile))
+ : FatalError("Display name `%s' is too long\n", port);
+ : (void)sprintf(tmp, "%s" LOCK_TMP_PREFIX "%s" LOCK_SUFFIX, tmppath, port);
+ : (void)sprintf(LockFile, "%s" LOCK_PREFIX "%s" LOCK_SUFFIX, tmppath, port);
+ :
+ : /*
+ : * Create a temporary file containing our PID. Attempt three times
+ : * to create the file.
+ : */
+ : StillLocking = TRUE;
+ : i = 0;
+ : do {
+ : i++;
+ : lfd = open(tmp, O_CREAT | O_EXCL | O_WRONLY, 0644);
+ : if (lfd < 0)
+ : sleep(2);
+ : else
+ : break;
+ : } while (i < 3);
+ : if (lfd < 0) {
+ : unlink(tmp);
+ : i = 0;
+ : do {
+ : i++;
+ : lfd = open(tmp, O_CREAT | O_EXCL | O_WRONLY, 0644);
+ : if (lfd < 0)
+ : sleep(2);
+ : else
+ : break;
+ : } while (i < 3);
+ : }
+ : if (lfd < 0)
+ : FatalError("Could not create lock file in %s\n", tmp);
+ : (void) sprintf(pid_str, "%10ld\n", (long)getpid());
+ : (void) write(lfd, pid_str, 11);
+ :#ifndef USE_CHMOD
+ : (void) fchmod(lfd, 0444);
+ :#else
+ : (void) chmod(tmp, 0444);
+ :#endif
+ : (void) close(lfd);
+ :
+ : /*
+ : * OK. Now the tmp file exists. Try three times to move it in place
+ : * for the lock.
+ : */
+ : i = 0;
+ : haslock = 0;
+ : while ((!haslock) && (i++ < 3)) {
+ : haslock = (link(tmp,LockFile) == 0);
+ : if (haslock) {
+ : /*
+ : * We're done.
+ : */
+ : break;
+ : }
+ : else {
+ : /*
+ : * Read the pid from the existing file
+ : */
+ : lfd = open(LockFile, O_RDONLY);
+ : if (lfd < 0) {
+ : unlink(tmp);
+ : FatalError("Can't read lock file %s\n", LockFile);
+ : }
+ : pid_str[0] = '\0';
+ : if (read(lfd, pid_str, 11) != 11) {
+ : /*
+ : * Bogus lock file.
+ : */
+ : unlink(LockFile);
+ : close(lfd);
+ : continue;
+ : }
+ : pid_str[11] = '\0';
+ : sscanf(pid_str, "%d", &l_pid);
+ : close(lfd);
+ :
+ : /*
+ : * Now try to kill the PID to see if it exists.
+ : */
+ : errno = 0;
+ : t = kill(l_pid, 0);
+ : if ((t< 0) && (errno == ESRCH)) {
+ : /*
+ : * Stale lock file.
+ : */
+ : unlink(LockFile);
+ : continue;
+ : }
+ : else if (((t < 0) && (errno == EPERM)) || (t == 0)) {
+ : /*
+ : * Process is still active.
+ : */
+ : unlink(tmp);
+ : FatalError("Server is already active for display %s\n%s %s\n%s\n",
+ : port, "\tIf this server is no longer running, remove",
+ : LockFile, "\tand start again.");
+ : }
+ : }
+ : }
+ : unlink(tmp);
+ : if (!haslock)
+ : FatalError("Could not create server lock file: %s\n", LockFile);
+ : StillLocking = FALSE;
+ :}
+ :
+ :/*
+ : * UnlockServer --
+ : * Remove the server lock file.
+ : */
+ :void
+ :UnlockServer(void)
+ :{
+ : if (nolock) return;
+ :
+ : if (!StillLocking){
+ :
+ : (void) unlink(LockFile);
+ : }
+ :}
+ :#endif /* SERVER_LOCK */
+ :
+ :/* Force connections to close on SIGHUP from init */
+ :
+ :/*ARGSUSED*/
+ :SIGVAL
+ :AutoResetServer (int sig)
+ :{
+ : int olderrno = errno;
+ :
+ : dispatchException |= DE_RESET;
+ : isItTimeToYield = TRUE;
+ :#ifdef GPROF
+ : chdir ("/tmp");
+ : exit (0);
+ :#endif
+ :#if defined(SYSV) && defined(X_NOT_POSIX)
+ : OsSignal (SIGHUP, AutoResetServer);
+ :#endif
+ : errno = olderrno;
+ :}
+ :
+ :/* Force connections to close and then exit on SIGTERM, SIGINT */
+ :
+ :/*ARGSUSED*/
+ :_X_EXPORT SIGVAL
+ :GiveUp(int sig)
+ :{
+ : int olderrno = errno;
+ :
+ : dispatchException |= DE_TERMINATE;
+ : isItTimeToYield = TRUE;
+ :#if defined(SYSV) && defined(X_NOT_POSIX)
+ : if (sig)
+ : OsSignal(sig, SIG_IGN);
+ :#endif
+ : errno = olderrno;
+ :}
+ :
+ :#if defined WIN32 && defined __MINGW32__
+ :_X_EXPORT CARD32
+ :GetTimeInMillis (void)
+ :{
+ : return GetTickCount ();
+ :}
+ :#else
+ :_X_EXPORT CARD32
+ :GetTimeInMillis(void)
+ 1 0.0011 :{ /* GetTimeInMillis total: 1 0.0011 */
+ : struct timeval tv;
+ :
+ :#ifdef MONOTONIC_CLOCK
+ : struct timespec tp;
+ : if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0)
+ : return (tp.tv_sec * 1000) + (tp.tv_nsec / 1000000L);
+ :#endif
+ :
+ : X_GETTIMEOFDAY(&tv);
+ : return(tv.tv_sec * 1000) + (tv.tv_usec / 1000);
+ :}
+ :#endif
+ :
+ :_X_EXPORT void
+ :AdjustWaitForDelay (pointer waitTime, unsigned long newdelay)
+ :{
+ : static struct timeval delay_val;
+ : struct timeval **wt = (struct timeval **) waitTime;
+ : unsigned long olddelay;
+ :
+ : if (*wt == NULL)
+ : {
+ : delay_val.tv_sec = newdelay / 1000;
+ : delay_val.tv_usec = 1000 * (newdelay % 1000);
+ : *wt = &delay_val;
+ : }
+ : else
+ : {
+ : olddelay = (*wt)->tv_sec * 1000 + (*wt)->tv_usec / 1000;
+ : if (newdelay < olddelay)
+ : {
+ : (*wt)->tv_sec = newdelay / 1000;
+ : (*wt)->tv_usec = 1000 * (newdelay % 1000);
+ : }
+ : }
+ :}
+ :
+ :void UseMsg(void)
+ :{
+ :#if !defined(AIXrt) && !defined(AIX386)
+ : ErrorF("use: X [:<display>] [option]\n");
+ : ErrorF("-a # mouse acceleration (pixels)\n");
+ : ErrorF("-ac disable access control restrictions\n");
+ :#ifdef MEMBUG
+ : ErrorF("-alloc int chance alloc should fail\n");
+ :#endif
+ : ErrorF("-audit int set audit trail level\n");
+ : ErrorF("-auth file select authorization file\n");
+ : ErrorF("-br create root window with black background\n");
+ : ErrorF("+bs enable any backing store support\n");
+ : ErrorF("-bs disable any backing store support\n");
+ : ErrorF("-c turns off key-click\n");
+ : ErrorF("c # key-click volume (0-100)\n");
+ : ErrorF("-cc int default color visual class\n");
+ : ErrorF("-co file color database file\n");
+ :#ifdef COMMANDLINE_CHALLENGED_OPERATING_SYSTEMS
+ : ErrorF("-config file read options from file\n");
+ :#endif
+ : ErrorF("-core generate core dump on fatal error\n");
+ : ErrorF("-dpi int screen resolution in dots per inch\n");
+ :#ifdef DPMSExtension
+ : ErrorF("dpms enables VESA DPMS monitor control\n");
+ : ErrorF("-dpms disables VESA DPMS monitor control\n");
+ :#endif
+ : ErrorF("-deferglyphs [none|all|16] defer loading of [no|all|16-bit] glyphs\n");
+ : ErrorF("-f # bell base (0-100)\n");
+ : ErrorF("-fc string cursor font\n");
+ : ErrorF("-fn string default font name\n");
+ : ErrorF("-fp string default font path\n");
+ : ErrorF("-help prints message with these options\n");
+ : ErrorF("-I ignore all remaining arguments\n");
+ :#ifdef RLIMIT_DATA
+ : ErrorF("-ld int limit data space to N Kb\n");
+ :#endif
+ :#ifdef RLIMIT_NOFILE
+ : ErrorF("-lf int limit number of open files to N\n");
+ :#endif
+ :#ifdef RLIMIT_STACK
+ : ErrorF("-ls int limit stack space to N Kb\n");
+ :#endif
+ :#ifdef SERVER_LOCK
+ : ErrorF("-nolock disable the locking mechanism\n");
+ :#endif
+ :#ifndef NOLOGOHACK
+ : ErrorF("-logo enable logo in screen saver\n");
+ : ErrorF("nologo disable logo in screen saver\n");
+ :#endif
+ : ErrorF("-nolisten string don't listen on protocol\n");
+ : ErrorF("-noreset don't reset after last client exists\n");
+ : ErrorF("-reset reset after last client exists\n");
+ : ErrorF("-p # screen-saver pattern duration (minutes)\n");
+ : ErrorF("-pn accept failure to listen on all ports\n");
+ : ErrorF("-nopn reject failure to listen on all ports\n");
+ : ErrorF("-r turns off auto-repeat\n");
+ : ErrorF("r turns on auto-repeat \n");
+ :#ifdef RENDER
+ : ErrorF("-render [default|mono|gray|color] set render color alloc policy\n");
+ :#endif
+ : ErrorF("-s # screen-saver timeout (minutes)\n");
+ :#ifdef XCSECURITY
+ : ErrorF("-sp file security policy file\n");
+ :#endif
+ :#ifdef XPRINT
+ : PrinterUseMsg();
+ :#endif
+ : ErrorF("-su disable any save under support\n");
+ : ErrorF("-t # mouse threshold (pixels)\n");
+ : ErrorF("-terminate terminate at server reset\n");
+ : ErrorF("-to # connection time out\n");
+ : ErrorF("-tst disable testing extensions\n");
+ : ErrorF("ttyxx server started from init on /dev/ttyxx\n");
+ : ErrorF("v video blanking for screen-saver\n");
+ : ErrorF("-v screen-saver without video blanking\n");
+ : ErrorF("-wm WhenMapped default backing-store\n");
+ : ErrorF("-wr create root window with white background\n");
+ : ErrorF("-x string loads named extension at init time \n");
+ : ErrorF("-maxbigreqsize set maximal bigrequest size \n");
+ :#ifdef PANORAMIX
+ : ErrorF("+xinerama Enable XINERAMA extension\n");
+ : ErrorF("-xinerama Disable XINERAMA extension\n");
+ :#endif
+ :#ifdef SMART_SCHEDULE
+ : ErrorF("-dumbSched Disable smart scheduling, enable old behavior\n");
+ : ErrorF("-schedInterval int Set scheduler interval in msec\n");
+ :#endif
+ : ErrorF("+extension name Enable extension\n");
+ : ErrorF("-extension name Disable extension\n");
+ :#ifdef XDMCP
+ : XdmcpUseMsg();
+ :#endif
+ :#endif /* !AIXrt && ! AIX386 */
+ :#ifdef XKB
+ : XkbUseMsg();
+ :#endif
+ : ddxUseMsg();
+ :}
+ :
+ :/* This function performs a rudimentary sanity check
+ : * on the display name passed in on the command-line,
+ : * since this string is used to generate filenames.
+ : * It is especially important that the display name
+ : * not contain a "/" and not start with a "-".
+ : * --kvajk
+ : */
+ :static int
+ :VerifyDisplayName(const char *d)
+ :{
+ : if ( d == (char *)0 ) return( 0 ); /* null */
+ : if ( *d == '\0' ) return( 0 ); /* empty */
+ : if ( *d == '-' ) return( 0 ); /* could be confused for an option */
+ : if ( *d == '.' ) return( 0 ); /* must not equal "." or ".." */
+ : if ( strchr(d, '/') != (char *)0 ) return( 0 ); /* very important!!! */
+ : return( 1 );
+ :}
+ :
+ :/*
+ : * This function is responsible for doing initalisation of any global
+ : * variables at an very early point of server startup (even before
+ : * |ProcessCommandLine()|.
+ : */
+ :void InitGlobals(void)
+ :{
+ : ddxInitGlobals();
+ :}
+ :
+ :
+ :/*
+ : * This function parses the command line. Handles device-independent fields
+ : * and allows ddx to handle additional fields. It is not allowed to modify
+ : * argc or any of the strings pointed to by argv.
+ : */
+ :void
+ :ProcessCommandLine(int argc, char *argv[])
+ :{
+ : int i, skip;
+ :
+ : defaultKeyboardControl.autoRepeat = TRUE;
+ :
+ :#ifdef NO_PART_NET
+ : PartialNetwork = FALSE;
+ :#else
+ : PartialNetwork = TRUE;
+ :#endif
+ :
+ : for ( i = 1; i < argc; i++ )
+ : {
+ : /* call ddx first, so it can peek/override if it wants */
+ : if((skip = ddxProcessArgument(argc, argv, i)))
+ : {
+ : i += (skip - 1);
+ : }
+ : else if(argv[i][0] == ':')
+ : {
+ : /* initialize display */
+ : display = argv[i];
+ : display++;
+ : if( ! VerifyDisplayName( display ) ) {
+ : ErrorF("Bad display name: %s\n", display);
+ : UseMsg();
+ : FatalError("Bad display name, exiting: %s\n", display);
+ : }
+ : }
+ : else if ( strcmp( argv[i], "-a") == 0)
+ : {
+ : if(++i < argc)
+ : defaultPointerControl.num = atoi(argv[i]);
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-ac") == 0)
+ : {
+ : defeatAccessControl = TRUE;
+ : }
+ :#ifdef MEMBUG
+ : else if ( strcmp( argv[i], "-alloc") == 0)
+ : {
+ : if(++i < argc)
+ : Memory_fail = atoi(argv[i]);
+ : else
+ : UseMsg();
+ : }
+ :#endif
+ : else if ( strcmp( argv[i], "-audit") == 0)
+ : {
+ : if(++i < argc)
+ : auditTrailLevel = atoi(argv[i]);
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-auth") == 0)
+ : {
+ : if(++i < argc)
+ : InitAuthorization (argv[i]);
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-br") == 0)
+ : blackRoot = TRUE;
+ : else if ( strcmp( argv[i], "+bs") == 0)
+ : enableBackingStore = TRUE;
+ : else if ( strcmp( argv[i], "-bs") == 0)
+ : disableBackingStore = TRUE;
+ : else if ( strcmp( argv[i], "c") == 0)
+ : {
+ : if(++i < argc)
+ : defaultKeyboardControl.click = atoi(argv[i]);
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-c") == 0)
+ : {
+ : defaultKeyboardControl.click = 0;
+ : }
+ : else if ( strcmp( argv[i], "-cc") == 0)
+ : {
+ : if(++i < argc)
+ : defaultColorVisualClass = atoi(argv[i]);
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-co") == 0)
+ : {
+ : if(++i < argc)
+ : rgbPath = argv[i];
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-core") == 0)
+ : {
+ : CoreDump = TRUE;
+ :#if !defined(WIN32) || !defined(__MINGW32__)
+ : struct rlimit core_limit;
+ : getrlimit (RLIMIT_CORE, &core_limit);
+ : core_limit.rlim_cur = core_limit.rlim_max;
+ : setrlimit (RLIMIT_CORE, &core_limit);
+ :#endif
+ : }
+ : else if ( strcmp( argv[i], "-dpi") == 0)
+ : {
+ : if(++i < argc)
+ : monitorResolution = atoi(argv[i]);
+ : else
+ : UseMsg();
+ : }
+ :#ifdef DPMSExtension
+ : else if ( strcmp( argv[i], "dpms") == 0)
+ : DPMSEnabledSwitch = TRUE;
+ : else if ( strcmp( argv[i], "-dpms") == 0)
+ : DPMSDisabledSwitch = TRUE;
+ :#endif
+ : else if ( strcmp( argv[i], "-deferglyphs") == 0)
+ : {
+ : if(++i >= argc || !ParseGlyphCachingMode(argv[i]))
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-f") == 0)
+ : {
+ : if(++i < argc)
+ : defaultKeyboardControl.bell = atoi(argv[i]);
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-fc") == 0)
+ : {
+ : if(++i < argc)
+ : defaultCursorFont = argv[i];
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-fn") == 0)
+ : {
+ : if(++i < argc)
+ : defaultTextFont = argv[i];
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-fp") == 0)
+ : {
+ : if(++i < argc)
+ : {
+ : defaultFontPath = argv[i];
+ : }
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-help") == 0)
+ : {
+ : UseMsg();
+ : exit(0);
+ : }
+ :#ifdef XKB
+ : else if ( (skip=XkbProcessArguments(argc,argv,i))!=0 ) {
+ : if (skip>0)
+ : i+= skip-1;
+ : else UseMsg();
+ : }
+ :#endif
+ :#ifdef RLIMIT_DATA
+ : else if ( strcmp( argv[i], "-ld") == 0)
+ : {
+ : if(++i < argc)
+ : {
+ : limitDataSpace = atoi(argv[i]);
+ : if (limitDataSpace > 0)
+ : limitDataSpace *= 1024;
+ : }
+ : else
+ : UseMsg();
+ : }
+ :#endif
+ :#ifdef RLIMIT_NOFILE
+ : else if ( strcmp( argv[i], "-lf") == 0)
+ : {
+ : if(++i < argc)
+ : limitNoFile = atoi(argv[i]);
+ : else
+ : UseMsg();
+ : }
+ :#endif
+ :#ifdef RLIMIT_STACK
+ : else if ( strcmp( argv[i], "-ls") == 0)
+ : {
+ : if(++i < argc)
+ : {
+ : limitStackSpace = atoi(argv[i]);
+ : if (limitStackSpace > 0)
+ : limitStackSpace *= 1024;
+ : }
+ : else
+ : UseMsg();
+ : }
+ :#endif
+ :#ifdef SERVER_LOCK
+ : else if ( strcmp ( argv[i], "-nolock") == 0)
+ : {
+ :#if !defined(WIN32) && !defined(__CYGWIN__)
+ : if (getuid() != 0)
+ : ErrorF("Warning: the -nolock option can only be used by root\n");
+ : else
+ :#endif
+ : nolock = TRUE;
+ : }
+ :#endif
+ :#ifndef NOLOGOHACK
+ : else if ( strcmp( argv[i], "-logo") == 0)
+ : {
+ : logoScreenSaver = 1;
+ : }
+ : else if ( strcmp( argv[i], "nologo") == 0)
+ : {
+ : logoScreenSaver = 0;
+ : }
+ :#endif
+ : else if ( strcmp( argv[i], "-nolisten") == 0)
+ : {
+ : if(++i < argc) {
+ : if (_XSERVTransNoListen(argv[i]))
+ : FatalError ("Failed to disable listen for %s transport",
+ : argv[i]);
+ : } else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-noreset") == 0)
+ : {
+ : dispatchExceptionAtReset = 0;
+ : }
+ : else if ( strcmp( argv[i], "-reset") == 0)
+ : {
+ : dispatchExceptionAtReset = DE_RESET;
+ : }
+ : else if ( strcmp( argv[i], "-p") == 0)
+ : {
+ : if(++i < argc)
+ : defaultScreenSaverInterval = ((CARD32)atoi(argv[i])) *
+ : MILLI_PER_MIN;
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-pn") == 0)
+ : PartialNetwork = TRUE;
+ : else if ( strcmp( argv[i], "-nopn") == 0)
+ : PartialNetwork = FALSE;
+ : else if ( strcmp( argv[i], "r") == 0)
+ : defaultKeyboardControl.autoRepeat = TRUE;
+ : else if ( strcmp( argv[i], "-r") == 0)
+ : defaultKeyboardControl.autoRepeat = FALSE;
+ : else if ( strcmp( argv[i], "-s") == 0)
+ : {
+ : if(++i < argc)
+ : defaultScreenSaverTime = ((CARD32)atoi(argv[i])) *
+ : MILLI_PER_MIN;
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-su") == 0)
+ : disableSaveUnders = TRUE;
+ : else if ( strcmp( argv[i], "-t") == 0)
+ : {
+ : if(++i < argc)
+ : defaultPointerControl.threshold = atoi(argv[i]);
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-terminate") == 0)
+ : {
+ : dispatchExceptionAtReset = DE_TERMINATE;
+ : }
+ : else if ( strcmp( argv[i], "-to") == 0)
+ : {
+ : if(++i < argc)
+ : TimeOutValue = ((CARD32)atoi(argv[i])) * MILLI_PER_SECOND;
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-tst") == 0)
+ : {
+ : noTestExtensions = TRUE;
+ : }
+ : else if ( strcmp( argv[i], "v") == 0)
+ : defaultScreenSaverBlanking = PreferBlanking;
+ : else if ( strcmp( argv[i], "-v") == 0)
+ : defaultScreenSaverBlanking = DontPreferBlanking;
+ : else if ( strcmp( argv[i], "-wm") == 0)
+ : defaultBackingStore = WhenMapped;
+ : else if ( strcmp( argv[i], "-wr") == 0)
+ : whiteRoot = TRUE;
+ : else if ( strcmp( argv[i], "-maxbigreqsize") == 0) {
+ : if(++i < argc) {
+ : long reqSizeArg = atol(argv[i]);
+ :
+ : /* Request size > 128MB does not make much sense... */
+ : if( reqSizeArg > 0L && reqSizeArg < 128L ) {
+ : maxBigRequestSize = (reqSizeArg * 1048576L) - 1L;
+ : }
+ : else
+ : {
+ : UseMsg();
+ : }
+ : }
+ : else
+ : {
+ : UseMsg();
+ : }
+ : }
+ :#ifdef PANORAMIX
+ : else if ( strcmp( argv[i], "+xinerama") == 0){
+ : noPanoramiXExtension = FALSE;
+ : }
+ : else if ( strcmp( argv[i], "-xinerama") == 0){
+ : noPanoramiXExtension = TRUE;
+ : }
+ : else if ( strcmp( argv[i], "-disablexineramaextension") == 0){
+ : PanoramiXExtensionDisabledHack = TRUE;
+ : }
+ :#endif
+ : else if ( strcmp( argv[i], "-x") == 0)
+ : {
+ : if(++i >= argc)
+ : UseMsg();
+ : /* For U**x, which doesn't support dynamic loading, there's nothing
+ : * to do when we see a -x. Either the extension is linked in or
+ : * it isn't */
+ : }
+ : else if ( strcmp( argv[i], "-I") == 0)
+ : {
+ : /* ignore all remaining arguments */
+ : break;
+ : }
+ : else if (strncmp (argv[i], "tty", 3) == 0)
+ : {
+ : /* just in case any body is interested */
+ : dev_tty_from_init = argv[i];
+ : }
+ :#ifdef XDMCP
+ : else if ((skip = XdmcpOptions(argc, argv, i)) != i)
+ : {
+ : i = skip - 1;
+ : }
+ :#endif
+ :#ifdef XPRINT
+ : else if ((skip = PrinterOptions(argc, argv, i)) != i)
+ : {
+ : i = skip - 1;
+ : }
+ :#endif
+ :#ifdef XCSECURITY
+ : else if ((skip = XSecurityOptions(argc, argv, i)) != i)
+ : {
+ : i = skip - 1;
+ : }
+ :#endif
+ :#ifdef AIXV3
+ : else if ( strcmp( argv[i], "-timeout") == 0)
+ : {
+ : if(++i < argc)
+ : SelectWaitTime = atoi(argv[i]);
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-sync") == 0)
+ : {
+ : SyncOn++;
+ : }
+ :#endif
+ :#ifdef SMART_SCHEDULE
+ : else if ( strcmp( argv[i], "-dumbSched") == 0)
+ : {
+ : SmartScheduleDisable = TRUE;
+ : }
+ : else if ( strcmp( argv[i], "-schedInterval") == 0)
+ : {
+ : if (++i < argc)
+ : {
+ : SmartScheduleInterval = atoi(argv[i]);
+ : SmartScheduleSlice = SmartScheduleInterval;
+ : }
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-schedMax") == 0)
+ : {
+ : if (++i < argc)
+ : {
+ : SmartScheduleMaxSlice = atoi(argv[i]);
+ : }
+ : else
+ : UseMsg();
+ : }
+ :#endif
+ :#ifdef RENDER
+ : else if ( strcmp( argv[i], "-render" ) == 0)
+ : {
+ : if (++i < argc)
+ : {
+ : int policy = PictureParseCmapPolicy (argv[i]);
+ :
+ : if (policy != PictureCmapPolicyInvalid)
+ : PictureCmapPolicy = policy;
+ : else
+ : UseMsg ();
+ : }
+ : else
+ : UseMsg ();
+ : }
+ :#endif
+ : else if ( strcmp( argv[i], "+extension") == 0)
+ : {
+ : if (++i < argc)
+ : {
+ : if (!EnableDisableExtension(argv[i], TRUE))
+ : EnableDisableExtensionError(argv[i], TRUE);
+ : }
+ : else
+ : UseMsg();
+ : }
+ : else if ( strcmp( argv[i], "-extension") == 0)
+ : {
+ : if (++i < argc)
+ : {
+ : if (!EnableDisableExtension(argv[i], FALSE))
+ : EnableDisableExtensionError(argv[i], FALSE);
+ : }
+ : else
+ : UseMsg();
+ : }
+ : else
+ : {
+ : ErrorF("Unrecognized option: %s\n", argv[i]);
+ : UseMsg();
+ : FatalError("Unrecognized option: %s\n", argv[i]);
+ : }
+ : }
+ :}
+ :
+ :#ifdef COMMANDLINE_CHALLENGED_OPERATING_SYSTEMS
+ :static void
+ :InsertFileIntoCommandLine(
+ : int *resargc, char ***resargv,
+ : int prefix_argc, char **prefix_argv,
+ : char *filename,
+ : int suffix_argc, char **suffix_argv)
+ :{
+ : struct stat st;
+ : FILE *f;
+ : char *p;
+ : char *q;
+ : int insert_argc;
+ : char *buf;
+ : int len;
+ : int i;
+ :
+ : f = fopen(filename, "r");
+ : if (!f)
+ : FatalError("Can't open option file %s\n", filename);
+ :
+ : fstat(fileno(f), &st);
+ :
+ : buf = (char *) xalloc((unsigned) st.st_size + 1);
+ : if (!buf)
+ : FatalError("Out of Memory\n");
+ :
+ : len = fread(buf, 1, (unsigned) st.st_size, f);
+ :
+ : fclose(f);
+ :
+ : if (len < 0)
+ : FatalError("Error reading option file %s\n", filename);
+ :
+ : buf[len] = '\0';
+ :
+ : p = buf;
+ : q = buf;
+ : insert_argc = 0;
+ :
+ : while (*p)
+ : {
+ : while (isspace(*p))
+ : p++;
+ : if (!*p)
+ : break;
+ : if (*p == '#')
+ : {
+ : while (*p && *p != '\n')
+ : p++;
+ : } else
+ : {
+ : while (*p && !isspace(*p))
+ : *q++ = *p++;
+ : /* Since p and q might still be pointing at the same place, we */
+ : /* need to step p over the whitespace now before we add the null. */
+ : if (*p)
+ : p++;
+ : *q++ = '\0';
+ : insert_argc++;
+ : }
+ : }
+ :
+ : buf = (char *) xrealloc(buf, q - buf);
+ : if (!buf)
+ : FatalError("Out of memory reallocing option buf\n");
+ :
+ : *resargc = prefix_argc + insert_argc + suffix_argc;
+ : *resargv = (char **) xalloc((*resargc + 1) * sizeof(char *));
+ : if (!*resargv)
+ : FatalError("Out of Memory\n");
+ :
+ : memcpy(*resargv, prefix_argv, prefix_argc * sizeof(char *));
+ :
+ : p = buf;
+ : for (i = 0; i < insert_argc; i++)
+ : {
+ : (*resargv)[prefix_argc + i] = p;
+ : p += strlen(p) + 1;
+ : }
+ :
+ : memcpy(*resargv + prefix_argc + insert_argc,
+ : suffix_argv, suffix_argc * sizeof(char *));
+ :
+ : (*resargv)[*resargc] = NULL;
+ :} /* end InsertFileIntoCommandLine */
+ :
+ :
+ :void
+ :ExpandCommandLine(int *pargc, char ***pargv)
+ :{
+ : int i;
+ :
+ :#if !defined(WIN32) && !defined(__CYGWIN__)
+ : if (getuid() != geteuid())
+ : return;
+ :#endif
+ :
+ : for (i = 1; i < *pargc; i++)
+ : {
+ : if ( (0 == strcmp((*pargv)[i], "-config")) && (i < (*pargc - 1)) )
+ : {
+ : InsertFileIntoCommandLine(pargc, pargv,
+ : i, *pargv,
+ : (*pargv)[i+1], /* filename */
+ : *pargc - i - 2, *pargv + i + 2);
+ : i--;
+ : }
+ : }
+ :} /* end ExpandCommandLine */
+ :#endif
+ :
+ :/* Implement a simple-minded font authorization scheme. The authorization
+ : name is "hp-hostname-1", the contents are simply the host name. */
+ :int
+ :set_font_authorizations(char **authorizations, int *authlen, pointer client)
+ :{
+ :#define AUTHORIZATION_NAME "hp-hostname-1"
+ :#if defined(TCPCONN) || defined(STREAMSCONN)
+ : static char *result = NULL;
+ : static char *p = NULL;
+ :
+ : if (p == NULL)
+ : {
+ : char hname[1024], *hnameptr;
+ : unsigned int len;
+ :#if defined(IPv6) && defined(AF_INET6)
+ : struct addrinfo hints, *ai = NULL;
+ :#else
+ : struct hostent *host;
+ :#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
+ : _Xgethostbynameparams hparams;
+ :#endif
+ :#endif
+ :
+ : gethostname(hname, 1024);
+ :#if defined(IPv6) && defined(AF_INET6)
+ : bzero(&hints, sizeof(hints));
+ : hints.ai_flags = AI_CANONNAME;
+ : if (getaddrinfo(hname, NULL, &hints, &ai) == 0) {
+ : hnameptr = ai->ai_canonname;
+ : } else {
+ : hnameptr = hname;
+ : }
+ :#else
+ : host = _XGethostbyname(hname, hparams);
+ : if (host == NULL)
+ : hnameptr = hname;
+ : else
+ : hnameptr = host->h_name;
+ :#endif
+ :
+ : len = strlen(hnameptr) + 1;
+ : result = xalloc(len + sizeof(AUTHORIZATION_NAME) + 4);
+ :
+ : p = result;
+ : *p++ = sizeof(AUTHORIZATION_NAME) >> 8;
+ : *p++ = sizeof(AUTHORIZATION_NAME) & 0xff;
+ : *p++ = (len) >> 8;
+ : *p++ = (len & 0xff);
+ :
+ : memmove(p, AUTHORIZATION_NAME, sizeof(AUTHORIZATION_NAME));
+ : p += sizeof(AUTHORIZATION_NAME);
+ : memmove(p, hnameptr, len);
+ : p += len;
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if (ai) {
+ : freeaddrinfo(ai);
+ : }
+ :#endif
+ : }
+ : *authlen = p - result;
+ : *authorizations = result;
+ : return 1;
+ :#else /* TCPCONN */
+ : return 0;
+ :#endif /* TCPCONN */
+ :}
+ :
+ :/* XALLOC -- X's internal memory allocator. Why does it return unsigned
+ : * long * instead of the more common char *? Well, if you read K&R you'll
+ : * see they say that alloc must return a pointer "suitable for conversion"
+ : * to whatever type you really want. In a full-blown generic allocator
+ : * there's no way to solve the alignment problems without potentially
+ : * wasting lots of space. But we have a more limited problem. We know
+ : * we're only ever returning pointers to structures which will have to
+ : * be long word aligned. So we are making a stronger guarantee. It might
+ : * have made sense to make Xalloc return char * to conform with people's
+ : * expectations of malloc, but this makes lint happier.
+ : */
+ :
+ :#ifndef INTERNAL_MALLOC
+ :
+ :_X_EXPORT void *
+ :Xalloc(unsigned long amount)
+ 6 0.0065 :{ /* Xalloc total: 10 0.0109 */
+ : register pointer ptr;
+ :
+ 1 0.0011 : if ((long)amount <= 0) {
+ : return (unsigned long *)NULL;
+ : }
+ : /* aligned extra on long word boundary */
+ : amount = (amount + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
+ :#ifdef MEMBUG
+ : if (!Must_have_memory && Memory_fail &&
+ : ((random() % MEM_FAIL_SCALE) < Memory_fail))
+ : return (unsigned long *)NULL;
+ :#endif
+ 1 0.0011 : if ((ptr = (pointer)malloc(amount))) {
+ : return (unsigned long *)ptr;
+ : }
+ : if (Must_have_memory)
+ : FatalError("Out of memory");
+ : return (unsigned long *)NULL;
+ 2 0.0022 :}
+ :
+ :/*****************
+ : * XNFalloc
+ : * "no failure" realloc, alternate interface to Xalloc w/o Must_have_memory
+ : *****************/
+ :
+ :_X_EXPORT void *
+ :XNFalloc(unsigned long amount)
+ :{
+ : register pointer ptr;
+ :
+ : if ((long)amount <= 0)
+ : {
+ : return (unsigned long *)NULL;
+ : }
+ : /* aligned extra on long word boundary */
+ : amount = (amount + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
+ : ptr = (pointer)malloc(amount);
+ : if (!ptr)
+ : {
+ : FatalError("Out of memory");
+ : }
+ : return ((unsigned long *)ptr);
+ :}
+ :
+ :/*****************
+ : * Xcalloc
+ : *****************/
+ :
+ :_X_EXPORT void *
+ :Xcalloc(unsigned long amount)
+ :{
+ : unsigned long *ret;
+ :
+ : ret = Xalloc (amount);
+ : if (ret)
+ : bzero ((char *) ret, (int) amount);
+ : return ret;
+ :}
+ :
+ :/*****************
+ : * XNFcalloc
+ : *****************/
+ :
+ :_X_EXPORT void *
+ :XNFcalloc(unsigned long amount)
+ :{
+ : unsigned long *ret;
+ :
+ : ret = Xalloc (amount);
+ : if (ret)
+ : bzero ((char *) ret, (int) amount);
+ : else if ((long)amount > 0)
+ : FatalError("Out of memory");
+ : return ret;
+ :}
+ :
+ :/*****************
+ : * Xrealloc
+ : *****************/
+ :
+ :_X_EXPORT void *
+ :Xrealloc(pointer ptr, unsigned long amount)
+ :{
+ :#ifdef MEMBUG
+ : if (!Must_have_memory && Memory_fail &&
+ : ((random() % MEM_FAIL_SCALE) < Memory_fail))
+ : return (unsigned long *)NULL;
+ :#endif
+ : if ((long)amount <= 0)
+ : {
+ : if (ptr && !amount)
+ : free(ptr);
+ : return (unsigned long *)NULL;
+ : }
+ : amount = (amount + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
+ : if (ptr)
+ : ptr = (pointer)realloc((char *)ptr, amount);
+ : else
+ : ptr = (pointer)malloc(amount);
+ : if (ptr)
+ : return (unsigned long *)ptr;
+ : if (Must_have_memory)
+ : FatalError("Out of memory");
+ : return (unsigned long *)NULL;
+ :}
+ :
+ :/*****************
+ : * XNFrealloc
+ : * "no failure" realloc, alternate interface to Xrealloc w/o Must_have_memory
+ : *****************/
+ :
+ :_X_EXPORT void *
+ :XNFrealloc(pointer ptr, unsigned long amount)
+ :{
+ : if (( ptr = (pointer)Xrealloc( ptr, amount ) ) == NULL)
+ : {
+ : if ((long)amount > 0)
+ : FatalError( "Out of memory" );
+ : }
+ : return ((unsigned long *)ptr);
+ :}
+ :
+ :/*****************
+ : * Xfree
+ : * calls free
+ : *****************/
+ :
+ :_X_EXPORT void
+ :Xfree(pointer ptr)
+ 7 0.0076 :{ /* Xfree total: 10 0.0109 */
+ 1 0.0011 : if (ptr)
+ 1 0.0011 : free((char *)ptr);
+ 1 0.0011 :}
+ :
+ :void
+ :OsInitAllocator (void)
+ :{
+ :#ifdef MEMBUG
+ : static int been_here;
+ :
+ : /* Check the memory system after each generation */
+ : if (been_here)
+ : CheckMemory ();
+ : else
+ : been_here = 1;
+ :#endif
+ :}
+ :#endif /* !INTERNAL_MALLOC */
+ :
+ :
+ :char *
+ :Xstrdup(const char *s)
+ :{
+ : char *sd;
+ :
+ : if (s == NULL)
+ : return NULL;
+ :
+ : sd = (char *)Xalloc(strlen(s) + 1);
+ : if (sd != NULL)
+ : strcpy(sd, s);
+ : return sd;
+ :}
+ :
+ :
+ :_X_EXPORT char *
+ :XNFstrdup(const char *s)
+ :{
+ : char *sd;
+ :
+ : if (s == NULL)
+ : return NULL;
+ :
+ : sd = (char *)XNFalloc(strlen(s) + 1);
+ : strcpy(sd, s);
+ : return sd;
+ :}
+ :
+ :#ifdef SMART_SCHEDULE
+ :
+ :unsigned long SmartScheduleIdleCount;
+ :Bool SmartScheduleIdle;
+ :Bool SmartScheduleTimerStopped;
+ :
+ :#ifdef SIGVTALRM
+ :#define SMART_SCHEDULE_POSSIBLE
+ :#endif
+ :
+ :#ifdef SMART_SCHEDULE_POSSIBLE
+ :#define SMART_SCHEDULE_SIGNAL SIGALRM
+ :#define SMART_SCHEDULE_TIMER ITIMER_REAL
+ :#endif
+ :
+ :static void
+ :SmartScheduleStopTimer (void)
+ :{
+ :#ifdef SMART_SCHEDULE_POSSIBLE
+ : struct itimerval timer;
+ :
+ : timer.it_interval.tv_sec = 0;
+ : timer.it_interval.tv_usec = 0;
+ : timer.it_value.tv_sec = 0;
+ : timer.it_value.tv_usec = 0;
+ : (void) setitimer (ITIMER_REAL, &timer, 0);
+ : SmartScheduleTimerStopped = TRUE;
+ :#endif
+ :}
+ :
+ :Bool
+ :SmartScheduleStartTimer (void)
+ :{
+ :#ifdef SMART_SCHEDULE_POSSIBLE
+ : struct itimerval timer;
+ :
+ : SmartScheduleTimerStopped = FALSE;
+ : timer.it_interval.tv_sec = 0;
+ : timer.it_interval.tv_usec = SmartScheduleInterval * 1000;
+ : timer.it_value.tv_sec = 0;
+ : timer.it_value.tv_usec = SmartScheduleInterval * 1000;
+ : return setitimer (ITIMER_REAL, &timer, 0) >= 0;
+ :#endif
+ : return FALSE;
+ :}
+ :
+ :#ifdef SMART_SCHEDULE_POSSIBLE
+ :static void
+ :SmartScheduleTimer (int sig)
+ :{
+ : int olderrno = errno;
+ :
+ : SmartScheduleTime += SmartScheduleInterval;
+ : if (SmartScheduleIdle)
+ : {
+ : SmartScheduleStopTimer ();
+ : }
+ : errno = olderrno;
+ :}
+ :#endif
+ :
+ :Bool
+ :SmartScheduleInit (void)
+ :{
+ :#ifdef SMART_SCHEDULE_POSSIBLE
+ : struct sigaction act;
+ :
+ : if (SmartScheduleDisable)
+ : return TRUE;
+ :
+ : bzero ((char *) &act, sizeof(struct sigaction));
+ :
+ : /* Set up the timer signal function */
+ : act.sa_handler = SmartScheduleTimer;
+ : sigemptyset (&act.sa_mask);
+ : sigaddset (&act.sa_mask, SMART_SCHEDULE_SIGNAL);
+ : if (sigaction (SMART_SCHEDULE_SIGNAL, &act, 0) < 0)
+ : {
+ : perror ("sigaction for smart scheduler");
+ : return FALSE;
+ : }
+ : /* Set up the virtual timer */
+ : if (!SmartScheduleStartTimer ())
+ : {
+ : perror ("scheduling timer");
+ : return FALSE;
+ : }
+ : /* stop the timer and wait for WaitForSomething to start it */
+ : SmartScheduleStopTimer ();
+ : return TRUE;
+ :#else
+ : return FALSE;
+ :#endif
+ :}
+ :#endif
+ :
+ :#ifdef SIG_BLOCK
+ :static sigset_t PreviousSignalMask;
+ :static int BlockedSignalCount;
+ :#endif
+ :
+ :void
+ :OsBlockSignals (void)
+ :{
+ :#ifdef SIG_BLOCK
+ : if (BlockedSignalCount++ == 0)
+ : {
+ : sigset_t set;
+ :
+ : sigemptyset (&set);
+ :#ifdef SIGALRM
+ : sigaddset (&set, SIGALRM);
+ :#endif
+ :#ifdef SIGVTALRM
+ : sigaddset (&set, SIGVTALRM);
+ :#endif
+ :#ifdef SIGWINCH
+ : sigaddset (&set, SIGWINCH);
+ :#endif
+ :#ifdef SIGIO
+ : sigaddset (&set, SIGIO);
+ :#endif
+ :#ifdef SIGTSTP
+ : sigaddset (&set, SIGTSTP);
+ :#endif
+ :#ifdef SIGTTIN
+ : sigaddset (&set, SIGTTIN);
+ :#endif
+ :#ifdef SIGTTOU
+ : sigaddset (&set, SIGTTOU);
+ :#endif
+ :#ifdef SIGCHLD
+ : sigaddset (&set, SIGCHLD);
+ :#endif
+ : sigprocmask (SIG_BLOCK, &set, &PreviousSignalMask);
+ : }
+ :#endif
+ :}
+ :
+ :void
+ :OsReleaseSignals (void)
+ :{
+ :#ifdef SIG_BLOCK
+ : if (--BlockedSignalCount == 0)
+ : {
+ : sigprocmask (SIG_SETMASK, &PreviousSignalMask, 0);
+ : }
+ :#endif
+ :}
+ :
+ :#if !defined(WIN32)
+ :/*
+ : * "safer" versions of system(3), popen(3) and pclose(3) which give up
+ : * all privs before running a command.
+ : *
+ : * This is based on the code in FreeBSD 2.2 libc.
+ : *
+ : * XXX It'd be good to redirect stderr so that it ends up in the log file
+ : * as well. As it is now, xkbcomp messages don't end up in the log file.
+ : */
+ :
+ :int
+ :System(char *command)
+ :{
+ : int pid, p;
+ :#ifdef SIGCHLD
+ : void (*csig)(int);
+ :#endif
+ : int status;
+ :
+ : if (!command)
+ : return(1);
+ :
+ :#ifdef SIGCHLD
+ : csig = signal(SIGCHLD, SIG_DFL);
+ :#endif
+ :
+ :#ifdef DEBUG
+ : ErrorF("System: `%s'\n", command);
+ :#endif
+ :
+ : switch (pid = fork()) {
+ : case -1: /* error */
+ : p = -1;
+ : case 0: /* child */
+ : if (setgid(getgid()) == -1)
+ : _exit(127);
+ : if (setuid(getuid()) == -1)
+ : _exit(127);
+ : execl("/bin/sh", "sh", "-c", command, (char *)NULL);
+ : _exit(127);
+ : default: /* parent */
+ : do {
+ : p = waitpid(pid, &status, 0);
+ : } while (p == -1 && errno == EINTR);
+ :
+ : }
+ :
+ :#ifdef SIGCHLD
+ : signal(SIGCHLD, csig);
+ :#endif
+ :
+ : return p == -1 ? -1 : status;
+ :}
+ :
+ :static struct pid {
+ : struct pid *next;
+ : FILE *fp;
+ : int pid;
+ :} *pidlist;
+ :
+ :pointer
+ :Popen(char *command, char *type)
+ :{
+ : struct pid *cur;
+ : FILE *iop;
+ : int pdes[2], pid;
+ :
+ : if (command == NULL || type == NULL)
+ : return NULL;
+ :
+ : if ((*type != 'r' && *type != 'w') || type[1])
+ : return NULL;
+ :
+ : if ((cur = (struct pid *)xalloc(sizeof(struct pid))) == NULL)
+ : return NULL;
+ :
+ : if (pipe(pdes) < 0) {
+ : xfree(cur);
+ : return NULL;
+ : }
+ :
+ : switch (pid = fork()) {
+ : case -1: /* error */
+ : close(pdes[0]);
+ : close(pdes[1]);
+ : xfree(cur);
+ : return NULL;
+ : case 0: /* child */
+ : if (setgid(getgid()) == -1)
+ : _exit(127);
+ : if (setuid(getuid()) == -1)
+ : _exit(127);
+ : if (*type == 'r') {
+ : if (pdes[1] != 1) {
+ : /* stdout */
+ : dup2(pdes[1], 1);
+ : close(pdes[1]);
+ : }
+ : close(pdes[0]);
+ : } else {
+ : if (pdes[0] != 0) {
+ : /* stdin */
+ : dup2(pdes[0], 0);
+ : close(pdes[0]);
+ : }
+ : close(pdes[1]);
+ : }
+ : execl("/bin/sh", "sh", "-c", command, (char *)NULL);
+ : _exit(127);
+ : }
+ :
+ : /* Avoid EINTR during stdio calls */
+ : OsBlockSignals ();
+ :
+ : /* parent */
+ : if (*type == 'r') {
+ : iop = fdopen(pdes[0], type);
+ : close(pdes[1]);
+ : } else {
+ : iop = fdopen(pdes[1], type);
+ : close(pdes[0]);
+ : }
+ :
+ : cur->fp = iop;
+ : cur->pid = pid;
+ : cur->next = pidlist;
+ : pidlist = cur;
+ :
+ :#ifdef DEBUG
+ : ErrorF("Popen: `%s', fp = %p\n", command, iop);
+ :#endif
+ :
+ : return iop;
+ :}
+ :
+ :/* fopen that drops privileges */
+ :pointer
+ :Fopen(char *file, char *type)
+ :{
+ : FILE *iop;
+ :#ifndef HAS_SAVED_IDS_AND_SETEUID
+ : struct pid *cur;
+ : int pdes[2], pid;
+ :
+ : if (file == NULL || type == NULL)
+ : return NULL;
+ :
+ : if ((*type != 'r' && *type != 'w') || type[1])
+ : return NULL;
+ :
+ : if ((cur = (struct pid *)xalloc(sizeof(struct pid))) == NULL)
+ : return NULL;
+ :
+ : if (pipe(pdes) < 0) {
+ : xfree(cur);
+ : return NULL;
+ : }
+ :
+ : switch (pid = fork()) {
+ : case -1: /* error */
+ : close(pdes[0]);
+ : close(pdes[1]);
+ : xfree(cur);
+ : return NULL;
+ : case 0: /* child */
+ : if (setgid(getgid()) == -1)
+ : _exit(127);
+ : if (setuid(getuid()) == -1)
+ : _exit(127);
+ : if (*type == 'r') {
+ : if (pdes[1] != 1) {
+ : /* stdout */
+ : dup2(pdes[1], 1);
+ : close(pdes[1]);
+ : }
+ : close(pdes[0]);
+ : } else {
+ : if (pdes[0] != 0) {
+ : /* stdin */
+ : dup2(pdes[0], 0);
+ : close(pdes[0]);
+ : }
+ : close(pdes[1]);
+ : }
+ : execl("/bin/cat", "cat", file, (char *)NULL);
+ : _exit(127);
+ : }
+ :
+ : /* Avoid EINTR during stdio calls */
+ : OsBlockSignals ();
+ :
+ : /* parent */
+ : if (*type == 'r') {
+ : iop = fdopen(pdes[0], type);
+ : close(pdes[1]);
+ : } else {
+ : iop = fdopen(pdes[1], type);
+ : close(pdes[0]);
+ : }
+ :
+ : cur->fp = iop;
+ : cur->pid = pid;
+ : cur->next = pidlist;
+ : pidlist = cur;
+ :
+ :#ifdef DEBUG
+ : ErrorF("Fopen(%s), fp = %p\n", file, iop);
+ :#endif
+ :
+ : return iop;
+ :#else
+ : int ruid, euid;
+ :
+ : ruid = getuid();
+ : euid = geteuid();
+ :
+ : if (seteuid(ruid) == -1) {
+ : return NULL;
+ : }
+ : iop = fopen(file, type);
+ :
+ : if (seteuid(euid) == -1) {
+ : fclose(iop);
+ : return NULL;
+ : }
+ : return iop;
+ :#endif /* HAS_SAVED_IDS_AND_SETEUID */
+ :}
+ :
+ :int
+ :Pclose(pointer iop)
+ :{
+ : struct pid *cur, *last;
+ : int pstat;
+ : int pid;
+ :
+ :#ifdef DEBUG
+ : ErrorF("Pclose: fp = %p\n", iop);
+ :#endif
+ :
+ : fclose(iop);
+ :
+ : for (last = NULL, cur = pidlist; cur; last = cur, cur = cur->next)
+ : if (cur->fp == iop)
+ : break;
+ : if (cur == NULL)
+ : return -1;
+ :
+ : do {
+ : pid = waitpid(cur->pid, &pstat, 0);
+ : } while (pid == -1 && errno == EINTR);
+ :
+ : if (last == NULL)
+ : pidlist = cur->next;
+ : else
+ : last->next = cur->next;
+ : xfree(cur);
+ :
+ : /* allow EINTR again */
+ : OsReleaseSignals ();
+ :
+ : return pid == -1 ? -1 : pstat;
+ :}
+ :
+ :int
+ :Fclose(pointer iop)
+ :{
+ :#ifdef HAS_SAVED_IDS_AND_SETEUID
+ : return fclose(iop);
+ :#else
+ : return Pclose(iop);
+ :#endif
+ :}
+ :
+ :#endif /* !WIN32 */
+ :
+ :
+ :/*
+ : * CheckUserParameters: check for long command line arguments and long
+ : * environment variables. By default, these checks are only done when
+ : * the server's euid != ruid. In 3.3.x, these checks were done in an
+ : * external wrapper utility.
+ : */
+ :
+ :/* Consider LD* variables insecure? */
+ :#ifndef REMOVE_ENV_LD
+ :#define REMOVE_ENV_LD 1
+ :#endif
+ :
+ :/* Remove long environment variables? */
+ :#ifndef REMOVE_LONG_ENV
+ :#define REMOVE_LONG_ENV 1
+ :#endif
+ :
+ :/*
+ : * Disallow stdout or stderr as pipes? It's possible to block the X server
+ : * when piping stdout+stderr to a pipe.
+ : *
+ : * Don't enable this because it looks like it's going to cause problems.
+ : */
+ :#ifndef NO_OUTPUT_PIPES
+ :#define NO_OUTPUT_PIPES 0
+ :#endif
+ :
+ :
+ :/* Check args and env only if running setuid (euid == 0 && euid != uid) ? */
+ :#ifndef CHECK_EUID
+ :#ifndef WIN32
+ :#define CHECK_EUID 1
+ :#else
+ :#define CHECK_EUID 0
+ :#endif
+ :#endif
+ :
+ :/*
+ : * Maybe the locale can be faked to make isprint(3) report that everything
+ : * is printable? Avoid it by default.
+ : */
+ :#ifndef USE_ISPRINT
+ :#define USE_ISPRINT 0
+ :#endif
+ :
+ :#define MAX_ARG_LENGTH 128
+ :#define MAX_ENV_LENGTH 256
+ :#define MAX_ENV_PATH_LENGTH 2048 /* Limit for *PATH and TERMCAP */
+ :
+ :#if USE_ISPRINT
+ :#include <ctype.h>
+ :#define checkPrintable(c) isprint(c)
+ :#else
+ :#define checkPrintable(c) (((c) & 0x7f) >= 0x20 && ((c) & 0x7f) != 0x7f)
+ :#endif
+ :
+ :enum BadCode {
+ : NotBad = 0,
+ : UnsafeArg,
+ : ArgTooLong,
+ : UnprintableArg,
+ : EnvTooLong,
+ : OutputIsPipe,
+ : InternalError
+ :};
+ :
+ :#if defined(VENDORSUPPORT)
+ :#define BUGADDRESS VENDORSUPPORT
+ :#elif defined(BUILDERADDR)
+ :#define BUGADDRESS BUILDERADDR
+ :#else
+ :#define BUGADDRESS "xorg@freedesktop.org"
+ :#endif
+ :
+ :#define ARGMSG \
+ : "\nIf the arguments used are valid, and have been rejected incorrectly\n" \
+ : "please send details of the arguments and why they are valid to\n" \
+ : "%s. In the meantime, you can start the Xserver as\n" \
+ : "the \"super user\" (root).\n"
+ :
+ :#define ENVMSG \
+ : "\nIf the environment is valid, and have been rejected incorrectly\n" \
+ : "please send details of the environment and why it is valid to\n" \
+ : "%s. In the meantime, you can start the Xserver as\n" \
+ : "the \"super user\" (root).\n"
+ :
+ :void
+ :CheckUserParameters(int argc, char **argv, char **envp)
+ :{
+ : enum BadCode bad = NotBad;
+ : int i = 0, j;
+ : char *a, *e = NULL;
+ :#if defined(__QNX__) && !defined(__QNXNTO__)
+ : char cmd_name[64];
+ :#endif
+ :
+ :#if CHECK_EUID
+ : if (geteuid() == 0 && getuid() != geteuid())
+ :#endif
+ : {
+ : /* Check each argv[] */
+ : for (i = 1; i < argc; i++) {
+ : if (strcmp(argv[i], "-fp") == 0)
+ : {
+ : i++; /* continue with next argument. skip the length check */
+ : if (i >= argc)
+ : break;
+ : } else
+ : {
+ : if (strlen(argv[i]) > MAX_ARG_LENGTH) {
+ : bad = ArgTooLong;
+ : break;
+ : }
+ : }
+ : a = argv[i];
+ : while (*a) {
+ : if (checkPrintable(*a) == 0) {
+ : bad = UnprintableArg;
+ : break;
+ : }
+ : a++;
+ : }
+ : if (bad)
+ : break;
+ : }
+ : if (!bad) {
+ : /* Check each envp[] */
+ : for (i = 0; envp[i]; i++) {
+ :
+ : /* Check for bad environment variables and values */
+ :#if REMOVE_ENV_LD
+ : while (envp[i] && (strncmp(envp[i], "LD", 2) == 0)) {
+ :#ifdef ENVDEBUG
+ : ErrorF("CheckUserParameters: removing %s from the "
+ : "environment\n", strtok(envp[i], "="));
+ :#endif
+ : for (j = i; envp[j]; j++) {
+ : envp[j] = envp[j+1];
+ : }
+ : }
+ :#endif
+ : if (envp[i] && (strlen(envp[i]) > MAX_ENV_LENGTH)) {
+ :#if REMOVE_LONG_ENV
+ :#ifdef ENVDEBUG
+ : ErrorF("CheckUserParameters: removing %s from the "
+ : "environment\n", strtok(envp[i], "="));
+ :#endif
+ : for (j = i; envp[j]; j++) {
+ : envp[j] = envp[j+1];
+ : }
+ : i--;
+ :#else
+ : char *eq;
+ : int len;
+ :
+ : eq = strchr(envp[i], '=');
+ : if (!eq)
+ : continue;
+ : len = eq - envp[i];
+ : e = malloc(len + 1);
+ : if (!e) {
+ : bad = InternalError;
+ : break;
+ : }
+ : strncpy(e, envp[i], len);
+ : e[len] = 0;
+ : if (len >= 4 &&
+ : (strcmp(e + len - 4, "PATH") == 0 ||
+ : strcmp(e, "TERMCAP") == 0)) {
+ : if (strlen(envp[i]) > MAX_ENV_PATH_LENGTH) {
+ : bad = EnvTooLong;
+ : break;
+ : } else {
+ : free(e);
+ : }
+ : } else {
+ : bad = EnvTooLong;
+ : break;
+ : }
+ :#endif
+ : }
+ : }
+ : }
+ :#if NO_OUTPUT_PIPES
+ : if (!bad) {
+ : struct stat buf;
+ :
+ : if (fstat(fileno(stdout), &buf) == 0 && S_ISFIFO(buf.st_mode))
+ : bad = OutputIsPipe;
+ : if (fstat(fileno(stderr), &buf) == 0 && S_ISFIFO(buf.st_mode))
+ : bad = OutputIsPipe;
+ : }
+ :#endif
+ : }
+ : switch (bad) {
+ : case NotBad:
+ : return;
+ : case UnsafeArg:
+ : ErrorF("Command line argument number %d is unsafe\n", i);
+ : ErrorF(ARGMSG, BUGADDRESS);
+ : break;
+ : case ArgTooLong:
+ : ErrorF("Command line argument number %d is too long\n", i);
+ : ErrorF(ARGMSG, BUGADDRESS);
+ : break;
+ : case UnprintableArg:
+ : ErrorF("Command line argument number %d contains unprintable"
+ : " characters\n", i);
+ : ErrorF(ARGMSG, BUGADDRESS);
+ : break;
+ : case EnvTooLong:
+ : ErrorF("Environment variable `%s' is too long\n", e);
+ : ErrorF(ENVMSG, BUGADDRESS);
+ : break;
+ : case OutputIsPipe:
+ : ErrorF("Stdout and/or stderr is a pipe\n");
+ : break;
+ : case InternalError:
+ : ErrorF("Internal Error\n");
+ : break;
+ : default:
+ : ErrorF("Unknown error\n");
+ : ErrorF(ARGMSG, BUGADDRESS);
+ : ErrorF(ENVMSG, BUGADDRESS);
+ : break;
+ : }
+ : FatalError("X server aborted because of unsafe environment\n");
+ :}
+ :
+ :/*
+ : * CheckUserAuthorization: check if the user is allowed to start the
+ : * X server. This usually means some sort of PAM checking, and it is
+ : * usually only done for setuid servers (uid != euid).
+ : */
+ :
+ :#ifdef USE_PAM
+ :#include <security/pam_appl.h>
+ :#include <security/pam_misc.h>
+ :#include <pwd.h>
+ :#endif /* USE_PAM */
+ :
+ :void
+ :CheckUserAuthorization(void)
+ :{
+ :#ifdef USE_PAM
+ : static struct pam_conv conv = {
+ : misc_conv,
+ : NULL
+ : };
+ :
+ : pam_handle_t *pamh = NULL;
+ : struct passwd *pw;
+ : int retval;
+ :
+ : if (getuid() != geteuid()) {
+ : pw = getpwuid(getuid());
+ : if (pw == NULL)
+ : FatalError("getpwuid() failed for uid %d\n", getuid());
+ :
+ : retval = pam_start("xserver", pw->pw_name, &conv, &pamh);
+ : if (retval != PAM_SUCCESS)
+ : FatalError("pam_start() failed.\n"
+ : "\tMissing or mangled PAM config file or module?\n");
+ :
+ : retval = pam_authenticate(pamh, 0);
+ : if (retval != PAM_SUCCESS) {
+ : pam_end(pamh, retval);
+ : FatalError("PAM authentication failed, cannot start X server.\n"
+ : "\tPerhaps you do not have console ownership?\n");
+ : }
+ :
+ : retval = pam_acct_mgmt(pamh, 0);
+ : if (retval != PAM_SUCCESS) {
+ : pam_end(pamh, retval);
+ : FatalError("PAM authentication failed, cannot start X server.\n"
+ : "\tPerhaps you do not have console ownership?\n");
+ : }
+ :
+ : /* this is not a session, so do not do session management */
+ : pam_end(pamh, PAM_SUCCESS);
+ : }
+ :#endif
+ :}
+ :
+ :#ifdef __SCO__
+ :#include <fcntl.h>
+ :
+ :static void
+ :lockit (int fd, short what)
+ :{
+ : struct flock lck;
+ :
+ : lck.l_whence = 0;
+ : lck.l_start = 0;
+ : lck.l_len = 1;
+ : lck.l_type = what;
+ :
+ : (void)fcntl (fd, F_SETLKW, &lck);
+ :}
+ :
+ :/* SCO OpenServer 5 lacks pread/pwrite. Emulate them. */
+ :ssize_t
+ :pread (int fd, void *buf, size_t nbytes, off_t offset)
+ :{
+ : off_t saved;
+ : ssize_t ret;
+ :
+ : lockit (fd, F_RDLCK);
+ : saved = lseek (fd, 0, SEEK_CUR);
+ : lseek (fd, offset, SEEK_SET);
+ : ret = read (fd, buf, nbytes);
+ : lseek (fd, saved, SEEK_SET);
+ : lockit (fd, F_UNLCK);
+ :
+ : return ret;
+ :}
+ :
+ :ssize_t
+ :pwrite (int fd, const void *buf, size_t nbytes, off_t offset)
+ :{
+ : off_t saved;
+ : ssize_t ret;
+ :
+ : lockit (fd, F_WRLCK);
+ : saved = lseek (fd, 0, SEEK_CUR);
+ : lseek (fd, offset, SEEK_SET);
+ : ret = write (fd, buf, nbytes);
+ : lseek (fd, saved, SEEK_SET);
+ : lockit (fd, F_UNLCK);
+ :
+ : return ret;
+ :}
+ :#endif /* __SCO__ */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/fb/fbpixmap.c"
+ *
+ * 21 0.0229
+ */
+
+
+ :/*
+ : * Copyright © 1998 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <stdlib.h>
+ :
+ :#include "fb.h"
+ :
+ :PixmapPtr
+ :fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp)
+ :{ /* fbCreatePixmapBpp total: 10 0.0109 */
+ : PixmapPtr pPixmap;
+ : size_t datasize;
+ : size_t paddedWidth;
+ : int adjust;
+ : int base;
+ :
+ 1 0.0011 : paddedWidth = ((width * bpp + FB_MASK) >> FB_SHIFT) * sizeof (FbBits);
+ : if (paddedWidth / 4 > 32767 || height > 32767)
+ : return NullPixmap;
+ : datasize = height * paddedWidth;
+ 1 0.0011 : base = pScreen->totalPixmapSize;
+ : adjust = 0;
+ 1 0.0011 : if (base & 7)
+ : adjust = 8 - (base & 7);
+ : datasize += adjust;
+ :#ifdef FB_DEBUG
+ : datasize += 2 * paddedWidth;
+ :#endif
+ 1 0.0011 : pPixmap = AllocatePixmap(pScreen, datasize);
+ : if (!pPixmap)
+ : return NullPixmap;
+ : pPixmap->drawable.type = DRAWABLE_PIXMAP;
+ : pPixmap->drawable.class = 0;
+ : pPixmap->drawable.pScreen = pScreen;
+ : pPixmap->drawable.depth = depth;
+ : pPixmap->drawable.bitsPerPixel = bpp;
+ : pPixmap->drawable.id = 0;
+ 2 0.0022 : pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ : pPixmap->drawable.x = 0;
+ : pPixmap->drawable.y = 0;
+ : pPixmap->drawable.width = width;
+ 1 0.0011 : pPixmap->drawable.height = height;
+ : pPixmap->devKind = paddedWidth;
+ : pPixmap->refcnt = 1;
+ 2 0.0022 : pPixmap->devPrivate.ptr = (pointer) ((char *)pPixmap + base + adjust);
+ :#ifdef FB_DEBUG
+ : pPixmap->devPrivate.ptr = (void *) ((char *) pPixmap->devPrivate.ptr + paddedWidth);
+ : fbInitializeDrawable (&pPixmap->drawable);
+ :#endif
+ :
+ :#ifdef COMPOSITE
+ : pPixmap->screen_x = 0;
+ : pPixmap->screen_y = 0;
+ :#endif
+ :
+ : return pPixmap;
+ 1 0.0011 :}
+ :
+ :PixmapPtr
+ :fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth)
+ 2 0.0022 :{ /* fbCreatePixmap total: 10 0.0109 */
+ : int bpp;
+ 4 0.0044 : bpp = BitsPerPixel (depth);
+ :#ifdef FB_SCREEN_PRIVATE
+ 1 0.0011 : if (bpp == 32 && depth <= 24)
+ : bpp = fbGetScreenPrivate(pScreen)->pix32bpp;
+ :#endif
+ 2 0.0022 : return fbCreatePixmapBpp (pScreen, width, height, depth, bpp);
+ 1 0.0011 :}
+ :
+ :Bool
+ :fbDestroyPixmap (PixmapPtr pPixmap)
+ 1 0.0011 :{ /* fbDestroyPixmap total: 1 0.0011 */
+ : if(--pPixmap->refcnt)
+ : return TRUE;
+ : xfree(pPixmap);
+ : return TRUE;
+ :}
+ :
+ :#define ADDRECT(reg,r,fr,rx1,ry1,rx2,ry2) \
+ :if (((rx1) < (rx2)) && ((ry1) < (ry2)) && \
+ : (!((reg)->data->numRects && \
+ : ((r-1)->y1 == (ry1)) && \
+ : ((r-1)->y2 == (ry2)) && \
+ : ((r-1)->x1 <= (rx1)) && \
+ : ((r-1)->x2 >= (rx2))))) \
+ :{ \
+ : if ((reg)->data->numRects == (reg)->data->size) \
+ : { \
+ : miRectAlloc(reg, 1); \
+ : fr = REGION_BOXPTR(reg); \
+ : r = fr + (reg)->data->numRects; \
+ : } \
+ : r->x1 = (rx1); \
+ : r->y1 = (ry1); \
+ : r->x2 = (rx2); \
+ : r->y2 = (ry2); \
+ : (reg)->data->numRects++; \
+ : if(r->x1 < (reg)->extents.x1) \
+ : (reg)->extents.x1 = r->x1; \
+ : if(r->x2 > (reg)->extents.x2) \
+ : (reg)->extents.x2 = r->x2; \
+ : r++; \
+ :}
+ :
+ :/* Convert bitmap clip mask into clipping region.
+ : * First, goes through each line and makes boxes by noting the transitions
+ : * from 0 to 1 and 1 to 0.
+ : * Then it coalesces the current line with the previous if they have boxes
+ : * at the same X coordinates.
+ : */
+ :RegionPtr
+ :fbPixmapToRegion(PixmapPtr pPix)
+ :{
+ : register RegionPtr pReg;
+ : FbBits *pw, w;
+ : register int ib;
+ : int width, h, base, rx1 = 0, crects;
+ : FbBits *pwLineEnd;
+ : int irectPrevStart, irectLineStart;
+ : register BoxPtr prectO, prectN;
+ : BoxPtr FirstRect, rects, prectLineStart;
+ : Bool fInBox, fSame;
+ : register FbBits mask0 = FB_ALLONES & ~FbScrRight(FB_ALLONES, 1);
+ : FbBits *pwLine;
+ : int nWidth;
+ :
+ : pReg = REGION_CREATE(pPix->drawable.pScreen, NULL, 1);
+ : if(!pReg)
+ : return NullRegion;
+ : FirstRect = REGION_BOXPTR(pReg);
+ : rects = FirstRect;
+ :
+ : fbPrepareAccess(&pPix->drawable);
+ :
+ : pwLine = (FbBits *) pPix->devPrivate.ptr;
+ : nWidth = pPix->devKind >> (FB_SHIFT-3);
+ :
+ : width = pPix->drawable.width;
+ : pReg->extents.x1 = width - 1;
+ : pReg->extents.x2 = 0;
+ : irectPrevStart = -1;
+ : for(h = 0; h < pPix->drawable.height; h++)
+ : {
+ : pw = pwLine;
+ : pwLine += nWidth;
+ : irectLineStart = rects - FirstRect;
+ : /* If the Screen left most bit of the word is set, we're starting in
+ : * a box */
+ : if(READ(pw) & mask0)
+ : {
+ : fInBox = TRUE;
+ : rx1 = 0;
+ : }
+ : else
+ : fInBox = FALSE;
+ : /* Process all words which are fully in the pixmap */
+ : pwLineEnd = pw + (width >> FB_SHIFT);
+ : for (base = 0; pw < pwLineEnd; base += FB_UNIT)
+ : {
+ : w = READ(pw++);
+ : if (fInBox)
+ : {
+ : if (!~w)
+ : continue;
+ : }
+ : else
+ : {
+ : if (!w)
+ : continue;
+ : }
+ : for(ib = 0; ib < FB_UNIT; ib++)
+ : {
+ : /* If the Screen left most bit of the word is set, we're
+ : * starting a box */
+ : if(w & mask0)
+ : {
+ : if(!fInBox)
+ : {
+ : rx1 = base + ib;
+ : /* start new box */
+ : fInBox = TRUE;
+ : }
+ : }
+ : else
+ : {
+ : if(fInBox)
+ : {
+ : /* end box */
+ : ADDRECT(pReg, rects, FirstRect,
+ : rx1, h, base + ib, h + 1);
+ : fInBox = FALSE;
+ : }
+ : }
+ : /* Shift the word VISUALLY left one. */
+ : w = FbScrLeft(w, 1);
+ : }
+ : }
+ : if(width & FB_MASK)
+ : {
+ : /* Process final partial word on line */
+ : w = READ(pw++);
+ : for(ib = 0; ib < (width & FB_MASK); ib++)
+ : {
+ : /* If the Screen left most bit of the word is set, we're
+ : * starting a box */
+ : if(w & mask0)
+ : {
+ : if(!fInBox)
+ : {
+ : rx1 = base + ib;
+ : /* start new box */
+ : fInBox = TRUE;
+ : }
+ : }
+ : else
+ : {
+ : if(fInBox)
+ : {
+ : /* end box */
+ : ADDRECT(pReg, rects, FirstRect,
+ : rx1, h, base + ib, h + 1);
+ : fInBox = FALSE;
+ : }
+ : }
+ : /* Shift the word VISUALLY left one. */
+ : w = FbScrLeft(w, 1);
+ : }
+ : }
+ : /* If scanline ended with last bit set, end the box */
+ : if(fInBox)
+ : {
+ : ADDRECT(pReg, rects, FirstRect,
+ : rx1, h, base + (width & FB_MASK), h + 1);
+ : }
+ : /* if all rectangles on this line have the same x-coords as
+ : * those on the previous line, then add 1 to all the previous y2s and
+ : * throw away all the rectangles from this line
+ : */
+ : fSame = FALSE;
+ : if(irectPrevStart != -1)
+ : {
+ : crects = irectLineStart - irectPrevStart;
+ : if(crects == ((rects - FirstRect) - irectLineStart))
+ : {
+ : prectO = FirstRect + irectPrevStart;
+ : prectN = prectLineStart = FirstRect + irectLineStart;
+ : fSame = TRUE;
+ : while(prectO < prectLineStart)
+ : {
+ : if((prectO->x1 != prectN->x1) || (prectO->x2 != prectN->x2))
+ : {
+ : fSame = FALSE;
+ : break;
+ : }
+ : prectO++;
+ : prectN++;
+ : }
+ : if (fSame)
+ : {
+ : prectO = FirstRect + irectPrevStart;
+ : while(prectO < prectLineStart)
+ : {
+ : prectO->y2 += 1;
+ : prectO++;
+ : }
+ : rects -= crects;
+ : pReg->data->numRects -= crects;
+ : }
+ : }
+ : }
+ : if(!fSame)
+ : irectPrevStart = irectLineStart;
+ : }
+ : if (!pReg->data->numRects)
+ : pReg->extents.x1 = pReg->extents.x2 = 0;
+ : else
+ : {
+ : pReg->extents.y1 = REGION_BOXPTR(pReg)->y1;
+ : pReg->extents.y2 = REGION_END(pReg)->y2;
+ : if (pReg->data->numRects == 1)
+ : {
+ : xfree(pReg->data);
+ : pReg->data = (RegDataPtr)NULL;
+ : }
+ : }
+ :
+ : fbFinishAccess(&pPix->drawable);
+ :#ifdef DEBUG
+ : if (!miValidRegion(pReg))
+ : FatalError("Assertion failed file %s, line %d: expr\n", __FILE__, __LINE__);
+ :#endif
+ : return(pReg);
+ :}
+ :
+ :#ifdef FB_DEBUG
+ :
+ :#ifndef WIN32
+ :#include <stdio.h>
+ :#else
+ :#include <dbg.h>
+ :#endif
+ :
+ :static Bool
+ :fbValidateBits (FbStip *bits, int stride, FbStip data)
+ :{
+ : while (stride--)
+ : {
+ : if (*bits != data)
+ : {
+ :#ifdef WIN32
+ : NCD_DEBUG ((DEBUG_FAILURE, "fdValidateBits failed at 0x%x (is 0x%x want 0x%x)",
+ : bits, *bits, data));
+ :#else
+ : fprintf (stderr, "fbValidateBits failed\n");
+ :#endif
+ : return FALSE;
+ : }
+ : bits++;
+ : }
+ :}
+ :
+ :void
+ :fbValidateDrawable (DrawablePtr pDrawable)
+ :{
+ : FbStip *bits, *first, *last;
+ : int stride, bpp;
+ : int xoff, yoff;
+ : int height;
+ : Bool failed;
+ :
+ : if (pDrawable->type != DRAWABLE_PIXMAP)
+ : pDrawable = (DrawablePtr) fbGetWindowPixmap(pDrawable);
+ : fbGetStipDrawable(pDrawable, bits, stride, bpp, xoff, yoff);
+ : first = bits - stride;
+ : last = bits + stride * pDrawable->height;
+ : if (!fbValidateBits (first, stride, FB_HEAD_BITS) ||
+ : !fbValidateBits (last, stride, FB_TAIL_BITS))
+ : fbInitializeDrawable(pDrawable);
+ : fbFinishAccess (pDrawable);
+ :}
+ :
+ :void
+ :fbSetBits (FbStip *bits, int stride, FbStip data)
+ :{
+ : while (stride--)
+ : *bits++ = data;
+ :}
+ :
+ :void
+ :fbInitializeDrawable (DrawablePtr pDrawable)
+ :{
+ : FbStip *bits, *first, *last;
+ : int stride, bpp;
+ : int xoff, yoff;
+ :
+ : fbGetStipDrawable(pDrawable, bits, stride, bpp, xoff, yoff);
+ : first = bits - stride;
+ : last = bits + stride * pDrawable->height;
+ : fbSetBits (first, stride, FB_HEAD_BITS);
+ : fbSetBits (last, stride, FB_TAIL_BITS);
+ : fbFinishAccess (pDrawable);
+ :}
+ :#endif /* FB_DEBUG */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/render/miglyph.c"
+ *
+ * 16 0.0174
+ */
+
+
+ :/*
+ : *
+ : * Copyright © 2000 SuSE, Inc.
+ : *
+ : * 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 SuSE not be used in advertising or
+ : * publicity pertaining to distribution of the software without specific,
+ : * written prior permission. SuSE makes no representations about the
+ : * suitability of this software for any purpose. It is provided "as is"
+ : * without express or implied warranty.
+ : *
+ : * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
+ : * 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.
+ : *
+ : * Author: Keith Packard, SuSE, Inc.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "scrnintstr.h"
+ :#include "gcstruct.h"
+ :#include "pixmapstr.h"
+ :#include "windowstr.h"
+ :#include "mi.h"
+ :#include "picturestr.h"
+ :#include "mipict.h"
+ :
+ :Bool
+ :miRealizeGlyph (ScreenPtr pScreen,
+ : GlyphPtr glyph)
+ :{
+ : return TRUE;
+ :}
+ :
+ :void
+ :miUnrealizeGlyph (ScreenPtr pScreen,
+ : GlyphPtr glyph)
+ :{
+ :}
+ :
+ :_X_EXPORT void
+ :miGlyphExtents (int nlist,
+ : GlyphListPtr list,
+ : GlyphPtr *glyphs,
+ : BoxPtr extents)
+ 2 0.0022 :{ /* miGlyphExtents total: 16 0.0174 */
+ : int x1, x2, y1, y2;
+ : int n;
+ : GlyphPtr glyph;
+ : int x, y;
+ :
+ : x = 0;
+ : y = 0;
+ : extents->x1 = MAXSHORT;
+ : extents->x2 = MINSHORT;
+ : extents->y1 = MAXSHORT;
+ : extents->y2 = MINSHORT;
+ : while (nlist--)
+ : {
+ : x += list->xOff;
+ : y += list->yOff;
+ : n = list->len;
+ : list++;
+ : while (n--)
+ : {
+ : glyph = *glyphs++;
+ 1 0.0011 : x1 = x - glyph->info.x;
+ : if (x1 < MINSHORT)
+ : x1 = MINSHORT;
+ 5 0.0054 : y1 = y - glyph->info.y;
+ : if (y1 < MINSHORT)
+ : y1 = MINSHORT;
+ 2 0.0022 : x2 = x1 + glyph->info.width;
+ : if (x2 > MAXSHORT)
+ : x2 = MAXSHORT;
+ : y2 = y1 + glyph->info.height;
+ : if (y2 > MAXSHORT)
+ : y2 = MAXSHORT;
+ : if (x1 < extents->x1)
+ : extents->x1 = x1;
+ : if (x2 > extents->x2)
+ : extents->x2 = x2;
+ 4 0.0044 : if (y1 < extents->y1)
+ : extents->y1 = y1;
+ 1 0.0011 : if (y2 > extents->y2)
+ : extents->y2 = y2;
+ : x += glyph->info.xOff;
+ 1 0.0011 : y += glyph->info.yOff;
+ : }
+ : }
+ :}
+ :
+ :#define NeedsComponent(f) (PICT_FORMAT_A(f) != 0 && PICT_FORMAT_RGB(f) != 0)
+ :
+ :_X_EXPORT void
+ :miGlyphs (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pDst,
+ : PictFormatPtr maskFormat,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : int nlist,
+ : GlyphListPtr list,
+ : GlyphPtr *glyphs)
+ :{
+ : PixmapPtr pPixmap = 0;
+ : PicturePtr pPicture;
+ : PixmapPtr pMaskPixmap = 0;
+ : PicturePtr pMask;
+ : ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ : int width = 0, height = 0;
+ : int x, y;
+ : int xDst = list->xOff, yDst = list->yOff;
+ : int n;
+ : GlyphPtr glyph;
+ : int error;
+ : BoxRec extents;
+ : CARD32 component_alpha;
+ :
+ : if (maskFormat)
+ : {
+ : GCPtr pGC;
+ : xRectangle rect;
+ :
+ : miGlyphExtents (nlist, list, glyphs, &extents);
+ :
+ : if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1)
+ : return;
+ : width = extents.x2 - extents.x1;
+ : height = extents.y2 - extents.y1;
+ : pMaskPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, maskFormat->depth);
+ : if (!pMaskPixmap)
+ : return;
+ : component_alpha = NeedsComponent(maskFormat->format);
+ : pMask = CreatePicture (0, &pMaskPixmap->drawable,
+ : maskFormat, CPComponentAlpha, &component_alpha,
+ : serverClient, &error);
+ : if (!pMask)
+ : {
+ : (*pScreen->DestroyPixmap) (pMaskPixmap);
+ : return;
+ : }
+ : pGC = GetScratchGC (pMaskPixmap->drawable.depth, pScreen);
+ : ValidateGC (&pMaskPixmap->drawable, pGC);
+ : rect.x = 0;
+ : rect.y = 0;
+ : rect.width = width;
+ : rect.height = height;
+ : (*pGC->ops->PolyFillRect) (&pMaskPixmap->drawable, pGC, 1, &rect);
+ : FreeScratchGC (pGC);
+ : x = -extents.x1;
+ : y = -extents.y1;
+ : }
+ : else
+ : {
+ : pMask = pDst;
+ : x = 0;
+ : y = 0;
+ : }
+ : pPicture = 0;
+ : while (nlist--)
+ : {
+ : x += list->xOff;
+ : y += list->yOff;
+ : n = list->len;
+ : while (n--)
+ : {
+ : glyph = *glyphs++;
+ : if (!pPicture)
+ : {
+ : pPixmap = GetScratchPixmapHeader (pScreen, glyph->info.width, glyph->info.height,
+ : list->format->depth,
+ : list->format->depth,
+ : 0, (pointer) (glyph + 1));
+ : if (!pPixmap)
+ : return;
+ : component_alpha = NeedsComponent(list->format->format);
+ : pPicture = CreatePicture (0, &pPixmap->drawable, list->format,
+ : CPComponentAlpha, &component_alpha,
+ : serverClient, &error);
+ : if (!pPicture)
+ : {
+ : FreeScratchPixmapHeader (pPixmap);
+ : return;
+ : }
+ : }
+ : (*pScreen->ModifyPixmapHeader) (pPixmap,
+ : glyph->info.width, glyph->info.height,
+ : 0, 0, -1, (pointer) (glyph + 1));
+ : pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ : if (maskFormat)
+ : {
+ : CompositePicture (PictOpAdd,
+ : pPicture,
+ : None,
+ : pMask,
+ : 0, 0,
+ : 0, 0,
+ : x - glyph->info.x,
+ : y - glyph->info.y,
+ : glyph->info.width,
+ : glyph->info.height);
+ : }
+ : else
+ : {
+ : CompositePicture (op,
+ : pSrc,
+ : pPicture,
+ : pDst,
+ : xSrc + (x - glyph->info.x) - xDst,
+ : ySrc + (y - glyph->info.y) - yDst,
+ : 0, 0,
+ : x - glyph->info.x,
+ : y - glyph->info.y,
+ : glyph->info.width,
+ : glyph->info.height);
+ : }
+ : x += glyph->info.xOff;
+ : y += glyph->info.yOff;
+ : }
+ : list++;
+ : if (pPicture)
+ : {
+ : FreeScratchPixmapHeader (pPixmap);
+ : FreePicture ((pointer) pPicture, 0);
+ : pPicture = 0;
+ : pPixmap = 0;
+ : }
+ : }
+ : if (maskFormat)
+ : {
+ : x = extents.x1;
+ : y = extents.y1;
+ : CompositePicture (op,
+ : pSrc,
+ : pMask,
+ : pDst,
+ : xSrc + x - xDst,
+ : ySrc + y - yDst,
+ : 0, 0,
+ : x, y,
+ : width, height);
+ : FreePicture ((pointer) pMask, (XID) 0);
+ : (*pScreen->DestroyPixmap) (pMaskPixmap);
+ : }
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/dix/pixmap.c"
+ *
+ * 16 0.0174
+ */
+
+
+ :/*
+ :
+ :Copyright 1993, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included
+ :in all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ :OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ :MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ :IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ :OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ :ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ :OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall
+ :not be used in advertising or otherwise to promote the sale, use or
+ :other dealings in this Software without prior written authorization
+ :from The Open Group.
+ :
+ :*/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <X11/X.h>
+ :#include "scrnintstr.h"
+ :#include "misc.h"
+ :#include "os.h"
+ :#include "windowstr.h"
+ :#include "resource.h"
+ :#include "dixstruct.h"
+ :#include "gcstruct.h"
+ :#include "servermd.h"
+ :#include "site.h"
+ :
+ :
+ :/*
+ : * Scratch pixmap management and device independent pixmap allocation
+ : * function.
+ : */
+ :
+ :
+ :/* callable by ddx */
+ :_X_EXPORT PixmapPtr
+ :GetScratchPixmapHeader(ScreenPtr pScreen, int width, int height, int depth,
+ : int bitsPerPixel, int devKind, pointer pPixData)
+ 1 0.0011 :{ /* GetScratchPixmapHeader total: 1 0.0011 */
+ : PixmapPtr pPixmap = pScreen->pScratchPixmap;
+ :
+ : if (pPixmap)
+ : pScreen->pScratchPixmap = NULL;
+ : else
+ : /* width and height of 0 means don't allocate any pixmap data */
+ : pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0, depth);
+ :
+ : if (pPixmap) {
+ : if ((*pScreen->ModifyPixmapHeader)(pPixmap, width, height, depth,
+ : bitsPerPixel, devKind, pPixData))
+ : return pPixmap;
+ : (*pScreen->DestroyPixmap)(pPixmap);
+ : }
+ : return NullPixmap;
+ :}
+ :
+ :
+ :/* callable by ddx */
+ :_X_EXPORT void
+ :FreeScratchPixmapHeader(PixmapPtr pPixmap)
+ 1 0.0011 :{ /* FreeScratchPixmapHeader total: 2 0.0022 */
+ : if (pPixmap)
+ : {
+ : ScreenPtr pScreen = pPixmap->drawable.pScreen;
+ :
+ : pPixmap->devPrivate.ptr = NULL; /* lest ddx chases bad ptr */
+ : if (pScreen->pScratchPixmap)
+ : (*pScreen->DestroyPixmap)(pPixmap);
+ : else
+ : pScreen->pScratchPixmap = pPixmap;
+ : }
+ 1 0.0011 :}
+ :
+ :
+ :Bool
+ :CreateScratchPixmapsForScreen(int scrnum)
+ :{
+ : /* let it be created on first use */
+ : screenInfo.screens[scrnum]->pScratchPixmap = NULL;
+ : return TRUE;
+ :}
+ :
+ :
+ :void
+ :FreeScratchPixmapsForScreen(int scrnum)
+ :{
+ : FreeScratchPixmapHeader(screenInfo.screens[scrnum]->pScratchPixmap);
+ :}
+ :
+ :
+ :/* callable by ddx */
+ :_X_EXPORT PixmapPtr
+ :AllocatePixmap(ScreenPtr pScreen, int pixDataSize)
+ 3 0.0033 :{ /* AllocatePixmap total: 13 0.0142 */
+ : PixmapPtr pPixmap;
+ : char *ptr;
+ : DevUnion *ppriv;
+ : unsigned *sizes;
+ : unsigned size;
+ : int i;
+ :
+ : if (pScreen->totalPixmapSize > ((size_t)-1) - pixDataSize)
+ : return NullPixmap;
+ :
+ : pPixmap = (PixmapPtr)xalloc(pScreen->totalPixmapSize + pixDataSize);
+ : if (!pPixmap)
+ : return NullPixmap;
+ : ppriv = (DevUnion *)(pPixmap + 1);
+ : pPixmap->devPrivates = ppriv;
+ : sizes = pScreen->PixmapPrivateSizes;
+ 1 0.0011 : ptr = (char *)(ppriv + pScreen->PixmapPrivateLen);
+ 1 0.0011 : for (i = pScreen->PixmapPrivateLen; --i >= 0; ppriv++, sizes++)
+ : {
+ 2 0.0022 : if ((size = *sizes) != 0)
+ : {
+ 1 0.0011 : ppriv->ptr = (pointer)ptr;
+ 1 0.0011 : ptr += size;
+ : }
+ : else
+ 2 0.0022 : ppriv->ptr = (pointer)NULL;
+ : }
+ :
+ :#ifdef _XSERVER64
+ : if (pPixmap) {
+ : pPixmap->drawable.pad0 = 0;
+ : pPixmap->drawable.pad1 = 0;
+ : }
+ :#endif
+ :
+ : return pPixmap;
+ 2 0.0022 :}
+/*
+ * Total samples for file : "fbpseudocolor.c"
+ *
+ * 14 0.0153
+ */
+
+<credited to line zero> 14 0.0153 :
+ /* __i686.get_pc_thunk.cx total: 2 0.0022 */
+ /* __i686.get_pc_thunk.bx total: 12 0.0131 */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/render/mitrap.c"
+ *
+ * 12 0.0131
+ */
+
+
+ :/*
+ : *
+ : * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+ : *
+ : * 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "scrnintstr.h"
+ :#include "gcstruct.h"
+ :#include "pixmapstr.h"
+ :#include "windowstr.h"
+ :#include "servermd.h"
+ :#include "mi.h"
+ :#include "picturestr.h"
+ :#include "mipict.h"
+ :
+ :PicturePtr
+ :miCreateAlphaPicture (ScreenPtr pScreen,
+ : PicturePtr pDst,
+ : PictFormatPtr pPictFormat,
+ : CARD16 width,
+ : CARD16 height)
+ :{
+ : PixmapPtr pPixmap;
+ : PicturePtr pPicture;
+ : GCPtr pGC;
+ : int error;
+ : xRectangle rect;
+ :
+ : if (width > 32767 || height > 32767)
+ : return 0;
+ :
+ : if (!pPictFormat)
+ : {
+ : if (pDst->polyEdge == PolyEdgeSharp)
+ : pPictFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
+ : else
+ : pPictFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
+ : if (!pPictFormat)
+ : return 0;
+ : }
+ :
+ : pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height,
+ : pPictFormat->depth);
+ : if (!pPixmap)
+ : return 0;
+ : pGC = GetScratchGC (pPixmap->drawable.depth, pScreen);
+ : if (!pGC)
+ : {
+ : (*pScreen->DestroyPixmap) (pPixmap);
+ : return 0;
+ : }
+ : ValidateGC (&pPixmap->drawable, pGC);
+ : rect.x = 0;
+ : rect.y = 0;
+ : rect.width = width;
+ : rect.height = height;
+ : (*pGC->ops->PolyFillRect)(&pPixmap->drawable, pGC, 1, &rect);
+ : FreeScratchGC (pGC);
+ : pPicture = CreatePicture (0, &pPixmap->drawable, pPictFormat,
+ : 0, 0, serverClient, &error);
+ : (*pScreen->DestroyPixmap) (pPixmap);
+ : return pPicture;
+ :}
+ :
+ :static xFixed
+ :miLineFixedX (xLineFixed *l, xFixed y, Bool ceil)
+ :{ /* miLineFixedX total: 8 0.0087 */
+ : xFixed dx = l->p2.x - l->p1.x;
+ 1 0.0011 : xFixed_32_32 ex = (xFixed_32_32) (y - l->p1.y) * dx;
+ 1 0.0011 : xFixed dy = l->p2.y - l->p1.y;
+ : if (ceil)
+ 4 0.0044 : ex += (dy - 1);
+ : return l->p1.x + (xFixed) (ex / dy);
+ 2 0.0022 :}
+ :
+ :void
+ :miTrapezoidBounds (int ntrap, xTrapezoid *traps, BoxPtr box)
+ :{ /* miTrapezoidBounds total: 3 0.0033 */
+ : box->y1 = MAXSHORT;
+ : box->y2 = MINSHORT;
+ : box->x1 = MAXSHORT;
+ : box->x2 = MINSHORT;
+ : for (; ntrap; ntrap--, traps++)
+ : {
+ : INT16 x1, y1, x2, y2;
+ :
+ : if (!xTrapezoidValid(traps))
+ : continue;
+ : y1 = xFixedToInt (traps->top);
+ : if (y1 < box->y1)
+ : box->y1 = y1;
+ :
+ : y2 = xFixedToInt (xFixedCeil (traps->bottom));
+ : if (y2 > box->y2)
+ : box->y2 = y2;
+ :
+ : x1 = xFixedToInt (min (miLineFixedX (&traps->left, traps->top, FALSE),
+ : miLineFixedX (&traps->left, traps->bottom, FALSE)));
+ : if (x1 < box->x1)
+ : box->x1 = x1;
+ :
+ 3 0.0033 : x2 = xFixedToInt (xFixedCeil (max (miLineFixedX (&traps->right, traps->top, TRUE),
+ : miLineFixedX (&traps->right, traps->bottom, TRUE))));
+ : if (x2 > box->x2)
+ : box->x2 = x2;
+ : }
+ :}
+ :
+ :void
+ :miTrapezoids (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pDst,
+ : PictFormatPtr maskFormat,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : int ntrap,
+ : xTrapezoid *traps)
+ :{ /* miTrapezoids total: 1 0.0011 */
+ : ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ : PictureScreenPtr ps = GetPictureScreen(pScreen);
+ :
+ : /*
+ : * Check for solid alpha add
+ : */
+ : if (op == PictOpAdd && miIsSolidAlpha (pSrc))
+ : {
+ : for (; ntrap; ntrap--, traps++)
+ : (*ps->RasterizeTrapezoid) (pDst, traps, 0, 0);
+ : }
+ : else if (maskFormat)
+ : {
+ : PicturePtr pPicture;
+ : BoxRec bounds;
+ : INT16 xDst, yDst;
+ : INT16 xRel, yRel;
+ :
+ : xDst = traps[0].left.p1.x >> 16;
+ : yDst = traps[0].left.p1.y >> 16;
+ :
+ : miTrapezoidBounds (ntrap, traps, &bounds);
+ : if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2)
+ : return;
+ : pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat,
+ : bounds.x2 - bounds.x1,
+ : bounds.y2 - bounds.y1);
+ : if (!pPicture)
+ : return;
+ 1 0.0011 : for (; ntrap; ntrap--, traps++)
+ : (*ps->RasterizeTrapezoid) (pPicture, traps,
+ : -bounds.x1, -bounds.y1);
+ : xRel = bounds.x1 + xSrc - xDst;
+ : yRel = bounds.y1 + ySrc - yDst;
+ : CompositePicture (op, pSrc, pPicture, pDst,
+ : xRel, yRel, 0, 0, bounds.x1, bounds.y1,
+ : bounds.x2 - bounds.x1,
+ : bounds.y2 - bounds.y1);
+ : FreePicture (pPicture, 0);
+ : }
+ : else
+ : {
+ : if (pDst->polyEdge == PolyEdgeSharp)
+ : maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
+ : else
+ : maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
+ : for (; ntrap; ntrap--, traps++)
+ : miTrapezoids (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, traps);
+ : }
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/pixman/pixman/pixman-image.c"
+ *
+ * 10 0.0109
+ */
+
+
+ :/*
+ : * Copyright © 2000 SuSE, Inc.
+ : * Copyright © 2007 Red Hat, Inc.
+ : *
+ : * 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 SuSE not be used in advertising or
+ : * publicity pertaining to distribution of the software without specific,
+ : * written prior permission. SuSE makes no representations about the
+ : * suitability of this software for any purpose. It is provided "as is"
+ : * without express or implied warranty.
+ : *
+ : * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
+ : * 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 <config.h>
+ :
+ :#include <stdlib.h>
+ :#include <stdio.h>
+ :#include <string.h>
+ :
+ :#include "pixman.h"
+ :#include "pixman-private.h"
+ :
+ :static void
+ :init_source_image (source_image_t *image)
+ :{
+ : image->class = SOURCE_IMAGE_CLASS_UNKNOWN;
+ :}
+ :
+ :static pixman_bool_t
+ :init_gradient (gradient_t *gradient,
+ : const pixman_gradient_stop_t *stops,
+ : int n_stops)
+ :{
+ : return_val_if_fail (n_stops > 0, FALSE);
+ :
+ : init_source_image (&gradient->common);
+ :
+ : gradient->stops = malloc (n_stops * sizeof (pixman_gradient_stop_t));
+ : if (!gradient->stops)
+ : return FALSE;
+ :
+ : memcpy (gradient->stops, stops, n_stops * sizeof (pixman_gradient_stop_t));
+ :
+ : gradient->n_stops = n_stops;
+ :
+ : gradient->stop_range = 0xffff;
+ : gradient->color_table = NULL;
+ : gradient->color_table_size = 0;
+ :
+ : return TRUE;
+ :}
+ :
+ :static uint32_t
+ :color_to_uint32 (const pixman_color_t *color)
+ :{
+ : return
+ : (color->alpha >> 8 << 24) |
+ : (color->red >> 8 << 16) |
+ : (color->green & 0xff00) |
+ : (color->blue >> 8);
+ :}
+ :
+ :static pixman_image_t *image_cache;
+ :
+ :static pixman_image_t *
+ :new_image (void)
+ :{
+ : pixman_image_t *image;
+ :
+ : if (image_cache)
+ : {
+ : image = image_cache;
+ : image_cache = image->next;
+ : }
+ : else
+ : {
+ : image = malloc (sizeof (pixman_image_t));
+ : }
+ :
+ : return image;
+ :}
+ :
+ :static void
+ :delete_image (pixman_image_t *image)
+ :{
+ : image->next = image_cache;
+ : image_cache = image;
+ :}
+ :
+ :static pixman_image_t *
+ :allocate_image (void)
+ :{ /* allocate_image total: 7 0.0076 */
+ : pixman_image_t *image = new_image();
+ :
+ : if (image)
+ : {
+ : image_common_t *common = &image->common;
+ :
+ : pixman_region_init (&common->full_region);
+ 1 0.0011 : pixman_region_init (&common->clip_region);
+ : common->src_clip = &common->full_region;
+ : common->has_client_clip = FALSE;
+ : common->transform = NULL;
+ : common->repeat = PIXMAN_REPEAT_NONE;
+ : common->filter = PIXMAN_FILTER_NEAREST;
+ : common->filter_params = NULL;
+ 1 0.0011 : common->n_filter_params = 0;
+ 1 0.0011 : common->alpha_map = NULL;
+ : common->component_alpha = FALSE;
+ 1 0.0011 : common->ref_count = 1;
+ : common->read_func = NULL;
+ 1 0.0011 : common->write_func = NULL;
+ : }
+ :
+ : return image;
+ 2 0.0022 :}
+ :
+ :/* Ref Counting */
+ :pixman_image_t *
+ :pixman_image_ref (pixman_image_t *image)
+ :{
+ : image->common.ref_count++;
+ :
+ : return image;
+ :}
+ :
+ :void
+ :pixman_image_unref (pixman_image_t *image)
+ 1 0.0011 :{ /* pixman_image_unref total: 2 0.0022 */
+ : image_common_t *common = (image_common_t *)image;
+ :
+ : common->ref_count--;
+ :
+ : if (common->ref_count == 0)
+ : {
+ : pixman_region_fini (&common->clip_region);
+ : pixman_region_fini (&common->full_region);
+ :
+ : if (common->transform)
+ : free (common->transform);
+ :
+ : if (common->filter_params)
+ : free (common->filter_params);
+ :
+ : if (common->alpha_map)
+ : pixman_image_unref ((pixman_image_t *)common->alpha_map);
+ :
+ :#if 0
+ : if (image->type == BITS && image->bits.indexed)
+ : free (image->bits.indexed);
+ :#endif
+ :
+ :#if 0
+ : memset (image, 0xaa, sizeof (pixman_image_t));
+ :#endif
+ : if (image->type == LINEAR || image->type == RADIAL || image->type == CONICAL)
+ : {
+ : if (image->gradient.stops)
+ : free (image->gradient.stops);
+ : }
+ :
+ :
+ : if (image->type == BITS && image->bits.free_me)
+ : free (image->bits.free_me);
+ :
+ : delete_image (image);
+ : }
+ :}
+ :
+ :/* Constructors */
+ :pixman_image_t *
+ :pixman_image_create_solid_fill (pixman_color_t *color)
+ :{
+ : pixman_image_t *img = allocate_image();
+ : if (!img)
+ : return NULL;
+ :
+ : init_source_image (&img->solid.common);
+ :
+ : img->type = SOLID;
+ : img->solid.color = color_to_uint32 (color);
+ :
+ : return img;
+ :}
+ :
+ :pixman_image_t *
+ :pixman_image_create_linear_gradient (pixman_point_fixed_t *p1,
+ : pixman_point_fixed_t *p2,
+ : const pixman_gradient_stop_t *stops,
+ : int n_stops)
+ :{
+ : pixman_image_t *image;
+ : linear_gradient_t *linear;
+ :
+ : return_val_if_fail (n_stops >= 2, NULL);
+ :
+ : image = allocate_image();
+ :
+ : if (!image)
+ : return NULL;
+ :
+ : linear = &image->linear;
+ :
+ : if (!init_gradient (&linear->common, stops, n_stops))
+ : {
+ : free (image);
+ : return NULL;
+ : }
+ :
+ : linear->p1 = *p1;
+ : linear->p2 = *p2;
+ :
+ : image->type = LINEAR;
+ :
+ : return image;
+ :}
+ :
+ :
+ :pixman_image_t *
+ :pixman_image_create_radial_gradient (pixman_point_fixed_t *inner,
+ : pixman_point_fixed_t *outer,
+ : pixman_fixed_t inner_radius,
+ : pixman_fixed_t outer_radius,
+ : const pixman_gradient_stop_t *stops,
+ : int n_stops)
+ :{
+ : pixman_image_t *image;
+ : radial_gradient_t *radial;
+ :
+ : return_val_if_fail (n_stops >= 2, NULL);
+ :
+ : image = allocate_image();
+ :
+ : if (!image)
+ : return NULL;
+ :
+ : radial = &image->radial;
+ :
+ : if (!init_gradient (&radial->common, stops, n_stops))
+ : {
+ : free (image);
+ : return NULL;
+ : }
+ :
+ : image->type = RADIAL;
+ :
+ : radial->c1.x = inner->x;
+ : radial->c1.y = inner->y;
+ : radial->c1.radius = inner_radius;
+ : radial->c2.x = outer->x;
+ : radial->c2.y = outer->y;
+ : radial->c2.radius = outer_radius;
+ : radial->cdx = pixman_fixed_to_double (radial->c2.x - radial->c1.x);
+ : radial->cdy = pixman_fixed_to_double (radial->c2.y - radial->c1.y);
+ : radial->dr = pixman_fixed_to_double (radial->c2.radius - radial->c1.radius);
+ : radial->A = (radial->cdx * radial->cdx
+ : + radial->cdy * radial->cdy
+ : - radial->dr * radial->dr);
+ :
+ : return image;
+ :}
+ :
+ :pixman_image_t *
+ :pixman_image_create_conical_gradient (pixman_point_fixed_t *center,
+ : pixman_fixed_t angle,
+ : const pixman_gradient_stop_t *stops,
+ : int n_stops)
+ :{
+ : pixman_image_t *image = allocate_image();
+ : conical_gradient_t *conical;
+ :
+ : if (!image)
+ : return NULL;
+ :
+ : conical = &image->conical;
+ :
+ : if (!init_gradient (&conical->common, stops, n_stops))
+ : {
+ : free (image);
+ : return NULL;
+ : }
+ :
+ : image->type = CONICAL;
+ : conical->center = *center;
+ : conical->angle = angle;
+ :
+ : return image;
+ :}
+ :
+ :static uint32_t *
+ :create_bits (pixman_format_code_t format,
+ : int width,
+ : int height,
+ : int *rowstride_bytes)
+ :{
+ : int stride;
+ : int buf_size;
+ : int bpp;
+ :
+ : bpp = PIXMAN_FORMAT_BPP (format);
+ : stride = ((width * bpp + FB_MASK) >> FB_SHIFT) * sizeof (uint32_t);
+ : buf_size = height * stride;
+ :
+ : if (rowstride_bytes)
+ : *rowstride_bytes = stride;
+ :
+ : return calloc (buf_size, 1);
+ :}
+ :
+ :static void
+ :reset_clip_region (pixman_image_t *image)
+ :{
+ : pixman_region_fini (&image->common.clip_region);
+ :
+ : if (image->type == BITS)
+ : {
+ : pixman_region_init_rect (&image->common.clip_region, 0, 0,
+ : image->bits.width, image->bits.height);
+ : }
+ : else
+ : {
+ : pixman_region_init (&image->common.clip_region);
+ : }
+ :}
+ :
+ :pixman_image_t *
+ :pixman_image_create_bits (pixman_format_code_t format,
+ : int width,
+ : int height,
+ : uint32_t *bits,
+ : int rowstride_bytes)
+ 1 0.0011 :{ /* pixman_image_create_bits total: 1 0.0011 */
+ : pixman_image_t *image;
+ : uint32_t *free_me = NULL;
+ :
+ : /* must be a whole number of uint32_t's
+ : */
+ : return_val_if_fail (bits == NULL ||
+ : (rowstride_bytes % sizeof (uint32_t)) == 0, NULL);
+ :
+ : if (!bits)
+ : {
+ : free_me = bits = create_bits (format, width, height, &rowstride_bytes);
+ : if (!bits)
+ : return NULL;
+ : }
+ :
+ : image = allocate_image();
+ :
+ : if (!image)
+ : return NULL;
+ :
+ : image->type = BITS;
+ : image->bits.format = format;
+ : image->bits.width = width;
+ : image->bits.height = height;
+ : image->bits.bits = bits;
+ : image->bits.free_me = free_me;
+ :
+ : image->bits.rowstride = rowstride_bytes / sizeof (uint32_t); /* we store it in number
+ : * of uint32_t's
+ : */
+ : image->bits.indexed = NULL;
+ :
+ : pixman_region_fini (&image->common.full_region);
+ : pixman_region_init_rect (&image->common.full_region, 0, 0,
+ : image->bits.width, image->bits.height);
+ :
+ : reset_clip_region (image);
+ : return image;
+ :}
+ :
+ :pixman_bool_t
+ :pixman_image_set_clip_region (pixman_image_t *image,
+ : pixman_region16_t *region)
+ :{
+ : image_common_t *common = (image_common_t *)image;
+ :
+ : if (region)
+ : {
+ : return pixman_region_copy (&common->clip_region, region);
+ : }
+ : else
+ : {
+ : reset_clip_region (image);
+ :
+ : return TRUE;
+ : }
+ :}
+ :
+ :/* Sets whether the clip region includes a clip region set by the client
+ : */
+ :void
+ :pixman_image_set_has_client_clip (pixman_image_t *image,
+ : pixman_bool_t client_clip)
+ :{
+ : image->common.has_client_clip = client_clip;
+ :}
+ :
+ :pixman_bool_t
+ :pixman_image_set_transform (pixman_image_t *image,
+ : const pixman_transform_t *transform)
+ :{
+ : static const pixman_transform_t id =
+ : {
+ : { { pixman_fixed_1, 0, 0 },
+ : { 0, pixman_fixed_1, 0 },
+ : { 0, 0, pixman_fixed_1 }
+ : }
+ : };
+ :
+ : image_common_t *common = (image_common_t *)image;
+ :
+ : if (common->transform == transform)
+ : return TRUE;
+ :
+ : if (memcmp (&id, transform, sizeof (pixman_transform_t)) == 0)
+ : {
+ : transform = NULL;
+ : return TRUE;
+ : }
+ :
+ : if (common->transform)
+ : free (common->transform);
+ :
+ : if (transform)
+ : {
+ : common->transform = malloc (sizeof (pixman_transform_t));
+ : if (!common->transform)
+ : return FALSE;
+ :
+ : *common->transform = *transform;
+ : }
+ : else
+ : {
+ : common->transform = NULL;
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :void
+ :pixman_image_set_repeat (pixman_image_t *image,
+ : pixman_repeat_t repeat)
+ 1 0.0011 :{ /* pixman_image_set_repeat total: 1 0.0011 */
+ : image->common.repeat = repeat;
+ :}
+ :
+ :pixman_bool_t
+ :pixman_image_set_filter (pixman_image_t *image,
+ : pixman_filter_t filter,
+ : const pixman_fixed_t *params,
+ : int n_params)
+ :{
+ : image_common_t *common = (image_common_t *)image;
+ : pixman_fixed_t *new_params;
+ :
+ : if (params == common->filter_params && filter == common->filter)
+ : return TRUE;
+ :
+ : new_params = NULL;
+ : if (params)
+ : {
+ : new_params = malloc (n_params * sizeof (pixman_fixed_t));
+ : if (!new_params)
+ : return FALSE;
+ :
+ : memcpy (new_params,
+ : params, n_params * sizeof (pixman_fixed_t));
+ : }
+ :
+ : common->filter = filter;
+ :
+ : if (common->filter_params)
+ : free (common->filter_params);
+ :
+ : common->filter_params = new_params;
+ : common->n_filter_params = n_params;
+ : return TRUE;
+ :}
+ :
+ :/* Unlike all the other property setters, this function does not
+ : * copy the content of indexed. Doing this copying is simply
+ : * way, way too expensive.
+ : */
+ :void
+ :pixman_image_set_indexed (pixman_image_t *image,
+ : const pixman_indexed_t *indexed)
+ :{
+ : bits_image_t *bits = (bits_image_t *)image;
+ :
+ : bits->indexed = indexed;
+ :}
+ :
+ :void
+ :pixman_image_set_alpha_map (pixman_image_t *image,
+ : pixman_image_t *alpha_map,
+ : int16_t x,
+ : int16_t y)
+ :{
+ : image_common_t *common = (image_common_t *)image;
+ :
+ : return_if_fail (!alpha_map || alpha_map->type == BITS);
+ :
+ : if (common->alpha_map != (bits_image_t *)alpha_map)
+ : {
+ : if (common->alpha_map)
+ : pixman_image_unref ((pixman_image_t *)common->alpha_map);
+ :
+ : if (alpha_map)
+ : common->alpha_map = (bits_image_t *)pixman_image_ref (alpha_map);
+ : else
+ : common->alpha_map = NULL;
+ : }
+ :
+ : common->alpha_origin.x = x;
+ : common->alpha_origin.y = y;
+ :}
+ :
+ :void
+ :pixman_image_set_component_alpha (pixman_image_t *image,
+ : pixman_bool_t component_alpha)
+ :{
+ : image->common.component_alpha = component_alpha;
+ :}
+ :
+ :
+ :void
+ :pixman_image_set_accessors (pixman_image_t *image,
+ : pixman_read_memory_func_t read_func,
+ : pixman_write_memory_func_t write_func)
+ :{
+ : return_if_fail (image != NULL);
+ :
+ : image->common.read_func = read_func;
+ : image->common.write_func = write_func;
+ :}
+ :
+ :uint32_t *
+ :pixman_image_get_data (pixman_image_t *image)
+ :{
+ : if (image->type == BITS)
+ : return image->bits.bits;
+ :
+ : return NULL;
+ :}
+ :
+ :int
+ :pixman_image_get_width (pixman_image_t *image)
+ :{
+ : if (image->type == BITS)
+ : return image->bits.width;
+ :
+ : return 0;
+ :}
+ :
+ :int
+ :pixman_image_get_height (pixman_image_t *image)
+ :{
+ : if (image->type == BITS)
+ : return image->bits.height;
+ :
+ : return 0;
+ :}
+ :
+ :int
+ :pixman_image_get_stride (pixman_image_t *image)
+ :{
+ : if (image->type == BITS)
+ : return image->bits.rowstride * sizeof (uint32_t);
+ :
+ : return 0;
+ :}
+ :
+ :int
+ :pixman_image_get_depth (pixman_image_t *image)
+ :{
+ : if (image->type == BITS)
+ : return PIXMAN_FORMAT_DEPTH (image->bits.format);
+ :
+ : return 0;
+ :}
+ :
+ :pixman_bool_t
+ :color_to_pixel (pixman_color_t *color,
+ : uint32_t *pixel,
+ : pixman_format_code_t format)
+ :{
+ : uint32_t c = color_to_uint32 (color);
+ :
+ : if (!(format == PIXMAN_a8r8g8b8 ||
+ : format == PIXMAN_x8r8g8b8 ||
+ : format == PIXMAN_a8b8g8r8 ||
+ : format == PIXMAN_x8b8g8r8 ||
+ : format == PIXMAN_r5g6b5 ||
+ : format == PIXMAN_b5g6r5 ||
+ : format == PIXMAN_a8))
+ : {
+ : return FALSE;
+ : }
+ :
+ : if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_ABGR)
+ : {
+ : c = ((c & 0xff000000) >> 0) |
+ : ((c & 0x00ff0000) >> 16) |
+ : ((c & 0x0000ff00) >> 0) |
+ : ((c & 0x000000ff) << 16);
+ : }
+ :
+ : if (format == PIXMAN_a8)
+ : c = c >> 24;
+ : else if (format == PIXMAN_r5g6b5 ||
+ : format == PIXMAN_b5g6r5)
+ : c = cvt8888to0565 (c);
+ :
+ :#if 0
+ : printf ("color: %x %x %x %x\n", color->alpha, color->red, color->green, color->blue);
+ : printf ("pixel: %x\n", c);
+ :#endif
+ :
+ : *pixel = c;
+ : return TRUE;
+ :}
+ :
+ :pixman_bool_t
+ :pixman_image_fill_rectangles (pixman_op_t op,
+ : pixman_image_t *dest,
+ : pixman_color_t *color,
+ : int n_rects,
+ : const pixman_rectangle16_t *rects)
+ :{
+ : pixman_image_t *solid;
+ : pixman_color_t c;
+ : int i;
+ :
+ : if (color->alpha == 0xffff)
+ : {
+ : if (op == PIXMAN_OP_OVER)
+ : op = PIXMAN_OP_SRC;
+ : }
+ :
+ : if (op == PIXMAN_OP_CLEAR)
+ : {
+ : c.red = 0;
+ : c.green = 0;
+ : c.blue = 0;
+ : c.alpha = 0;
+ :
+ : color = &c;
+ :
+ : op = PIXMAN_OP_SRC;
+ : }
+ :
+ : if (op == PIXMAN_OP_SRC)
+ : {
+ : uint32_t pixel;
+ :
+ : if (color_to_pixel (color, &pixel, dest->bits.format))
+ : {
+ : for (i = 0; i < n_rects; ++i)
+ : {
+ : pixman_region16_t fill_region;
+ : int n_boxes, j;
+ : pixman_box16_t *boxes;
+ :
+ : pixman_region_init_rect (&fill_region, rects[i].x, rects[i].y, rects[i].width, rects[i].height);
+ : pixman_region_intersect (&fill_region, &fill_region, &dest->common.clip_region);
+ :
+ : boxes = pixman_region_rectangles (&fill_region, &n_boxes);
+ : for (j = 0; j < n_boxes; ++j)
+ : {
+ : const pixman_box16_t *box = &(boxes[j]);
+ : pixman_fill (dest->bits.bits, dest->bits.rowstride, PIXMAN_FORMAT_BPP (dest->bits.format),
+ : box->x1, box->y1, box->x2 - box->x1, box->y2 - box->y1,
+ : pixel);
+ : }
+ :
+ : pixman_region_fini (&fill_region);
+ : }
+ : return TRUE;
+ : }
+ : }
+ :
+ : solid = pixman_image_create_solid_fill (color);
+ : if (!solid)
+ : return FALSE;
+ :
+ : for (i = 0; i < n_rects; ++i)
+ : {
+ : const pixman_rectangle16_t *rect = &(rects[i]);
+ :
+ : pixman_image_composite (op, solid, NULL, dest,
+ : 0, 0, 0, 0,
+ : rect->x, rect->y,
+ : rect->width, rect->height);
+ : }
+ :
+ : pixman_image_unref (solid);
+ :
+ : return TRUE;
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/mi/mibstore.c"
+ *
+ * 9 0.0098
+ */
+
+
+ :/***********************************************************
+ :
+ :Copyright 1987, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :
+ :Copyright 1987 by the Regents of the University of California
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted, 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 The Open Group not be used in advertising or publicity
+ :pertaining to distribution of the software without specific, written prior
+ :permission.
+ :
+ :The University of California makes no representations about the suitability
+ :of this software for any purpose. It is provided "as is" without express or
+ :implied warranty.
+ :
+ :******************************************************************/
+ :
+ :
+ :#define NEED_EVENTS
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <X11/X.h>
+ :#include <X11/Xmd.h>
+ :#include <X11/Xproto.h>
+ :#include "misc.h"
+ :#include "regionstr.h"
+ :#include "scrnintstr.h"
+ :#include "gcstruct.h"
+ :#include "windowstr.h"
+ :#include "pixmapstr.h"
+ :#include <X11/fonts/fontstruct.h>
+ :#include "dixfontstr.h"
+ :#include "dixstruct.h" /* For requestingClient */
+ :#include "mi.h"
+ :#include "mibstorest.h"
+ :
+ :/*
+ : * When the server fails to allocate a backing store pixmap, if you want
+ : * it to dynamically retry to allocate backing store on every subsequent
+ : * graphics op, you can enable BSEAGER; otherwise, backing store will be
+ : * disabled on the window until it is unmapped and then remapped.
+ : */
+ :/* #define BSEAGER */
+ :
+ :/*-
+ : * NOTES ON USAGE:
+ : *
+ : * The functions in this file implement a machine-independent backing-store
+ : * scheme. To use it, the output library must do the following:
+ : * - Provide a SaveAreas function that takes a destination pixmap, a
+ : * region of the areas to save (in the pixmap's coordinate system)
+ : * and the screen origin of the region. It should copy the areas from
+ : * the screen into the pixmap.
+ : * - Provide a RestoreAreas function that takes a source pixmap, a region
+ : * of the areas to restore (in the screen's coordinate system) and the
+ : * origin of the pixmap on the screen. It should copy the areas from
+ : * the pixmap into the screen.
+ : * - Provide a SetClipmaskRgn function that takes a gc and a region
+ : * and merges the region into any CT_PIXMAP client clip that
+ : * is specified in the GC. This routine is only needed if
+ : * miValidateBackingStore will see CT_PIXMAP clip lists; not
+ : * true for any of the sample servers (which convert the PIXMAP
+ : * clip lists into CT_REGION clip lists; an expensive but simple
+ : * to code option).
+ : * - The function placed in a window's ClearToBackground vector must call
+ : * pScreen->ClearBackingStore with the window, followed by
+ : * the window-relative x and y coordinates, followed by the width and
+ : * height of the area to be cleared, followed by the generateExposures
+ : * flag. This has been taken care of in miClearToBackground.
+ : * - Whatever determines GraphicsExpose events for the CopyArea and
+ : * CopyPlane requests should call pWin->backStorage->ExposeCopy
+ : * with the source and destination drawables, the GC used, a source-
+ : * window-relative region of exposed areas, the source and destination
+ : * coordinates and the bitplane copied, if CopyPlane, or 0, if
+ : * CopyArea.
+ : *
+ : * JUSTIFICATION
+ : * This is a cross between saving everything and just saving the
+ : * obscued areas (as in Pike's layers.) This method has the advantage
+ : * of only doing each output operation once per pixel, visible or
+ : * invisible, and avoids having to do all the crufty storage
+ : * management of keeping several separate rectangles. Since the
+ : * ddx layer ouput primitives are required to draw through clipping
+ : * rectangles anyway, sending multiple drawing requests for each of
+ : * several rectangles isn't necessary. (Of course, it could be argued
+ : * that the ddx routines should just take one rectangle each and
+ : * get called multiple times, but that would make taking advantage of
+ : * smart hardware harder, and probably be slower as well.)
+ : */
+ :
+ :#define SETUP_BACKING_TERSE(pGC) \
+ : miBSGCPtr pGCPrivate = (miBSGCPtr)(pGC)->devPrivates[miBSGCIndex].ptr; \
+ : GCFuncs *oldFuncs = pGC->funcs;
+ :
+ :#define SETUP_BACKING(pDrawable,pGC) \
+ : miBSWindowPtr pBackingStore = \
+ : (miBSWindowPtr)((WindowPtr)(pDrawable))->backStorage; \
+ : DrawablePtr pBackingDrawable = (DrawablePtr) \
+ : pBackingStore->pBackingPixmap; \
+ : SETUP_BACKING_TERSE(pGC) \
+ : GCPtr pBackingGC = pGCPrivate->pBackingGC;
+ :
+ :#define PROLOGUE(pGC) { \
+ : pGC->ops = pGCPrivate->wrapOps;\
+ : pGC->funcs = pGCPrivate->wrapFuncs; \
+ : }
+ :
+ :#define EPILOGUE(pGC) { \
+ : pGCPrivate->wrapOps = (pGC)->ops; \
+ : (pGC)->ops = &miBSGCOps; \
+ : (pGC)->funcs = oldFuncs; \
+ : }
+ :
+ :static void miCreateBSPixmap(WindowPtr pWin, BoxPtr pExtents);
+ :static void miDestroyBSPixmap(WindowPtr pWin);
+ :static void miTileVirtualBS(WindowPtr pWin);
+ :static void miBSAllocate(WindowPtr pWin), miBSFree(WindowPtr pWin);
+ :static Bool miBSCreateGCPrivate(GCPtr pGC);
+ :static void miBSClearBackingRegion(WindowPtr pWin, RegionPtr pRgn);
+ :
+ :#define MoreCopy0 ;
+ :#define MoreCopy2 *dstCopy++ = *srcCopy++; *dstCopy++ = *srcCopy++;
+ :#define MoreCopy4 MoreCopy2 MoreCopy2
+ :
+ :#define copyData(src,dst,n,morecopy) \
+ :{ \
+ : short *srcCopy = (short *)(src); \
+ : short *dstCopy = (short *)(dst); \
+ : int i; \
+ : int bsx = pBackingStore->x; \
+ : int bsy = pBackingStore->y; \
+ : for (i = n; --i >= 0; ) \
+ : { \
+ : *dstCopy++ = *srcCopy++ - bsx; \
+ : *dstCopy++ = *srcCopy++ - bsy; \
+ : morecopy \
+ : } \
+ :}
+ :
+ :#define copyPoints(src,dst,n,mode) \
+ :if (mode == CoordModeOrigin) \
+ :{ \
+ : copyData(src,dst,n,MoreCopy0); \
+ :} \
+ :else \
+ :{ \
+ : memmove((char *)(dst), (char *)(src), (n) << 2); \
+ : *((short *)(dst)) -= pBackingStore->x; \
+ : *((short *)(dst) + 1) -= pBackingStore->y; \
+ :}
+ :
+ :/*
+ : * wrappers for screen funcs
+ : */
+ :
+ :static int miBSScreenIndex;
+ :static unsigned long miBSGeneration = 0;
+ :
+ :static Bool miBSCloseScreen(int i, ScreenPtr pScreen);
+ :static void miBSGetImage(DrawablePtr pDrawable, int sx, int sy,
+ : int w, int h, unsigned int format,
+ : unsigned long planemask, char *pdstLine);
+ :static void miBSGetSpans(DrawablePtr pDrawable, int wMax,
+ : DDXPointPtr ppt, int *pwidth, int nspans,
+ : char *pdstStart);
+ :static Bool miBSChangeWindowAttributes(WindowPtr pWin,
+ : unsigned long mask);
+ :static Bool miBSCreateGC(GCPtr pGC);
+ :static Bool miBSDestroyWindow(WindowPtr pWin);
+ :
+ :/*
+ : * backing store screen functions
+ : */
+ :
+ :static void miBSSaveDoomedAreas(WindowPtr pWin, RegionPtr pObscured,
+ : int dx, int dy);
+ :static RegionPtr miBSRestoreAreas(WindowPtr pWin, RegionPtr prgnExposed);
+ :static void miBSExposeCopy(WindowPtr pSrc, DrawablePtr pDst,
+ : GCPtr pGC, RegionPtr prgnExposed,
+ : int srcx, int srcy, int dstx, int dsty,
+ : unsigned long plane);
+ :static RegionPtr miBSTranslateBackingStore(WindowPtr pWin, int windx,
+ : int windy, RegionPtr oldClip,
+ : int oldx, int oldy);
+ :static RegionPtr miBSClearBackingStore(WindowPtr pWin, int x, int y,
+ : int w, int h, Bool generateExposures);
+ :static void miBSDrawGuarantee(WindowPtr pWin, GCPtr pGC,
+ : int guarantee);
+ :
+ :/*
+ : * wrapper vectors for GC funcs and ops
+ : */
+ :
+ :static int miBSGCIndex;
+ :
+ :static void miBSValidateGC(GCPtr pGC, unsigned long stateChanges,
+ : DrawablePtr pDrawable);
+ :static void miBSCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
+ :static void miBSDestroyGC(GCPtr pGC);
+ :static void miBSChangeGC(GCPtr pGC, unsigned long mask);
+ :static void miBSChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
+ :static void miBSDestroyClip(GCPtr pGC);
+ :static void miBSCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
+ :
+ :static GCFuncs miBSGCFuncs = {
+ : miBSValidateGC,
+ : miBSChangeGC,
+ : miBSCopyGC,
+ : miBSDestroyGC,
+ : miBSChangeClip,
+ : miBSDestroyClip,
+ : miBSCopyClip,
+ :};
+ :
+ :static void miBSFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
+ : DDXPointPtr pptInit, int *pwidthInit,
+ : int fSorted);
+ :static void miBSSetSpans(DrawablePtr pDrawable, GCPtr pGC, char *psrc,
+ : DDXPointPtr ppt, int *pwidth, int nspans,
+ : int fSorted);
+ :static void miBSPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth,
+ : int x, int y, int w, int h, int leftPad,
+ : int format, char *pBits);
+ :static RegionPtr miBSCopyArea(DrawablePtr pSrc, DrawablePtr pDst,
+ : GCPtr pGC, int srcx, int srcy, int w, int h,
+ : int dstx, int dsty);
+ :static RegionPtr miBSCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
+ : GCPtr pGC, int srcx, int srcy, int w, int h,
+ : int dstx, int dsty, unsigned long plane);
+ :static void miBSPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
+ : int npt, xPoint *pptInit);
+ :static void miBSPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
+ : int npt, DDXPointPtr pptInit);
+ :static void miBSPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg,
+ : xSegment *pSegs);
+ :static void miBSPolyRectangle(DrawablePtr pDrawable, GCPtr pGC,
+ : int nrects, xRectangle *pRects);
+ :static void miBSPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs,
+ : xArc *parcs);
+ :static void miBSFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
+ : int shape, int mode, int count,
+ : DDXPointPtr pPts);
+ :static void miBSPolyFillRect(DrawablePtr pDrawable, GCPtr pGC,
+ : int nrectFill, xRectangle *prectInit);
+ :static void miBSPolyFillArc(DrawablePtr pDrawable, GCPtr pGC,
+ : int narcs, xArc *parcs);
+ :static int miBSPolyText8(DrawablePtr pDrawable, GCPtr pGC,
+ : int x, int y, int count, char *chars);
+ :static int miBSPolyText16(DrawablePtr pDrawable, GCPtr pGC,
+ : int x, int y, int count,
+ : unsigned short *chars);
+ :static void miBSImageText8(DrawablePtr pDrawable, GCPtr pGC,
+ : int x, int y, int count, char *chars);
+ :static void miBSImageText16(DrawablePtr pDrawable, GCPtr pGC,
+ : int x, int y, int count,
+ : unsigned short *chars);
+ :static void miBSImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
+ : int x, int y, unsigned int nglyph,
+ : CharInfoPtr *ppci, pointer pglyphBase);
+ :static void miBSPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
+ : int x, int y, unsigned int nglyph,
+ : CharInfoPtr *ppci, pointer pglyphBase);
+ :static void miBSPushPixels(GCPtr pGC, PixmapPtr pBitMap,
+ : DrawablePtr pDst, int w, int h,
+ : int x, int y);
+ :
+ :static GCOps miBSGCOps = {
+ : miBSFillSpans, miBSSetSpans, miBSPutImage,
+ : miBSCopyArea, miBSCopyPlane, miBSPolyPoint,
+ : miBSPolylines, miBSPolySegment, miBSPolyRectangle,
+ : miBSPolyArc, miBSFillPolygon, miBSPolyFillRect,
+ : miBSPolyFillArc, miBSPolyText8, miBSPolyText16,
+ : miBSImageText8, miBSImageText16, miBSImageGlyphBlt,
+ : miBSPolyGlyphBlt, miBSPushPixels
+ :};
+ :
+ :#define FUNC_PROLOGUE(pGC, pPriv) \
+ : ((pGC)->funcs = pPriv->wrapFuncs),\
+ : ((pGC)->ops = pPriv->wrapOps)
+ :
+ :#define FUNC_EPILOGUE(pGC, pPriv) \
+ : ((pGC)->funcs = &miBSGCFuncs),\
+ : ((pGC)->ops = &miBSGCOps)
+ :
+ :/*
+ : * every GC in the server is initially wrapped with these
+ : * "cheap" functions. This allocates no memory and is used
+ : * to discover GCs used with windows which have backing
+ : * store enabled
+ : */
+ :
+ :static void miBSCheapValidateGC(GCPtr pGC, unsigned long stateChanges,
+ : DrawablePtr pDrawable);
+ :static void miBSCheapCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
+ :static void miBSCheapDestroyGC(GCPtr pGC);
+ :static void miBSCheapChangeGC(GCPtr pGC, unsigned long mask);
+ :static void miBSCheapChangeClip(GCPtr pGC, int type, pointer pvalue,
+ : int nrects);
+ :static void miBSCheapDestroyClip(GCPtr pGC);
+ :static void miBSCheapCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
+ :
+ :static GCFuncs miBSCheapGCFuncs = {
+ : miBSCheapValidateGC,
+ : miBSCheapChangeGC,
+ : miBSCheapCopyGC,
+ : miBSCheapDestroyGC,
+ : miBSCheapChangeClip,
+ : miBSCheapDestroyClip,
+ : miBSCheapCopyClip,
+ :};
+ :
+ :#define CHEAP_FUNC_PROLOGUE(pGC) \
+ : ((pGC)->funcs = (GCFuncs *) (pGC)->devPrivates[miBSGCIndex].ptr)
+ :
+ :#define CHEAP_FUNC_EPILOGUE(pGC) \
+ : ((pGC)->funcs = &miBSCheapGCFuncs)
+ :
+ :/*
+ : * called from device screen initialization proc. Gets a GCPrivateIndex
+ : * and wraps appropriate per-screen functions. pScreen->BackingStoreFuncs
+ : * must be previously initialized.
+ : */
+ :
+ :_X_EXPORT void
+ :miInitializeBackingStore (pScreen)
+ : ScreenPtr pScreen;
+ :{
+ : miBSScreenPtr pScreenPriv;
+ :
+ : if (miBSGeneration != serverGeneration)
+ : {
+ : miBSScreenIndex = AllocateScreenPrivateIndex ();
+ : if (miBSScreenIndex < 0)
+ : return;
+ : miBSGCIndex = AllocateGCPrivateIndex ();
+ : miBSGeneration = serverGeneration;
+ : }
+ : if (!AllocateGCPrivate(pScreen, miBSGCIndex, 0))
+ : return;
+ : pScreenPriv = (miBSScreenPtr) xalloc (sizeof (miBSScreenRec));
+ : if (!pScreenPriv)
+ : return;
+ :
+ : pScreenPriv->CloseScreen = pScreen->CloseScreen;
+ : pScreenPriv->GetImage = pScreen->GetImage;
+ : pScreenPriv->GetSpans = pScreen->GetSpans;
+ : pScreenPriv->ChangeWindowAttributes = pScreen->ChangeWindowAttributes;
+ : pScreenPriv->CreateGC = pScreen->CreateGC;
+ : pScreenPriv->DestroyWindow = pScreen->DestroyWindow;
+ :
+ : pScreen->CloseScreen = miBSCloseScreen;
+ : pScreen->GetImage = miBSGetImage;
+ : pScreen->GetSpans = miBSGetSpans;
+ : pScreen->ChangeWindowAttributes = miBSChangeWindowAttributes;
+ : pScreen->CreateGC = miBSCreateGC;
+ : pScreen->DestroyWindow = miBSDestroyWindow;
+ :
+ : pScreen->SaveDoomedAreas = miBSSaveDoomedAreas;
+ : pScreen->RestoreAreas = miBSRestoreAreas;
+ : pScreen->ExposeCopy = miBSExposeCopy;
+ : pScreen->TranslateBackingStore = miBSTranslateBackingStore;
+ : pScreen->ClearBackingStore = miBSClearBackingStore;
+ : pScreen->DrawGuarantee = miBSDrawGuarantee;
+ :
+ : pScreen->devPrivates[miBSScreenIndex].ptr = (pointer) pScreenPriv;
+ :}
+ :
+ :/*
+ : * Screen function wrappers
+ : */
+ :
+ :#define SCREEN_PROLOGUE(pScreen, field)\
+ : ((pScreen)->field = \
+ : ((miBSScreenPtr) \
+ : (pScreen)->devPrivates[miBSScreenIndex].ptr)->field)
+ :
+ :#define SCREEN_EPILOGUE(pScreen, field, wrapper)\
+ : ((pScreen)->field = wrapper)
+ :
+ :/*
+ : * CloseScreen wrapper -- unwrap everything, free the private data
+ : * and call the wrapped function
+ : */
+ :
+ :static Bool
+ :miBSCloseScreen (i, pScreen)
+ : int i;
+ : ScreenPtr pScreen;
+ :{
+ : miBSScreenPtr pScreenPriv;
+ :
+ : pScreenPriv = (miBSScreenPtr) pScreen->devPrivates[miBSScreenIndex].ptr;
+ :
+ : pScreen->CloseScreen = pScreenPriv->CloseScreen;
+ : pScreen->GetImage = pScreenPriv->GetImage;
+ : pScreen->GetSpans = pScreenPriv->GetSpans;
+ : pScreen->ChangeWindowAttributes = pScreenPriv->ChangeWindowAttributes;
+ : pScreen->CreateGC = pScreenPriv->CreateGC;
+ :
+ : xfree ((pointer) pScreenPriv);
+ :
+ : return (*pScreen->CloseScreen) (i, pScreen);
+ :}
+ :
+ :static void miBSFillVirtualBits(DrawablePtr pDrawable, GCPtr pGC,
+ : RegionPtr pRgn, int x, int y, int state,
+ : PixUnion pixunion, unsigned long planemask);
+ :
+ :static void
+ :miBSGetImage (pDrawable, sx, sy, w, h, format, planemask, pdstLine)
+ : DrawablePtr pDrawable;
+ : int sx, sy, w, h;
+ : unsigned int format;
+ : unsigned long planemask;
+ : char *pdstLine;
+ :{
+ : ScreenPtr pScreen = pDrawable->pScreen;
+ : BoxRec bounds;
+ : unsigned char depth;
+ :
+ : SCREEN_PROLOGUE (pScreen, GetImage);
+ :
+ : if (pDrawable->type != DRAWABLE_PIXMAP &&
+ : ((WindowPtr) pDrawable)->visibility != VisibilityUnobscured)
+ : {
+ : PixmapPtr pPixmap;
+ : miBSWindowPtr pWindowPriv;
+ : GCPtr pGC = NULL;
+ : WindowPtr pWin, pSrcWin;
+ : int xoff, yoff;
+ : RegionRec Remaining;
+ : RegionRec Border;
+ : RegionRec Inside;
+ : BoxPtr pBox;
+ : int n;
+ :
+ : pWin = (WindowPtr) pDrawable;
+ : pPixmap = 0;
+ : depth = pDrawable->depth;
+ : bounds.x1 = sx + pDrawable->x;
+ : bounds.y1 = sy + pDrawable->y;
+ : bounds.x2 = bounds.x1 + w;
+ : bounds.y2 = bounds.y1 + h;
+ : REGION_INIT(pScreen, &Remaining, &bounds, 0);
+ : for (;;)
+ : {
+ : bounds.x1 = sx + pDrawable->x - pWin->drawable.x;
+ : bounds.y1 = sy + pDrawable->y - pWin->drawable.y;
+ : bounds.x2 = bounds.x1 + w;
+ : bounds.y2 = bounds.y1 + h;
+ : if (pWin->viewable && pWin->backStorage &&
+ : pWin->drawable.depth == depth &&
+ : (RECT_IN_REGION(pScreen, &(pWindowPriv =
+ : (miBSWindowPtr) pWin->backStorage)->SavedRegion,
+ : &bounds) != rgnOUT ||
+ : RECT_IN_REGION(pScreen, &Remaining,
+ : REGION_EXTENTS(pScreen, &pWin->borderSize)) != rgnOUT))
+ : {
+ : if (!pPixmap)
+ : {
+ : XID subWindowMode = IncludeInferiors;
+ : int x, y;
+ :
+ : pPixmap = (*pScreen->CreatePixmap) (pScreen, w, h, depth);
+ : if (!pPixmap)
+ : goto punt;
+ : pGC = GetScratchGC (depth, pScreen);
+ : if (!pGC)
+ : {
+ : (*pScreen->DestroyPixmap) (pPixmap);
+ : goto punt;
+ : }
+ : ChangeGC (pGC, GCSubwindowMode, &subWindowMode);
+ : ValidateGC ((DrawablePtr)pPixmap, pGC);
+ : REGION_NULL(pScreen, &Border);
+ : REGION_NULL(pScreen, &Inside);
+ : pSrcWin = (WindowPtr) pDrawable;
+ : x = sx;
+ : y = sy;
+ : if (pSrcWin->parent)
+ : {
+ : x += pSrcWin->origin.x;
+ : y += pSrcWin->origin.y;
+ : pSrcWin = pSrcWin->parent;
+ : }
+ : (*pGC->ops->CopyArea) ((DrawablePtr)pSrcWin,
+ : (DrawablePtr)pPixmap, pGC,
+ : x, y, w, h,
+ : 0, 0);
+ : REGION_SUBTRACT(pScreen, &Remaining, &Remaining,
+ : &((WindowPtr) pDrawable)->borderClip);
+ : }
+ :
+ : REGION_INTERSECT(pScreen, &Inside, &Remaining, &pWin->winSize);
+ : REGION_TRANSLATE(pScreen, &Inside,
+ : -pWin->drawable.x,
+ : -pWin->drawable.y);
+ : REGION_INTERSECT(pScreen, &Inside, &Inside,
+ : &pWindowPriv->SavedRegion);
+ :
+ : /* offset of sub-window in GetImage pixmap */
+ : xoff = pWin->drawable.x - pDrawable->x - sx;
+ : yoff = pWin->drawable.y - pDrawable->y - sy;
+ :
+ : if (REGION_NUM_RECTS(&Inside) > 0)
+ : {
+ : switch (pWindowPriv->status)
+ : {
+ : case StatusContents:
+ : pBox = REGION_RECTS(&Inside);
+ : for (n = REGION_NUM_RECTS(&Inside); --n >= 0;)
+ : {
+ : (*pGC->ops->CopyArea) (
+ : (DrawablePtr)pWindowPriv->pBackingPixmap,
+ : (DrawablePtr)pPixmap, pGC,
+ : pBox->x1 - pWindowPriv->x,
+ : pBox->y1 - pWindowPriv->y,
+ : pBox->x2 - pBox->x1,
+ : pBox->y2 - pBox->y1,
+ : pBox->x1 + xoff,
+ : pBox->y1 + yoff);
+ : ++pBox;
+ : }
+ : break;
+ : case StatusVirtual:
+ : case StatusVDirty:
+ : if (pWindowPriv->backgroundState == BackgroundPixmap ||
+ : pWindowPriv->backgroundState == BackgroundPixel)
+ : miBSFillVirtualBits ((DrawablePtr) pPixmap, pGC, &Inside,
+ : xoff, yoff,
+ : (int) pWindowPriv->backgroundState,
+ : pWindowPriv->background, ~0L);
+ : break;
+ : }
+ : }
+ : REGION_SUBTRACT(pScreen, &Border, &pWin->borderSize,
+ : &pWin->winSize);
+ : REGION_INTERSECT(pScreen, &Border, &Border, &Remaining);
+ : if (REGION_NUM_RECTS(&Border) > 0)
+ : {
+ : REGION_TRANSLATE(pScreen, &Border, -pWin->drawable.x,
+ : -pWin->drawable.y);
+ : miBSFillVirtualBits ((DrawablePtr) pPixmap, pGC, &Border,
+ : xoff, yoff,
+ : pWin->borderIsPixel ? (int)BackgroundPixel : (int)BackgroundPixmap,
+ : pWin->border, ~0L);
+ : }
+ : }
+ :
+ : if (pWin->viewable && pWin->firstChild)
+ : pWin = pWin->firstChild;
+ : else
+ : {
+ : while (!pWin->nextSib && pWin != (WindowPtr) pDrawable)
+ : pWin = pWin->parent;
+ : if (pWin == (WindowPtr) pDrawable)
+ : break;
+ : pWin = pWin->nextSib;
+ : }
+ : }
+ :
+ : REGION_UNINIT(pScreen, &Remaining);
+ :
+ : if (pPixmap)
+ : {
+ : REGION_UNINIT(pScreen, &Border);
+ : REGION_UNINIT(pScreen, &Inside);
+ : (*pScreen->GetImage) ((DrawablePtr) pPixmap,
+ : 0, 0, w, h, format, planemask, pdstLine);
+ : (*pScreen->DestroyPixmap) (pPixmap);
+ : FreeScratchGC (pGC);
+ : }
+ : else
+ : {
+ : goto punt;
+ : }
+ : }
+ : else
+ : {
+ :punt: ;
+ : (*pScreen->GetImage) (pDrawable, sx, sy, w, h,
+ : format, planemask, pdstLine);
+ : }
+ :
+ : SCREEN_EPILOGUE (pScreen, GetImage, miBSGetImage);
+ :}
+ :
+ :static void
+ :miBSGetSpans (pDrawable, wMax, ppt, pwidth, nspans, pdstStart)
+ : DrawablePtr pDrawable;
+ : int wMax;
+ : DDXPointPtr ppt;
+ : int *pwidth;
+ : int nspans;
+ : char *pdstStart;
+ :{
+ : ScreenPtr pScreen = pDrawable->pScreen;
+ : BoxRec bounds;
+ : int i;
+ : WindowPtr pWin;
+ : int dx, dy;
+ :
+ : SCREEN_PROLOGUE (pScreen, GetSpans);
+ :
+ : if (pDrawable->type != DRAWABLE_PIXMAP && ((WindowPtr) pDrawable)->backStorage)
+ : {
+ : PixmapPtr pPixmap;
+ : miBSWindowPtr pWindowPriv;
+ : GCPtr pGC;
+ :
+ : pWin = (WindowPtr) pDrawable;
+ : pWindowPriv = (miBSWindowPtr) pWin->backStorage;
+ : pPixmap = pWindowPriv->pBackingPixmap;
+ :
+ : bounds.x1 = ppt->x;
+ : bounds.y1 = ppt->y;
+ : bounds.x2 = bounds.x1 + *pwidth;
+ : bounds.y2 = ppt->y;
+ : for (i = 0; i < nspans; i++)
+ : {
+ : if (ppt[i].x < bounds.x1)
+ : bounds.x1 = ppt[i].x;
+ : if (ppt[i].x + pwidth[i] > bounds.x2)
+ : bounds.x2 = ppt[i].x + pwidth[i];
+ : if (ppt[i].y < bounds.y1)
+ : bounds.y1 = ppt[i].y;
+ : else if (ppt[i].y > bounds.y2)
+ : bounds.y2 = ppt[i].y;
+ : }
+ :
+ : switch (RECT_IN_REGION(pScreen, &pWindowPriv->SavedRegion, &bounds))
+ : {
+ : case rgnPART:
+ : if (!pPixmap)
+ : {
+ : miCreateBSPixmap (pWin, NullBox);
+ : if (!(pPixmap = pWindowPriv->pBackingPixmap))
+ : break;
+ : }
+ : pWindowPriv->status = StatusNoPixmap;
+ : pGC = GetScratchGC(pPixmap->drawable.depth,
+ : pPixmap->drawable.pScreen);
+ : if (pGC)
+ : {
+ : ValidateGC ((DrawablePtr) pPixmap, pGC);
+ : (*pGC->ops->CopyArea)
+ : (pDrawable, (DrawablePtr) pPixmap, pGC,
+ : bounds.x1, bounds.y1,
+ : bounds.x2 - bounds.x1, bounds.y2 - bounds.y1,
+ : bounds.x1 + pPixmap->drawable.x - pWin->drawable.x -
+ : pWindowPriv->x,
+ : bounds.y1 + pPixmap->drawable.y - pWin->drawable.y -
+ : pWindowPriv->y);
+ : FreeScratchGC(pGC);
+ : }
+ : pWindowPriv->status = StatusContents;
+ : /* fall through */
+ : case rgnIN:
+ : if (!pPixmap)
+ : {
+ : miCreateBSPixmap (pWin, NullBox);
+ : if (!(pPixmap = pWindowPriv->pBackingPixmap))
+ : break;
+ : }
+ : dx = pPixmap->drawable.x - pWin->drawable.x - pWindowPriv->x;
+ : dy = pPixmap->drawable.y - pWin->drawable.y - pWindowPriv->y;
+ : for (i = 0; i < nspans; i++)
+ : {
+ : ppt[i].x += dx;
+ : ppt[i].y += dy;
+ : }
+ : (*pScreen->GetSpans) ((DrawablePtr) pPixmap, wMax, ppt, pwidth,
+ : nspans, pdstStart);
+ : break;
+ : case rgnOUT:
+ : (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans,
+ : pdstStart);
+ : break;
+ : }
+ : }
+ : else
+ : {
+ : (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
+ : }
+ :
+ : SCREEN_EPILOGUE (pScreen, GetSpans, miBSGetSpans);
+ :}
+ :
+ :static Bool
+ :miBSChangeWindowAttributes (pWin, mask)
+ : WindowPtr pWin;
+ : unsigned long mask;
+ :{
+ : ScreenPtr pScreen;
+ : Bool ret;
+ :
+ : pScreen = pWin->drawable.pScreen;
+ :
+ : SCREEN_PROLOGUE (pScreen, ChangeWindowAttributes);
+ :
+ : ret = (*pScreen->ChangeWindowAttributes) (pWin, mask);
+ :
+ : if (ret && (mask & CWBackingStore))
+ : {
+ : if (pWin->backingStore != NotUseful || pWin->DIXsaveUnder)
+ : miBSAllocate (pWin);
+ : else
+ : miBSFree (pWin);
+ : }
+ :
+ : SCREEN_EPILOGUE (pScreen, ChangeWindowAttributes, miBSChangeWindowAttributes);
+ :
+ : return ret;
+ :}
+ :
+ :/*
+ : * GC Create wrapper. Set up the cheap GC func wrappers to track
+ : * GC validation on BackingStore windows
+ : */
+ :
+ :static Bool
+ :miBSCreateGC (pGC)
+ : GCPtr pGC;
+ :{
+ : ScreenPtr pScreen = pGC->pScreen;
+ : Bool ret;
+ :
+ : SCREEN_PROLOGUE (pScreen, CreateGC);
+ :
+ : if ( (ret = (*pScreen->CreateGC) (pGC)) )
+ : {
+ : pGC->devPrivates[miBSGCIndex].ptr = (pointer) pGC->funcs;
+ : pGC->funcs = &miBSCheapGCFuncs;
+ : }
+ :
+ : SCREEN_EPILOGUE (pScreen, CreateGC, miBSCreateGC);
+ :
+ : return ret;
+ :}
+ :
+ :static Bool
+ :miBSDestroyWindow (pWin)
+ : WindowPtr pWin;
+ :{
+ : ScreenPtr pScreen = pWin->drawable.pScreen;
+ : Bool ret;
+ :
+ : SCREEN_PROLOGUE (pScreen, DestroyWindow);
+ :
+ : ret = (*pScreen->DestroyWindow) (pWin);
+ :
+ : miBSFree (pWin);
+ :
+ : SCREEN_EPILOGUE (pScreen, DestroyWindow, miBSDestroyWindow);
+ :
+ : return ret;
+ :}
+ :
+ :/*
+ : * cheap GC func wrappers. Simply track validation on windows
+ : * with backing store to enable the real func/op wrappers
+ : */
+ :
+ :static void
+ :miBSCheapValidateGC (pGC, stateChanges, pDrawable)
+ : GCPtr pGC;
+ : unsigned long stateChanges;
+ : DrawablePtr pDrawable;
+ 1 0.0011 :{ /* miBSCheapValidateGC total: 5 0.0054 */
+ : CHEAP_FUNC_PROLOGUE (pGC);
+ :
+ 1 0.0011 : if (pDrawable->type != DRAWABLE_PIXMAP &&
+ : ((WindowPtr) pDrawable)->backStorage != NULL &&
+ : miBSCreateGCPrivate (pGC))
+ : {
+ : (*pGC->funcs->ValidateGC) (pGC, stateChanges, pDrawable);
+ : }
+ : else
+ : {
+ : (*pGC->funcs->ValidateGC) (pGC, stateChanges, pDrawable);
+ :
+ : /* rewrap funcs as Validate may have changed them */
+ : pGC->devPrivates[miBSGCIndex].ptr = (pointer) pGC->funcs;
+ :
+ 1 0.0011 : CHEAP_FUNC_EPILOGUE (pGC);
+ : }
+ 2 0.0022 :}
+ :
+ :static void
+ :miBSCheapChangeGC (pGC, mask)
+ : GCPtr pGC;
+ : unsigned long mask;
+ 1 0.0011 :{ /* miBSCheapChangeGC total: 1 0.0011 */
+ : CHEAP_FUNC_PROLOGUE (pGC);
+ :
+ : (*pGC->funcs->ChangeGC) (pGC, mask);
+ :
+ : CHEAP_FUNC_EPILOGUE (pGC);
+ :}
+ :
+ :static void
+ :miBSCheapCopyGC (pGCSrc, mask, pGCDst)
+ : GCPtr pGCSrc, pGCDst;
+ : unsigned long mask;
+ :{
+ : CHEAP_FUNC_PROLOGUE (pGCDst);
+ :
+ : (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
+ :
+ : CHEAP_FUNC_EPILOGUE (pGCDst);
+ :}
+ :
+ :static void
+ :miBSCheapDestroyGC (pGC)
+ : GCPtr pGC;
+ :{
+ : CHEAP_FUNC_PROLOGUE (pGC);
+ :
+ : (*pGC->funcs->DestroyGC) (pGC);
+ :
+ : /* leave it unwrapped */
+ :}
+ :
+ :static void
+ :miBSCheapChangeClip (pGC, type, pvalue, nrects)
+ : GCPtr pGC;
+ : int type;
+ : pointer pvalue;
+ : int nrects;
+ 1 0.0011 :{ /* miBSCheapChangeClip total: 3 0.0033 */
+ : CHEAP_FUNC_PROLOGUE (pGC);
+ :
+ : (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
+ :
+ : CHEAP_FUNC_EPILOGUE (pGC);
+ 2 0.0022 :}
+ :
+ :static void
+ :miBSCheapCopyClip(pgcDst, pgcSrc)
+ : GCPtr pgcDst, pgcSrc;
+ :{
+ : CHEAP_FUNC_PROLOGUE (pgcDst);
+ :
+ : (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
+ :
+ : CHEAP_FUNC_EPILOGUE (pgcDst);
+ :}
+ :
+ :static void
+ :miBSCheapDestroyClip(pGC)
+ : GCPtr pGC;
+ :{
+ : CHEAP_FUNC_PROLOGUE (pGC);
+ :
+ : (* pGC->funcs->DestroyClip)(pGC);
+ :
+ : CHEAP_FUNC_EPILOGUE (pGC);
+ :}
+ :
+ :/*
+ : * create the full func/op wrappers for a GC
+ : */
+ :
+ :static Bool
+ :miBSCreateGCPrivate (pGC)
+ : GCPtr pGC;
+ :{
+ : miBSGCRec *pPriv;
+ :
+ : pPriv = (miBSGCRec *) xalloc (sizeof (miBSGCRec));
+ : if (!pPriv)
+ : return FALSE;
+ : pPriv->pBackingGC = NULL;
+ : pPriv->guarantee = GuaranteeNothing;
+ : pPriv->serialNumber = 0;
+ : pPriv->stateChanges = (1 << (GCLastBit + 1)) - 1;
+ : pPriv->wrapOps = pGC->ops;
+ : pPriv->wrapFuncs = pGC->funcs;
+ : pGC->funcs = &miBSGCFuncs;
+ : pGC->ops = &miBSGCOps;
+ : pGC->devPrivates[miBSGCIndex].ptr = (pointer) pPriv;
+ : return TRUE;
+ :}
+ :
+ :static void
+ :miBSDestroyGCPrivate (GCPtr pGC)
+ :{
+ : miBSGCRec *pPriv;
+ :
+ : pPriv = (miBSGCRec *) pGC->devPrivates[miBSGCIndex].ptr;
+ : if (pPriv)
+ : {
+ : pGC->devPrivates[miBSGCIndex].ptr = (pointer) pPriv->wrapFuncs;
+ : pGC->funcs = &miBSCheapGCFuncs;
+ : pGC->ops = pPriv->wrapOps;
+ : if (pPriv->pBackingGC)
+ : FreeGC (pPriv->pBackingGC, (GContext) 0);
+ : xfree ((pointer) pPriv);
+ : }
+ :}
+ :
+ :/*
+ : * GC ops -- wrap each GC operation with our own function
+ : */
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSFillSpans --
+ : * Perform a FillSpans, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSFillSpans(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int nInit; /* number of spans to fill */
+ : DDXPointPtr pptInit; /* pointer to list of start points */
+ : int *pwidthInit; /* pointer to list of n widths */
+ : int fSorted;
+ :{
+ : DDXPointPtr pptCopy, pptReset;
+ : int *pwidthCopy;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : pptCopy = (DDXPointPtr)ALLOCATE_LOCAL(nInit*sizeof(DDXPointRec));
+ : pwidthCopy=(int *)ALLOCATE_LOCAL(nInit*sizeof(int));
+ : if (pptCopy && pwidthCopy)
+ : {
+ : copyData(pptInit, pptCopy, nInit, MoreCopy0);
+ : memmove((char *)pwidthCopy,(char *)pwidthInit,nInit*sizeof(int));
+ :
+ : (* pGC->ops->FillSpans)(pDrawable, pGC, nInit, pptInit,
+ : pwidthInit, fSorted);
+ : if (pGC->miTranslate)
+ : {
+ : int dx, dy;
+ : int nReset;
+ :
+ : pptReset = pptCopy;
+ : dx = pDrawable->x - pBackingDrawable->x;
+ : dy = pDrawable->y - pBackingDrawable->y;
+ : nReset = nInit;
+ : while (nReset--)
+ : {
+ : pptReset->x -= dx;
+ : pptReset->y -= dy;
+ : ++pptReset;
+ : }
+ : }
+ : (* pBackingGC->ops->FillSpans)(pBackingDrawable,
+ : pBackingGC, nInit, pptCopy, pwidthCopy,
+ : fSorted);
+ : }
+ : if (pwidthCopy) DEALLOCATE_LOCAL(pwidthCopy);
+ : if (pptCopy) DEALLOCATE_LOCAL(pptCopy);
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSSetSpans --
+ : * Perform a SetSpans, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSSetSpans(pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : char *psrc;
+ : DDXPointPtr ppt;
+ : int *pwidth;
+ : int nspans;
+ : int fSorted;
+ :{
+ : DDXPointPtr pptCopy, pptReset;
+ : int *pwidthCopy;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : pptCopy = (DDXPointPtr)ALLOCATE_LOCAL(nspans*sizeof(DDXPointRec));
+ : pwidthCopy=(int *)ALLOCATE_LOCAL(nspans*sizeof(int));
+ : if (pptCopy && pwidthCopy)
+ : {
+ : copyData(ppt, pptCopy, nspans, MoreCopy0);
+ : memmove((char *)pwidthCopy,(char *)pwidth,nspans*sizeof(int));
+ :
+ : (* pGC->ops->SetSpans)(pDrawable, pGC, psrc, ppt, pwidth,
+ : nspans, fSorted);
+ : if (pGC->miTranslate)
+ : {
+ : int dx, dy;
+ : int nReset;
+ :
+ : pptReset = pptCopy;
+ : dx = pDrawable->x - pBackingDrawable->x;
+ : dy = pDrawable->y - pBackingDrawable->y;
+ : nReset = nspans;
+ : while (nReset--)
+ : {
+ : pptReset->x -= dx;
+ : pptReset->y -= dy;
+ : ++pptReset;
+ : }
+ : }
+ : (* pBackingGC->ops->SetSpans)(pBackingDrawable, pBackingGC,
+ : psrc, pptCopy, pwidthCopy, nspans, fSorted);
+ : }
+ : if (pwidthCopy) DEALLOCATE_LOCAL(pwidthCopy);
+ : if (pptCopy) DEALLOCATE_LOCAL(pptCopy);
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPutImage --
+ : * Perform a PutImage, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSPutImage(pDrawable, pGC, depth, x, y, w, h, leftPad, format, pBits)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int depth;
+ : int x;
+ : int y;
+ : int w;
+ : int h;
+ : int leftPad;
+ : int format;
+ : char *pBits;
+ :{
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : (*pGC->ops->PutImage)(pDrawable, pGC,
+ : depth, x, y, w, h, leftPad, format, pBits);
+ : (*pBackingGC->ops->PutImage)(pBackingDrawable, pBackingGC,
+ : depth, x - pBackingStore->x, y - pBackingStore->y,
+ : w, h, leftPad, format, pBits);
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :typedef RegionPtr (* CopyAreaProcPtr)(DrawablePtr, DrawablePtr, GCPtr,
+ : int, int, int, int, int, int);
+ :typedef RegionPtr (* CopyPlaneProcPtr)(DrawablePtr, DrawablePtr, GCPtr,
+ : int, int, int, int, int, int,
+ : unsigned long bitPlane);
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSDoCopy --
+ : * Perform a CopyArea or CopyPlane within a window that has backing
+ : * store enabled.
+ : *
+ : * Results:
+ : * TRUE if the copy was performed or FALSE if a regular one should
+ : * be done.
+ : *
+ : * Side Effects:
+ : * Things are copied (no s***!)
+ : *
+ : * Notes:
+ : * The idea here is to form two regions that cover the source box.
+ : * One contains the exposed rectangles while the other contains
+ : * the obscured ones. An array of <box, drawable> pairs is then
+ : * formed where the <box> indicates the area to be copied and the
+ : * <drawable> indicates from where it is to be copied (exposed regions
+ : * come from the screen while obscured ones come from the backing
+ : * pixmap). The array 'sequence' is then filled with the indices of
+ : * the pairs in the order in which they should be copied to prevent
+ : * things from getting screwed up. A call is also made through the
+ : * backingGC to take care of any copying into the backing pixmap.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static Bool
+ :miBSDoCopy(
+ : WindowPtr pWin, /* Window being scrolled */
+ : GCPtr pGC, /* GC we're called through */
+ : int srcx, /* X of source rectangle */
+ : int srcy, /* Y of source rectangle */
+ : int w, /* Width of source rectangle */
+ : int h, /* Height of source rectangle */
+ : int dstx, /* X of destination rectangle */
+ : int dsty, /* Y of destination rectangle */
+ : unsigned long plane, /* Plane to copy (0 for CopyArea) */
+ : CopyPlaneProcPtr copyProc, /* Procedure to call to perform the copy */
+ : RegionPtr *ppRgn) /* resultant Graphics Expose region */
+ :{
+ : RegionPtr pRgnExp; /* Exposed region */
+ : RegionPtr pRgnObs; /* Obscured region */
+ : BoxRec box; /* Source box (screen coord) */
+ : struct BoxDraw {
+ : BoxPtr pBox; /* Source box */
+ : enum {
+ : win, pix
+ : } source; /* Place from which to copy */
+ : } *boxes; /* Array of box/drawable pairs covering
+ : * source box. */
+ : int *sequence; /* Sequence of boxes to move */
+ : int i, j, k, l, y;
+ : BoxPtr pBox;
+ : int dx, dy, nrects;
+ : Bool graphicsExposures;
+ : CopyPlaneProcPtr pixCopyProc;
+ : int numRectsExp, numRectsObs;
+ : BoxPtr pBoxExp, pBoxObs;
+ :
+ : SETUP_BACKING (pWin, pGC);
+ : (void)oldFuncs;
+ :
+ : /*
+ : * Create a region of exposed boxes in pRgnExp.
+ : */
+ : box.x1 = srcx + pWin->drawable.x;
+ : box.x2 = box.x1 + w;
+ : box.y1 = srcy + pWin->drawable.y;
+ : box.y2 = box.y1 + h;
+ :
+ : pRgnExp = REGION_CREATE(pGC->pScreen, &box, 1);
+ : REGION_INTERSECT(pGC->pScreen, pRgnExp, pRgnExp, &pWin->clipList);
+ : pRgnObs = REGION_CREATE(pGC->pScreen, NULL, 1);
+ : REGION_INVERSE( pGC->pScreen, pRgnObs, pRgnExp, &box);
+ :
+ : /*
+ : * Translate regions into window coordinates for proper calls
+ : * to the copyProc, then make sure none of the obscured region sticks
+ : * into invalid areas of the backing pixmap.
+ : */
+ : REGION_TRANSLATE(pGC->pScreen, pRgnExp,
+ : -pWin->drawable.x,
+ : -pWin->drawable.y);
+ : REGION_TRANSLATE(pGC->pScreen, pRgnObs,
+ : -pWin->drawable.x,
+ : -pWin->drawable.y);
+ : REGION_INTERSECT(pGC->pScreen, pRgnObs, pRgnObs, &pBackingStore->SavedRegion);
+ :
+ : /*
+ : * If the obscured region is empty, there's no point being fancy.
+ : */
+ : if (!REGION_NOTEMPTY(pGC->pScreen, pRgnObs))
+ : {
+ : REGION_DESTROY(pGC->pScreen, pRgnExp);
+ : REGION_DESTROY(pGC->pScreen, pRgnObs);
+ :
+ : return (FALSE);
+ : }
+ :
+ : numRectsExp = REGION_NUM_RECTS(pRgnExp);
+ : pBoxExp = REGION_RECTS(pRgnExp);
+ : pBoxObs = REGION_RECTS(pRgnObs);
+ : numRectsObs = REGION_NUM_RECTS(pRgnObs);
+ : nrects = numRectsExp + numRectsObs;
+ :
+ : boxes = (struct BoxDraw *)ALLOCATE_LOCAL(nrects * sizeof(struct BoxDraw));
+ : sequence = (int *) ALLOCATE_LOCAL(nrects * sizeof(int));
+ : *ppRgn = NULL;
+ :
+ : if (!boxes || !sequence)
+ : {
+ : if (sequence) DEALLOCATE_LOCAL(sequence);
+ : if (boxes) DEALLOCATE_LOCAL(boxes);
+ : REGION_DESTROY(pGC->pScreen, pRgnExp);
+ : REGION_DESTROY(pGC->pScreen, pRgnObs);
+ :
+ : return(TRUE);
+ : }
+ :
+ : /*
+ : * Order the boxes in the two regions so we know from which drawable
+ : * to copy which box, storing the result in the boxes array
+ : */
+ : for (i = 0, j = 0, k = 0;
+ : (i < numRectsExp) && (j < numRectsObs);
+ : k++)
+ : {
+ : if (pBoxExp[i].y1 < pBoxObs[j].y1)
+ : {
+ : boxes[k].pBox = &pBoxExp[i];
+ : boxes[k].source = win;
+ : i++;
+ : }
+ : else if ((pBoxObs[j].y1 < pBoxExp[i].y1) ||
+ : (pBoxObs[j].x1 < pBoxExp[i].x1))
+ : {
+ : boxes[k].pBox = &pBoxObs[j];
+ : boxes[k].source = pix;
+ : j++;
+ : }
+ : else
+ : {
+ : boxes[k].pBox = &pBoxExp[i];
+ : boxes[k].source = win;
+ : i++;
+ : }
+ : }
+ :
+ : /*
+ : * Catch any leftover boxes from either region (note that only
+ : * one can have leftover boxes...)
+ : */
+ : if (i != numRectsExp)
+ : {
+ : do
+ : {
+ : boxes[k].pBox = &pBoxExp[i];
+ : boxes[k].source = win;
+ : i++;
+ : k++;
+ : } while (i < numRectsExp);
+ :
+ : }
+ : else
+ : {
+ : do
+ : {
+ : boxes[k].pBox = &pBoxObs[j];
+ : boxes[k].source = pix;
+ : j++;
+ : k++;
+ : } while (j < numRectsObs);
+ : }
+ :
+ : if (dsty <= srcy)
+ : {
+ : /*
+ : * Scroll up or vertically stationary, so vertical order is ok.
+ : */
+ : if (dstx <= srcx)
+ : {
+ : /*
+ : * Scroll left or horizontally stationary, so horizontal order
+ : * is ok as well.
+ : */
+ : for (i = 0; i < nrects; i++)
+ : {
+ : sequence[i] = i;
+ : }
+ : }
+ : else
+ : {
+ : /*
+ : * Scroll right. Need to reverse the rectangles within each
+ : * band.
+ : */
+ : for (i = 0, j = 1, k = 0;
+ : i < nrects;
+ : j = i + 1, k = i)
+ : {
+ : y = boxes[i].pBox->y1;
+ : while ((j < nrects) && (boxes[j].pBox->y1 == y))
+ : {
+ : j++;
+ : }
+ : for (j--; j >= k; j--, i++)
+ : {
+ : sequence[i] = j;
+ : }
+ : }
+ : }
+ : }
+ : else
+ : {
+ : /*
+ : * Scroll down. Must reverse vertical banding, at least.
+ : */
+ : if (dstx < srcx)
+ : {
+ : /*
+ : * Scroll left. Horizontal order is ok.
+ : */
+ : for (i = nrects - 1, j = i - 1, k = i, l = 0;
+ : i >= 0;
+ : j = i - 1, k = i)
+ : {
+ : /*
+ : * Find extent of current horizontal band, then reverse
+ : * the order of the whole band.
+ : */
+ : y = boxes[i].pBox->y1;
+ : while ((j >= 0) && (boxes[j].pBox->y1 == y))
+ : {
+ : j--;
+ : }
+ : for (j++; j <= k; j++, i--, l++)
+ : {
+ : sequence[l] = j;
+ : }
+ : }
+ : }
+ : else
+ : {
+ : /*
+ : * Scroll right or horizontal stationary.
+ : * Reverse horizontal order as well (if stationary, horizontal
+ : * order can be swapped without penalty and this is faster
+ : * to compute).
+ : */
+ : for (i = 0, j = nrects - 1; i < nrects; i++, j--)
+ : {
+ : sequence[i] = j;
+ : }
+ : }
+ : }
+ :
+ : /*
+ : * XXX: To avoid getting multiple NoExpose events from this operation,
+ : * we turn OFF graphicsExposures in the gc and deal with any uncopied
+ : * areas later, if there's something not in backing-store.
+ : */
+ :
+ : graphicsExposures = pGC->graphicsExposures;
+ : pGC->graphicsExposures = FALSE;
+ :
+ : dx = dstx - srcx;
+ : dy = dsty - srcy;
+ :
+ : /*
+ : * Figure out which copy procedure to use from the backing GC. Note we
+ : * must do this because some implementations (sun's, e.g.) have
+ : * pBackingGC a fake GC with the real one below it, thus the devPriv for
+ : * pBackingGC won't be what the output library expects.
+ : */
+ : if (plane != 0)
+ : {
+ : pixCopyProc = pBackingGC->ops->CopyPlane;
+ : }
+ : else
+ : {
+ : pixCopyProc = (CopyPlaneProcPtr)pBackingGC->ops->CopyArea;
+ : }
+ :
+ : for (i = 0; i < nrects; i++)
+ : {
+ : pBox = boxes[sequence[i]].pBox;
+ :
+ : /*
+ : * If we're copying from the pixmap, we need to place its contents
+ : * onto the screen before scrolling the pixmap itself. If we're copying
+ : * from the window, we need to copy its contents into the pixmap before
+ : * we scroll the window itself.
+ : */
+ : if (boxes[sequence[i]].source == pix)
+ : {
+ : (void) (* copyProc) (pBackingDrawable, &(pWin->drawable), pGC,
+ : pBox->x1 - pBackingStore->x,
+ : pBox->y1 - pBackingStore->y,
+ : pBox->x2 - pBox->x1, pBox->y2 - pBox->y1,
+ : pBox->x1 + dx, pBox->y1 + dy, plane);
+ : (void) (* pixCopyProc) (pBackingDrawable, pBackingDrawable, pBackingGC,
+ : pBox->x1 - pBackingStore->x,
+ : pBox->y1 - pBackingStore->y,
+ : pBox->x2 - pBox->x1, pBox->y2 - pBox->y1,
+ : pBox->x1 + dx - pBackingStore->x,
+ : pBox->y1 + dy - pBackingStore->y, plane);
+ : }
+ : else
+ : {
+ : (void) (* pixCopyProc) (&(pWin->drawable), pBackingDrawable, pBackingGC,
+ : pBox->x1, pBox->y1,
+ : pBox->x2 - pBox->x1, pBox->y2 - pBox->y1,
+ : pBox->x1 + dx - pBackingStore->x,
+ : pBox->y1 + dy - pBackingStore->y, plane);
+ : (void) (* copyProc) (&(pWin->drawable), &(pWin->drawable), pGC,
+ : pBox->x1, pBox->y1,
+ : pBox->x2 - pBox->x1, pBox->y2 - pBox->y1,
+ : pBox->x1 + dx, pBox->y1 + dy, plane);
+ : }
+ : }
+ : DEALLOCATE_LOCAL(sequence);
+ : DEALLOCATE_LOCAL(boxes);
+ :
+ : pGC->graphicsExposures = graphicsExposures;
+ : /*
+ : * Form union of rgnExp and rgnObs and see if covers entire area
+ : * to be copied. Store the resultant region for miBSCopyArea
+ : * to return to dispatch which will send the appropriate expose
+ : * events.
+ : */
+ : REGION_UNION(pGC->pScreen, pRgnExp, pRgnExp, pRgnObs);
+ : box.x1 = srcx;
+ : box.x2 = srcx + w;
+ : box.y1 = srcy;
+ : box.y2 = srcy + h;
+ : if (RECT_IN_REGION(pGC->pScreen, pRgnExp, &box) == rgnIN)
+ : {
+ : REGION_EMPTY(pGC->pScreen, pRgnExp);
+ : }
+ : else
+ : {
+ : REGION_INVERSE( pGC->pScreen, pRgnExp, pRgnExp, &box);
+ : REGION_TRANSLATE( pGC->pScreen, pRgnExp,
+ : dx + pWin->drawable.x,
+ : dy + pWin->drawable.y);
+ : REGION_INTERSECT( pGC->pScreen, pRgnObs, pRgnExp, &pWin->clipList);
+ : (*pWin->drawable.pScreen->PaintWindowBackground) (pWin,
+ : pRgnObs, PW_BACKGROUND);
+ : REGION_TRANSLATE( pGC->pScreen, pRgnExp,
+ : -pWin->drawable.x,
+ : -pWin->drawable.y);
+ : miBSClearBackingRegion (pWin, pRgnExp);
+ : }
+ : if (graphicsExposures)
+ : *ppRgn = pRgnExp;
+ : else
+ : REGION_DESTROY(pGC->pScreen, pRgnExp);
+ : REGION_DESTROY(pGC->pScreen, pRgnObs);
+ :
+ : return (TRUE);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSCopyArea --
+ : * Perform a CopyArea from the source to the destination, extracting
+ : * from the source's backing-store and storing into the destination's
+ : * backing-store without messing anything up. If the source and
+ : * destination are different, there's not too much to worry about:
+ : * we can just issue several calls to the regular CopyArea function.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static RegionPtr
+ :miBSCopyArea (pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty)
+ : DrawablePtr pSrc;
+ : DrawablePtr pDst;
+ : GCPtr pGC;
+ : int srcx;
+ : int srcy;
+ : int w;
+ : int h;
+ : int dstx;
+ : int dsty;
+ :{
+ : BoxPtr pExtents;
+ : long dx, dy;
+ : int bsrcx, bsrcy, bw, bh, bdstx, bdsty;
+ : RegionPtr pixExposed = 0, winExposed = 0;
+ :
+ : SETUP_BACKING(pDst, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : if ((pSrc != pDst) ||
+ : (!miBSDoCopy((WindowPtr)pSrc, pGC, srcx, srcy, w, h, dstx, dsty,
+ : (unsigned long) 0, (CopyPlaneProcPtr)pGC->ops->CopyArea,
+ : &winExposed)))
+ : {
+ : /*
+ : * always copy to the backing store first, miBSDoCopy
+ : * returns FALSE if the *source* region is disjoint
+ : * from the backing store saved region. So, copying
+ : * *to* the backing store is always safe
+ : */
+ : if (pGC->clientClipType != CT_PIXMAP)
+ : {
+ : /*
+ : * adjust srcx, srcy, w, h, dstx, dsty to be clipped to
+ : * the backing store. An unnecessary optimisation,
+ : * but a useful one when GetSpans is slow.
+ : */
+ : pExtents = REGION_EXTENTS(pDst->pScreen,
+ : (RegionPtr)pBackingGC->clientClip);
+ : bsrcx = srcx;
+ : bsrcy = srcy;
+ : bw = w;
+ : bh = h;
+ : bdstx = dstx;
+ : bdsty = dsty;
+ : dx = pExtents->x1 - bdstx;
+ : if (dx > 0)
+ : {
+ : bsrcx += dx;
+ : bdstx += dx;
+ : bw -= dx;
+ : }
+ : dy = pExtents->y1 - bdsty;
+ : if (dy > 0)
+ : {
+ : bsrcy += dy;
+ : bdsty += dy;
+ : bh -= dy;
+ : }
+ : dx = (bdstx + bw) - pExtents->x2;
+ : if (dx > 0)
+ : bw -= dx;
+ : dy = (bdsty + bh) - pExtents->y2;
+ : if (dy > 0)
+ : bh -= dy;
+ : if (bw > 0 && bh > 0)
+ : pixExposed = (* pBackingGC->ops->CopyArea) (pSrc,
+ : pBackingDrawable, pBackingGC,
+ : bsrcx, bsrcy, bw, bh, bdstx - pBackingStore->x,
+ : bdsty - pBackingStore->y);
+ : }
+ : else
+ : pixExposed = (* pBackingGC->ops->CopyArea) (pSrc,
+ : pBackingDrawable, pBackingGC,
+ : srcx, srcy, w, h,
+ : dstx - pBackingStore->x, dsty - pBackingStore->y);
+ :
+ : winExposed = (* pGC->ops->CopyArea) (pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty);
+ : }
+ :
+ : /*
+ : * compute the composite graphics exposure region
+ : */
+ : if (winExposed)
+ : {
+ : if (pixExposed){
+ : REGION_UNION(pDst->pScreen, winExposed, winExposed, pixExposed);
+ : REGION_DESTROY(pDst->pScreen, pixExposed);
+ : }
+ : } else
+ : winExposed = pixExposed;
+ :
+ : EPILOGUE (pGC);
+ :
+ : return winExposed;
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSCopyPlane --
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static RegionPtr
+ :miBSCopyPlane (pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty, plane)
+ : DrawablePtr pSrc;
+ : DrawablePtr pDst;
+ : GC *pGC;
+ : int srcx,
+ : srcy;
+ : int w,
+ : h;
+ : int dstx,
+ : dsty;
+ : unsigned long plane;
+ :{
+ : BoxPtr pExtents;
+ : long dx, dy;
+ : int bsrcx, bsrcy, bw, bh, bdstx, bdsty;
+ : RegionPtr winExposed = 0, pixExposed = 0;
+ : SETUP_BACKING(pDst, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : if ((pSrc != pDst) ||
+ : (!miBSDoCopy((WindowPtr)pSrc, pGC, srcx, srcy, w, h, dstx, dsty,
+ : plane, pGC->ops->CopyPlane, &winExposed)))
+ : {
+ : /*
+ : * always copy to the backing store first, miBSDoCopy
+ : * returns FALSE if the *source* region is disjoint
+ : * from the backing store saved region. So, copying
+ : * *to* the backing store is always safe
+ : */
+ : if (pGC->clientClipType != CT_PIXMAP)
+ : {
+ : /*
+ : * adjust srcx, srcy, w, h, dstx, dsty to be clipped to
+ : * the backing store. An unnecessary optimisation,
+ : * but a useful one when GetSpans is slow.
+ : */
+ : pExtents = REGION_EXTENTS(pDst->pScreen,
+ : (RegionPtr)pBackingGC->clientClip);
+ : bsrcx = srcx;
+ : bsrcy = srcy;
+ : bw = w;
+ : bh = h;
+ : bdstx = dstx;
+ : bdsty = dsty;
+ : dx = pExtents->x1 - bdstx;
+ : if (dx > 0)
+ : {
+ : bsrcx += dx;
+ : bdstx += dx;
+ : bw -= dx;
+ : }
+ : dy = pExtents->y1 - bdsty;
+ : if (dy > 0)
+ : {
+ : bsrcy += dy;
+ : bdsty += dy;
+ : bh -= dy;
+ : }
+ : dx = (bdstx + bw) - pExtents->x2;
+ : if (dx > 0)
+ : bw -= dx;
+ : dy = (bdsty + bh) - pExtents->y2;
+ : if (dy > 0)
+ : bh -= dy;
+ : if (bw > 0 && bh > 0)
+ : pixExposed = (* pBackingGC->ops->CopyPlane) (pSrc,
+ : pBackingDrawable,
+ : pBackingGC, bsrcx, bsrcy, bw, bh,
+ : bdstx - pBackingStore->x,
+ : bdsty - pBackingStore->y, plane);
+ : }
+ : else
+ : pixExposed = (* pBackingGC->ops->CopyPlane) (pSrc,
+ : pBackingDrawable,
+ : pBackingGC, srcx, srcy, w, h,
+ : dstx - pBackingStore->x,
+ : dsty - pBackingStore->y, plane);
+ :
+ : winExposed = (* pGC->ops->CopyPlane) (pSrc, pDst, pGC, srcx, srcy, w, h,
+ : dstx, dsty, plane);
+ :
+ : }
+ :
+ : /*
+ : * compute the composite graphics exposure region
+ : */
+ : if (winExposed)
+ : {
+ : if (pixExposed)
+ : {
+ : REGION_UNION(pDst->pScreen, winExposed, winExposed, pixExposed);
+ : REGION_DESTROY(pDst->pScreen, pixExposed);
+ : }
+ : } else
+ : winExposed = pixExposed;
+ :
+ : EPILOGUE (pGC);
+ :
+ : return winExposed;
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPolyPoint --
+ : * Perform a PolyPoint, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSPolyPoint (pDrawable, pGC, mode, npt, pptInit)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int mode; /* Origin or Previous */
+ : int npt;
+ : xPoint *pptInit;
+ :{
+ : xPoint *pptCopy;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : pptCopy = (xPoint *)ALLOCATE_LOCAL(npt*sizeof(xPoint));
+ : if (pptCopy)
+ : {
+ : copyPoints(pptInit, pptCopy, npt, mode);
+ :
+ : (* pGC->ops->PolyPoint) (pDrawable, pGC, mode, npt, pptInit);
+ :
+ : (* pBackingGC->ops->PolyPoint) (pBackingDrawable,
+ : pBackingGC, mode, npt, pptCopy);
+ :
+ : DEALLOCATE_LOCAL(pptCopy);
+ : }
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPolyLines --
+ : * Perform a Polylines, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSPolylines (pDrawable, pGC, mode, npt, pptInit)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int mode;
+ : int npt;
+ : DDXPointPtr pptInit;
+ :{
+ : DDXPointPtr pptCopy;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : pptCopy = (DDXPointPtr)ALLOCATE_LOCAL(npt*sizeof(DDXPointRec));
+ : if (pptCopy)
+ : {
+ : copyPoints(pptInit, pptCopy, npt, mode);
+ :
+ : (* pGC->ops->Polylines)(pDrawable, pGC, mode, npt, pptInit);
+ : (* pBackingGC->ops->Polylines)(pBackingDrawable,
+ : pBackingGC, mode, npt, pptCopy);
+ : DEALLOCATE_LOCAL(pptCopy);
+ : }
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPolySegment --
+ : * Perform a PolySegment, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSPolySegment(pDrawable, pGC, nseg, pSegs)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int nseg;
+ : xSegment *pSegs;
+ :{
+ : xSegment *pSegsCopy;
+ :
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : pSegsCopy = (xSegment *)ALLOCATE_LOCAL(nseg*sizeof(xSegment));
+ : if (pSegsCopy)
+ : {
+ : copyData(pSegs, pSegsCopy, nseg << 1, MoreCopy0);
+ :
+ : (* pGC->ops->PolySegment)(pDrawable, pGC, nseg, pSegs);
+ : (* pBackingGC->ops->PolySegment)(pBackingDrawable,
+ : pBackingGC, nseg, pSegsCopy);
+ :
+ : DEALLOCATE_LOCAL(pSegsCopy);
+ : }
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPolyRectangle --
+ : * Perform a PolyRectangle, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : * None
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSPolyRectangle(pDrawable, pGC, nrects, pRects)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int nrects;
+ : xRectangle *pRects;
+ :{
+ : xRectangle *pRectsCopy;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : pRectsCopy =(xRectangle *)ALLOCATE_LOCAL(nrects*sizeof(xRectangle));
+ : if (pRectsCopy)
+ : {
+ : copyData(pRects, pRectsCopy, nrects, MoreCopy2);
+ :
+ : (* pGC->ops->PolyRectangle)(pDrawable, pGC, nrects, pRects);
+ : (* pBackingGC->ops->PolyRectangle)(pBackingDrawable,
+ : pBackingGC, nrects, pRectsCopy);
+ :
+ : DEALLOCATE_LOCAL(pRectsCopy);
+ : }
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPolyArc --
+ : * Perform a PolyArc, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSPolyArc(pDrawable, pGC, narcs, parcs)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int narcs;
+ : xArc *parcs;
+ :{
+ : xArc *pArcsCopy;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : pArcsCopy = (xArc *)ALLOCATE_LOCAL(narcs*sizeof(xArc));
+ : if (pArcsCopy)
+ : {
+ : copyData(parcs, pArcsCopy, narcs, MoreCopy4);
+ :
+ : (* pGC->ops->PolyArc)(pDrawable, pGC, narcs, parcs);
+ : (* pBackingGC->ops->PolyArc)(pBackingDrawable, pBackingGC,
+ : narcs, pArcsCopy);
+ :
+ : DEALLOCATE_LOCAL(pArcsCopy);
+ : }
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSFillPolygon --
+ : * Perform a FillPolygon, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSFillPolygon(pDrawable, pGC, shape, mode, count, pPts)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int shape, mode;
+ : int count;
+ : DDXPointPtr pPts;
+ :{
+ : DDXPointPtr pPtsCopy;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : pPtsCopy = (DDXPointPtr)ALLOCATE_LOCAL(count*sizeof(DDXPointRec));
+ : if (pPtsCopy)
+ : {
+ : copyPoints(pPts, pPtsCopy, count, mode);
+ : (* pGC->ops->FillPolygon)(pDrawable, pGC, shape, mode, count, pPts);
+ : (* pBackingGC->ops->FillPolygon)(pBackingDrawable,
+ : pBackingGC, shape, mode,
+ : count, pPtsCopy);
+ :
+ : DEALLOCATE_LOCAL(pPtsCopy);
+ : }
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPolyFillRect --
+ : * Perform a PolyFillRect, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSPolyFillRect(pDrawable, pGC, nrectFill, prectInit)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int nrectFill; /* number of rectangles to fill */
+ : xRectangle *prectInit; /* Pointer to first rectangle to fill */
+ :{
+ : xRectangle *pRectCopy;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : pRectCopy =
+ : (xRectangle *)ALLOCATE_LOCAL(nrectFill*sizeof(xRectangle));
+ : if (pRectCopy)
+ : {
+ : copyData(prectInit, pRectCopy, nrectFill, MoreCopy2);
+ :
+ : (* pGC->ops->PolyFillRect)(pDrawable, pGC, nrectFill, prectInit);
+ : (* pBackingGC->ops->PolyFillRect)(pBackingDrawable,
+ : pBackingGC, nrectFill, pRectCopy);
+ :
+ : DEALLOCATE_LOCAL(pRectCopy);
+ : }
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPolyFillArc --
+ : * Perform a PolyFillArc, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSPolyFillArc(pDrawable, pGC, narcs, parcs)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int narcs;
+ : xArc *parcs;
+ :{
+ : xArc *pArcsCopy;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : pArcsCopy = (xArc *)ALLOCATE_LOCAL(narcs*sizeof(xArc));
+ : if (pArcsCopy)
+ : {
+ : copyData(parcs, pArcsCopy, narcs, MoreCopy4);
+ : (* pGC->ops->PolyFillArc)(pDrawable, pGC, narcs, parcs);
+ : (* pBackingGC->ops->PolyFillArc)(pBackingDrawable,
+ : pBackingGC, narcs, pArcsCopy);
+ : DEALLOCATE_LOCAL(pArcsCopy);
+ : }
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPolyText8 --
+ : * Perform a PolyText8, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static int
+ :miBSPolyText8(pDrawable, pGC, x, y, count, chars)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int x, y;
+ : int count;
+ : char *chars;
+ :{
+ : int result;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : result = (* pGC->ops->PolyText8)(pDrawable, pGC, x, y, count, chars);
+ : (* pBackingGC->ops->PolyText8)(pBackingDrawable, pBackingGC,
+ : x - pBackingStore->x, y - pBackingStore->y,
+ : count, chars);
+ :
+ : EPILOGUE (pGC);
+ : return result;
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPolyText16 --
+ : * Perform a PolyText16, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static int
+ :miBSPolyText16(pDrawable, pGC, x, y, count, chars)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int x, y;
+ : int count;
+ : unsigned short *chars;
+ :{
+ : int result;
+ : SETUP_BACKING (pDrawable, pGC);
+ :
+ : PROLOGUE(pGC);
+ :
+ : result = (* pGC->ops->PolyText16)(pDrawable, pGC, x, y, count, chars);
+ : (* pBackingGC->ops->PolyText16)(pBackingDrawable, pBackingGC,
+ : x - pBackingStore->x, y - pBackingStore->y,
+ : count, chars);
+ :
+ : EPILOGUE (pGC);
+ :
+ : return result;
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSImageText8 --
+ : * Perform a ImageText8, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSImageText8(pDrawable, pGC, x, y, count, chars)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int x, y;
+ : int count;
+ : char *chars;
+ :{
+ : SETUP_BACKING (pDrawable, pGC);
+ : PROLOGUE(pGC);
+ :
+ : (* pGC->ops->ImageText8)(pDrawable, pGC, x, y, count, chars);
+ : (* pBackingGC->ops->ImageText8)(pBackingDrawable, pBackingGC,
+ : x - pBackingStore->x, y - pBackingStore->y,
+ : count, chars);
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSImageText16 --
+ : * Perform a ImageText16, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSImageText16(pDrawable, pGC, x, y, count, chars)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int x, y;
+ : int count;
+ : unsigned short *chars;
+ :{
+ : SETUP_BACKING (pDrawable, pGC);
+ : PROLOGUE(pGC);
+ :
+ : (* pGC->ops->ImageText16)(pDrawable, pGC, x, y, count, chars);
+ : (* pBackingGC->ops->ImageText16)(pBackingDrawable, pBackingGC,
+ : x - pBackingStore->x, y - pBackingStore->y,
+ : count, chars);
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSImageGlyphBlt --
+ : * Perform a ImageGlyphBlt, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int x, y;
+ : unsigned int nglyph;
+ : CharInfoPtr *ppci; /* array of character info */
+ : pointer pglyphBase; /* start of array of glyphs */
+ :{
+ : SETUP_BACKING (pDrawable, pGC);
+ : PROLOGUE(pGC);
+ :
+ : (* pGC->ops->ImageGlyphBlt)(pDrawable, pGC, x, y, nglyph, ppci,
+ : pglyphBase);
+ : (* pBackingGC->ops->ImageGlyphBlt)(pBackingDrawable, pBackingGC,
+ : x - pBackingStore->x, y - pBackingStore->y,
+ : nglyph, ppci, pglyphBase);
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPolyGlyphBlt --
+ : * Perform a PolyGlyphBlt, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSPolyGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : int x, y;
+ : unsigned int nglyph;
+ : CharInfoPtr *ppci; /* array of character info */
+ : pointer pglyphBase; /* start of array of glyphs */
+ :{
+ : SETUP_BACKING (pDrawable, pGC);
+ : PROLOGUE(pGC);
+ :
+ : (* pGC->ops->PolyGlyphBlt)(pDrawable, pGC, x, y, nglyph,
+ : ppci, pglyphBase);
+ : (* pBackingGC->ops->PolyGlyphBlt)(pBackingDrawable, pBackingGC,
+ : x - pBackingStore->x, y - pBackingStore->y,
+ : nglyph, ppci, pglyphBase);
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSPushPixels --
+ : * Perform a PushPixels, routing output to backing-store as needed.
+ : *
+ : * Results:
+ : *
+ : * Side Effects:
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSPushPixels(pGC, pBitMap, pDst, w, h, x, y)
+ : GCPtr pGC;
+ : PixmapPtr pBitMap;
+ : DrawablePtr pDst;
+ : int w, h, x, y;
+ :{
+ : SETUP_BACKING (pDst, pGC);
+ : PROLOGUE(pGC);
+ :
+ : (* pGC->ops->PushPixels)(pGC, pBitMap, pDst, w, h, x, y);
+ : if (pGC->miTranslate) {
+ : x -= pDst->x;
+ : y -= pDst->y;
+ : }
+ : (* pBackingGC->ops->PushPixels)(pBackingGC, pBitMap,
+ : pBackingDrawable, w, h,
+ : x - pBackingStore->x, y - pBackingStore->y);
+ :
+ : EPILOGUE (pGC);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSClearBackingStore --
+ : * Clear the given area of the backing pixmap with the background of
+ : * the window, whatever it is. If generateExposures is TRUE, generate
+ : * exposure events for the area. Note that if the area has any
+ : * part outside the saved portions of the window, we do not allow the
+ : * count in the expose events to be 0, since there will be more
+ : * expose events to come.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : * Areas of pixmap are cleared and Expose events are generated.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static RegionPtr
+ :miBSClearBackingStore(pWin, x, y, w, h, generateExposures)
+ : WindowPtr pWin;
+ : int x;
+ : int y;
+ : int w;
+ : int h;
+ : Bool generateExposures;
+ :{
+ : RegionPtr pRgn;
+ : int i;
+ : miBSWindowPtr pBackingStore;
+ : ScreenPtr pScreen;
+ : GCPtr pGC;
+ : int ts_x_origin,
+ : ts_y_origin;
+ : pointer gcvalues[4];
+ : unsigned long gcmask;
+ : xRectangle *rects;
+ : BoxPtr pBox;
+ : BoxRec box;
+ : PixUnion background;
+ : char backgroundState;
+ : int numRects;
+ :
+ : pBackingStore = (miBSWindowPtr)pWin->backStorage;
+ : pScreen = pWin->drawable.pScreen;
+ :
+ : if ((pBackingStore->status == StatusNoPixmap) ||
+ : (pBackingStore->status == StatusBadAlloc))
+ : return NullRegion;
+ :
+ : if (w == 0)
+ : w = (int) pWin->drawable.width - x;
+ : if (h == 0)
+ : h = (int) pWin->drawable.height - y;
+ :
+ : box.x1 = x;
+ : box.y1 = y;
+ : box.x2 = x + w;
+ : box.y2 = y + h;
+ : pRgn = REGION_CREATE(pWin->drawable.pScreen, &box, 1);
+ : if (!pRgn)
+ : return NullRegion;
+ : REGION_INTERSECT( pScreen, pRgn, pRgn, &pBackingStore->SavedRegion);
+ :
+ : if (REGION_NOTEMPTY( pScreen, pRgn))
+ : {
+ : /*
+ : * if clearing entire window, simply make new virtual
+ : * tile. For the root window, we also destroy the pixmap
+ : * to save a pile of memory
+ : */
+ : if (x == 0 && y == 0 &&
+ : w == pWin->drawable.width &&
+ : h == pWin->drawable.height)
+ : {
+ : if (!pWin->parent)
+ : miDestroyBSPixmap (pWin);
+ : if (pBackingStore->status != StatusContents)
+ : miTileVirtualBS (pWin);
+ : }
+ :
+ : ts_x_origin = ts_y_origin = 0;
+ :
+ : backgroundState = pWin->backgroundState;
+ : background = pWin->background;
+ : if (backgroundState == ParentRelative) {
+ : WindowPtr pParent;
+ :
+ : pParent = pWin;
+ : while (pParent->backgroundState == ParentRelative) {
+ : ts_x_origin -= pParent->origin.x;
+ : ts_y_origin -= pParent->origin.y;
+ : pParent = pParent->parent;
+ : }
+ : backgroundState = pParent->backgroundState;
+ : background = pParent->background;
+ : }
+ :
+ : if ((backgroundState != None) &&
+ : ((pBackingStore->status == StatusContents) ||
+ : !SameBackground (pBackingStore->backgroundState,
+ : pBackingStore->background,
+ : backgroundState,
+ : background)))
+ : {
+ : if (!pBackingStore->pBackingPixmap)
+ : miCreateBSPixmap(pWin, NullBox);
+ :
+ : pGC = GetScratchGC(pWin->drawable.depth, pScreen);
+ : if (pGC && pBackingStore->pBackingPixmap)
+ : {
+ : /*
+ : * First take care of any ParentRelative stuff by altering the
+ : * tile/stipple origin to match the coordinates of the upper-left
+ : * corner of the first ancestor without a ParentRelative background.
+ : * This coordinate is, of course, negative.
+ : */
+ :
+ : if (backgroundState == BackgroundPixel)
+ : {
+ : gcvalues[0] = (pointer) background.pixel;
+ : gcvalues[1] = (pointer)FillSolid;
+ : gcmask = GCForeground|GCFillStyle;
+ : }
+ : else
+ : {
+ : gcvalues[0] = (pointer)FillTiled;
+ : gcvalues[1] = (pointer) background.pixmap;
+ : gcmask = GCFillStyle|GCTile;
+ : }
+ : gcvalues[2] = (pointer)(long)(ts_x_origin - pBackingStore->x);
+ : gcvalues[3] = (pointer)(long)(ts_y_origin - pBackingStore->y);
+ : gcmask |= GCTileStipXOrigin|GCTileStipYOrigin;
+ : DoChangeGC(pGC, gcmask, (XID *)gcvalues, TRUE);
+ : ValidateGC((DrawablePtr)pBackingStore->pBackingPixmap, pGC);
+ :
+ : /*
+ : * Figure out the array of rectangles to fill and fill them with
+ : * PolyFillRect in the proper mode, as set in the GC above.
+ : */
+ : numRects = REGION_NUM_RECTS(pRgn);
+ : rects = (xRectangle *)ALLOCATE_LOCAL(numRects*sizeof(xRectangle));
+ :
+ : if (rects)
+ : {
+ : for (i = 0, pBox = REGION_RECTS(pRgn);
+ : i < numRects;
+ : i++, pBox++)
+ : {
+ : rects[i].x = pBox->x1 - pBackingStore->x;
+ : rects[i].y = pBox->y1 - pBackingStore->y;
+ : rects[i].width = pBox->x2 - pBox->x1;
+ : rects[i].height = pBox->y2 - pBox->y1;
+ : }
+ : (* pGC->ops->PolyFillRect) (
+ : (DrawablePtr)pBackingStore->pBackingPixmap,
+ : pGC, numRects, rects);
+ : DEALLOCATE_LOCAL(rects);
+ : }
+ : FreeScratchGC(pGC);
+ : }
+ : }
+ :
+ : if (!generateExposures)
+ : {
+ : REGION_DESTROY(pScreen, pRgn);
+ : pRgn = NULL;
+ : }
+ : else
+ : {
+ : /*
+ : * result must be screen relative, but is currently
+ : * drawable relative.
+ : */
+ : REGION_TRANSLATE(pScreen, pRgn, pWin->drawable.x,
+ : pWin->drawable.y);
+ : }
+ : }
+ : else
+ : {
+ : REGION_DESTROY( pScreen, pRgn);
+ : pRgn = NULL;
+ : }
+ : return pRgn;
+ :}
+ :
+ :static void
+ :miBSClearBackingRegion (pWin, pRgn)
+ : WindowPtr pWin;
+ : RegionPtr pRgn;
+ :{
+ : BoxPtr pBox;
+ : int i;
+ :
+ : i = REGION_NUM_RECTS(pRgn);
+ : pBox = REGION_RECTS(pRgn);
+ : while (i--)
+ : {
+ : (void) miBSClearBackingStore(pWin, pBox->x1, pBox->y1,
+ : pBox->x2 - pBox->x1,
+ : pBox->y2 - pBox->y1,
+ : FALSE);
+ : pBox++;
+ : }
+ :}
+ :
+ :/*
+ : * fill a region of the destination with virtual bits
+ : *
+ : * pRgn is to be translated by (x,y)
+ : */
+ :
+ :static void
+ :miBSFillVirtualBits (pDrawable, pGC, pRgn, x, y, state, pixunion, planeMask)
+ : DrawablePtr pDrawable;
+ : GCPtr pGC;
+ : RegionPtr pRgn;
+ : int x, y;
+ : int state;
+ : PixUnion pixunion;
+ : unsigned long planeMask;
+ :{
+ : int i;
+ : BITS32 gcmask;
+ : pointer gcval[5];
+ : xRectangle *pRect;
+ : BoxPtr pBox;
+ : WindowPtr pWin;
+ : int numRects;
+ :
+ : if (state == None)
+ : return;
+ : numRects = REGION_NUM_RECTS(pRgn);
+ : pRect = (xRectangle *)ALLOCATE_LOCAL(numRects * sizeof(xRectangle));
+ : if (!pRect)
+ : return;
+ : pWin = 0;
+ : if (pDrawable->type != DRAWABLE_PIXMAP)
+ : {
+ : pWin = (WindowPtr) pDrawable;
+ : if (!pWin->backStorage)
+ : pWin = 0;
+ : }
+ : i = 0;
+ : gcmask = 0;
+ : gcval[i++] = (pointer)planeMask;
+ : gcmask |= GCPlaneMask;
+ : if (state == BackgroundPixel)
+ : {
+ : if (pGC->fgPixel != pixunion.pixel)
+ : {
+ : gcval[i++] = (pointer)pixunion.pixel;
+ : gcmask |= GCForeground;
+ : }
+ : if (pGC->fillStyle != FillSolid)
+ : {
+ : gcval[i++] = (pointer)FillSolid;
+ : gcmask |= GCFillStyle;
+ : }
+ : }
+ : else
+ : {
+ : if (pGC->fillStyle != FillTiled)
+ : {
+ : gcval[i++] = (pointer)FillTiled;
+ : gcmask |= GCFillStyle;
+ : }
+ : if (pGC->tileIsPixel || pGC->tile.pixmap != pixunion.pixmap)
+ : {
+ : gcval[i++] = (pointer)pixunion.pixmap;
+ : gcmask |= GCTile;
+ : }
+ : if (pGC->patOrg.x != x)
+ : {
+ : gcval[i++] = (pointer)(long)x;
+ : gcmask |= GCTileStipXOrigin;
+ : }
+ : if (pGC->patOrg.y != y)
+ : {
+ : gcval[i++] = (pointer)(long)y;
+ : gcmask |= GCTileStipYOrigin;
+ : }
+ : }
+ : if (gcmask)
+ : DoChangeGC (pGC, gcmask, (XID *)gcval, 1);
+ :
+ : if (pWin)
+ : (*pWin->drawable.pScreen->DrawGuarantee) (pWin, pGC, GuaranteeVisBack);
+ :
+ : if (pDrawable->serialNumber != pGC->serialNumber)
+ : ValidateGC (pDrawable, pGC);
+ :
+ : pBox = REGION_RECTS(pRgn);
+ : for (i = numRects; --i >= 0; pBox++, pRect++)
+ : {
+ : pRect->x = pBox->x1 + x;
+ : pRect->y = pBox->y1 + y;
+ : pRect->width = pBox->x2 - pBox->x1;
+ : pRect->height = pBox->y2 - pBox->y1;
+ : }
+ : pRect -= numRects;
+ : (*pGC->ops->PolyFillRect) (pDrawable, pGC, numRects, pRect);
+ : if (pWin)
+ : (*pWin->drawable.pScreen->DrawGuarantee) (pWin, pGC, GuaranteeNothing);
+ : DEALLOCATE_LOCAL (pRect);
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSAllocate --
+ : * Create and install backing store info for a window
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :
+ :static void
+ :miBSAllocate(pWin)
+ : WindowPtr pWin;
+ :{
+ : miBSWindowPtr pBackingStore;
+ : ScreenPtr pScreen;
+ :
+ : if (pWin->drawable.pScreen->backingStoreSupport == NotUseful)
+ : return;
+ : pScreen = pWin->drawable.pScreen;
+ : if (!(pBackingStore = (miBSWindowPtr)pWin->backStorage))
+ : {
+ :
+ : pBackingStore = (miBSWindowPtr)xalloc(sizeof(miBSWindowRec));
+ : if (!pBackingStore)
+ : return;
+ :
+ : pBackingStore->pBackingPixmap = NullPixmap;
+ : pBackingStore->x = 0;
+ : pBackingStore->y = 0;
+ : REGION_NULL( pScreen, &pBackingStore->SavedRegion);
+ : pBackingStore->viewable = (char)pWin->viewable;
+ : pBackingStore->status = StatusNoPixmap;
+ : pBackingStore->backgroundState = None;
+ : pWin->backStorage = (pointer) pBackingStore;
+ : }
+ :
+ : /*
+ : * Now want to initialize the backing pixmap and SavedRegion if
+ : * necessary. The initialization consists of finding all the
+ : * currently-obscured regions, by taking the inverse of the window's
+ : * clip list, storing the result in SavedRegion, and exposing those
+ : * areas of the window.
+ : */
+ :
+ : if (pBackingStore->status == StatusNoPixmap &&
+ : ((pWin->backingStore == WhenMapped && pWin->viewable) ||
+ : (pWin->backingStore == Always)))
+ : {
+ : BoxRec box;
+ : RegionPtr pSavedRegion;
+ :
+ : pSavedRegion = &pBackingStore->SavedRegion;
+ :
+ : box.x1 = pWin->drawable.x;
+ : box.x2 = box.x1 + (int) pWin->drawable.width;
+ : box.y1 = pWin->drawable.y;
+ : box.y2 = pWin->drawable.y + (int) pWin->drawable.height;
+ :
+ : REGION_INVERSE( pScreen, pSavedRegion, &pWin->clipList, &box);
+ : REGION_TRANSLATE( pScreen, pSavedRegion,
+ : -pWin->drawable.x,
+ : -pWin->drawable.y);
+ :#ifdef SHAPE
+ : if (wBoundingShape (pWin))
+ : REGION_INTERSECT(pScreen, pSavedRegion, pSavedRegion,
+ : wBoundingShape (pWin));
+ : if (wClipShape (pWin))
+ : REGION_INTERSECT(pScreen, pSavedRegion, pSavedRegion,
+ : wClipShape (pWin));
+ :#endif
+ : /* if window is already on-screen, assume it has been drawn to */
+ : if (pWin->viewable)
+ : pBackingStore->status = StatusVDirty;
+ : miTileVirtualBS (pWin);
+ :
+ : /*
+ : * deliver all the newly available regions
+ : * as exposure events to the window
+ : */
+ :
+ : miSendExposures(pWin, pSavedRegion, 0, 0);
+ : }
+ : else if (!pWin->viewable)
+ : {
+ : /*
+ : * Turn off backing store when we're not supposed to
+ : * be saving anything
+ : */
+ : if (pBackingStore->status != StatusNoPixmap)
+ : {
+ : REGION_EMPTY( pScreen, &pBackingStore->SavedRegion);
+ : miDestroyBSPixmap (pWin);
+ : }
+ : }
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSFree --
+ : * Destroy and free all the stuff associated with the backing-store
+ : * for the given window.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : * The backing pixmap and all the regions and GC's are destroyed.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSFree(pWin)
+ : WindowPtr pWin;
+ :{
+ : miBSWindowPtr pBackingStore;
+ : ScreenPtr pScreen;
+ :
+ : pScreen = pWin->drawable.pScreen;
+ :
+ : pBackingStore = (miBSWindowPtr)pWin->backStorage;
+ : if (pBackingStore)
+ : {
+ : miDestroyBSPixmap (pWin);
+ :
+ : REGION_UNINIT( pScreen, &pBackingStore->SavedRegion);
+ :
+ : xfree(pBackingStore);
+ : pWin->backStorage = NULL;
+ : }
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miResizeBackingStore --
+ : * Alter the size of the backing pixmap as necessary when the
+ : * SavedRegion changes size. The contents of the old pixmap are
+ : * copied/shifted into the new/same pixmap.
+ : *
+ : * Results:
+ : * The new Pixmap is created as necessary.
+ : *
+ : * Side Effects:
+ : * The old pixmap is destroyed.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miResizeBackingStore(
+ : WindowPtr pWin,
+ : int dx, /* bits are moving this far */
+ : int dy, /* bits are moving this far */
+ : Bool saveBits) /* bits are useful */
+ :{
+ : miBSWindowPtr pBackingStore;
+ : PixmapPtr pBackingPixmap;
+ : ScreenPtr pScreen;
+ : GC *pGC;
+ : BoxPtr extents;
+ : PixmapPtr pNewPixmap;
+ : int nx, ny;
+ : int nw, nh;
+ :
+ : pBackingStore = (miBSWindowPtr)(pWin->backStorage);
+ : pBackingPixmap = pBackingStore->pBackingPixmap;
+ : if (!pBackingPixmap)
+ : return;
+ : pScreen = pWin->drawable.pScreen;
+ : extents = REGION_EXTENTS(pScreen, &pBackingStore->SavedRegion);
+ : pNewPixmap = pBackingPixmap;
+ :
+ : nw = extents->x2 - extents->x1;
+ : nh = extents->y2 - extents->y1;
+ :
+ : /* the policy here could be more sophisticated */
+ : if (nw != pBackingPixmap->drawable.width ||
+ : nh != pBackingPixmap->drawable.height)
+ : {
+ : if (!saveBits || !nw || !nh)
+ : {
+ : pNewPixmap = NullPixmap;
+ : pBackingStore->status = StatusNoPixmap;
+ : }
+ : else
+ : {
+ : pNewPixmap = (PixmapPtr)(*pScreen->CreatePixmap)
+ : (pScreen,
+ : nw, nh,
+ : pWin->drawable.depth);
+ : if (!pNewPixmap)
+ : {
+ :#ifdef BSEAGER
+ : pBackingStore->status = StatusNoPixmap;
+ :#else
+ : pBackingStore->status = StatusBadAlloc;
+ :#endif
+ : }
+ : }
+ : }
+ : if (!pNewPixmap)
+ : {
+ : pBackingStore->x = 0;
+ : pBackingStore->y = 0;
+ : }
+ : else
+ : {
+ : nx = pBackingStore->x - extents->x1 + dx;
+ : ny = pBackingStore->y - extents->y1 + dy;
+ : pBackingStore->x = extents->x1;
+ : pBackingStore->y = extents->y1;
+ :
+ : if (saveBits && (pNewPixmap != pBackingPixmap || nx != 0 || ny != 0))
+ : {
+ : pGC = GetScratchGC(pNewPixmap->drawable.depth, pScreen);
+ : if (pGC)
+ : {
+ : ValidateGC((DrawablePtr)pNewPixmap, pGC);
+ : /* if we implement a policy where the pixmap can be larger than
+ : * the region extents, we might want to optimize this copyarea
+ : * by only copying the old extents, rather than the entire
+ : * pixmap
+ : */
+ : (*pGC->ops->CopyArea)((DrawablePtr)pBackingPixmap,
+ : (DrawablePtr)pNewPixmap, pGC,
+ : 0, 0,
+ : pBackingPixmap->drawable.width,
+ : pBackingPixmap->drawable.height,
+ : nx, ny);
+ : FreeScratchGC(pGC);
+ : }
+ : }
+ : }
+ : /* SavedRegion is used in the backingGC clip; force an update */
+ : pWin->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ : if (pNewPixmap != pBackingPixmap)
+ : {
+ : (* pScreen->DestroyPixmap)(pBackingPixmap);
+ : pBackingStore->pBackingPixmap = pNewPixmap;
+ : }
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSSaveDoomedAreas --
+ : * Saved the areas of the given window that are about to be
+ : * obscured. If the window has moved, pObscured is expected to
+ : * be at the new screen location and (dx,dy) is expected to be the offset
+ : * to the window's previous location.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : * The region is copied from the screen into pBackingPixmap and
+ : * SavedRegion is updated.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSSaveDoomedAreas(pWin, pObscured, dx, dy)
+ : WindowPtr pWin;
+ : RegionPtr pObscured;
+ : int dx, dy;
+ :{
+ : miBSWindowPtr pBackingStore;
+ : ScreenPtr pScreen;
+ : int x, y;
+ :
+ : pBackingStore = (miBSWindowPtr)pWin->backStorage;
+ : pScreen = pWin->drawable.pScreen;
+ :
+ : /*
+ : * If the window isn't realized, it's being unmapped, thus we don't
+ : * want to save anything if backingStore isn't Always.
+ : */
+ : if (!pWin->realized)
+ : {
+ : pBackingStore->viewable = (char)pWin->viewable;
+ : if (pWin->backingStore != Always)
+ : {
+ : REGION_EMPTY( pScreen, &pBackingStore->SavedRegion);
+ : miDestroyBSPixmap (pWin);
+ : return;
+ : }
+ : if (pBackingStore->status == StatusBadAlloc)
+ : pBackingStore->status = StatusNoPixmap;
+ : }
+ :
+ : /* Don't even pretend to save anything for a virtual background None */
+ : if ((pBackingStore->status == StatusVirtual) &&
+ : (pBackingStore->backgroundState == None))
+ : return;
+ :
+ : if (REGION_NOTEMPTY(pScreen, pObscured))
+ : {
+ : BoxRec oldExtents;
+ : x = pWin->drawable.x;
+ : y = pWin->drawable.y;
+ : REGION_TRANSLATE(pScreen, pObscured, -x, -y);
+ : oldExtents = *REGION_EXTENTS(pScreen, &pBackingStore->SavedRegion);
+ : REGION_UNION( pScreen, &pBackingStore->SavedRegion,
+ : &pBackingStore->SavedRegion,
+ : pObscured);
+ : /*
+ : * only save the bits if we've actually
+ : * started using backing store
+ : */
+ : if (pBackingStore->status != StatusVirtual)
+ : {
+ : if (!pBackingStore->pBackingPixmap)
+ : miCreateBSPixmap (pWin, &oldExtents);
+ : else
+ : miResizeBackingStore(pWin, 0, 0, TRUE);
+ :
+ : if (pBackingStore->pBackingPixmap) {
+ : if (pBackingStore->x | pBackingStore->y)
+ : {
+ : REGION_TRANSLATE( pScreen, pObscured,
+ : -pBackingStore->x,
+ : -pBackingStore->y);
+ : x += pBackingStore->x;
+ : y += pBackingStore->y;
+ : }
+ : (* pScreen->BackingStoreFuncs.SaveAreas)
+ : (pBackingStore->pBackingPixmap, pObscured,
+ : x - dx, y - dy, pWin);
+ : }
+ : }
+ : REGION_TRANSLATE(pScreen, pObscured, x, y);
+ : }
+ : else
+ : {
+ : if (REGION_BROKEN (pScreen, pObscured))
+ : {
+ : REGION_EMPTY( pScreen, &pBackingStore->SavedRegion);
+ : miDestroyBSPixmap (pWin);
+ : return;
+ : }
+ : }
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSRestoreAreas --
+ : * Restore areas from backing-store that are no longer obscured.
+ : * expects prgnExposed to contain a screen-relative area.
+ : *
+ : * Results:
+ : * The region to generate exposure events on (which may be
+ : * different from the region to paint).
+ : *
+ : * Side Effects:
+ : * Areas are copied from pBackingPixmap to the screen. prgnExposed
+ : * is altered to contain the region that could not be restored from
+ : * backing-store.
+ : *
+ : * Notes:
+ : * This is called before sending any exposure events to the client,
+ : * and so might be called if the window has grown. Changing the backing
+ : * pixmap doesn't require revalidating the backingGC because the
+ : * client's next output request will result in a call to ValidateGC,
+ : * since the window clip region has changed, which will in turn call
+ : * miValidateBackingStore.
+ : *-----------------------------------------------------------------------
+ : */
+ :static RegionPtr
+ :miBSRestoreAreas(pWin, prgnExposed)
+ : WindowPtr pWin;
+ : RegionPtr prgnExposed;
+ :{
+ : PixmapPtr pBackingPixmap;
+ : miBSWindowPtr pBackingStore;
+ : RegionPtr prgnSaved;
+ : RegionPtr prgnRestored;
+ : ScreenPtr pScreen;
+ : RegionPtr exposures = prgnExposed;
+ :
+ : pScreen = pWin->drawable.pScreen;
+ : pBackingStore = (miBSWindowPtr)pWin->backStorage;
+ : pBackingPixmap = pBackingStore->pBackingPixmap;
+ :
+ : prgnSaved = &pBackingStore->SavedRegion;
+ :
+ : if (pBackingStore->status == StatusContents)
+ : {
+ : REGION_TRANSLATE(pScreen, prgnSaved, pWin->drawable.x,
+ : pWin->drawable.y);
+ :
+ : prgnRestored = REGION_CREATE( pScreen, (BoxPtr)NULL, 1);
+ : REGION_INTERSECT( pScreen, prgnRestored, prgnExposed, prgnSaved);
+ :
+ : /*
+ : * Since prgnExposed is no longer obscured, we no longer
+ : * will have a valid copy of it in backing-store, but there is a valid
+ : * copy of it on screen, so subtract the area we just restored from
+ : * from the area to be exposed.
+ : */
+ :
+ : if (REGION_NOTEMPTY( pScreen, prgnRestored))
+ : {
+ : REGION_SUBTRACT( pScreen, prgnSaved, prgnSaved, prgnExposed);
+ : REGION_SUBTRACT( pScreen, prgnExposed, prgnExposed, prgnRestored);
+ :
+ : /*
+ : * Do the actual restoration
+ : */
+ : (* pScreen->BackingStoreFuncs.RestoreAreas) (pBackingPixmap,
+ : prgnRestored,
+ : pWin->drawable.x + pBackingStore->x,
+ : pWin->drawable.y + pBackingStore->y,
+ : pWin);
+ : /*
+ : * if the saved region is completely empty, dispose of the
+ : * backing pixmap, otherwise, retranslate the saved
+ : * region to window relative
+ : */
+ :
+ : if (REGION_NOTEMPTY(pScreen, prgnSaved))
+ : {
+ : REGION_TRANSLATE(pScreen, prgnSaved,
+ : -pWin->drawable.x,
+ : -pWin->drawable.y);
+ : miResizeBackingStore(pWin, 0, 0, TRUE);
+ : }
+ : else
+ : miDestroyBSPixmap (pWin);
+ : }
+ : else
+ : REGION_TRANSLATE(pScreen, prgnSaved,
+ : -pWin->drawable.x, -pWin->drawable.y);
+ : REGION_DESTROY( pScreen, prgnRestored);
+ :
+ : }
+ : else if ((pBackingStore->status == StatusVirtual) ||
+ : (pBackingStore->status == StatusVDirty))
+ : {
+ : REGION_TRANSLATE(pScreen, prgnSaved,
+ : pWin->drawable.x, pWin->drawable.y);
+ : exposures = REGION_CREATE( pScreen, NullBox, 1);
+ : if (SameBackground (pBackingStore->backgroundState,
+ : pBackingStore->background,
+ : pWin->backgroundState,
+ : pWin->background))
+ : {
+ : REGION_SUBTRACT( pScreen, exposures, prgnExposed, prgnSaved);
+ : }
+ : else
+ : {
+ : miTileVirtualBS(pWin);
+ :
+ : /* we need to expose all we have (virtually) retiled */
+ : REGION_UNION( pScreen, exposures, prgnExposed, prgnSaved);
+ : }
+ : REGION_SUBTRACT( pScreen, prgnSaved, prgnSaved, prgnExposed);
+ : REGION_TRANSLATE(pScreen, prgnSaved,
+ : -pWin->drawable.x, -pWin->drawable.y);
+ : }
+ : else if (pWin->viewable && !pBackingStore->viewable &&
+ : pWin->backingStore != Always)
+ : {
+ : /*
+ : * The window was just mapped and nothing has been saved in
+ : * backing-store from the last time it was mapped. We want to capture
+ : * any output to regions that are already obscured but there are no
+ : * bits to snag off the screen, so we initialize things just as we did
+ : * in miBSAllocate, above.
+ : */
+ : BoxRec box;
+ :
+ : prgnSaved = &pBackingStore->SavedRegion;
+ :
+ : box.x1 = pWin->drawable.x;
+ : box.x2 = box.x1 + (int) pWin->drawable.width;
+ : box.y1 = pWin->drawable.y;
+ : box.y2 = box.y1 + (int) pWin->drawable.height;
+ :
+ : REGION_INVERSE( pScreen, prgnSaved, &pWin->clipList, &box);
+ : REGION_TRANSLATE( pScreen, prgnSaved,
+ : -pWin->drawable.x,
+ : -pWin->drawable.y);
+ :#ifdef SHAPE
+ : if (wBoundingShape (pWin))
+ : REGION_INTERSECT(pScreen, prgnSaved, prgnSaved,
+ : wBoundingShape (pWin));
+ : if (wClipShape (pWin))
+ : REGION_INTERSECT(pScreen, prgnSaved, prgnSaved,
+ : wClipShape (pWin));
+ :#endif
+ : miTileVirtualBS(pWin);
+ :
+ : exposures = REGION_CREATE( pScreen, &box, 1);
+ : }
+ : pBackingStore->viewable = (char)pWin->viewable;
+ : return exposures;
+ :}
+ :
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSTranslateBackingStore --
+ : * Shift the backing-store in the given direction. Called when bit
+ : * gravity is shifting things around.
+ : *
+ : * Results:
+ : * An occluded region of the window which should be sent exposure events.
+ : * This region should be in absolute coordinates (i.e. include
+ : * new window position).
+ : *
+ : * Side Effects:
+ : * If the window changed size as well as position, the backing pixmap
+ : * is resized. The contents of the backing pixmap are shifted
+ : *
+ : * Warning:
+ : * Bob and I have rewritten this routine quite a few times, each
+ : * time it gets a few more cases correct, and introducing some
+ : * interesting bugs. Naturally, I think the code is correct this
+ : * time.
+ : *
+ : * Let me try to explain what this routine is for:
+ : *
+ : * It's called from SlideAndSizeWindow whenever a window
+ : * with backing store is resized. There are two separate
+ : * possibilities:
+ : *
+ : * a) The window has ForgetGravity
+ : *
+ : * In this case, windx, windy will be 0 and oldClip will
+ : * be NULL. This indicates that all of the window contents
+ : * currently saved offscreen should be discarded, and the
+ : * entire window exposed. TranslateBackingStore, then, should
+ : * prepare a completely new backing store region based on the
+ : * new window clipList and return that region for exposure.
+ : *
+ : * b) The window has some other gravity
+ : *
+ : * In this case, windx, windy will be set to the distance
+ : * that the bits should move within the window. oldClip
+ : * will be set to the old visible portion of the window.
+ : * TranslateBackingStore, then, should adjust the backing
+ : * store to accommodate the portion of the existing backing
+ : * store bits which coorespond to backing store bits which
+ : * will still be occluded in the new configuration. oldx,oldy
+ : * are set to the old position of the window on the screen.
+ : *
+ : * Furthermore, in this case any contents of the screen which
+ : * are about to become occluded should be fetched from the screen
+ : * and placed in backing store. This is to avoid the eventual
+ : * occlusion by the win gravity shifting the child window bits around
+ : * on top of this window, and potentially losing information
+ : *
+ : * It's also called from SetShape, but I think (he says not
+ : * really knowing for sure) that this code will even work
+ : * in that case.
+ : *-----------------------------------------------------------------------
+ : */
+ :
+ :static RegionPtr
+ :miBSTranslateBackingStore(pWin, windx, windy, oldClip, oldx, oldy)
+ : WindowPtr pWin;
+ : int windx; /* bit translation distance in window */
+ : int windy;
+ : RegionPtr oldClip; /* Region being copied */
+ : int oldx; /* old window position */
+ : int oldy;
+ :{
+ : miBSWindowPtr pBackingStore;
+ : RegionPtr pSavedRegion;
+ : RegionPtr newSaved, doomed;
+ : ScreenPtr pScreen;
+ : BoxRec extents;
+ : int scrdx; /* bit translation distance on screen */
+ : int scrdy;
+ : int dx; /* distance window moved on screen */
+ : int dy;
+ :
+ : pScreen = pWin->drawable.pScreen;
+ : pBackingStore = (miBSWindowPtr)(pWin->backStorage);
+ : if ((pBackingStore->status == StatusNoPixmap) ||
+ : (pBackingStore->status == StatusBadAlloc))
+ : return NullRegion;
+ :
+ : /*
+ : * Compute the new saved region
+ : */
+ :
+ : newSaved = REGION_CREATE( pScreen, NullBox, 1);
+ : extents.x1 = pWin->drawable.x;
+ : extents.x2 = pWin->drawable.x + (int) pWin->drawable.width;
+ : extents.y1 = pWin->drawable.y;
+ : extents.y2 = pWin->drawable.y + (int) pWin->drawable.height;
+ : REGION_INVERSE( pScreen, newSaved, &pWin->clipList, &extents);
+ :
+ : REGION_TRANSLATE( pScreen, newSaved,
+ : -pWin->drawable.x, -pWin->drawable.y);
+ :#ifdef SHAPE
+ : if (wBoundingShape (pWin) || wClipShape (pWin)) {
+ : if (wBoundingShape (pWin))
+ : REGION_INTERSECT( pScreen, newSaved, newSaved,
+ : wBoundingShape (pWin));
+ : if (wClipShape (pWin))
+ : REGION_INTERSECT( pScreen, newSaved, newSaved, wClipShape (pWin));
+ : }
+ :#endif
+ :
+ : pSavedRegion = &pBackingStore->SavedRegion;
+ :
+ : /* now find any visible areas we can save from the screen */
+ : /* and then translate newSaved to old local coordinates */
+ : if (oldClip)
+ : {
+ : /* bit gravity makes things virtually too hard, punt */
+ : if (((windx != 0) || (windy != 0)) &&
+ : (pBackingStore->status != StatusContents))
+ : miCreateBSPixmap(pWin, NullBox);
+ :
+ : /*
+ : * The window is moving this far on the screen
+ : */
+ : dx = pWin->drawable.x - oldx;
+ : dy = pWin->drawable.y - oldy;
+ : /*
+ : * The bits will be moving on the screen by the
+ : * amount the window is moving + the amount the
+ : * bits are moving within the window
+ : */
+ : scrdx = windx + dx;
+ : scrdy = windy + dy;
+ :
+ : /*
+ : * intersect at old bit position to discover the
+ : * bits on the screen which can be put into the
+ : * new backing store
+ : */
+ : REGION_TRANSLATE( pScreen, oldClip, windx - oldx, windy - oldy);
+ : doomed = REGION_CREATE( pScreen, NullBox, 1);
+ : REGION_INTERSECT( pScreen, doomed, oldClip, newSaved);
+ : REGION_TRANSLATE( pScreen, oldClip, oldx - windx, oldy - windy);
+ :
+ : /*
+ : * Translate the old saved region to the position in the
+ : * window where it will appear to be
+ : */
+ : REGION_TRANSLATE( pScreen, pSavedRegion, windx, windy);
+ :
+ : /*
+ : * Add the old saved region to the new saved region, so
+ : * that calls to RestoreAreas will be able to fetch those
+ : * bits back
+ : */
+ : REGION_UNION( pScreen, newSaved, newSaved, pSavedRegion);
+ :
+ : /*
+ : * Swap the new saved region into the window
+ : */
+ : {
+ : RegionRec tmp;
+ :
+ : tmp = *pSavedRegion;
+ : *pSavedRegion = *newSaved;
+ : *newSaved = tmp;
+ : }
+ : miResizeBackingStore (pWin, windx, windy, TRUE);
+ :
+ : /*
+ : * Compute the newly enabled region
+ : * of backing store. This region will be
+ : * set to background in the backing pixmap and
+ : * sent as exposure events to the client.
+ : */
+ : REGION_SUBTRACT( pScreen, newSaved, pSavedRegion, newSaved);
+ :
+ : /*
+ : * Fetch bits which will be obscured from
+ : * the screen
+ : */
+ : if (REGION_NOTEMPTY( pScreen, doomed))
+ : {
+ : /*
+ : * Don't clear regions which have bits on the
+ : * screen
+ : */
+ : REGION_SUBTRACT( pScreen, newSaved, newSaved, doomed);
+ :
+ : /*
+ : * Make the region to SaveDoomedAreas absolute, instead
+ : * of window relative.
+ : */
+ : REGION_TRANSLATE( pScreen, doomed,
+ : pWin->drawable.x, pWin->drawable.y);
+ : (* pScreen->SaveDoomedAreas) (pWin, doomed, scrdx, scrdy);
+ : }
+ :
+ : REGION_DESTROY(pScreen, doomed);
+ :
+ : /*
+ : * and clear whatever there is that's new
+ : */
+ : if (REGION_NOTEMPTY( pScreen, newSaved))
+ : {
+ : miBSClearBackingRegion (pWin, newSaved);
+ : /*
+ : * Make the exposed region absolute
+ : */
+ : REGION_TRANSLATE(pScreen, newSaved,
+ : pWin->drawable.x,
+ : pWin->drawable.y);
+ : }
+ : else
+ : {
+ : REGION_DESTROY(pScreen, newSaved);
+ : newSaved = NullRegion;
+ : }
+ : }
+ : else
+ : {
+ : /*
+ : * ForgetGravity: just reset backing store and
+ : * expose the whole mess
+ : */
+ : REGION_COPY( pScreen, pSavedRegion, newSaved);
+ : REGION_TRANSLATE( pScreen, newSaved,
+ : pWin->drawable.x, pWin->drawable.y);
+ :
+ : miResizeBackingStore (pWin, 0, 0, FALSE);
+ : (void) miBSClearBackingStore (pWin, 0, 0, 0, 0, FALSE);
+ : }
+ :
+ : return newSaved;
+ :}
+ :
+ :/*
+ : * Inform the backing store layer that you are about to validate
+ : * a gc with a window, and that subsequent output to the window
+ : * is (or is not) guaranteed to be already clipped to the visible
+ : * regions of the window.
+ : */
+ :
+ :static void
+ :miBSDrawGuarantee (pWin, pGC, guarantee)
+ : WindowPtr pWin;
+ : GCPtr pGC;
+ : int guarantee;
+ :{
+ : miBSGCPtr pPriv;
+ :
+ : if (pWin->backStorage)
+ : {
+ : pPriv = (miBSGCPtr)pGC->devPrivates[miBSGCIndex].ptr;
+ : if (!pPriv)
+ : (void) miBSCreateGCPrivate (pGC);
+ : pPriv = (miBSGCPtr)pGC->devPrivates[miBSGCIndex].ptr;
+ : if (pPriv)
+ : {
+ : /*
+ : * XXX KLUDGE ALERT
+ : *
+ : * when the GC is Cheap pPriv will point
+ : * at some device's gc func structure. guarantee
+ : * will point at the ChangeGC entry of that struct
+ : * and will never match a valid guarantee value.
+ : */
+ : switch (pPriv->guarantee)
+ : {
+ : case GuaranteeNothing:
+ : case GuaranteeVisBack:
+ : pPriv->guarantee = guarantee;
+ : break;
+ : }
+ : }
+ : }
+ :}
+ :
+ :#define noBackingCopy (GCGraphicsExposures|GCClipXOrigin|GCClipYOrigin| \
+ : GCClipMask|GCSubwindowMode| \
+ : GCTileStipXOrigin|GCTileStipYOrigin)
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSValidateGC --
+ : * Wrapper around output-library's ValidateGC routine
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : *
+ : * Notes:
+ : * The idea here is to perform several functions:
+ : * - All the output calls must be intercepted and routed to
+ : * backing-store as necessary.
+ : * - pGC in the window's devBackingStore must be set up with the
+ : * clip list appropriate for writing to pBackingPixmap (i.e.
+ : * the inverse of the window's clipList intersected with the
+ : * clientClip of the GC). Since the destination for this GC is
+ : * a pixmap, it is sufficient to set the clip list as its
+ : * clientClip.
+ : *-----------------------------------------------------------------------
+ : */
+ :
+ :static void
+ :miBSValidateGC (pGC, stateChanges, pDrawable)
+ : GCPtr pGC;
+ : unsigned long stateChanges;
+ : DrawablePtr pDrawable;
+ :{
+ : GCPtr pBackingGC;
+ : miBSWindowPtr pWindowPriv = NULL;
+ : miBSGCPtr pPriv;
+ : WindowPtr pWin;
+ : int lift_functions;
+ : RegionPtr backingCompositeClip = NULL;
+ :
+ : if (pDrawable->type != DRAWABLE_PIXMAP)
+ : {
+ : pWin = (WindowPtr) pDrawable;
+ : pWindowPriv = (miBSWindowPtr) pWin->backStorage;
+ : lift_functions = (pWindowPriv == (miBSWindowPtr) NULL);
+ : }
+ : else
+ : {
+ : pWin = (WindowPtr) NULL;
+ : lift_functions = TRUE;
+ : }
+ :
+ : pPriv = (miBSGCPtr)pGC->devPrivates[miBSGCIndex].ptr;
+ :
+ : FUNC_PROLOGUE (pGC, pPriv);
+ :
+ : (*pGC->funcs->ValidateGC) (pGC, stateChanges, pDrawable);
+ :
+ : /*
+ : * rewrap funcs and ops as Validate may have changed them
+ : */
+ :
+ : pPriv->wrapFuncs = pGC->funcs;
+ : pPriv->wrapOps = pGC->ops;
+ :
+ : if (!lift_functions && ((pPriv->guarantee == GuaranteeVisBack) ||
+ : (pWindowPriv->status == StatusNoPixmap) ||
+ : (pWindowPriv->status == StatusBadAlloc)))
+ : lift_functions = TRUE;
+ :
+ : /*
+ : * check to see if a new backingCompositeClip region must
+ : * be generated
+ : */
+ :
+ : if (!lift_functions &&
+ : ((pDrawable->serialNumber != pPriv->serialNumber) ||
+ : (stateChanges&(GCClipXOrigin|GCClipYOrigin|GCClipMask|GCSubwindowMode))))
+ : {
+ : if (REGION_NOTEMPTY(pGC->pScreen, &pWindowPriv->SavedRegion))
+ : {
+ : backingCompositeClip = REGION_CREATE(pGC->pScreen, NULL, 1);
+ : if ((pGC->clientClipType == CT_NONE) ||
+ : (pGC->clientClipType == CT_PIXMAP))
+ : {
+ : REGION_COPY(pGC->pScreen, backingCompositeClip,
+ : &pWindowPriv->SavedRegion);
+ : }
+ : else
+ : {
+ : /*
+ : * Make a new copy of the client clip, translated to
+ : * its proper origin.
+ : */
+ :
+ : REGION_COPY(pGC->pScreen, backingCompositeClip,
+ : pGC->clientClip);
+ : REGION_TRANSLATE(pGC->pScreen, backingCompositeClip,
+ : pGC->clipOrg.x,
+ : pGC->clipOrg.y);
+ : REGION_INTERSECT(pGC->pScreen, backingCompositeClip,
+ : backingCompositeClip,
+ : &pWindowPriv->SavedRegion);
+ : }
+ : if (pGC->subWindowMode == IncludeInferiors)
+ : {
+ : RegionPtr translatedClip;
+ :
+ : /* XXX
+ : * any output in IncludeInferiors mode will not
+ : * be redirected to Inferiors backing store. This
+ : * can be fixed only at great cost to the shadow routines.
+ : */
+ : translatedClip = NotClippedByChildren (pWin);
+ : REGION_TRANSLATE(pGC->pScreen, translatedClip,
+ : -pDrawable->x,
+ : -pDrawable->y);
+ : REGION_SUBTRACT(pGC->pScreen, backingCompositeClip,
+ : backingCompositeClip, translatedClip);
+ : REGION_DESTROY(pGC->pScreen, translatedClip);
+ : }
+ : if (!REGION_NOTEMPTY(pGC->pScreen, backingCompositeClip))
+ : lift_functions = TRUE;
+ : }
+ : else
+ : {
+ : lift_functions = TRUE;
+ : }
+ :
+ : /* Reset the status when drawing to an unoccluded window so that
+ : * future SaveAreas will actually copy bits from the screen. Note that
+ : * output to root window in IncludeInferiors mode will not cause this
+ : * to change. This causes all transient graphics by the window
+ : * manager to the root window to not enable backing store.
+ : */
+ : if (lift_functions && (pWindowPriv->status == StatusVirtual) &&
+ : (pWin->parent || pGC->subWindowMode != IncludeInferiors))
+ : pWindowPriv->status = StatusVDirty;
+ : }
+ :
+ : /*
+ : * if no backing store has been allocated, and it's needed,
+ : * create it now.
+ : */
+ :
+ : if (!lift_functions && !pWindowPriv->pBackingPixmap)
+ : {
+ : miCreateBSPixmap (pWin, NullBox);
+ : if (!pWindowPriv->pBackingPixmap)
+ : lift_functions = TRUE;
+ : }
+ :
+ : /*
+ : * create the backing GC if needed, lift functions
+ : * if the creation fails
+ : */
+ :
+ : if (!lift_functions && !pPriv->pBackingGC)
+ : {
+ : int status;
+ : XID noexpose = xFalse;
+ :
+ : /* We never want ops with the backingGC to generate GraphicsExpose */
+ : pBackingGC = CreateGC ((DrawablePtr)pWindowPriv->pBackingPixmap,
+ : GCGraphicsExposures, &noexpose, &status);
+ : if (status != Success)
+ : lift_functions = TRUE;
+ : else
+ : pPriv->pBackingGC = pBackingGC;
+ : }
+ :
+ : pBackingGC = pPriv->pBackingGC;
+ :
+ : pPriv->stateChanges |= stateChanges;
+ :
+ : if (lift_functions)
+ : {
+ : if (backingCompositeClip)
+ : REGION_DESTROY( pGC->pScreen, backingCompositeClip);
+ :
+ : /* unwrap the GC again */
+ : miBSDestroyGCPrivate (pGC);
+ :
+ : return;
+ : }
+ :
+ : /*
+ : * the rest of this function gets the pBackingGC
+ : * into shape for possible draws
+ : */
+ :
+ : pPriv->stateChanges &= ~noBackingCopy;
+ : if (pPriv->stateChanges)
+ : CopyGC(pGC, pBackingGC, pPriv->stateChanges);
+ : if ((pGC->patOrg.x - pWindowPriv->x) != pBackingGC->patOrg.x ||
+ : (pGC->patOrg.y - pWindowPriv->y) != pBackingGC->patOrg.y)
+ : {
+ : XID vals[2];
+ : vals[0] = pGC->patOrg.x - pWindowPriv->x;
+ : vals[1] = pGC->patOrg.y - pWindowPriv->y;
+ : DoChangeGC(pBackingGC, GCTileStipXOrigin|GCTileStipYOrigin, vals, 0);
+ : }
+ : pPriv->stateChanges = 0;
+ :
+ : if (backingCompositeClip)
+ : {
+ : XID vals[2];
+ :
+ : if (pGC->clientClipType == CT_PIXMAP)
+ : {
+ : (*pBackingGC->funcs->CopyClip)(pBackingGC, pGC);
+ : REGION_TRANSLATE(pGC->pScreen, backingCompositeClip,
+ : -pGC->clipOrg.x, -pGC->clipOrg.y);
+ : vals[0] = pGC->clipOrg.x - pWindowPriv->x;
+ : vals[1] = pGC->clipOrg.y - pWindowPriv->y;
+ : DoChangeGC(pBackingGC, GCClipXOrigin|GCClipYOrigin, vals, 0);
+ : (* pGC->pScreen->BackingStoreFuncs.SetClipmaskRgn)
+ : (pBackingGC, backingCompositeClip);
+ : REGION_DESTROY( pGC->pScreen, backingCompositeClip);
+ : }
+ : else
+ : {
+ : vals[0] = -pWindowPriv->x;
+ : vals[1] = -pWindowPriv->y;
+ : DoChangeGC(pBackingGC, GCClipXOrigin|GCClipYOrigin, vals, 0);
+ : (*pBackingGC->funcs->ChangeClip) (pBackingGC, CT_REGION, backingCompositeClip, 0);
+ : }
+ : pPriv->serialNumber = pDrawable->serialNumber;
+ : }
+ :
+ : if (pWindowPriv->pBackingPixmap->drawable.serialNumber
+ : != pBackingGC->serialNumber)
+ : {
+ : ValidateGC((DrawablePtr)pWindowPriv->pBackingPixmap, pBackingGC);
+ : }
+ :
+ : if (pBackingGC->clientClip == 0)
+ : ErrorF ("backing store clip list nil");
+ :
+ : FUNC_EPILOGUE (pGC, pPriv);
+ :}
+ :
+ :static void
+ :miBSChangeGC (pGC, mask)
+ : GCPtr pGC;
+ : unsigned long mask;
+ :{
+ : miBSGCPtr pPriv = (miBSGCPtr) (pGC)->devPrivates[miBSGCIndex].ptr;
+ :
+ : FUNC_PROLOGUE (pGC, pPriv);
+ :
+ : (*pGC->funcs->ChangeGC) (pGC, mask);
+ :
+ : FUNC_EPILOGUE (pGC, pPriv);
+ :}
+ :
+ :static void
+ :miBSCopyGC (pGCSrc, mask, pGCDst)
+ : GCPtr pGCSrc, pGCDst;
+ : unsigned long mask;
+ :{
+ : miBSGCPtr pPriv = (miBSGCPtr) (pGCDst)->devPrivates[miBSGCIndex].ptr;
+ :
+ : FUNC_PROLOGUE (pGCDst, pPriv);
+ :
+ : (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
+ :
+ : FUNC_EPILOGUE (pGCDst, pPriv);
+ :}
+ :
+ :static void
+ :miBSDestroyGC (pGC)
+ : GCPtr pGC;
+ :{
+ : miBSGCPtr pPriv = (miBSGCPtr) (pGC)->devPrivates[miBSGCIndex].ptr;
+ :
+ : FUNC_PROLOGUE (pGC, pPriv);
+ :
+ : if (pPriv->pBackingGC)
+ : FreeGC(pPriv->pBackingGC, (GContext)0);
+ :
+ : (*pGC->funcs->DestroyGC) (pGC);
+ :
+ : FUNC_EPILOGUE (pGC, pPriv);
+ :
+ : xfree(pPriv);
+ :}
+ :
+ :static void
+ :miBSChangeClip(pGC, type, pvalue, nrects)
+ : GCPtr pGC;
+ : int type;
+ : pointer pvalue;
+ : int nrects;
+ :{
+ : miBSGCPtr pPriv = (miBSGCPtr) (pGC)->devPrivates[miBSGCIndex].ptr;
+ :
+ : FUNC_PROLOGUE (pGC, pPriv);
+ :
+ : (* pGC->funcs->ChangeClip)(pGC, type, pvalue, nrects);
+ :
+ : FUNC_EPILOGUE (pGC, pPriv);
+ :}
+ :
+ :static void
+ :miBSCopyClip(pgcDst, pgcSrc)
+ : GCPtr pgcDst, pgcSrc;
+ :{
+ : miBSGCPtr pPriv = (miBSGCPtr) (pgcDst)->devPrivates[miBSGCIndex].ptr;
+ :
+ : FUNC_PROLOGUE (pgcDst, pPriv);
+ :
+ : (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
+ :
+ : FUNC_EPILOGUE (pgcDst, pPriv);
+ :}
+ :
+ :static void
+ :miBSDestroyClip(pGC)
+ : GCPtr pGC;
+ :{
+ : miBSGCPtr pPriv = (miBSGCPtr) (pGC)->devPrivates[miBSGCIndex].ptr;
+ :
+ : FUNC_PROLOGUE (pGC, pPriv);
+ :
+ : (* pGC->funcs->DestroyClip)(pGC);
+ :
+ : FUNC_EPILOGUE (pGC, pPriv);
+ :}
+ :
+ :static void
+ :miDestroyBSPixmap (pWin)
+ : WindowPtr pWin;
+ :{
+ : miBSWindowPtr pBackingStore;
+ : ScreenPtr pScreen;
+ :
+ : pScreen = pWin->drawable.pScreen;
+ : pBackingStore = (miBSWindowPtr) pWin->backStorage;
+ : if (pBackingStore->pBackingPixmap)
+ : (* pScreen->DestroyPixmap)(pBackingStore->pBackingPixmap);
+ : pBackingStore->pBackingPixmap = NullPixmap;
+ : pBackingStore->x = 0;
+ : pBackingStore->y = 0;
+ : if (pBackingStore->backgroundState == BackgroundPixmap)
+ : (* pScreen->DestroyPixmap)(pBackingStore->background.pixmap);
+ : pBackingStore->backgroundState = None;
+ : pBackingStore->status = StatusNoPixmap;
+ : pWin->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ :}
+ :
+ :static void
+ :miTileVirtualBS (pWin)
+ : WindowPtr pWin;
+ :{
+ : miBSWindowPtr pBackingStore;
+ :
+ : pBackingStore = (miBSWindowPtr) pWin->backStorage;
+ : if (pBackingStore->backgroundState == BackgroundPixmap)
+ : (* pWin->drawable.pScreen->DestroyPixmap)
+ : (pBackingStore->background.pixmap);
+ : pBackingStore->backgroundState = pWin->backgroundState;
+ : pBackingStore->background = pWin->background;
+ : if (pBackingStore->backgroundState == BackgroundPixmap)
+ : pBackingStore->background.pixmap->refcnt++;
+ :
+ : if (pBackingStore->status != StatusVDirty)
+ : pBackingStore->status = StatusVirtual;
+ :
+ : /*
+ : * punt parent relative tiles and do it now
+ : */
+ : if (pBackingStore->backgroundState == ParentRelative)
+ : miCreateBSPixmap (pWin, NullBox);
+ :}
+ :
+ :#ifdef DEBUG
+ :static int BSAllocationsFailed = 0;
+ :#define FAILEDSIZE 32
+ :static struct { int w, h; } failedRecord[FAILEDSIZE];
+ :static int failedIndex;
+ :#endif
+ :
+ :static void
+ :miCreateBSPixmap (pWin, pExtents)
+ : WindowPtr pWin;
+ : BoxPtr pExtents;
+ :{
+ : miBSWindowPtr pBackingStore;
+ : ScreenPtr pScreen;
+ : PixUnion background;
+ : char backgroundState = 0;
+ : BoxPtr extents;
+ : Bool backSet;
+ :
+ : pScreen = pWin->drawable.pScreen;
+ : pBackingStore = (miBSWindowPtr) pWin->backStorage;
+ : if (pBackingStore->status == StatusBadAlloc)
+ : return;
+ : backSet = ((pBackingStore->status == StatusVirtual) ||
+ : (pBackingStore->status == StatusVDirty));
+ :
+ : extents = REGION_EXTENTS( pScreen, &pBackingStore->SavedRegion);
+ :
+ : if (!pBackingStore->pBackingPixmap &&
+ : extents->x2 != extents->x1 &&
+ : extents->y2 != extents->y1)
+ : {
+ : /* the policy here could be more sophisticated */
+ : pBackingStore->x = extents->x1;
+ : pBackingStore->y = extents->y1;
+ : pBackingStore->pBackingPixmap =
+ : (PixmapPtr)(* pScreen->CreatePixmap)
+ : (pScreen,
+ : extents->x2 - extents->x1,
+ : extents->y2 - extents->y1,
+ : pWin->drawable.depth);
+ : }
+ : if (!pBackingStore->pBackingPixmap)
+ : {
+ :#ifdef DEBUG
+ : BSAllocationsFailed++;
+ : /*
+ : * record failed allocations
+ : */
+ : failedRecord[failedIndex].w = pWin->drawable.width;
+ : failedRecord[failedIndex].h = pWin->drawable.height;
+ : failedIndex++;
+ : if (failedIndex == FAILEDSIZE)
+ : failedIndex = 0;
+ :#endif
+ :#ifdef BSEAGER
+ : pBackingStore->status = StatusNoPixmap;
+ :#else
+ : pBackingStore->status = StatusBadAlloc;
+ :#endif
+ : return;
+ : }
+ :
+ : pBackingStore->status = StatusContents;
+ :
+ : if (backSet)
+ : {
+ : backgroundState = pWin->backgroundState;
+ : background = pWin->background;
+ :
+ : pWin->backgroundState = pBackingStore->backgroundState;
+ : pWin->background = pBackingStore->background;
+ : if (pWin->backgroundState == BackgroundPixmap)
+ : pWin->background.pixmap->refcnt++;
+ : }
+ :
+ : if (!pExtents)
+ : pExtents = extents;
+ :
+ : if (pExtents->y1 != pExtents->y2)
+ : {
+ : RegionPtr exposed;
+ :
+ : exposed = miBSClearBackingStore(pWin,
+ : pExtents->x1, pExtents->y1,
+ : pExtents->x2 - pExtents->x1,
+ : pExtents->y2 - pExtents->y1,
+ : !backSet);
+ : if (exposed)
+ : {
+ : miSendExposures(pWin, exposed, pWin->drawable.x, pWin->drawable.y);
+ : REGION_DESTROY( pScreen, exposed);
+ : }
+ : }
+ :
+ : if (backSet)
+ : {
+ : if (pWin->backgroundState == BackgroundPixmap)
+ : (* pScreen->DestroyPixmap) (pWin->background.pixmap);
+ : pWin->backgroundState = backgroundState;
+ : pWin->background = background;
+ : if (pBackingStore->backgroundState == BackgroundPixmap)
+ : (* pScreen->DestroyPixmap) (pBackingStore->background.pixmap);
+ : pBackingStore->backgroundState = None;
+ : }
+ :}
+ :
+ :/*-
+ : *-----------------------------------------------------------------------
+ : * miBSExposeCopy --
+ : * Handle the restoration of areas exposed by graphics operations.
+ : *
+ : * Results:
+ : * None.
+ : *
+ : * Side Effects:
+ : * prgnExposed has the areas exposed from backing-store removed
+ : * from it.
+ : *
+ : *-----------------------------------------------------------------------
+ : */
+ :static void
+ :miBSExposeCopy (pSrc, pDst, pGC, prgnExposed, srcx, srcy, dstx, dsty, plane)
+ : WindowPtr pSrc;
+ : DrawablePtr pDst;
+ : GCPtr pGC;
+ : RegionPtr prgnExposed;
+ : int srcx, srcy;
+ : int dstx, dsty;
+ : unsigned long plane;
+ :{
+ : RegionRec tempRgn;
+ : miBSWindowPtr pBackingStore;
+ : CopyPlaneProcPtr copyProc;
+ : GCPtr pScratchGC;
+ : BoxPtr pBox;
+ : int i;
+ : int dx, dy;
+ : BITS32 gcMask;
+ :
+ : if (!REGION_NOTEMPTY(pGC->pScreen, prgnExposed))
+ : return;
+ : pBackingStore = (miBSWindowPtr)pSrc->backStorage;
+ :
+ : if ((pBackingStore->status == StatusNoPixmap) ||
+ : (pBackingStore->status == StatusBadAlloc))
+ : return;
+ :
+ : REGION_NULL( pGC->pScreen, &tempRgn);
+ : REGION_INTERSECT( pGC->pScreen, &tempRgn, prgnExposed,
+ : &pBackingStore->SavedRegion);
+ : REGION_SUBTRACT( pGC->pScreen, prgnExposed, prgnExposed, &tempRgn);
+ :
+ : if (plane != 0) {
+ : copyProc = pGC->ops->CopyPlane;
+ : } else {
+ : copyProc = (CopyPlaneProcPtr)pGC->ops->CopyArea;
+ : }
+ :
+ : dx = dstx - srcx;
+ : dy = dsty - srcy;
+ :
+ : switch (pBackingStore->status) {
+ : case StatusVirtual:
+ : case StatusVDirty:
+ : pScratchGC = GetScratchGC (pDst->depth, pDst->pScreen);
+ : if (pScratchGC)
+ : {
+ : gcMask = 0;
+ : if (pGC->alu != pScratchGC->alu)
+ : gcMask = GCFunction;
+ : if (pGC->planemask != pScratchGC->planemask)
+ : gcMask |= GCPlaneMask;
+ : if (gcMask)
+ : CopyGC (pGC, pScratchGC, gcMask);
+ : miBSFillVirtualBits (pDst, pScratchGC, &tempRgn, dx, dy,
+ : (int) pBackingStore->backgroundState,
+ : pBackingStore->background,
+ : ~0L);
+ : FreeScratchGC (pScratchGC);
+ : }
+ : break;
+ : case StatusContents:
+ : for (i = REGION_NUM_RECTS(&tempRgn), pBox = REGION_RECTS(&tempRgn);
+ : --i >= 0;
+ : pBox++)
+ : {
+ : (* copyProc) (&(pBackingStore->pBackingPixmap->drawable), pDst, pGC,
+ : pBox->x1 - pBackingStore->x,
+ : pBox->y1 - pBackingStore->y,
+ : pBox->x2 - pBox->x1, pBox->y2 - pBox->y1,
+ : pBox->x1 + dx, pBox->y1 + dy, plane);
+ : }
+ : break;
+ : }
+ : REGION_UNINIT( pGC->pScreen, &tempRgn);
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/dix/devices.c"
+ *
+ * 9 0.0098
+ */
+
+
+ :/************************************************************
+ :
+ :Copyright 1987, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :
+ :Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 Digital not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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.
+ :
+ :********************************************************/
+ :
+ :
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <X11/X.h>
+ :#include "misc.h"
+ :#include "resource.h"
+ :#define NEED_EVENTS
+ :#define NEED_REPLIES
+ :#include <X11/Xproto.h>
+ :#include "windowstr.h"
+ :#include "inputstr.h"
+ :#include "scrnintstr.h"
+ :#include "cursorstr.h"
+ :#include "dixstruct.h"
+ :#include "site.h"
+ :#ifndef XKB_IN_SERVER
+ :#define XKB_IN_SERVER
+ :#endif
+ :#ifdef XKB
+ :#include <xkbsrv.h>
+ :#endif
+ :#include "xace.h"
+ :
+ :#include "dispatch.h"
+ :#include "swaprep.h"
+ :#include "dixevents.h"
+ :
+ :#include <X11/extensions/XI.h>
+ :#include <X11/extensions/XIproto.h>
+ :#include "exglobals.h"
+ :#include "exevents.h"
+ :
+ :/** @file
+ : * This file handles input device-related stuff.
+ : */
+ :
+ :int CoreDevicePrivatesIndex = 0;
+ :static int CoreDevicePrivatesGeneration = -1;
+ :
+ :/**
+ : * Create a new input device and init it to sane values. The device is added
+ : * to the server's off_devices list.
+ : *
+ : * @param deviceProc Callback for device control function (switch dev on/off).
+ : * @return The newly created device.
+ : */
+ :DeviceIntPtr
+ :AddInputDevice(DeviceProc deviceProc, Bool autoStart)
+ :{
+ : DeviceIntPtr dev, *prev; /* not a typo */
+ : DeviceIntPtr devtmp;
+ : int devid;
+ : char devind[MAX_DEVICES];
+ :
+ : /* Find next available id */
+ : memset(devind, 0, sizeof(char)*MAX_DEVICES);
+ : for (devtmp = inputInfo.devices; devtmp; devtmp = devtmp->next)
+ : devind[devtmp->id]++;
+ : for (devtmp = inputInfo.off_devices; devtmp; devtmp = devtmp->next)
+ : devind[devtmp->id]++;
+ : for (devid = 0; devid < MAX_DEVICES && devind[devid]; devid++)
+ : ;
+ :
+ : if (devid >= MAX_DEVICES)
+ : return (DeviceIntPtr)NULL;
+ : dev = (DeviceIntPtr) xcalloc(sizeof(DeviceIntRec), 1);
+ : if (!dev)
+ : return (DeviceIntPtr)NULL;
+ : dev->name = (char *)NULL;
+ : dev->type = 0;
+ : dev->id = devid;
+ : inputInfo.numDevices++;
+ : dev->public.on = FALSE;
+ : dev->public.processInputProc = (ProcessInputProc)NoopDDA;
+ : dev->public.realInputProc = (ProcessInputProc)NoopDDA;
+ : dev->public.enqueueInputProc = EnqueueEvent;
+ : dev->deviceProc = deviceProc;
+ : dev->startup = autoStart;
+ : dev->sync.frozen = FALSE;
+ : dev->sync.other = NullGrab;
+ : dev->sync.state = NOT_GRABBED;
+ : dev->sync.event = (xEvent *) NULL;
+ : dev->sync.evcount = 0;
+ : dev->grab = NullGrab;
+ : dev->grabTime = currentTime;
+ : dev->fromPassiveGrab = FALSE;
+ : dev->key = (KeyClassPtr)NULL;
+ : dev->valuator = (ValuatorClassPtr)NULL;
+ : dev->button = (ButtonClassPtr)NULL;
+ : dev->focus = (FocusClassPtr)NULL;
+ : dev->proximity = (ProximityClassPtr)NULL;
+ : dev->absolute = (AbsoluteClassPtr)NULL;
+ : dev->kbdfeed = (KbdFeedbackPtr)NULL;
+ : dev->ptrfeed = (PtrFeedbackPtr)NULL;
+ : dev->intfeed = (IntegerFeedbackPtr)NULL;
+ : dev->stringfeed = (StringFeedbackPtr)NULL;
+ : dev->bell = (BellFeedbackPtr)NULL;
+ : dev->leds = (LedFeedbackPtr)NULL;
+ :#ifdef XKB
+ : dev->xkb_interest = NULL;
+ :#endif
+ : dev->nPrivates = 0;
+ : dev->devPrivates = NULL;
+ : dev->unwrapProc = NULL;
+ : dev->coreEvents = TRUE;
+ : dev->inited = FALSE;
+ : dev->enabled = FALSE;
+ :
+ : for (prev = &inputInfo.off_devices; *prev; prev = &(*prev)->next)
+ : ;
+ : *prev = dev;
+ : dev->next = NULL;
+ :
+ : return dev;
+ :}
+ :
+ :/**
+ : * Switch device ON through the driver and push it onto the global device
+ : * list. All clients are notified about the device being enabled.
+ : *
+ : * A device will send events once enabled.
+ : *
+ : * @param The device to be enabled.
+ : * @return TRUE on success or FALSE otherwise.
+ : */
+ :Bool
+ :EnableDevice(DeviceIntPtr dev)
+ :{
+ : DeviceIntPtr *prev;
+ : int ret;
+ : DeviceIntRec dummyDev;
+ : devicePresenceNotify ev;
+ :
+ : for (prev = &inputInfo.off_devices;
+ : *prev && (*prev != dev);
+ : prev = &(*prev)->next)
+ : ;
+ : if ((*prev != dev) || !dev->inited ||
+ : ((ret = (*dev->deviceProc)(dev, DEVICE_ON)) != Success)) {
+ : ErrorF("couldn't enable device %d\n", dev->id);
+ : return FALSE;
+ : }
+ : dev->enabled = TRUE;
+ : *prev = dev->next;
+ :
+ : for (prev = &inputInfo.devices; *prev; prev = &(*prev)->next)
+ : ;
+ : *prev = dev;
+ : dev->next = NULL;
+ :
+ : ev.type = DevicePresenceNotify;
+ : ev.time = currentTime.milliseconds;
+ : ev.devchange = DeviceEnabled;
+ : ev.deviceid = dev->id;
+ : dummyDev.id = 0;
+ : SendEventToAllWindows(&dummyDev, DevicePresenceNotifyMask,
+ : (xEvent *) &ev, 1);
+ :
+ : return TRUE;
+ :}
+ :
+ :/**
+ : * Switch a device off through the driver and push it onto the off_devices
+ : * list. A device will not send events while disabled. All clients are
+ : * notified about the device being disabled.
+ : *
+ : * @return TRUE on success or FALSE otherwise.
+ : */
+ :Bool
+ :DisableDevice(DeviceIntPtr dev)
+ :{
+ : DeviceIntPtr *prev;
+ : DeviceIntRec dummyDev;
+ : devicePresenceNotify ev;
+ :
+ : for (prev = &inputInfo.devices;
+ : *prev && (*prev != dev);
+ : prev = &(*prev)->next)
+ : ;
+ : if (*prev != dev)
+ : return FALSE;
+ : (void)(*dev->deviceProc)(dev, DEVICE_OFF);
+ : dev->enabled = FALSE;
+ : *prev = dev->next;
+ : dev->next = inputInfo.off_devices;
+ : inputInfo.off_devices = dev;
+ :
+ : ev.type = DevicePresenceNotify;
+ : ev.time = currentTime.milliseconds;
+ : ev.devchange = DeviceDisabled;
+ : ev.deviceid = dev->id;
+ : dummyDev.id = 0;
+ : SendEventToAllWindows(&dummyDev, DevicePresenceNotifyMask,
+ : (xEvent *) &ev, 1);
+ :
+ : return TRUE;
+ :}
+ :
+ :/**
+ : * Initialise a new device through the driver and tell all clients about the
+ : * new device.
+ : *
+ : * The device will NOT send events until it is enabled!
+ : *
+ : * @return Success or an error code on failure.
+ : */
+ :int
+ :ActivateDevice(DeviceIntPtr dev)
+ :{
+ : int ret = Success;
+ : devicePresenceNotify ev;
+ : DeviceIntRec dummyDev;
+ :
+ : if (!dev || !dev->deviceProc)
+ : return BadImplementation;
+ :
+ : ret = (*dev->deviceProc) (dev, DEVICE_INIT);
+ : dev->inited = (ret == Success);
+ :
+ : ev.type = DevicePresenceNotify;
+ : ev.time = currentTime.milliseconds;
+ : ev.devchange = DeviceAdded;
+ : ev.deviceid = dev->id;
+ : dummyDev.id = 0;
+ : SendEventToAllWindows(&dummyDev, DevicePresenceNotifyMask,
+ : (xEvent *) &ev, 1);
+ :
+ : return ret;
+ :}
+ :
+ :/**
+ : * Ring the bell.
+ : * The actual task of ringing the bell is the job of the DDX.
+ : */
+ :static void
+ :CoreKeyboardBell(int volume, DeviceIntPtr pDev, pointer arg, int something)
+ :{
+ : KeybdCtrl *ctrl = arg;
+ :
+ : DDXRingBell(volume, ctrl->bell_pitch, ctrl->bell_duration);
+ :}
+ :
+ :static void
+ :CoreKeyboardCtl(DeviceIntPtr pDev, KeybdCtrl *ctrl)
+ :{
+ : return;
+ :}
+ :
+ :/**
+ : * Device control function for the Virtual Core Keyboard.
+ : */
+ :static int
+ :CoreKeyboardProc(DeviceIntPtr pDev, int what)
+ :{
+ : CARD8 *modMap;
+ : KeySymsRec keySyms;
+ :#ifdef XKB
+ : XkbComponentNamesRec names;
+ :#endif
+ :
+ : switch (what) {
+ : case DEVICE_INIT:
+ : keySyms.minKeyCode = 8;
+ : keySyms.maxKeyCode = 255;
+ : keySyms.mapWidth = 4;
+ : keySyms.map = (KeySym *)xcalloc(sizeof(KeySym),
+ : (keySyms.maxKeyCode -
+ : keySyms.minKeyCode + 1) *
+ : keySyms.mapWidth);
+ : if (!keySyms.map) {
+ : ErrorF("Couldn't allocate core keymap\n");
+ : return BadAlloc;
+ : }
+ :
+ : modMap = (CARD8 *)xalloc(MAP_LENGTH);
+ : if (!modMap) {
+ : ErrorF("Couldn't allocate core modifier map\n");
+ : return BadAlloc;
+ : }
+ : bzero((char *)modMap, MAP_LENGTH);
+ :
+ :#ifdef XKB
+ : if (!noXkbExtension) {
+ : bzero(&names, sizeof(names));
+ : XkbSetRulesDflts("base", "pc105", "us", NULL, NULL);
+ : XkbInitKeyboardDeviceStruct(pDev, &names, &keySyms, modMap,
+ : CoreKeyboardBell, CoreKeyboardCtl);
+ : }
+ : else
+ :#endif
+ : {
+ : /* FIXME Our keymap here isn't exactly useful. */
+ : InitKeyboardDeviceStruct((DevicePtr)pDev, &keySyms, modMap,
+ : CoreKeyboardBell, CoreKeyboardCtl);
+ : }
+ :
+ : xfree(keySyms.map);
+ : xfree(modMap);
+ :
+ : break;
+ :
+ : case DEVICE_CLOSE:
+ : pDev->devPrivates[CoreDevicePrivatesIndex].ptr = NULL;
+ : break;
+ :
+ : default:
+ : break;
+ : }
+ : return Success;
+ :}
+ :
+ :/**
+ : * Device control function for the Virtual Core Pointer.
+ : */
+ :static int
+ :CorePointerProc(DeviceIntPtr pDev, int what)
+ :{
+ : BYTE map[33];
+ : int i = 0;
+ :
+ : switch (what) {
+ : case DEVICE_INIT:
+ : for (i = 1; i <= 32; i++)
+ : map[i] = i;
+ : InitPointerDeviceStruct((DevicePtr)pDev, map, 32,
+ : GetMotionHistory, (PtrCtrlProcPtr)NoopDDA,
+ : GetMotionHistorySize(), 2);
+ : pDev->valuator->axisVal[0] = screenInfo.screens[0]->width / 2;
+ : pDev->valuator->lastx = pDev->valuator->axisVal[0];
+ : pDev->valuator->axisVal[1] = screenInfo.screens[0]->height / 2;
+ : pDev->valuator->lasty = pDev->valuator->axisVal[1];
+ : break;
+ :
+ : case DEVICE_CLOSE:
+ : pDev->devPrivates[CoreDevicePrivatesIndex].ptr = NULL;
+ : break;
+ :
+ : default:
+ : break;
+ : }
+ :
+ : return Success;
+ :}
+ :
+ :/**
+ : * Initialise the two core devices, VCP and VCK (see events.c).
+ : * The devices are activated but not enabled.
+ : * Note that the server MUST have two core devices at all times, even if there
+ : * is no physical device connected.
+ : */
+ :void
+ :InitCoreDevices(void)
+ :{
+ : DeviceIntPtr dev;
+ :
+ : if (CoreDevicePrivatesGeneration != serverGeneration) {
+ : CoreDevicePrivatesIndex = AllocateDevicePrivateIndex();
+ : CoreDevicePrivatesGeneration = serverGeneration;
+ : }
+ :
+ : if (!inputInfo.keyboard) {
+ : dev = AddInputDevice(CoreKeyboardProc, TRUE);
+ : if (!dev)
+ : FatalError("Failed to allocate core keyboard");
+ : dev->name = strdup("Virtual core keyboard");
+ :#ifdef XKB
+ : dev->public.processInputProc = CoreProcessKeyboardEvent;
+ : dev->public.realInputProc = CoreProcessKeyboardEvent;
+ : if (!noXkbExtension)
+ : XkbSetExtension(dev, ProcessKeyboardEvent);
+ :#else
+ : dev->public.processInputProc = ProcessKeyboardEvent;
+ : dev->public.realInputProc = ProcessKeyboardEvent;
+ :#endif
+ : dev->ActivateGrab = ActivateKeyboardGrab;
+ : dev->DeactivateGrab = DeactivateKeyboardGrab;
+ : dev->coreEvents = FALSE;
+ : if (!AllocateDevicePrivate(dev, CoreDevicePrivatesIndex))
+ : FatalError("Couldn't allocate keyboard devPrivates\n");
+ : dev->devPrivates[CoreDevicePrivatesIndex].ptr = NULL;
+ : (void)ActivateDevice(dev);
+ : inputInfo.keyboard = dev;
+ : }
+ :
+ : if (!inputInfo.pointer) {
+ : dev = AddInputDevice(CorePointerProc, TRUE);
+ : if (!dev)
+ : FatalError("Failed to allocate core pointer");
+ : dev->name = strdup("Virtual core pointer");
+ :#ifdef XKB
+ : dev->public.processInputProc = CoreProcessPointerEvent;
+ : dev->public.realInputProc = CoreProcessPointerEvent;
+ : if (!noXkbExtension)
+ : XkbSetExtension(dev, ProcessPointerEvent);
+ :#else
+ : dev->public.processInputProc = ProcessPointerEvent;
+ : dev->public.realInputProc = ProcessPointerEvent;
+ :#endif
+ : dev->ActivateGrab = ActivatePointerGrab;
+ : dev->DeactivateGrab = DeactivatePointerGrab;
+ : dev->coreEvents = FALSE;
+ : if (!AllocateDevicePrivate(dev, CoreDevicePrivatesIndex))
+ : FatalError("Couldn't allocate pointer devPrivates\n");
+ : dev->devPrivates[CoreDevicePrivatesIndex].ptr = NULL;
+ : (void)ActivateDevice(dev);
+ : inputInfo.pointer = dev;
+ : }
+ :}
+ :
+ :/**
+ : * Activate all switched-off devices and then enable all those devices.
+ : *
+ : * Will return an error if no core keyboard or core pointer is present.
+ : * In theory this should never happen if you call InitCoreDevices() first.
+ : *
+ : * @return Success or error code on failure.
+ : */
+ :int
+ :InitAndStartDevices(void)
+ :{
+ : DeviceIntPtr dev, next;
+ :
+ : for (dev = inputInfo.off_devices; dev; dev = dev->next) {
+ : DebugF("(dix) initialising device %d\n", dev->id);
+ : ActivateDevice(dev);
+ : }
+ : for (dev = inputInfo.off_devices; dev; dev = next)
+ : {
+ : DebugF("(dix) enabling device %d\n", dev->id);
+ : next = dev->next;
+ : if (dev->inited && dev->startup)
+ : (void)EnableDevice(dev);
+ : }
+ : for (dev = inputInfo.devices;
+ : dev && (dev != inputInfo.keyboard);
+ : dev = dev->next)
+ : ;
+ : if (!dev || (dev != inputInfo.keyboard)) {
+ : ErrorF("No core keyboard\n");
+ : return BadImplementation;
+ : }
+ : for (dev = inputInfo.devices;
+ : dev && (dev != inputInfo.pointer);
+ : dev = dev->next)
+ : ;
+ : if (!dev || (dev != inputInfo.pointer)) {
+ : ErrorF("No core pointer\n");
+ : return BadImplementation;
+ : }
+ : return Success;
+ :}
+ :
+ :/**
+ : * Close down a device and free all resources.
+ : * Once closed down, the driver will probably not expect you that you'll ever
+ : * enable it again and free associated structs. If you want the device to just
+ : * be disabled, DisableDevice().
+ : * Don't call this function directly, use RemoveDevice() instead.
+ : */
+ :static void
+ :CloseDevice(DeviceIntPtr dev)
+ :{
+ : KbdFeedbackPtr k, knext;
+ : PtrFeedbackPtr p, pnext;
+ : IntegerFeedbackPtr i, inext;
+ : StringFeedbackPtr s, snext;
+ : BellFeedbackPtr b, bnext;
+ : LedFeedbackPtr l, lnext;
+ :
+ : if (dev->inited)
+ : (void)(*dev->deviceProc)(dev, DEVICE_CLOSE);
+ :
+ : xfree(dev->name);
+ :
+ : if (dev->key) {
+ :#ifdef XKB
+ : if (dev->key->xkbInfo)
+ : XkbFreeInfo(dev->key->xkbInfo);
+ :#endif
+ : xfree(dev->key->curKeySyms.map);
+ : xfree(dev->key->modifierKeyMap);
+ : xfree(dev->key);
+ : }
+ :
+ : if (dev->valuator) {
+ : /* Counterpart to 'biggest hack ever' in init. */
+ : if (dev->valuator->motion &&
+ : dev->valuator->GetMotionProc == GetMotionHistory)
+ : xfree(dev->valuator->motion);
+ : xfree(dev->valuator);
+ : }
+ :
+ : if (dev->button) {
+ :#ifdef XKB
+ : if (dev->button->xkb_acts)
+ : xfree(dev->button->xkb_acts);
+ :#endif
+ : xfree(dev->button);
+ : }
+ :
+ : if (dev->focus) {
+ : xfree(dev->focus->trace);
+ : xfree(dev->focus);
+ : }
+ :
+ : if (dev->proximity)
+ : xfree(dev->proximity);
+ :
+ : for (k = dev->kbdfeed; k; k = knext) {
+ : knext = k->next;
+ :#ifdef XKB
+ : if (k->xkb_sli)
+ : XkbFreeSrvLedInfo(k->xkb_sli);
+ :#endif
+ : xfree(k);
+ : }
+ :
+ : for (p = dev->ptrfeed; p; p = pnext) {
+ : pnext = p->next;
+ : xfree(p);
+ : }
+ :
+ : for (i = dev->intfeed; i; i = inext) {
+ : inext = i->next;
+ : xfree(i);
+ : }
+ :
+ : for (s = dev->stringfeed; s; s = snext) {
+ : snext = s->next;
+ : xfree(s->ctrl.symbols_supported);
+ : xfree(s->ctrl.symbols_displayed);
+ : xfree(s);
+ : }
+ :
+ : for (b = dev->bell; b; b = bnext) {
+ : bnext = b->next;
+ : xfree(b);
+ : }
+ :
+ : for (l = dev->leds; l; l = lnext) {
+ : lnext = l->next;
+ :#ifdef XKB
+ : if (l->xkb_sli)
+ : XkbFreeSrvLedInfo(l->xkb_sli);
+ :#endif
+ : xfree(l);
+ : }
+ :
+ :#ifdef XKB
+ : while (dev->xkb_interest)
+ : XkbRemoveResourceClient((DevicePtr)dev,dev->xkb_interest->resource);
+ :#endif
+ :
+ : if (dev->devPrivates)
+ : xfree(dev->devPrivates);
+ :
+ : xfree(dev->sync.event);
+ : xfree(dev);
+ :}
+ :
+ :/**
+ : * Shut down all devices, free all resources, etc.
+ : * Only useful if you're shutting down the server!
+ : */
+ :void
+ :CloseDownDevices(void)
+ :{
+ : DeviceIntPtr dev, next;
+ :
+ : for (dev = inputInfo.devices; dev; dev = next)
+ : {
+ : next = dev->next;
+ : CloseDevice(dev);
+ : }
+ : for (dev = inputInfo.off_devices; dev; dev = next)
+ : {
+ : next = dev->next;
+ : CloseDevice(dev);
+ : }
+ : inputInfo.devices = NULL;
+ : inputInfo.off_devices = NULL;
+ : inputInfo.keyboard = NULL;
+ : inputInfo.pointer = NULL;
+ :}
+ :
+ :/**
+ : * Remove a device from the device list, closes it and thus frees all
+ : * resources.
+ : * Removes both enabled and disabled devices and notifies all devices about
+ : * the removal of the device.
+ : */
+ :int
+ :RemoveDevice(DeviceIntPtr dev)
+ :{
+ : DeviceIntPtr prev,tmp,next;
+ : int ret = BadMatch;
+ : devicePresenceNotify ev;
+ : DeviceIntRec dummyDev;
+ : int deviceid;
+ :
+ : DebugF("(dix) removing device %d\n", dev->id);
+ :
+ : if (!dev || dev == inputInfo.keyboard || dev == inputInfo.pointer)
+ : return BadImplementation;
+ :
+ : deviceid = dev->id;
+ : DisableDevice(dev);
+ :
+ : prev = NULL;
+ : for (tmp = inputInfo.devices; tmp; (prev = tmp), (tmp = next)) {
+ : next = tmp->next;
+ : if (tmp == dev) {
+ : CloseDevice(tmp);
+ :
+ : if (prev==NULL)
+ : inputInfo.devices = next;
+ : else
+ : prev->next = next;
+ :
+ : ret = Success;
+ : }
+ : }
+ :
+ : prev = NULL;
+ : for (tmp = inputInfo.off_devices; tmp; (prev = tmp), (tmp = next)) {
+ : next = tmp->next;
+ : if (tmp == dev) {
+ : CloseDevice(tmp);
+ :
+ : if (prev == NULL)
+ : inputInfo.off_devices = next;
+ : else
+ : prev->next = next;
+ :
+ : ret = Success;
+ : }
+ : }
+ :
+ : if (ret == Success) {
+ : inputInfo.numDevices--;
+ : ev.type = DevicePresenceNotify;
+ : ev.time = currentTime.milliseconds;
+ : ev.devchange = DeviceRemoved;
+ : ev.deviceid = deviceid;
+ : dummyDev.id = 0;
+ : SendEventToAllWindows(&dummyDev, DevicePresenceNotifyMask,
+ : (xEvent *) &ev, 1);
+ : }
+ :
+ : return ret;
+ :}
+ :
+ :int
+ :NumMotionEvents(void)
+ :{
+ : return inputInfo.pointer->valuator->numMotionEvents;
+ :}
+ :
+ :void
+ :RegisterPointerDevice(DeviceIntPtr device)
+ :{
+ : RegisterOtherDevice(device);
+ :}
+ :
+ :void
+ :RegisterKeyboardDevice(DeviceIntPtr device)
+ :{
+ : RegisterOtherDevice(device);
+ :}
+ :
+ :_X_EXPORT DevicePtr
+ :LookupKeyboardDevice(void)
+ :{
+ : return inputInfo.keyboard ? &inputInfo.keyboard->public : NULL;
+ :}
+ :
+ :_X_EXPORT DevicePtr
+ :LookupPointerDevice(void)
+ :{
+ : return inputInfo.pointer ? &inputInfo.pointer->public : NULL;
+ :}
+ :
+ :DevicePtr
+ :LookupDevice(int id)
+ :{
+ : DeviceIntPtr dev;
+ :
+ : for (dev=inputInfo.devices; dev; dev=dev->next) {
+ : if (dev->id == (CARD8)id)
+ : return (DevicePtr)dev;
+ : }
+ : for (dev=inputInfo.off_devices; dev; dev=dev->next) {
+ : if (dev->id == (CARD8)id)
+ : return (DevicePtr)dev;
+ : }
+ : return NULL;
+ :}
+ :
+ :void
+ :QueryMinMaxKeyCodes(KeyCode *minCode, KeyCode *maxCode)
+ :{
+ : if (inputInfo.keyboard) {
+ : *minCode = inputInfo.keyboard->key->curKeySyms.minKeyCode;
+ : *maxCode = inputInfo.keyboard->key->curKeySyms.maxKeyCode;
+ : }
+ :}
+ :
+ :Bool
+ :SetKeySymsMap(KeySymsPtr dst, KeySymsPtr src)
+ :{
+ : int i, j;
+ : int rowDif = src->minKeyCode - dst->minKeyCode;
+ :
+ : /* if keysym map size changes, grow map first */
+ : if (src->mapWidth < dst->mapWidth)
+ : {
+ : for (i = src->minKeyCode; i <= src->maxKeyCode; i++)
+ : {
+ :#define SI(r, c) (((r-src->minKeyCode)*src->mapWidth) + (c))
+ :#define DI(r, c) (((r - dst->minKeyCode)*dst->mapWidth) + (c))
+ : for (j = 0; j < src->mapWidth; j++)
+ : dst->map[DI(i, j)] = src->map[SI(i, j)];
+ : for (j = src->mapWidth; j < dst->mapWidth; j++)
+ : dst->map[DI(i, j)] = NoSymbol;
+ :#undef SI
+ :#undef DI
+ : }
+ : return TRUE;
+ : }
+ : else if (src->mapWidth > dst->mapWidth)
+ : {
+ : KeySym *map;
+ : int bytes = sizeof(KeySym) * src->mapWidth *
+ : (dst->maxKeyCode - dst->minKeyCode + 1);
+ : map = (KeySym *)xalloc(bytes);
+ : if (!map)
+ : return FALSE;
+ : bzero((char *)map, bytes);
+ : if (dst->map)
+ : {
+ : for (i = 0; i <= dst->maxKeyCode-dst->minKeyCode; i++)
+ : memmove((char *)&map[i*src->mapWidth],
+ : (char *)&dst->map[i*dst->mapWidth],
+ : dst->mapWidth * sizeof(KeySym));
+ : xfree(dst->map);
+ : }
+ : dst->mapWidth = src->mapWidth;
+ : dst->map = map;
+ : }
+ : memmove((char *)&dst->map[rowDif * dst->mapWidth],
+ : (char *)src->map,
+ : (int)(src->maxKeyCode - src->minKeyCode + 1) *
+ : dst->mapWidth * sizeof(KeySym));
+ : return TRUE;
+ :}
+ :
+ :static Bool
+ :InitModMap(KeyClassPtr keyc)
+ :{
+ : int i, j;
+ : CARD8 keysPerModifier[8];
+ : CARD8 mask;
+ :
+ : keyc->maxKeysPerModifier = 0;
+ : for (i = 0; i < 8; i++)
+ : keysPerModifier[i] = 0;
+ : for (i = 8; i < MAP_LENGTH; i++)
+ : {
+ : for (j = 0, mask = 1; j < 8; j++, mask <<= 1)
+ : {
+ : if (mask & keyc->modifierMap[i])
+ : {
+ : if (++keysPerModifier[j] > keyc->maxKeysPerModifier)
+ : keyc->maxKeysPerModifier = keysPerModifier[j];
+ : }
+ : }
+ : }
+ : keyc->modifierKeyMap = (KeyCode *)xalloc(8*keyc->maxKeysPerModifier);
+ : if (!keyc->modifierKeyMap && keyc->maxKeysPerModifier)
+ : return (FALSE);
+ : bzero((char *)keyc->modifierKeyMap, 8*(int)keyc->maxKeysPerModifier);
+ : for (i = 0; i < 8; i++)
+ : keysPerModifier[i] = 0;
+ : for (i = 8; i < MAP_LENGTH; i++)
+ : {
+ : for (j = 0, mask = 1; j < 8; j++, mask <<= 1)
+ : {
+ : if (mask & keyc->modifierMap[i])
+ : {
+ : keyc->modifierKeyMap[(j*keyc->maxKeysPerModifier) +
+ : keysPerModifier[j]] = i;
+ : keysPerModifier[j]++;
+ : }
+ : }
+ : }
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitKeyClassDeviceStruct(DeviceIntPtr dev, KeySymsPtr pKeySyms, CARD8 pModifiers[])
+ :{
+ : int i;
+ : KeyClassPtr keyc;
+ :
+ : keyc = (KeyClassPtr)xalloc(sizeof(KeyClassRec));
+ : if (!keyc)
+ : return FALSE;
+ : keyc->curKeySyms.map = (KeySym *)NULL;
+ : keyc->curKeySyms.mapWidth = 0;
+ : keyc->curKeySyms.minKeyCode = pKeySyms->minKeyCode;
+ : keyc->curKeySyms.maxKeyCode = pKeySyms->maxKeyCode;
+ : keyc->modifierKeyMap = (KeyCode *)NULL;
+ : keyc->state = 0;
+ : keyc->prev_state = 0;
+ : if (pModifiers)
+ : memmove((char *)keyc->modifierMap, (char *)pModifiers, MAP_LENGTH);
+ : else
+ : bzero((char *)keyc->modifierMap, MAP_LENGTH);
+ : bzero((char *)keyc->down, DOWN_LENGTH);
+ : for (i = 0; i < 8; i++)
+ : keyc->modifierKeyCount[i] = 0;
+ : if (!SetKeySymsMap(&keyc->curKeySyms, pKeySyms) || !InitModMap(keyc))
+ : {
+ : xfree(keyc->curKeySyms.map);
+ : xfree(keyc->modifierKeyMap);
+ : xfree(keyc);
+ : return FALSE;
+ : }
+ : dev->key = keyc;
+ :#ifdef XKB
+ : dev->key->xkbInfo= NULL;
+ : if (!noXkbExtension) XkbInitDevice(dev);
+ :#endif
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons,
+ : CARD8 *map)
+ :{
+ : ButtonClassPtr butc;
+ : int i;
+ :
+ : butc = (ButtonClassPtr)xalloc(sizeof(ButtonClassRec));
+ : if (!butc)
+ : return FALSE;
+ : butc->numButtons = numButtons;
+ : for (i = 1; i <= numButtons; i++)
+ : butc->map[i] = map[i];
+ : butc->buttonsDown = 0;
+ : butc->state = 0;
+ : butc->motionMask = 0;
+ : bzero((char *)butc->down, DOWN_LENGTH);
+ :#ifdef XKB
+ : butc->xkb_acts= NULL;
+ :#endif
+ : dev->button = butc;
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes,
+ : ValuatorMotionProcPtr motionProc,
+ : int numMotionEvents, int mode)
+ :{
+ : int i;
+ : ValuatorClassPtr valc;
+ :
+ : if (!dev)
+ : return FALSE;
+ :
+ : valc = (ValuatorClassPtr)xalloc(sizeof(ValuatorClassRec) +
+ : numAxes * sizeof(AxisInfo) +
+ : numAxes * sizeof(unsigned int));
+ : if (!valc)
+ : return FALSE;
+ :
+ : valc->motion = NULL;
+ : valc->first_motion = 0;
+ : valc->last_motion = 0;
+ : valc->GetMotionProc = motionProc;
+ :
+ : valc->numMotionEvents = numMotionEvents;
+ : valc->motionHintWindow = NullWindow;
+ : valc->numAxes = numAxes;
+ : valc->mode = mode;
+ : valc->axes = (AxisInfoPtr)(valc + 1);
+ : valc->axisVal = (int *)(valc->axes + numAxes);
+ : valc->lastx = 0;
+ : valc->lasty = 0;
+ : valc->dxremaind = 0;
+ : valc->dyremaind = 0;
+ : dev->valuator = valc;
+ :
+ : /* biggest hack ever. */
+ : if (motionProc == GetMotionHistory)
+ : AllocateMotionHistory(dev);
+ :
+ : for (i=0; i<numAxes; i++) {
+ : InitValuatorAxisStruct(dev, i, 0, -1, 0, 0, 0);
+ : valc->axisVal[i]=0;
+ : }
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitAbsoluteClassDeviceStruct(DeviceIntPtr dev)
+ :{
+ : AbsoluteClassPtr abs;
+ :
+ : abs = (AbsoluteClassPtr)xalloc(sizeof(AbsoluteClassRec));
+ : if (!abs)
+ : return FALSE;
+ :
+ : /* we don't do anything sensible with these, but should */
+ : abs->min_x = -1;
+ : abs->min_y = -1;
+ : abs->max_x = -1;
+ : abs->max_y = -1;
+ : abs->flip_x = 0;
+ : abs->flip_y = 0;
+ : abs->rotation = 0;
+ : abs->button_threshold = 0;
+ :
+ : abs->offset_x = 0;
+ : abs->offset_y = 0;
+ : abs->width = -1;
+ : abs->height = -1;
+ : abs->following = 0;
+ : abs->screen = 0;
+ :
+ : dev->absolute = abs;
+ :
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitFocusClassDeviceStruct(DeviceIntPtr dev)
+ :{
+ : FocusClassPtr focc;
+ :
+ : focc = (FocusClassPtr)xalloc(sizeof(FocusClassRec));
+ : if (!focc)
+ : return FALSE;
+ : focc->win = PointerRootWin;
+ : focc->revert = None;
+ : focc->time = currentTime;
+ : focc->trace = (WindowPtr *)NULL;
+ : focc->traceSize = 0;
+ : focc->traceGood = 0;
+ : dev->focus = focc;
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitKbdFeedbackClassDeviceStruct(DeviceIntPtr dev, BellProcPtr bellProc,
+ : KbdCtrlProcPtr controlProc)
+ :{
+ : KbdFeedbackPtr feedc;
+ :
+ : feedc = (KbdFeedbackPtr)xalloc(sizeof(KbdFeedbackClassRec));
+ : if (!feedc)
+ : return FALSE;
+ : feedc->BellProc = bellProc;
+ : feedc->CtrlProc = controlProc;
+ :#ifdef XKB
+ : defaultKeyboardControl.autoRepeat = TRUE;
+ :#endif
+ : feedc->ctrl = defaultKeyboardControl;
+ : feedc->ctrl.id = 0;
+ : if ((feedc->next = dev->kbdfeed) != 0)
+ : feedc->ctrl.id = dev->kbdfeed->ctrl.id + 1;
+ : dev->kbdfeed = feedc;
+ :#ifdef XKB
+ : feedc->xkb_sli= NULL;
+ : if (!noXkbExtension)
+ : XkbFinishDeviceInit(dev);
+ :#endif
+ : (*dev->kbdfeed->CtrlProc)(dev,&dev->kbdfeed->ctrl);
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc)
+ :{
+ : PtrFeedbackPtr feedc;
+ :
+ : feedc = (PtrFeedbackPtr)xalloc(sizeof(PtrFeedbackClassRec));
+ : if (!feedc)
+ : return FALSE;
+ : feedc->CtrlProc = controlProc;
+ : feedc->ctrl = defaultPointerControl;
+ : feedc->ctrl.id = 0;
+ : if ( (feedc->next = dev->ptrfeed) )
+ : feedc->ctrl.id = dev->ptrfeed->ctrl.id + 1;
+ : dev->ptrfeed = feedc;
+ : (*controlProc)(dev, &feedc->ctrl);
+ : return TRUE;
+ :}
+ :
+ :
+ :static LedCtrl defaultLedControl = {
+ : DEFAULT_LEDS, DEFAULT_LEDS_MASK, 0};
+ :
+ :static BellCtrl defaultBellControl = {
+ : DEFAULT_BELL,
+ : DEFAULT_BELL_PITCH,
+ : DEFAULT_BELL_DURATION,
+ : 0};
+ :
+ :static IntegerCtrl defaultIntegerControl = {
+ : DEFAULT_INT_RESOLUTION,
+ : DEFAULT_INT_MIN_VALUE,
+ : DEFAULT_INT_MAX_VALUE,
+ : DEFAULT_INT_DISPLAYED,
+ : 0};
+ :
+ :_X_EXPORT Bool
+ :InitStringFeedbackClassDeviceStruct (
+ : DeviceIntPtr dev, StringCtrlProcPtr controlProc,
+ : int max_symbols, int num_symbols_supported, KeySym *symbols)
+ :{
+ : int i;
+ : StringFeedbackPtr feedc;
+ :
+ : feedc = (StringFeedbackPtr)xalloc(sizeof(StringFeedbackClassRec));
+ : if (!feedc)
+ : return FALSE;
+ : feedc->CtrlProc = controlProc;
+ : feedc->ctrl.num_symbols_supported = num_symbols_supported;
+ : feedc->ctrl.num_symbols_displayed = 0;
+ : feedc->ctrl.max_symbols = max_symbols;
+ : feedc->ctrl.symbols_supported = (KeySym *)
+ : xalloc (sizeof (KeySym) * num_symbols_supported);
+ : feedc->ctrl.symbols_displayed = (KeySym *)
+ : xalloc (sizeof (KeySym) * max_symbols);
+ : if (!feedc->ctrl.symbols_supported || !feedc->ctrl.symbols_displayed)
+ : {
+ : if (feedc->ctrl.symbols_supported)
+ : xfree(feedc->ctrl.symbols_supported);
+ : if (feedc->ctrl.symbols_displayed)
+ : xfree(feedc->ctrl.symbols_displayed);
+ : xfree(feedc);
+ : return FALSE;
+ : }
+ : for (i=0; i<num_symbols_supported; i++)
+ : *(feedc->ctrl.symbols_supported+i) = *symbols++;
+ : for (i=0; i<max_symbols; i++)
+ : *(feedc->ctrl.symbols_displayed+i) = (KeySym) NULL;
+ : feedc->ctrl.id = 0;
+ : if ( (feedc->next = dev->stringfeed) )
+ : feedc->ctrl.id = dev->stringfeed->ctrl.id + 1;
+ : dev->stringfeed = feedc;
+ : (*controlProc)(dev, &feedc->ctrl);
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitBellFeedbackClassDeviceStruct (DeviceIntPtr dev, BellProcPtr bellProc,
+ : BellCtrlProcPtr controlProc)
+ :{
+ : BellFeedbackPtr feedc;
+ :
+ : feedc = (BellFeedbackPtr)xalloc(sizeof(BellFeedbackClassRec));
+ : if (!feedc)
+ : return FALSE;
+ : feedc->CtrlProc = controlProc;
+ : feedc->BellProc = bellProc;
+ : feedc->ctrl = defaultBellControl;
+ : feedc->ctrl.id = 0;
+ : if ( (feedc->next = dev->bell) )
+ : feedc->ctrl.id = dev->bell->ctrl.id + 1;
+ : dev->bell = feedc;
+ : (*controlProc)(dev, &feedc->ctrl);
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitLedFeedbackClassDeviceStruct (DeviceIntPtr dev, LedCtrlProcPtr controlProc)
+ :{
+ : LedFeedbackPtr feedc;
+ :
+ : feedc = (LedFeedbackPtr)xalloc(sizeof(LedFeedbackClassRec));
+ : if (!feedc)
+ : return FALSE;
+ : feedc->CtrlProc = controlProc;
+ : feedc->ctrl = defaultLedControl;
+ : feedc->ctrl.id = 0;
+ : if ( (feedc->next = dev->leds) )
+ : feedc->ctrl.id = dev->leds->ctrl.id + 1;
+ :#ifdef XKB
+ : feedc->xkb_sli= NULL;
+ :#endif
+ : dev->leds = feedc;
+ : (*controlProc)(dev, &feedc->ctrl);
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitIntegerFeedbackClassDeviceStruct (DeviceIntPtr dev, IntegerCtrlProcPtr controlProc)
+ :{
+ : IntegerFeedbackPtr feedc;
+ :
+ : feedc = (IntegerFeedbackPtr)xalloc(sizeof(IntegerFeedbackClassRec));
+ : if (!feedc)
+ : return FALSE;
+ : feedc->CtrlProc = controlProc;
+ : feedc->ctrl = defaultIntegerControl;
+ : feedc->ctrl.id = 0;
+ : if ( (feedc->next = dev->intfeed) )
+ : feedc->ctrl.id = dev->intfeed->ctrl.id + 1;
+ : dev->intfeed = feedc;
+ : (*controlProc)(dev, &feedc->ctrl);
+ : return TRUE;
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitPointerDeviceStruct(DevicePtr device, CARD8 *map, int numButtons,
+ : ValuatorMotionProcPtr motionProc,
+ : PtrCtrlProcPtr controlProc, int numMotionEvents,
+ : int numAxes)
+ :{
+ : DeviceIntPtr dev = (DeviceIntPtr)device;
+ :
+ : return(InitButtonClassDeviceStruct(dev, numButtons, map) &&
+ : InitValuatorClassDeviceStruct(dev, numAxes, motionProc,
+ : numMotionEvents, 0) &&
+ : InitPtrFeedbackClassDeviceStruct(dev, controlProc));
+ :}
+ :
+ :_X_EXPORT Bool
+ :InitKeyboardDeviceStruct(DevicePtr device, KeySymsPtr pKeySyms,
+ : CARD8 pModifiers[], BellProcPtr bellProc,
+ : KbdCtrlProcPtr controlProc)
+ :{
+ : DeviceIntPtr dev = (DeviceIntPtr)device;
+ :
+ : return(InitKeyClassDeviceStruct(dev, pKeySyms, pModifiers) &&
+ : InitFocusClassDeviceStruct(dev) &&
+ : InitKbdFeedbackClassDeviceStruct(dev, bellProc, controlProc));
+ :}
+ :
+ :_X_EXPORT void
+ :SendMappingNotify(unsigned request, unsigned firstKeyCode, unsigned count,
+ : ClientPtr client)
+ :{
+ : int i;
+ : xEvent event;
+ :
+ : event.u.u.type = MappingNotify;
+ : event.u.mappingNotify.request = request;
+ : if (request == MappingKeyboard)
+ : {
+ : event.u.mappingNotify.firstKeyCode = firstKeyCode;
+ : event.u.mappingNotify.count = count;
+ : }
+ :#ifdef XKB
+ : if (!noXkbExtension &&
+ : ((request == MappingKeyboard) || (request == MappingModifier))) {
+ : XkbApplyMappingChange(inputInfo.keyboard,request,firstKeyCode,count,
+ : client);
+ : }
+ :#endif
+ :
+ : /* 0 is the server client */
+ : for (i=1; i<currentMaxClients; i++)
+ : {
+ : if (clients[i] && clients[i]->clientState == ClientStateRunning)
+ : {
+ :#ifdef XKB
+ : if (!noXkbExtension &&
+ : (request == MappingKeyboard) &&
+ : (clients[i]->xkbClientFlags != 0) &&
+ : (clients[i]->mapNotifyMask&XkbKeySymsMask))
+ : continue;
+ :#endif
+ : event.u.u.sequenceNumber = clients[i]->sequence;
+ : WriteEventsToClient(clients[i], 1, &event);
+ : }
+ : }
+ :}
+ :
+ :/*
+ : * n-squared algorithm. n < 255 and don't want to copy the whole thing and
+ : * sort it to do the checking. How often is it called? Just being lazy?
+ : */
+ :Bool
+ :BadDeviceMap(BYTE *buff, int length, unsigned low, unsigned high, XID *errval)
+ :{
+ : int i, j;
+ :
+ : for (i = 0; i < length; i++)
+ : if (buff[i]) /* only check non-zero elements */
+ : {
+ : if ((low > buff[i]) || (high < buff[i]))
+ : {
+ : *errval = buff[i];
+ : return TRUE;
+ : }
+ : for (j = i + 1; j < length; j++)
+ : if (buff[i] == buff[j])
+ : {
+ : *errval = buff[i];
+ : return TRUE;
+ : }
+ : }
+ : return FALSE;
+ :}
+ :
+ :Bool
+ :AllModifierKeysAreUp(dev, map1, per1, map2, per2)
+ : DeviceIntPtr dev;
+ : CARD8 *map1, *map2;
+ : int per1, per2;
+ :{
+ : int i, j, k;
+ : CARD8 *down = dev->key->down;
+ :
+ : for (i = 8; --i >= 0; map2 += per2)
+ : {
+ : for (j = per1; --j >= 0; map1++)
+ : {
+ : if (*map1 && BitIsOn(down, *map1))
+ : {
+ : for (k = per2; (--k >= 0) && (*map1 != map2[k]);)
+ : ;
+ : if (k < 0)
+ : return FALSE;
+ : }
+ : }
+ : }
+ : return TRUE;
+ :}
+ :
+ :static int
+ :DoSetModifierMapping(ClientPtr client, KeyCode *inputMap,
+ : int numKeyPerModifier)
+ :{
+ : DeviceIntPtr pDev = NULL;
+ : int i = 0, inputMapLen = numKeyPerModifier * 8;
+ :
+ : for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
+ : if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) {
+ : for (i = 0; i < inputMapLen; i++) {
+ : /* Check that all the new modifiers fall within the advertised
+ : * keycode range, and are okay with the DDX. */
+ : if (inputMap[i] && ((inputMap[i] < pDev->key->curKeySyms.minKeyCode ||
+ : inputMap[i] > pDev->key->curKeySyms.maxKeyCode) ||
+ : !LegalModifier(inputMap[i], pDev))) {
+ : client->errorValue = inputMap[i];
+ : return BadValue;
+ : }
+ : }
+ :
+ : if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
+ : return BadAccess;
+ :
+ : /* None of the modifiers (old or new) may be down while we change
+ : * the map. */
+ : if (!AllModifierKeysAreUp(pDev, pDev->key->modifierKeyMap,
+ : pDev->key->maxKeysPerModifier,
+ : inputMap, numKeyPerModifier) ||
+ : !AllModifierKeysAreUp(pDev, inputMap, numKeyPerModifier,
+ : pDev->key->modifierKeyMap,
+ : pDev->key->maxKeysPerModifier)) {
+ : return MappingBusy;
+ : }
+ : }
+ : }
+ :
+ : for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
+ :
+ : if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) {
+ : bzero(pDev->key->modifierMap, MAP_LENGTH);
+ :
+ : /* Annoyingly, we lack a modifierKeyMap size, so we have to just free
+ : * and re-alloc it every time. */
+ : if (pDev->key->modifierKeyMap)
+ : xfree(pDev->key->modifierKeyMap);
+ :
+ : if (inputMapLen) {
+ : pDev->key->modifierKeyMap = (KeyCode *) xalloc(inputMapLen);
+ : if (!pDev->key->modifierKeyMap)
+ : return BadAlloc;
+ :
+ : memcpy(pDev->key->modifierKeyMap, inputMap, inputMapLen);
+ : pDev->key->maxKeysPerModifier = numKeyPerModifier;
+ :
+ : for (i = 0; i < inputMapLen; i++) {
+ : if (inputMap[i]) {
+ : pDev->key->modifierMap[inputMap[i]] |=
+ : (1 << (((unsigned int)i) / numKeyPerModifier));
+ : }
+ : }
+ : }
+ : else {
+ : pDev->key->modifierKeyMap = NULL;
+ : pDev->key->maxKeysPerModifier = 0;
+ : }
+ : }
+ : }
+ :
+ : return Success;
+ :}
+ :
+ :int
+ :ProcSetModifierMapping(ClientPtr client)
+ :{
+ : xSetModifierMappingReply rep;
+ : REQUEST(xSetModifierMappingReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xSetModifierMappingReq);
+ :
+ : if (client->req_len != ((stuff->numKeyPerModifier << 1) +
+ : (sizeof (xSetModifierMappingReq) >> 2)))
+ : return BadLength;
+ :
+ : rep.type = X_Reply;
+ : rep.length = 0;
+ : rep.sequenceNumber = client->sequence;
+ :
+ : rep.success = DoSetModifierMapping(client, (KeyCode *)&stuff[1],
+ : stuff->numKeyPerModifier);
+ :
+ : /* FIXME: Send mapping notifies for all the extended devices as well. */
+ : SendMappingNotify(MappingModifier, 0, 0, client);
+ : WriteReplyToClient(client, sizeof(xSetModifierMappingReply), &rep);
+ : return client->noClientException;
+ :}
+ :
+ :int
+ :ProcGetModifierMapping(ClientPtr client)
+ :{
+ : xGetModifierMappingReply rep;
+ : KeyClassPtr keyc = inputInfo.keyboard->key;
+ :
+ : REQUEST_SIZE_MATCH(xReq);
+ : rep.type = X_Reply;
+ : rep.numKeyPerModifier = keyc->maxKeysPerModifier;
+ : rep.sequenceNumber = client->sequence;
+ : /* length counts 4 byte quantities - there are 8 modifiers 1 byte big */
+ : rep.length = keyc->maxKeysPerModifier << 1;
+ :
+ : WriteReplyToClient(client, sizeof(xGetModifierMappingReply), &rep);
+ :
+ : /* Use the (modified by DDX) map that SetModifierMapping passed in */
+ : (void)WriteToClient(client, (int)(keyc->maxKeysPerModifier << 3),
+ : (char *)keyc->modifierKeyMap);
+ : return client->noClientException;
+ :}
+ :
+ :int
+ :ProcChangeKeyboardMapping(ClientPtr client)
+ :{
+ : REQUEST(xChangeKeyboardMappingReq);
+ : unsigned len;
+ : KeySymsRec keysyms;
+ : KeySymsPtr curKeySyms = &inputInfo.keyboard->key->curKeySyms;
+ : DeviceIntPtr pDev = NULL;
+ : REQUEST_AT_LEAST_SIZE(xChangeKeyboardMappingReq);
+ :
+ : len = client->req_len - (sizeof(xChangeKeyboardMappingReq) >> 2);
+ : if (len != (stuff->keyCodes * stuff->keySymsPerKeyCode))
+ : return BadLength;
+ :
+ : if ((stuff->firstKeyCode < curKeySyms->minKeyCode) ||
+ : (stuff->firstKeyCode > curKeySyms->maxKeyCode)) {
+ : client->errorValue = stuff->firstKeyCode;
+ : return BadValue;
+ :
+ : }
+ : if (((unsigned)(stuff->firstKeyCode + stuff->keyCodes - 1) >
+ : curKeySyms->maxKeyCode) || (stuff->keySymsPerKeyCode == 0)) {
+ : client->errorValue = stuff->keySymsPerKeyCode;
+ : return BadValue;
+ : }
+ :
+ : for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
+ : if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) {
+ : if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
+ : return BadAccess;
+ : }
+ : }
+ :
+ : keysyms.minKeyCode = stuff->firstKeyCode;
+ : keysyms.maxKeyCode = stuff->firstKeyCode + stuff->keyCodes - 1;
+ : keysyms.mapWidth = stuff->keySymsPerKeyCode;
+ : keysyms.map = (KeySym *)&stuff[1];
+ : for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
+ : if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) {
+ : if (!SetKeySymsMap(&pDev->key->curKeySyms, &keysyms))
+ : return BadAlloc;
+ : }
+ : }
+ :
+ : /* FIXME: Send mapping notifies for all the extended devices as well. */
+ : SendMappingNotify(MappingKeyboard, stuff->firstKeyCode, stuff->keyCodes,
+ : client);
+ : return client->noClientException;
+ :}
+ :
+ :static int
+ :DoSetPointerMapping(DeviceIntPtr device, BYTE *map, int n)
+ :{
+ : int i = 0;
+ : DeviceIntPtr dev = NULL;
+ :
+ : if (!device || !device->button)
+ : return BadDevice;
+ :
+ : for (dev = inputInfo.devices; dev; dev = dev->next) {
+ : if ((dev->coreEvents || dev == inputInfo.pointer) && dev->button) {
+ : for (i = 0; i < n; i++) {
+ : if ((device->button->map[i + 1] != map[i]) &&
+ : BitIsOn(device->button->down, i + 1)) {
+ : return MappingBusy;
+ : }
+ : }
+ : }
+ : }
+ :
+ : for (dev = inputInfo.devices; dev; dev = dev->next) {
+ : if ((dev->coreEvents || dev == inputInfo.pointer) && dev->button) {
+ : for (i = 0; i < n; i++)
+ : dev->button->map[i + 1] = map[i];
+ : }
+ : }
+ :
+ : return Success;
+ :}
+ :
+ :int
+ :ProcSetPointerMapping(ClientPtr client)
+ :{
+ : REQUEST(xSetPointerMappingReq);
+ : BYTE *map;
+ : int ret;
+ : xSetPointerMappingReply rep;
+ :
+ : REQUEST_AT_LEAST_SIZE(xSetPointerMappingReq);
+ : if (client->req_len != (sizeof(xSetPointerMappingReq)+stuff->nElts+3) >> 2)
+ : return BadLength;
+ : rep.type = X_Reply;
+ : rep.length = 0;
+ : rep.sequenceNumber = client->sequence;
+ : rep.success = MappingSuccess;
+ : map = (BYTE *)&stuff[1];
+ :
+ : /* So we're bounded here by the number of core buttons. This check
+ : * probably wants disabling through XFixes. */
+ : if (stuff->nElts != inputInfo.pointer->button->numButtons) {
+ : client->errorValue = stuff->nElts;
+ : return BadValue;
+ : }
+ : if (BadDeviceMap(&map[0], (int)stuff->nElts, 1, 255, &client->errorValue))
+ : return BadValue;
+ :
+ : ret = DoSetPointerMapping(inputInfo.pointer, map, stuff->nElts);
+ : if (ret != Success) {
+ : rep.success = ret;
+ : WriteReplyToClient(client, sizeof(xSetPointerMappingReply), &rep);
+ : return Success;
+ : }
+ :
+ : /* FIXME: Send mapping notifies for all the extended devices as well. */
+ : SendMappingNotify(MappingPointer, 0, 0, client);
+ : WriteReplyToClient(client, sizeof(xSetPointerMappingReply), &rep);
+ : return Success;
+ :}
+ :
+ :int
+ :ProcGetKeyboardMapping(ClientPtr client)
+ :{
+ : xGetKeyboardMappingReply rep;
+ : REQUEST(xGetKeyboardMappingReq);
+ : KeySymsPtr curKeySyms = &inputInfo.keyboard->key->curKeySyms;
+ :
+ : REQUEST_SIZE_MATCH(xGetKeyboardMappingReq);
+ :
+ : if ((stuff->firstKeyCode < curKeySyms->minKeyCode) ||
+ : (stuff->firstKeyCode > curKeySyms->maxKeyCode)) {
+ : client->errorValue = stuff->firstKeyCode;
+ : return BadValue;
+ : }
+ : if (stuff->firstKeyCode + stuff->count >
+ : (unsigned)(curKeySyms->maxKeyCode + 1)) {
+ : client->errorValue = stuff->count;
+ : return BadValue;
+ : }
+ :
+ : rep.type = X_Reply;
+ : rep.sequenceNumber = client->sequence;
+ : rep.keySymsPerKeyCode = curKeySyms->mapWidth;
+ : /* length is a count of 4 byte quantities and KeySyms are 4 bytes */
+ : rep.length = (curKeySyms->mapWidth * stuff->count);
+ : WriteReplyToClient(client, sizeof(xGetKeyboardMappingReply), &rep);
+ : client->pSwapReplyFunc = (ReplySwapPtr) CopySwap32Write;
+ : WriteSwappedDataToClient(
+ : client,
+ : curKeySyms->mapWidth * stuff->count * sizeof(KeySym),
+ : &curKeySyms->map[(stuff->firstKeyCode - curKeySyms->minKeyCode) *
+ : curKeySyms->mapWidth]);
+ :
+ : return client->noClientException;
+ :}
+ :
+ :int
+ :ProcGetPointerMapping(ClientPtr client)
+ :{
+ : xGetPointerMappingReply rep;
+ : ButtonClassPtr butc = inputInfo.pointer->button;
+ :
+ : REQUEST_SIZE_MATCH(xReq);
+ : rep.type = X_Reply;
+ : rep.sequenceNumber = client->sequence;
+ : rep.nElts = butc->numButtons;
+ : rep.length = ((unsigned)rep.nElts + (4-1))/4;
+ : WriteReplyToClient(client, sizeof(xGetPointerMappingReply), &rep);
+ : (void)WriteToClient(client, (int)rep.nElts, (char *)&butc->map[1]);
+ : return Success;
+ :}
+ :
+ :void
+ :NoteLedState(DeviceIntPtr keybd, int led, Bool on)
+ :{
+ : KeybdCtrl *ctrl = &keybd->kbdfeed->ctrl;
+ : if (on)
+ : ctrl->leds |= ((Leds)1 << (led - 1));
+ : else
+ : ctrl->leds &= ~((Leds)1 << (led - 1));
+ :}
+ :
+ :_X_EXPORT int
+ :Ones(unsigned long mask) /* HACKMEM 169 */
+ 3 0.0033 :{ /* Ones total: 9 0.0098 */
+ : unsigned long y;
+ :
+ : y = (mask >> 1) &033333333333;
+ 4 0.0044 : y = mask - y - ((y >>1) & 033333333333);
+ : return (((y + (y >> 3)) & 030707070707) % 077);
+ 2 0.0022 :}
+ :
+ :static int
+ :DoChangeKeyboardControl (ClientPtr client, DeviceIntPtr keybd, XID *vlist,
+ : BITS32 vmask)
+ :{
+ :#define DO_ALL (-1)
+ : KeybdCtrl ctrl;
+ : int t;
+ : int led = DO_ALL;
+ : int key = DO_ALL;
+ : BITS32 index2;
+ : int mask = vmask, i;
+ :
+ : ctrl = keybd->kbdfeed->ctrl;
+ : while (vmask) {
+ : index2 = (BITS32) lowbit (vmask);
+ : vmask &= ~index2;
+ : switch (index2) {
+ : case KBKeyClickPercent:
+ : t = (INT8)*vlist;
+ : vlist++;
+ : if (t == -1) {
+ : t = defaultKeyboardControl.click;
+ : }
+ : else if (t < 0 || t > 100) {
+ : client->errorValue = t;
+ : return BadValue;
+ : }
+ : ctrl.click = t;
+ : break;
+ : case KBBellPercent:
+ : t = (INT8)*vlist;
+ : vlist++;
+ : if (t == -1) {
+ : t = defaultKeyboardControl.bell;
+ : }
+ : else if (t < 0 || t > 100) {
+ : client->errorValue = t;
+ : return BadValue;
+ : }
+ : ctrl.bell = t;
+ : break;
+ : case KBBellPitch:
+ : t = (INT16)*vlist;
+ : vlist++;
+ : if (t == -1) {
+ : t = defaultKeyboardControl.bell_pitch;
+ : }
+ : else if (t < 0) {
+ : client->errorValue = t;
+ : return BadValue;
+ : }
+ : ctrl.bell_pitch = t;
+ : break;
+ : case KBBellDuration:
+ : t = (INT16)*vlist;
+ : vlist++;
+ : if (t == -1)
+ : t = defaultKeyboardControl.bell_duration;
+ : else if (t < 0) {
+ : client->errorValue = t;
+ : return BadValue;
+ : }
+ : ctrl.bell_duration = t;
+ : break;
+ : case KBLed:
+ : led = (CARD8)*vlist;
+ : vlist++;
+ : if (led < 1 || led > 32) {
+ : client->errorValue = led;
+ : return BadValue;
+ : }
+ : if (!(mask & KBLedMode))
+ : return BadMatch;
+ : break;
+ : case KBLedMode:
+ : t = (CARD8)*vlist;
+ : vlist++;
+ : if (t == LedModeOff) {
+ : if (led == DO_ALL)
+ : ctrl.leds = 0x0;
+ : else
+ : ctrl.leds &= ~(((Leds)(1)) << (led - 1));
+ : }
+ : else if (t == LedModeOn) {
+ : if (led == DO_ALL)
+ : ctrl.leds = ~0L;
+ : else
+ : ctrl.leds |= (((Leds)(1)) << (led - 1));
+ : }
+ : else {
+ : client->errorValue = t;
+ : return BadValue;
+ : }
+ :#ifdef XKB
+ : if (!noXkbExtension) {
+ : XkbEventCauseRec cause;
+ : XkbSetCauseCoreReq(&cause,X_ChangeKeyboardControl,client);
+ : XkbSetIndicators(keybd,((led == DO_ALL) ? ~0L : (1L<<(led-1))),
+ : ctrl.leds, &cause);
+ : ctrl.leds = keybd->kbdfeed->ctrl.leds;
+ : }
+ :#endif
+ : break;
+ : case KBKey:
+ : key = (KeyCode)*vlist;
+ : vlist++;
+ : if ((KeyCode)key < inputInfo.keyboard->key->curKeySyms.minKeyCode ||
+ : (KeyCode)key > inputInfo.keyboard->key->curKeySyms.maxKeyCode) {
+ : client->errorValue = key;
+ : return BadValue;
+ : }
+ : if (!(mask & KBAutoRepeatMode))
+ : return BadMatch;
+ : break;
+ : case KBAutoRepeatMode:
+ : i = (key >> 3);
+ : mask = (1 << (key & 7));
+ : t = (CARD8)*vlist;
+ : vlist++;
+ :#ifdef XKB
+ : if (!noXkbExtension && key != DO_ALL)
+ : XkbDisableComputedAutoRepeats(keybd,key);
+ :#endif
+ : if (t == AutoRepeatModeOff) {
+ : if (key == DO_ALL)
+ : ctrl.autoRepeat = FALSE;
+ : else
+ : ctrl.autoRepeats[i] &= ~mask;
+ : }
+ : else if (t == AutoRepeatModeOn) {
+ : if (key == DO_ALL)
+ : ctrl.autoRepeat = TRUE;
+ : else
+ : ctrl.autoRepeats[i] |= mask;
+ : }
+ : else if (t == AutoRepeatModeDefault) {
+ : if (key == DO_ALL)
+ : ctrl.autoRepeat = defaultKeyboardControl.autoRepeat;
+ : else
+ : ctrl.autoRepeats[i] =
+ : (ctrl.autoRepeats[i] & ~mask) |
+ : (defaultKeyboardControl.autoRepeats[i] & mask);
+ : }
+ : else {
+ : client->errorValue = t;
+ : return BadValue;
+ : }
+ : break;
+ : default:
+ : client->errorValue = mask;
+ : return BadValue;
+ : }
+ : }
+ : keybd->kbdfeed->ctrl = ctrl;
+ :
+ :#ifdef XKB
+ : /* The XKB RepeatKeys control and core protocol global autorepeat */
+ : /* value are linked */
+ : if (!noXkbExtension)
+ : XkbSetRepeatKeys(keybd, key, keybd->kbdfeed->ctrl.autoRepeat);
+ : else
+ :#endif
+ : (*keybd->kbdfeed->CtrlProc)(keybd, &keybd->kbdfeed->ctrl);
+ :
+ : return Success;
+ :
+ :#undef DO_ALL
+ :}
+ :
+ :int
+ :ProcChangeKeyboardControl (ClientPtr client)
+ :{
+ : XID *vlist;
+ : BITS32 vmask;
+ : int ret = Success, error = Success;
+ : DeviceIntPtr pDev = NULL;
+ : REQUEST(xChangeKeyboardControlReq);
+ :
+ : REQUEST_AT_LEAST_SIZE(xChangeKeyboardControlReq);
+ :
+ : vmask = stuff->mask;
+ : vlist = (XID *)&stuff[1];
+ :
+ : if (client->req_len != (sizeof(xChangeKeyboardControlReq)>>2)+Ones(vmask))
+ : return BadLength;
+ :
+ : for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
+ : if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
+ : pDev->kbdfeed && pDev->kbdfeed->CtrlProc) {
+ : if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
+ : return BadAccess;
+ : }
+ : }
+ :
+ : for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
+ : if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
+ : pDev->kbdfeed && pDev->kbdfeed->CtrlProc) {
+ : ret = DoChangeKeyboardControl(client, pDev, vlist, vmask);
+ : if (ret != Success)
+ : error = ret;
+ : }
+ : }
+ :
+ : return error;
+ :}
+ :
+ :int
+ :ProcGetKeyboardControl (ClientPtr client)
+ :{
+ : int i;
+ : KeybdCtrl *ctrl = &inputInfo.keyboard->kbdfeed->ctrl;
+ : xGetKeyboardControlReply rep;
+ :
+ : REQUEST_SIZE_MATCH(xReq);
+ : rep.type = X_Reply;
+ : rep.length = 5;
+ : rep.sequenceNumber = client->sequence;
+ : rep.globalAutoRepeat = ctrl->autoRepeat;
+ : rep.keyClickPercent = ctrl->click;
+ : rep.bellPercent = ctrl->bell;
+ : rep.bellPitch = ctrl->bell_pitch;
+ : rep.bellDuration = ctrl->bell_duration;
+ : rep.ledMask = ctrl->leds;
+ : for (i = 0; i < 32; i++)
+ : rep.map[i] = ctrl->autoRepeats[i];
+ : WriteReplyToClient(client, sizeof(xGetKeyboardControlReply), &rep);
+ : return Success;
+ :}
+ :
+ :int
+ :ProcBell(ClientPtr client)
+ :{
+ : DeviceIntPtr keybd = inputInfo.keyboard;
+ : int base = keybd->kbdfeed->ctrl.bell;
+ : int newpercent;
+ : REQUEST(xBellReq);
+ : REQUEST_SIZE_MATCH(xBellReq);
+ :
+ : if (!keybd->kbdfeed->BellProc)
+ : return BadDevice;
+ :
+ : if (stuff->percent < -100 || stuff->percent > 100) {
+ : client->errorValue = stuff->percent;
+ : return BadValue;
+ : }
+ :
+ : newpercent = (base * stuff->percent) / 100;
+ : if (stuff->percent < 0)
+ : newpercent = base + newpercent;
+ : else
+ : newpercent = base - newpercent + stuff->percent;
+ :
+ : for (keybd = inputInfo.devices; keybd; keybd = keybd->next) {
+ : if ((keybd->coreEvents || keybd == inputInfo.keyboard) &&
+ : keybd->kbdfeed && keybd->kbdfeed->BellProc) {
+ :#ifdef XKB
+ : if (!noXkbExtension)
+ : XkbHandleBell(FALSE, FALSE, keybd, newpercent,
+ : &keybd->kbdfeed->ctrl, 0, None, NULL, client);
+ : else
+ :#endif
+ : (*keybd->kbdfeed->BellProc)(newpercent, keybd,
+ : &keybd->kbdfeed->ctrl, 0);
+ : }
+ : }
+ :
+ : return Success;
+ :}
+ :
+ :int
+ :ProcChangePointerControl(ClientPtr client)
+ :{
+ : DeviceIntPtr mouse = inputInfo.pointer;
+ : PtrCtrl ctrl; /* might get BadValue part way through */
+ : REQUEST(xChangePointerControlReq);
+ :
+ : REQUEST_SIZE_MATCH(xChangePointerControlReq);
+ :
+ : if (!mouse->ptrfeed->CtrlProc)
+ : return BadDevice;
+ :
+ : ctrl = mouse->ptrfeed->ctrl;
+ : if ((stuff->doAccel != xTrue) && (stuff->doAccel != xFalse)) {
+ : client->errorValue = stuff->doAccel;
+ : return(BadValue);
+ : }
+ : if ((stuff->doThresh != xTrue) && (stuff->doThresh != xFalse)) {
+ : client->errorValue = stuff->doThresh;
+ : return(BadValue);
+ : }
+ : if (stuff->doAccel) {
+ : if (stuff->accelNum == -1) {
+ : ctrl.num = defaultPointerControl.num;
+ : }
+ : else if (stuff->accelNum < 0) {
+ : client->errorValue = stuff->accelNum;
+ : return BadValue;
+ : }
+ : else {
+ : ctrl.num = stuff->accelNum;
+ : }
+ :
+ : if (stuff->accelDenum == -1) {
+ : ctrl.den = defaultPointerControl.den;
+ : }
+ : else if (stuff->accelDenum <= 0) {
+ : client->errorValue = stuff->accelDenum;
+ : return BadValue;
+ : }
+ : else {
+ : ctrl.den = stuff->accelDenum;
+ : }
+ : }
+ : if (stuff->doThresh) {
+ : if (stuff->threshold == -1) {
+ : ctrl.threshold = defaultPointerControl.threshold;
+ : }
+ : else if (stuff->threshold < 0) {
+ : client->errorValue = stuff->threshold;
+ : return BadValue;
+ : }
+ : else {
+ : ctrl.threshold = stuff->threshold;
+ : }
+ : }
+ :
+ :
+ : for (mouse = inputInfo.devices; mouse; mouse = mouse->next) {
+ : if ((mouse->coreEvents || mouse == inputInfo.pointer) &&
+ : mouse->ptrfeed && mouse->ptrfeed->CtrlProc) {
+ : mouse->ptrfeed->ctrl = ctrl;
+ : (*mouse->ptrfeed->CtrlProc)(mouse, &mouse->ptrfeed->ctrl);
+ : }
+ : }
+ :
+ : return Success;
+ :}
+ :
+ :int
+ :ProcGetPointerControl(ClientPtr client)
+ :{
+ : PtrCtrl *ctrl = &inputInfo.pointer->ptrfeed->ctrl;
+ : xGetPointerControlReply rep;
+ :
+ : REQUEST_SIZE_MATCH(xReq);
+ : rep.type = X_Reply;
+ : rep.length = 0;
+ : rep.sequenceNumber = client->sequence;
+ : rep.threshold = ctrl->threshold;
+ : rep.accelNumerator = ctrl->num;
+ : rep.accelDenominator = ctrl->den;
+ : WriteReplyToClient(client, sizeof(xGenericReply), &rep);
+ : return Success;
+ :}
+ :
+ :void
+ :MaybeStopHint(DeviceIntPtr dev, ClientPtr client)
+ :{
+ : GrabPtr grab = dev->grab;
+ :
+ : if ((grab && SameClient(grab, client) &&
+ : ((grab->eventMask & PointerMotionHintMask) ||
+ : (grab->ownerEvents &&
+ : (EventMaskForClient(dev->valuator->motionHintWindow, client) &
+ : PointerMotionHintMask)))) ||
+ : (!grab &&
+ : (EventMaskForClient(dev->valuator->motionHintWindow, client) &
+ : PointerMotionHintMask)))
+ : dev->valuator->motionHintWindow = NullWindow;
+ :}
+ :
+ :int
+ :ProcGetMotionEvents(ClientPtr client)
+ :{
+ : WindowPtr pWin;
+ : xTimecoord * coords = (xTimecoord *) NULL;
+ : xGetMotionEventsReply rep;
+ : int i, count, xmin, xmax, ymin, ymax, rc;
+ : unsigned long nEvents;
+ : DeviceIntPtr mouse = inputInfo.pointer;
+ : TimeStamp start, stop;
+ : REQUEST(xGetMotionEventsReq);
+ :
+ : REQUEST_SIZE_MATCH(xGetMotionEventsReq);
+ : rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
+ : if (rc != Success)
+ : return rc;
+ : if (mouse->valuator->motionHintWindow)
+ : MaybeStopHint(mouse, client);
+ : rep.type = X_Reply;
+ : rep.sequenceNumber = client->sequence;
+ : nEvents = 0;
+ : start = ClientTimeToServerTime(stuff->start);
+ : stop = ClientTimeToServerTime(stuff->stop);
+ : if ((CompareTimeStamps(start, stop) != LATER) &&
+ : (CompareTimeStamps(start, currentTime) != LATER) &&
+ : mouse->valuator->numMotionEvents)
+ : {
+ : if (CompareTimeStamps(stop, currentTime) == LATER)
+ : stop = currentTime;
+ : coords = (xTimecoord *)ALLOCATE_LOCAL(mouse->valuator->numMotionEvents
+ : * sizeof(xTimecoord));
+ : if (!coords)
+ : return BadAlloc;
+ : count = (*mouse->valuator->GetMotionProc) (mouse, coords,
+ : start.milliseconds,
+ : stop.milliseconds,
+ : pWin->drawable.pScreen);
+ : xmin = pWin->drawable.x - wBorderWidth (pWin);
+ : xmax = pWin->drawable.x + (int)pWin->drawable.width +
+ : wBorderWidth (pWin);
+ : ymin = pWin->drawable.y - wBorderWidth (pWin);
+ : ymax = pWin->drawable.y + (int)pWin->drawable.height +
+ : wBorderWidth (pWin);
+ : for (i = 0; i < count; i++)
+ : if ((xmin <= coords[i].x) && (coords[i].x < xmax) &&
+ : (ymin <= coords[i].y) && (coords[i].y < ymax))
+ : {
+ : coords[nEvents].time = coords[i].time;
+ : coords[nEvents].x = coords[i].x - pWin->drawable.x;
+ : coords[nEvents].y = coords[i].y - pWin->drawable.y;
+ : nEvents++;
+ : }
+ : }
+ : rep.length = nEvents * (sizeof(xTimecoord) >> 2);
+ : rep.nEvents = nEvents;
+ : WriteReplyToClient(client, sizeof(xGetMotionEventsReply), &rep);
+ : if (nEvents)
+ : {
+ : client->pSwapReplyFunc = (ReplySwapPtr) SwapTimeCoordWrite;
+ : WriteSwappedDataToClient(client, nEvents * sizeof(xTimecoord),
+ : (char *)coords);
+ : }
+ : if (coords)
+ : DEALLOCATE_LOCAL(coords);
+ : return Success;
+ :}
+ :
+ :int
+ :ProcQueryKeymap(ClientPtr client)
+ :{
+ : xQueryKeymapReply rep;
+ : int i;
+ : CARD8 *down = inputInfo.keyboard->key->down;
+ :
+ : REQUEST_SIZE_MATCH(xReq);
+ : rep.type = X_Reply;
+ : rep.sequenceNumber = client->sequence;
+ : rep.length = 2;
+ :
+ : if (XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
+ : for (i = 0; i<32; i++)
+ : rep.map[i] = down[i];
+ : else
+ : bzero((char *)&rep.map[0], 32);
+ :
+ : WriteReplyToClient(client, sizeof(xQueryKeymapReply), &rep);
+ : return Success;
+ :}
+/*
+ * Total samples for file : "xf86dri.c"
+ *
+ * 8 0.0087
+ */
+
+<credited to line zero> 8 0.0087 :
+ /* __i686.get_pc_thunk.cx total: 8 0.0087 */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/dix/extension.c"
+ *
+ * 5 0.0054
+ */
+
+
+ :/***********************************************************
+ :
+ :Copyright 1987, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :
+ :Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 Digital not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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.
+ :
+ :******************************************************************/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <X11/X.h>
+ :#define NEED_EVENTS
+ :#define NEED_REPLIES
+ :#include <X11/Xproto.h>
+ :#include "misc.h"
+ :#include "dixstruct.h"
+ :#include "extnsionst.h"
+ :#include "gcstruct.h"
+ :#include "scrnintstr.h"
+ :#include "dispatch.h"
+ :#include "xace.h"
+ :
+ :#define EXTENSION_BASE 128
+ :#define EXTENSION_EVENT_BASE 64
+ :#define LAST_EVENT 128
+ :#define LAST_ERROR 255
+ :
+ :static ExtensionEntry **extensions = (ExtensionEntry **)NULL;
+ :
+ :int lastEvent = EXTENSION_EVENT_BASE;
+ :static int lastError = FirstExtensionError;
+ :static unsigned int NumExtensions = 0;
+ :
+ :extern int extensionPrivateLen;
+ :extern unsigned *extensionPrivateSizes;
+ :extern unsigned totalExtensionSize;
+ :
+ :static void
+ :InitExtensionPrivates(ExtensionEntry *ext)
+ :{
+ : char *ptr;
+ : DevUnion *ppriv;
+ : unsigned *sizes;
+ : unsigned size;
+ : int i;
+ :
+ : if (totalExtensionSize == sizeof(ExtensionEntry))
+ : ppriv = (DevUnion *)NULL;
+ : else
+ : ppriv = (DevUnion *)(ext + 1);
+ :
+ : ext->devPrivates = ppriv;
+ : sizes = extensionPrivateSizes;
+ : ptr = (char *)(ppriv + extensionPrivateLen);
+ : for (i = extensionPrivateLen; --i >= 0; ppriv++, sizes++)
+ : {
+ : if ( (size = *sizes) )
+ : {
+ : ppriv->ptr = (pointer)ptr;
+ : ptr += size;
+ : }
+ : else
+ : ppriv->ptr = (pointer)NULL;
+ : }
+ :}
+ :
+ :_X_EXPORT ExtensionEntry *
+ :AddExtension(char *name, int NumEvents, int NumErrors,
+ : int (*MainProc)(ClientPtr c1),
+ : int (*SwappedMainProc)(ClientPtr c2),
+ : void (*CloseDownProc)(ExtensionEntry *e),
+ : unsigned short (*MinorOpcodeProc)(ClientPtr c3))
+ :{
+ : int i;
+ : ExtensionEntry *ext, **newexts;
+ :
+ : if (!MainProc || !SwappedMainProc || !CloseDownProc || !MinorOpcodeProc)
+ : return((ExtensionEntry *) NULL);
+ : if ((lastEvent + NumEvents > LAST_EVENT) ||
+ : (unsigned)(lastError + NumErrors > LAST_ERROR))
+ : return((ExtensionEntry *) NULL);
+ :
+ : ext = (ExtensionEntry *) xalloc(totalExtensionSize);
+ : if (!ext)
+ : return((ExtensionEntry *) NULL);
+ : bzero(ext, totalExtensionSize);
+ : InitExtensionPrivates(ext);
+ : ext->name = (char *)xalloc(strlen(name) + 1);
+ : ext->num_aliases = 0;
+ : ext->aliases = (char **)NULL;
+ : if (!ext->name)
+ : {
+ : xfree(ext);
+ : return((ExtensionEntry *) NULL);
+ : }
+ : strcpy(ext->name, name);
+ : i = NumExtensions;
+ : newexts = (ExtensionEntry **) xrealloc(extensions,
+ : (i + 1) * sizeof(ExtensionEntry *));
+ : if (!newexts)
+ : {
+ : xfree(ext->name);
+ : xfree(ext);
+ : return((ExtensionEntry *) NULL);
+ : }
+ : NumExtensions++;
+ : extensions = newexts;
+ : extensions[i] = ext;
+ : ext->index = i;
+ : ext->base = i + EXTENSION_BASE;
+ : ext->CloseDown = CloseDownProc;
+ : ext->MinorOpcode = MinorOpcodeProc;
+ : ProcVector[i + EXTENSION_BASE] = MainProc;
+ : SwappedProcVector[i + EXTENSION_BASE] = SwappedMainProc;
+ : if (NumEvents)
+ : {
+ : ext->eventBase = lastEvent;
+ : ext->eventLast = lastEvent + NumEvents;
+ : lastEvent += NumEvents;
+ : }
+ : else
+ : {
+ : ext->eventBase = 0;
+ : ext->eventLast = 0;
+ : }
+ : if (NumErrors)
+ : {
+ : ext->errorBase = lastError;
+ : ext->errorLast = lastError + NumErrors;
+ : lastError += NumErrors;
+ : }
+ : else
+ : {
+ : ext->errorBase = 0;
+ : ext->errorLast = 0;
+ : }
+ :
+ : return(ext);
+ :}
+ :
+ :_X_EXPORT Bool AddExtensionAlias(char *alias, ExtensionEntry *ext)
+ :{
+ : char *name;
+ : char **aliases;
+ :
+ : aliases = (char **)xrealloc(ext->aliases,
+ : (ext->num_aliases + 1) * sizeof(char *));
+ : if (!aliases)
+ : return FALSE;
+ : ext->aliases = aliases;
+ : name = (char *)xalloc(strlen(alias) + 1);
+ : if (!name)
+ : return FALSE;
+ : strcpy(name, alias);
+ : ext->aliases[ext->num_aliases] = name;
+ : ext->num_aliases++;
+ : return TRUE;
+ :}
+ :
+ :static int
+ :FindExtension(char *extname, int len)
+ :{
+ : int i, j;
+ :
+ : for (i=0; i<NumExtensions; i++)
+ : {
+ : if ((strlen(extensions[i]->name) == len) &&
+ : !strncmp(extname, extensions[i]->name, len))
+ : break;
+ : for (j = extensions[i]->num_aliases; --j >= 0;)
+ : {
+ : if ((strlen(extensions[i]->aliases[j]) == len) &&
+ : !strncmp(extname, extensions[i]->aliases[j], len))
+ : break;
+ : }
+ : if (j >= 0) break;
+ : }
+ : return ((i == NumExtensions) ? -1 : i);
+ :}
+ :
+ :/*
+ : * CheckExtension returns the extensions[] entry for the requested
+ : * extension name. Maybe this could just return a Bool instead?
+ : */
+ :_X_EXPORT ExtensionEntry *
+ :CheckExtension(const char *extname)
+ :{
+ : int n;
+ :
+ : n = FindExtension((char*)extname, strlen(extname));
+ : if (n != -1)
+ : return extensions[n];
+ : else
+ : return NULL;
+ :}
+ :
+ :/*
+ : * Added as part of Xace.
+ : */
+ :ExtensionEntry *
+ :GetExtensionEntry(int major)
+ 5 0.0054 :{ /* GetExtensionEntry total: 5 0.0054 */
+ : if (major < EXTENSION_BASE)
+ : return NULL;
+ : major -= EXTENSION_BASE;
+ : if (major >= NumExtensions)
+ : return NULL;
+ : return extensions[major];
+ :}
+ :
+ :_X_EXPORT void
+ :DeclareExtensionSecurity(char *extname, Bool secure)
+ :{
+ : int i = FindExtension(extname, strlen(extname));
+ : if (i >= 0)
+ : XaceHook(XACE_DECLARE_EXT_SECURE, extensions[i], secure);
+ :}
+ :
+ :_X_EXPORT unsigned short
+ :StandardMinorOpcode(ClientPtr client)
+ :{
+ : return ((xReq *)client->requestBuffer)->data;
+ :}
+ :
+ :_X_EXPORT unsigned short
+ :MinorOpcodeOfRequest(ClientPtr client)
+ :{
+ : unsigned char major;
+ :
+ : major = ((xReq *)client->requestBuffer)->reqType;
+ : if (major < EXTENSION_BASE)
+ : return 0;
+ : major -= EXTENSION_BASE;
+ : if (major >= NumExtensions)
+ : return 0;
+ : return (*extensions[major]->MinorOpcode)(client);
+ :}
+ :
+ :void
+ :CloseDownExtensions(void)
+ :{
+ : int i,j;
+ :
+ : for (i = NumExtensions - 1; i >= 0; i--)
+ : {
+ : (* extensions[i]->CloseDown)(extensions[i]);
+ : NumExtensions = i;
+ : xfree(extensions[i]->name);
+ : for (j = extensions[i]->num_aliases; --j >= 0;)
+ : xfree(extensions[i]->aliases[j]);
+ : xfree(extensions[i]->aliases);
+ : xfree(extensions[i]);
+ : }
+ : xfree(extensions);
+ : extensions = (ExtensionEntry **)NULL;
+ : lastEvent = EXTENSION_EVENT_BASE;
+ : lastError = FirstExtensionError;
+ :}
+ :
+ :int
+ :ProcQueryExtension(ClientPtr client)
+ :{
+ : xQueryExtensionReply reply;
+ : int i;
+ : REQUEST(xQueryExtensionReq);
+ :
+ : REQUEST_FIXED_SIZE(xQueryExtensionReq, stuff->nbytes);
+ :
+ : reply.type = X_Reply;
+ : reply.length = 0;
+ : reply.major_opcode = 0;
+ : reply.sequenceNumber = client->sequence;
+ :
+ : if ( ! NumExtensions )
+ : reply.present = xFalse;
+ : else
+ : {
+ : i = FindExtension((char *)&stuff[1], stuff->nbytes);
+ : if (i < 0 || !XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
+ : reply.present = xFalse;
+ : else
+ : {
+ : reply.present = xTrue;
+ : reply.major_opcode = extensions[i]->base;
+ : reply.first_event = extensions[i]->eventBase;
+ : reply.first_error = extensions[i]->errorBase;
+ : }
+ : }
+ : WriteReplyToClient(client, sizeof(xQueryExtensionReply), &reply);
+ : return(client->noClientException);
+ :}
+ :
+ :int
+ :ProcListExtensions(ClientPtr client)
+ :{
+ : xListExtensionsReply reply;
+ : char *bufptr, *buffer;
+ : int total_length = 0;
+ :
+ : REQUEST_SIZE_MATCH(xReq);
+ :
+ : reply.type = X_Reply;
+ : reply.nExtensions = 0;
+ : reply.length = 0;
+ : reply.sequenceNumber = client->sequence;
+ : buffer = NULL;
+ :
+ : if ( NumExtensions )
+ : {
+ : int i, j;
+ :
+ : for (i=0; i<NumExtensions; i++)
+ : {
+ : /* call callbacks to find out whether to show extension */
+ : if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
+ : continue;
+ :
+ : total_length += strlen(extensions[i]->name) + 1;
+ : reply.nExtensions += 1 + extensions[i]->num_aliases;
+ : for (j = extensions[i]->num_aliases; --j >= 0;)
+ : total_length += strlen(extensions[i]->aliases[j]) + 1;
+ : }
+ : reply.length = (total_length + 3) >> 2;
+ : buffer = bufptr = (char *)ALLOCATE_LOCAL(total_length);
+ : if (!buffer)
+ : return(BadAlloc);
+ : for (i=0; i<NumExtensions; i++)
+ : {
+ : int len;
+ : if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
+ : continue;
+ :
+ : *bufptr++ = len = strlen(extensions[i]->name);
+ : memmove(bufptr, extensions[i]->name, len);
+ : bufptr += len;
+ : for (j = extensions[i]->num_aliases; --j >= 0;)
+ : {
+ : *bufptr++ = len = strlen(extensions[i]->aliases[j]);
+ : memmove(bufptr, extensions[i]->aliases[j], len);
+ : bufptr += len;
+ : }
+ : }
+ : }
+ : WriteReplyToClient(client, sizeof(xListExtensionsReply), &reply);
+ : if (reply.length)
+ : {
+ : WriteToClient(client, total_length, buffer);
+ : DEALLOCATE_LOCAL(buffer);
+ : }
+ : return(client->noClientException);
+ :}
+ :
+ :#ifdef XSERVER_DTRACE
+ :void LoadExtensionNames(char **RequestNames) {
+ : int i;
+ :
+ : for (i=0; i<NumExtensions; i++) {
+ : int r = extensions[i]->base;
+ :
+ : if (RequestNames[r] == NULL) {
+ : RequestNames[r] = strdup(extensions[i]->name);
+ : }
+ : }
+ :}
+ :#endif
+/*
+ * Total samples for file : "/home/cworth/src/pixman/pixman/pixman-trap.c"
+ *
+ * 5 0.0054
+ */
+
+
+ :/*
+ : * $Id$
+ : *
+ : * Copyright © 2004 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 <config.h>
+ :#include <stdio.h>
+ :#include "pixman-private.h"
+ :
+ :typedef uint32_t FbBits;
+ :
+ :void
+ :pixman_add_traps (pixman_image_t * image,
+ : int16_t x_off,
+ : int16_t y_off,
+ : int ntrap,
+ : pixman_trap_t *traps)
+ :{
+ : int bpp;
+ : int width;
+ : int height;
+ :
+ : pixman_fixed_t x_off_fixed;
+ : pixman_fixed_t y_off_fixed;
+ : pixman_edge_t l, r;
+ : pixman_fixed_t t, b;
+ :
+ : width = image->bits.width;
+ : height = image->bits.height;
+ : bpp = PIXMAN_FORMAT_BPP (image->bits.format);
+ :
+ : x_off_fixed = pixman_int_to_fixed(y_off);
+ : y_off_fixed = pixman_int_to_fixed(y_off);
+ :
+ : while (ntrap--)
+ : {
+ : t = traps->top.y + y_off_fixed;
+ : if (t < 0)
+ : t = 0;
+ : t = pixman_sample_ceil_y (t, bpp);
+ :
+ : b = traps->bot.y + y_off_fixed;
+ : if (pixman_fixed_to_int (b) >= height)
+ : b = pixman_int_to_fixed (height) - 1;
+ : b = pixman_sample_floor_y (b, bpp);
+ :
+ : if (b >= t)
+ : {
+ : /* initialize edge walkers */
+ : pixman_edge_init (&l, bpp, t,
+ : traps->top.l + x_off_fixed,
+ : traps->top.y + y_off_fixed,
+ : traps->bot.l + x_off_fixed,
+ : traps->bot.y + y_off_fixed);
+ :
+ : pixman_edge_init (&r, bpp, t,
+ : traps->top.r + x_off_fixed,
+ : traps->top.y + y_off_fixed,
+ : traps->bot.r + x_off_fixed,
+ : traps->bot.y + y_off_fixed);
+ :
+ : pixman_rasterize_edges (image, &l, &r, t, b);
+ : }
+ : traps++;
+ : }
+ :
+ : fbFinishAccess (pPicture->pDrawable);
+ :}
+ :
+ :static void
+ :dump_image (pixman_image_t *image,
+ : const char *title)
+ :{
+ : int i, j;
+ :
+ : if (!image->type == BITS)
+ : {
+ : printf ("%s is not a regular image\n", title);
+ : }
+ :
+ : if (!image->bits.format == PIXMAN_a8)
+ : {
+ : printf ("%s is not an alpha mask\n", title);
+ : }
+ :
+ : printf ("\n\n\n%s: \n", title);
+ :
+ : for (i = 0; i < image->bits.height; ++i)
+ : {
+ : uint8_t *line =
+ : (uint8_t *)&(image->bits.bits[i * image->bits.rowstride]);
+ :
+ : for (j = 0; j < image->bits.width; ++j)
+ : printf ("%c", line[j]? '#' : ' ');
+ :
+ : printf ("\n");
+ : }
+ :}
+ :
+ :void
+ :pixman_add_trapezoids (pixman_image_t *image,
+ : int16_t x_off,
+ : int y_off,
+ : int ntraps,
+ : const pixman_trapezoid_t *traps)
+ :{
+ : int i;
+ :
+ :#if 0
+ : dump_image (image, "before");
+ :#endif
+ :
+ : for (i = 0; i < ntraps; ++i)
+ : {
+ : const pixman_trapezoid_t *trap = &(traps[i]);
+ :
+ : if (!pixman_trapezoid_valid (trap))
+ : continue;
+ :
+ : pixman_rasterize_trapezoid (image, trap, x_off, y_off);
+ : }
+ :
+ :#if 0
+ : dump_image (image, "after");
+ :#endif
+ :}
+ :
+ :void
+ :pixman_rasterize_trapezoid (pixman_image_t * image,
+ : const pixman_trapezoid_t *trap,
+ : int x_off,
+ : int y_off)
+ :{ /* pixman_rasterize_trapezoid total: 5 0.0054 */
+ : int bpp;
+ : int width;
+ : int height;
+ :
+ : pixman_fixed_t x_off_fixed;
+ : pixman_fixed_t y_off_fixed;
+ : pixman_edge_t l, r;
+ : pixman_fixed_t t, b;
+ :
+ : return_if_fail (image->type == BITS);
+ :
+ 2 0.0022 : if (!pixman_trapezoid_valid (trap))
+ : return;
+ :
+ : width = image->bits.width;
+ : height = image->bits.height;
+ : bpp = PIXMAN_FORMAT_BPP (image->bits.format);
+ :
+ : x_off_fixed = pixman_int_to_fixed(x_off);
+ : y_off_fixed = pixman_int_to_fixed(y_off);
+ : t = trap->top + y_off_fixed;
+ : if (t < 0)
+ : t = 0;
+ : t = pixman_sample_ceil_y (t, bpp);
+ :
+ : b = trap->bottom + y_off_fixed;
+ : if (pixman_fixed_to_int (b) >= height)
+ : b = pixman_int_to_fixed (height) - 1;
+ : b = pixman_sample_floor_y (b, bpp);
+ :
+ : if (b >= t)
+ : {
+ : /* initialize edge walkers */
+ : pixman_line_fixed_edge_init (&l, bpp, t, &trap->left, x_off, y_off);
+ 3 0.0033 : pixman_line_fixed_edge_init (&r, bpp, t, &trap->right, x_off, y_off);
+ :
+ : pixman_rasterize_edges (image, &l, &r, t, b);
+ : }
+ :}
+ :
+ :#if 0
+ :static int
+ :_GreaterY (pixman_point_fixed_t *a, pixman_point_fixed_t *b)
+ :{
+ : if (a->y == b->y)
+ : return a->x > b->x;
+ : return a->y > b->y;
+ :}
+ :
+ :/*
+ : * Note that the definition of this function is a bit odd because
+ : * of the X coordinate space (y increasing downwards).
+ : */
+ :static int
+ :_Clockwise (pixman_point_fixed_t *ref, pixman_point_fixed_t *a, pixman_point_fixed_t *b)
+ :{
+ : pixman_point_fixed_t ad, bd;
+ :
+ : ad.x = a->x - ref->x;
+ : ad.y = a->y - ref->y;
+ : bd.x = b->x - ref->x;
+ : bd.y = b->y - ref->y;
+ :
+ : return ((pixman_fixed_32_32_t) bd.y * ad.x - (pixman_fixed_32_32_t) ad.y * bd.x) < 0;
+ :}
+ :
+ :/* FIXME -- this could be made more efficient */
+ :void
+ :fbAddTriangles (pixman_image_t * pPicture,
+ : int16_t x_off,
+ : int16_t y_off,
+ : int ntri,
+ : xTriangle *tris)
+ :{
+ : pixman_point_fixed_t *top, *left, *right, *tmp;
+ : xTrapezoid trap;
+ :
+ : for (; ntri; ntri--, tris++)
+ : {
+ : top = &tris->p1;
+ : left = &tris->p2;
+ : right = &tris->p3;
+ : if (_GreaterY (top, left)) {
+ : tmp = left; left = top; top = tmp;
+ : }
+ : if (_GreaterY (top, right)) {
+ : tmp = right; right = top; top = tmp;
+ : }
+ : if (_Clockwise (top, right, left)) {
+ : tmp = right; right = left; left = tmp;
+ : }
+ :
+ : /*
+ : * Two cases:
+ : *
+ : * + +
+ : * / \ / \
+ : * / \ / \
+ : * / + + \
+ : * / -- -- \
+ : * / -- -- \
+ : * / --- --- \
+ : * +-- --+
+ : */
+ :
+ : trap.top = top->y;
+ : trap.left.p1 = *top;
+ : trap.left.p2 = *left;
+ : trap.right.p1 = *top;
+ : trap.right.p2 = *right;
+ : if (right->y < left->y)
+ : trap.bottom = right->y;
+ : else
+ : trap.bottom = left->y;
+ : fbRasterizeTrapezoid (pPicture, &trap, x_off, y_off);
+ : if (right->y < left->y)
+ : {
+ : trap.top = right->y;
+ : trap.bottom = left->y;
+ : trap.right.p1 = *right;
+ : trap.right.p2 = *left;
+ : }
+ : else
+ : {
+ : trap.top = left->y;
+ : trap.bottom = right->y;
+ : trap.left.p1 = *left;
+ : trap.left.p2 = *right;
+ : }
+ : fbRasterizeTrapezoid (pPicture, &trap, x_off, y_off);
+ : }
+ :}
+ :#endif
+/*
+ * Total samples for file : "memcpy.c"
+ *
+ * 4 0.0044
+ */
+
+<credited to line zero> 4 0.0044 :
+ /* _dl_load_cache_lookup total: 1 0.0011 */
+ /* _dl_lookup_symbol_x total: 1 0.0011 */
+ /* _dl_relocate_object total: 1 0.0011 */
+ /* strcmp total: 2 0.0022 */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/fb/fbpict.c"
+ *
+ * 3 0.0033
+ */
+
+
+ :/*
+ : *
+ : * Copyright © 2000 SuSE, Inc.
+ : * Copyright © 2007 Red Hat, Inc.
+ : *
+ : * 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 SuSE not be used in advertising or
+ : * publicity pertaining to distribution of the software without specific,
+ : * written prior permission. SuSE makes no representations about the
+ : * suitability of this software for any purpose. It is provided "as is"
+ : * without express or implied warranty.
+ : *
+ : * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
+ : * 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.
+ : *
+ : * Author: Keith Packard, SuSE, Inc.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include <string.h>
+ :
+ :#include "fb.h"
+ :
+ :#ifdef RENDER
+ :
+ :#include "picturestr.h"
+ :#include "mipict.h"
+ :#include "fbpict.h"
+ :
+ :#define mod(a,b) ((b) == 1 ? 0 : (a) >= 0 ? (a) % (b) : (b) - (-a) % (b))
+ :
+ :void
+ :fbWalkCompositeRegion (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pMask,
+ : PicturePtr pDst,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : INT16 xMask,
+ : INT16 yMask,
+ : INT16 xDst,
+ : INT16 yDst,
+ : CARD16 width,
+ : CARD16 height,
+ : Bool srcRepeat,
+ : Bool maskRepeat,
+ : CompositeFunc compositeRect)
+ :{
+ : RegionRec region;
+ : int n;
+ : BoxPtr pbox;
+ : int w, h, w_this, h_this;
+ : int x_msk, y_msk, x_src, y_src, x_dst, y_dst;
+ :
+ : xDst += pDst->pDrawable->x;
+ : yDst += pDst->pDrawable->y;
+ : if (pSrc->pDrawable)
+ : {
+ : xSrc += pSrc->pDrawable->x;
+ : ySrc += pSrc->pDrawable->y;
+ : }
+ : if (pMask && pMask->pDrawable)
+ : {
+ : xMask += pMask->pDrawable->x;
+ : yMask += pMask->pDrawable->y;
+ : }
+ :
+ : if (!miComputeCompositeRegion (®ion, pSrc, pMask, pDst, xSrc, ySrc,
+ : xMask, yMask, xDst, yDst, width, height))
+ : return;
+ :
+ : n = REGION_NUM_RECTS (®ion);
+ : pbox = REGION_RECTS (®ion);
+ : while (n--)
+ : {
+ : h = pbox->y2 - pbox->y1;
+ : y_src = pbox->y1 - yDst + ySrc;
+ : y_msk = pbox->y1 - yDst + yMask;
+ : y_dst = pbox->y1;
+ : while (h)
+ : {
+ : h_this = h;
+ : w = pbox->x2 - pbox->x1;
+ : x_src = pbox->x1 - xDst + xSrc;
+ : x_msk = pbox->x1 - xDst + xMask;
+ : x_dst = pbox->x1;
+ : if (maskRepeat)
+ : {
+ : y_msk = mod (y_msk - pMask->pDrawable->y, pMask->pDrawable->height);
+ : if (h_this > pMask->pDrawable->height - y_msk)
+ : h_this = pMask->pDrawable->height - y_msk;
+ : y_msk += pMask->pDrawable->y;
+ : }
+ : if (srcRepeat)
+ : {
+ : y_src = mod (y_src - pSrc->pDrawable->y, pSrc->pDrawable->height);
+ : if (h_this > pSrc->pDrawable->height - y_src)
+ : h_this = pSrc->pDrawable->height - y_src;
+ : y_src += pSrc->pDrawable->y;
+ : }
+ : while (w)
+ : {
+ : w_this = w;
+ : if (maskRepeat)
+ : {
+ : x_msk = mod (x_msk - pMask->pDrawable->x, pMask->pDrawable->width);
+ : if (w_this > pMask->pDrawable->width - x_msk)
+ : w_this = pMask->pDrawable->width - x_msk;
+ : x_msk += pMask->pDrawable->x;
+ : }
+ : if (srcRepeat)
+ : {
+ : x_src = mod (x_src - pSrc->pDrawable->x, pSrc->pDrawable->width);
+ : if (w_this > pSrc->pDrawable->width - x_src)
+ : w_this = pSrc->pDrawable->width - x_src;
+ : x_src += pSrc->pDrawable->x;
+ : }
+ : (*compositeRect) (op, pSrc, pMask, pDst,
+ : x_src, y_src, x_msk, y_msk, x_dst, y_dst,
+ : w_this, h_this);
+ : w -= w_this;
+ : x_src += w_this;
+ : x_msk += w_this;
+ : x_dst += w_this;
+ : }
+ : h -= h_this;
+ : y_src += h_this;
+ : y_msk += h_this;
+ : y_dst += h_this;
+ : }
+ : pbox++;
+ : }
+ : REGION_UNINIT (pDst->pDrawable->pScreen, ®ion);
+ :}
+ :
+ :void
+ :fbComposite (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pMask,
+ : PicturePtr pDst,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : INT16 xMask,
+ : INT16 yMask,
+ : INT16 xDst,
+ : INT16 yDst,
+ : CARD16 width,
+ : CARD16 height)
+ :{
+ : pixman_image_t *src, *mask, *dest;
+ :
+ : xDst += pDst->pDrawable->x;
+ : yDst += pDst->pDrawable->y;
+ : if (pSrc->pDrawable)
+ : {
+ : xSrc += pSrc->pDrawable->x;
+ : ySrc += pSrc->pDrawable->y;
+ : }
+ : if (pMask && pMask->pDrawable)
+ : {
+ : xMask += pMask->pDrawable->x;
+ : yMask += pMask->pDrawable->y;
+ : }
+ :
+ : miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height);
+ : if (pMask)
+ : miCompositeSourceValidate (pMask, xMask, yMask, width, height);
+ :
+ : src = image_from_pict (pSrc, TRUE);
+ : mask = image_from_pict (pMask, TRUE);
+ : dest = image_from_pict (pDst, TRUE);
+ :
+ : if (src && dest && !(pMask && !mask))
+ : {
+ : pixman_image_composite (op, src, mask, dest,
+ : xSrc, ySrc, xMask, yMask, xDst, yDst,
+ : width, height);
+ :
+ : }
+ :
+ : if (src)
+ : pixman_image_unref (src);
+ : if (mask)
+ : pixman_image_unref (mask);
+ : if (dest)
+ : pixman_image_unref (dest);
+ :}
+ :
+ :void
+ :fbCompositeGeneral (CARD8 op,
+ : PicturePtr pSrc,
+ : PicturePtr pMask,
+ : PicturePtr pDst,
+ : INT16 xSrc,
+ : INT16 ySrc,
+ : INT16 xMask,
+ : INT16 yMask,
+ : INT16 xDst,
+ : INT16 yDst,
+ : CARD16 width,
+ : CARD16 height)
+ :{
+ : return fbComposite (op, pSrc, pMask, pDst,
+ : xSrc, ySrc, xMask, yMask, xDst, yDst,
+ : width, height);
+ :}
+ :
+ :#endif /* RENDER */
+ :
+ :static pixman_image_t *
+ :create_solid_fill_image (PicturePtr pict)
+ :{
+ : PictSolidFill *solid = &pict->pSourcePict->solidFill;
+ : pixman_color_t color;
+ : CARD32 a, r, g, b;
+ :
+ : a = (solid->color & 0xff000000) >> 24;
+ : r = (solid->color & 0x00ff0000) >> 16;
+ : g = (solid->color & 0x0000ff00) >> 8;
+ : b = (solid->color & 0x000000ff) >> 0;
+ :
+ : color.alpha = (a << 8) | a;
+ : color.red = (r << 8) | r;
+ : color.green = (g << 8) | g;
+ : color.blue = (b << 8) | b;
+ :
+ : return pixman_image_create_solid_fill (&color);
+ :}
+ :
+ :static pixman_image_t *
+ :create_linear_gradient_image (PictGradient *gradient)
+ :{
+ : PictLinearGradient *linear = (PictLinearGradient *)gradient;
+ : pixman_point_fixed_t p1;
+ : pixman_point_fixed_t p2;
+ :
+ : p1.x = linear->p1.x;
+ : p1.y = linear->p1.y;
+ : p2.x = linear->p2.x;
+ : p2.y = linear->p2.y;
+ :
+ : return pixman_image_create_linear_gradient (
+ : &p1, &p2, (pixman_gradient_stop_t *)gradient->stops, gradient->nstops);
+ :}
+ :
+ :static pixman_image_t *
+ :create_radial_gradient_image (PictGradient *gradient)
+ :{
+ : PictRadialGradient *radial = (PictRadialGradient *)gradient;
+ : pixman_point_fixed_t c1;
+ : pixman_point_fixed_t c2;
+ :
+ : c1.x = radial->c1.x;
+ : c1.y = radial->c1.y;
+ : c2.x = radial->c2.x;
+ : c2.y = radial->c2.y;
+ :
+ : return pixman_image_create_radial_gradient (
+ : &c1, &c2, radial->c1.radius,
+ : radial->c2.radius,
+ : (pixman_gradient_stop_t *)gradient->stops, gradient->nstops);
+ :}
+ :
+ :static pixman_image_t *
+ :create_conical_gradient_image (PictGradient *gradient)
+ :{
+ : PictConicalGradient *conical = (PictConicalGradient *)gradient;
+ : pixman_point_fixed_t center;
+ :
+ : center.x = conical->center.x;
+ : center.y = conical->center.y;
+ :
+ : return pixman_image_create_conical_gradient (
+ : ¢er, conical->angle, (pixman_gradient_stop_t *)gradient->stops,
+ : gradient->nstops);
+ :}
+ :
+ :static pixman_image_t *
+ :create_bits_picture (PicturePtr pict,
+ : Bool has_clip)
+ :{
+ : FbBits *bits;
+ : FbStride stride;
+ : int bpp, xoff, yoff;
+ : pixman_image_t *image;
+ :
+ : fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff);
+ :
+ : bits += yoff * stride + xoff;
+ :
+ : image = pixman_image_create_bits (
+ : pict->format,
+ : pict->pDrawable->width, pict->pDrawable->height,
+ : (uint32_t *)bits, stride * sizeof (FbStride));
+ :
+ :
+ :#ifdef FB_ACCESS_WRAPPER
+ :#if FB_SHIFT==5
+ :
+ : pixman_image_set_accessors (image,
+ : (pixman_read_memory_func_t)wfbReadMemory,
+ : (pixman_write_memory_func_t)wfbWriteMemory);
+ :
+ :#else
+ :
+ :#error The pixman library only works when FbBits is 32 bits wide
+ :
+ :#endif
+ :#endif
+ :
+ : /* pCompositeClip is undefined for source pictures, so
+ : * only set the clip region for pictures with drawables
+ : */
+ : if (has_clip)
+ : {
+ : if (pict->clientClipType != CT_NONE)
+ : pixman_image_set_has_client_clip (image, TRUE);
+ :
+ : pixman_image_set_clip_region (image, pict->pCompositeClip);
+ : }
+ :
+ : /* Indexed table */
+ : if (pict->pFormat->index.devPrivate)
+ : pixman_image_set_indexed (image, pict->pFormat->index.devPrivate);
+ :
+ : fbFinishAccess (pict->pDrawable);
+ :
+ : return image;
+ :}
+ :
+ :static void
+ :set_image_properties (pixman_image_t *image, PicturePtr pict)
+ :{
+ : pixman_repeat_t repeat;
+ : pixman_filter_t filter;
+ :
+ : if (pict->transform)
+ : {
+ : pixman_image_set_transform (
+ : image, (pixman_transform_t *)pict->transform);
+ : }
+ :
+ : switch (pict->repeatType)
+ : {
+ : default:
+ : case RepeatNone:
+ : repeat = PIXMAN_REPEAT_NONE;
+ : break;
+ :
+ : case RepeatPad:
+ : repeat = PIXMAN_REPEAT_PAD;
+ : break;
+ :
+ : case RepeatNormal:
+ : repeat = PIXMAN_REPEAT_NORMAL;
+ : break;
+ :
+ : case RepeatReflect:
+ : repeat = PIXMAN_REPEAT_REFLECT;
+ : break;
+ : }
+ :
+ : pixman_image_set_repeat (image, repeat);
+ :
+ : if (pict->alphaMap)
+ : {
+ : pixman_image_t *alpha_map = image_from_pict (pict->alphaMap, TRUE);
+ :
+ : pixman_image_set_alpha_map (
+ : image, alpha_map, pict->alphaOrigin.x, pict->alphaOrigin.y);
+ :
+ : pixman_image_unref (alpha_map);
+ : }
+ :
+ : pixman_image_set_component_alpha (image, pict->componentAlpha);
+ :
+ : switch (pict->filter)
+ : {
+ : default:
+ : case PictFilterNearest:
+ : case PictFilterFast:
+ : filter = PIXMAN_FILTER_NEAREST;
+ : break;
+ :
+ : case PictFilterBilinear:
+ : case PictFilterGood:
+ : filter = PIXMAN_FILTER_BILINEAR;
+ : break;
+ :
+ : case PictFilterConvolution:
+ : filter = PIXMAN_FILTER_CONVOLUTION;
+ : break;
+ : }
+ :
+ : pixman_image_set_filter (image, filter, (pixman_fixed_t *)pict->filter_params, pict->filter_nparams);
+ :}
+ :
+ :pixman_image_t *
+ :image_from_pict (PicturePtr pict,
+ : Bool has_clip)
+ 3 0.0033 :{ /* image_from_pict total: 4 0.0044 */
+ : pixman_image_t *image = NULL;
+ :
+ : if (!pict)
+ : return NULL;
+ :
+ : if (pict->pDrawable)
+ : {
+ : image = create_bits_picture (pict, has_clip);
+ : }
+ : else if (pict->pSourcePict)
+ : {
+ : SourcePict *sp = pict->pSourcePict;
+ :
+ : if (sp->type == SourcePictTypeSolidFill)
+ : {
+ : image = create_solid_fill_image (pict);
+ : }
+ : else
+ : {
+ : PictGradient *gradient = &pict->pSourcePict->gradient;
+ :
+ : if (sp->type == SourcePictTypeLinear)
+ : image = create_linear_gradient_image (gradient);
+ : else if (sp->type == SourcePictTypeRadial)
+ : image = create_radial_gradient_image (gradient);
+ : else if (sp->type == SourcePictTypeConical)
+ : image = create_conical_gradient_image (gradient);
+ : }
+ : }
+ :
+ : if (image)
+ : set_image_properties (image, pict);
+ :
+ : return image;
+ :}
+ :
+ :Bool
+ :fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
+ :{
+ :
+ :#ifdef RENDER
+ :
+ : PictureScreenPtr ps;
+ :
+ : if (!miPictureInit (pScreen, formats, nformats))
+ : return FALSE;
+ : ps = GetPictureScreen(pScreen);
+ : ps->Composite = fbComposite;
+ : ps->Glyphs = miGlyphs;
+ : ps->CompositeRects = miCompositeRects;
+ : ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
+ : ps->AddTraps = fbAddTraps;
+ : ps->AddTriangles = fbAddTriangles;
+ :
+ :#endif /* RENDER */
+ :
+ : return TRUE;
+ :}
+/*
+ * Total samples for file : "/home/cworth/src/xorg/driver/xf86-video-intel/src/i830_render.c"
+ *
+ * 3 0.0033
+ */
+
+
+ :/*
+ : * Copyright © 2006 Intel Corporation
+ : *
+ : * Permission is hereby granted, free of charge, to any person obtaining a
+ : * copy of this software and associated documentation files (the "Software"),
+ : * to deal in the Software without restriction, including without limitation
+ : * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ : * and/or sell copies of the Software, and to permit persons to whom the
+ : * Software is furnished to do so, subject to the following conditions:
+ : *
+ : * The above copyright notice and this permission notice (including the next
+ : * paragraph) shall be included in all copies or substantial portions of the
+ : * Software.
+ : *
+ : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ : * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ : * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ : * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ : * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ : * SOFTWARE.
+ : *
+ : * Authors:
+ : * Wang Zhenyu <zhenyu.z.wang@intel.com>
+ : * Eric Anholt <eric@anholt.net>
+ : *
+ : */
+ :
+ :#ifdef HAVE_CONFIG_H
+ :#include "config.h"
+ :#endif
+ :
+ :#include "xf86.h"
+ :#include "i830.h"
+ :#include "i830_reg.h"
+ :
+ :#ifdef I830DEBUG
+ :#define DEBUG_I830FALLBACK 1
+ :#endif
+ :
+ :#ifdef DEBUG_I830FALLBACK
+ :#define I830FALLBACK(s, arg...) \
+ :do { \
+ : DPRINTF(PFX, "EXA fallback: " s "\n", ##arg); \
+ : return FALSE; \
+ :} while(0)
+ :#else
+ :#define I830FALLBACK(s, arg...) \
+ :do { \
+ : return FALSE; \
+ :} while(0)
+ :#endif
+ :
+ :struct blendinfo {
+ : Bool dst_alpha;
+ : Bool src_alpha;
+ : CARD32 src_blend;
+ : CARD32 dst_blend;
+ :};
+ :
+ :struct formatinfo {
+ : int fmt;
+ : CARD32 card_fmt;
+ :};
+ :
+ :#define TB0C_LAST_STAGE (1 << 31)
+ :#define TB0C_RESULT_SCALE_1X (0 << 29)
+ :#define TB0C_RESULT_SCALE_2X (1 << 29)
+ :#define TB0C_RESULT_SCALE_4X (2 << 29)
+ :#define TB0C_OP_MODULE (3 << 25)
+ :#define TB0C_OUTPUT_WRITE_CURRENT (0 << 24)
+ :#define TB0C_OUTPUT_WRITE_ACCUM (1 << 24)
+ :#define TB0C_ARG3_REPLICATE_ALPHA (1<<23)
+ :#define TB0C_ARG3_INVERT (1<<22)
+ :#define TB0C_ARG3_SEL_XXX
+ :#define TB0C_ARG2_REPLICATE_ALPHA (1<<17)
+ :#define TB0C_ARG2_INVERT (1<<16)
+ :#define TB0C_ARG2_SEL_ONE (0 << 12)
+ :#define TB0C_ARG2_SEL_FACTOR (1 << 12)
+ :#define TB0C_ARG2_SEL_TEXEL0 (6 << 12)
+ :#define TB0C_ARG2_SEL_TEXEL1 (7 << 12)
+ :#define TB0C_ARG2_SEL_TEXEL2 (8 << 12)
+ :#define TB0C_ARG2_SEL_TEXEL3 (9 << 12)
+ :#define TB0C_ARG1_REPLICATE_ALPHA (1<<11)
+ :#define TB0C_ARG1_INVERT (1<<10)
+ :#define TB0C_ARG1_SEL_ONE (0 << 6)
+ :#define TB0C_ARG1_SEL_TEXEL0 (6 << 6)
+ :#define TB0C_ARG1_SEL_TEXEL1 (7 << 6)
+ :#define TB0C_ARG1_SEL_TEXEL2 (8 << 6)
+ :#define TB0C_ARG1_SEL_TEXEL3 (9 << 6)
+ :#define TB0C_ARG0_REPLICATE_ALPHA (1<<5)
+ :#define TB0C_ARG0_SEL_XXX
+ :
+ :#define TB0A_CTR_STAGE_ENABLE (1<<31)
+ :#define TB0A_RESULT_SCALE_1X (0 << 29)
+ :#define TB0A_RESULT_SCALE_2X (1 << 29)
+ :#define TB0A_RESULT_SCALE_4X (2 << 29)
+ :#define TB0A_OP_MODULE (3 << 25)
+ :#define TB0A_OUTPUT_WRITE_CURRENT (0<<24)
+ :#define TB0A_OUTPUT_WRITE_ACCUM (1<<24)
+ :#define TB0A_CTR_STAGE_SEL_BITS_XXX
+ :#define TB0A_ARG3_SEL_XXX
+ :#define TB0A_ARG3_INVERT (1<<17)
+ :#define TB0A_ARG2_INVERT (1<<16)
+ :#define TB0A_ARG2_SEL_ONE (0 << 12)
+ :#define TB0A_ARG2_SEL_TEXEL0 (6 << 12)
+ :#define TB0A_ARG2_SEL_TEXEL1 (7 << 12)
+ :#define TB0A_ARG2_SEL_TEXEL2 (8 << 12)
+ :#define TB0A_ARG2_SEL_TEXEL3 (9 << 12)
+ :#define TB0A_ARG1_INVERT (1<<10)
+ :#define TB0A_ARG1_SEL_ONE (0 << 6)
+ :#define TB0A_ARG1_SEL_TEXEL0 (6 << 6)
+ :#define TB0A_ARG1_SEL_TEXEL1 (7 << 6)
+ :#define TB0A_ARG1_SEL_TEXEL2 (8 << 6)
+ :#define TB0A_ARG1_SEL_TEXEL3 (9 << 6)
+ :
+ :static struct blendinfo i830_blend_op[] = {
+ : /* Clear */
+ : {0, 0, BLENDFACTOR_ZERO, BLENDFACTOR_ZERO},
+ : /* Src */
+ : {0, 0, BLENDFACTOR_ONE, BLENDFACTOR_ZERO},
+ : /* Dst */
+ : {0, 0, BLENDFACTOR_ZERO, BLENDFACTOR_ONE},
+ : /* Over */
+ : {0, 1, BLENDFACTOR_ONE, BLENDFACTOR_INV_SRC_ALPHA},
+ : /* OverReverse */
+ : {1, 0, BLENDFACTOR_INV_DST_ALPHA, BLENDFACTOR_ONE},
+ : /* In */
+ : {1, 0, BLENDFACTOR_DST_ALPHA, BLENDFACTOR_ZERO},
+ : /* InReverse */
+ : {0, 1, BLENDFACTOR_ZERO, BLENDFACTOR_SRC_ALPHA},
+ : /* Out */
+ : {1, 0, BLENDFACTOR_INV_DST_ALPHA, BLENDFACTOR_ZERO},
+ : /* OutReverse */
+ : {0, 1, BLENDFACTOR_ZERO, BLENDFACTOR_INV_SRC_ALPHA},
+ : /* Atop */
+ : {1, 1, BLENDFACTOR_DST_ALPHA, BLENDFACTOR_INV_SRC_ALPHA},
+ : /* AtopReverse */
+ : {1, 1, BLENDFACTOR_INV_DST_ALPHA, BLENDFACTOR_SRC_ALPHA},
+ : /* Xor */
+ : {1, 1, BLENDFACTOR_INV_DST_ALPHA, BLENDFACTOR_INV_SRC_ALPHA},
+ : /* Add */
+ : {0, 0, BLENDFACTOR_ONE, BLENDFACTOR_ONE},
+ :};
+ :
+ :static struct formatinfo i830_tex_formats[] = {
+ : {PICT_a8r8g8b8, MT_32BIT_ARGB8888 },
+ : {PICT_x8r8g8b8, MT_32BIT_XRGB8888 },
+ : {PICT_a8b8g8r8, MT_32BIT_ABGR8888 },
+ : {PICT_x8b8g8r8, MT_32BIT_XBGR8888 },
+ : {PICT_r5g6b5, MT_16BIT_RGB565 },
+ : {PICT_a1r5g5b5, MT_16BIT_ARGB1555 },
+ : {PICT_x1r5g5b5, MT_16BIT_ARGB1555 },
+ : {PICT_a8, MT_8BIT_A8 },
+ :};
+ :
+ :static Bool i830_get_dest_format(PicturePtr pDstPicture, CARD32 *dst_format)
+ :{
+ : switch (pDstPicture->format) {
+ : case PICT_a8r8g8b8:
+ : case PICT_x8r8g8b8:
+ : *dst_format = COLR_BUF_ARGB8888;
+ : break;
+ : case PICT_r5g6b5:
+ : *dst_format = COLR_BUF_RGB565;
+ : break;
+ : case PICT_a1r5g5b5:
+ : case PICT_x1r5g5b5:
+ : *dst_format = COLR_BUF_ARGB1555;
+ : break;
+ : /*
+ : case PICT_a8:
+ : *dst_format = COLR_BUF_8BIT;
+ : break;
+ : */
+ : case PICT_a4r4g4b4:
+ : case PICT_x4r4g4b4:
+ : *dst_format = COLR_BUF_ARGB4444;
+ : break;
+ : default:
+ : I830FALLBACK("Unsupported dest format 0x%x\n",
+ : (int)pDstPicture->format);
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :
+ :static CARD32 i830_get_blend_cntl(int op, PicturePtr pMask, CARD32 dst_format)
+ :{
+ : CARD32 sblend, dblend;
+ :
+ : sblend = i830_blend_op[op].src_blend;
+ : dblend = i830_blend_op[op].dst_blend;
+ :
+ : /* If there's no dst alpha channel, adjust the blend op so that we'll treat
+ : * it as always 1.
+ : */
+ : if (PICT_FORMAT_A(dst_format) == 0 && i830_blend_op[op].dst_alpha) {
+ : if (sblend == BLENDFACTOR_DST_ALPHA)
+ : sblend = BLENDFACTOR_ONE;
+ : else if (sblend == BLENDFACTOR_INV_DST_ALPHA)
+ : sblend = BLENDFACTOR_ZERO;
+ : }
+ :
+ : /* If the source alpha is being used, then we should only be in a case
+ : * where the source blend factor is 0, and the source blend value is the
+ : * mask channels multiplied by the source picture's alpha.
+ : */
+ : if (pMask && pMask->componentAlpha && PICT_FORMAT_RGB(pMask->format)
+ : && i830_blend_op[op].src_alpha) {
+ : if (dblend == BLENDFACTOR_SRC_ALPHA) {
+ : dblend = BLENDFACTOR_SRC_COLR;
+ : } else if (dblend == BLENDFACTOR_INV_SRC_ALPHA) {
+ : dblend = BLENDFACTOR_INV_SRC_COLR;
+ : }
+ : }
+ :
+ : return (sblend << S8_SRC_BLEND_FACTOR_SHIFT) |
+ : (dblend << S8_DST_BLEND_FACTOR_SHIFT);
+ :}
+ :
+ :static Bool i830_check_composite_texture(PicturePtr pPict, int unit)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[pPict->pDrawable->pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : int w = pPict->pDrawable->width;
+ : int h = pPict->pDrawable->height;
+ : int i;
+ :
+ : if ((w > 0x7ff) || (h > 0x7ff))
+ : I830FALLBACK("Picture w/h too large (%dx%d)\n", w, h);
+ :
+ : for (i = 0; i < sizeof(i830_tex_formats) / sizeof(i830_tex_formats[0]);
+ : i++)
+ : {
+ : if (i830_tex_formats[i].fmt == pPict->format)
+ : break;
+ : }
+ : if (i == sizeof(i830_tex_formats) / sizeof(i830_tex_formats[0]))
+ : I830FALLBACK("Unsupported picture format 0x%x\n",
+ : (int)pPict->format);
+ :
+ : if (IS_I830(pI830) || IS_845G(pI830)) {
+ : if (pPict->format == PICT_x8r8g8b8 ||
+ : pPict->format == PICT_x8b8g8r8 ||
+ : pPict->format == PICT_a8)
+ : I830FALLBACK("830/845G don't support a8, x8r8g8b8, x8b8g8r8\n");
+ : }
+ :
+ : if (pPict->repeat && pPict->repeatType != RepeatNormal)
+ : I830FALLBACK("unsupport repeat type\n");
+ :
+ : if (pPict->filter != PictFilterNearest &&
+ : pPict->filter != PictFilterBilinear)
+ : {
+ : I830FALLBACK("Unsupported filter 0x%x\n", pPict->filter);
+ : }
+ :
+ : return TRUE;
+ :}
+ :
+ :static CARD32
+ :i8xx_get_card_format(PicturePtr pPict)
+ :{
+ : int i;
+ : for (i = 0; i < sizeof(i830_tex_formats) / sizeof(i830_tex_formats[0]);
+ : i++)
+ : {
+ : if (i830_tex_formats[i].fmt == pPict->format)
+ : break;
+ : }
+ : return i830_tex_formats[i].card_fmt;
+ :}
+ :
+ :static Bool
+ :i830_texture_setup(PicturePtr pPict, PixmapPtr pPix, int unit)
+ :{
+ :
+ : ScrnInfoPtr pScrn = xf86Screens[pPict->pDrawable->pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : CARD32 format, offset, pitch, filter;
+ : CARD32 wrap_mode = TEXCOORDMODE_CLAMP_BORDER;
+ :
+ : offset = intel_get_pixmap_offset(pPix);
+ : pitch = intel_get_pixmap_pitch(pPix);
+ : pI830->scale_units[unit][0] = pPix->drawable.width;
+ : pI830->scale_units[unit][1] = pPix->drawable.height;
+ : pI830->transform[unit] = pPict->transform;
+ :
+ : format = i8xx_get_card_format(pPict);
+ :
+ : if (pPict->repeat)
+ : wrap_mode = TEXCOORDMODE_WRAP;
+ :
+ : switch (pPict->filter) {
+ : case PictFilterNearest:
+ : filter = ((FILTER_NEAREST<<TM0S3_MAG_FILTER_SHIFT) |
+ : (FILTER_NEAREST<<TM0S3_MIN_FILTER_SHIFT));
+ : break;
+ : case PictFilterBilinear:
+ : filter = ((FILTER_LINEAR<<TM0S3_MAG_FILTER_SHIFT) |
+ : (FILTER_LINEAR<<TM0S3_MIN_FILTER_SHIFT));
+ : break;
+ : default:
+ : filter = 0;
+ : I830FALLBACK("Bad filter 0x%x\n", pPict->filter);
+ : }
+ : filter |= (MIPFILTER_NONE << TM0S3_MIP_FILTER_SHIFT);
+ :
+ : {
+ : if (pPix->drawable.bitsPerPixel == 8)
+ : format |= MAPSURF_8BIT;
+ : else if (pPix->drawable.bitsPerPixel == 16)
+ : format |= MAPSURF_16BIT;
+ : else
+ : format |= MAPSURF_32BIT;
+ :
+ : BEGIN_LP_RING(10);
+ : OUT_RING(_3DSTATE_LOAD_STATE_IMMEDIATE_2 | LOAD_TEXTURE_MAP(unit) | 4);
+ : OUT_RING((offset & TM0S0_ADDRESS_MASK) | TM0S0_USE_FENCE);
+ : OUT_RING(((pPix->drawable.height - 1) << TM0S1_HEIGHT_SHIFT) |
+ : ((pPix->drawable.width - 1) << TM0S1_WIDTH_SHIFT) | format);
+ : OUT_RING((pitch/4 - 1) << TM0S2_PITCH_SHIFT | TM0S2_MAP_2D);
+ : OUT_RING(filter);
+ : OUT_RING(0); /* default color */
+ : OUT_RING(_3DSTATE_MAP_COORD_SET_CMD | TEXCOORD_SET(unit) |
+ : ENABLE_TEXCOORD_PARAMS | TEXCOORDS_ARE_NORMAL |
+ : TEXCOORDTYPE_CARTESIAN | ENABLE_ADDR_V_CNTL |
+ : TEXCOORD_ADDR_V_MODE(wrap_mode) |
+ : ENABLE_ADDR_U_CNTL | TEXCOORD_ADDR_U_MODE(wrap_mode));
+ : /* map texel stream */
+ : OUT_RING(_3DSTATE_MAP_COORD_SETBIND_CMD);
+ : if (unit == 0)
+ : OUT_RING(TEXBIND_SET0(TEXCOORDSRC_VTXSET_0) |
+ : TEXBIND_SET1(TEXCOORDSRC_KEEP) |
+ : TEXBIND_SET2(TEXCOORDSRC_KEEP) |
+ : TEXBIND_SET3(TEXCOORDSRC_KEEP));
+ : else
+ : OUT_RING(TEXBIND_SET0(TEXCOORDSRC_VTXSET_0) |
+ : TEXBIND_SET1(TEXCOORDSRC_VTXSET_1) |
+ : TEXBIND_SET2(TEXCOORDSRC_KEEP) |
+ : TEXBIND_SET3(TEXCOORDSRC_KEEP));
+ : OUT_RING(_3DSTATE_MAP_TEX_STREAM_CMD | (unit << 16) |
+ : DISABLE_TEX_STREAM_BUMP |
+ : ENABLE_TEX_STREAM_COORD_SET |
+ : TEX_STREAM_COORD_SET(unit) |
+ : ENABLE_TEX_STREAM_MAP_IDX |
+ : TEX_STREAM_MAP_IDX(unit));
+ : ADVANCE_LP_RING();
+ : }
+ :
+ :#ifdef I830DEBUG
+ : ErrorF("try to sync to show any errors...");
+ : I830Sync(pScrn);
+ :#endif
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :i830_check_composite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
+ : PicturePtr pDstPicture)
+ :{
+ : CARD32 tmp1;
+ :
+ : /* Check for unsupported compositing operations. */
+ : if (op >= sizeof(i830_blend_op) / sizeof(i830_blend_op[0]))
+ : I830FALLBACK("Unsupported Composite op 0x%x\n", op);
+ :
+ : if (pMaskPicture != NULL && pMaskPicture->componentAlpha &&
+ : PICT_FORMAT_RGB(pMaskPicture->format)) {
+ : /* Check if it's component alpha that relies on a source alpha and on
+ : * the source value. We can only get one of those into the single
+ : * source value that we get to blend with.
+ : */
+ : if (i830_blend_op[op].src_alpha &&
+ : (i830_blend_op[op].src_blend != BLENDFACTOR_ZERO))
+ : I830FALLBACK("Component alpha not supported with source "
+ : "alpha and source value blending.\n");
+ : }
+ :
+ : if (!i830_check_composite_texture(pSrcPicture, 0))
+ : I830FALLBACK("Check Src picture texture\n");
+ : if (pMaskPicture != NULL && !i830_check_composite_texture(pMaskPicture, 1))
+ : I830FALLBACK("Check Mask picture texture\n");
+ :
+ : if (!i830_get_dest_format(pDstPicture, &tmp1))
+ : I830FALLBACK("Get Color buffer format\n");
+ :
+ : return TRUE;
+ :}
+ :
+ :Bool
+ :i830_prepare_composite(int op, PicturePtr pSrcPicture,
+ : PicturePtr pMaskPicture, PicturePtr pDstPicture,
+ : PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[pSrcPicture->pDrawable->pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : CARD32 dst_format, dst_offset, dst_pitch;
+ :
+ : IntelEmitInvarientState(pScrn);
+ : *pI830->last_3d = LAST_3D_RENDER;
+ :
+ : i830_get_dest_format(pDstPicture, &dst_format);
+ : dst_offset = intel_get_pixmap_offset(pDst);
+ : dst_pitch = intel_get_pixmap_pitch(pDst);
+ :
+ : if (!i830_texture_setup(pSrcPicture, pSrc, 0))
+ : I830FALLBACK("fail to setup src texture\n");
+ : if (pMask != NULL) {
+ : if (!i830_texture_setup(pMaskPicture, pMask, 1))
+ : I830FALLBACK("fail to setup mask texture\n");
+ : } else {
+ : pI830->transform[1] = NULL;
+ : pI830->scale_units[1][0] = -1;
+ : pI830->scale_units[1][1] = -1;
+ : }
+ :
+ : {
+ : CARD32 cblend, ablend, blendctl, vf2;
+ :
+ : BEGIN_LP_RING(30);
+ :
+ : /* color buffer */
+ : OUT_RING(_3DSTATE_BUF_INFO_CMD);
+ : OUT_RING(BUF_3D_ID_COLOR_BACK| BUF_3D_PITCH(dst_pitch));
+ : OUT_RING(BUF_3D_ADDR(dst_offset));
+ : OUT_RING(MI_NOOP);
+ :
+ : OUT_RING(_3DSTATE_DST_BUF_VARS_CMD);
+ : OUT_RING(dst_format);
+ :
+ : /* defaults */
+ : OUT_RING(_3DSTATE_DFLT_Z_CMD);
+ : OUT_RING(0);
+ :
+ : OUT_RING(_3DSTATE_DFLT_DIFFUSE_CMD);
+ : OUT_RING(0);
+ :
+ : OUT_RING(_3DSTATE_DFLT_SPEC_CMD);
+ : OUT_RING(0);
+ :
+ : OUT_RING(_3DSTATE_DRAW_RECT_CMD);
+ : OUT_RING(0);
+ : OUT_RING(0); /* ymin, xmin */
+ : OUT_RING(DRAW_YMAX(pDst->drawable.height - 1) |
+ : DRAW_XMAX(pDst->drawable.width - 1));
+ : OUT_RING(0); /* yorig, xorig */
+ :
+ : OUT_RING(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(2) |
+ : I1_LOAD_S(3) | 1);
+ : if (pMask)
+ : vf2 = 2 << 12; /* 2 texture coord sets */
+ : else
+ : vf2 = 1 << 12;
+ : OUT_RING(vf2); /* TEXCOORDFMT_2D */
+ : OUT_RING(S3_CULLMODE_NONE | S3_VERTEXHAS_XY);
+ :
+ : /* We use two pipes for color and alpha, and do (src In mask)
+ : in one stage. Arg1 is from src pict, and arg2 is from mask pict.
+ : Be sure to force 1.0 when src or mask pict has no alpha channel.
+ : */
+ : cblend = TB0C_LAST_STAGE | TB0C_RESULT_SCALE_1X | TB0C_OP_MODULE |
+ : TB0C_OUTPUT_WRITE_CURRENT;
+ : ablend = TB0A_RESULT_SCALE_1X | TB0A_OP_MODULE |
+ : TB0A_OUTPUT_WRITE_CURRENT;
+ :
+ : if (PICT_FORMAT_A(pSrcPicture->format) != 0) {
+ : ablend |= TB0A_ARG1_SEL_TEXEL0;
+ : cblend |= TB0C_ARG1_SEL_TEXEL0;
+ : } else {
+ : ablend |= TB0A_ARG1_SEL_ONE;
+ : if (pMask && pMaskPicture->componentAlpha
+ : && PICT_FORMAT_RGB(pMaskPicture->format)
+ : && i830_blend_op[op].src_alpha)
+ : cblend |= TB0C_ARG1_SEL_ONE;
+ : else
+ : cblend |= TB0C_ARG1_SEL_TEXEL0;
+ : }
+ :
+ : if (pMask) {
+ : if (pMaskPicture->componentAlpha &&
+ : PICT_FORMAT_RGB(pMaskPicture->format)) {
+ : if (i830_blend_op[op].src_alpha)
+ : cblend |= (TB0C_ARG2_SEL_TEXEL1 |
+ : TB0C_ARG1_REPLICATE_ALPHA);
+ : else
+ : cblend |= TB0C_ARG2_SEL_TEXEL1;
+ : } else {
+ : if (PICT_FORMAT_A(pMaskPicture->format) != 0)
+ : cblend |= (TB0C_ARG2_SEL_TEXEL1 |
+ : TB0C_ARG2_REPLICATE_ALPHA);
+ : else
+ : cblend |= TB0C_ARG2_SEL_ONE;
+ : }
+ : if (PICT_FORMAT_A(pMaskPicture->format) != 0)
+ : ablend |= TB0A_ARG2_SEL_TEXEL1;
+ : else
+ : ablend |= TB0A_ARG2_SEL_ONE;
+ : } else {
+ : cblend |= TB0C_ARG2_SEL_ONE;
+ : ablend |= TB0A_ARG2_SEL_ONE;
+ : }
+ :
+ : OUT_RING(_3DSTATE_LOAD_STATE_IMMEDIATE_2 |
+ : LOAD_TEXTURE_BLEND_STAGE(0)|1);
+ : OUT_RING(cblend);
+ : OUT_RING(ablend);
+ : OUT_RING(0);
+ :
+ : blendctl = i830_get_blend_cntl(op, pMaskPicture, pDstPicture->format);
+ : OUT_RING(_3DSTATE_INDPT_ALPHA_BLEND_CMD | DISABLE_INDPT_ALPHA_BLEND);
+ : OUT_RING(MI_NOOP);
+ : OUT_RING(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(8) | 0);
+ : OUT_RING(S8_ENABLE_COLOR_BLEND | S8_BLENDFUNC_ADD | blendctl |
+ : S8_ENABLE_COLOR_BUFFER_WRITE);
+ :
+ : OUT_RING(_3DSTATE_ENABLES_1_CMD | DISABLE_LOGIC_OP |
+ : DISABLE_STENCIL_TEST | DISABLE_DEPTH_BIAS |
+ : DISABLE_SPEC_ADD | DISABLE_FOG | DISABLE_ALPHA_TEST |
+ : ENABLE_COLOR_BLEND | DISABLE_DEPTH_TEST);
+ : /* We have to explicitly say we don't want write disabled */
+ : OUT_RING(_3DSTATE_ENABLES_2_CMD | ENABLE_COLOR_MASK |
+ : DISABLE_STENCIL_WRITE | ENABLE_TEX_CACHE |
+ : DISABLE_DITHER | ENABLE_COLOR_WRITE |
+ : DISABLE_DEPTH_WRITE);
+ : ADVANCE_LP_RING();
+ : }
+ :
+ :#ifdef I830DEBUG
+ : Error("try to sync to show any errors...");
+ : I830Sync(pScrn);
+ :#endif
+ :
+ : return TRUE;
+ :}
+ :
+ :
+ :/**
+ : * Do a single rectangle composite operation.
+ : *
+ : * This function is shared between i830 and i915 generation code.
+ : */
+ :void
+ :i830_composite(PixmapPtr pDst, int srcX, int srcY, int maskX, int maskY,
+ : int dstX, int dstY, int w, int h)
+ :{
+ : ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+ : I830Ptr pI830 = I830PTR(pScrn);
+ : Bool has_mask;
+ : float src_x[3], src_y[3], mask_x[3], mask_y[3];
+ :
+ : i830_get_transformed_coordinates(srcX, srcY,
+ : pI830->transform[0],
+ : &src_x[0], &src_y[0]);
+ : i830_get_transformed_coordinates(srcX, srcY + h,
+ : pI830->transform[0],
+ : &src_x[1], &src_y[1]);
+ : i830_get_transformed_coordinates(srcX + w, srcY + h,
+ : pI830->transform[0],
+ : &src_x[2], &src_y[2]);
+ :
+ : if (pI830->scale_units[1][0] == -1 || pI830->scale_units[1][1] == -1) {
+ : has_mask = FALSE;
+ : } else {
+ : has_mask = TRUE;
+ : i830_get_transformed_coordinates(maskX, maskY,
+ : pI830->transform[1],
+ : &mask_x[0], &mask_y[0]);
+ : i830_get_transformed_coordinates(maskX, maskY + h,
+ : pI830->transform[1],
+ : &mask_x[1], &mask_y[1]);
+ : i830_get_transformed_coordinates(maskX + w, maskY + h,
+ : pI830->transform[1],
+ : &mask_x[2], &mask_y[2]);
+ : }
+ :
+ : {
+ : int vertex_count;
+ :
+ : if (has_mask)
+ : vertex_count = 3*6;
+ : else
+ : vertex_count = 3*4;
+ :
+ : BEGIN_LP_RING(6+vertex_count);
+ :
+ : OUT_RING(MI_NOOP);
+ : OUT_RING(MI_NOOP);
+ : OUT_RING(MI_NOOP);
+ : OUT_RING(MI_NOOP);
+ : OUT_RING(MI_NOOP);
+ :
+ : OUT_RING(PRIM3D_INLINE | PRIM3D_RECTLIST | (vertex_count-1));
+ :
+ : OUT_RING_F(-0.125 + dstX + w);
+ : OUT_RING_F(-0.125 + dstY + h);
+ : OUT_RING_F(src_x[2] / pI830->scale_units[0][0]);
+ : OUT_RING_F(src_y[2] / pI830->scale_units[0][1]);
+ : if (has_mask) {
+ : OUT_RING_F(mask_x[2] / pI830->scale_units[1][0]);
+ : OUT_RING_F(mask_y[2] / pI830->scale_units[1][1]);
+ : }
+ :
+ : OUT_RING_F(-0.125 + dstX);
+ : OUT_RING_F(-0.125 + dstY + h);
+ : OUT_RING_F(src_x[1] / pI830->scale_units[0][0]);
+ : OUT_RING_F(src_y[1] / pI830->scale_units[0][1]);
+ : if (has_mask) {
+ : OUT_RING_F(mask_x[1] / pI830->scale_units[1][0]);
+ : OUT_RING_F(mask_y[1] / pI830->scale_units[1][1]);
+ : }
+ :
+ : OUT_RING_F(-0.125 + dstX);
+ : OUT_RING_F(-0.125 + dstY);
+ : OUT_RING_F(src_x[0] / pI830->scale_units[0][0]);
+ : OUT_RING_F(src_y[0] / pI830->scale_units[0][1]);
+ : if (has_mask) {
+ : OUT_RING_F(mask_x[0] / pI830->scale_units[1][0]);
+ : OUT_RING_F(mask_y[0] / pI830->scale_units[1][1]);
+ : }
+ : ADVANCE_LP_RING();
+ : }
+ :}
+ :
+ :/**
+ : * Do any cleanup from the Composite operation.
+ : *
+ : * This is shared between i830 through i965.
+ : */
+ :void
+ :i830_done_composite(PixmapPtr pDst)
+ 2 0.0022 :{ /* i830_done_composite total: 3 0.0033 */
+ : /* NO-OP */
+ 1 0.0011 :}
+/*
+ * Total samples for file : "/home/cworth/src/pixman/pixman/pixman-edge.c"
+ *
+ * 3 0.0033
+ */
+
+
+ :/*
+ : * $Id$
+ : *
+ : * Copyright © 2004 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 <config.h>
+ :#include <string.h>
+ :#include "pixman.h"
+ :#include "pixman-private.h"
+ :
+ :#ifdef PIXMAN_FB_ACCESSORS
+ :#define PIXMAN_RASTERIZE_EDGES pixman_rasterize_edges_accessors
+ :#else
+ :#define PIXMAN_RASTERIZE_EDGES pixman_rasterize_edges_no_accessors
+ :#endif
+ :
+ :/*
+ : * 4 bit alpha
+ : */
+ :
+ :#define N_BITS 4
+ :#define rasterizeEdges fbRasterizeEdges4
+ :
+ :#if BITMAP_BIT_ORDER == LSBFirst
+ :#define Shift4(o) ((o) << 2)
+ :#else
+ :#define Shift4(o) ((1-(o)) << 2)
+ :#endif
+ :
+ :#define Get4(x,o) (((x) >> Shift4(o)) & 0xf)
+ :#define Put4(x,o,v) (((x) & ~(0xf << Shift4(o))) | (((v) & 0xf) << Shift4(o)))
+ :
+ :#define DefineAlpha(line,x) \
+ : uint8_t *__ap = (uint8_t *) line + ((x) >> 1); \
+ : int __ao = (x) & 1
+ :
+ :#define StepAlpha ((__ap += __ao), (__ao ^= 1))
+ :
+ :#define AddAlpha(a) { \
+ : uint8_t __o = READ(__ap); \
+ : uint8_t __a = (a) + Get4(__o, __ao); \
+ : WRITE(__ap, Put4 (__o, __ao, __a | (0 - ((__a) >> 4)))); \
+ : }
+ :
+ :#include "pixman-edge-imp.h"
+ :
+ :#undef AddAlpha
+ :#undef StepAlpha
+ :#undef DefineAlpha
+ :#undef rasterizeEdges
+ :#undef N_BITS
+ :
+ :
+ :/*
+ : * 1 bit alpha
+ : */
+ :
+ :#define N_BITS 1
+ :#define rasterizeEdges fbRasterizeEdges1
+ :
+ :#include "pixman-edge-imp.h"
+ :
+ :#undef rasterizeEdges
+ :#undef N_BITS
+ :
+ :/*
+ : * 8 bit alpha
+ : */
+ :
+ :static inline uint8_t
+ :clip255 (int x)
+ :{
+ : if (x > 255) return 255;
+ : return x;
+ :}
+ :
+ :#define add_saturate_8(buf,val,length) \
+ : do { \
+ : int i__ = (length); \
+ : uint8_t *buf__ = (buf); \
+ : int val__ = (val); \
+ : \
+ : while (i__--) \
+ : { \
+ : WRITE((buf__), clip255 (READ((buf__)) + (val__))); \
+ : (buf__)++; \
+ : } \
+ : } while (0)
+ :
+ :/*
+ : * We want to detect the case where we add the same value to a long
+ : * span of pixels. The triangles on the end are filled in while we
+ : * count how many sub-pixel scanlines contribute to the middle section.
+ : *
+ : * +--------------------------+
+ : * fill_height =| \ /
+ : * +------------------+
+ : * |================|
+ : * fill_start fill_end
+ : */
+ :static void
+ :fbRasterizeEdges8 (pixman_image_t *image,
+ : pixman_edge_t *l,
+ : pixman_edge_t *r,
+ : pixman_fixed_t t,
+ : pixman_fixed_t b)
+ :{
+ : pixman_fixed_t y = t;
+ : uint32_t *line;
+ : int fill_start = -1, fill_end = -1;
+ : int fill_size = 0;
+ : uint32_t *buf = (image)->bits.bits;
+ : uint32_t stride = (image)->bits.rowstride;
+ : uint32_t width = (image)->bits.width;
+ :
+ : line = buf + pixman_fixed_to_int (y) * stride;
+ :
+ : for (;;)
+ : {
+ : uint8_t *ap = (uint8_t *) line;
+ : pixman_fixed_t lx, rx;
+ : int lxi, rxi;
+ :
+ : /* clip X */
+ : lx = l->x;
+ : if (lx < 0)
+ : lx = 0;
+ : rx = r->x;
+ : if (pixman_fixed_to_int (rx) >= width)
+ : rx = pixman_int_to_fixed (width);
+ :
+ : /* Skip empty (or backwards) sections */
+ : if (rx > lx)
+ : {
+ : int lxs, rxs;
+ :
+ : /* Find pixel bounds for span. */
+ : lxi = pixman_fixed_to_int (lx);
+ : rxi = pixman_fixed_to_int (rx);
+ :
+ : /* Sample coverage for edge pixels */
+ : lxs = RenderSamplesX (lx, 8);
+ : rxs = RenderSamplesX (rx, 8);
+ :
+ : /* Add coverage across row */
+ : if (lxi == rxi)
+ : {
+ : WRITE(ap +lxi, clip255 (READ(ap + lxi) + rxs - lxs));
+ : }
+ : else
+ : {
+ : WRITE(ap + lxi, clip255 (READ(ap + lxi) + N_X_FRAC(8) - lxs));
+ :
+ : /* Move forward so that lxi/rxi is the pixel span */
+ : lxi++;
+ :
+ : /* Don't bother trying to optimize the fill unless
+ : * the span is longer than 4 pixels. */
+ : if (rxi - lxi > 4)
+ : {
+ : if (fill_start < 0)
+ : {
+ : fill_start = lxi;
+ : fill_end = rxi;
+ : fill_size++;
+ : }
+ : else
+ : {
+ : if (lxi >= fill_end || rxi < fill_start)
+ : {
+ : /* We're beyond what we saved, just fill it */
+ : add_saturate_8 (ap + fill_start,
+ : fill_size * N_X_FRAC(8),
+ : fill_end - fill_start);
+ : fill_start = lxi;
+ : fill_end = rxi;
+ : fill_size = 1;
+ : }
+ : else
+ : {
+ : /* Update fill_start */
+ : if (lxi > fill_start)
+ : {
+ : add_saturate_8 (ap + fill_start,
+ : fill_size * N_X_FRAC(8),
+ : lxi - fill_start);
+ : fill_start = lxi;
+ : }
+ : else if (lxi < fill_start)
+ : {
+ : add_saturate_8 (ap + lxi, N_X_FRAC(8),
+ : fill_start - lxi);
+ : }
+ :
+ : /* Update fill_end */
+ : if (rxi < fill_end)
+ : {
+ : add_saturate_8 (ap + rxi,
+ : fill_size * N_X_FRAC(8),
+ : fill_end - rxi);
+ : fill_end = rxi;
+ : }
+ : else if (fill_end < rxi)
+ : {
+ : add_saturate_8 (ap + fill_end,
+ : N_X_FRAC(8),
+ : rxi - fill_end);
+ : }
+ : fill_size++;
+ : }
+ : }
+ : }
+ : else
+ : {
+ : add_saturate_8 (ap + lxi, N_X_FRAC(8), rxi - lxi);
+ : }
+ :
+ : /* Do not add in a 0 alpha here. This check is
+ : * necessary to avoid a buffer overrun, (when rx
+ : * is exactly on a pixel boundary). */
+ : if (rxs)
+ : WRITE(ap + rxi, clip255 (READ(ap + rxi) + rxs));
+ : }
+ : }
+ :
+ : if (y == b) {
+ : /* We're done, make sure we clean up any remaining fill. */
+ : if (fill_start != fill_end) {
+ : if (fill_size == N_Y_FRAC(8))
+ : {
+ : MEMSET_WRAPPED (ap + fill_start, 0xff, fill_end - fill_start);
+ : }
+ : else
+ : {
+ : add_saturate_8 (ap + fill_start, fill_size * N_X_FRAC(8),
+ : fill_end - fill_start);
+ : }
+ : }
+ : break;
+ : }
+ :
+ : if (pixman_fixed_frac (y) != Y_FRAC_LAST(8))
+ : {
+ : RenderEdgeStepSmall (l);
+ : RenderEdgeStepSmall (r);
+ : y += STEP_Y_SMALL(8);
+ : }
+ : else
+ : {
+ : RenderEdgeStepBig (l);
+ : RenderEdgeStepBig (r);
+ : y += STEP_Y_BIG(8);
+ : if (fill_start != fill_end)
+ : {
+ : if (fill_size == N_Y_FRAC(8))
+ : {
+ : MEMSET_WRAPPED (ap + fill_start, 0xff, fill_end - fill_start);
+ : }
+ : else
+ : {
+ : add_saturate_8 (ap + fill_start, fill_size * N_X_FRAC(8),
+ : fill_end - fill_start);
+ : }
+ : fill_start = fill_end = -1;
+ : fill_size = 0;
+ : }
+ : line += stride;
+ : }
+ : }
+ :}
+ :
+ :#ifndef PIXMAN_FB_ACCESSORS
+ :static
+ :#endif
+ :void
+ :PIXMAN_RASTERIZE_EDGES (pixman_image_t *image,
+ : pixman_edge_t *l,
+ : pixman_edge_t *r,
+ : pixman_fixed_t t,
+ : pixman_fixed_t b)
+ :{
+ : switch (PIXMAN_FORMAT_BPP (image->bits.format))
+ : {
+ : case 1:
+ : fbRasterizeEdges1 (image, l, r, t, b);
+ : break;
+ : case 4:
+ : fbRasterizeEdges4 (image, l, r, t, b);
+ : break;
+ : case 8:
+ : fbRasterizeEdges8 (image, l, r, t, b);
+ : break;
+ : }
+ :}
+ :
+ :#ifndef PIXMAN_FB_ACCESSORS
+ :
+ :void
+ :pixman_rasterize_edges (pixman_image_t *image,
+ : pixman_edge_t *l,
+ : pixman_edge_t *r,
+ : pixman_fixed_t t,
+ : pixman_fixed_t b)
+ :{ /* pixman_rasterize_edges total: 5402 5.8849 */
+ 2 0.0022 : if (image->common.read_func || image->common.write_func)
+ : {
+ : return pixman_rasterize_edges_accessors (image, l, r, t, b);
+ : }
+ : else
+ : {
+ : return pixman_rasterize_edges_no_accessors (image, l, r, t, b);
+ : }
+ 1 0.0011 :}
+ :
+ :#endif
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/os/WaitFor.c"
+ *
+ * 2 0.0022
+ */
+
+
+ :/***********************************************************
+ :
+ :Copyright 1987, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included in
+ :all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ :IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ :FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ :OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ :AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ :CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall not be
+ :used in advertising or otherwise to promote the sale, use or other dealings
+ :in this Software without prior written authorization from The Open Group.
+ :
+ :
+ :Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+ :
+ : All Rights Reserved
+ :
+ :Permission to use, copy, modify, and distribute this software and its
+ :documentation for any purpose and without fee is hereby granted,
+ :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 Digital not be
+ :used in advertising or publicity pertaining to distribution of the
+ :software without specific, written prior permission.
+ :
+ :DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ :ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ :DIGITAL 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.
+ :
+ :******************************************************************/
+ :
+ :
+ :/*****************************************************************
+ : * OS Dependent input routines:
+ : *
+ : * WaitForSomething
+ : * TimerForce, TimerSet, TimerCheck, TimerFree
+ : *
+ : *****************************************************************/
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#ifdef WIN32
+ :#include <X11/Xwinsock.h>
+ :#endif
+ :#include <X11/Xos.h> /* for strings, fcntl, time */
+ :#include <errno.h>
+ :#include <stdio.h>
+ :#include <X11/X.h>
+ :#include "misc.h"
+ :
+ :#include "osdep.h"
+ :#include <X11/Xpoll.h>
+ :#include "dixstruct.h"
+ :#include "opaque.h"
+ :#ifdef DPMSExtension
+ :#include "dpmsproc.h"
+ :#endif
+ :
+ :#ifdef WIN32
+ :/* Error codes from windows sockets differ from fileio error codes */
+ :#undef EINTR
+ :#define EINTR WSAEINTR
+ :#undef EINVAL
+ :#define EINVAL WSAEINVAL
+ :#undef EBADF
+ :#define EBADF WSAENOTSOCK
+ :/* Windows select does not set errno. Use GetErrno as wrapper for
+ : WSAGetLastError */
+ :#define GetErrno WSAGetLastError
+ :#else
+ :/* This is just a fallback to errno to hide the differences between unix and
+ : Windows in the code */
+ :#define GetErrno() errno
+ :#endif
+ :
+ :/* modifications by raphael */
+ :int
+ :mffs(fd_mask mask)
+ :{
+ : int i;
+ :
+ : if (!mask) return 0;
+ : i = 1;
+ : while (!(mask & 1))
+ : {
+ : i++;
+ : mask >>= 1;
+ : }
+ : return i;
+ :}
+ :
+ :#ifdef DPMSExtension
+ :#define DPMS_SERVER
+ :#include <X11/extensions/dpms.h>
+ :#endif
+ :
+ :struct _OsTimerRec {
+ : OsTimerPtr next;
+ : CARD32 expires;
+ : CARD32 delta;
+ : OsTimerCallback callback;
+ : pointer arg;
+ :};
+ :
+ :static void DoTimer(OsTimerPtr timer, CARD32 now, OsTimerPtr *prev);
+ :static void CheckAllTimers(void);
+ :static OsTimerPtr timers = NULL;
+ :
+ :/*****************
+ : * WaitForSomething:
+ : * Make the server suspend until there is
+ : * 1. data from clients or
+ : * 2. input events available or
+ : * 3. ddx notices something of interest (graphics
+ : * queue ready, etc.) or
+ : * 4. clients that have buffered replies/events are ready
+ : *
+ : * If the time between INPUT events is
+ : * greater than ScreenSaverTime, the display is turned off (or
+ : * saved, depending on the hardware). So, WaitForSomething()
+ : * has to handle this also (that's why the select() has a timeout.
+ : * For more info on ClientsWithInput, see ReadRequestFromClient().
+ : * pClientsReady is an array to store ready client->index values into.
+ : *****************/
+ :
+ :int
+ :WaitForSomething(int *pClientsReady)
+ :{ /* WaitForSomething total: 2 0.0022 */
+ : int i;
+ : struct timeval waittime, *wt;
+ : INT32 timeout = 0;
+ : fd_set clientsReadable;
+ : fd_set clientsWritable;
+ : int curclient;
+ : int selecterr;
+ : int nready;
+ : fd_set devicesReadable;
+ : CARD32 now = 0;
+ :#ifdef SMART_SCHEDULE
+ : Bool someReady = FALSE;
+ :#endif
+ :
+ : FD_ZERO(&clientsReadable);
+ :
+ : /* We need a while loop here to handle
+ : crashed connections and the screen saver timeout */
+ : while (1)
+ : {
+ : /* deal with any blocked jobs */
+ : if (workQueue)
+ : ProcessWorkQueue();
+ : if (XFD_ANYSET (&ClientsWithInput))
+ : {
+ :#ifdef SMART_SCHEDULE
+ : if (!SmartScheduleDisable)
+ : {
+ : someReady = TRUE;
+ : waittime.tv_sec = 0;
+ : waittime.tv_usec = 0;
+ : wt = &waittime;
+ : }
+ : else
+ :#endif
+ : {
+ : XFD_COPYSET (&ClientsWithInput, &clientsReadable);
+ : break;
+ : }
+ : }
+ :#ifdef SMART_SCHEDULE
+ : if (someReady)
+ : {
+ : XFD_COPYSET(&AllSockets, &LastSelectMask);
+ : XFD_UNSET(&LastSelectMask, &ClientsWithInput);
+ : }
+ : else
+ : {
+ :#endif
+ : wt = NULL;
+ : if (timers)
+ : {
+ : now = GetTimeInMillis();
+ : timeout = timers->expires - now;
+ : if (timeout > 0 && timeout > timers->delta + 250) {
+ : /* time has rewound. reset the timers. */
+ : CheckAllTimers();
+ : }
+ :
+ : if (timers) {
+ : timeout = timers->expires - now;
+ : if (timeout < 0)
+ : timeout = 0;
+ : waittime.tv_sec = timeout / MILLI_PER_SECOND;
+ : waittime.tv_usec = (timeout % MILLI_PER_SECOND) *
+ : (1000000 / MILLI_PER_SECOND);
+ : wt = &waittime;
+ : }
+ : }
+ : XFD_COPYSET(&AllSockets, &LastSelectMask);
+ :#ifdef SMART_SCHEDULE
+ : }
+ : SmartScheduleIdle = TRUE;
+ :#endif
+ : BlockHandler((pointer)&wt, (pointer)&LastSelectMask);
+ : if (NewOutputPending)
+ : FlushAllOutput();
+ : /* keep this check close to select() call to minimize race */
+ : if (dispatchException)
+ : i = -1;
+ : else if (AnyClientsWriteBlocked)
+ : {
+ : XFD_COPYSET(&ClientsWriteBlocked, &clientsWritable);
+ : i = Select (MaxClients, &LastSelectMask, &clientsWritable, NULL, wt);
+ : }
+ : else
+ : {
+ 1 0.0011 : i = Select (MaxClients, &LastSelectMask, NULL, NULL, wt);
+ : }
+ : selecterr = GetErrno();
+ : WakeupHandler(i, (pointer)&LastSelectMask);
+ :#ifdef SMART_SCHEDULE
+ : if (i >= 0)
+ : {
+ : SmartScheduleIdle = FALSE;
+ : SmartScheduleIdleCount = 0;
+ : if (SmartScheduleTimerStopped)
+ : (void) SmartScheduleStartTimer ();
+ : }
+ :#endif
+ : if (i <= 0) /* An error or timeout occurred */
+ : {
+ : if (dispatchException)
+ : return 0;
+ : if (i < 0)
+ : {
+ : if (selecterr == EBADF) /* Some client disconnected */
+ : {
+ : CheckConnections ();
+ : if (! XFD_ANYSET (&AllClients))
+ : return 0;
+ : }
+ : else if (selecterr == EINVAL)
+ : {
+ : FatalError("WaitForSomething(): select: errno=%d\n",
+ : selecterr);
+ : }
+ : else if (selecterr != EINTR)
+ : {
+ : ErrorF("WaitForSomething(): select: errno=%d\n",
+ : selecterr);
+ : }
+ : }
+ :#ifdef SMART_SCHEDULE
+ : else if (someReady)
+ : {
+ : /*
+ : * If no-one else is home, bail quickly
+ : */
+ : XFD_COPYSET(&ClientsWithInput, &LastSelectMask);
+ : XFD_COPYSET(&ClientsWithInput, &clientsReadable);
+ : break;
+ : }
+ :#endif
+ : if (*checkForInput[0] != *checkForInput[1])
+ : return 0;
+ :
+ : if (timers)
+ : {
+ : int expired = 0;
+ : now = GetTimeInMillis();
+ : if ((int) (timers->expires - now) <= 0)
+ : expired = 1;
+ :
+ : while (timers && (int) (timers->expires - now) <= 0)
+ : DoTimer(timers, now, &timers);
+ :
+ : if (expired)
+ : return 0;
+ : }
+ : }
+ : else
+ : {
+ : fd_set tmp_set;
+ :
+ : if (*checkForInput[0] == *checkForInput[1]) {
+ : if (timers)
+ : {
+ : int expired = 0;
+ : now = GetTimeInMillis();
+ : if ((int) (timers->expires - now) <= 0)
+ : expired = 1;
+ :
+ : while (timers && (int) (timers->expires - now) <= 0)
+ : DoTimer(timers, now, &timers);
+ :
+ : if (expired)
+ : return 0;
+ : }
+ : }
+ :#ifdef SMART_SCHEDULE
+ : if (someReady)
+ : XFD_ORSET(&LastSelectMask, &ClientsWithInput, &LastSelectMask);
+ :#endif
+ : if (AnyClientsWriteBlocked && XFD_ANYSET (&clientsWritable))
+ : {
+ : NewOutputPending = TRUE;
+ : XFD_ORSET(&OutputPending, &clientsWritable, &OutputPending);
+ : XFD_UNSET(&ClientsWriteBlocked, &clientsWritable);
+ : if (! XFD_ANYSET(&ClientsWriteBlocked))
+ : AnyClientsWriteBlocked = FALSE;
+ : }
+ :
+ : XFD_ANDSET(&devicesReadable, &LastSelectMask, &EnabledDevices);
+ : XFD_ANDSET(&clientsReadable, &LastSelectMask, &AllClients);
+ : XFD_ANDSET(&tmp_set, &LastSelectMask, &WellKnownConnections);
+ : if (XFD_ANYSET(&tmp_set))
+ : QueueWorkProc(EstablishNewConnections, NULL,
+ : (pointer)&LastSelectMask);
+ :
+ : if (XFD_ANYSET (&devicesReadable) || XFD_ANYSET (&clientsReadable))
+ : break;
+ :#ifdef WIN32
+ : /* Windows keyboard and mouse events are added to the input queue
+ : in Block- and WakupHandlers. There is no device to check if
+ : data is ready. So check here if new input is available */
+ : if (*checkForInput[0] != *checkForInput[1])
+ : return 0;
+ :#endif
+ : }
+ : }
+ :
+ : nready = 0;
+ : if (XFD_ANYSET (&clientsReadable))
+ : {
+ :#ifndef WIN32
+ : for (i=0; i<howmany(XFD_SETSIZE, NFDBITS); i++)
+ : {
+ : int highest_priority = 0;
+ :
+ : while (clientsReadable.fds_bits[i])
+ : {
+ : int client_priority, client_index;
+ :
+ : curclient = ffs (clientsReadable.fds_bits[i]) - 1;
+ 1 0.0011 : client_index = /* raphael: modified */
+ : ConnectionTranslation[curclient + (i * (sizeof(fd_mask) * 8))];
+ :#else
+ : int highest_priority = 0;
+ : fd_set savedClientsReadable;
+ : XFD_COPYSET(&clientsReadable, &savedClientsReadable);
+ : for (i = 0; i < XFD_SETCOUNT(&savedClientsReadable); i++)
+ : {
+ : int client_priority, client_index;
+ :
+ : curclient = XFD_FD(&savedClientsReadable, i);
+ : client_index = GetConnectionTranslation(curclient);
+ :#endif
+ :#ifdef XSYNC
+ : /* We implement "strict" priorities.
+ : * Only the highest priority client is returned to
+ : * dix. If multiple clients at the same priority are
+ : * ready, they are all returned. This means that an
+ : * aggressive client could take over the server.
+ : * This was not considered a big problem because
+ : * aggressive clients can hose the server in so many
+ : * other ways :)
+ : */
+ : client_priority = clients[client_index]->priority;
+ : if (nready == 0 || client_priority > highest_priority)
+ : {
+ : /* Either we found the first client, or we found
+ : * a client whose priority is greater than all others
+ : * that have been found so far. Either way, we want
+ : * to initialize the list of clients to contain just
+ : * this client.
+ : */
+ : pClientsReady[0] = client_index;
+ : highest_priority = client_priority;
+ : nready = 1;
+ : }
+ : /* the following if makes sure that multiple same-priority
+ : * clients get batched together
+ : */
+ : else if (client_priority == highest_priority)
+ :#endif
+ : {
+ : pClientsReady[nready++] = client_index;
+ : }
+ :#ifndef WIN32
+ : clientsReadable.fds_bits[i] &= ~(((fd_mask)1L) << curclient);
+ : }
+ :#else
+ : FD_CLR(curclient, &clientsReadable);
+ :#endif
+ : }
+ : }
+ : return nready;
+ :}
+ :
+ :#if 0
+ :/*
+ : * This is not always a macro.
+ : */
+ :ANYSET(FdMask *src)
+ :{
+ : int i;
+ :
+ : for (i=0; i<mskcnt; i++)
+ : if (src[ i ])
+ : return (TRUE);
+ : return (FALSE);
+ :}
+ :#endif
+ :
+ :/* If time has rewound, re-run every affected timer.
+ : * Timers might drop out of the list, so we have to restart every time. */
+ :static void
+ :CheckAllTimers(void)
+ :{
+ : OsTimerPtr timer;
+ : CARD32 now;
+ :
+ :start:
+ : now = GetTimeInMillis();
+ :
+ : for (timer = timers; timer; timer = timer->next) {
+ : if (timer->expires - now > timer->delta + 250) {
+ : TimerForce(timer);
+ : goto start;
+ : }
+ : }
+ :}
+ :
+ :static void
+ :DoTimer(OsTimerPtr timer, CARD32 now, OsTimerPtr *prev)
+ :{
+ : CARD32 newTime;
+ :
+ : *prev = timer->next;
+ : timer->next = NULL;
+ : newTime = (*timer->callback)(timer, now, timer->arg);
+ : if (newTime)
+ : TimerSet(timer, 0, newTime, timer->callback, timer->arg);
+ :}
+ :
+ :_X_EXPORT OsTimerPtr
+ :TimerSet(OsTimerPtr timer, int flags, CARD32 millis,
+ : OsTimerCallback func, pointer arg)
+ :{
+ : register OsTimerPtr *prev;
+ : CARD32 now = GetTimeInMillis();
+ :
+ : if (!timer)
+ : {
+ : timer = (OsTimerPtr)xalloc(sizeof(struct _OsTimerRec));
+ : if (!timer)
+ : return NULL;
+ : }
+ : else
+ : {
+ : for (prev = &timers; *prev; prev = &(*prev)->next)
+ : {
+ : if (*prev == timer)
+ : {
+ : *prev = timer->next;
+ : if (flags & TimerForceOld)
+ : (void)(*timer->callback)(timer, now, timer->arg);
+ : break;
+ : }
+ : }
+ : }
+ : if (!millis)
+ : return timer;
+ : if (flags & TimerAbsolute) {
+ : timer->delta = millis - now;
+ : }
+ : else {
+ : timer->delta = millis;
+ : millis += now;
+ : }
+ : timer->expires = millis;
+ : timer->callback = func;
+ : timer->arg = arg;
+ : if ((int) (millis - now) <= 0)
+ : {
+ : timer->next = NULL;
+ : millis = (*timer->callback)(timer, now, timer->arg);
+ : if (!millis)
+ : return timer;
+ : }
+ : for (prev = &timers;
+ : *prev && (int) ((*prev)->expires - millis) <= 0;
+ : prev = &(*prev)->next)
+ : ;
+ : timer->next = *prev;
+ : *prev = timer;
+ : return timer;
+ :}
+ :
+ :Bool
+ :TimerForce(OsTimerPtr timer)
+ :{
+ : OsTimerPtr *prev;
+ :
+ : for (prev = &timers; *prev; prev = &(*prev)->next)
+ : {
+ : if (*prev == timer)
+ : {
+ : DoTimer(timer, GetTimeInMillis(), prev);
+ : return TRUE;
+ : }
+ : }
+ : return FALSE;
+ :}
+ :
+ :
+ :_X_EXPORT void
+ :TimerCancel(OsTimerPtr timer)
+ :{
+ : OsTimerPtr *prev;
+ :
+ : if (!timer)
+ : return;
+ : for (prev = &timers; *prev; prev = &(*prev)->next)
+ : {
+ : if (*prev == timer)
+ : {
+ : *prev = timer->next;
+ : break;
+ : }
+ : }
+ :}
+ :
+ :_X_EXPORT void
+ :TimerFree(OsTimerPtr timer)
+ :{
+ : if (!timer)
+ : return;
+ : TimerCancel(timer);
+ : xfree(timer);
+ :}
+ :
+ :void
+ :TimerCheck(void)
+ :{
+ : CARD32 now = GetTimeInMillis();
+ :
+ : while (timers && (int) (timers->expires - now) <= 0)
+ : DoTimer(timers, now, &timers);
+ :}
+ :
+ :void
+ :TimerInit(void)
+ :{
+ : OsTimerPtr timer;
+ :
+ : while ((timer = timers))
+ : {
+ : timers = timer->next;
+ : xfree(timer);
+ : }
+ :}
+ :
+ :#ifdef DPMSExtension
+ :
+ :#define DPMS_CHECK_MODE(mode,time)\
+ : if (time > 0 && DPMSPowerLevel < mode && timeout >= time)\
+ : DPMSSet(mode);
+ :
+ :#define DPMS_CHECK_TIMEOUT(time)\
+ : if (time > 0 && (time - timeout) > 0)\
+ : return time - timeout;
+ :
+ :static CARD32
+ :NextDPMSTimeout(INT32 timeout)
+ :{
+ : /*
+ : * Return the amount of time remaining until we should set
+ : * the next power level. Fallthroughs are intentional.
+ : */
+ : switch (DPMSPowerLevel)
+ : {
+ : case DPMSModeOn:
+ : DPMS_CHECK_TIMEOUT(DPMSStandbyTime)
+ :
+ : case DPMSModeStandby:
+ : DPMS_CHECK_TIMEOUT(DPMSSuspendTime)
+ :
+ : case DPMSModeSuspend:
+ : DPMS_CHECK_TIMEOUT(DPMSOffTime)
+ :
+ : default: /* DPMSModeOff */
+ : return 0;
+ : }
+ :}
+ :#endif /* DPMSExtension */
+ :
+ :static CARD32
+ :ScreenSaverTimeoutExpire(OsTimerPtr timer,CARD32 now,pointer arg)
+ :{
+ : INT32 timeout = now - lastDeviceEventTime.milliseconds;
+ : CARD32 nextTimeout = 0;
+ :
+ :#ifdef DPMSExtension
+ : /*
+ : * Check each mode lowest to highest, since a lower mode can
+ : * have the same timeout as a higher one.
+ : */
+ : if (DPMSEnabled)
+ : {
+ : DPMS_CHECK_MODE(DPMSModeOff, DPMSOffTime)
+ : DPMS_CHECK_MODE(DPMSModeSuspend, DPMSSuspendTime)
+ : DPMS_CHECK_MODE(DPMSModeStandby, DPMSStandbyTime)
+ :
+ : nextTimeout = NextDPMSTimeout(timeout);
+ : }
+ :
+ : /*
+ : * Only do the screensaver checks if we're not in a DPMS
+ : * power saving mode
+ : */
+ : if (DPMSPowerLevel != DPMSModeOn)
+ : return nextTimeout;
+ :#endif /* DPMSExtension */
+ :
+ : if (!ScreenSaverTime)
+ : return nextTimeout;
+ :
+ : if (timeout < ScreenSaverTime)
+ : {
+ : return nextTimeout > 0 ?
+ : min(ScreenSaverTime - timeout, nextTimeout) :
+ : ScreenSaverTime - timeout;
+ : }
+ :
+ : ResetOsBuffers(); /* not ideal, but better than nothing */
+ : SaveScreens(SCREEN_SAVER_ON, ScreenSaverActive);
+ :
+ : if (ScreenSaverInterval > 0)
+ : {
+ : nextTimeout = nextTimeout > 0 ?
+ : min(ScreenSaverInterval, nextTimeout) :
+ : ScreenSaverInterval;
+ : }
+ :
+ : return nextTimeout;
+ :}
+ :
+ :static OsTimerPtr ScreenSaverTimer = NULL;
+ :
+ :void
+ :FreeScreenSaverTimer(void)
+ :{
+ : if (ScreenSaverTimer) {
+ : TimerFree(ScreenSaverTimer);
+ : ScreenSaverTimer = NULL;
+ : }
+ :}
+ :
+ :void
+ :SetScreenSaverTimer(void)
+ :{
+ : CARD32 timeout = 0;
+ :
+ :#ifdef DPMSExtension
+ : if (DPMSEnabled)
+ : {
+ : /*
+ : * A higher DPMS level has a timeout that's either less
+ : * than or equal to that of a lower DPMS level.
+ : */
+ : if (DPMSStandbyTime > 0)
+ : timeout = DPMSStandbyTime;
+ :
+ : else if (DPMSSuspendTime > 0)
+ : timeout = DPMSSuspendTime;
+ :
+ : else if (DPMSOffTime > 0)
+ : timeout = DPMSOffTime;
+ : }
+ :#endif
+ :
+ : if (ScreenSaverTime > 0)
+ : {
+ : timeout = timeout > 0 ?
+ : min(ScreenSaverTime, timeout) :
+ : ScreenSaverTime;
+ : }
+ :
+ :#ifdef SCREENSAVER
+ : if (timeout && !screenSaverSuspended) {
+ :#else
+ : if (timeout) {
+ :#endif
+ : ScreenSaverTimer = TimerSet(ScreenSaverTimer, 0, timeout,
+ : ScreenSaverTimeoutExpire, NULL);
+ : }
+ : else if (ScreenSaverTimer) {
+ : FreeScreenSaverTimer();
+ : }
+ :}
+ :
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/fb/fballpriv.c"
+ *
+ * 2 0.0022
+ */
+
+
+ :/*
+ : * Copyright © 1998 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "fb.h"
+ :
+ :#ifdef FB_SCREEN_PRIVATE
+ :int fbScreenPrivateIndex;
+ :int fbGetScreenPrivateIndex(void)
+ :{
+ : return fbScreenPrivateIndex;
+ :}
+ :#endif
+ :int fbGCPrivateIndex;
+ :int fbGetGCPrivateIndex(void)
+ 2 0.0022 :{ /* fbGetGCPrivateIndex total: 2 0.0022 */
+ : return fbGCPrivateIndex;
+ :}
+ :#ifndef FB_NO_WINDOW_PIXMAPS
+ :int fbWinPrivateIndex;
+ :int fbGetWinPrivateIndex(void)
+ :{
+ : return fbWinPrivateIndex;
+ :}
+ :#endif
+ :int fbGeneration;
+ :
+ :#ifdef FB_OLD_SCREEN
+ :#define miAllocateGCPrivateIndex() AllocateGCPrivateIndex()
+ :#endif
+ :
+ :Bool
+ :fbAllocatePrivates(ScreenPtr pScreen, int *pGCIndex)
+ :{
+ : if (fbGeneration != serverGeneration)
+ : {
+ : fbGCPrivateIndex = miAllocateGCPrivateIndex ();
+ :#ifndef FB_NO_WINDOW_PIXMAPS
+ : fbWinPrivateIndex = AllocateWindowPrivateIndex();
+ :#endif
+ :#ifdef FB_SCREEN_PRIVATE
+ : fbScreenPrivateIndex = AllocateScreenPrivateIndex ();
+ : if (fbScreenPrivateIndex == -1)
+ : return FALSE;
+ :#endif
+ :
+ : fbGeneration = serverGeneration;
+ : }
+ : if (pGCIndex)
+ : *pGCIndex = fbGCPrivateIndex;
+ : if (!AllocateGCPrivate(pScreen, fbGCPrivateIndex, sizeof(FbGCPrivRec)))
+ : return FALSE;
+ :#ifndef FB_NO_WINDOW_PIXMAPS
+ : if (!AllocateWindowPrivate(pScreen, fbWinPrivateIndex, 0))
+ : return FALSE;
+ :#endif
+ :#ifdef FB_SCREEN_PRIVATE
+ : {
+ : FbScreenPrivPtr pScreenPriv;
+ :
+ : pScreenPriv = (FbScreenPrivPtr) xalloc (sizeof (FbScreenPrivRec));
+ : if (!pScreenPriv)
+ : return FALSE;
+ : pScreen->devPrivates[fbScreenPrivateIndex].ptr = (pointer) pScreenPriv;
+ : }
+ :#endif
+ : return TRUE;
+ :}
+ :
+ :#ifdef FB_ACCESS_WRAPPER
+ :ReadMemoryProcPtr wfbReadMemory;
+ :WriteMemoryProcPtr wfbWriteMemory;
+ :#endif
+/*
+ * Total samples for file : "/home/cworth/opt/xorg//include/X11/Xtrans/Xtranssock.c"
+ *
+ * 2 0.0022
+ */
+
+
+ :/* $XdotOrg: lib/xtrans/Xtranssock.c,v 1.11 2005/11/08 06:33:26 jkj Exp $ */
+ :/* $Xorg: Xtranssock.c,v 1.11 2001/02/09 02:04:06 xorgcvs Exp $ */
+ :/*
+ :
+ :Copyright 1993, 1994, 1998 The Open Group
+ :Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included
+ :in all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ :OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ :MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ :IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ :OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ :ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ :OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of the copyright holders shall
+ :not be used in advertising or otherwise to promote the sale, use or
+ :other dealings in this Software without prior written authorization
+ :from the copyright holders.
+ :
+ :*/
+ :/* $XFree86: xc/lib/xtrans/Xtranssock.c,v 3.68 2004/01/07 04:28:02 dawes Exp $ */
+ :
+ :/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ : *
+ : * All Rights Reserved
+ : *
+ : * Permission to use, copy, modify, and distribute this software and its
+ : * documentation for any purpose and without fee is hereby granted, 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 NCR not be used in advertising
+ : * or publicity pertaining to distribution of the software without specific,
+ : * written prior permission. NCR makes no representations about the
+ : * suitability of this software for any purpose. It is provided "as is"
+ : * without express or implied warranty.
+ : *
+ : * NCR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ : * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
+ : * NO EVENT SHALL NCR 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 <ctype.h>
+ :#ifdef XTHREADS
+ :#include <X11/Xthreads.h>
+ :#endif
+ :
+ :#ifndef WIN32
+ :
+ :#if defined(TCPCONN) || defined(UNIXCONN)
+ :#include <sys/socket.h>
+ :#include <netinet/in.h>
+ :#include <arpa/inet.h>
+ :#endif
+ :
+ :#if defined(TCPCONN) || defined(UNIXCONN)
+ :#define X_INCLUDE_NETDB_H
+ :#define XOS_USE_NO_LOCKING
+ :#include <X11/Xos_r.h>
+ :#endif
+ :
+ :#ifdef UNIXCONN
+ :#ifndef X_NO_SYS_UN
+ :#ifndef Lynx
+ :#include <sys/un.h>
+ :#else
+ :#include <un.h>
+ :#endif
+ :#endif
+ :#include <sys/stat.h>
+ :#endif
+ :
+ :#if defined(hpux) || (defined(MOTOROLA) && defined(SYSV))
+ :#define NO_TCP_H
+ :#endif
+ :
+ :#ifndef NO_TCP_H
+ :#if defined(__osf__) || defined(linux) || defined(__GLIBC__) || defined(AIXV5)
+ :#include <sys/param.h>
+ :#endif /* osf */
+ :#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
+ :#include <sys/param.h>
+ :#include <machine/endian.h>
+ :#endif /* __NetBSD__ || __OpenBSD__ || __FreeBSD__ || __DragonFly__ */
+ :#include <netinet/tcp.h>
+ :#endif /* !NO_TCP_H */
+ :
+ :#include <sys/ioctl.h>
+ :#if defined(SVR4) && !defined(DGUX) && !defined(_SEQUENT_)
+ :#include <sys/filio.h>
+ :#endif
+ :
+ :#if (defined(i386) && defined(SYSV)) && !defined(SCO325) && !defined(sun)
+ :#include <net/errno.h>
+ :#endif
+ :
+ :#if (defined(i386) && defined(SYSV)) && (!defined(ISC) || !defined(I_NREAD) || defined(SCO325)) || defined(_SEQUENT_)
+ :#include <sys/stropts.h>
+ :#endif
+ :
+ :#else /* !WIN32 */
+ :
+ :#include <X11/Xwinsock.h>
+ :#include <X11/Xwindows.h>
+ :#include <X11/Xw32defs.h>
+ :#undef close
+ :#define close closesocket
+ :#define ECONNREFUSED WSAECONNREFUSED
+ :#define EADDRINUSE WSAEADDRINUSE
+ :#define EPROTOTYPE WSAEPROTOTYPE
+ :#undef EWOULDBLOCK
+ :#define EWOULDBLOCK WSAEWOULDBLOCK
+ :#define EINPROGRESS WSAEINPROGRESS
+ :#undef EINTR
+ :#define EINTR WSAEINTR
+ :#define X_INCLUDE_NETDB_H
+ :#define XOS_USE_MTSAFE_NETDBAPI
+ :#include <X11/Xos_r.h>
+ :#endif /* WIN32 */
+ :
+ :#if defined(SO_DONTLINGER) && defined(SO_LINGER)
+ :#undef SO_DONTLINGER
+ :#endif
+ :
+ :#if defined(__UNIXOS2__)
+ :#if defined(NOT_EMX09A)
+ :static int IBMsockInit = 0;
+ :#define SocketInitOnce()\
+ : if (!IBMsockInit) {\
+ : sock_init();\
+ : IBMsockInit = 1;\
+ : }
+ :#undef EINTR
+ :#define EINTR SOCEINTR
+ :#undef EINVAL
+ :#define EINVAL SOCEINVAL
+ :#undef errno
+ :#define errno sock_errno()
+ :#undef close
+ :#define close soclose
+ :#undef ioctl
+ :#define ioctl sockioctl
+ :#else
+ :#define SocketInitOnce() /**/
+ :#endif
+ :/* this is still not there */
+ :#define SOCKET int
+ :#else
+ :/* others don't need this */
+ :#define SocketInitOnce() /**/
+ :#endif
+ :
+ :#define MIN_BACKLOG 128
+ :#ifdef SOMAXCONN
+ :#if SOMAXCONN > MIN_BACKLOG
+ :#define BACKLOG SOMAXCONN
+ :#endif
+ :#endif
+ :#ifndef BACKLOG
+ :#define BACKLOG MIN_BACKLOG
+ :#endif
+ :/*
+ : * This is the Socket implementation of the X Transport service layer
+ : *
+ : * This file contains the implementation for both the UNIX and INET domains,
+ : * and can be built for either one, or both.
+ : *
+ : */
+ :
+ :typedef struct _Sockettrans2dev {
+ : char *transname;
+ : int family;
+ : int devcotsname;
+ : int devcltsname;
+ : int protocol;
+ :} Sockettrans2dev;
+ :
+ :static Sockettrans2dev Sockettrans2devtab[] = {
+ :#ifdef TCPCONN
+ : {"inet",AF_INET,SOCK_STREAM,SOCK_DGRAM,0},
+ :#if !defined(IPv6) || !defined(AF_INET6)
+ : {"tcp",AF_INET,SOCK_STREAM,SOCK_DGRAM,0},
+ :#else /* IPv6 */
+ : {"tcp",AF_INET6,SOCK_STREAM,SOCK_DGRAM,0},
+ : {"tcp",AF_INET,SOCK_STREAM,SOCK_DGRAM,0}, /* fallback */
+ : {"inet6",AF_INET6,SOCK_STREAM,SOCK_DGRAM,0},
+ :#endif
+ :#endif /* TCPCONN */
+ :#ifdef UNIXCONN
+ : {"unix",AF_UNIX,SOCK_STREAM,SOCK_DGRAM,0},
+ :#if !defined(LOCALCONN)
+ : {"local",AF_UNIX,SOCK_STREAM,SOCK_DGRAM,0},
+ :#endif /* !LOCALCONN */
+ :#endif /* UNIXCONN */
+ :};
+ :
+ :#define NUMSOCKETFAMILIES (sizeof(Sockettrans2devtab)/sizeof(Sockettrans2dev))
+ :
+ :#ifdef TCPCONN
+ :static int TRANS(SocketINETClose) (XtransConnInfo ciptr);
+ :#endif
+ :
+ :#ifdef UNIXCONN
+ :
+ :#ifdef hpux
+ :
+ :#if defined(X11_t)
+ :#define UNIX_PATH "/usr/spool/sockets/X11/"
+ :#define UNIX_DIR "/usr/spool/sockets/X11"
+ :#define OLD_UNIX_PATH "/tmp/.X11-unix/X"
+ :#endif /* X11_t */
+ :#if defined(XIM_t)
+ :#define UNIX_PATH "/usr/spool/sockets/XIM/"
+ :#define UNIX_DIR "/usr/spool/sockets/XIM"
+ :#define OLD_UNIX_PATH "/tmp/.XIM-unix/XIM"
+ :#endif /* XIM_t */
+ :#if defined(FS_t) || defined(FONT_t)
+ :#define UNIX_PATH "/usr/spool/sockets/fontserv/"
+ :#define UNIX_DIR "/usr/spool/sockets/fontserv"
+ :#endif /* FS_t || FONT_t */
+ :#if defined(ICE_t)
+ :#define UNIX_PATH "/usr/spool/sockets/ICE/"
+ :#define UNIX_DIR "/usr/spool/sockets/ICE"
+ :#endif /* ICE_t */
+ :#if defined(TEST_t)
+ :#define UNIX_PATH "/usr/spool/sockets/xtrans_test/"
+ :#define UNIX_DIR "/usr/spool/sockets/xtrans_test"
+ :#endif
+ :#if defined(LBXPROXY_t)
+ :#define UNIX_PATH "/usr/spool/sockets/X11/"
+ :#define UNIX_DIR "/usr/spool/sockets/X11"
+ :#endif
+ :
+ :#else /* !hpux */
+ :
+ :#if defined(X11_t)
+ :#define UNIX_PATH "/tmp/.X11-unix/X"
+ :#define UNIX_DIR "/tmp/.X11-unix"
+ :#endif /* X11_t */
+ :#if defined(XIM_t)
+ :#define UNIX_PATH "/tmp/.XIM-unix/XIM"
+ :#define UNIX_DIR "/tmp/.XIM-unix"
+ :#endif /* XIM_t */
+ :#if defined(FS_t) || defined(FONT_t)
+ :#define UNIX_PATH "/tmp/.font-unix/fs"
+ :#define UNIX_DIR "/tmp/.font-unix"
+ :#endif /* FS_t || FONT_t */
+ :#if defined(ICE_t)
+ :#define UNIX_PATH "/tmp/.ICE-unix/"
+ :#define UNIX_DIR "/tmp/.ICE-unix"
+ :#endif /* ICE_t */
+ :#if defined(TEST_t)
+ :#define UNIX_PATH "/tmp/.Test-unix/test"
+ :#define UNIX_DIR "/tmp/.Test-unix"
+ :#endif
+ :#if defined(LBXPROXY_t)
+ :#define UNIX_PATH "/tmp/.X11-unix/X"
+ :#define UNIX_DIR "/tmp/.X11-unix"
+ :#endif
+ :
+ :#endif /* hpux */
+ :
+ :#endif /* UNIXCONN */
+ :
+ :#define PORTBUFSIZE 32
+ :
+ :#ifndef MAXHOSTNAMELEN
+ :#define MAXHOSTNAMELEN 255
+ :#endif
+ :
+ :/*
+ : * This provides compatibility for apps linked against system libraries
+ : * that don't have IPv6 support.
+ : */
+ :#if defined(IPv6) && defined(AF_INET6)
+ :static const struct in6_addr local_in6addr_any = IN6ADDR_ANY_INIT;
+ :#pragma weak in6addr_any = local_in6addr_any
+ :#ifndef __USLC__
+ :#pragma weak getaddrinfo
+ :#endif
+ :static int haveIPv6 = 1;
+ :#endif
+ :
+ :/*
+ : * These are some utility function used by the real interface function below.
+ : */
+ :
+ :static int
+ :TRANS(SocketSelectFamily) (int first, char *family)
+ :
+ :{
+ : int i;
+ :
+ : PRMSG (3,"SocketSelectFamily(%s)\n", family, 0, 0);
+ :
+ : for (i = first + 1; i < NUMSOCKETFAMILIES;i++)
+ : {
+ : if (!strcmp (family, Sockettrans2devtab[i].transname))
+ : return i;
+ : }
+ :
+ : return (first == -1 ? -2 : -1);
+ :}
+ :
+ :
+ :/*
+ : * This function gets the local address of the socket and stores it in the
+ : * XtransConnInfo structure for the connection.
+ : */
+ :
+ :static int
+ :TRANS(SocketINETGetAddr) (XtransConnInfo ciptr)
+ :
+ :{
+ :#if defined(IPv6) && defined(AF_INET6)
+ : struct sockaddr_storage socknamev6;
+ :#endif
+ : struct sockaddr_in socknamev4;
+ : void *socknamePtr;
+ :#if defined(SVR4) || defined(__SCO__)
+ : size_t namelen;
+ :#else
+ : int namelen;
+ :#endif
+ :
+ : PRMSG (3,"SocketINETGetAddr(%p)\n", ciptr, 0, 0);
+ :
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if (haveIPv6)
+ : {
+ : namelen = sizeof(socknamev6);
+ : socknamePtr = &socknamev6;
+ : }
+ : else
+ :#endif
+ : {
+ : namelen = sizeof(socknamev4);
+ : socknamePtr = &socknamev4;
+ : }
+ :
+ : bzero(socknamePtr, namelen);
+ :
+ : if (getsockname (ciptr->fd,(struct sockaddr *) socknamePtr,
+ : (void *)&namelen) < 0)
+ : {
+ :#ifdef WIN32
+ : errno = WSAGetLastError();
+ :#endif
+ : PRMSG (1,"SocketINETGetAddr: getsockname() failed: %d\n",
+ : EGET(),0, 0);
+ : return -1;
+ : }
+ :
+ : /*
+ : * Everything looks good: fill in the XtransConnInfo structure.
+ : */
+ :
+ : if ((ciptr->addr = (char *) xalloc (namelen)) == NULL)
+ : {
+ : PRMSG (1,
+ : "SocketINETGetAddr: Can't allocate space for the addr\n",
+ : 0, 0, 0);
+ : return -1;
+ : }
+ :
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if (haveIPv6)
+ : {
+ : ciptr->family = ((struct sockaddr *)socknamePtr)->sa_family;
+ : }
+ : else
+ :#endif
+ : {
+ : ciptr->family = socknamev4.sin_family;
+ : }
+ : ciptr->addrlen = namelen;
+ : memcpy (ciptr->addr, socknamePtr, ciptr->addrlen);
+ :
+ : return 0;
+ :}
+ :
+ :
+ :/*
+ : * This function gets the remote address of the socket and stores it in the
+ : * XtransConnInfo structure for the connection.
+ : */
+ :
+ :static int
+ :TRANS(SocketINETGetPeerAddr) (XtransConnInfo ciptr)
+ :
+ :{
+ :#if defined(IPv6) && defined(AF_INET6)
+ : struct sockaddr_storage socknamev6;
+ :#endif
+ : struct sockaddr_in socknamev4;
+ : void *socknamePtr;
+ :#if defined(SVR4) || defined(__SCO__)
+ : size_t namelen;
+ :#else
+ : int namelen;
+ :#endif
+ :
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if (haveIPv6 && ciptr->family == AF_INET6)
+ : {
+ : namelen = sizeof(socknamev6);
+ : socknamePtr = &socknamev6;
+ : }
+ : else
+ :#endif
+ : {
+ : namelen = sizeof(socknamev4);
+ : socknamePtr = &socknamev4;
+ : }
+ :
+ : bzero(socknamePtr, namelen);
+ :
+ : PRMSG (3,"SocketINETGetPeerAddr(%p)\n", ciptr, 0, 0);
+ :
+ : if (getpeername (ciptr->fd, (struct sockaddr *) socknamePtr,
+ : (void *)&namelen) < 0)
+ : {
+ :#ifdef WIN32
+ : errno = WSAGetLastError();
+ :#endif
+ : PRMSG (1,"SocketINETGetPeerAddr: getpeername() failed: %d\n",
+ : EGET(), 0, 0);
+ : return -1;
+ : }
+ :
+ : /*
+ : * Everything looks good: fill in the XtransConnInfo structure.
+ : */
+ :
+ : if ((ciptr->peeraddr = (char *) xalloc (namelen)) == NULL)
+ : {
+ : PRMSG (1,
+ : "SocketINETGetPeerAddr: Can't allocate space for the addr\n",
+ : 0, 0, 0);
+ : return -1;
+ : }
+ :
+ : ciptr->peeraddrlen = namelen;
+ : memcpy (ciptr->peeraddr, socknamePtr, ciptr->peeraddrlen);
+ :
+ : return 0;
+ :}
+ :
+ :
+ :static XtransConnInfo
+ :TRANS(SocketOpen) (int i, int type)
+ :
+ :{
+ : XtransConnInfo ciptr;
+ :
+ : PRMSG (3,"SocketOpen(%d,%d)\n", i, type, 0);
+ :
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if (getaddrinfo == NULL)
+ : haveIPv6 = 0;
+ :
+ : if (!haveIPv6 && Sockettrans2devtab[i].family == AF_INET6)
+ : return NULL;
+ :#endif
+ :
+ : if ((ciptr = (XtransConnInfo) xcalloc (
+ : 1, sizeof(struct _XtransConnInfo))) == NULL)
+ : {
+ : PRMSG (1, "SocketOpen: malloc failed\n", 0, 0, 0);
+ : return NULL;
+ : }
+ :
+ : if ((ciptr->fd = socket(Sockettrans2devtab[i].family, type,
+ : Sockettrans2devtab[i].protocol)) < 0
+ :#ifndef WIN32
+ :#if (defined(X11_t) && !defined(USE_POLL)) || defined(FS_t) || defined(FONT_t)
+ : || ciptr->fd >= TRANS_OPEN_MAX
+ :#endif
+ :#endif
+ : ) {
+ :#ifdef WIN32
+ : errno = WSAGetLastError();
+ :#endif
+ : PRMSG (2, "SocketOpen: socket() failed for %s\n",
+ : Sockettrans2devtab[i].transname, 0, 0);
+ :
+ : xfree ((char *) ciptr);
+ : return NULL;
+ : }
+ :
+ :#ifdef TCP_NODELAY
+ : if (Sockettrans2devtab[i].family == AF_INET
+ :#if defined(IPv6) && defined(AF_INET6)
+ : || Sockettrans2devtab[i].family == AF_INET6
+ :#endif
+ : )
+ : {
+ : /*
+ : * turn off TCP coalescence for INET sockets
+ : */
+ :
+ : int tmp = 1;
+ : setsockopt (ciptr->fd, IPPROTO_TCP, TCP_NODELAY,
+ : (char *) &tmp, sizeof (int));
+ : }
+ :#endif
+ :
+ : return ciptr;
+ :}
+ :
+ :
+ :#ifdef TRANS_REOPEN
+ :
+ :static XtransConnInfo
+ :TRANS(SocketReopen) (int i, int type, int fd, char *port)
+ :
+ :{
+ : XtransConnInfo ciptr;
+ :
+ : PRMSG (3,"SocketReopen(%d,%d,%s)\n", type, fd, port);
+ :
+ : if ((ciptr = (XtransConnInfo) xcalloc (
+ : 1, sizeof(struct _XtransConnInfo))) == NULL)
+ : {
+ : PRMSG (1, "SocketReopen: malloc failed\n", 0, 0, 0);
+ : return NULL;
+ : }
+ :
+ : ciptr->fd = fd;
+ :
+ : return ciptr;
+ :}
+ :
+ :#endif /* TRANS_REOPEN */
+ :
+ :
+ :/*
+ : * These functions are the interface supplied in the Xtransport structure
+ : */
+ :
+ :#ifdef TRANS_CLIENT
+ :
+ :static XtransConnInfo
+ :TRANS(SocketOpenCOTSClientBase) (char *transname, char *protocol,
+ : char *host, char *port, int previndex)
+ :{
+ : XtransConnInfo ciptr;
+ : int i = previndex;
+ :
+ : PRMSG (2, "SocketOpenCOTSClient(%s,%s,%s)\n",
+ : protocol, host, port);
+ :
+ : SocketInitOnce();
+ :
+ : while ((i = TRANS(SocketSelectFamily) (i, transname)) >= 0) {
+ : if ((ciptr = TRANS(SocketOpen) (
+ : i, Sockettrans2devtab[i].devcotsname)) != NULL)
+ : break;
+ : }
+ : if (i < 0) {
+ : if (i == -1)
+ : PRMSG (1,"SocketOpenCOTSClient: Unable to open socket for %s\n",
+ : transname, 0, 0);
+ : else
+ : PRMSG (1,"SocketOpenCOTSClient: Unable to determine socket type for %s\n",
+ : transname, 0, 0);
+ : return NULL;
+ : }
+ :
+ : /* Save the index for later use */
+ :
+ : ciptr->index = i;
+ :
+ : return ciptr;
+ :}
+ :
+ :static XtransConnInfo
+ :TRANS(SocketOpenCOTSClient) (Xtransport *thistrans, char *protocol,
+ : char *host, char *port)
+ :{
+ : return TRANS(SocketOpenCOTSClientBase)(
+ : thistrans->TransName, protocol, host, port, -1);
+ :}
+ :
+ :
+ :#endif /* TRANS_CLIENT */
+ :
+ :
+ :#ifdef TRANS_SERVER
+ :
+ :static XtransConnInfo
+ :TRANS(SocketOpenCOTSServer) (Xtransport *thistrans, char *protocol,
+ : char *host, char *port)
+ :
+ :{
+ : XtransConnInfo ciptr;
+ : int i = -1;
+ :
+ : PRMSG (2,"SocketOpenCOTSServer(%s,%s,%s)\n", protocol, host, port);
+ :
+ : SocketInitOnce();
+ :
+ : while ((i = TRANS(SocketSelectFamily) (i, thistrans->TransName)) >= 0) {
+ : if ((ciptr = TRANS(SocketOpen) (
+ : i, Sockettrans2devtab[i].devcotsname)) != NULL)
+ : break;
+ : }
+ : if (i < 0) {
+ : if (i == -1)
+ : PRMSG (1,"SocketOpenCOTSServer: Unable to open socket for %s\n",
+ : thistrans->TransName, 0, 0);
+ : else
+ : PRMSG (1,"SocketOpenCOTSServer: Unable to determine socket type for %s\n",
+ : thistrans->TransName, 0, 0);
+ : return NULL;
+ : }
+ :
+ : /*
+ : * Using this prevents the bind() check for an existing server listening
+ : * on the same port, but it is required for other reasons.
+ : */
+ :#ifdef SO_REUSEADDR
+ :
+ : /*
+ : * SO_REUSEADDR only applied to AF_INET && AF_INET6
+ : */
+ :
+ : if (Sockettrans2devtab[i].family == AF_INET
+ :#if defined(IPv6) && defined(AF_INET6)
+ : || Sockettrans2devtab[i].family == AF_INET6
+ :#endif
+ : )
+ : {
+ : int one = 1;
+ : setsockopt (ciptr->fd, SOL_SOCKET, SO_REUSEADDR,
+ : (char *) &one, sizeof (int));
+ : }
+ :#endif
+ :#ifdef IPV6_V6ONLY
+ : if (Sockettrans2devtab[i].family == AF_INET6)
+ : {
+ : int one = 1;
+ : setsockopt(ciptr->fd, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(int));
+ : }
+ :#endif
+ : /* Save the index for later use */
+ :
+ : ciptr->index = i;
+ :
+ : return ciptr;
+ :}
+ :
+ :#endif /* TRANS_SERVER */
+ :
+ :
+ :#ifdef TRANS_CLIENT
+ :
+ :static XtransConnInfo
+ :TRANS(SocketOpenCLTSClient) (Xtransport *thistrans, char *protocol,
+ : char *host, char *port)
+ :
+ :{
+ : XtransConnInfo ciptr;
+ : int i = -1;
+ :
+ : PRMSG (2,"SocketOpenCLTSClient(%s,%s,%s)\n", protocol, host, port);
+ :
+ : SocketInitOnce();
+ :
+ : while ((i = TRANS(SocketSelectFamily) (i, thistrans->TransName)) >= 0) {
+ : if ((ciptr = TRANS(SocketOpen) (
+ : i, Sockettrans2devtab[i].devcotsname)) != NULL)
+ : break;
+ : }
+ : if (i < 0) {
+ : if (i == -1)
+ : PRMSG (1,"SocketOpenCLTSClient: Unable to open socket for %s\n",
+ : thistrans->TransName, 0, 0);
+ : else
+ : PRMSG (1,"SocketOpenCLTSClient: Unable to determine socket type for %s\n",
+ : thistrans->TransName, 0, 0);
+ : return NULL;
+ : }
+ :
+ : /* Save the index for later use */
+ :
+ : ciptr->index = i;
+ :
+ : return ciptr;
+ :}
+ :
+ :#endif /* TRANS_CLIENT */
+ :
+ :
+ :#ifdef TRANS_SERVER
+ :
+ :static XtransConnInfo
+ :TRANS(SocketOpenCLTSServer) (Xtransport *thistrans, char *protocol,
+ : char *host, char *port)
+ :
+ :{
+ : XtransConnInfo ciptr;
+ : int i = -1;
+ :
+ : PRMSG (2,"SocketOpenCLTSServer(%s,%s,%s)\n", protocol, host, port);
+ :
+ : SocketInitOnce();
+ :
+ : while ((i = TRANS(SocketSelectFamily) (i, thistrans->TransName)) >= 0) {
+ : if ((ciptr = TRANS(SocketOpen) (
+ : i, Sockettrans2devtab[i].devcotsname)) != NULL)
+ : break;
+ : }
+ : if (i < 0) {
+ : if (i == -1)
+ : PRMSG (1,"SocketOpenCLTSServer: Unable to open socket for %s\n",
+ : thistrans->TransName, 0, 0);
+ : else
+ : PRMSG (1,"SocketOpenCLTSServer: Unable to determine socket type for %s\n",
+ : thistrans->TransName, 0, 0);
+ : return NULL;
+ : }
+ :
+ :#ifdef IPV6_V6ONLY
+ : if (Sockettrans2devtab[i].family == AF_INET6)
+ : {
+ : int one = 1;
+ : setsockopt(ciptr->fd, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(int));
+ : }
+ :#endif
+ : /* Save the index for later use */
+ :
+ : ciptr->index = i;
+ :
+ : return ciptr;
+ :}
+ :
+ :#endif /* TRANS_SERVER */
+ :
+ :
+ :#ifdef TRANS_REOPEN
+ :
+ :static XtransConnInfo
+ :TRANS(SocketReopenCOTSServer) (Xtransport *thistrans, int fd, char *port)
+ :
+ :{
+ : XtransConnInfo ciptr;
+ : int i = -1;
+ :
+ : PRMSG (2,
+ : "SocketReopenCOTSServer(%d, %s)\n", fd, port, 0);
+ :
+ : SocketInitOnce();
+ :
+ : while ((i = TRANS(SocketSelectFamily) (i, thistrans->TransName)) >= 0) {
+ : if ((ciptr = TRANS(SocketReopen) (
+ : i, Sockettrans2devtab[i].devcotsname, fd, port)) != NULL)
+ : break;
+ : }
+ : if (i < 0) {
+ : if (i == -1)
+ : PRMSG (1,"SocketReopenCOTSServer: Unable to open socket for %s\n",
+ : thistrans->TransName, 0, 0);
+ : else
+ : PRMSG (1,"SocketReopenCOTSServer: Unable to determine socket type for %s\n",
+ : thistrans->TransName, 0, 0);
+ : return NULL;
+ : }
+ :
+ : /* Save the index for later use */
+ :
+ : ciptr->index = i;
+ :
+ : return ciptr;
+ :}
+ :
+ :static XtransConnInfo
+ :TRANS(SocketReopenCLTSServer) (Xtransport *thistrans, int fd, char *port)
+ :
+ :{
+ : XtransConnInfo ciptr;
+ : int i = -1;
+ :
+ : PRMSG (2,
+ : "SocketReopenCLTSServer(%d, %s)\n", fd, port, 0);
+ :
+ : SocketInitOnce();
+ :
+ : while ((i = TRANS(SocketSelectFamily) (i, thistrans->TransName)) >= 0) {
+ : if ((ciptr = TRANS(SocketReopen) (
+ : i, Sockettrans2devtab[i].devcotsname, fd, port)) != NULL)
+ : break;
+ : }
+ : if (i < 0) {
+ : if (i == -1)
+ : PRMSG (1,"SocketReopenCLTSServer: Unable to open socket for %s\n",
+ : thistrans->TransName, 0, 0);
+ : else
+ : PRMSG (1,"SocketReopenCLTSServer: Unable to determine socket type for %s\n",
+ : thistrans->TransName, 0, 0);
+ : return NULL;
+ : }
+ :
+ : /* Save the index for later use */
+ :
+ : ciptr->index = i;
+ :
+ : return ciptr;
+ :}
+ :
+ :#endif /* TRANS_REOPEN */
+ :
+ :
+ :static int
+ :TRANS(SocketSetOption) (XtransConnInfo ciptr, int option, int arg)
+ :
+ :{
+ : PRMSG (2,"SocketSetOption(%d,%d,%d)\n", ciptr->fd, option, arg);
+ :
+ : return -1;
+ :}
+ :
+ :#ifdef UNIXCONN
+ :static int
+ :set_sun_path(const char *port, const char *upath, char *path)
+ :{
+ : struct sockaddr_un s;
+ : int maxlen = sizeof(s.sun_path) - 1;
+ :
+ : if (!port || !*port || !path)
+ : return -1;
+ :
+ : if (*port == '/') { /* a full pathname */
+ : if (strlen(port) > maxlen)
+ : return -1;
+ : sprintf(path, "%s", port);
+ : } else {
+ : if (strlen(port) + strlen(upath) > maxlen)
+ : return -1;
+ : sprintf(path, "%s%s", upath, port);
+ : }
+ : return 0;
+ :}
+ :#endif
+ :
+ :#ifdef TRANS_SERVER
+ :
+ :static int
+ :TRANS(SocketCreateListener) (XtransConnInfo ciptr,
+ : struct sockaddr *sockname,
+ : int socknamelen, unsigned int flags)
+ :
+ :{
+ : int namelen = socknamelen;
+ : int fd = ciptr->fd;
+ : int retry;
+ :
+ : PRMSG (3, "SocketCreateListener(%x,%p)\n", ciptr, fd, 0);
+ :
+ : if (Sockettrans2devtab[ciptr->index].family == AF_INET
+ :#if defined(IPv6) && defined(AF_INET6)
+ : || Sockettrans2devtab[ciptr->index].family == AF_INET6
+ :#endif
+ : )
+ : retry = 20;
+ : else
+ : retry = 0;
+ :
+ : while (bind (fd, (struct sockaddr *) sockname, namelen) < 0)
+ : {
+ : if (errno == EADDRINUSE) {
+ : if (flags & ADDR_IN_USE_ALLOWED)
+ : break;
+ : else
+ : return TRANS_ADDR_IN_USE;
+ : }
+ :
+ : if (retry-- == 0) {
+ : PRMSG (1, "SocketCreateListener: failed to bind listener\n",
+ : 0, 0, 0);
+ : close (fd);
+ : return TRANS_CREATE_LISTENER_FAILED;
+ : }
+ :#ifdef SO_REUSEADDR
+ : sleep (1);
+ :#else
+ : sleep (10);
+ :#endif /* SO_REUSEDADDR */
+ : }
+ :
+ : if (Sockettrans2devtab[ciptr->index].family == AF_INET
+ :#if defined(IPv6) && defined(AF_INET6)
+ : || Sockettrans2devtab[ciptr->index].family == AF_INET6
+ :#endif
+ : ) {
+ :#ifdef SO_DONTLINGER
+ : setsockopt (fd, SOL_SOCKET, SO_DONTLINGER, (char *) NULL, 0);
+ :#else
+ :#ifdef SO_LINGER
+ : {
+ : static int linger[2] = { 0, 0 };
+ : setsockopt (fd, SOL_SOCKET, SO_LINGER,
+ : (char *) linger, sizeof (linger));
+ : }
+ :#endif
+ :#endif
+ :}
+ :
+ : if (listen (fd, BACKLOG) < 0)
+ : {
+ : PRMSG (1, "SocketCreateListener: listen() failed\n", 0, 0, 0);
+ : close (fd);
+ : return TRANS_CREATE_LISTENER_FAILED;
+ : }
+ :
+ : /* Set a flag to indicate that this connection is a listener */
+ :
+ : ciptr->flags = 1 | (ciptr->flags & TRANS_KEEPFLAGS);
+ :
+ : return 0;
+ :}
+ :
+ :#ifdef TCPCONN
+ :static int
+ :TRANS(SocketINETCreateListener) (XtransConnInfo ciptr, char *port, unsigned int flags)
+ :
+ :{
+ :#if defined(IPv6) && defined(AF_INET6)
+ : struct sockaddr_storage sockname;
+ :#else
+ : struct sockaddr_in sockname;
+ :#endif
+ : unsigned short sport;
+ : int namelen = sizeof(sockname);
+ : int status;
+ : long tmpport;
+ :#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
+ : _Xgetservbynameparams sparams;
+ :#endif
+ : struct servent *servp;
+ :
+ :#ifdef X11_t
+ : char portbuf[PORTBUFSIZE];
+ :#endif
+ :
+ : PRMSG (2, "SocketINETCreateListener(%s)\n", port, 0, 0);
+ :
+ :#ifdef X11_t
+ : /*
+ : * X has a well known port, that is transport dependent. It is easier
+ : * to handle it here, than try and come up with a transport independent
+ : * representation that can be passed in and resolved the usual way.
+ : *
+ : * The port that is passed here is really a string containing the idisplay
+ : * from ConnectDisplay().
+ : */
+ :
+ : if (is_numeric (port))
+ : {
+ : /* fixup the server port address */
+ : tmpport = X_TCP_PORT + strtol (port, (char**)NULL, 10);
+ : sprintf (portbuf,"%lu", tmpport);
+ : port = portbuf;
+ : }
+ :#endif
+ :
+ : if (port && *port)
+ : {
+ : /* Check to see if the port string is just a number (handles X11) */
+ :
+ : if (!is_numeric (port))
+ : {
+ : if ((servp = _XGetservbyname (port,"tcp",sparams)) == NULL)
+ : {
+ : PRMSG (1,
+ : "SocketINETCreateListener: Unable to get service for %s\n",
+ : port, 0, 0);
+ : return TRANS_CREATE_LISTENER_FAILED;
+ : }
+ : /* we trust getservbyname to return a valid number */
+ : sport = servp->s_port;
+ : }
+ : else
+ : {
+ : tmpport = strtol (port, (char**)NULL, 10);
+ : /*
+ : * check that somehow the port address isn't negative or in
+ : * the range of reserved port addresses. This can happen and
+ : * be very bad if the server is suid-root and the user does
+ : * something (dumb) like `X :60049`.
+ : */
+ : if (tmpport < 1024 || tmpport > USHRT_MAX)
+ : return TRANS_CREATE_LISTENER_FAILED;
+ :
+ : sport = (unsigned short) tmpport;
+ : }
+ : }
+ : else
+ : sport = 0;
+ :
+ : bzero(&sockname, sizeof(sockname));
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if (Sockettrans2devtab[ciptr->index].family == AF_INET) {
+ : namelen = sizeof (struct sockaddr_in);
+ :#ifdef BSD44SOCKETS
+ : ((struct sockaddr_in *)&sockname)->sin_len = namelen;
+ :#endif
+ : ((struct sockaddr_in *)&sockname)->sin_family = AF_INET;
+ : ((struct sockaddr_in *)&sockname)->sin_port = htons(sport);
+ : ((struct sockaddr_in *)&sockname)->sin_addr.s_addr = htonl(INADDR_ANY);
+ : } else {
+ : namelen = sizeof (struct sockaddr_in6);
+ :#ifdef SIN6_LEN
+ : ((struct sockaddr_in6 *)&sockname)->sin6_len = sizeof(sockname);
+ :#endif
+ : ((struct sockaddr_in6 *)&sockname)->sin6_family = AF_INET6;
+ : ((struct sockaddr_in6 *)&sockname)->sin6_port = htons(sport);
+ : ((struct sockaddr_in6 *)&sockname)->sin6_addr = in6addr_any;
+ : }
+ :#else
+ :#ifdef BSD44SOCKETS
+ : sockname.sin_len = sizeof (sockname);
+ :#endif
+ : sockname.sin_family = AF_INET;
+ : sockname.sin_port = htons (sport);
+ : sockname.sin_addr.s_addr = htonl (INADDR_ANY);
+ :#endif
+ :
+ : if ((status = TRANS(SocketCreateListener) (ciptr,
+ : (struct sockaddr *) &sockname, namelen, flags)) < 0)
+ : {
+ : PRMSG (1,
+ : "SocketINETCreateListener: ...SocketCreateListener() failed\n",
+ : 0, 0, 0);
+ : return status;
+ : }
+ :
+ : if (TRANS(SocketINETGetAddr) (ciptr) < 0)
+ : {
+ : PRMSG (1,
+ : "SocketINETCreateListener: ...SocketINETGetAddr() failed\n",
+ : 0, 0, 0);
+ : return TRANS_CREATE_LISTENER_FAILED;
+ : }
+ :
+ : return 0;
+ :}
+ :
+ :#endif /* TCPCONN */
+ :
+ :
+ :#ifdef UNIXCONN
+ :
+ :static int
+ :TRANS(SocketUNIXCreateListener) (XtransConnInfo ciptr, char *port,
+ : unsigned int flags)
+ :
+ :{
+ : struct sockaddr_un sockname;
+ : int namelen;
+ : int oldUmask;
+ : int status;
+ : unsigned int mode;
+ :
+ : PRMSG (2, "SocketUNIXCreateListener(%s)\n",
+ : port ? port : "NULL", 0, 0);
+ :
+ : /* Make sure the directory is created */
+ :
+ : oldUmask = umask (0);
+ :
+ :#ifdef UNIX_DIR
+ :#ifdef HAS_STICKY_DIR_BIT
+ : mode = 01777;
+ :#else
+ : mode = 0777;
+ :#endif
+ : if (trans_mkdir(UNIX_DIR, mode) == -1) {
+ : PRMSG (1, "SocketUNIXCreateListener: mkdir(%s) failed, errno = %d\n",
+ : UNIX_DIR, errno, 0);
+ : (void) umask (oldUmask);
+ : return TRANS_CREATE_LISTENER_FAILED;
+ : }
+ :#endif
+ :
+ : sockname.sun_family = AF_UNIX;
+ :
+ : if (port && *port) {
+ : if (set_sun_path(port, UNIX_PATH, sockname.sun_path) != 0) {
+ : PRMSG (1, "SocketUNIXCreateListener: path too long\n", 0, 0, 0);
+ : return TRANS_CREATE_LISTENER_FAILED;
+ : }
+ : } else {
+ : snprintf (sockname.sun_path, sizeof(sockname.sun_path),
+ : "%s%ld", UNIX_PATH, (long)getpid());
+ : }
+ :
+ :#if (defined(BSD44SOCKETS) || defined(__UNIXWARE__)) && !defined(Lynx)
+ : sockname.sun_len = strlen(sockname.sun_path);
+ :#endif
+ :
+ :#if defined(BSD44SOCKETS) || defined(SUN_LEN)
+ : namelen = SUN_LEN(&sockname);
+ :#else
+ : namelen = strlen(sockname.sun_path) + offsetof(struct sockaddr_un, sun_path);
+ :#endif
+ :
+ : unlink (sockname.sun_path);
+ :
+ : if ((status = TRANS(SocketCreateListener) (ciptr,
+ : (struct sockaddr *) &sockname, namelen, flags)) < 0)
+ : {
+ : PRMSG (1,
+ : "SocketUNIXCreateListener: ...SocketCreateListener() failed\n",
+ : 0, 0, 0);
+ : (void) umask (oldUmask);
+ : return status;
+ : }
+ :
+ : /*
+ : * Now that the listener is esablished, create the addr info for
+ : * this connection. getpeername() doesn't work for UNIX Domain Sockets
+ : * on some systems (hpux at least), so we will just do it manually, instead
+ : * of calling something like TRANS(SocketUNIXGetAddr).
+ : */
+ :
+ : namelen = sizeof (sockname); /* this will always make it the same size */
+ :
+ : if ((ciptr->addr = (char *) xalloc (namelen)) == NULL)
+ : {
+ : PRMSG (1,
+ : "SocketUNIXCreateListener: Can't allocate space for the addr\n",
+ : 0, 0, 0);
+ : (void) umask (oldUmask);
+ : return TRANS_CREATE_LISTENER_FAILED;
+ : }
+ :
+ : ciptr->family = sockname.sun_family;
+ : ciptr->addrlen = namelen;
+ : memcpy (ciptr->addr, &sockname, ciptr->addrlen);
+ :
+ : (void) umask (oldUmask);
+ :
+ : return 0;
+ :}
+ :
+ :
+ :static int
+ :TRANS(SocketUNIXResetListener) (XtransConnInfo ciptr)
+ :
+ :{
+ : /*
+ : * See if the unix domain socket has disappeared. If it has, recreate it.
+ : */
+ :
+ : struct sockaddr_un *unsock = (struct sockaddr_un *) ciptr->addr;
+ : struct stat statb;
+ : int status = TRANS_RESET_NOOP;
+ : unsigned int mode;
+ :
+ : PRMSG (3, "SocketUNIXResetListener(%p,%d)\n", ciptr, ciptr->fd, 0);
+ :
+ : if (stat (unsock->sun_path, &statb) == -1 ||
+ : ((statb.st_mode & S_IFMT) !=
+ :#if (defined (sun) && defined(SVR4)) || defined(NCR) || defined(SCO325) || !defined(S_IFSOCK)
+ : S_IFIFO))
+ :#else
+ : S_IFSOCK))
+ :#endif
+ : {
+ : int oldUmask = umask (0);
+ :
+ :#ifdef UNIX_DIR
+ :#ifdef HAS_STICKY_DIR_BIT
+ : mode = 01777;
+ :#else
+ : mode = 0777;
+ :#endif
+ : if (trans_mkdir(UNIX_DIR, mode) == -1) {
+ : PRMSG (1, "SocketUNIXResetListener: mkdir(%s) failed, errno = %d\n",
+ : UNIX_DIR, errno, 0);
+ : (void) umask (oldUmask);
+ : return TRANS_RESET_FAILURE;
+ : }
+ :#endif
+ :
+ : close (ciptr->fd);
+ : unlink (unsock->sun_path);
+ :
+ : if ((ciptr->fd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
+ : {
+ : TRANS(FreeConnInfo) (ciptr);
+ : (void) umask (oldUmask);
+ : return TRANS_RESET_FAILURE;
+ : }
+ :
+ : if (bind (ciptr->fd, (struct sockaddr *) unsock, ciptr->addrlen) < 0)
+ : {
+ : close (ciptr->fd);
+ : TRANS(FreeConnInfo) (ciptr);
+ : return TRANS_RESET_FAILURE;
+ : }
+ :
+ : if (listen (ciptr->fd, BACKLOG) < 0)
+ : {
+ : close (ciptr->fd);
+ : TRANS(FreeConnInfo) (ciptr);
+ : (void) umask (oldUmask);
+ : return TRANS_RESET_FAILURE;
+ : }
+ :
+ : umask (oldUmask);
+ :
+ : status = TRANS_RESET_NEW_FD;
+ : }
+ :
+ : return status;
+ :}
+ :
+ :#endif /* UNIXCONN */
+ :
+ :
+ :#ifdef TCPCONN
+ :
+ :static XtransConnInfo
+ :TRANS(SocketINETAccept) (XtransConnInfo ciptr, int *status)
+ :
+ :{
+ : XtransConnInfo newciptr;
+ : struct sockaddr_in sockname;
+ : int namelen = sizeof(sockname);
+ :
+ : PRMSG (2, "SocketINETAccept(%p,%d)\n", ciptr, ciptr->fd, 0);
+ :
+ : if ((newciptr = (XtransConnInfo) xcalloc (
+ : 1, sizeof(struct _XtransConnInfo))) == NULL)
+ : {
+ : PRMSG (1, "SocketINETAccept: malloc failed\n", 0, 0, 0);
+ : *status = TRANS_ACCEPT_BAD_MALLOC;
+ : return NULL;
+ : }
+ :
+ : if ((newciptr->fd = accept (ciptr->fd,
+ : (struct sockaddr *) &sockname, (void *)&namelen)) < 0)
+ : {
+ :#ifdef WIN32
+ : errno = WSAGetLastError();
+ :#endif
+ : PRMSG (1, "SocketINETAccept: accept() failed\n", 0, 0, 0);
+ : xfree (newciptr);
+ : *status = TRANS_ACCEPT_FAILED;
+ : return NULL;
+ : }
+ :
+ :#ifdef TCP_NODELAY
+ : {
+ : /*
+ : * turn off TCP coalescence for INET sockets
+ : */
+ :
+ : int tmp = 1;
+ : setsockopt (newciptr->fd, IPPROTO_TCP, TCP_NODELAY,
+ : (char *) &tmp, sizeof (int));
+ : }
+ :#endif
+ :
+ : /*
+ : * Get this address again because the transport may give a more
+ : * specific address now that a connection is established.
+ : */
+ :
+ : if (TRANS(SocketINETGetAddr) (newciptr) < 0)
+ : {
+ : PRMSG (1,
+ : "SocketINETAccept: ...SocketINETGetAddr() failed:\n",
+ : 0, 0, 0);
+ : close (newciptr->fd);
+ : xfree (newciptr);
+ : *status = TRANS_ACCEPT_MISC_ERROR;
+ : return NULL;
+ : }
+ :
+ : if (TRANS(SocketINETGetPeerAddr) (newciptr) < 0)
+ : {
+ : PRMSG (1,
+ : "SocketINETAccept: ...SocketINETGetPeerAddr() failed:\n",
+ : 0, 0, 0);
+ : close (newciptr->fd);
+ : if (newciptr->addr) xfree (newciptr->addr);
+ : xfree (newciptr);
+ : *status = TRANS_ACCEPT_MISC_ERROR;
+ : return NULL;
+ : }
+ :
+ : *status = 0;
+ :
+ : return newciptr;
+ :}
+ :
+ :#endif /* TCPCONN */
+ :
+ :
+ :#ifdef UNIXCONN
+ :static XtransConnInfo
+ :TRANS(SocketUNIXAccept) (XtransConnInfo ciptr, int *status)
+ :
+ :{
+ : XtransConnInfo newciptr;
+ : struct sockaddr_un sockname;
+ :#if defined(SVR4) || defined(__SCO__)
+ : size_t namelen = sizeof sockname;
+ :#else
+ : int namelen = sizeof sockname;
+ :#endif
+ :
+ : PRMSG (2, "SocketUNIXAccept(%p,%d)\n", ciptr, ciptr->fd, 0);
+ :
+ : if ((newciptr = (XtransConnInfo) xcalloc (
+ : 1, sizeof(struct _XtransConnInfo))) == NULL)
+ : {
+ : PRMSG (1, "SocketUNIXAccept: malloc() failed\n", 0, 0, 0);
+ : *status = TRANS_ACCEPT_BAD_MALLOC;
+ : return NULL;
+ : }
+ :
+ : if ((newciptr->fd = accept (ciptr->fd,
+ : (struct sockaddr *) &sockname, (void *)&namelen)) < 0)
+ : {
+ : PRMSG (1, "SocketUNIXAccept: accept() failed\n", 0, 0, 0);
+ : xfree (newciptr);
+ : *status = TRANS_ACCEPT_FAILED;
+ : return NULL;
+ : }
+ :
+ : /*
+ : * Get the socket name and the peer name from the listener socket,
+ : * since this is unix domain.
+ : */
+ :
+ : if ((newciptr->addr = (char *) xalloc (ciptr->addrlen)) == NULL)
+ : {
+ : PRMSG (1,
+ : "SocketUNIXAccept: Can't allocate space for the addr\n",
+ : 0, 0, 0);
+ : close (newciptr->fd);
+ : xfree (newciptr);
+ : *status = TRANS_ACCEPT_BAD_MALLOC;
+ : return NULL;
+ : }
+ :
+ :
+ : newciptr->addrlen = ciptr->addrlen;
+ : memcpy (newciptr->addr, ciptr->addr, newciptr->addrlen);
+ :
+ : if ((newciptr->peeraddr = (char *) xalloc (ciptr->addrlen)) == NULL)
+ : {
+ : PRMSG (1,
+ : "SocketUNIXAccept: Can't allocate space for the addr\n",
+ : 0, 0, 0);
+ : close (newciptr->fd);
+ : if (newciptr->addr) xfree (newciptr->addr);
+ : xfree (newciptr);
+ : *status = TRANS_ACCEPT_BAD_MALLOC;
+ : return NULL;
+ : }
+ :
+ : newciptr->peeraddrlen = ciptr->addrlen;
+ : memcpy (newciptr->peeraddr, ciptr->addr, newciptr->addrlen);
+ :
+ : newciptr->family = AF_UNIX;
+ :
+ : *status = 0;
+ :
+ : return newciptr;
+ :}
+ :
+ :#endif /* UNIXCONN */
+ :
+ :#endif /* TRANS_SERVER */
+ :
+ :
+ :#ifdef TRANS_CLIENT
+ :
+ :#ifdef TCPCONN
+ :
+ :#if defined(IPv6) && defined(AF_INET6)
+ :struct addrlist {
+ : struct addrinfo * addr;
+ : struct addrinfo * firstaddr;
+ : char port[PORTBUFSIZE];
+ : char host[MAXHOSTNAMELEN];
+ :};
+ :static struct addrlist *addrlist = NULL;
+ :#endif
+ :
+ :
+ :static int
+ :TRANS(SocketINETConnect) (XtransConnInfo ciptr, char *host, char *port)
+ :
+ :{
+ : struct sockaddr * socketaddr = NULL;
+ : int socketaddrlen = 0;
+ : int res;
+ :#if defined(IPv6) && defined(AF_INET6)
+ : struct addrinfo hints;
+ : char ntopbuf[INET6_ADDRSTRLEN];
+ : int resetonce = 0;
+ :#endif
+ : struct sockaddr_in sockname;
+ :#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
+ : _Xgethostbynameparams hparams;
+ : _Xgetservbynameparams sparams;
+ :#endif
+ : struct hostent *hostp;
+ : struct servent *servp;
+ : unsigned long tmpaddr;
+ :#ifdef X11_t
+ : char portbuf[PORTBUFSIZE];
+ :#endif
+ :
+ : long tmpport;
+ : char hostnamebuf[256]; /* tmp space */
+ :
+ : PRMSG (2,"SocketINETConnect(%d,%s,%s)\n", ciptr->fd, host, port);
+ :
+ : if (!host)
+ : {
+ : hostnamebuf[0] = '\0';
+ : (void) TRANS(GetHostname) (hostnamebuf, sizeof hostnamebuf);
+ : host = hostnamebuf;
+ : }
+ :
+ :#ifdef X11_t
+ : /*
+ : * X has a well known port, that is transport dependent. It is easier
+ : * to handle it here, than try and come up with a transport independent
+ : * representation that can be passed in and resolved the usual way.
+ : *
+ : * The port that is passed here is really a string containing the idisplay
+ : * from ConnectDisplay().
+ : */
+ :
+ : if (is_numeric (port))
+ : {
+ : tmpport = X_TCP_PORT + strtol (port, (char**)NULL, 10);
+ : sprintf (portbuf, "%lu", tmpport);
+ : port = portbuf;
+ : }
+ :#endif
+ :
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if (haveIPv6) {
+ : if (addrlist != NULL) {
+ : if (strcmp(host,addrlist->host) || strcmp(port,addrlist->port)) {
+ : if (addrlist->firstaddr)
+ : freeaddrinfo(addrlist->firstaddr);
+ : addrlist->firstaddr = NULL;
+ : }
+ : } else {
+ : addrlist = malloc(sizeof(struct addrlist));
+ : addrlist->firstaddr = NULL;
+ : }
+ :
+ : if (addrlist->firstaddr == NULL) {
+ : strncpy(addrlist->port, port, sizeof(addrlist->port));
+ : addrlist->port[sizeof(addrlist->port) - 1] = '\0';
+ : strncpy(addrlist->host, host, sizeof(addrlist->host));
+ : addrlist->host[sizeof(addrlist->host) - 1] = '\0';
+ :
+ : bzero(&hints,sizeof(hints));
+ : hints.ai_socktype = Sockettrans2devtab[ciptr->index].devcotsname;
+ :
+ : res = getaddrinfo(host,port,&hints,&addrlist->firstaddr);
+ : if (res != 0) {
+ : PRMSG (1, "SocketINETConnect() can't get address "
+ : "for %s:%s: %s\n", host, port, gai_strerror(res));
+ : ESET(EINVAL);
+ : return TRANS_CONNECT_FAILED;
+ : }
+ : for (res = 0, addrlist->addr = addrlist->firstaddr;
+ : addrlist->addr ; res++) {
+ : addrlist->addr = addrlist->addr->ai_next;
+ : }
+ : PRMSG(4,"Got New Address list with %d addresses\n", res, 0, 0);
+ : res = 0;
+ : addrlist->addr = NULL;
+ : }
+ :
+ : while (socketaddr == NULL) {
+ : if (addrlist->addr == NULL) {
+ : if (resetonce) {
+ : /* Already checked entire list - no usable addresses */
+ : PRMSG (1, "SocketINETConnect() no usable address "
+ : "for %s:%s\n", host, port, 0);
+ : return TRANS_CONNECT_FAILED;
+ : } else {
+ : /* Go back to beginning of list */
+ : resetonce = 1;
+ : addrlist->addr = addrlist->firstaddr;
+ : }
+ : }
+ :
+ : socketaddr = addrlist->addr->ai_addr;
+ : socketaddrlen = addrlist->addr->ai_addrlen;
+ :
+ : if (addrlist->addr->ai_family == AF_INET) {
+ : struct sockaddr_in *sin = (struct sockaddr_in *) socketaddr;
+ :
+ : PRMSG (4,"SocketINETConnect() sockname.sin_addr = %s\n",
+ : inet_ntop(addrlist->addr->ai_family,&sin->sin_addr,
+ : ntopbuf,sizeof(ntopbuf)), 0, 0);
+ :
+ : PRMSG (4,"SocketINETConnect() sockname.sin_port = %d\n",
+ : ntohs(sin->sin_port), 0, 0);
+ :
+ : if (Sockettrans2devtab[ciptr->index].family == AF_INET6) {
+ : if (strcmp(Sockettrans2devtab[ciptr->index].transname,
+ : "tcp") == 0) {
+ : XtransConnInfo newciptr;
+ :
+ : /*
+ : * Our socket is an IPv6 socket, but the address is
+ : * IPv4. Close it and get an IPv4 socket. This is
+ : * needed for IPv4 connections to work on platforms
+ : * that don't allow IPv4 over IPv6 sockets.
+ : */
+ : TRANS(SocketINETClose)(ciptr);
+ : newciptr = TRANS(SocketOpenCOTSClientBase)(
+ : "tcp", "tcp", host, port, ciptr->index);
+ : if (newciptr)
+ : ciptr->fd = newciptr->fd;
+ : if (!newciptr ||
+ : Sockettrans2devtab[newciptr->index].family !=
+ : AF_INET) {
+ : socketaddr = NULL;
+ : PRMSG (4,"SocketINETConnect() Cannot get IPv4 "
+ : " socketfor IPv4 address\n", 0,0,0);
+ : }
+ : if (newciptr)
+ : xfree(newciptr);
+ : } else {
+ : socketaddr = NULL;
+ : PRMSG (4,"SocketINETConnect Skipping IPv4 address\n",
+ : 0,0,0);
+ : }
+ : }
+ : } else if (addrlist->addr->ai_family == AF_INET6) {
+ : struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) socketaddr;
+ :
+ : PRMSG (4,"SocketINETConnect() sockname.sin6_addr = %s\n",
+ : inet_ntop(addrlist->addr->ai_family,
+ : &sin6->sin6_addr,ntopbuf,sizeof(ntopbuf)),
+ : 0, 0);
+ : PRMSG (4,"SocketINETConnect() sockname.sin6_port = %d\n",
+ : ntohs(sin6->sin6_port), 0, 0);
+ :
+ : if (Sockettrans2devtab[ciptr->index].family == AF_INET) {
+ : if (strcmp(Sockettrans2devtab[ciptr->index].transname,
+ : "tcp") == 0) {
+ : XtransConnInfo newciptr;
+ :
+ : /*
+ : * Close the IPv4 socket and try to open an IPv6 socket.
+ : */
+ : TRANS(SocketINETClose)(ciptr);
+ : newciptr = TRANS(SocketOpenCOTSClientBase)(
+ : "tcp", "tcp", host, port, -1);
+ : if (newciptr)
+ : ciptr->fd = newciptr->fd;
+ : if (!newciptr ||
+ : Sockettrans2devtab[newciptr->index].family !=
+ : AF_INET6) {
+ : socketaddr = NULL;
+ : PRMSG (4,"SocketINETConnect() Cannot get IPv6 "
+ : "socket for IPv6 address\n", 0,0,0);
+ : }
+ : if (newciptr)
+ : xfree(newciptr);
+ : }
+ : else
+ : {
+ : socketaddr = NULL;
+ : PRMSG (4,"SocketINETConnect() Skipping IPv6 address\n",
+ : 0,0,0);
+ : }
+ : }
+ : } else {
+ : socketaddr = NULL; /* Unsupported address type */
+ : }
+ : if (socketaddr == NULL) {
+ : addrlist->addr = addrlist->addr->ai_next;
+ : }
+ : }
+ : } else
+ :#endif
+ : {
+ : /*
+ : * Build the socket name.
+ : */
+ :
+ :#ifdef BSD44SOCKETS
+ : sockname.sin_len = sizeof (struct sockaddr_in);
+ :#endif
+ : sockname.sin_family = AF_INET;
+ :
+ : /*
+ : * fill in sin_addr
+ : */
+ :
+ :#ifndef INADDR_NONE
+ :#define INADDR_NONE ((in_addr_t) 0xffffffff)
+ :#endif
+ :
+ : /* check for ww.xx.yy.zz host string */
+ :
+ : if (isascii (host[0]) && isdigit (host[0])) {
+ : tmpaddr = inet_addr (host); /* returns network byte order */
+ : } else {
+ : tmpaddr = INADDR_NONE;
+ : }
+ :
+ : PRMSG (4,"SocketINETConnect() inet_addr(%s) = %x\n", host, tmpaddr, 0);
+ :
+ : if (tmpaddr == INADDR_NONE) {
+ : if ((hostp = _XGethostbyname(host,hparams)) == NULL) {
+ : PRMSG (1,"SocketINETConnect: Can't get address for %s\n",
+ : host, 0, 0);
+ : ESET(EINVAL);
+ : return TRANS_CONNECT_FAILED;
+ : }
+ : if (hostp->h_addrtype != AF_INET) { /* is IP host? */
+ : PRMSG (1,"SocketINETConnect: not INET host%s\n", host, 0, 0);
+ : ESET(EPROTOTYPE);
+ : return TRANS_CONNECT_FAILED;
+ : }
+ :
+ :#if defined(CRAY) && defined(OLDTCP)
+ : /* Only Cray UNICOS3 and UNICOS4 will define this */
+ : {
+ : long t;
+ : memcpy ((char *)&t, (char *) hostp->h_addr, sizeof (t));
+ : sockname.sin_addr = t;
+ : }
+ :#else
+ : memcpy ((char *) &sockname.sin_addr, (char *) hostp->h_addr,
+ : sizeof (sockname.sin_addr));
+ :#endif /* CRAY and OLDTCP */
+ :
+ : } else {
+ :#if defined(CRAY) && defined(OLDTCP)
+ : /* Only Cray UNICOS3 and UNICOS4 will define this */
+ : sockname.sin_addr = tmpaddr;
+ :#else
+ : sockname.sin_addr.s_addr = tmpaddr;
+ :#endif /* CRAY and OLDTCP */
+ : }
+ :
+ : /*
+ : * fill in sin_port
+ : */
+ :
+ : /* Check for number in the port string */
+ :
+ : if (!is_numeric (port)) {
+ : if ((servp = _XGetservbyname (port,"tcp",sparams)) == NULL) {
+ : PRMSG (1,"SocketINETConnect: can't get service for %s\n",
+ : port, 0, 0);
+ : return TRANS_CONNECT_FAILED;
+ : }
+ : sockname.sin_port = htons (servp->s_port);
+ : } else {
+ : tmpport = strtol (port, (char**)NULL, 10);
+ : if (tmpport < 1024 || tmpport > USHRT_MAX)
+ : return TRANS_CONNECT_FAILED;
+ : sockname.sin_port = htons (((unsigned short) tmpport));
+ : }
+ :
+ : PRMSG (4,"SocketINETConnect: sockname.sin_port = %d\n",
+ : ntohs(sockname.sin_port), 0, 0);
+ : socketaddr = (struct sockaddr *) &sockname;
+ : socketaddrlen = sizeof(sockname);
+ : }
+ :
+ : /*
+ : * Turn on socket keepalive so the client process will eventually
+ : * be notified with a SIGPIPE signal if the display server fails
+ : * to respond to a periodic transmission of messages
+ : * on the connected socket.
+ : * This is useful to avoid hung application processes when the
+ : * processes are not spawned from the xdm session and
+ : * the display server terminates abnormally.
+ : * (Someone turned off the power switch.)
+ : */
+ :
+ : {
+ : int tmp = 1;
+ : setsockopt (ciptr->fd, SOL_SOCKET, SO_KEEPALIVE,
+ : (char *) &tmp, sizeof (int));
+ : }
+ :
+ : /*
+ : * Do the connect()
+ : */
+ :
+ : if (connect (ciptr->fd, socketaddr, socketaddrlen ) < 0)
+ : {
+ :#ifdef WIN32
+ : int olderrno = WSAGetLastError();
+ :#else
+ : int olderrno = errno;
+ :#endif
+ :
+ : /*
+ : * If the error was ECONNREFUSED, the server may be overloaded
+ : * and we should try again.
+ : *
+ : * If the error was EWOULDBLOCK or EINPROGRESS then the socket
+ : * was non-blocking and we should poll using select
+ : *
+ : * If the error was EINTR, the connect was interrupted and we
+ : * should try again.
+ : *
+ : * If multiple addresses are found for a host then we should
+ : * try to connect again with a different address for a larger
+ : * number of errors that made us quit before, since those
+ : * could be caused by trying to use an IPv6 address to contact
+ : * a machine with an IPv4-only server or other reasons that
+ : * only affect one of a set of addresses.
+ : */
+ :
+ : if (olderrno == ECONNREFUSED || olderrno == EINTR
+ :#if defined(IPv6) && defined(AF_INET6)
+ : || (haveIPv6 && ((addrlist->addr->ai_next != NULL) ||
+ : (addrlist->addr != addrlist->firstaddr)) &&
+ : (olderrno == ENETUNREACH || olderrno == EAFNOSUPPORT ||
+ : olderrno == EADDRNOTAVAIL || olderrno == ETIMEDOUT
+ :#if defined(EHOSTDOWN)
+ : || olderrno == EHOSTDOWN
+ :#endif
+ : ))
+ :#endif
+ : )
+ : res = TRANS_TRY_CONNECT_AGAIN;
+ : else if (olderrno == EWOULDBLOCK || olderrno == EINPROGRESS)
+ : res = TRANS_IN_PROGRESS;
+ : else
+ : {
+ : PRMSG (2,"SocketINETConnect: Can't connect: errno = %d\n",
+ : olderrno,0, 0);
+ :
+ : res = TRANS_CONNECT_FAILED;
+ : }
+ : } else {
+ : res = 0;
+ :
+ :
+ : /*
+ : * Sync up the address fields of ciptr.
+ : */
+ :
+ : if (TRANS(SocketINETGetAddr) (ciptr) < 0)
+ : {
+ : PRMSG (1,
+ : "SocketINETConnect: ...SocketINETGetAddr() failed:\n",
+ : 0, 0, 0);
+ : res = TRANS_CONNECT_FAILED;
+ : }
+ :
+ : else if (TRANS(SocketINETGetPeerAddr) (ciptr) < 0)
+ : {
+ : PRMSG (1,
+ : "SocketINETConnect: ...SocketINETGetPeerAddr() failed:\n",
+ : 0, 0, 0);
+ : res = TRANS_CONNECT_FAILED;
+ : }
+ : }
+ :
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if (haveIPv6 && res != 0) {
+ : addrlist->addr = addrlist->addr->ai_next;
+ : }
+ :#endif
+ :
+ : return res;
+ :}
+ :
+ :#endif /* TCPCONN */
+ :
+ :
+ :\f
+ :#ifdef UNIXCONN
+ :
+ :/*
+ : * Make sure 'host' is really local.
+ : */
+ :
+ :static int
+ :UnixHostReallyLocal (char *host)
+ :
+ :{
+ : char hostnamebuf[256];
+ :
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if (getaddrinfo == NULL)
+ : haveIPv6 = 0;
+ :#endif
+ :
+ : TRANS(GetHostname) (hostnamebuf, sizeof (hostnamebuf));
+ :
+ : if (strcmp (hostnamebuf, host) == 0)
+ : {
+ : return (1);
+ : }
+ :#if defined(IPv6) && defined(AF_INET6)
+ : else if (haveIPv6)
+ : {
+ : struct addrinfo *localhostaddr;
+ : struct addrinfo *otherhostaddr;
+ : struct addrinfo *i, *j;
+ : int equiv = 0;
+ :
+ : if (getaddrinfo(hostnamebuf, NULL, NULL, &localhostaddr) != 0)
+ : return 0;
+ : if (getaddrinfo(host, NULL, NULL, &otherhostaddr) != 0) {
+ : freeaddrinfo(localhostaddr);
+ : return 0;
+ : }
+ :
+ : for (i = localhostaddr; i != NULL && equiv == 0; i = i->ai_next) {
+ : for (j = otherhostaddr; j != NULL && equiv == 0; j = j->ai_next) {
+ : if (i->ai_family == j->ai_family) {
+ : if (i->ai_family == AF_INET) {
+ : struct sockaddr_in *sinA
+ : = (struct sockaddr_in *) i->ai_addr;
+ : struct sockaddr_in *sinB
+ : = (struct sockaddr_in *) j->ai_addr;
+ : struct in_addr *A = &sinA->sin_addr;
+ : struct in_addr *B = &sinB->sin_addr;
+ :
+ : if (memcmp(A,B,sizeof(struct in_addr)) == 0) {
+ : equiv = 1;
+ : }
+ : } else if (i->ai_family == AF_INET6) {
+ : struct sockaddr_in6 *sinA
+ : = (struct sockaddr_in6 *) i->ai_addr;
+ : struct sockaddr_in6 *sinB
+ : = (struct sockaddr_in6 *) j->ai_addr;
+ : struct in6_addr *A = &sinA->sin6_addr;
+ : struct in6_addr *B = &sinB->sin6_addr;
+ :
+ : if (memcmp(A,B,sizeof(struct in6_addr)) == 0) {
+ : equiv = 1;
+ : }
+ : }
+ : }
+ : }
+ : }
+ :
+ : freeaddrinfo(localhostaddr);
+ : freeaddrinfo(otherhostaddr);
+ : return equiv;
+ : }
+ :#endif
+ : else
+ : {
+ : /*
+ : * A host may have more than one network address. If any of the
+ : * network addresses of 'host' (specified to the connect call)
+ : * match any of the network addresses of 'hostname' (determined
+ : * by TRANS(GetHostname)), then the two hostnames are equivalent,
+ : * and we know that 'host' is really a local host.
+ : */
+ : char specified_local_addr_list[10][4];
+ : int scount, equiv, i, j;
+ :#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
+ : _Xgethostbynameparams hparams;
+ :#endif
+ : struct hostent *hostp;
+ :
+ : if ((hostp = _XGethostbyname (host,hparams)) == NULL)
+ : return (0);
+ :
+ : scount = 0;
+ : while (hostp->h_addr_list[scount] && scount <= 8)
+ : {
+ : /*
+ : * The 2nd call to gethostname() overrides the data
+ : * from the 1st call, so we must save the address list.
+ : */
+ :
+ : specified_local_addr_list[scount][0] =
+ : hostp->h_addr_list[scount][0];
+ : specified_local_addr_list[scount][1] =
+ : hostp->h_addr_list[scount][1];
+ : specified_local_addr_list[scount][2] =
+ : hostp->h_addr_list[scount][2];
+ : specified_local_addr_list[scount][3] =
+ : hostp->h_addr_list[scount][3];
+ : scount++;
+ : }
+ : if ((hostp = _XGethostbyname (hostnamebuf,hparams)) == NULL)
+ : return (0);
+ :
+ : equiv = 0;
+ : i = 0;
+ :
+ : while (i < scount && !equiv)
+ : {
+ : j = 0;
+ :
+ : while (hostp->h_addr_list[j])
+ : {
+ : if ((specified_local_addr_list[i][0] ==
+ : hostp->h_addr_list[j][0]) &&
+ : (specified_local_addr_list[i][1] ==
+ : hostp->h_addr_list[j][1]) &&
+ : (specified_local_addr_list[i][2] ==
+ : hostp->h_addr_list[j][2]) &&
+ : (specified_local_addr_list[i][3] ==
+ : hostp->h_addr_list[j][3]))
+ : {
+ : /* They're equal, so we're done */
+ :
+ : equiv = 1;
+ : break;
+ : }
+ :
+ : j++;
+ : }
+ :
+ : i++;
+ : }
+ : return (equiv);
+ : }
+ :}
+ :
+ :static int
+ :TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
+ :
+ :{
+ : struct sockaddr_un sockname;
+ : int namelen;
+ :
+ :#if defined(hpux) && defined(X11_t)
+ : struct sockaddr_un old_sockname;
+ : int old_namelen;
+ :#endif
+ :
+ :
+ : PRMSG (2,"SocketUNIXConnect(%d,%s,%s)\n", ciptr->fd, host, port);
+ :
+ : /*
+ : * Make sure 'host' is really local. If not, we return failure.
+ : * The reason we make this check is because a process may advertise
+ : * a "local" network ID for which it can accept connections, but if
+ : * a process on a remote machine tries to connect to this network ID,
+ : * we know for sure it will fail.
+ : */
+ :
+ : if (strcmp (host, "unix") != 0 && !UnixHostReallyLocal (host))
+ : {
+ : PRMSG (1,
+ : "SocketUNIXConnect: Cannot connect to non-local host %s\n",
+ : host, 0, 0);
+ : return TRANS_CONNECT_FAILED;
+ : }
+ :
+ :
+ : /*
+ : * Check the port.
+ : */
+ :
+ : if (!port || !*port)
+ : {
+ : PRMSG (1,"SocketUNIXConnect: Missing port specification\n",
+ : 0, 0, 0);
+ : return TRANS_CONNECT_FAILED;
+ : }
+ :
+ : /*
+ : * Build the socket name.
+ : */
+ :
+ : sockname.sun_family = AF_UNIX;
+ :
+ : if (set_sun_path(port, UNIX_PATH, sockname.sun_path) != 0) {
+ : PRMSG (1, "SocketUNIXConnect: path too long\n", 0, 0, 0);
+ : return TRANS_CONNECT_FAILED;
+ : }
+ :
+ :#if (defined(BSD44SOCKETS) || defined(__UNIXWARE__)) && !defined(Lynx)
+ : sockname.sun_len = strlen (sockname.sun_path);
+ :#endif
+ :
+ :#if defined(BSD44SOCKETS) || defined(SUN_LEN)
+ : namelen = SUN_LEN (&sockname);
+ :#else
+ : namelen = strlen (sockname.sun_path) + offsetof(struct sockaddr_un, sun_path);
+ :#endif
+ :
+ :
+ :#if defined(hpux) && defined(X11_t)
+ : /*
+ : * This is gross, but it was in Xlib
+ : */
+ : old_sockname.sun_family = AF_UNIX;
+ : if (set_sun_path(port, OLD_UNIX_PATH, old_sockname.sun_path) != 0) {
+ : PRMSG (1, "SocketUNIXConnect: path too long\n", 0, 0, 0);
+ : return TRANS_CONNECT_FAILED;
+ : }
+ : old_namelen = strlen (old_sockname.sun_path) +
+ : offsetof(struct sockaddr_un, sun_path);
+ :#endif
+ :
+ :
+ : /*
+ : * Do the connect()
+ : */
+ :
+ : if (connect (ciptr->fd, (struct sockaddr *) &sockname, namelen) < 0)
+ : {
+ : int olderrno = errno;
+ : int connected = 0;
+ :
+ :#if defined(hpux) && defined(X11_t)
+ : if (olderrno == ENOENT)
+ : {
+ : if (connect (ciptr->fd,
+ : (struct sockaddr *) &old_sockname, old_namelen) >= 0)
+ : {
+ : connected = 1;
+ : }
+ : else
+ : olderrno = errno;
+ : }
+ :#endif
+ : if (!connected)
+ : {
+ : errno = olderrno;
+ :
+ : /*
+ : * If the error was ENOENT, the server may be starting up
+ : * and we should try again.
+ : *
+ : * If the error was EWOULDBLOCK or EINPROGRESS then the socket
+ : * was non-blocking and we should poll using select
+ : *
+ : * If the error was EINTR, the connect was interrupted and we
+ : * should try again.
+ : */
+ :
+ : if (olderrno == ENOENT || olderrno == EINTR)
+ : return TRANS_TRY_CONNECT_AGAIN;
+ : else if (olderrno == EWOULDBLOCK || olderrno == EINPROGRESS)
+ : return TRANS_IN_PROGRESS;
+ : else
+ : {
+ : PRMSG (2,"SocketUNIXConnect: Can't connect: errno = %d\n",
+ : EGET(),0, 0);
+ :
+ : return TRANS_CONNECT_FAILED;
+ : }
+ : }
+ : }
+ :
+ : /*
+ : * Get the socket name and the peer name from the connect socket,
+ : * since this is unix domain.
+ : */
+ :
+ : if ((ciptr->addr = (char *) xalloc(namelen)) == NULL ||
+ : (ciptr->peeraddr = (char *) xalloc(namelen)) == NULL)
+ : {
+ : PRMSG (1,
+ : "SocketUNIXCreateListener: Can't allocate space for the addr\n",
+ : 0, 0, 0);
+ : return TRANS_CONNECT_FAILED;
+ : }
+ :
+ : ciptr->family = AF_UNIX;
+ : ciptr->addrlen = namelen;
+ : ciptr->peeraddrlen = namelen;
+ : memcpy (ciptr->addr, &sockname, ciptr->addrlen);
+ : memcpy (ciptr->peeraddr, &sockname, ciptr->peeraddrlen);
+ :
+ : return 0;
+ :}
+ :
+ :#endif /* UNIXCONN */
+ :
+ :#endif /* TRANS_CLIENT */
+ :
+ :
+ :static int
+ :TRANS(SocketBytesReadable) (XtransConnInfo ciptr, BytesReadable_t *pend)
+ :
+ :{
+ : PRMSG (2,"SocketBytesReadable(%p,%d,%p)\n",
+ : ciptr, ciptr->fd, pend);
+ :#if defined(QNX4)
+ : *pend = 0L; /* FIONREAD only returns a short. Zero out upper bits */
+ :#endif
+ :#ifdef WIN32
+ : {
+ : int ret = ioctlsocket ((SOCKET) ciptr->fd, FIONREAD, (u_long *) pend);
+ : errno = WSAGetLastError();
+ : return ret;
+ : }
+ :#else
+ :#if (defined(i386) && defined(SYSV) && !defined(SCO325)) || (defined(_SEQUENT_) && _SOCKET_VERSION == 1)
+ : return ioctl (ciptr->fd, I_NREAD, (char *) pend);
+ :#else
+ :#if defined(__UNIXOS2__)
+ : return ioctl (ciptr->fd, FIONREAD, (char*) pend, sizeof(int));
+ :#else
+ : return ioctl (ciptr->fd, FIONREAD, (char *) pend);
+ :#endif /* __UNIXOS2__ */
+ :#endif /* i386 && SYSV || _SEQUENT_ && _SOCKET_VERSION == 1 */
+ :#endif /* WIN32 */
+ :}
+ :
+ :
+ :static int
+ :TRANS(SocketRead) (XtransConnInfo ciptr, char *buf, int size)
+ :
+ 1 0.0011 :{ /* _XSERVTransSocketRead total: 2 0.0022 */
+ : PRMSG (2,"SocketRead(%d,%p,%d)\n", ciptr->fd, buf, size);
+ :
+ :#if defined(WIN32) || defined(__UNIXOS2__)
+ : {
+ : int ret = recv ((SOCKET)ciptr->fd, buf, size, 0);
+ :#ifdef WIN32
+ : errno = WSAGetLastError();
+ :#endif
+ : return ret;
+ : }
+ :#else
+ 1 0.0011 : return read (ciptr->fd, buf, size);
+ :#endif /* WIN32 */
+ :}
+ :
+ :
+ :static int
+ :TRANS(SocketWrite) (XtransConnInfo ciptr, char *buf, int size)
+ :
+ :{
+ : PRMSG (2,"SocketWrite(%d,%p,%d)\n", ciptr->fd, buf, size);
+ :
+ :#if defined(WIN32) || defined(__UNIXOS2__)
+ : {
+ : int ret = send ((SOCKET)ciptr->fd, buf, size, 0);
+ :#ifdef WIN32
+ : errno = WSAGetLastError();
+ :#endif
+ : return ret;
+ : }
+ :#else
+ : return write (ciptr->fd, buf, size);
+ :#endif /* WIN32 */
+ :}
+ :
+ :
+ :static int
+ :TRANS(SocketReadv) (XtransConnInfo ciptr, struct iovec *buf, int size)
+ :
+ :{
+ : PRMSG (2,"SocketReadv(%d,%p,%d)\n", ciptr->fd, buf, size);
+ :
+ : return READV (ciptr, buf, size);
+ :}
+ :
+ :
+ :static int
+ :TRANS(SocketWritev) (XtransConnInfo ciptr, struct iovec *buf, int size)
+ :
+ :{
+ : PRMSG (2,"SocketWritev(%d,%p,%d)\n", ciptr->fd, buf, size);
+ :
+ : return WRITEV (ciptr, buf, size);
+ :}
+ :
+ :
+ :static int
+ :TRANS(SocketDisconnect) (XtransConnInfo ciptr)
+ :
+ :{
+ : PRMSG (2,"SocketDisconnect(%p,%d)\n", ciptr, ciptr->fd, 0);
+ :
+ :#ifdef WIN32
+ : {
+ : int ret = shutdown (ciptr->fd, 2);
+ : errno = WSAGetLastError();
+ : return ret;
+ : }
+ :#else
+ : return shutdown (ciptr->fd, 2); /* disallow further sends and receives */
+ :#endif
+ :}
+ :
+ :
+ :#ifdef TCPCONN
+ :static int
+ :TRANS(SocketINETClose) (XtransConnInfo ciptr)
+ :
+ :{
+ : PRMSG (2,"SocketINETClose(%p,%d)\n", ciptr, ciptr->fd, 0);
+ :
+ :#ifdef WIN32
+ : {
+ : int ret = close (ciptr->fd);
+ : errno = WSAGetLastError();
+ : return ret;
+ : }
+ :#else
+ : return close (ciptr->fd);
+ :#endif
+ :}
+ :
+ :#endif /* TCPCONN */
+ :
+ :
+ :#ifdef UNIXCONN
+ :static int
+ :TRANS(SocketUNIXClose) (XtransConnInfo ciptr)
+ :
+ :{
+ : /*
+ : * If this is the server side, then once the socket is closed,
+ : * it must be unlinked to completely close it
+ : */
+ :
+ : struct sockaddr_un *sockname = (struct sockaddr_un *) ciptr->addr;
+ : int ret;
+ :
+ : PRMSG (2,"SocketUNIXClose(%p,%d)\n", ciptr, ciptr->fd, 0);
+ :
+ : ret = close(ciptr->fd);
+ :
+ : if (ciptr->flags
+ : && sockname
+ : && sockname->sun_family == AF_UNIX
+ : && sockname->sun_path[0])
+ : {
+ : if (!(ciptr->flags & TRANS_NOUNLINK))
+ : unlink (sockname->sun_path);
+ : }
+ :
+ : return ret;
+ :}
+ :
+ :static int
+ :TRANS(SocketUNIXCloseForCloning) (XtransConnInfo ciptr)
+ :
+ :{
+ : /*
+ : * Don't unlink path.
+ : */
+ :
+ : int ret;
+ :
+ : PRMSG (2,"SocketUNIXCloseForCloning(%p,%d)\n",
+ : ciptr, ciptr->fd, 0);
+ :
+ : ret = close(ciptr->fd);
+ :
+ : return ret;
+ :}
+ :
+ :#endif /* UNIXCONN */
+ :
+ :
+ :#ifdef TCPCONN
+ :# ifdef TRANS_SERVER
+ :static char* tcp_nolisten[] = {
+ : "inet",
+ :#if defined(IPv6) && defined(AF_INET6)
+ : "inet6",
+ :#endif
+ : NULL
+ :};
+ :# endif
+ :
+ :Xtransport TRANS(SocketTCPFuncs) = {
+ : /* Socket Interface */
+ : "tcp",
+ : TRANS_ALIAS,
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketOpenCOTSClient),
+ :#endif /* TRANS_CLIENT */
+ :#ifdef TRANS_SERVER
+ : tcp_nolisten,
+ : TRANS(SocketOpenCOTSServer),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketOpenCLTSClient),
+ :#endif /* TRANS_CLIENT */
+ :#ifdef TRANS_SERVER
+ : TRANS(SocketOpenCLTSServer),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_REOPEN
+ : TRANS(SocketReopenCOTSServer),
+ : TRANS(SocketReopenCLTSServer),
+ :#endif
+ : TRANS(SocketSetOption),
+ :#ifdef TRANS_SERVER
+ : TRANS(SocketINETCreateListener),
+ : NULL, /* ResetListener */
+ : TRANS(SocketINETAccept),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketINETConnect),
+ :#endif /* TRANS_CLIENT */
+ : TRANS(SocketBytesReadable),
+ : TRANS(SocketRead),
+ : TRANS(SocketWrite),
+ : TRANS(SocketReadv),
+ : TRANS(SocketWritev),
+ : TRANS(SocketDisconnect),
+ : TRANS(SocketINETClose),
+ : TRANS(SocketINETClose),
+ : };
+ :
+ :Xtransport TRANS(SocketINETFuncs) = {
+ : /* Socket Interface */
+ : "inet",
+ : 0,
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketOpenCOTSClient),
+ :#endif /* TRANS_CLIENT */
+ :#ifdef TRANS_SERVER
+ : NULL,
+ : TRANS(SocketOpenCOTSServer),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketOpenCLTSClient),
+ :#endif /* TRANS_CLIENT */
+ :#ifdef TRANS_SERVER
+ : TRANS(SocketOpenCLTSServer),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_REOPEN
+ : TRANS(SocketReopenCOTSServer),
+ : TRANS(SocketReopenCLTSServer),
+ :#endif
+ : TRANS(SocketSetOption),
+ :#ifdef TRANS_SERVER
+ : TRANS(SocketINETCreateListener),
+ : NULL, /* ResetListener */
+ : TRANS(SocketINETAccept),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketINETConnect),
+ :#endif /* TRANS_CLIENT */
+ : TRANS(SocketBytesReadable),
+ : TRANS(SocketRead),
+ : TRANS(SocketWrite),
+ : TRANS(SocketReadv),
+ : TRANS(SocketWritev),
+ : TRANS(SocketDisconnect),
+ : TRANS(SocketINETClose),
+ : TRANS(SocketINETClose),
+ : };
+ :
+ :#if defined(IPv6) && defined(AF_INET6)
+ :Xtransport TRANS(SocketINET6Funcs) = {
+ : /* Socket Interface */
+ : "inet6",
+ : 0,
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketOpenCOTSClient),
+ :#endif /* TRANS_CLIENT */
+ :#ifdef TRANS_SERVER
+ : NULL,
+ : TRANS(SocketOpenCOTSServer),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketOpenCLTSClient),
+ :#endif /* TRANS_CLIENT */
+ :#ifdef TRANS_SERVER
+ : TRANS(SocketOpenCLTSServer),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_REOPEN
+ : TRANS(SocketReopenCOTSServer),
+ : TRANS(SocketReopenCLTSServer),
+ :#endif
+ : TRANS(SocketSetOption),
+ :#ifdef TRANS_SERVER
+ : TRANS(SocketINETCreateListener),
+ : NULL, /* ResetListener */
+ : TRANS(SocketINETAccept),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketINETConnect),
+ :#endif /* TRANS_CLIENT */
+ : TRANS(SocketBytesReadable),
+ : TRANS(SocketRead),
+ : TRANS(SocketWrite),
+ : TRANS(SocketReadv),
+ : TRANS(SocketWritev),
+ : TRANS(SocketDisconnect),
+ : TRANS(SocketINETClose),
+ : TRANS(SocketINETClose),
+ : };
+ :#endif /* IPv6 */
+ :#endif /* TCPCONN */
+ :
+ :#ifdef UNIXCONN
+ :#if !defined(LOCALCONN)
+ :Xtransport TRANS(SocketLocalFuncs) = {
+ : /* Socket Interface */
+ : "local",
+ : 0,
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketOpenCOTSClient),
+ :#endif /* TRANS_CLIENT */
+ :#ifdef TRANS_SERVER
+ : NULL,
+ : TRANS(SocketOpenCOTSServer),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketOpenCLTSClient),
+ :#endif /* TRANS_CLIENT */
+ :#ifdef TRANS_SERVER
+ : TRANS(SocketOpenCLTSServer),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_REOPEN
+ : TRANS(SocketReopenCOTSServer),
+ : TRANS(SocketReopenCLTSServer),
+ :#endif
+ : TRANS(SocketSetOption),
+ :#ifdef TRANS_SERVER
+ : TRANS(SocketUNIXCreateListener),
+ : TRANS(SocketUNIXResetListener),
+ : TRANS(SocketUNIXAccept),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketUNIXConnect),
+ :#endif /* TRANS_CLIENT */
+ : TRANS(SocketBytesReadable),
+ : TRANS(SocketRead),
+ : TRANS(SocketWrite),
+ : TRANS(SocketReadv),
+ : TRANS(SocketWritev),
+ : TRANS(SocketDisconnect),
+ : TRANS(SocketUNIXClose),
+ : TRANS(SocketUNIXCloseForCloning),
+ : };
+ :#endif /* !LOCALCONN */
+ :# ifdef TRANS_SERVER
+ :# if !defined(LOCALCONN)
+ :static char* unix_nolisten[] = { "local" , NULL };
+ :# endif
+ :# endif
+ :
+ :Xtransport TRANS(SocketUNIXFuncs) = {
+ : /* Socket Interface */
+ : "unix",
+ :#if !defined(LOCALCONN)
+ : TRANS_ALIAS,
+ :#else
+ : 0,
+ :#endif
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketOpenCOTSClient),
+ :#endif /* TRANS_CLIENT */
+ :#ifdef TRANS_SERVER
+ :#if !defined(LOCALCONN)
+ : unix_nolisten,
+ :#else
+ : NULL,
+ :#endif
+ : TRANS(SocketOpenCOTSServer),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketOpenCLTSClient),
+ :#endif /* TRANS_CLIENT */
+ :#ifdef TRANS_SERVER
+ : TRANS(SocketOpenCLTSServer),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_REOPEN
+ : TRANS(SocketReopenCOTSServer),
+ : TRANS(SocketReopenCLTSServer),
+ :#endif
+ : TRANS(SocketSetOption),
+ :#ifdef TRANS_SERVER
+ : TRANS(SocketUNIXCreateListener),
+ : TRANS(SocketUNIXResetListener),
+ : TRANS(SocketUNIXAccept),
+ :#endif /* TRANS_SERVER */
+ :#ifdef TRANS_CLIENT
+ : TRANS(SocketUNIXConnect),
+ :#endif /* TRANS_CLIENT */
+ : TRANS(SocketBytesReadable),
+ : TRANS(SocketRead),
+ : TRANS(SocketWrite),
+ : TRANS(SocketReadv),
+ : TRANS(SocketWritev),
+ : TRANS(SocketDisconnect),
+ : TRANS(SocketUNIXClose),
+ : TRANS(SocketUNIXCloseForCloning),
+ : };
+ :
+ :#endif /* UNIXCONN */
+/*
+ * Total samples for file : "/home/cworth/src/xorg/xserver/fb/fbtrap.c"
+ *
+ * 1 0.0011
+ */
+
+
+ :/*
+ : * Copyright © 2004 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.
+ : */
+ :
+ :#ifdef HAVE_DIX_CONFIG_H
+ :#include <dix-config.h>
+ :#endif
+ :
+ :#include "fb.h"
+ :
+ :#ifdef RENDER
+ :
+ :#include "picturestr.h"
+ :#include "mipict.h"
+ :#include "renderedge.h"
+ :#include "fbpict.h"
+ :
+ :void
+ :fbAddTraps (PicturePtr pPicture,
+ : INT16 x_off,
+ : INT16 y_off,
+ : int ntrap,
+ : xTrap *traps)
+ :{
+ : pixman_image_t *image = image_from_pict (pPicture, FALSE);
+ :
+ : if (!image)
+ : return;
+ :
+ : pixman_add_traps (image, x_off, y_off, ntrap, (pixman_trap_t *)traps);
+ :
+ : fbFinishAccess (pPicture->pDrawable);
+ :
+ : pixman_image_unref (image);
+ :}
+ :
+ :void
+ :fbRasterizeTrapezoid (PicturePtr pPicture,
+ : xTrapezoid *trap,
+ : int x_off,
+ : int y_off)
+ :{ /* fbRasterizeTrapezoid total: 1 0.0011 */
+ : pixman_image_t *image = image_from_pict (pPicture, FALSE);
+ :
+ : if (!image)
+ : return;
+ :
+ : pixman_rasterize_trapezoid (image, (pixman_trapezoid_t *)trap, x_off, y_off);
+ :
+ : fbFinishAccess (pPicture->pDrawable);
+ :
+ 1 0.0011 : pixman_image_unref (image);
+ :}
+ :
+ :static int
+ :_GreaterY (xPointFixed *a, xPointFixed *b)
+ :{
+ : if (a->y == b->y)
+ : return a->x > b->x;
+ : return a->y > b->y;
+ :}
+ :
+ :/*
+ : * Note that the definition of this function is a bit odd because
+ : * of the X coordinate space (y increasing downwards).
+ : */
+ :static int
+ :_Clockwise (xPointFixed *ref, xPointFixed *a, xPointFixed *b)
+ :{
+ : xPointFixed ad, bd;
+ :
+ : ad.x = a->x - ref->x;
+ : ad.y = a->y - ref->y;
+ : bd.x = b->x - ref->x;
+ : bd.y = b->y - ref->y;
+ :
+ : return ((xFixed_32_32) bd.y * ad.x - (xFixed_32_32) ad.y * bd.x) < 0;
+ :}
+ :
+ :/* FIXME -- this could be made more efficient */
+ :void
+ :fbAddTriangles (PicturePtr pPicture,
+ : INT16 x_off,
+ : INT16 y_off,
+ : int ntri,
+ : xTriangle *tris)
+ :{
+ : xPointFixed *top, *left, *right, *tmp;
+ : xTrapezoid trap;
+ :
+ : for (; ntri; ntri--, tris++)
+ : {
+ : top = &tris->p1;
+ : left = &tris->p2;
+ : right = &tris->p3;
+ : if (_GreaterY (top, left)) {
+ : tmp = left; left = top; top = tmp;
+ : }
+ : if (_GreaterY (top, right)) {
+ : tmp = right; right = top; top = tmp;
+ : }
+ : if (_Clockwise (top, right, left)) {
+ : tmp = right; right = left; left = tmp;
+ : }
+ :
+ : /*
+ : * Two cases:
+ : *
+ : * + +
+ : * / \ / \
+ : * / \ / \
+ : * / + + \
+ : * / -- -- \
+ : * / -- -- \
+ : * / --- --- \
+ : * +-- --+
+ : */
+ :
+ : trap.top = top->y;
+ : trap.left.p1 = *top;
+ : trap.left.p2 = *left;
+ : trap.right.p1 = *top;
+ : trap.right.p2 = *right;
+ : if (right->y < left->y)
+ : trap.bottom = right->y;
+ : else
+ : trap.bottom = left->y;
+ : fbRasterizeTrapezoid (pPicture, &trap, x_off, y_off);
+ : if (right->y < left->y)
+ : {
+ : trap.top = right->y;
+ : trap.bottom = left->y;
+ : trap.right.p1 = *right;
+ : trap.right.p2 = *left;
+ : }
+ : else
+ : {
+ : trap.top = left->y;
+ : trap.bottom = right->y;
+ : trap.left.p1 = *left;
+ : trap.left.p2 = *right;
+ : }
+ : fbRasterizeTrapezoid (pPicture, &trap, x_off, y_off);
+ : }
+ :}
+ :
+ :#endif /* RENDER */
+/*
+ * Total samples for file : "/home/cworth/opt/xorg//include/X11/Xtrans/Xtrans.c"
+ *
+ * 1 0.0011
+ */
+
+
+ :/* $XdotOrg: xc/lib/xtrans/Xtrans.c,v 1.4 2004/11/15 15:06:56 ago Exp $ */
+ :/* $Xorg: Xtrans.c,v 1.4 2001/02/09 02:04:06 xorgcvs Exp $ */
+ :/*
+ :
+ :Copyright 1993, 1994, 1998 The Open Group
+ :
+ :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.
+ :
+ :The above copyright notice and this permission notice shall be included
+ :in all copies or substantial portions of the Software.
+ :
+ :THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ :OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ :MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ :IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ :OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ :ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ :OTHER DEALINGS IN THE SOFTWARE.
+ :
+ :Except as contained in this notice, the name of The Open Group shall
+ :not be used in advertising or otherwise to promote the sale, use or
+ :other dealings in this Software without prior written authorization
+ :from The Open Group.
+ :
+ :*/
+ :/* $XFree86: xc/lib/xtrans/Xtrans.c,v 3.33 2003/08/11 17:41:29 eich Exp $ */
+ :
+ :/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ : *
+ : * All Rights Reserved
+ : *
+ : * Permission to use, copy, modify, and distribute this software and its
+ : * documentation for any purpose and without fee is hereby granted, 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 NCR not be used in advertising
+ : * or publicity pertaining to distribution of the software without specific,
+ : * written prior permission. NCR makes no representations about the
+ : * suitability of this software for any purpose. It is provided "as is"
+ : * without express or implied warranty.
+ : *
+ : * NCR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ : * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
+ : * NO EVENT SHALL NCR 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 <ctype.h>
+ :
+ :/*
+ : * The transport table contains a definition for every transport (protocol)
+ : * family. All operations that can be made on the transport go through this
+ : * table.
+ : *
+ : * Each transport is assigned a unique transport id.
+ : *
+ : * New transports can be added by adding an entry in this table.
+ : * For compatiblity, the transport ids should never be renumbered.
+ : * Always add to the end of the list.
+ : */
+ :
+ :#define TRANS_TLI_INET_INDEX 1
+ :#define TRANS_TLI_TCP_INDEX 2
+ :#define TRANS_TLI_TLI_INDEX 3
+ :#define TRANS_SOCKET_UNIX_INDEX 4
+ :#define TRANS_SOCKET_LOCAL_INDEX 5
+ :#define TRANS_SOCKET_INET_INDEX 6
+ :#define TRANS_SOCKET_TCP_INDEX 7
+ :#define TRANS_DNET_INDEX 8
+ :#define TRANS_LOCAL_LOCAL_INDEX 9
+ :#define TRANS_LOCAL_PTS_INDEX 10
+ :#define TRANS_LOCAL_NAMED_INDEX 11
+ :#define TRANS_LOCAL_ISC_INDEX 12
+ :#define TRANS_LOCAL_SCO_INDEX 13
+ :#define TRANS_SOCKET_INET6_INDEX 14
+ :#define TRANS_LOCAL_PIPE_INDEX 15
+ :
+ :
+ :static
+ :Xtransport_table Xtransports[] = {
+ :#if defined(STREAMSCONN)
+ : { &TRANS(TLITCPFuncs), TRANS_TLI_TCP_INDEX },
+ : { &TRANS(TLIINETFuncs), TRANS_TLI_INET_INDEX },
+ : { &TRANS(TLITLIFuncs), TRANS_TLI_TLI_INDEX },
+ :#endif /* STREAMSCONN */
+ :#if defined(TCPCONN)
+ : { &TRANS(SocketTCPFuncs), TRANS_SOCKET_TCP_INDEX },
+ :#if defined(IPv6) && defined(AF_INET6)
+ : { &TRANS(SocketINET6Funcs), TRANS_SOCKET_INET6_INDEX },
+ :#endif /* IPv6 */
+ : { &TRANS(SocketINETFuncs), TRANS_SOCKET_INET_INDEX },
+ :#endif /* TCPCONN */
+ :#if defined(DNETCONN)
+ : { &TRANS(DNETFuncs), TRANS_DNET_INDEX },
+ :#endif /* DNETCONN */
+ :#if defined(UNIXCONN)
+ :#if !defined(LOCALCONN)
+ : { &TRANS(SocketLocalFuncs), TRANS_SOCKET_LOCAL_INDEX },
+ :#endif /* !LOCALCONN */
+ : { &TRANS(SocketUNIXFuncs), TRANS_SOCKET_UNIX_INDEX },
+ :#endif /* UNIXCONN */
+ :#if defined(OS2PIPECONN)
+ : { &TRANS(OS2LocalFuncs), TRANS_LOCAL_LOCAL_INDEX },
+ :#endif /* OS2PIPECONN */
+ :#if defined(LOCALCONN)
+ : { &TRANS(LocalFuncs), TRANS_LOCAL_LOCAL_INDEX },
+ :#ifndef sun
+ : { &TRANS(PTSFuncs), TRANS_LOCAL_PTS_INDEX },
+ :#endif /* sun */
+ :#ifdef SVR4
+ : { &TRANS(NAMEDFuncs), TRANS_LOCAL_NAMED_INDEX },
+ :#endif
+ :#ifdef sun
+ : { &TRANS(PIPEFuncs), TRANS_LOCAL_PIPE_INDEX },
+ :#else /* !sun */
+ :#if !defined(__SCO__) && !defined(__UNIXWARE__)
+ : { &TRANS(ISCFuncs), TRANS_LOCAL_ISC_INDEX },
+ :#endif
+ : { &TRANS(SCOFuncs), TRANS_LOCAL_SCO_INDEX },
+ :#endif /* sun */
+ :#endif /* LOCALCONN */
+ :};
+ :
+ :#define NUMTRANS (sizeof(Xtransports)/sizeof(Xtransport_table))
+ :
+ :
+ :#ifdef WIN32
+ :#define ioctl ioctlsocket
+ :#endif
+ :
+ :
+ :\f
+ :/*
+ : * These are a few utility function used by the public interface functions.
+ : */
+ :
+ :void
+ :TRANS(FreeConnInfo) (XtransConnInfo ciptr)
+ :
+ :{
+ : PRMSG (3,"FreeConnInfo(%p)\n", ciptr, 0, 0);
+ :
+ : if (ciptr->addr)
+ : xfree (ciptr->addr);
+ :
+ : if (ciptr->peeraddr)
+ : xfree (ciptr->peeraddr);
+ :
+ : if (ciptr->port)
+ : xfree (ciptr->port);
+ :
+ : xfree ((char *) ciptr);
+ :}
+ :
+ :
+ :#define PROTOBUFSIZE 20
+ :
+ :static Xtransport *
+ :TRANS(SelectTransport) (char *protocol)
+ :
+ :{
+ : char protobuf[PROTOBUFSIZE];
+ : int i;
+ :
+ : PRMSG (3,"SelectTransport(%s)\n", protocol, 0, 0);
+ :
+ : /*
+ : * Force Protocol to be lowercase as a way of doing
+ : * a case insensitive match.
+ : */
+ :
+ : strncpy (protobuf, protocol, PROTOBUFSIZE - 1);
+ : protobuf[PROTOBUFSIZE-1] = '\0';
+ :
+ : for (i = 0; i < PROTOBUFSIZE && protobuf[i] != '\0'; i++)
+ : if (isupper (protobuf[i]))
+ : protobuf[i] = tolower (protobuf[i]);
+ :
+ : /* Look at all of the configured protocols */
+ :
+ : for (i = 0; i < NUMTRANS; i++)
+ : {
+ : if (!strcmp (protobuf, Xtransports[i].transport->TransName))
+ : return Xtransports[i].transport;
+ : }
+ :
+ : return NULL;
+ :}
+ :
+ :#ifndef TEST_t
+ :static
+ :#endif /* TEST_t */
+ :int
+ :TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port)
+ :
+ :{
+ : /*
+ : * For the font library, the address is a string formatted
+ : * as "protocol/host:port[/catalogue]". Note that the catologue
+ : * is optional. At this time, the catologue info is ignored, but
+ : * we have to parse it anyways.
+ : *
+ : * Other than fontlib, the address is a string formatted
+ : * as "protocol/host:port".
+ : *
+ : * If the protocol part is missing, then assume TCP.
+ : * If the protocol part and host part are missing, then assume local.
+ : * If a "::" is found then assume DNET.
+ : */
+ :
+ : char *mybuf, *tmpptr;
+ : char *_protocol, *_host, *_port;
+ : char hostnamebuf[256];
+ : int _host_len;
+ :
+ : PRMSG (3,"ParseAddress(%s)\n", address, 0, 0);
+ :
+ : /* Copy the string so it can be changed */
+ :
+ : tmpptr = mybuf = (char *) xalloc (strlen (address) + 1);
+ : strcpy (mybuf, address);
+ :
+ : /* Parse the string to get each component */
+ :
+ : /* Get the protocol part */
+ :
+ : _protocol = mybuf;
+ :
+ :
+ : if ( ((mybuf = strchr (mybuf,'/')) == NULL) &&
+ : ((mybuf = strrchr (tmpptr,':')) == NULL) )
+ : {
+ : /* address is in a bad format */
+ : *protocol = NULL;
+ : *host = NULL;
+ : *port = NULL;
+ : xfree (tmpptr);
+ : return 0;
+ : }
+ :
+ : if (*mybuf == ':')
+ : {
+ : /*
+ : * If there is a hostname, then assume tcp, otherwise
+ : * it must be local.
+ : */
+ : if (mybuf == tmpptr)
+ : {
+ : /* There is neither a protocol or host specified */
+ : _protocol = "local";
+ : }
+ : else
+ : {
+ : /* There is a hostname specified */
+ : _protocol = "tcp";
+ : mybuf = tmpptr; /* reset to the begining of the host ptr */
+ : }
+ : }
+ : else
+ : {
+ : /* *mybuf == '/' */
+ :
+ : *mybuf ++= '\0'; /* put a null at the end of the protocol */
+ :
+ : if (strlen(_protocol) == 0)
+ : {
+ : /*
+ : * If there is a hostname, then assume tcp, otherwise
+ : * it must be local.
+ : */
+ : if (*mybuf != ':')
+ : _protocol = "tcp";
+ : else
+ : _protocol = "local";
+ : }
+ : }
+ :
+ : /* Get the host part */
+ :
+ : _host = mybuf;
+ :
+ : if ((mybuf = strrchr (mybuf,':')) == NULL)
+ : {
+ : *protocol = NULL;
+ : *host = NULL;
+ : *port = NULL;
+ : xfree (tmpptr);
+ : return 0;
+ : }
+ :
+ : /* Check for DECnet */
+ :
+ : if ((mybuf != _host) && (*(mybuf - 1) == ':')
+ :#if defined(IPv6) && defined(AF_INET6)
+ : /* An IPv6 address can end in :: so three : in a row is assumed to be
+ : an IPv6 host and not a DECnet node with a : in it's name, unless
+ : DECnet is specifically requested */
+ : && ( ((mybuf - 1) == _host) || (*(mybuf - 2) != ':') ||
+ : ((_protocol != NULL) && (strcmp(_protocol, "dnet") == 0)) )
+ :#endif
+ : )
+ : {
+ : _protocol = "dnet";
+ : *(mybuf - 1) = '\0';
+ : }
+ :
+ : *mybuf ++= '\0';
+ :
+ : _host_len = strlen(_host);
+ : if (_host_len == 0)
+ : {
+ : TRANS(GetHostname) (hostnamebuf, sizeof (hostnamebuf));
+ : _host = hostnamebuf;
+ : }
+ :#if defined(IPv6) && defined(AF_INET6)
+ : /* hostname in IPv6 [numeric_addr]:0 form? */
+ : else if ( (_host_len > 3) &&
+ : ((strcmp(_protocol, "tcp") == 0) || (strcmp(_protocol, "inet6") == 0))
+ : && (*_host == '[') && (*(_host + _host_len - 1) == ']') ) {
+ : struct sockaddr_in6 sin6;
+ :
+ : *(_host + _host_len - 1) = '\0';
+ :
+ : /* Verify address is valid IPv6 numeric form */
+ : if (inet_pton(AF_INET6, _host + 1, &sin6) == 1) {
+ : /* It is. Use it as such. */
+ : _host++;
+ : _protocol = "inet6";
+ : } else {
+ : /* It's not, restore it just in case some other code can use it. */
+ : *(_host + _host_len - 1) = ']';
+ : }
+ : }
+ :#endif
+ :
+ :
+ : /* Get the port */
+ :
+ : _port = mybuf;
+ :
+ :#if defined(FONT_t) || defined(FS_t)
+ : /*
+ : * Is there an optional catalogue list?
+ : */
+ :
+ : if ((mybuf = strchr (mybuf,'/')) != NULL)
+ : *mybuf ++= '\0';
+ :
+ : /*
+ : * The rest, if any, is the (currently unused) catalogue list.
+ : *
+ : * _catalogue = mybuf;
+ : */
+ :#endif
+ :
+ : /*
+ : * Now that we have all of the components, allocate new
+ : * string space for them.
+ : */
+ :
+ : if ((*protocol = (char *) xalloc(strlen (_protocol) + 1)) == NULL)
+ : {
+ : /* Malloc failed */
+ : *port = NULL;
+ : *host = NULL;
+ : *protocol = NULL;
+ : xfree (tmpptr);
+ : return 0;
+ : }
+ : else
+ : strcpy (*protocol, _protocol);
+ :
+ : if ((*host = (char *) xalloc (strlen (_host) + 1)) == NULL)
+ : {
+ : /* Malloc failed */
+ : *port = NULL;
+ : *host = NULL;
+ : xfree (*protocol);
+ : *protocol = NULL;
+ : xfree (tmpptr);
+ : return 0;
+ : }
+ : else
+ : strcpy (*host, _host);
+ :
+ : if ((*port = (char *) xalloc (strlen (_port) + 1)) == NULL)
+ : {
+ : /* Malloc failed */
+ : *port = NULL;
+ : xfree (*host);
+ : *host = NULL;
+ : xfree (*protocol);
+ : *protocol = NULL;
+ : xfree (tmpptr);
+ : return 0;
+ : }
+ : else
+ : strcpy (*port, _port);
+ :
+ : xfree (tmpptr);
+ :
+ : return 1;
+ :}
+ :
+ :
+ :/*
+ : * TRANS(Open) does all of the real work opening a connection. The only
+ : * funny part about this is the type parameter which is used to decide which
+ : * type of open to perform.
+ : */
+ :
+ :static XtransConnInfo
+ :TRANS(Open) (int type, char *address)
+ :
+ :{
+ : char *protocol = NULL, *host = NULL, *port = NULL;
+ : XtransConnInfo ciptr = NULL;
+ : Xtransport *thistrans;
+ :
+ : PRMSG (2,"Open(%d,%s)\n", type, address, 0);
+ :
+ :#if defined(WIN32) && (defined(TCPCONN) || defined(DNETCONN))
+ : if (TRANS(WSAStartup)())
+ : {
+ : PRMSG (1,"Open: WSAStartup failed\n", 0, 0, 0);
+ : return NULL;
+ : }
+ :#endif
+ :
+ : /* Parse the Address */
+ :
+ : if (TRANS(ParseAddress) (address, &protocol, &host, &port) == 0)
+ : {
+ : PRMSG (1,"Open: Unable to Parse address %s\n", address, 0, 0);
+ : return NULL;
+ : }
+ :
+ : /* Determine the transport type */
+ :
+ : if ((thistrans = TRANS(SelectTransport) (protocol)) == NULL)
+ : {
+ : PRMSG (1,"Open: Unable to find transport for %s\n",
+ : protocol, 0, 0);
+ :
+ : xfree (protocol);
+ : xfree (host);
+ : xfree (port);
+ : return NULL;
+ : }
+ :
+ : /* Open the transport */
+ :
+ : switch (type)
+ : {
+ : case XTRANS_OPEN_COTS_CLIENT:
+ :#ifdef TRANS_CLIENT
+ : ciptr = thistrans->OpenCOTSClient(thistrans, protocol, host, port);
+ :#endif /* TRANS_CLIENT */
+ : break;
+ : case XTRANS_OPEN_COTS_SERVER:
+ :#ifdef TRANS_SERVER
+ : ciptr = thistrans->OpenCOTSServer(thistrans, protocol, host, port);
+ :#endif /* TRANS_SERVER */
+ : break;
+ : case XTRANS_OPEN_CLTS_CLIENT:
+ :#ifdef TRANS_CLIENT
+ : ciptr = thistrans->OpenCLTSClient(thistrans, protocol, host, port);
+ :#endif /* TRANS_CLIENT */
+ : break;
+ : case XTRANS_OPEN_CLTS_SERVER:
+ :#ifdef TRANS_SERVER
+ : ciptr = thistrans->OpenCLTSServer(thistrans, protocol, host, port);
+ :#endif /* TRANS_SERVER */
+ : break;
+ : default:
+ : PRMSG (1,"Open: Unknown Open type %d\n", type, 0, 0);
+ : }
+ :
+ : if (ciptr == NULL)
+ : {
+ : if (!(thistrans->flags & TRANS_DISABLED))
+ : {
+ : PRMSG (1,"Open: transport open failed for %s/%s:%s\n",
+ : protocol, host, port);
+ : }
+ : xfree (protocol);
+ : xfree (host);
+ : xfree (port);
+ : return NULL;
+ : }
+ :
+ : ciptr->transptr = thistrans;
+ : ciptr->port = port; /* We need this for TRANS(Reopen) */
+ :
+ : xfree (protocol);
+ : xfree (host);
+ :
+ : return ciptr;
+ :}
+ :
+ :
+ :#ifdef TRANS_REOPEN
+ :
+ :/*
+ : * We might want to create an XtransConnInfo object based on a previously
+ : * opened connection. For example, the font server may clone itself and
+ : * pass file descriptors to the parent.
+ : */
+ :
+ :static XtransConnInfo
+ :TRANS(Reopen) (int type, int trans_id, int fd, char *port)
+ :
+ :{
+ : XtransConnInfo ciptr = NULL;
+ : Xtransport *thistrans = NULL;
+ : char *save_port;
+ : int i;
+ :
+ : PRMSG (2,"Reopen(%d,%d,%s)\n", trans_id, fd, port);
+ :
+ : /* Determine the transport type */
+ :
+ : for (i = 0; i < NUMTRANS; i++)
+ : if (Xtransports[i].transport_id == trans_id)
+ : {
+ : thistrans = Xtransports[i].transport;
+ : break;
+ : }
+ :
+ : if (thistrans == NULL)
+ : {
+ : PRMSG (1,"Reopen: Unable to find transport id %d\n",
+ : trans_id, 0, 0);
+ :
+ : return NULL;
+ : }
+ :
+ : if ((save_port = (char *) xalloc (strlen (port) + 1)) == NULL)
+ : {
+ : PRMSG (1,"Reopen: Unable to malloc port string\n", 0, 0, 0);
+ :
+ : return NULL;
+ : }
+ :
+ : strcpy (save_port, port);
+ :
+ : /* Get a new XtransConnInfo object */
+ :
+ : switch (type)
+ : {
+ : case XTRANS_OPEN_COTS_SERVER:
+ : ciptr = thistrans->ReopenCOTSServer(thistrans, fd, port);
+ : break;
+ : case XTRANS_OPEN_CLTS_SERVER:
+ : ciptr = thistrans->ReopenCLTSServer(thistrans, fd, port);
+ : break;
+ : default:
+ : PRMSG (1,"Reopen: Bad Open type %d\n", type, 0, 0);
+ : }
+ :
+ : if (ciptr == NULL)
+ : {
+ : PRMSG (1,"Reopen: transport open failed\n", 0, 0, 0);
+ : return NULL;
+ : }
+ :
+ : ciptr->transptr = thistrans;
+ : ciptr->port = save_port;
+ :
+ : return ciptr;
+ :}
+ :
+ :#endif /* TRANS_REOPEN */
+ :
+ :
+ :\f
+ :/*
+ : * These are the public interfaces to this Transport interface.
+ : * These are the only functions that should have knowledge of the transport
+ : * table.
+ : */
+ :
+ :#ifdef TRANS_CLIENT
+ :
+ :XtransConnInfo
+ :TRANS(OpenCOTSClient) (char *address)
+ :
+ :{
+ : PRMSG (2,"OpenCOTSClient(%s)\n", address, 0, 0);
+ : return TRANS(Open) (XTRANS_OPEN_COTS_CLIENT, address);
+ :}
+ :
+ :#endif /* TRANS_CLIENT */
+ :
+ :
+ :#ifdef TRANS_SERVER
+ :
+ :XtransConnInfo
+ :TRANS(OpenCOTSServer) (char *address)
+ :
+ :{
+ : PRMSG (2,"OpenCOTSServer(%s)\n", address, 0, 0);
+ : return TRANS(Open) (XTRANS_OPEN_COTS_SERVER, address);
+ :}
+ :
+ :#endif /* TRANS_SERVER */
+ :
+ :
+ :#ifdef TRANS_CLIENT
+ :
+ :XtransConnInfo
+ :TRANS(OpenCLTSClient) (char *address)
+ :
+ :{
+ : PRMSG (2,"OpenCLTSClient(%s)\n", address, 0, 0);
+ : return TRANS(Open) (XTRANS_OPEN_CLTS_CLIENT, address);
+ :}
+ :
+ :#endif /* TRANS_CLIENT */
+ :
+ :
+ :#ifdef TRANS_SERVER
+ :
+ :XtransConnInfo
+ :TRANS(OpenCLTSServer) (char *address)
+ :
+ :{
+ : PRMSG (2,"OpenCLTSServer(%s)\n", address, 0, 0);
+ : return TRANS(Open) (XTRANS_OPEN_CLTS_SERVER, address);
+ :}
+ :
+ :#endif /* TRANS_SERVER */
+ :
+ :
+ :#ifdef TRANS_REOPEN
+ :
+ :XtransConnInfo
+ :TRANS(ReopenCOTSServer) (int trans_id, int fd, char *port)
+ :
+ :{
+ : PRMSG (2,"ReopenCOTSServer(%d, %d, %s)\n", trans_id, fd, port);
+ : return TRANS(Reopen) (XTRANS_OPEN_COTS_SERVER, trans_id, fd, port);
+ :}
+ :
+ :XtransConnInfo
+ :TRANS(ReopenCLTSServer) (int trans_id, int fd, char *port)
+ :
+ :{
+ : PRMSG (2,"ReopenCLTSServer(%d, %d, %s)\n", trans_id, fd, port);
+ : return TRANS(Reopen) (XTRANS_OPEN_CLTS_SERVER, trans_id, fd, port);
+ :}
+ :
+ :
+ :int
+ :TRANS(GetReopenInfo) (XtransConnInfo ciptr,
+ : int *trans_id, int *fd, char **port)
+ :
+ :{
+ : int i;
+ :
+ : for (i = 0; i < NUMTRANS; i++)
+ : if (Xtransports[i].transport == ciptr->transptr)
+ : {
+ : *trans_id = Xtransports[i].transport_id;
+ : *fd = ciptr->fd;
+ :
+ : if ((*port = (char *) xalloc (strlen (ciptr->port) + 1)) == NULL)
+ : return 0;
+ : else
+ : {
+ : strcpy (*port, ciptr->port);
+ : return 1;
+ : }
+ : }
+ :
+ : return 0;
+ :}
+ :
+ :#endif /* TRANS_REOPEN */
+ :
+ :
+ :int
+ :TRANS(SetOption) (XtransConnInfo ciptr, int option, int arg)
+ :
+ :{
+ : int fd = ciptr->fd;
+ : int ret = 0;
+ :
+ : PRMSG (2,"SetOption(%d,%d,%d)\n", fd, option, arg);
+ :
+ : /*
+ : * For now, all transport type use the same stuff for setting options.
+ : * As long as this is true, we can put the common code here. Once a more
+ : * complicated transport such as shared memory or an OSI implementation
+ : * that uses the session and application libraries is implemented, this
+ : * code may have to move to a transport dependent function.
+ : *
+ : * ret = ciptr->transptr->SetOption (ciptr, option, arg);
+ : */
+ :
+ : switch (option)
+ : {
+ : case TRANS_NONBLOCKING:
+ : switch (arg)
+ : {
+ : case 0:
+ : /* Set to blocking mode */
+ : break;
+ : case 1: /* Set to non-blocking mode */
+ :
+ :#if defined(O_NONBLOCK) && (!defined(ultrix) && !defined(hpux) && !defined(AIXV3) && !defined(uniosu) && !defined(__UNIXOS2__) && !defined(SCO325)) && !defined(__QNX__)
+ : ret = fcntl (fd, F_GETFL, 0);
+ : if (ret != -1)
+ : ret = fcntl (fd, F_SETFL, ret | O_NONBLOCK);
+ :#else
+ :#ifdef FIOSNBIO
+ : {
+ : int arg;
+ : arg = 1;
+ : ret = ioctl (fd, FIOSNBIO, &arg);
+ : }
+ :#else
+ :#if (defined(AIXV3) || defined(uniosu) || defined(WIN32) || defined(__UNIXOS2__) || defined(__QNX__)) && defined(FIONBIO)
+ : {
+ :#ifdef WIN32
+ : u_long arg;
+ :#else
+ : int arg;
+ :#endif
+ : arg = 1;
+ :/* IBM TCP/IP understands this option too well: it causes TRANS(Read) to fail
+ : * eventually with EWOULDBLOCK */
+ :#ifndef __UNIXOS2__
+ : ret = ioctl (fd, FIONBIO, &arg);
+ :#else
+ :/* ret = ioctl(fd, FIONBIO, &arg, sizeof(int));*/
+ :#endif
+ : }
+ :#else
+ : ret = fcntl (fd, F_GETFL, 0);
+ :#ifdef FNDELAY
+ : ret = fcntl (fd, F_SETFL, ret | FNDELAY);
+ :#else
+ : ret = fcntl (fd, F_SETFL, ret | O_NDELAY);
+ :#endif
+ :#endif /* AIXV3 || uniosu */
+ :#endif /* FIOSNBIO */
+ :#endif /* O_NONBLOCK */
+ : break;
+ : default:
+ : /* Unknown option */
+ : break;
+ : }
+ : break;
+ : case TRANS_CLOSEONEXEC:
+ :#ifdef F_SETFD
+ :#ifdef FD_CLOEXEC
+ : ret = fcntl (fd, F_SETFD, FD_CLOEXEC);
+ :#else
+ : ret = fcntl (fd, F_SETFD, 1);
+ :#endif /* FD_CLOEXEC */
+ :#endif /* F_SETFD */
+ : break;
+ : }
+ :
+ : return ret;
+ :}
+ :
+ :#ifdef TRANS_SERVER
+ :
+ :int
+ :TRANS(CreateListener) (XtransConnInfo ciptr, char *port, unsigned int flags)
+ :
+ :{
+ : return ciptr->transptr->CreateListener (ciptr, port, flags);
+ :}
+ :
+ :int
+ :TRANS(NoListen) (char * protocol)
+ :
+ :{
+ : Xtransport *trans;
+ : int i = 0, ret = 0;
+ :
+ : if ((trans = TRANS(SelectTransport)(protocol)) == NULL)
+ : {
+ : PRMSG (1,"TransNoListen: unable to find transport: %s\n",
+ : protocol, 0, 0);
+ :
+ : return -1;
+ : }
+ : if (trans->flags & TRANS_ALIAS) {
+ : if (trans->nolisten)
+ : while (trans->nolisten[i]) {
+ : ret |= TRANS(NoListen)(trans->nolisten[i]);
+ : i++;
+ : }
+ : }
+ :
+ : trans->flags |= TRANS_NOLISTEN;
+ : return ret;
+ :}
+ :
+ :int
+ :TRANS(ResetListener) (XtransConnInfo ciptr)
+ :
+ :{
+ : if (ciptr->transptr->ResetListener)
+ : return ciptr->transptr->ResetListener (ciptr);
+ : else
+ : return TRANS_RESET_NOOP;
+ :}
+ :
+ :
+ :XtransConnInfo
+ :TRANS(Accept) (XtransConnInfo ciptr, int *status)
+ :
+ :{
+ : XtransConnInfo newciptr;
+ :
+ : PRMSG (2,"Accept(%d)\n", ciptr->fd, 0, 0);
+ :
+ : newciptr = ciptr->transptr->Accept (ciptr, status);
+ :
+ : if (newciptr)
+ : newciptr->transptr = ciptr->transptr;
+ :
+ : return newciptr;
+ :}
+ :
+ :#endif /* TRANS_SERVER */
+ :
+ :
+ :#ifdef TRANS_CLIENT
+ :
+ :int
+ :TRANS(Connect) (XtransConnInfo ciptr, char *address)
+ :
+ :{
+ : char *protocol;
+ : char *host;
+ : char *port;
+ : int ret;
+ :
+ : PRMSG (2,"Connect(%d,%s)\n", ciptr->fd, address, 0);
+ :
+ : if (TRANS(ParseAddress) (address, &protocol, &host, &port) == 0)
+ : {
+ : PRMSG (1,"Connect: Unable to Parse address %s\n",
+ : address, 0, 0);
+ : return -1;
+ : }
+ :
+ : if (!port || !*port)
+ : {
+ : PRMSG (1,"Connect: Missing port specification in %s\n",
+ : address, 0, 0);
+ : if (protocol) xfree (protocol);
+ : if (host) xfree (host);
+ : return -1;
+ : }
+ :
+ : ret = ciptr->transptr->Connect (ciptr, host, port);
+ :
+ : if (protocol) xfree (protocol);
+ : if (host) xfree (host);
+ : if (port) xfree (port);
+ :
+ : return ret;
+ :}
+ :
+ :#endif /* TRANS_CLIENT */
+ :
+ :
+ :int
+ :TRANS(BytesReadable) (XtransConnInfo ciptr, BytesReadable_t *pend)
+ :
+ :{
+ : return ciptr->transptr->BytesReadable (ciptr, pend);
+ :}
+ :
+ :int
+ :TRANS(Read) (XtransConnInfo ciptr, char *buf, int size)
+ :
+ :{ /* _XSERVTransRead total: 1 0.0011 */
+ 1 0.0011 : return ciptr->transptr->Read (ciptr, buf, size);
+ :}
+ :
+ :int
+ :TRANS(Write) (XtransConnInfo ciptr, char *buf, int size)
+ :
+ :{
+ : return ciptr->transptr->Write (ciptr, buf, size);
+ :}
+ :
+ :int
+ :TRANS(Readv) (XtransConnInfo ciptr, struct iovec *buf, int size)
+ :
+ :{
+ : return ciptr->transptr->Readv (ciptr, buf, size);
+ :}
+ :
+ :int
+ :TRANS(Writev) (XtransConnInfo ciptr, struct iovec *buf, int size)
+ :
+ :{
+ : return ciptr->transptr->Writev (ciptr, buf, size);
+ :}
+ :
+ :int
+ :TRANS(Disconnect) (XtransConnInfo ciptr)
+ :
+ :{
+ : return ciptr->transptr->Disconnect (ciptr);
+ :}
+ :
+ :int
+ :TRANS(Close) (XtransConnInfo ciptr)
+ :
+ :{
+ : int ret;
+ :
+ : PRMSG (2,"Close(%d)\n", ciptr->fd, 0, 0);
+ :
+ : ret = ciptr->transptr->Close (ciptr);
+ :
+ : TRANS(FreeConnInfo) (ciptr);
+ :
+ : return ret;
+ :}
+ :
+ :int
+ :TRANS(CloseForCloning) (XtransConnInfo ciptr)
+ :
+ :{
+ : int ret;
+ :
+ : PRMSG (2,"CloseForCloning(%d)\n", ciptr->fd, 0, 0);
+ :
+ : ret = ciptr->transptr->CloseForCloning (ciptr);
+ :
+ : TRANS(FreeConnInfo) (ciptr);
+ :
+ : return ret;
+ :}
+ :
+ :int
+ :TRANS(IsLocal) (XtransConnInfo ciptr)
+ :
+ :{
+ : return (ciptr->family == AF_UNIX);
+ :}
+ :
+ :
+ :int
+ :TRANS(GetMyAddr) (XtransConnInfo ciptr, int *familyp, int *addrlenp,
+ : Xtransaddr **addrp)
+ :
+ :{
+ : PRMSG (2,"GetMyAddr(%d)\n", ciptr->fd, 0, 0);
+ :
+ : *familyp = ciptr->family;
+ : *addrlenp = ciptr->addrlen;
+ :
+ : if ((*addrp = (Xtransaddr *) xalloc (ciptr->addrlen)) == NULL)
+ : {
+ : PRMSG (1,"GetMyAddr: malloc failed\n", 0, 0, 0);
+ : return -1;
+ : }
+ : memcpy(*addrp, ciptr->addr, ciptr->addrlen);
+ :
+ : return 0;
+ :}
+ :
+ :int
+ :TRANS(GetPeerAddr) (XtransConnInfo ciptr, int *familyp, int *addrlenp,
+ : Xtransaddr **addrp)
+ :
+ :{
+ : PRMSG (2,"GetPeerAddr(%d)\n", ciptr->fd, 0, 0);
+ :
+ : *familyp = ciptr->family;
+ : *addrlenp = ciptr->peeraddrlen;
+ :
+ : if ((*addrp = (Xtransaddr *) xalloc (ciptr->peeraddrlen)) == NULL)
+ : {
+ : PRMSG (1,"GetPeerAddr: malloc failed\n", 0, 0, 0);
+ : return -1;
+ : }
+ : memcpy(*addrp, ciptr->peeraddr, ciptr->peeraddrlen);
+ :
+ : return 0;
+ :}
+ :
+ :
+ :int
+ :TRANS(GetConnectionNumber) (XtransConnInfo ciptr)
+ :
+ :{
+ : return ciptr->fd;
+ :}
+ :
+ :\f
+ :/*
+ : * These functions are really utility functions, but they require knowledge
+ : * of the internal data structures, so they have to be part of the Transport
+ : * Independant API.
+ : */
+ :
+ :#ifdef TRANS_SERVER
+ :
+ :static int
+ :complete_network_count (void)
+ :
+ :{
+ : int count = 0;
+ : int found_local = 0;
+ : int i;
+ :
+ : /*
+ : * For a complete network, we only need one LOCALCONN transport to work
+ : */
+ :
+ : for (i = 0; i < NUMTRANS; i++)
+ : {
+ : if (Xtransports[i].transport->flags & TRANS_ALIAS
+ : || Xtransports[i].transport->flags & TRANS_NOLISTEN)
+ : continue;
+ :
+ : if (Xtransports[i].transport->flags & TRANS_LOCAL)
+ : found_local = 1;
+ : else
+ : count++;
+ : }
+ :
+ : return (count + found_local);
+ :}
+ :
+ :
+ :
+ :int
+ :TRANS(MakeAllCOTSServerListeners) (char *port, int *partial, int *count_ret,
+ : XtransConnInfo **ciptrs_ret)
+ :
+ :{
+ : char buffer[256]; /* ??? What size ?? */
+ : XtransConnInfo ciptr, temp_ciptrs[NUMTRANS];
+ : int status, i, j;
+ :#if defined(IPv6) && defined(AF_INET6)
+ : int ipv6_succ = 0;
+ :#endif
+ :
+ : PRMSG (2,"MakeAllCOTSServerListeners(%s,%p)\n",
+ : port ? port : "NULL", ciptrs_ret, 0);
+ :
+ : *count_ret = 0;
+ :
+ : for (i = 0; i < NUMTRANS; i++)
+ : {
+ : Xtransport *trans = Xtransports[i].transport;
+ : unsigned int flags = 0;
+ :
+ : if (trans->flags&TRANS_ALIAS || trans->flags&TRANS_NOLISTEN)
+ : continue;
+ :
+ : snprintf(buffer, sizeof(buffer), "%s/:%s",
+ : trans->TransName, port ? port : "");
+ :
+ : PRMSG (5,"MakeAllCOTSServerListeners: opening %s\n",
+ : buffer, 0, 0);
+ :
+ : if ((ciptr = TRANS(OpenCOTSServer(buffer))) == NULL)
+ : {
+ : if (trans->flags & TRANS_DISABLED)
+ : continue;
+ :
+ : PRMSG (1,
+ : "MakeAllCOTSServerListeners: failed to open listener for %s\n",
+ : trans->TransName, 0, 0);
+ : continue;
+ : }
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if ((Xtransports[i].transport_id == TRANS_SOCKET_INET_INDEX
+ : && ipv6_succ))
+ : flags |= ADDR_IN_USE_ALLOWED;
+ :#endif
+ :
+ : if ((status = TRANS(CreateListener (ciptr, port, flags))) < 0)
+ : {
+ : if (status == TRANS_ADDR_IN_USE)
+ : {
+ : /*
+ : * We failed to bind to the specified address because the
+ : * address is in use. It must be that a server is already
+ : * running at this address, and this function should fail.
+ : */
+ :
+ : PRMSG (1,
+ : "MakeAllCOTSServerListeners: server already running\n",
+ : 0, 0, 0);
+ :
+ : for (j = 0; j < *count_ret; j++)
+ : TRANS(Close) (temp_ciptrs[j]);
+ :
+ : *count_ret = 0;
+ : *ciptrs_ret = NULL;
+ : *partial = 0;
+ : return -1;
+ : }
+ : else
+ : {
+ : PRMSG (1,
+ : "MakeAllCOTSServerListeners: failed to create listener for %s\n",
+ : trans->TransName, 0, 0);
+ :
+ : continue;
+ : }
+ : }
+ :
+ :#if defined(IPv6) && defined(AF_INET6)
+ : if (Xtransports[i].transport_id == TRANS_SOCKET_INET6_INDEX)
+ : ipv6_succ = 1;
+ :#endif
+ :
+ : PRMSG (5,
+ : "MakeAllCOTSServerListeners: opened listener for %s, %d\n",
+ : trans->TransName, ciptr->fd, 0);
+ :
+ : temp_ciptrs[*count_ret] = ciptr;
+ : (*count_ret)++;
+ : }
+ :
+ : *partial = (*count_ret < complete_network_count());
+ :
+ : PRMSG (5,
+ : "MakeAllCOTSServerListeners: partial=%d, actual=%d, complete=%d \n",
+ : *partial, *count_ret, complete_network_count());
+ :
+ : if (*count_ret > 0)
+ : {
+ : if ((*ciptrs_ret = (XtransConnInfo *) xalloc (
+ : *count_ret * sizeof (XtransConnInfo))) == NULL)
+ : {
+ : return -1;
+ : }
+ :
+ : for (i = 0; i < *count_ret; i++)
+ : {
+ : (*ciptrs_ret)[i] = temp_ciptrs[i];
+ : }
+ : }
+ : else
+ : *ciptrs_ret = NULL;
+ :
+ : return 0;
+ :}
+ :
+ :int
+ :TRANS(MakeAllCLTSServerListeners) (char *port, int *partial, int *count_ret,
+ : XtransConnInfo **ciptrs_ret)
+ :
+ :{
+ : char buffer[256]; /* ??? What size ?? */
+ : XtransConnInfo ciptr, temp_ciptrs[NUMTRANS];
+ : int status, i, j;
+ :
+ : PRMSG (2,"MakeAllCLTSServerListeners(%s,%p)\n",
+ : port ? port : "NULL", ciptrs_ret, 0);
+ :
+ : *count_ret = 0;
+ :
+ : for (i = 0; i < NUMTRANS; i++)
+ : {
+ : Xtransport *trans = Xtransports[i].transport;
+ :
+ : if (trans->flags&TRANS_ALIAS || trans->flags&TRANS_NOLISTEN)
+ : continue;
+ :
+ : snprintf(buffer, sizeof(buffer), "%s/:%s",
+ : trans->TransName, port ? port : "");
+ :
+ : PRMSG (5,"MakeAllCLTSServerListeners: opening %s\n",
+ : buffer, 0, 0);
+ :
+ : if ((ciptr = TRANS(OpenCLTSServer (buffer))) == NULL)
+ : {
+ : PRMSG (1,
+ : "MakeAllCLTSServerListeners: failed to open listener for %s\n",
+ : trans->TransName, 0, 0);
+ : continue;
+ : }
+ :
+ : if ((status = TRANS(CreateListener (ciptr, port, 0))) < 0)
+ : {
+ : if (status == TRANS_ADDR_IN_USE)
+ : {
+ : /*
+ : * We failed to bind to the specified address because the
+ : * address is in use. It must be that a server is already
+ : * running at this address, and this function should fail.
+ : */
+ :
+ : PRMSG (1,
+ : "MakeAllCLTSServerListeners: server already running\n",
+ : 0, 0, 0);
+ :
+ : for (j = 0; j < *count_ret; j++)
+ : TRANS(Close) (temp_ciptrs[j]);
+ :
+ : *count_ret = 0;
+ : *ciptrs_ret = NULL;
+ : *partial = 0;
+ : return -1;
+ : }
+ : else
+ : {
+ : PRMSG (1,
+ : "MakeAllCLTSServerListeners: failed to create listener for %s\n",
+ : trans->TransName, 0, 0);
+ :
+ : continue;
+ : }
+ : }
+ :
+ : PRMSG (5,
+ : "MakeAllCLTSServerListeners: opened listener for %s, %d\n",
+ : trans->TransName, ciptr->fd, 0);
+ : temp_ciptrs[*count_ret] = ciptr;
+ : (*count_ret)++;
+ : }
+ :
+ : *partial = (*count_ret < complete_network_count());
+ :
+ : PRMSG (5,
+ : "MakeAllCLTSServerListeners: partial=%d, actual=%d, complete=%d \n",
+ : *partial, *count_ret, complete_network_count());
+ :
+ : if (*count_ret > 0)
+ : {
+ : if ((*ciptrs_ret = (XtransConnInfo *) xalloc (
+ : *count_ret * sizeof (XtransConnInfo))) == NULL)
+ : {
+ : return -1;
+ : }
+ :
+ : for (i = 0; i < *count_ret; i++)
+ : {
+ : (*ciptrs_ret)[i] = temp_ciptrs[i];
+ : }
+ : }
+ : else
+ : *ciptrs_ret = NULL;
+ :
+ : return 0;
+ :}
+ :
+ :#endif /* TRANS_SERVER */
+ :
+ :
+ :\f
+ :/*
+ : * These routines are not part of the X Transport Interface, but they
+ : * may be used by it.
+ : */
+ :
+ :#ifdef CRAY
+ :
+ :/*
+ : * Cray UniCOS does not have readv and writev so we emulate
+ : */
+ :
+ :static int TRANS(ReadV) (XtransConnInfo ciptr, struct iovec *iov, int iovcnt)
+ :
+ :{
+ : struct msghdr hdr;
+ :
+ : hdr.msg_iov = iov;
+ : hdr.msg_iovlen = iovcnt;
+ : hdr.msg_accrights = 0;
+ : hdr.msg_accrightslen = 0;
+ : hdr.msg_name = 0;
+ : hdr.msg_namelen = 0;
+ :
+ : return (recvmsg (ciptr->fd, &hdr, 0));
+ :}
+ :
+ :static int TRANS(WriteV) (XtransConnInfo ciptr, struct iovec *iov, int iovcnt)
+ :
+ :{
+ : struct msghdr hdr;
+ :
+ : hdr.msg_iov = iov;
+ : hdr.msg_iovlen = iovcnt;
+ : hdr.msg_accrights = 0;
+ : hdr.msg_accrightslen = 0;
+ : hdr.msg_name = 0;
+ : hdr.msg_namelen = 0;
+ :
+ : return (sendmsg (ciptr->fd, &hdr, 0));
+ :}
+ :
+ :#endif /* CRAY */
+ :
+ :#if (defined(SYSV) && defined(i386) && !defined(__SCO__) && !defined(sun)) || defined(WIN32) || defined(__sxg__) || defined(__UNIXOS2__)
+ :
+ :/*
+ : * emulate readv
+ : */
+ :
+ :static int TRANS(ReadV) (XtransConnInfo ciptr, struct iovec *iov, int iovcnt)
+ :
+ :{
+ : int i, len, total;
+ : char *base;
+ :
+ : ESET(0);
+ : for (i = 0, total = 0; i < iovcnt; i++, iov++) {
+ : len = iov->iov_len;
+ : base = iov->iov_base;
+ : while (len > 0) {
+ : register int nbytes;
+ : nbytes = TRANS(Read) (ciptr, base, len);
+ : if (nbytes < 0 && total == 0) return -1;
+ : if (nbytes <= 0) return total;
+ : ESET(0);
+ : len -= nbytes;
+ : total += nbytes;
+ : base += nbytes;
+ : }
+ : }
+ : return total;
+ :}
+ :
+ :#endif /* SYSV && i386 || WIN32 || __sxg__ */
+ :
+ :#if (defined(SYSV) && defined(i386) && !defined(__SCO__) && !defined(sun)) || defined(WIN32) || defined(__sxg__) || defined(__UNIXOS2__)
+ :
+ :/*
+ : * emulate writev
+ : */
+ :
+ :static int TRANS(WriteV) (XtransConnInfo ciptr, struct iovec *iov, int iovcnt)
+ :
+ :{
+ : int i, len, total;
+ : char *base;
+ :
+ : ESET(0);
+ : for (i = 0, total = 0; i < iovcnt; i++, iov++) {
+ : len = iov->iov_len;
+ : base = iov->iov_base;
+ : while (len > 0) {
+ : register int nbytes;
+ : nbytes = TRANS(Write) (ciptr, base, len);
+ : if (nbytes < 0 && total == 0) return -1;
+ : if (nbytes <= 0) return total;
+ : ESET(0);
+ : len -= nbytes;
+ : total += nbytes;
+ : base += nbytes;
+ : }
+ : }
+ : return total;
+ :}
+ :
+ :#endif /* SYSV && i386 || WIN32 || __sxg__ */
+ :
+ :
+ :#if (defined(_POSIX_SOURCE) && !defined(AIXV3) && !defined(__QNX__)) || defined(hpux) || defined(USG) || defined(SVR4) || defined(__SCO__)
+ :#ifndef NEED_UTSNAME
+ :#define NEED_UTSNAME
+ :#endif
+ :#include <sys/utsname.h>
+ :#endif
+ :
+ :/*
+ : * TRANS(GetHostname) - similar to gethostname but allows special processing.
+ : */
+ :
+ :int TRANS(GetHostname) (char *buf, int maxlen)
+ :
+ :{
+ : int len;
+ :
+ :#ifdef NEED_UTSNAME
+ : struct utsname name;
+ :
+ : uname (&name);
+ : len = strlen (name.nodename);
+ : if (len >= maxlen) len = maxlen - 1;
+ : strncpy (buf, name.nodename, len);
+ : buf[len] = '\0';
+ :#else
+ : buf[0] = '\0';
+ : (void) gethostname (buf, maxlen);
+ : buf [maxlen - 1] = '\0';
+ : len = strlen(buf);
+ :#endif /* NEED_UTSNAME */
+ : return len;
+ :}
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 5514 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+5402 89.9434 libpixman.so.0.0.0 pixman_rasterize_edges
+ 5402 97.9510 libpixman.so.0.0.0 pixman_rasterize_edges [self]
+ 113 2.0490 libc-2.5.so memset
+-------------------------------------------------------------------------------
+ 314 100.000 libpixman.so.0.0.0 pixman_region_union
+146 2.4309 libpixman.so.0.0.0 pixman_op
+ 146 46.4968 libpixman.so.0.0.0 pixman_op [self]
+ 70 22.2930 libpixman.so.0.0.0 pixman_rect_alloc
+ 33 10.5096 libpixman.so.0.0.0 pixman_region_unionO
+ 29 9.2357 libc-2.5.so free
+ 24 7.6433 libc-2.5.so memmove
+ 8 2.5478 libc-2.5.so malloc
+ 2 0.6369 libpixman.so.0.0.0 .plt
+ 2 0.6369 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+87 1.4486 libpixman.so.0.0.0 pixman_region_union
+ 314 73.8824 libpixman.so.0.0.0 pixman_op
+ 87 20.4706 libpixman.so.0.0.0 pixman_region_union [self]
+ 8 1.8824 libpixman.so.0.0.0 pixman_region_copy
+ 6 1.4118 libpixman.so.0.0.0 pixman_region_unionO
+ 3 0.7059 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 3 0.7059 libc-2.5.so free
+ 2 0.4706 libpixman.so.0.0.0 .plt
+ 2 0.4706 libpixman.so.0.0.0 pixman_rect_alloc
+-------------------------------------------------------------------------------
+82 1.3653 libpixman.so.0.0.0 pixman_region_rectangles
+ 82 100.000 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_image_create_bits
+44 0.7326 libpixman.so.0.0.0 pixman_region_fini
+ 44 97.7778 libpixman.so.0.0.0 pixman_region_fini [self]
+ 1 2.2222 libc-2.5.so free
+-------------------------------------------------------------------------------
+ 6 15.3846 libpixman.so.0.0.0 pixman_region_union
+ 33 84.6154 libpixman.so.0.0.0 pixman_op
+39 0.6494 libpixman.so.0.0.0 pixman_region_unionO
+ 39 100.000 libpixman.so.0.0.0 pixman_region_unionO [self]
+-------------------------------------------------------------------------------
+38 0.6327 libpixman.so.0.0.0 pixman_region_n_rects
+ 38 100.000 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 6 33.3333 libpixman.so.0.0.0 pixman_edge_step
+ 12 66.6667 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+18 0.2997 libpixman.so.0.0.0 __divdi3
+ 18 100.000 libpixman.so.0.0.0 __divdi3 [self]
+-------------------------------------------------------------------------------
+17 0.2831 libpixman.so.0.0.0 pixman_region_not_empty
+ 17 100.000 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 2 2.7778 libpixman.so.0.0.0 pixman_region_union
+ 70 97.2222 libpixman.so.0.0.0 pixman_op
+16 0.2664 libpixman.so.0.0.0 pixman_rect_alloc
+ 52 72.2222 libc-2.5.so malloc
+ 16 22.2222 libpixman.so.0.0.0 pixman_rect_alloc [self]
+ 3 4.1667 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 1.3889 libc-2.5.so _int_malloc
+-------------------------------------------------------------------------------
+ 1 14.2857 libpixman.so.0.0.0 pixman_image_create_bits
+ 1 14.2857 libpixman.so.0.0.0 pixman_edge_init
+ 2 28.5714 libpixman.so.0.0.0 pixman_op
+ 3 42.8571 libpixman.so.0.0.0 pixman_region_union
+15 0.2498 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 15 100.000 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libpixman.so.0.0.0 pixman_region_union
+15 0.2498 libpixman.so.0.0.0 pixman_region_copy
+ 15 100.000 libpixman.so.0.0.0 pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libpixman.so.0.0.0 allocate_image
+ 1 50.0000 libpixman.so.0.0.0 pixman_image_create_bits
+13 0.2165 libpixman.so.0.0.0 pixman_region_init
+ 13 100.000 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+13 0.2165 libpixman.so.0.0.0 pixman_region_intersect
+ 13 100.000 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 2 33.3333 libpixman.so.0.0.0 pixman_op
+ 2 33.3333 libpixman.so.0.0.0 pixman_region_union
+ 2 33.3333 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+9 0.1499 libpixman.so.0.0.0 .plt
+ 9 100.000 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libpixman.so.0.0.0 pixman_edge_init
+7 0.1166 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 12 63.1579 libpixman.so.0.0.0 __divdi3
+ 7 36.8421 libpixman.so.0.0.0 _pixman_edge_tMultiInit [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libpixman.so.0.0.0 pixman_image_create_bits
+7 0.1166 libpixman.so.0.0.0 allocate_image
+ 7 87.5000 libpixman.so.0.0.0 allocate_image [self]
+ 1 12.5000 libpixman.so.0.0.0 pixman_region_init
+-------------------------------------------------------------------------------
+ 36 100.000 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+7 0.1166 libpixman.so.0.0.0 pixman_edge_init
+ 19 52.7778 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 9 25.0000 libpixman.so.0.0.0 pixman_edge_step
+ 7 19.4444 libpixman.so.0.0.0 pixman_edge_init [self]
+ 1 2.7778 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+7 0.1166 libpixman.so.0.0.0 pixman_region_translate
+ 7 100.000 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+5 0.0833 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 5514 99.1192 libpixman.so.0.0.0 pixman_rasterize_edges
+ 36 0.6471 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 5 0.0899 libpixman.so.0.0.0 pixman_sample_floor_y
+ 5 0.0899 libpixman.so.0.0.0 pixman_rasterize_trapezoid [self]
+ 2 0.0360 libpixman.so.0.0.0 .plt
+ 1 0.0180 libpixman.so.0.0.0 pixman_sample_ceil_y
+-------------------------------------------------------------------------------
+ 5 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+5 0.0833 libpixman.so.0.0.0 pixman_sample_floor_y
+ 5 100.000 libpixman.so.0.0.0 pixman_sample_floor_y [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libpixman.so.0.0.0 pixman_edge_init
+3 0.0500 libpixman.so.0.0.0 pixman_edge_step
+ 6 66.6667 libpixman.so.0.0.0 __divdi3
+ 3 33.3333 libpixman.so.0.0.0 pixman_edge_step [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libpixman.so.0.0.0 pixman_image_create_bits
+3 0.0500 libpixman.so.0.0.0 pixman_region_init_rect
+ 3 100.000 libpixman.so.0.0.0 pixman_region_init_rect [self]
+-------------------------------------------------------------------------------
+2 0.0333 libpixman.so.0.0.0 pixman_image_unref
+ 2 100.000 libpixman.so.0.0.0 pixman_image_unref [self]
+-------------------------------------------------------------------------------
+2 0.0333 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 2 100.000 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+1 0.0167 libpixman.so.0.0.0 pixman_image_create_bits
+ 8 57.1429 libpixman.so.0.0.0 allocate_image
+ 2 14.2857 libpixman.so.0.0.0 pixman_region_init_rect
+ 1 7.1429 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 7.1429 libpixman.so.0.0.0 pixman_region_init
+ 1 7.1429 libpixman.so.0.0.0 pixman_region_fini
+ 1 7.1429 libpixman.so.0.0.0 pixman_image_create_bits [self]
+-------------------------------------------------------------------------------
+1 0.0167 libpixman.so.0.0.0 pixman_image_set_repeat
+ 1 100.000 libpixman.so.0.0.0 pixman_image_set_repeat [self]
+-------------------------------------------------------------------------------
+ 36 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+1 0.0167 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 36 97.2973 libpixman.so.0.0.0 pixman_edge_init
+ 1 2.7027 libpixman.so.0.0.0 pixman_line_fixed_edge_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+1 0.0167 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 1 100.000 libpixman.so.0.0.0 pixman_sample_ceil_y [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 3.0303 libpixman.so.0.0.0 pixman_region_fini
+ 3 9.0909 libpixman.so.0.0.0 pixman_region_union
+ 29 87.8788 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so free
+ 0 0 libc-2.5.so free [self]
+-------------------------------------------------------------------------------
+ 8 13.3333 libpixman.so.0.0.0 pixman_op
+ 52 86.6667 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so malloc
+ 0 0 libc-2.5.so malloc [self]
+-------------------------------------------------------------------------------
+ 24 100.000 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so memmove
+ 0 0 libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 113 100.000 libpixman.so.0.0.0 pixman_rasterize_edges
+0 0 libc-2.5.so memset
+ 0 0 libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+5402 89.9434 pixman_rasterize_edges
+146 2.4309 pixman_op
+87 1.4486 pixman_region_union
+82 1.3653 pixman_region_rectangles
+44 0.7326 pixman_region_fini
+39 0.6494 pixman_region_unionO
+38 0.6327 pixman_region_n_rects
+18 0.2997 __divdi3
+17 0.2831 pixman_region_not_empty
+16 0.2664 pixman_rect_alloc
+15 0.2498 __i686.get_pc_thunk.bx
+15 0.2498 pixman_region_copy
+13 0.2165 pixman_region_init
+13 0.2165 pixman_region_intersect
+9 0.1499 .plt
+7 0.1166 _pixman_edge_tMultiInit
+7 0.1166 allocate_image
+7 0.1166 pixman_edge_init
+7 0.1166 pixman_region_translate
+5 0.0833 pixman_rasterize_trapezoid
+5 0.0833 pixman_sample_floor_y
+3 0.0500 pixman_edge_step
+3 0.0500 pixman_region_init_rect
+2 0.0333 pixman_image_unref
+2 0.0333 pixman_region_init_with_extents
+1 0.0167 pixman_image_create_bits
+1 0.0167 pixman_image_set_repeat
+1 0.0167 pixman_line_fixed_edge_init
+1 0.0167 pixman_sample_ceil_y
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name app name symbol name
+-------------------------------------------------------------------------------
+ 4 0.0128 intel_drv.so intel_drv.so I830EXASync
+ 31127 99.9872 intel_drv.so intel_drv.so I830Sync
+31130 33.9125 intel_drv.so intel_drv.so I830WaitLpRing
+ 31130 99.9968 intel_drv.so intel_drv.so I830WaitLpRing [self]
+ 1 0.0032 libc-2.5.so intel_drv.so gettimeofday
+-------------------------------------------------------------------------------
+14366 15.6501 libxul.so libxul.so (no symbols)
+ 14366 100.000 libxul.so libxul.so (no symbols) [self]
+-------------------------------------------------------------------------------
+9782 10.6564 intel_drv.so intel_drv.so i965_prepare_composite
+ 28919 64.8495 intel_drv.so intel_drv.so i830WaitSync
+ 9782 21.9357 intel_drv.so intel_drv.so i965_prepare_composite [self]
+ 5524 12.3873 libc-2.5.so intel_drv.so memcpy
+ 105 0.2355 intel_drv.so intel_drv.so intel_get_pixmap_offset
+ 74 0.1659 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+ 55 0.1233 intel_drv.so intel_drv.so IntelEmitInvarientState
+ 40 0.0897 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 27 0.0605 intel_drv.so intel_drv.so .plt
+ 15 0.0336 intel_drv.so intel_drv.so i965_get_card_format
+ 12 0.0269 libexa.so intel_drv.so exaWaitSync
+ 10 0.0224 libdri.so intel_drv.so DRIGetSAREAPrivate
+ 9 0.0202 libdri.so intel_drv.so DRIGetContext
+ 8 0.0179 intel_drv.so intel_drv.so i965_get_dest_format
+ 8 0.0179 libdri.so intel_drv.so __i686.get_pc_thunk.cx
+ 5 0.0112 libexa.so intel_drv.so exaGetPixmapOffset
+ 1 0.0022 libexa.so intel_drv.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+ 5 5.4945 libc-2.5.so libc-2.5.so _int_realloc
+ 86 94.5055 libc-2.5.so libc-2.5.so msort_with_tmp
+6941 7.5614 libc-2.5.so libc-2.5.so memcpy
+ 6941 100.000 libc-2.5.so libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 5514 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+5402 5.8849 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+ 5402 97.9510 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges [self]
+ 113 2.0490 libc-2.5.so libpixman.so.0.0.0 memset
+-------------------------------------------------------------------------------
+5213 5.6790 oprofiled oprofiled (no symbols)
+ 5213 100.000 oprofiled oprofiled (no symbols) [self]
+-------------------------------------------------------------------------------
+2800 3.0503 intel_drv.so intel_drv.so i965_composite
+ 2800 90.1191 intel_drv.so intel_drv.so i965_composite [self]
+ 157 5.0531 intel_drv.so intel_drv.so i830_get_transformed_coordinates
+ 76 2.4461 intel_drv.so intel_drv.so i830WaitSync
+ 36 1.1587 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 31 0.9977 intel_drv.so intel_drv.so i830MarkSync
+ 5 0.1609 libexa.so intel_drv.so exaMarkSync
+ 2 0.0644 libexa.so intel_drv.so exaWaitSync
+-------------------------------------------------------------------------------
+1024 1.1155 oprofile.ko oprofile sync_buffer
+ 1024 100.000 oprofile.ko oprofile sync_buffer [self]
+-------------------------------------------------------------------------------
+592 0.6449 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols)
+ 592 100.000 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 0.1838 libexa.so libexa.so exaFillRegionSolid
+ 2 0.3676 libexa.so libexa.so exaCopyNtoN
+ 7 1.2868 libexa.so libexa.so exaComposite
+ 8 1.4706 libexa.so libexa.so exaGetOffscreenPixmap
+ 10 1.8382 libexa.so libexa.so exaGlyphs
+ 12 2.2059 libexa.so libexa.so exaMoveInPixmap
+ 28 5.1471 libexa.so libexa.so exaDoMigration
+ 476 87.5000 libexa.so libexa.so exaTryDriverComposite
+576 0.6275 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 576 100.000 libexa.so libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+482 0.5251 vmlinux vmlinux find_vma
+ 482 100.000 vmlinux vmlinux find_vma [self]
+-------------------------------------------------------------------------------
+ 1 0.2000 libc-2.5.so libc-2.5.so __fopen_internal
+ 22 4.4000 libc-2.5.so libc-2.5.so _int_realloc
+ 477 95.4000 libc-2.5.so libc-2.5.so malloc
+460 0.5011 libc-2.5.so libc-2.5.so _int_malloc
+ 460 89.6686 libc-2.5.so libc-2.5.so _int_malloc [self]
+ 53 10.3314 libc-2.5.so libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+ 3 0.6637 libexa.so libexa.so exaTryDriverComposite
+ 449 99.3363 libexa.so libexa.so exaDoMigration
+452 0.4924 libexa.so libexa.so ExaOffscreenMarkUsed
+ 452 100.000 libexa.so libexa.so ExaOffscreenMarkUsed [self]
+-------------------------------------------------------------------------------
+ 1 9.0909 libc-2.5.so libc-2.5.so __fopen_internal
+ 2 18.1818 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 8 72.7273 libc-2.5.so libc-2.5.so realloc
+443 0.4826 libc-2.5.so libc-2.5.so malloc
+ 477 51.0707 libc-2.5.so libc-2.5.so _int_malloc
+ 443 47.4304 libc-2.5.so libc-2.5.so malloc [self]
+ 7 0.7495 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 5 0.5353 libc-2.5.so libc-2.5.so malloc_consolidate
+ 2 0.2141 libc-2.5.so libc-2.5.so malloc_hook_ini
+-------------------------------------------------------------------------------
+421 0.4586 oprofile.ko oprofile add_event_entry
+ 421 100.000 oprofile.ko oprofile add_event_entry [self]
+-------------------------------------------------------------------------------
+380 0.4140 libc-2.5.so libc-2.5.so free
+ 380 63.2280 libc-2.5.so libc-2.5.so free [self]
+ 215 35.7737 libc-2.5.so libc-2.5.so _int_free
+ 5 0.8319 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.1664 libc-2.5.so libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+ 45270 47.8779 libexa.so libexa.so exaComposite
+ 49283 52.1221 libexa.so libexa.so exaGlyphs
+354 0.3856 libexa.so libexa.so exaComposite
+ 50072 51.8102 libexa.so libexa.so exaTryDriverComposite
+ 45270 46.8415 libexa.so libexa.so exaComposite
+ 656 0.6788 intel_drv.so libexa.so i965_composite
+ 354 0.3663 libexa.so libexa.so exaComposite [self]
+ 71 0.0735 libexa.so libexa.so exaPixmapDirty
+ 66 0.0683 intel_drv.so libexa.so i965_check_composite
+ 60 0.0621 libexa.so libexa.so .plt
+ 40 0.0414 libexa.so libexa.so exaGetDrawablePixmap
+ 8 0.0083 libexa.so libexa.so exaGetDrawableDeltas
+ 7 0.0072 libexa.so libexa.so exaGetOffscreenPixmap
+ 7 0.0072 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 7 0.0072 intel_drv.so libexa.so i965_check_composite_texture
+ 6 0.0062 Xorg libexa.so miComputeCompositeRegion
+ 4 0.0041 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 3 0.0031 intel_drv.so libexa.so i965_prepare_composite
+ 3 0.0031 intel_drv.so libexa.so i830_done_composite
+ 2 0.0021 intel_drv.so libexa.so i965_get_dest_format
+ 2 0.0021 libexa.so libexa.so exaMarkSync
+ 2 0.0021 libexa.so libexa.so exaOpReadsDestination
+ 2 0.0021 Xorg libexa.so DamageRegion
+ 2 0.0021 Xorg libexa.so miUnion
+ 1 0.0010 libexa.so libexa.so exaDoMigration
+-------------------------------------------------------------------------------
+ 1 0.0020 libexa.so libexa.so exaGlyphs
+ 50072 99.9980 libexa.so libexa.so exaComposite
+348 0.3791 libexa.so libexa.so exaTryDriverComposite
+ 44587 89.0351 intel_drv.so libexa.so i965_prepare_composite
+ 2451 4.8944 intel_drv.so libexa.so i965_composite
+ 849 1.6954 libexa.so libexa.so exaDoMigration
+ 622 1.2421 Xorg libexa.so miComputeCompositeRegion
+ 476 0.9505 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 348 0.6949 libexa.so libexa.so exaTryDriverComposite [self]
+ 168 0.3355 libexa.so libexa.so exaGetOffscreenPixmap
+ 67 0.1338 intel_drv.so libexa.so .plt
+ 63 0.1258 intel_drv.so libexa.so i965_check_composite
+ 61 0.1218 libexa.so libexa.so exaMarkSync
+ 54 0.1078 libexa.so libexa.so .plt
+ 40 0.0799 libexa.so libexa.so exaGetDrawablePixmap
+ 37 0.0739 Xorg libexa.so .plt
+ 31 0.0619 libpixman.so.0.0.0 libexa.so pixman_region_rectangles
+ 30 0.0599 intel_drv.so libexa.so i830_get_transformed_coordinates
+ 17 0.0339 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 17 0.0339 intel_drv.so libexa.so i965_get_card_format
+ 16 0.0320 libexa.so libexa.so exaPixmapIsOffscreen
+ 15 0.0300 libc-2.5.so libexa.so memcpy
+ 14 0.0280 libpixman.so.0.0.0 libexa.so pixman_region_n_rects
+ 13 0.0260 intel_drv.so libexa.so i830WaitSync
+ 12 0.0240 intel_drv.so libexa.so intel_get_pixmap_pitch
+ 9 0.0180 libpixman.so.0.0.0 libexa.so pixman_region_not_empty
+ 9 0.0180 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 8 0.0160 intel_drv.so libexa.so i965_get_dest_format
+ 8 0.0160 libexa.so libexa.so exaGetDrawableDeltas
+ 8 0.0160 libexa.so libexa.so exaMoveInPixmap
+ 7 0.0140 intel_drv.so libexa.so intel_get_pixmap_offset
+ 7 0.0140 intel_drv.so libexa.so i965_check_composite_texture
+ 6 0.0120 intel_drv.so libexa.so i830MarkSync
+ 6 0.0120 Xorg libexa.so __i686.get_pc_thunk.bx
+ 6 0.0120 libexa.so libexa.so exaPixmapIsPinned
+ 4 0.0080 libpixman.so.0.0.0 libexa.so pixman_region_init
+ 3 0.0060 Xorg libexa.so miCompositeSourceValidate
+ 3 0.0060 libexa.so libexa.so ExaOffscreenMarkUsed
+ 3 0.0060 intel_drv.so libexa.so IntelEmitInvarientState
+ 2 0.0040 libexa.so libexa.so exaOpReadsDestination
+ 1 0.0020 anon (tgid:28734 range:0xb7f37000-0xb7f38000) libexa.so (no symbols)
+-------------------------------------------------------------------------------
+320 0.3486 vmlinux vmlinux __copy_to_user_ll
+ 320 100.000 vmlinux vmlinux __copy_to_user_ll [self]
+-------------------------------------------------------------------------------
+296 0.3225 Xorg Xorg miComputeCompositeRegion
+ 296 47.1338 Xorg Xorg miComputeCompositeRegion [self]
+ 214 34.0764 Xorg Xorg miCompositeSourceValidate
+ 51 8.1210 libpixman.so.0.0.0 Xorg pixman_region_rectangles
+ 24 3.8217 libpixman.so.0.0.0 Xorg pixman_region_n_rects
+ 19 3.0255 Xorg Xorg miSpriteSourceValidate
+ 11 1.7516 Xorg Xorg __i686.get_pc_thunk.bx
+ 8 1.2739 libpixman.so.0.0.0 Xorg pixman_region_not_empty
+ 4 0.6369 libpixman.so.0.0.0 Xorg pixman_region_init
+ 1 0.1592 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 31400 100.000 intel_drv.so intel_drv.so I830EXASync
+272 0.2963 intel_drv.so intel_drv.so I830Sync
+ 31127 99.1179 intel_drv.so intel_drv.so I830WaitLpRing
+ 272 0.8661 intel_drv.so intel_drv.so I830Sync [self]
+ 4 0.0127 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 1 0.0032 Xorg intel_drv.so GetTimeInMillis
+-------------------------------------------------------------------------------
+ 1 0.3788 libexa.so libexa.so exaGlyphs
+ 16 6.0606 libexa.so libexa.so exaTryDriverComposite
+ 17 6.4394 libexa.so libexa.so exaCopyNtoN
+ 53 20.0758 libexa.so libexa.so exaMoveInPixmap
+ 85 32.1970 libexa.so libexa.so exaGetOffscreenPixmap
+ 92 34.8485 libexa.so libexa.so exaDoMigration
+267 0.2909 libexa.so libexa.so exaPixmapIsOffscreen
+ 267 100.000 libexa.so libexa.so exaPixmapIsOffscreen [self]
+-------------------------------------------------------------------------------
+264 0.2876 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols)
+ 264 100.000 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5 2.2727 libc-2.5.so libc-2.5.so _int_realloc
+ 215 97.7273 libc-2.5.so libc-2.5.so free
+227 0.2473 libc-2.5.so libc-2.5.so _int_free
+ 227 97.4249 libc-2.5.so libc-2.5.so _int_free [self]
+ 6 2.5751 libc-2.5.so libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+212 0.2309 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols)
+ 212 100.000 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+208 0.2266 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols)
+ 208 100.000 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols) [self]
+-------------------------------------------------------------------------------
+203 0.2211 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols)
+ 203 100.000 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 157 100.000 intel_drv.so intel_drv.so i965_composite
+187 0.2037 intel_drv.so intel_drv.so i830_get_transformed_coordinates
+ 187 100.000 intel_drv.so intel_drv.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+185 0.2015 libexa.so libexa.so exaGlyphs
+ 49283 97.2224 libexa.so libexa.so exaComposite
+ 446 0.8798 libexa.so libexa.so exaPixmapDirty
+ 353 0.6964 libexa.so libexa.so exaCopyArea
+ 185 0.3650 libexa.so libexa.so exaGlyphs [self]
+ 71 0.1401 libexa.so libexa.so exaDoMigration
+ 62 0.1223 libexa.so libexa.so exaCreatePixmap
+ 55 0.1085 Xorg libexa.so miModifyPixmapHeader
+ 43 0.0848 libextmod.so libexa.so XvDestroyPixmap
+ 27 0.0533 Xorg libexa.so FreePicture
+ 24 0.0473 Xorg libexa.so ValidateGC
+ 24 0.0473 Xorg libexa.so CreatePicture
+ 23 0.0454 libexa.so libexa.so .plt
+ 16 0.0316 Xorg libexa.so damagePolyFillRect
+ 14 0.0276 Xorg libexa.so miGlyphExtents
+ 10 0.0197 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 7 0.0138 Xorg libexa.so __i686.get_pc_thunk.bx
+ 7 0.0138 Xorg libexa.so ValidatePicture
+ 6 0.0118 Xorg libexa.so DamageRegion
+ 6 0.0118 Xorg libexa.so miUnion
+ 5 0.0099 intel_drv.so libexa.so i965_check_composite
+ 4 0.0079 Xorg libexa.so GetScratchPixmapHeader
+ 4 0.0079 Xorg libexa.so FreeScratchGC
+ 3 0.0059 libexa.so libexa.so exaGetDrawablePixmap
+ 3 0.0059 libexa.so libexa.so exaGetDrawableDeltas
+ 1 0.0020 Xorg libexa.so DamageSetReportAfterOp
+ 1 0.0020 libfb.so libexa.so fbCreatePixmap
+ 1 0.0020 libfb.so libexa.so fbDoCopy
+ 1 0.0020 libexa.so libexa.so exaTryDriverComposite
+ 1 0.0020 libexa.so libexa.so exaMoveInPixmap
+ 1 0.0020 Xorg libexa.so miCreatePicture
+ 1 0.0020 libexa.so libexa.so exaPixmapIsOffscreen
+ 1 0.0020 Xorg libexa.so ChangePicture
+ 1 0.0020 Xorg libexa.so damageValidateGC
+ 1 0.0020 Xorg libexa.so damageInsertDamage
+-------------------------------------------------------------------------------
+ 1 0.6369 libexa.so libexa.so exaFillRegionSolid
+ 1 0.6369 libexa.so libexa.so exaRasterizeTrapezoid
+ 2 1.2739 libexa.so libexa.so exaCopyNtoN
+ 16 10.1911 libexa.so libexa.so exaDoMigration
+ 23 14.6497 libexa.so libexa.so exaGlyphs
+ 54 34.3949 libexa.so libexa.so exaTryDriverComposite
+ 60 38.2166 libexa.so libexa.so exaComposite
+184 0.2004 libexa.so libexa.so .plt
+ 184 100.000 libexa.so libexa.so .plt [self]
+-------------------------------------------------------------------------------
+176 0.1917 libc-2.5.so libc-2.5.so memcmp
+ 176 100.000 libc-2.5.so libc-2.5.so memcmp [self]
+-------------------------------------------------------------------------------
+167 0.1819 libm-2.5.so libm-2.5.so floor
+ 167 100.000 libm-2.5.so libm-2.5.so floor [self]
+-------------------------------------------------------------------------------
+ 1 0.0943 libexa.so libexa.so exaPolyFillRect
+ 1 0.0943 libexa.so libexa.so exaComposite
+ 42 3.9623 libexa.so libexa.so exaCopyNtoN
+ 71 6.6981 libexa.so libexa.so exaGlyphs
+ 96 9.0566 libexa.so libexa.so exaFillRegionSolid
+ 849 80.0943 libexa.so libexa.so exaTryDriverComposite
+166 0.1808 libexa.so libexa.so exaDoMigration
+ 449 42.3186 libexa.so libexa.so ExaOffscreenMarkUsed
+ 275 25.9189 libexa.so libexa.so exaMoveInPixmap
+ 166 15.6456 libexa.so libexa.so exaDoMigration [self]
+ 92 8.6711 libexa.so libexa.so exaPixmapIsOffscreen
+ 33 3.1103 libexa.so libexa.so exaPixmapIsPinned
+ 28 2.6390 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 16 1.5080 libexa.so libexa.so .plt
+ 1 0.0943 Xorg libexa.so DamageEmpty
+ 1 0.0943 libexa.so libexa.so exaOffscreenAlloc
+-------------------------------------------------------------------------------
+ 314 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+146 0.1591 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 146 46.4968 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op [self]
+ 70 22.2930 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+ 33 10.5096 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+ 29 9.2357 libc-2.5.so libpixman.so.0.0.0 free
+ 24 7.6433 libc-2.5.so libpixman.so.0.0.0 memmove
+ 8 2.5478 libc-2.5.so libpixman.so.0.0.0 malloc
+ 2 0.6369 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 2 0.6369 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+144 0.1569 libnspr4.so libnspr4.so (no symbols)
+ 144 100.000 libnspr4.so libnspr4.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 19 15.9664 Xorg Xorg miComputeCompositeRegion
+ 100 84.0336 Xorg Xorg miCompositeSourceValidate
+140 0.1525 Xorg Xorg miSpriteSourceValidate
+ 140 100.000 Xorg Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+140 0.1525 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols)
+ 140 100.000 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+140 0.1525 libmozjs.so libmozjs.so (no symbols)
+ 140 100.000 libmozjs.so libmozjs.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 0.3509 libexa.so libexa.so exaFillRegionSolid
+ 1 0.3509 libexa.so libexa.so exaGlyphs
+ 8 2.8070 libexa.so libexa.so exaTryDriverComposite
+ 275 96.4912 libexa.so libexa.so exaDoMigration
+133 0.1449 libexa.so libexa.so exaMoveInPixmap
+ 133 46.6667 libexa.so libexa.so exaMoveInPixmap [self]
+ 73 25.6140 libexa.so libexa.so exaOffscreenAlloc
+ 53 18.5965 libexa.so libexa.so exaPixmapIsOffscreen
+ 12 4.2105 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 8 2.8070 Xorg libexa.so miUnion
+ 2 0.7018 Xorg libexa.so DamageEmpty
+ 2 0.7018 libexa.so libexa.so exaPixmapIsPinned
+ 1 0.3509 Xorg libexa.so __i686.get_pc_thunk.bx
+ 1 0.3509 libpixman.so.0.0.0 libexa.so pixman_region_union
+-------------------------------------------------------------------------------
+ 292 24.4351 libc-2.5.so libc-2.5.so qsort
+ 903 75.5649 libc-2.5.so libc-2.5.so msort_with_tmp
+125 0.1362 libc-2.5.so libc-2.5.so msort_with_tmp
+ 903 75.5017 libc-2.5.so libc-2.5.so msort_with_tmp
+ 125 10.4515 libc-2.5.so libc-2.5.so msort_with_tmp [self]
+ 86 7.1906 libc-2.5.so libc-2.5.so memcpy
+ 76 6.3545 libxul.so libc-2.5.so (no symbols)
+ 5 0.4181 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.0836 libcairo.so.2.11.3 libc-2.5.so (no symbols)
+-------------------------------------------------------------------------------
+ 1 1.0870 intel_drv.so intel_drv.so I830EXASync
+ 4 4.3478 intel_drv.so intel_drv.so I830Sync
+ 11 11.9565 intel_drv.so intel_drv.so i965_check_composite
+ 36 39.1304 intel_drv.so intel_drv.so i965_composite
+ 40 43.4783 intel_drv.so intel_drv.so i965_prepare_composite
+119 0.1296 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 119 100.000 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+118 0.1285 libc-2.5.so libc-2.5.so memset
+ 118 100.000 libc-2.5.so libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+ 1 0.9901 libexa.so libexa.so exaPolyFillRect
+ 3 2.9703 libexa.so libexa.so exaGlyphs
+ 7 6.9307 libexa.so libexa.so exaGetOffscreenPixmap
+ 10 9.9010 libexa.so libexa.so exaCopyNtoN
+ 40 39.6040 libexa.so libexa.so exaTryDriverComposite
+ 40 39.6040 libexa.so libexa.so exaComposite
+111 0.1209 libexa.so libexa.so exaGetDrawablePixmap
+ 111 100.000 libexa.so libexa.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+107 0.1166 vmlinux vmlinux __d_lookup
+ 107 100.000 vmlinux vmlinux __d_lookup [self]
+-------------------------------------------------------------------------------
+ 214 100.000 Xorg Xorg miComputeCompositeRegion
+106 0.1155 Xorg Xorg miCompositeSourceValidate
+ 106 48.8479 Xorg Xorg miCompositeSourceValidate [self]
+ 100 46.0829 Xorg Xorg miSpriteSourceValidate
+ 11 5.0691 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 76 0.2621 intel_drv.so intel_drv.so i965_composite
+ 28919 99.7379 intel_drv.so intel_drv.so i965_prepare_composite
+103 0.1122 intel_drv.so intel_drv.so i830WaitSync
+ 28896 99.6105 libexa.so intel_drv.so exaWaitSync
+ 103 0.3551 intel_drv.so intel_drv.so i830WaitSync [self]
+ 5 0.0172 intel_drv.so intel_drv.so I830EXASync
+ 5 0.0172 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2616 100.000 libexa.so libexa.so exaPrepareAccess
+102 0.1111 libexa.so libexa.so exaWaitSync
+ 31418 99.6543 intel_drv.so libexa.so I830EXASync
+ 102 0.3235 libexa.so libexa.so exaWaitSync [self]
+ 4 0.0127 intel_drv.so libexa.so I830Sync
+ 2 0.0063 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 1 0.0032 intel_drv.so libexa.so .plt
+-------------------------------------------------------------------------------
+100 0.1089 libfb.so libfb.so fbDoCopy
+ 190 60.5096 libfb.so libfb.so fbCopyRegion
+ 100 31.8471 libfb.so libfb.so fbDoCopy [self]
+ 19 6.0510 Xorg libfb.so miSpriteSourceValidate
+ 3 0.9554 Xorg libfb.so __i686.get_pc_thunk.bx
+ 2 0.6369 libexa.so libfb.so exaCopyNtoN
+-------------------------------------------------------------------------------
+ 1 3.5714 intel_drv.so intel_drv.so I830EXASync
+ 27 96.4286 intel_drv.so intel_drv.so i965_prepare_composite
+99 0.1078 intel_drv.so intel_drv.so .plt
+ 99 100.000 intel_drv.so intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 1.4085 Xorg Xorg damagePolyFillRect
+ 1 1.4085 Xorg Xorg damageDamageRegion
+ 1 1.4085 Xorg Xorg ProcRenderCreatePicture
+ 1 1.4085 Xorg Xorg ProcRenderComposite
+ 1 1.4085 Xorg Xorg ProcRenderSetPictureFilter
+ 1 1.4085 Xorg Xorg FreePicture
+ 1 1.4085 Xorg Xorg ValidateOnePicture
+ 1 1.4085 Xorg Xorg miTrapezoidBounds
+ 1 1.4085 Xorg Xorg miValidatePicture
+ 1 1.4085 Xorg Xorg XaceCatchDispatchProc
+ 1 1.4085 Xorg Xorg AllocatePixmap
+ 1 1.4085 Xorg Xorg miRectsToRegion
+ 1 1.4085 Xorg Xorg ValidateGC
+ 1 1.4085 Xorg Xorg dixLookupDrawable
+ 2 2.8169 Xorg Xorg SecurityLookupIDByType
+ 2 2.8169 Xorg Xorg AddResource
+ 2 2.8169 Xorg Xorg _CallCallbacks
+ 2 2.8169 Xorg Xorg CompositeRects
+ 2 2.8169 Xorg Xorg CompositeGlyphs
+ 2 2.8169 Xorg Xorg ValidatePicture
+ 2 2.8169 Xorg Xorg miColorRects
+ 2 2.8169 Xorg Xorg miRegionCreate
+ 3 4.2254 Xorg Xorg ProcRenderCompositeGlyphs
+ 3 4.2254 Xorg Xorg XaceCatchExtProc
+ 4 5.6338 Xorg Xorg ProcRenderDispatch
+ 4 5.6338 Xorg Xorg CallCallbacks
+ 5 7.0423 Xorg Xorg Dispatch
+ 11 15.4930 Xorg Xorg miComputeCompositeRegion
+ 11 15.4930 Xorg Xorg miCompositeSourceValidate
+97 0.1057 Xorg Xorg __i686.get_pc_thunk.bx
+ 97 100.000 Xorg Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+93 0.1013 oprofile.ko oprofile add_sample_entry
+ 93 100.000 oprofile.ko oprofile add_sample_entry [self]
+-------------------------------------------------------------------------------
+ 1 0.1931 libexa.so libexa.so exaRasterizeTrapezoid
+ 71 13.7066 libexa.so libexa.so exaComposite
+ 446 86.1004 libexa.so libexa.so exaGlyphs
+90 0.0980 libexa.so libexa.so exaPixmapDirty
+ 416 79.6935 Xorg libexa.so miUnion
+ 90 17.2414 libexa.so libexa.so exaPixmapDirty [self]
+ 8 1.5326 Xorg libexa.so .plt
+ 6 1.1494 Xorg libexa.so __i686.get_pc_thunk.bx
+ 2 0.3831 Xorg libexa.so DamageRegion
+-------------------------------------------------------------------------------
+ 4 4.5455 Xorg Xorg ProcRenderCompositeGlyphs
+ 84 95.4545 Xorg Xorg FindGlyph
+88 0.0959 Xorg Xorg FindGlyphRef
+ 88 100.000 Xorg Xorg FindGlyphRef [self]
+-------------------------------------------------------------------------------
+ 1 1.5625 libexa.so libexa.so exaPolyFillRect
+ 2 3.1250 libexa.so libexa.so exaComposite
+ 61 95.3125 libexa.so libexa.so exaTryDriverComposite
+88 0.0959 libexa.so libexa.so exaMarkSync
+ 88 100.000 libexa.so libexa.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+87 0.0948 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 314 73.8824 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 87 20.4706 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union [self]
+ 8 1.8824 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+ 6 1.4118 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+ 3 0.7059 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 3 0.7059 libc-2.5.so libpixman.so.0.0.0 free
+ 2 0.4706 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 2 0.4706 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+-------------------------------------------------------------------------------
+86 0.0937 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+ 86 100.000 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 74 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+83 0.0904 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+ 83 96.5116 intel_drv.so intel_drv.so intel_get_pixmap_pitch [self]
+ 3 3.4884 libexa.so intel_drv.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+82 0.0893 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles
+ 82 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 105 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+77 0.0839 intel_drv.so intel_drv.so intel_get_pixmap_offset
+ 77 68.7500 intel_drv.so intel_drv.so intel_get_pixmap_offset [self]
+ 24 21.4286 libexa.so intel_drv.so exaGetPixmapOffset
+ 11 9.8214 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.5587 Xorg Xorg ProcRenderCompositeGlyphs
+ 1 0.5587 Xorg Xorg ProcRenderCreatePicture
+ 3 1.6760 Xorg Xorg XaceCatchDispatchProc
+ 5 2.7933 Xorg Xorg dixLookupDrawable
+ 8 4.4693 Xorg Xorg main
+ 12 6.7039 Xorg Xorg SecurityLookupIDByClass
+ 32 17.8771 Xorg Xorg Dispatch
+ 40 22.3464 Xorg Xorg XaceCatchExtProc
+ 77 43.0168 Xorg Xorg SecurityLookupIDByType
+74 0.0806 Xorg Xorg XaceHook
+ 92 51.3966 Xorg Xorg CallCallbacks
+ 74 41.3408 Xorg Xorg XaceHook [self]
+ 13 7.2626 Xorg Xorg _CallCallbacks
+-------------------------------------------------------------------------------
+ 59 100.000 intel_drv.so intel_drv.so i965_check_composite
+73 0.0795 intel_drv.so intel_drv.so i965_check_composite_texture
+ 73 100.000 intel_drv.so intel_drv.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+73 0.0795 libgcc_s.so.1 libgcc_s.so.1 (no symbols)
+ 73 100.000 libgcc_s.so.1 libgcc_s.so.1 (no symbols) [self]
+-------------------------------------------------------------------------------
+71 0.0773 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock
+ 71 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock [self]
+-------------------------------------------------------------------------------
+ 2 1.0471 libexa.so libexa.so exaPolyFillRect
+ 7 3.6649 libexa.so libexa.so exaComposite
+ 14 7.3298 libexa.so libexa.so exaFillRegionSolid
+ 168 87.9581 libexa.so libexa.so exaTryDriverComposite
+69 0.0752 libexa.so libexa.so exaGetOffscreenPixmap
+ 85 44.5026 libexa.so libexa.so exaPixmapIsOffscreen
+ 69 36.1257 libexa.so libexa.so exaGetOffscreenPixmap [self]
+ 22 11.5183 libexa.so libexa.so exaGetDrawableDeltas
+ 8 4.1885 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 7 3.6649 libexa.so libexa.so exaGetDrawablePixmap
+-------------------------------------------------------------------------------
+ 1 1.3514 libexa.so libexa.so exaDoMigration
+ 73 98.6486 libexa.so libexa.so exaMoveInPixmap
+68 0.0741 libexa.so libexa.so exaOffscreenAlloc
+ 68 91.8919 libexa.so libexa.so exaOffscreenAlloc [self]
+ 4 5.4054 Xorg libexa.so Xalloc
+ 2 2.7027 Xorg libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+67 0.0730 libc-2.5.so libc-2.5.so strstr
+ 67 100.000 libc-2.5.so libc-2.5.so strstr [self]
+-------------------------------------------------------------------------------
+ 4 36.3636 Xorg Xorg GetScratchPixmapHeader
+ 7 63.6364 Xorg Xorg damageGlyphs
+66 0.0719 Xorg Xorg miModifyPixmapHeader
+ 66 100.000 Xorg Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 1 1.5385 libc-2.5.so libc-2.5.so free
+ 5 7.6923 libc-2.5.so libc-2.5.so malloc
+ 6 9.2308 libc-2.5.so libc-2.5.so _int_free
+ 53 81.5385 libc-2.5.so libc-2.5.so _int_malloc
+65 0.0708 libc-2.5.so libc-2.5.so malloc_consolidate
+ 65 100.000 libc-2.5.so libc-2.5.so malloc_consolidate [self]
+-------------------------------------------------------------------------------
+ 50802 100.000 Xorg Xorg CompositeGlyphs
+61 0.0665 Xorg Xorg damageGlyphs
+ 50684 99.7599 libexa.so Xorg exaGlyphs
+ 61 0.1201 Xorg Xorg damageGlyphs [self]
+ 11 0.0217 libexa.so Xorg exaComposite
+ 10 0.0197 Xorg Xorg damageDamageBox
+ 7 0.0138 libexa.so Xorg .plt
+ 7 0.0138 Xorg Xorg miModifyPixmapHeader
+ 4 0.0079 libexa.so Xorg exaCopyArea
+ 4 0.0079 Xorg Xorg damageReportPostOp
+ 3 0.0059 libexa.so Xorg exaCreatePixmap
+ 2 0.0039 Xorg Xorg miGlyphExtents
+ 2 0.0039 Xorg Xorg GetScratchGC
+ 2 0.0039 libexa.so Xorg exaPixmapDirty
+ 2 0.0039 Xorg Xorg FreeScratchGC
+ 2 0.0039 Xorg Xorg FreeScratchPixmapHeader
+ 1 0.0020 Xorg Xorg DamageReportDamage
+ 1 0.0020 Xorg Xorg FreePicture
+ 1 0.0020 Xorg Xorg damagePolyFillRect
+ 1 0.0020 Xorg Xorg ValidateGC
+ 1 0.0020 Xorg Xorg GetScratchPixmapHeader
+-------------------------------------------------------------------------------
+61 0.0665 libc-2.5.so libc-2.5.so memmove
+ 61 100.000 libc-2.5.so libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 1 1.5152 Xorg Xorg main
+ 65 98.4848 Xorg Xorg Dispatch
+60 0.0654 Xorg Xorg ReadRequestFromClient
+ 60 90.9091 Xorg Xorg ReadRequestFromClient [self]
+ 5 7.5758 Xorg Xorg _XSERVTransRead
+ 1 1.5152 Xorg Xorg _XSERVTransSocketRead
+-------------------------------------------------------------------------------
+54 0.0588 intel_drv.so intel_drv.so i965_check_composite
+ 59 44.0299 intel_drv.so intel_drv.so i965_check_composite_texture
+ 54 40.2985 intel_drv.so intel_drv.so i965_check_composite [self]
+ 11 8.2090 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 10 7.4627 intel_drv.so intel_drv.so i965_get_dest_format
+-------------------------------------------------------------------------------
+53 0.0577 vmlinux vmlinux __link_path_walk
+ 53 100.000 vmlinux vmlinux __link_path_walk [self]
+-------------------------------------------------------------------------------
+ 2 4.0816 libexa.so libexa.so exaPolyFillRect
+ 3 6.1224 libexa.so libexa.so exaGlyphs
+ 6 12.2449 libexa.so libexa.so exaCopyNtoN
+ 8 16.3265 libexa.so libexa.so exaTryDriverComposite
+ 8 16.3265 libexa.so libexa.so exaComposite
+ 22 44.8980 libexa.so libexa.so exaGetOffscreenPixmap
+52 0.0566 libexa.so libexa.so exaGetDrawableDeltas
+ 52 100.000 libexa.so libexa.so exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg Xorg SetClipRects
+ 1 20.0000 Xorg Xorg miRegionCreate
+ 1 20.0000 Xorg Xorg miValidatePicture
+ 2 40.0000 Xorg Xorg damageDamageRegion
+50 0.0545 Xorg Xorg .plt
+ 50 100.000 Xorg Xorg .plt [self]
+-------------------------------------------------------------------------------
+50 0.0545 vmlinux vmlinux __copy_from_user_ll
+ 50 100.000 vmlinux vmlinux __copy_from_user_ll [self]
+-------------------------------------------------------------------------------
+47 0.0512 libexa.so libexa.so exaCopyNtoN
+ 47 35.8779 libexa.so libexa.so exaCopyNtoN [self]
+ 42 32.0611 libexa.so libexa.so exaDoMigration
+ 17 12.9771 libexa.so libexa.so exaPixmapIsOffscreen
+ 10 7.6336 libexa.so libexa.so exaGetDrawablePixmap
+ 6 4.5802 libexa.so libexa.so exaGetDrawableDeltas
+ 4 3.0534 libexa.so libexa.so exaPixmapIsPinned
+ 2 1.5267 libexa.so libexa.so .plt
+ 2 1.5267 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 1 0.7634 libexa.so libexa.so __i686.get_pc_thunk.cx
+-------------------------------------------------------------------------------
+ 2 4.4444 libexa.so libexa.so exaMoveInPixmap
+ 4 8.8889 libexa.so libexa.so exaCopyNtoN
+ 6 13.3333 libexa.so libexa.so exaTryDriverComposite
+ 33 73.3333 libexa.so libexa.so exaDoMigration
+45 0.0490 libexa.so libexa.so exaPixmapIsPinned
+ 45 100.000 libexa.so libexa.so exaPixmapIsPinned [self]
+-------------------------------------------------------------------------------
+ 5 29.4118 libc-2.5.so libc-2.5.so msort_with_tmp
+ 5 29.4118 libc-2.5.so libc-2.5.so free
+ 7 41.1765 libc-2.5.so libc-2.5.so malloc
+44 0.0479 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 44 100.000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+44 0.0479 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 44 97.7778 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini [self]
+ 1 2.2222 libc-2.5.so libpixman.so.0.0.0 free
+-------------------------------------------------------------------------------
+ 40 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+41 0.0447 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+ 41 100.000 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt [self]
+-------------------------------------------------------------------------------
+41 0.0447 vmlinux vmlinux _atomic_dec_and_lock
+ 41 100.000 vmlinux vmlinux _atomic_dec_and_lock [self]
+-------------------------------------------------------------------------------
+ 1 0.7246 Xorg Xorg ProcFreePixmap
+ 1 0.7246 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 2 1.4493 Xorg Xorg ProcRenderTrapezoids
+ 5 3.6232 Xorg Xorg ProcRenderComposite
+ 6 4.3478 Xorg Xorg ProcRenderDispatch
+ 7 5.0725 Xorg Xorg ProcRenderChangePicture
+ 10 7.2464 Xorg Xorg ProcRenderSetPictureTransform
+ 11 7.9710 Xorg Xorg dixLookupGC
+ 13 9.4203 Xorg Xorg ProcRenderCreatePicture
+ 15 10.8696 Xorg Xorg ProcRenderFillRectangles
+ 17 12.3188 Xorg Xorg ProcRenderSetPictureFilter
+ 22 15.9420 Xorg Xorg ProcRenderFreePicture
+ 28 20.2899 Xorg Xorg ProcRenderCompositeGlyphs
+40 0.0436 Xorg Xorg SecurityLookupIDByType
+ 77 55.7971 Xorg Xorg XaceHook
+ 40 28.9855 Xorg Xorg SecurityLookupIDByType [self]
+ 15 10.8696 Xorg Xorg Hash
+ 4 2.8986 Xorg Xorg CallCallbacks
+ 2 1.4493 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 6 15.3846 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 33 84.6154 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+39 0.0425 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+ 39 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO [self]
+-------------------------------------------------------------------------------
+38 0.0414 intel_drv.so intel_drv.so I830EXASolid
+ 38 97.4359 intel_drv.so intel_drv.so I830EXASolid [self]
+ 1 2.5641 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+38 0.0414 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects
+ 38 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 62687 100.000 Xorg Xorg main
+37 0.0403 Xorg Xorg Dispatch
+ 62277 99.3333 Xorg Xorg XaceCatchExtProc
+ 261 0.4163 Xorg Xorg XaceCatchDispatchProc
+ 65 0.1037 Xorg Xorg ReadRequestFromClient
+ 37 0.0590 Xorg Xorg Dispatch [self]
+ 32 0.0510 Xorg Xorg XaceHook
+ 5 0.0080 Xorg Xorg __i686.get_pc_thunk.bx
+ 5 0.0080 Xorg Xorg ProcFreePixmap
+ 5 0.0080 Xorg Xorg ProcRenderDispatch
+ 3 0.0048 Xorg Xorg CallCallbacks
+ 3 0.0048 Xorg Xorg WaitForSomething
+ 1 0.0016 Xorg Xorg ProcCopyArea
+ 1 0.0016 Xorg Xorg ProcChangeGC
+-------------------------------------------------------------------------------
+ 5 13.8889 Xorg Xorg CallCallbacks
+ 31 86.1111 Xorg Xorg _CallCallbacks
+36 0.0392 Xorg Xorg SecurityCheckResourceIDAccess
+ 36 100.000 Xorg Xorg SecurityCheckResourceIDAccess [self]
+-------------------------------------------------------------------------------
+ 55 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+36 0.0392 intel_drv.so intel_drv.so IntelEmitInvarientState
+ 36 62.0690 intel_drv.so intel_drv.so IntelEmitInvarientState [self]
+ 15 25.8621 libdri.so intel_drv.so DRIGetSAREAPrivate
+ 7 12.0690 libdri.so intel_drv.so DRIGetContext
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so libexa.so exaFillRegionSolid
+35 0.0381 libexa.so libexa.so exaGetPixmapOffset
+ 35 100.000 libexa.so libexa.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+34 0.0370 libfb.so libfb.so fbValidateGC
+ 34 59.6491 libfb.so libfb.so fbValidateGC [self]
+ 22 38.5965 Xorg libfb.so miComputeCompositeClip
+ 1 1.7544 Xorg libfb.so miTranslateRegion
+-------------------------------------------------------------------------------
+34 0.0370 vmlinux vmlinux mwait_idle_with_hints
+ 34 100.000 vmlinux vmlinux mwait_idle_with_hints [self]
+-------------------------------------------------------------------------------
+ 353 100.000 libexa.so libexa.so exaGlyphs
+33 0.0359 libexa.so libexa.so exaCopyArea
+ 313 86.9444 libfb.so libexa.so fbDoCopy
+ 33 9.1667 libexa.so libexa.so exaCopyArea [self]
+ 7 1.9444 libfb.so libexa.so __i686.get_pc_thunk.bx
+ 4 1.1111 libfb.so libexa.so fbCopyRegion
+ 2 0.5556 Xorg libexa.so miSpriteSourceValidate
+ 1 0.2778 libfb.so libexa.so .plt
+-------------------------------------------------------------------------------
+ 15 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+32 0.0349 intel_drv.so intel_drv.so i965_get_card_format
+ 32 100.000 intel_drv.so intel_drv.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+ 4 0.0078 Xorg Xorg XaceCatchExtProc
+ 50967 99.9922 Xorg Xorg ProcRenderDispatch
+30 0.0327 Xorg Xorg ProcRenderCompositeGlyphs
+ 50816 99.6783 Xorg Xorg CompositeGlyphs
+ 96 0.1883 Xorg Xorg FindGlyph
+ 30 0.0588 Xorg Xorg ProcRenderCompositeGlyphs [self]
+ 28 0.0549 Xorg Xorg SecurityLookupIDByType
+ 4 0.0078 Xorg Xorg FindGlyphRef
+ 3 0.0059 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 0.0039 Xorg Xorg ValidatePicture
+ 1 0.0020 Xorg Xorg XaceHook
+-------------------------------------------------------------------------------
+ 13 17.1053 Xorg Xorg XaceHook
+ 63 82.8947 Xorg Xorg CallCallbacks
+30 0.0327 Xorg Xorg _CallCallbacks
+ 31 40.7895 Xorg Xorg SecurityCheckResourceIDAccess
+ 30 39.4737 Xorg Xorg _CallCallbacks [self]
+ 13 17.1053 Xorg Xorg SecurityCheckExtAccess
+ 2 2.6316 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+29 0.0316 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols)
+ 29 100.000 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 8 44.4444 intel_drv.so intel_drv.so i965_prepare_composite
+ 10 55.5556 intel_drv.so intel_drv.so i965_check_composite
+28 0.0305 intel_drv.so intel_drv.so i965_get_dest_format
+ 28 100.000 intel_drv.so intel_drv.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+28 0.0305 libc-2.5.so libc-2.5.so strlen
+ 28 100.000 libc-2.5.so libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+28 0.0305 vmlinux vmlinux memcmp
+ 28 100.000 vmlinux vmlinux memcmp [self]
+-------------------------------------------------------------------------------
+ 1 1.0000 Xorg Xorg XaceCatchExtProc
+ 3 3.0000 Xorg Xorg Dispatch
+ 4 4.0000 Xorg Xorg SecurityLookupIDByType
+ 92 92.0000 Xorg Xorg XaceHook
+27 0.0294 Xorg Xorg CallCallbacks
+ 63 63.0000 Xorg Xorg _CallCallbacks
+ 27 27.0000 Xorg Xorg CallCallbacks [self]
+ 5 5.0000 Xorg Xorg SecurityCheckResourceIDAccess
+ 4 4.0000 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.0000 Xorg Xorg SecurityCheckExtAccess
+-------------------------------------------------------------------------------
+ 1 0.9901 Xorg Xorg ProcRenderDispatch
+ 1 0.9901 Xorg Xorg ProcFreeGC
+ 37 36.6337 Xorg Xorg ProcFreePixmap
+ 62 61.3861 Xorg Xorg ProcRenderFreePicture
+27 0.0294 Xorg Xorg FreeResource
+ 33 32.6733 Xorg Xorg FreePicture
+ 27 26.7327 Xorg Xorg FreeResource [self]
+ 24 23.7624 Xorg Xorg dixDestroyPixmap
+ 8 7.9208 Xorg Xorg Xfree
+ 4 3.9604 Xorg Xorg FlushClientCaches
+ 3 2.9703 Xorg Xorg miDestroyPicture
+ 1 0.9901 Xorg Xorg Hash
+ 1 0.9901 Xorg Xorg FreeGC
+-------------------------------------------------------------------------------
+ 1 3.7037 Xorg Xorg FreeResource
+ 1 3.7037 Xorg Xorg ProcCreatePixmap
+ 1 3.7037 Xorg Xorg ProcRenderSetPictureTransform
+ 1 3.7037 Xorg Xorg ProcRenderCreatePicture
+ 2 7.4074 Xorg Xorg SecurityLookupIDByClass
+ 3 11.1111 Xorg Xorg AddResource
+ 3 11.1111 Xorg Xorg ProcRenderFreePicture
+ 15 55.5556 Xorg Xorg SecurityLookupIDByType
+27 0.0294 Xorg Xorg Hash
+ 27 100.000 Xorg Xorg Hash [self]
+-------------------------------------------------------------------------------
+ 2 8.0000 Xorg Xorg damageReportPostOp
+ 3 12.0000 Xorg Xorg damageDamageBox
+ 9 36.0000 Xorg Xorg DamageReportDamage
+ 11 44.0000 Xorg Xorg damageDamageRegion
+27 0.0294 Xorg Xorg miUnion
+ 422 92.3414 libpixman.so.0.0.0 Xorg pixman_region_union
+ 27 5.9081 Xorg Xorg miUnion [self]
+ 4 0.8753 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 3 0.6565 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 1 0.2188 libpixman.so.0.0.0 Xorg .plt
+-------------------------------------------------------------------------------
+ 190 100.000 libfb.so libfb.so fbDoCopy
+27 0.0294 libfb.so libfb.so fbCopyRegion
+ 129 66.4948 libexa.so libfb.so exaCopyNtoN
+ 27 13.9175 libfb.so libfb.so fbCopyRegion [self]
+ 17 8.7629 libexa.so libfb.so .plt
+ 10 5.1546 libexa.so libfb.so exaGetDrawablePixmap
+ 4 2.0619 libexa.so libfb.so __i686.get_pc_thunk.bx
+ 3 1.5464 libexa.so libfb.so exaGetDrawableDeltas
+ 3 1.5464 libexa.so libfb.so exaPixmapIsOffscreen
+ 1 0.5155 libexa.so libfb.so exaDoMigration
+-------------------------------------------------------------------------------
+27 0.0294 vmlinux vmlinux timer_interrupt
+ 27 100.000 vmlinux vmlinux timer_interrupt [self]
+-------------------------------------------------------------------------------
+26 0.0283 libextmod.so libextmod.so XvDestroyPixmap
+ 66 68.7500 Xorg libextmod.so damageDestroyPixmap
+ 26 27.0833 libextmod.so libextmod.so XvDestroyPixmap [self]
+ 2 2.0833 Xorg libextmod.so damageRemoveDamage
+ 1 1.0417 Xorg libextmod.so DamageDestroy
+ 1 1.0417 libexa.so libextmod.so exaDestroyPixmap
+-------------------------------------------------------------------------------
+25 0.0272 libdri.so libdri.so DRIGetSAREAPrivate
+ 25 100.000 libdri.so libdri.so DRIGetSAREAPrivate [self]
+-------------------------------------------------------------------------------
+ 6 15.3846 Xorg Xorg ProcChangeGC
+ 33 84.6154 Xorg Xorg ChangeGC
+24 0.0261 Xorg Xorg dixChangeGC
+ 24 61.5385 Xorg Xorg dixChangeGC [self]
+ 12 30.7692 Xorg Xorg damageChangeGC
+ 2 5.1282 Xorg Xorg damageChangeClip
+ 1 2.5641 Xorg Xorg miBSCheapChangeGC
+-------------------------------------------------------------------------------
+24 0.0261 jbd.ko jbd journal_add_journal_head
+ 24 100.000 jbd.ko jbd journal_add_journal_head [self]
+-------------------------------------------------------------------------------
+ 22 100.000 Xorg Xorg PictureGetFilterId
+22 0.0240 Xorg Xorg CompareISOLatin1Lowered
+ 22 100.000 Xorg Xorg CompareISOLatin1Lowered [self]
+-------------------------------------------------------------------------------
+ 2 0.0032 Xorg Xorg main
+ 62277 99.9968 Xorg Xorg Dispatch
+22 0.0240 Xorg Xorg XaceCatchExtProc
+ 62190 99.8427 Xorg Xorg ProcRenderDispatch
+ 40 0.0642 Xorg Xorg XaceHook
+ 22 0.0353 Xorg Xorg XaceCatchExtProc [self]
+ 6 0.0096 Xorg Xorg ProcRenderCreatePicture
+ 5 0.0080 Xorg Xorg GetExtensionEntry
+ 5 0.0080 Xorg Xorg ProcRenderFillRectangles
+ 5 0.0080 Xorg Xorg ProcRenderChangePicture
+ 4 0.0064 Xorg Xorg ProcRenderCompositeGlyphs
+ 3 0.0048 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 0.0032 Xorg Xorg __i686.get_pc_thunk.cx
+ 2 0.0032 Xorg Xorg ProcRenderFreePicture
+ 1 0.0016 Xorg Xorg CallCallbacks
+ 1 0.0016 Xorg Xorg ProcRenderSetPictureFilter
+ 1 0.0016 Xorg Xorg ProcRenderSetPictureTransform
+ 1 0.0016 Xorg Xorg ProcRenderSetPictureClipRectangles
+-------------------------------------------------------------------------------
+22 0.0240 jbd.ko jbd do_get_write_access
+ 22 100.000 jbd.ko jbd do_get_write_access [self]
+-------------------------------------------------------------------------------
+ 48 100.000 Xorg Xorg damageDamageBox
+21 0.0229 Xorg Xorg damageDamageRegion
+ 21 43.7500 Xorg Xorg damageDamageRegion [self]
+ 11 22.9167 Xorg Xorg miUnion
+ 10 20.8333 Xorg Xorg miIntersect
+ 2 4.1667 Xorg Xorg .plt
+ 2 4.1667 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 1 2.0833 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 2.0833 libpixman.so.0.0.0 Xorg pixman_region_union
+-------------------------------------------------------------------------------
+21 0.0229 vmlinux vmlinux __find_get_block
+ 21 100.000 vmlinux vmlinux __find_get_block [self]
+-------------------------------------------------------------------------------
+20 0.0218 Xorg Xorg miComputeCompositeClip
+ 20 83.3333 Xorg Xorg miComputeCompositeClip [self]
+ 3 12.5000 Xorg Xorg miTranslateRegion
+ 1 4.1667 Xorg Xorg miIntersect
+-------------------------------------------------------------------------------
+ 5 100.000 intel_drv.so intel_drv.so i830WaitSync
+19 0.0207 intel_drv.so intel_drv.so I830EXASync
+ 31400 99.9204 intel_drv.so intel_drv.so I830Sync
+ 19 0.0605 intel_drv.so intel_drv.so I830EXASync [self]
+ 4 0.0127 intel_drv.so intel_drv.so I830WaitLpRing
+ 1 0.0032 intel_drv.so intel_drv.so .plt
+ 1 0.0032 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 62 100.000 libexa.so libexa.so exaGlyphs
+19 0.0207 libexa.so libexa.so exaCreatePixmap
+ 104 67.0968 libfb.so libexa.so fbCreatePixmap
+ 25 16.1290 Xorg libexa.so DamageCreate
+ 19 12.2581 libexa.so libexa.so exaCreatePixmap [self]
+ 4 2.5806 Xorg libexa.so DamageRegister
+ 1 0.6452 Xorg libexa.so DamageSetReportAfterOp
+ 1 0.6452 Xorg libexa.so Xalloc
+ 1 0.6452 libfb.so libexa.so .plt
+-------------------------------------------------------------------------------
+ 31 100.000 libexa.so libexa.so exaPolySegment
+19 0.0207 libexa.so libexa.so exaPolyFillRect
+ 185 61.4618 libexa.so libexa.so exaFillRegionSolid
+ 29 9.6346 Xorg libexa.so miRectsToRegion
+ 25 8.3056 libpixman.so.0.0.0 libexa.so pixman_region_fini
+ 23 7.6412 Xorg libexa.so miRegionDestroy
+ 19 6.3123 libexa.so libexa.so exaPolyFillRect [self]
+ 6 1.9934 Xorg libexa.so miIntersect
+ 3 0.9967 Xorg libexa.so miTranslateRegion
+ 2 0.6645 intel_drv.so libexa.so I830EXASolid
+ 2 0.6645 libexa.so libexa.so exaGetDrawableDeltas
+ 2 0.6645 libexa.so libexa.so exaGetOffscreenPixmap
+ 1 0.3322 Xorg libexa.so miRegionCreate
+ 1 0.3322 Xorg libexa.so miRegionValidate
+ 1 0.3322 libexa.so libexa.so exaGetDrawablePixmap
+ 1 0.3322 libexa.so libexa.so exaMarkSync
+ 1 0.3322 libexa.so libexa.so exaDoMigration
+-------------------------------------------------------------------------------
+19 0.0207 vmlinux vmlinux system_call
+ 19 100.000 vmlinux vmlinux system_call [self]
+-------------------------------------------------------------------------------
+18 0.0196 libm-2.5.so libm-2.5.so cos
+ 18 100.000 libm-2.5.so libm-2.5.so cos [self]
+-------------------------------------------------------------------------------
+ 6 33.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 12 66.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+18 0.0196 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+ 18 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3 [self]
+-------------------------------------------------------------------------------
+18 0.0196 sysprof_module sysprof_module (no symbols)
+ 18 100.000 sysprof_module sysprof_module (no symbols) [self]
+-------------------------------------------------------------------------------
+18 0.0196 vmlinux vmlinux kmem_cache_alloc
+ 18 100.000 vmlinux vmlinux kmem_cache_alloc [self]
+-------------------------------------------------------------------------------
+ 1 0.3106 Xorg Xorg damageGlyphs
+ 6 1.8634 Xorg Xorg ProcPolyFillRectangle
+ 7 2.1739 Xorg Xorg miCompositeRects
+ 8 2.4845 Xorg Xorg miCreateAlphaPicture
+ 300 93.1677 Xorg Xorg miColorRects
+17 0.0185 Xorg Xorg damagePolyFillRect
+ 269 79.5858 libexa.so Xorg exaPolyFillRect
+ 31 9.1716 Xorg Xorg damageDamageBox
+ 17 5.0296 Xorg Xorg damagePolyFillRect [self]
+ 11 3.2544 Xorg Xorg damageReportPostOp
+ 2 0.5917 libexa.so Xorg exaFillRegionSolid
+ 1 0.2959 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.2959 Xorg Xorg miTranslateRegion
+ 1 0.2959 Xorg Xorg miIntersect
+ 1 0.2959 Xorg Xorg miRegionDestroy
+ 1 0.2959 Xorg Xorg miRectsToRegion
+ 1 0.2959 Xorg Xorg getDrawableDamageRef
+ 1 0.2959 libexa.so Xorg .plt
+ 1 0.2959 libexa.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+17 0.0185 libm-2.5.so libm-2.5.so ceil
+ 17 100.000 libm-2.5.so libm-2.5.so ceil [self]
+-------------------------------------------------------------------------------
+17 0.0185 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty
+ 17 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+17 0.0185 vmlinux vmlinux page_fault
+ 17 100.000 vmlinux vmlinux page_fault [self]
+-------------------------------------------------------------------------------
+ 2 13.3333 Xorg Xorg ProcRenderDispatch
+ 5 33.3333 Xorg Xorg CreatePicture
+ 8 53.3333 Xorg Xorg ProcRenderChangePicture
+16 0.0174 Xorg Xorg ChangePicture
+ 16 100.000 Xorg Xorg ChangePicture [self]
+-------------------------------------------------------------------------------
+ 1 2.6316 Xorg Xorg SetPictureFilter
+ 2 5.2632 Xorg Xorg CreatePicture
+ 6 15.7895 Xorg Xorg PictureFindFilter
+ 29 76.3158 Xorg Xorg SetPictureToDefaults
+16 0.0174 Xorg Xorg PictureGetFilterId
+ 22 57.8947 Xorg Xorg CompareISOLatin1Lowered
+ 16 42.1053 Xorg Xorg PictureGetFilterId [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damageGlyphs
+16 0.0174 Xorg Xorg miGlyphExtents
+ 16 100.000 Xorg Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+16 0.0174 libdri.so libdri.so DRIGetContext
+ 16 100.000 libdri.so libdri.so DRIGetContext [self]
+-------------------------------------------------------------------------------
+ 2 2.7778 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 70 97.2222 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+16 0.0174 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+ 52 72.2222 libc-2.5.so libpixman.so.0.0.0 malloc
+ 16 22.2222 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc [self]
+ 3 4.1667 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 1.3889 libc-2.5.so libpixman.so.0.0.0 _int_malloc
+-------------------------------------------------------------------------------
+16 0.0174 vmlinux vmlinux apic_timer_interrupt
+ 16 100.000 vmlinux vmlinux apic_timer_interrupt [self]
+-------------------------------------------------------------------------------
+ 3 3.0303 Xorg Xorg ProcRenderDispatch
+ 96 96.9697 Xorg Xorg ProcRenderCompositeGlyphs
+15 0.0163 Xorg Xorg FindGlyph
+ 84 84.8485 Xorg Xorg FindGlyphRef
+ 15 15.1515 Xorg Xorg FindGlyph [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg Xorg FreePicture
+ 1 50.0000 Xorg Xorg miCreateAlphaPicture
+15 0.0163 Xorg Xorg damageDestroyPixmap
+ 45 66.1765 libexa.so Xorg exaDestroyPixmap
+ 15 22.0588 Xorg Xorg damageDestroyPixmap [self]
+ 5 7.3529 Xorg Xorg DamageDestroy
+ 2 2.9412 Xorg Xorg Xfree
+ 1 1.4706 libfb.so Xorg fbDestroyPixmap
+-------------------------------------------------------------------------------
+ 1 0.2257 Xorg Xorg CompositeRects
+ 442 99.7743 Xorg Xorg miCompositeRects
+15 0.0163 Xorg Xorg miColorRects
+ 300 67.4157 Xorg Xorg damagePolyFillRect
+ 47 10.5618 Xorg Xorg ValidateGC
+ 37 8.3146 Xorg Xorg ChangeGC
+ 17 3.8202 Xorg Xorg GetScratchGC
+ 15 3.3708 Xorg Xorg miColorRects [self]
+ 10 2.2472 Xorg Xorg miRenderColorToPixel
+ 7 1.5730 Xorg Xorg miRegionCreate
+ 4 0.8989 Xorg Xorg miRegionCopy
+ 3 0.6742 Xorg Xorg FreeScratchGC
+ 2 0.4494 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.2247 Xorg Xorg damageValidateGC
+ 1 0.2247 Xorg Xorg damageDamageBox
+ 1 0.2247 libexa.so Xorg exaPolyFillRect
+-------------------------------------------------------------------------------
+ 31 100.000 intel_drv.so intel_drv.so i965_composite
+15 0.0163 intel_drv.so intel_drv.so i830MarkSync
+ 19 51.3514 libexa.so intel_drv.so exaMarkSync
+ 15 40.5405 intel_drv.so intel_drv.so i830MarkSync [self]
+ 3 8.1081 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 14.2857 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+ 1 14.2857 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 2 28.5714 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 3 42.8571 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+15 0.0163 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 15 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+15 0.0163 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+ 15 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy [self]
+-------------------------------------------------------------------------------
+15 0.0163 vmlinux vmlinux unix_stream_sendmsg
+ 15 100.000 vmlinux vmlinux unix_stream_sendmsg [self]
+-------------------------------------------------------------------------------
+ 6 4.3165 Xorg Xorg XaceCatchExtProc
+ 133 95.6835 Xorg Xorg ProcRenderDispatch
+14 0.0153 Xorg Xorg ProcRenderCreatePicture
+ 68 48.9209 Xorg Xorg CreatePicture
+ 23 16.5468 Xorg Xorg dixLookupDrawable
+ 14 10.0719 Xorg Xorg ProcRenderCreatePicture [self]
+ 13 9.3525 Xorg Xorg SecurityLookupIDByType
+ 10 7.1942 Xorg Xorg AddResource
+ 5 3.5971 Xorg Xorg LegalNewID
+ 1 0.7194 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.7194 Xorg Xorg Hash
+ 1 0.7194 Xorg Xorg SecurityLookupIDByClass
+ 1 0.7194 Xorg Xorg Ones
+ 1 0.7194 Xorg Xorg XaceHook
+ 1 0.7194 Xorg Xorg miCreatePicture
+-------------------------------------------------------------------------------
+ 1 7.1429 Xorg Xorg CallCallbacks
+ 13 92.8571 Xorg Xorg _CallCallbacks
+14 0.0153 Xorg Xorg SecurityCheckExtAccess
+ 14 100.000 Xorg Xorg SecurityCheckExtAccess [self]
+-------------------------------------------------------------------------------
+14 0.0153 jbd.ko jbd journal_put_journal_head
+ 14 100.000 jbd.ko jbd journal_put_journal_head [self]
+-------------------------------------------------------------------------------
+14 0.0153 libc-2.5.so libc-2.5.so mkdir
+ 14 100.000 libc-2.5.so libc-2.5.so mkdir [self]
+-------------------------------------------------------------------------------
+ 1 7.1429 libexa.so libexa.so exaCopyNtoN
+ 4 28.5714 libexa.so libexa.so exaFillRegionSolid
+ 9 64.2857 libexa.so libexa.so exaTryDriverComposite
+14 0.0153 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 14 100.000 libexa.so libexa.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+14 0.0153 vmlinux vmlinux __copy_from_user_ll_nozero
+ 14 100.000 vmlinux vmlinux __copy_from_user_ll_nozero [self]
+-------------------------------------------------------------------------------
+13 0.0142 Xorg Xorg AllocatePixmap
+ 67 82.7160 Xorg Xorg Xalloc
+ 13 16.0494 Xorg Xorg AllocatePixmap [self]
+ 1 1.2346 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+13 0.0142 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols)
+ 13 100.000 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 1 50.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+13 0.0142 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+ 13 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+13 0.0142 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect
+ 13 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+13 0.0142 vmlinux vmlinux do_lookup
+ 13 100.000 vmlinux vmlinux do_lookup [self]
+-------------------------------------------------------------------------------
+ 1 1.3514 Xorg Xorg ProcRenderDispatch
+ 2 2.7027 Xorg Xorg miCreateAlphaPicture
+ 3 4.0541 Xorg Xorg miCompositeRects
+ 68 91.8919 Xorg Xorg ProcRenderCreatePicture
+12 0.0131 Xorg Xorg CreatePicture
+ 51 52.0408 Xorg Xorg SetPictureToDefaults
+ 27 27.5510 Xorg Xorg AllocatePicture
+ 12 12.2449 Xorg Xorg CreatePicture [self]
+ 5 5.1020 Xorg Xorg ChangePicture
+ 2 2.0408 Xorg Xorg PictureGetFilterId
+ 1 1.0204 Xorg Xorg Xalloc
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg ProcCreatePixmap
+12 0.0131 Xorg Xorg DamageCreate
+ 15 55.5556 Xorg Xorg Xalloc
+ 12 44.4444 Xorg Xorg DamageCreate [self]
+-------------------------------------------------------------------------------
+ 1 8.3333 Xorg Xorg miTrapezoidBounds
+ 11 91.6667 Xorg Xorg miLineFixedX
+12 0.0131 Xorg Xorg __divdi3
+ 12 100.000 Xorg Xorg __divdi3 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+12 0.0131 libfb.so libfb.so __i686.get_pc_thunk.bx
+ 12 100.000 libfb.so libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+12 0.0131 vmlinux vmlinux kmem_cache_free
+ 12 100.000 vmlinux vmlinux kmem_cache_free [self]
+-------------------------------------------------------------------------------
+11 0.0120 ext3.ko ext3 ext3_mark_iloc_dirty
+ 11 100.000 ext3.ko ext3 ext3_mark_iloc_dirty [self]
+-------------------------------------------------------------------------------
+11 0.0120 libc-2.5.so libc-2.5.so realloc
+ 42 68.8525 libc-2.5.so libc-2.5.so _int_realloc
+ 11 18.0328 libc-2.5.so libc-2.5.so realloc [self]
+ 8 13.1148 libc-2.5.so libc-2.5.so malloc
+-------------------------------------------------------------------------------
+ 16 100.000 libexa.so libexa.so exaDestroyPixmap
+11 0.0120 libexa.so libexa.so exaOffscreenFree
+ 11 68.7500 libexa.so libexa.so exaOffscreenFree [self]
+ 5 31.2500 libexa.so libexa.so ExaOffscreenMerge
+-------------------------------------------------------------------------------
+11 0.0120 vmlinux vmlinux hrtimer_run_queues
+ 11 100.000 vmlinux vmlinux hrtimer_run_queues [self]
+-------------------------------------------------------------------------------
+10 0.0109 Xorg Xorg DamageRegion
+ 10 100.000 Xorg Xorg DamageRegion [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg Xorg CompositeRects
+ 2 33.3333 Xorg Xorg damageGlyphs
+ 3 50.0000 Xorg Xorg miColorRects
+10 0.0109 Xorg Xorg FreeScratchGC
+ 10 100.000 Xorg Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 5 0.0080 Xorg Xorg Dispatch
+ 62190 99.9920 Xorg Xorg XaceCatchExtProc
+10 0.0109 Xorg Xorg ProcRenderDispatch
+ 50967 81.9405 Xorg Xorg ProcRenderCompositeGlyphs
+ 8299 13.3424 Xorg Xorg ProcRenderTrapezoids
+ 2022 3.2508 Xorg Xorg ProcRenderComposite
+ 566 0.9100 Xorg Xorg ProcRenderFillRectangles
+ 133 0.2138 Xorg Xorg ProcRenderCreatePicture
+ 87 0.1399 Xorg Xorg ProcRenderFreePicture
+ 46 0.0740 Xorg Xorg ProcRenderSetPictureFilter
+ 21 0.0338 Xorg Xorg ProcRenderSetPictureTransform
+ 18 0.0289 Xorg Xorg ProcRenderChangePicture
+ 10 0.0161 Xorg Xorg ProcRenderDispatch [self]
+ 8 0.0129 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 6 0.0096 Xorg Xorg SecurityLookupIDByType
+ 4 0.0064 Xorg Xorg __i686.get_pc_thunk.bx
+ 3 0.0048 Xorg Xorg FindGlyph
+ 2 0.0032 Xorg Xorg ChangePicture
+ 2 0.0032 Xorg Xorg SetPictureTransform
+ 2 0.0032 Xorg Xorg Ones
+ 1 0.0016 Xorg Xorg CreatePicture
+ 1 0.0016 Xorg Xorg CompositeGlyphs
+ 1 0.0016 Xorg Xorg SetPictureFilter
+ 1 0.0016 Xorg Xorg FreeResource
+-------------------------------------------------------------------------------
+ 5 0.8757 Xorg Xorg XaceCatchExtProc
+ 566 99.1243 Xorg Xorg ProcRenderDispatch
+10 0.0109 Xorg Xorg ProcRenderFillRectangles
+ 545 95.4466 Xorg Xorg CompositeRects
+ 15 2.6270 Xorg Xorg SecurityLookupIDByType
+ 10 1.7513 Xorg Xorg ProcRenderFillRectangles [self]
+ 1 0.1751 Xorg Xorg miCompositeRects
+-------------------------------------------------------------------------------
+ 1 4.3478 Xorg Xorg ProcRenderDispatch
+ 22 95.6522 Xorg Xorg ProcRenderSetPictureFilter
+10 0.0109 Xorg Xorg SetPictureFilter
+ 12 52.1739 Xorg Xorg PictureFindFilter
+ 10 43.4783 Xorg Xorg SetPictureFilter [self]
+ 1 4.3478 Xorg Xorg PictureGetFilterId
+-------------------------------------------------------------------------------
+ 2 20.0000 Xorg Xorg ProcRenderDispatch
+ 8 80.0000 Xorg Xorg ProcRenderSetPictureTransform
+10 0.0109 Xorg Xorg SetPictureTransform
+ 10 100.000 Xorg Xorg SetPictureTransform [self]
+-------------------------------------------------------------------------------
+ 3 7.1429 Xorg Xorg CompositeRects
+ 39 92.8571 Xorg Xorg ValidatePicture
+10 0.0109 Xorg Xorg ValidateOnePicture
+ 31 73.8095 Xorg Xorg miValidatePicture
+ 10 23.8095 Xorg Xorg ValidateOnePicture [self]
+ 1 2.3810 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.6897 Xorg Xorg AllocateGC
+ 1 0.6897 Xorg Xorg miRectsToRegion
+ 1 0.6897 Xorg Xorg CreatePicture
+ 2 1.3793 Xorg Xorg SetClipRects
+ 2 1.3793 Xorg Xorg miRegionValidate
+ 5 3.4483 Xorg Xorg AddResource
+ 15 10.3448 Xorg Xorg DamageCreate
+ 23 15.8621 Xorg Xorg AllocatePicture
+ 28 19.3103 Xorg Xorg miRegionCreate
+ 67 46.2069 Xorg Xorg AllocatePixmap
+10 0.0109 Xorg Xorg Xalloc
+ 136 89.4737 libc-2.5.so Xorg malloc
+ 10 6.5789 Xorg Xorg Xalloc [self]
+ 4 2.6316 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+ 2 1.3158 libc-2.5.so Xorg _int_malloc
+-------------------------------------------------------------------------------
+ 1 2.0000 Xorg Xorg miRegionValidate
+ 2 4.0000 Xorg Xorg miDestroyPicture
+ 2 4.0000 Xorg Xorg damageDestroyPixmap
+ 3 6.0000 Xorg Xorg DamageDestroy
+ 8 16.0000 Xorg Xorg FreeResource
+ 14 28.0000 Xorg Xorg FreePicture
+ 20 40.0000 Xorg Xorg miRegionDestroy
+10 0.0109 Xorg Xorg Xfree
+ 61 82.4324 libc-2.5.so Xorg free
+ 10 13.5135 Xorg Xorg Xfree [self]
+ 2 2.7027 libc-2.5.so Xorg _int_free
+ 1 1.3514 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+10 0.0109 intel_drv.so intel_drv.so I830EXAPrepareSolid
+ 10 71.4286 intel_drv.so intel_drv.so I830EXAPrepareSolid [self]
+ 3 21.4286 libexa.so intel_drv.so exaGetPixmapOffset
+ 1 7.1429 libexa.so intel_drv.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+10 0.0109 jbd.ko jbd journal_dirty_metadata
+ 10 100.000 jbd.ko jbd journal_dirty_metadata [self]
+-------------------------------------------------------------------------------
+ 42 100.000 libc-2.5.so libc-2.5.so realloc
+10 0.0109 libc-2.5.so libc-2.5.so _int_realloc
+ 22 52.3810 libc-2.5.so libc-2.5.so _int_malloc
+ 10 23.8095 libc-2.5.so libc-2.5.so _int_realloc [self]
+ 5 11.9048 libc-2.5.so libc-2.5.so _int_free
+ 5 11.9048 libc-2.5.so libc-2.5.so memcpy
+-------------------------------------------------------------------------------
+10 0.0109 libfb.so libfb.so fbCreatePixmap
+ 90 85.7143 libfb.so libfb.so fbCreatePixmapBpp
+ 10 9.5238 libfb.so libfb.so fbCreatePixmap [self]
+ 4 3.8095 Xorg libfb.so AllocatePixmap
+ 1 0.9524 libfb.so libfb.so .plt
+-------------------------------------------------------------------------------
+ 90 100.000 libfb.so libfb.so fbCreatePixmap
+10 0.0109 libfb.so libfb.so fbCreatePixmapBpp
+ 77 85.5556 Xorg libfb.so AllocatePixmap
+ 10 11.1111 libfb.so libfb.so fbCreatePixmapBpp [self]
+ 2 2.2222 Xorg libfb.so Xalloc
+ 1 1.1111 Xorg libfb.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+10 0.0109 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+ 40 78.4314 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+ 10 19.6078 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock [self]
+ 1 1.9608 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+10 0.0109 vmlinux vmlinux __alloc_skb
+ 10 100.000 vmlinux vmlinux __alloc_skb [self]
+-------------------------------------------------------------------------------
+10 0.0109 vmlinux vmlinux schedule
+ 10 100.000 vmlinux vmlinux schedule [self]
+-------------------------------------------------------------------------------
+10 0.0109 vmlinux vmlinux strncpy_from_user
+ 10 100.000 vmlinux vmlinux strncpy_from_user [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg Xorg ProcRenderCreatePicture
+ 2 22.2222 Xorg Xorg ProcRenderDispatch
+ 6 66.6667 Xorg Xorg miRenderColorToPixel
+9 0.0098 Xorg Xorg Ones
+ 9 100.000 Xorg Xorg Ones [self]
+-------------------------------------------------------------------------------
+ 117 100.000 Xorg Xorg XaceCatchDispatchProc
+9 0.0098 Xorg Xorg ProcCreatePixmap
+ 81 69.2308 libexa.so Xorg exaCreatePixmap
+ 9 7.6923 Xorg Xorg ProcCreatePixmap [self]
+ 8 6.8376 Xorg Xorg AddResource
+ 5 4.2735 Xorg Xorg dixLookupDrawable
+ 5 4.2735 libexa.so Xorg __i686.get_pc_thunk.bx
+ 3 2.5641 Xorg Xorg DamageSetReportAfterOp
+ 2 1.7094 Xorg Xorg LegalNewID
+ 2 1.7094 Xorg Xorg DamageCreate
+ 1 0.8547 Xorg Xorg Hash
+ 1 0.8547 libexa.so Xorg .plt
+-------------------------------------------------------------------------------
+ 1 6.6667 Xorg Xorg SetClipRects
+ 2 13.3333 Xorg Xorg ChangeGC
+ 12 80.0000 Xorg Xorg dixChangeGC
+9 0.0098 Xorg Xorg damageChangeGC
+ 9 60.0000 Xorg Xorg damageChangeGC [self]
+ 6 40.0000 Xorg Xorg miChangeGC
+-------------------------------------------------------------------------------
+ 1 0.1908 Xorg Xorg ProcRenderFillRectangles
+ 523 99.8092 Xorg Xorg CompositeRects
+9 0.0098 Xorg Xorg miCompositeRects
+ 442 84.3511 Xorg Xorg miColorRects
+ 49 9.3511 Xorg Xorg CompositePicture
+ 9 1.7176 Xorg Xorg miCompositeRects [self]
+ 7 1.3359 Xorg Xorg damagePolyFillRect
+ 3 0.5725 Xorg Xorg ValidateGC
+ 3 0.5725 Xorg Xorg ChangeGC
+ 3 0.5725 Xorg Xorg CreatePicture
+ 3 0.5725 libexa.so Xorg exaCreatePixmap
+ 1 0.1908 Xorg Xorg GetScratchGC
+ 1 0.1908 Xorg Xorg miRegionCopy
+ 1 0.1908 Xorg Xorg miRegionCreate
+ 1 0.1908 Xorg Xorg miRenderColorToPixel
+ 1 0.1908 Xorg Xorg damageChangeClip
+-------------------------------------------------------------------------------
+ 31 100.000 Xorg Xorg ValidateOnePicture
+9 0.0098 Xorg Xorg miValidatePicture
+ 19 61.2903 Xorg Xorg miRegionCreate
+ 9 29.0323 Xorg Xorg miValidatePicture [self]
+ 1 3.2258 Xorg Xorg .plt
+ 1 3.2258 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 3.2258 Xorg Xorg miTranslateRegion
+-------------------------------------------------------------------------------
+9 0.0098 ext3.ko ext3 ext3_new_inode
+ 9 100.000 ext3.ko ext3 ext3_new_inode [self]
+-------------------------------------------------------------------------------
+9 0.0098 libc-2.5.so libc-2.5.so strcmp
+ 9 100.000 libc-2.5.so libc-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+ 2 33.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 2 33.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 2 33.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+9 0.0098 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 9 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+9 0.0098 vmlinux vmlinux __brelse
+ 9 100.000 vmlinux vmlinux __brelse [self]
+-------------------------------------------------------------------------------
+9 0.0098 vmlinux vmlinux __insert_inode_hash
+ 9 100.000 vmlinux vmlinux __insert_inode_hash [self]
+-------------------------------------------------------------------------------
+9 0.0098 vmlinux vmlinux cache_alloc_refill
+ 9 100.000 vmlinux vmlinux cache_alloc_refill [self]
+-------------------------------------------------------------------------------
+9 0.0098 vmlinux vmlinux permission
+ 9 100.000 vmlinux vmlinux permission [self]
+-------------------------------------------------------------------------------
+ 8 44.4444 Xorg Xorg ProcCreatePixmap
+ 10 55.5556 Xorg Xorg ProcRenderCreatePicture
+8 0.0087 Xorg Xorg AddResource
+ 8 44.4444 Xorg Xorg AddResource [self]
+ 5 27.7778 Xorg Xorg Xalloc
+ 3 16.6667 Xorg Xorg Hash
+ 2 11.1111 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 2.4390 Xorg Xorg damageGlyphs
+ 7 17.0732 Xorg Xorg miTrapezoids
+ 33 80.4878 Xorg Xorg FreeResource
+8 0.0087 Xorg Xorg FreePicture
+ 27 39.7059 libextmod.so Xorg XvDestroyPixmap
+ 14 20.5882 Xorg Xorg miDestroyPicture
+ 14 20.5882 Xorg Xorg Xfree
+ 8 11.7647 Xorg Xorg FreePicture [self]
+ 2 2.9412 Xorg Xorg miRegionDestroy
+ 1 1.4706 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.4706 Xorg Xorg damageDestroyPixmap
+ 1 1.4706 Xorg Xorg miDestroyPictureClip
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg Xorg miCompositeRects
+ 1 4.7619 Xorg Xorg miCreateAlphaPicture
+ 2 9.5238 Xorg Xorg damageGlyphs
+ 17 80.9524 Xorg Xorg miColorRects
+8 0.0087 Xorg Xorg GetScratchGC
+ 12 57.1429 Xorg Xorg damageChangeClip
+ 8 38.0952 Xorg Xorg GetScratchGC [self]
+ 1 4.7619 Xorg Xorg miBSCheapChangeClip
+-------------------------------------------------------------------------------
+ 2 14.2857 Xorg Xorg ProcRenderSetPictureFilter
+ 12 85.7143 Xorg Xorg SetPictureFilter
+8 0.0087 Xorg Xorg PictureFindFilter
+ 8 57.1429 Xorg Xorg PictureFindFilter [self]
+ 6 42.8571 Xorg Xorg PictureGetFilterId
+-------------------------------------------------------------------------------
+ 1 4.5455 Xorg Xorg ProcRenderCreatePicture
+ 21 95.4545 Xorg Xorg dixLookupDrawable
+8 0.0087 Xorg Xorg SecurityLookupIDByClass
+ 12 54.5455 Xorg Xorg XaceHook
+ 8 36.3636 Xorg Xorg SecurityLookupIDByClass [self]
+ 2 9.0909 Xorg Xorg Hash
+-------------------------------------------------------------------------------
+ 51 100.000 Xorg Xorg CreatePicture
+8 0.0087 Xorg Xorg SetPictureToDefaults
+ 29 56.8627 Xorg Xorg PictureGetFilterId
+ 14 27.4510 libc-2.5.so Xorg strlen
+ 8 15.6863 Xorg Xorg SetPictureToDefaults [self]
+-------------------------------------------------------------------------------
+ 19 100.000 Xorg Xorg miTrapezoidBounds
+8 0.0087 Xorg Xorg miLineFixedX
+ 11 57.8947 Xorg Xorg __divdi3
+ 8 42.1053 Xorg Xorg miLineFixedX [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg Xorg damagePolyFillRect
+ 3 33.3333 Xorg Xorg miChangeClip
+ 5 55.5556 Xorg Xorg SetPictureClipRects
+8 0.0087 Xorg Xorg miRectsToRegion
+ 18 47.3684 Xorg Xorg miRegionCreate
+ 10 26.3158 Xorg Xorg miRegionValidate
+ 8 21.0526 Xorg Xorg miRectsToRegion [self]
+ 1 2.6316 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 2.6316 Xorg Xorg Xalloc
+-------------------------------------------------------------------------------
+8 0.0087 jbd.ko jbd journal_commit_transaction
+ 8 100.000 jbd.ko jbd journal_commit_transaction [self]
+-------------------------------------------------------------------------------
+8 0.0087 jbd.ko jbd journal_file_buffer
+ 8 100.000 jbd.ko jbd journal_file_buffer [self]
+-------------------------------------------------------------------------------
+8 0.0087 jbd.ko jbd journal_write_metadata_buffer
+ 8 100.000 jbd.ko jbd journal_write_metadata_buffer [self]
+-------------------------------------------------------------------------------
+8 0.0087 libdri.so libdri.so __i686.get_pc_thunk.cx
+ 8 100.000 libdri.so libdri.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+8 0.0087 libexa.so libexa.so exaValidateGC
+ 55 79.7101 libfb.so libexa.so fbValidateGC
+ 8 11.5942 libexa.so libexa.so exaValidateGC [self]
+ 2 2.8986 Xorg libexa.so miComputeCompositeClip
+ 2 2.8986 libfb.so libexa.so __i686.get_pc_thunk.cx
+ 2 2.8986 libfb.so libexa.so fbGetGCPrivateIndex
+-------------------------------------------------------------------------------
+8 0.0087 vmlinux vmlinux __follow_mount
+ 8 100.000 vmlinux vmlinux __follow_mount [self]
+-------------------------------------------------------------------------------
+8 0.0087 vmlinux vmlinux ahci_qc_issue
+ 8 100.000 vmlinux vmlinux ahci_qc_issue [self]
+-------------------------------------------------------------------------------
+8 0.0087 vmlinux vmlinux dput
+ 8 100.000 vmlinux vmlinux dput [self]
+-------------------------------------------------------------------------------
+8 0.0087 vmlinux vmlinux free_block
+ 8 100.000 vmlinux vmlinux free_block [self]
+-------------------------------------------------------------------------------
+8 0.0087 vmlinux vmlinux irq_entries_start
+ 8 100.000 vmlinux vmlinux irq_entries_start [self]
+-------------------------------------------------------------------------------
+8 0.0087 vmlinux vmlinux kunmap_atomic
+ 8 100.000 vmlinux vmlinux kunmap_atomic [self]
+-------------------------------------------------------------------------------
+8 0.0087 vmlinux vmlinux smp_apic_timer_interrupt
+ 8 100.000 vmlinux vmlinux smp_apic_timer_interrupt [self]
+-------------------------------------------------------------------------------
+ 2 28.5714 Xorg Xorg ProcCreatePixmap
+ 5 71.4286 Xorg Xorg ProcRenderCreatePicture
+7 0.0076 Xorg Xorg LegalNewID
+ 7 100.000 Xorg Xorg LegalNewID [self]
+-------------------------------------------------------------------------------
+ 5 21.7391 Xorg Xorg XaceCatchExtProc
+ 18 78.2609 Xorg Xorg ProcRenderDispatch
+7 0.0076 Xorg Xorg ProcRenderChangePicture
+ 8 34.7826 Xorg Xorg ChangePicture
+ 7 30.4348 Xorg Xorg SecurityLookupIDByType
+ 7 30.4348 Xorg Xorg ProcRenderChangePicture [self]
+ 1 4.3478 Xorg Xorg miChangePicture
+-------------------------------------------------------------------------------
+ 1 1.2346 Xorg Xorg miColorRects
+ 80 98.7654 Xorg Xorg ValidateGC
+7 0.0076 Xorg Xorg damageValidateGC
+ 73 89.0244 Xorg Xorg miBSCheapValidateGC
+ 7 8.5366 Xorg Xorg damageValidateGC [self]
+ 2 2.4390 libexa.so Xorg exaValidateGC
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg Xorg miRectsToRegion
+7 0.0076 Xorg Xorg miRegionValidate
+ 7 63.6364 Xorg Xorg miRegionValidate [self]
+ 2 18.1818 Xorg Xorg Xalloc
+ 1 9.0909 Xorg Xorg QuickSortRects
+ 1 9.0909 Xorg Xorg Xfree
+-------------------------------------------------------------------------------
+7 0.0076 ext3.ko ext3 __ext3_get_inode_loc
+ 7 100.000 ext3.ko ext3 __ext3_get_inode_loc [self]
+-------------------------------------------------------------------------------
+7 0.0076 ext3.ko ext3 ext3_get_blocks_handle
+ 7 100.000 ext3.ko ext3 ext3_get_blocks_handle [self]
+-------------------------------------------------------------------------------
+7 0.0076 jbd.ko jbd journal_cancel_revoke
+ 7 100.000 jbd.ko jbd journal_cancel_revoke [self]
+-------------------------------------------------------------------------------
+7 0.0076 libc-2.5.so libc-2.5.so gettimeofday
+ 7 100.000 libc-2.5.so libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 185 100.000 libexa.so libexa.so exaPolyFillRect
+7 0.0076 libexa.so libexa.so exaFillRegionSolid
+ 96 51.3369 libexa.so libexa.so exaDoMigration
+ 37 19.7861 intel_drv.so libexa.so I830EXASolid
+ 14 7.4866 intel_drv.so libexa.so I830EXAPrepareSolid
+ 14 7.4866 libexa.so libexa.so exaGetOffscreenPixmap
+ 7 3.7433 libexa.so libexa.so exaFillRegionSolid [self]
+ 4 2.1390 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 4 2.1390 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 3 1.6043 intel_drv.so libexa.so .plt
+ 3 1.6043 libexa.so libexa.so exaGetPixmapOffset
+ 2 1.0695 libexa.so libexa.so exaGetPixmapPitch
+ 1 0.5348 libexa.so libexa.so .plt
+ 1 0.5348 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 1 0.5348 libexa.so libexa.so exaMoveInPixmap
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaFillRegionSolid
+7 0.0076 libexa.so libexa.so exaGetPixmapPitch
+ 7 100.000 libexa.so libexa.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+7 0.0076 libm-2.5.so libm-2.5.so sin
+ 7 100.000 libm-2.5.so libm-2.5.so sin [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+7 0.0076 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 12 63.1579 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+ 7 36.8421 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+7 0.0076 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 7 87.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image [self]
+ 1 12.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+-------------------------------------------------------------------------------
+ 36 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+7 0.0076 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 19 52.7778 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 9 25.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 7 19.4444 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init [self]
+ 1 2.7778 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+7 0.0076 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate
+ 7 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+7 0.0076 libplds4.so libplds4.so (no symbols)
+ 7 100.000 libplds4.so libplds4.so (no symbols) [self]
+-------------------------------------------------------------------------------
+7 0.0076 vmlinux vmlinux dnotify_parent
+ 7 100.000 vmlinux vmlinux dnotify_parent [self]
+-------------------------------------------------------------------------------
+7 0.0076 vmlinux vmlinux find_busiest_group
+ 7 100.000 vmlinux vmlinux find_busiest_group [self]
+-------------------------------------------------------------------------------
+7 0.0076 vmlinux vmlinux find_get_page
+ 7 100.000 vmlinux vmlinux find_get_page [self]
+-------------------------------------------------------------------------------
+7 0.0076 vmlinux vmlinux run_timer_softirq
+ 7 100.000 vmlinux vmlinux run_timer_softirq [self]
+-------------------------------------------------------------------------------
+7 0.0076 vmlinux vmlinux unlock_buffer
+ 7 100.000 vmlinux vmlinux unlock_buffer [self]
+-------------------------------------------------------------------------------
+ 5 11.3636 Xorg Xorg Dispatch
+ 39 88.6364 Xorg Xorg XaceCatchDispatchProc
+6 0.0065 Xorg Xorg ProcFreePixmap
+ 37 84.0909 Xorg Xorg FreeResource
+ 6 13.6364 Xorg Xorg ProcFreePixmap [self]
+ 1 2.2727 Xorg Xorg SecurityLookupIDByType
+-------------------------------------------------------------------------------
+ 1 0.0480 Xorg Xorg ProcRenderComposite
+ 2084 99.9520 Xorg Xorg CompositePicture
+6 0.0065 Xorg Xorg damageComposite
+ 2063 98.9448 libexa.so Xorg exaComposite
+ 11 0.5276 Xorg Xorg damageDamageBox
+ 6 0.2878 Xorg Xorg damageComposite [self]
+ 3 0.1439 Xorg Xorg damageReportPostOp
+ 2 0.0959 libexa.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 3.0303 Xorg Xorg ProcPolyFillRectangle
+ 1 3.0303 Xorg Xorg ProcCopyArea
+ 1 3.0303 Xorg Xorg XaceCatchDispatchProc
+ 2 6.0606 Xorg Xorg ProcPolySegment
+ 5 15.1515 Xorg Xorg ProcCreatePixmap
+ 23 69.6970 Xorg Xorg ProcRenderCreatePicture
+6 0.0065 Xorg Xorg dixLookupDrawable
+ 21 63.6364 Xorg Xorg SecurityLookupIDByClass
+ 6 18.1818 Xorg Xorg dixLookupDrawable [self]
+ 5 15.1515 Xorg Xorg XaceHook
+ 1 3.0303 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg Xorg damageReportPostOp
+ 1 16.6667 Xorg Xorg damagePolyFillRect
+ 1 16.6667 Xorg Xorg damageCopyArea
+ 3 50.0000 Xorg Xorg DamageRegister
+6 0.0065 Xorg Xorg getDrawableDamageRef
+ 6 100.000 Xorg Xorg getDrawableDamageRef [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg damageChangeGC
+6 0.0065 Xorg Xorg miChangeGC
+ 6 100.000 Xorg Xorg miChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg Xorg miComputeCompositeClip
+ 1 7.6923 Xorg Xorg damageDamageBox
+ 1 7.6923 Xorg Xorg damagePolyFillRect
+ 10 76.9231 Xorg Xorg damageDamageRegion
+6 0.0065 Xorg Xorg miIntersect
+ 11 57.8947 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 6 31.5789 Xorg Xorg miIntersect [self]
+ 2 10.5263 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+6 0.0065 libpthread-2.5.so libpthread-2.5.so pthread_getspecific
+ 6 100.000 libpthread-2.5.so libpthread-2.5.so pthread_getspecific [self]
+-------------------------------------------------------------------------------
+6 0.0065 vmlinux vmlinux __find_get_block_slow
+ 6 100.000 vmlinux vmlinux __find_get_block_slow [self]
+-------------------------------------------------------------------------------
+6 0.0065 vmlinux vmlinux __handle_mm_fault
+ 6 100.000 vmlinux vmlinux __handle_mm_fault [self]
+-------------------------------------------------------------------------------
+6 0.0065 vmlinux vmlinux ahci_interrupt
+ 6 100.000 vmlinux vmlinux ahci_interrupt [self]
+-------------------------------------------------------------------------------
+6 0.0065 vmlinux vmlinux find_get_pages_tag
+ 6 100.000 vmlinux vmlinux find_get_pages_tag [self]
+-------------------------------------------------------------------------------
+6 0.0065 vmlinux vmlinux radix_tree_tag_clear
+ 6 100.000 vmlinux vmlinux radix_tree_tag_clear [self]
+-------------------------------------------------------------------------------
+6 0.0065 vmlinux vmlinux unmap_vmas
+ 6 100.000 vmlinux vmlinux unmap_vmas [self]
+-------------------------------------------------------------------------------
+ 3 7.5000 Xorg Xorg miCompositeRects
+ 37 92.5000 Xorg Xorg miColorRects
+5 0.0054 Xorg Xorg ChangeGC
+ 33 82.5000 Xorg Xorg dixChangeGC
+ 5 12.5000 Xorg Xorg ChangeGC [self]
+ 2 5.0000 Xorg Xorg damageChangeGC
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg ProcCreatePixmap
+5 0.0054 Xorg Xorg DamageSetReportAfterOp
+ 5 100.000 Xorg Xorg DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg XaceCatchExtProc
+5 0.0054 Xorg Xorg GetExtensionEntry
+ 5 100.000 Xorg Xorg GetExtensionEntry [self]
+-------------------------------------------------------------------------------
+ 3 1.1364 Xorg Xorg main
+ 261 98.8636 Xorg Xorg Dispatch
+5 0.0054 Xorg Xorg XaceCatchDispatchProc
+ 117 44.3182 Xorg Xorg ProcCreatePixmap
+ 45 17.0455 Xorg Xorg ProcPolySegment
+ 39 14.7727 Xorg Xorg ProcFreePixmap
+ 15 5.6818 Xorg Xorg ProcSetClipRectangles
+ 11 4.1667 Xorg Xorg ProcPolyFillRectangle
+ 11 4.1667 Xorg Xorg ProcChangeGC
+ 8 3.0303 Xorg Xorg ProcCopyArea
+ 5 1.8939 Xorg Xorg XaceCatchDispatchProc [self]
+ 4 1.5152 Xorg Xorg ProcCreateGC
+ 3 1.1364 Xorg Xorg XaceHook
+ 2 0.7576 Xorg Xorg ProcFreeGC
+ 1 0.3788 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.3788 Xorg Xorg dixLookupGC
+ 1 0.3788 Xorg Xorg dixLookupDrawable
+ 1 0.3788 libexa.so Xorg exaCreatePixmap
+-------------------------------------------------------------------------------
+ 1 1.3514 Xorg Xorg ValidateGC
+ 73 98.6486 Xorg Xorg damageValidateGC
+5 0.0054 Xorg Xorg miBSCheapValidateGC
+ 67 90.5405 libexa.so Xorg exaValidateGC
+ 5 6.7568 Xorg Xorg miBSCheapValidateGC [self]
+ 2 2.7027 libfb.so Xorg fbValidateGC
+-------------------------------------------------------------------------------
+ 1 2.2222 Xorg Xorg miCompositeRects
+ 7 15.5556 Xorg Xorg miColorRects
+ 18 40.0000 Xorg Xorg miRectsToRegion
+ 19 42.2222 Xorg Xorg miValidatePicture
+5 0.0054 Xorg Xorg miRegionCreate
+ 28 60.8696 Xorg Xorg Xalloc
+ 9 19.5652 Xorg Xorg miRegionInit
+ 5 10.8696 Xorg Xorg miRegionCreate [self]
+ 2 4.3478 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 2.1739 Xorg Xorg .plt
+ 1 2.1739 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg Xorg damagePolyFillRect
+ 2 9.5238 Xorg Xorg FreePicture
+ 2 9.5238 Xorg Xorg miDestroyPictureClip
+ 7 33.3333 Xorg Xorg miDestroyClip
+ 9 42.8571 Xorg Xorg miDestroyPicture
+5 0.0054 Xorg Xorg miRegionDestroy
+ 20 45.4545 Xorg Xorg Xfree
+ 17 38.6364 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 5 11.3636 Xorg Xorg miRegionDestroy [self]
+ 1 2.2727 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 1 2.2727 libc-2.5.so Xorg free
+-------------------------------------------------------------------------------
+ 9 100.000 Xorg Xorg miRegionCreate
+5 0.0054 Xorg Xorg miRegionInit
+ 5 55.5556 Xorg Xorg miRegionInit [self]
+ 3 33.3333 libpixman.so.0.0.0 Xorg pixman_region_init
+ 1 11.1111 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+-------------------------------------------------------------------------------
+ 1 9.0909 Xorg Xorg miCompositeRects
+ 10 90.9091 Xorg Xorg miColorRects
+5 0.0054 Xorg Xorg miRenderColorToPixel
+ 6 54.5455 Xorg Xorg Ones
+ 5 45.4545 Xorg Xorg miRenderColorToPixel [self]
+-------------------------------------------------------------------------------
+5 0.0054 jbd.ko jbd __journal_file_buffer
+ 5 100.000 jbd.ko jbd __journal_file_buffer [self]
+-------------------------------------------------------------------------------
+5 0.0054 jbd.ko jbd __journal_remove_journal_head
+ 5 100.000 jbd.ko jbd __journal_remove_journal_head [self]
+-------------------------------------------------------------------------------
+5 0.0054 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 5514 99.1192 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+ 36 0.6471 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 5 0.0899 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+ 5 0.0899 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid [self]
+ 2 0.0360 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 1 0.0180 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+-------------------------------------------------------------------------------
+ 5 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+5 0.0054 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+ 5 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y [self]
+-------------------------------------------------------------------------------
+5 0.0054 vmlinux vmlinux __wake_up_bit
+ 5 100.000 vmlinux vmlinux __wake_up_bit [self]
+-------------------------------------------------------------------------------
+5 0.0054 vmlinux vmlinux d_alloc
+ 5 100.000 vmlinux vmlinux d_alloc [self]
+-------------------------------------------------------------------------------
+5 0.0054 vmlinux vmlinux do_softirq
+ 5 100.000 vmlinux vmlinux do_softirq [self]
+-------------------------------------------------------------------------------
+5 0.0054 vmlinux vmlinux fget_light
+ 5 100.000 vmlinux vmlinux fget_light [self]
+-------------------------------------------------------------------------------
+5 0.0054 vmlinux vmlinux get_page_from_freelist
+ 5 100.000 vmlinux vmlinux get_page_from_freelist [self]
+-------------------------------------------------------------------------------
+5 0.0054 vmlinux vmlinux rebalance_tick
+ 5 100.000 vmlinux vmlinux rebalance_tick [self]
+-------------------------------------------------------------------------------
+5 0.0054 vmlinux vmlinux release_pages
+ 5 100.000 vmlinux vmlinux release_pages [self]
+-------------------------------------------------------------------------------
+5 0.0054 vmlinux vmlinux skb_queue_head
+ 5 100.000 vmlinux vmlinux skb_queue_head [self]
+-------------------------------------------------------------------------------
+5 0.0054 vmlinux vmlinux sock_def_readable
+ 5 100.000 vmlinux vmlinux sock_def_readable [self]
+-------------------------------------------------------------------------------
+ 27 100.000 Xorg Xorg CreatePicture
+4 0.0044 Xorg Xorg AllocatePicture
+ 23 85.1852 Xorg Xorg Xalloc
+ 4 14.8148 Xorg Xorg AllocatePicture [self]
+-------------------------------------------------------------------------------
+ 31 1.4804 Xorg Xorg miTrapezoids
+ 49 2.3400 Xorg Xorg miCompositeRects
+ 2014 96.1796 Xorg Xorg ProcRenderComposite
+4 0.0044 Xorg Xorg CompositePicture
+ 2084 99.5224 Xorg Xorg damageComposite
+ 6 0.2865 Xorg Xorg ValidatePicture
+ 4 0.1910 Xorg Xorg CompositePicture [self]
+-------------------------------------------------------------------------------
+ 1 7.1429 Xorg Xorg damageGlyphs
+ 13 92.8571 Xorg Xorg damageReportPostOp
+4 0.0044 Xorg Xorg DamageReportDamage
+ 9 64.2857 Xorg Xorg miUnion
+ 4 28.5714 Xorg Xorg DamageReportDamage [self]
+ 1 7.1429 libpixman.so.0.0.0 Xorg pixman_region_union
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg FreeResource
+4 0.0044 Xorg Xorg FlushClientCaches
+ 4 100.000 Xorg Xorg FlushClientCaches [self]
+-------------------------------------------------------------------------------
+ 1 2.1277 Xorg Xorg XaceCatchExtProc
+ 46 97.8723 Xorg Xorg ProcRenderDispatch
+4 0.0044 Xorg Xorg ProcRenderSetPictureFilter
+ 22 46.8085 Xorg Xorg SetPictureFilter
+ 17 36.1702 Xorg Xorg SecurityLookupIDByType
+ 4 8.5106 Xorg Xorg ProcRenderSetPictureFilter [self]
+ 2 4.2553 Xorg Xorg PictureFindFilter
+ 1 2.1277 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 2.1277 Xorg Xorg miChangePictureFilter
+-------------------------------------------------------------------------------
+ 3 20.0000 Xorg Xorg damageChangeClip
+ 12 80.0000 Xorg Xorg miBSCheapChangeClip
+4 0.0044 Xorg Xorg miChangeClip
+ 8 53.3333 Xorg Xorg miDestroyClip
+ 4 26.6667 Xorg Xorg miChangeClip [self]
+ 3 20.0000 Xorg Xorg miRectsToRegion
+-------------------------------------------------------------------------------
+ 3 17.6471 Xorg Xorg FreeResource
+ 14 82.3529 Xorg Xorg FreePicture
+4 0.0044 Xorg Xorg miDestroyPicture
+ 9 52.9412 Xorg Xorg miRegionDestroy
+ 4 23.5294 Xorg Xorg miDestroyPicture [self]
+ 2 11.7647 Xorg Xorg Xfree
+ 2 11.7647 libpixman.so.0.0.0 Xorg pixman_region_fini
+-------------------------------------------------------------------------------
+4 0.0044 ext3.ko ext3 ext3_find_entry
+ 4 100.000 ext3.ko ext3 ext3_find_entry [self]
+-------------------------------------------------------------------------------
+4 0.0044 jbd.ko jbd __journal_temp_unlink_buffer
+ 4 100.000 jbd.ko jbd __journal_temp_unlink_buffer [self]
+-------------------------------------------------------------------------------
+4 0.0044 jbd.ko jbd start_this_handle
+ 4 100.000 jbd.ko jbd start_this_handle [self]
+-------------------------------------------------------------------------------
+4 0.0044 libc-2.5.so libc-2.5.so bsearch
+ 4 80.0000 libc-2.5.so libc-2.5.so bsearch [self]
+ 1 20.0000 libgtk-x11-2.0.so.0.1000.12 libc-2.5.so (no symbols)
+-------------------------------------------------------------------------------
+4 0.0044 libc-2.5.so libc-2.5.so qsort
+ 292 98.3165 libc-2.5.so libc-2.5.so msort_with_tmp
+ 4 1.3468 libc-2.5.so libc-2.5.so qsort [self]
+ 1 0.3367 libxul.so libc-2.5.so (no symbols)
+-------------------------------------------------------------------------------
+4 0.0044 libc-2.5.so libc-2.5.so strchr
+ 4 100.000 libc-2.5.so libc-2.5.so strchr [self]
+-------------------------------------------------------------------------------
+4 0.0044 libexa.so libexa.so exaDestroyPixmap
+ 19 41.3043 libfb.so libexa.so fbDestroyPixmap
+ 16 34.7826 libexa.so libexa.so exaOffscreenFree
+ 4 8.6957 libfb.so libexa.so __i686.get_pc_thunk.bx
+ 4 8.6957 libexa.so libexa.so exaDestroyPixmap [self]
+ 2 4.3478 libexa.so libexa.so ExaOffscreenMerge
+ 1 2.1739 Xorg libexa.so Xfree
+-------------------------------------------------------------------------------
+ 2 50.0000 libexa.so libexa.so exaTryDriverComposite
+ 2 50.0000 libexa.so libexa.so exaComposite
+4 0.0044 libexa.so libexa.so exaOpReadsDestination
+ 4 100.000 libexa.so libexa.so exaOpReadsDestination [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libfb.so libfb.so fbCreatePixmap
+ 1 50.0000 libfb.so libfb.so fbRasterizeTrapezoid
+4 0.0044 libfb.so libfb.so .plt
+ 4 100.000 libfb.so libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+4 0.0044 libfb.so libfb.so image_from_pict
+ 13 72.2222 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 4 22.2222 libfb.so libfb.so image_from_pict [self]
+ 1 5.5556 libpixman.so.0.0.0 libfb.so pixman_region_init_rect
+-------------------------------------------------------------------------------
+4 0.0044 libm-2.5.so libm-2.5.so floorf
+ 4 100.000 libm-2.5.so libm-2.5.so floorf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+4 0.0044 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+ 4 100.000 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux __block_prepare_write
+ 4 100.000 vmlinux vmlinux __block_prepare_write [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux __getblk
+ 4 100.000 vmlinux vmlinux __getblk [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux __kmalloc
+ 4 100.000 vmlinux vmlinux __kmalloc [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux __wake_up
+ 4 100.000 vmlinux vmlinux __wake_up [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux bit_waitqueue
+ 4 100.000 vmlinux vmlinux bit_waitqueue [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux cond_resched
+ 4 100.000 vmlinux vmlinux cond_resched [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux do_path_lookup
+ 4 100.000 vmlinux vmlinux do_path_lookup [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux do_timer
+ 4 100.000 vmlinux vmlinux do_timer [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux find_next_zero_bit
+ 4 100.000 vmlinux vmlinux find_next_zero_bit [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux internal_add_timer
+ 4 100.000 vmlinux vmlinux internal_add_timer [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux raise_softirq
+ 4 100.000 vmlinux vmlinux raise_softirq [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux restore_nocheck
+ 4 100.000 vmlinux vmlinux restore_nocheck [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux sched_clock
+ 4 100.000 vmlinux vmlinux sched_clock [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux sock_aio_write
+ 4 100.000 vmlinux vmlinux sock_aio_write [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux sock_poll
+ 4 100.000 vmlinux vmlinux sock_poll [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux sys_mkdirat
+ 4 100.000 vmlinux vmlinux sys_mkdirat [self]
+-------------------------------------------------------------------------------
+4 0.0044 vmlinux vmlinux vfs_permission
+ 4 100.000 vmlinux vmlinux vfs_permission [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg damageDestroyPixmap
+3 0.0033 Xorg Xorg DamageDestroy
+ 3 50.0000 Xorg Xorg Xfree
+ 3 50.0000 Xorg Xorg DamageDestroy [self]
+-------------------------------------------------------------------------------
+3 0.0033 Xorg Xorg DamageEmpty
+ 3 100.000 Xorg Xorg DamageEmpty [self]
+-------------------------------------------------------------------------------
+ 1 1.6393 Xorg Xorg damageGlyphs
+ 1 1.6393 Xorg Xorg miCreateAlphaPicture
+ 2 3.2787 Xorg Xorg ProcCopyArea
+ 3 4.9180 Xorg Xorg ProcPolyFillRectangle
+ 3 4.9180 Xorg Xorg miCompositeRects
+ 4 6.5574 Xorg Xorg ProcPolySegment
+ 47 77.0492 Xorg Xorg miColorRects
+3 0.0033 Xorg Xorg ValidateGC
+ 80 94.1176 Xorg Xorg damageValidateGC
+ 3 3.5294 Xorg Xorg ValidateGC [self]
+ 1 1.1765 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.1765 Xorg Xorg miBSCheapValidateGC
+-------------------------------------------------------------------------------
+ 2 5.4054 Xorg Xorg ProcRenderCompositeGlyphs
+ 6 16.2162 Xorg Xorg CompositePicture
+ 14 37.8378 Xorg Xorg CompositeRects
+ 15 40.5405 Xorg Xorg CompositeGlyphs
+3 0.0033 Xorg Xorg ValidatePicture
+ 39 88.6364 Xorg Xorg ValidateOnePicture
+ 3 6.8182 Xorg Xorg ValidatePicture [self]
+ 2 4.5455 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 1.8182 Xorg Xorg miColorRects
+ 2 3.6364 Xorg Xorg damagePolySegment
+ 10 18.1818 Xorg Xorg damageGlyphs
+ 11 20.0000 Xorg Xorg damageComposite
+ 31 56.3636 Xorg Xorg damagePolyFillRect
+3 0.0033 Xorg Xorg damageDamageBox
+ 48 87.2727 Xorg Xorg damageDamageRegion
+ 3 5.4545 Xorg Xorg miUnion
+ 3 5.4545 Xorg Xorg damageDamageBox [self]
+ 1 1.8182 Xorg Xorg miIntersect
+-------------------------------------------------------------------------------
+ 1 5.2632 Xorg Xorg damagePolySegment
+ 3 15.7895 Xorg Xorg damageComposite
+ 4 21.0526 Xorg Xorg damageGlyphs
+ 11 57.8947 Xorg Xorg damagePolyFillRect
+3 0.0033 Xorg Xorg damageReportPostOp
+ 13 68.4211 Xorg Xorg DamageReportDamage
+ 3 15.7895 Xorg Xorg damageReportPostOp [self]
+ 2 10.5263 Xorg Xorg miUnion
+ 1 5.2632 Xorg Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 1 6.6667 Xorg Xorg GetScratchGC
+ 14 93.3333 Xorg Xorg damageChangeClip
+3 0.0033 Xorg Xorg miBSCheapChangeClip
+ 12 80.0000 Xorg Xorg miChangeClip
+ 3 20.0000 Xorg Xorg miBSCheapChangeClip [self]
+-------------------------------------------------------------------------------
+ 24 100.000 Xorg Xorg miTrapezoids
+3 0.0033 Xorg Xorg miTrapezoidBounds
+ 19 79.1667 Xorg Xorg miLineFixedX
+ 3 12.5000 Xorg Xorg miTrapezoidBounds [self]
+ 1 4.1667 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 4.1667 Xorg Xorg __divdi3
+-------------------------------------------------------------------------------
+3 0.0033 bash bash (no symbols)
+ 3 100.000 bash bash (no symbols) [self]
+-------------------------------------------------------------------------------
+3 0.0033 ext3.ko ext3 ext3_get_branch
+ 3 100.000 ext3.ko ext3 ext3_get_branch [self]
+-------------------------------------------------------------------------------
+3 0.0033 ext3.ko ext3 ext3_mkdir
+ 3 100.000 ext3.ko ext3 ext3_mkdir [self]
+-------------------------------------------------------------------------------
+3 0.0033 ext3.ko ext3 ext3_test_allocatable
+ 3 100.000 ext3.ko ext3 ext3_test_allocatable [self]
+-------------------------------------------------------------------------------
+3 0.0033 ext3.ko ext3 ext3_truncate
+ 3 100.000 ext3.ko ext3 ext3_truncate [self]
+-------------------------------------------------------------------------------
+3 0.0033 ext3.ko ext3 ext3_try_to_allocate
+ 3 100.000 ext3.ko ext3 ext3_try_to_allocate [self]
+-------------------------------------------------------------------------------
+3 0.0033 intel_drv.so intel_drv.so i830_done_composite
+ 3 100.000 intel_drv.so intel_drv.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+3 0.0033 jbd.ko jbd journal_clean_one_cp_list
+ 3 100.000 jbd.ko jbd journal_clean_one_cp_list [self]
+-------------------------------------------------------------------------------
+3 0.0033 jbd.ko jbd journal_get_undo_access
+ 3 100.000 jbd.ko jbd journal_get_undo_access [self]
+-------------------------------------------------------------------------------
+3 0.0033 libc-2.5.so libc-2.5.so __read_nocancel
+ 3 100.000 libc-2.5.so libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+3 0.0033 libc-2.5.so libc-2.5.so strcat
+ 3 100.000 libc-2.5.so libc-2.5.so strcat [self]
+-------------------------------------------------------------------------------
+ 2 28.5714 libexa.so libexa.so exaDestroyPixmap
+ 5 71.4286 libexa.so libexa.so exaOffscreenFree
+3 0.0033 libexa.so libexa.so ExaOffscreenMerge
+ 4 57.1429 Xorg libexa.so Xfree
+ 3 42.8571 libexa.so libexa.so ExaOffscreenMerge [self]
+-------------------------------------------------------------------------------
+3 0.0033 libexa.so libexa.so exaPolySegment
+ 31 91.1765 libexa.so libexa.so exaPolyFillRect
+ 3 8.8235 libexa.so libexa.so exaPolySegment [self]
+-------------------------------------------------------------------------------
+3 0.0033 libm-2.5.so libm-2.5.so tan
+ 3 100.000 libm-2.5.so libm-2.5.so tan [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+3 0.0033 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 6 66.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+ 3 33.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+3 0.0033 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect
+ 3 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux __block_write_full_page
+ 3 100.000 vmlinux vmlinux __block_write_full_page [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux __do_softirq
+ 3 100.000 vmlinux vmlinux __do_softirq [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux __make_request
+ 3 100.000 vmlinux vmlinux __make_request [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux __mark_inode_dirty
+ 3 100.000 vmlinux vmlinux __mark_inode_dirty [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux __set_page_dirty_buffers
+ 3 100.000 vmlinux vmlinux __set_page_dirty_buffers [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux __set_page_dirty_nobuffers
+ 3 100.000 vmlinux vmlinux __set_page_dirty_nobuffers [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux __switch_to
+ 3 100.000 vmlinux vmlinux __switch_to [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux arch_get_unmapped_area_topdown
+ 3 100.000 vmlinux vmlinux arch_get_unmapped_area_topdown [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux blk_recount_segments
+ 3 100.000 vmlinux vmlinux blk_recount_segments [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux blk_rq_map_sg
+ 3 100.000 vmlinux vmlinux blk_rq_map_sg [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux block_read_full_page
+ 3 100.000 vmlinux vmlinux block_read_full_page [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux block_write_full_page
+ 3 100.000 vmlinux vmlinux block_write_full_page [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux cache_reap
+ 3 100.000 vmlinux vmlinux cache_reap [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux d_instantiate
+ 3 100.000 vmlinux vmlinux d_instantiate [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux device_not_available
+ 3 100.000 vmlinux vmlinux device_not_available [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux do_gettimeofday
+ 3 100.000 vmlinux vmlinux do_gettimeofday [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux do_mpage_readpage
+ 3 100.000 vmlinux vmlinux do_mpage_readpage [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux do_page_fault
+ 3 100.000 vmlinux vmlinux do_page_fault [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux do_readv_writev
+ 3 100.000 vmlinux vmlinux do_readv_writev [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux find_vma_prev
+ 3 100.000 vmlinux vmlinux find_vma_prev [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux free_pages_and_swap_cache
+ 3 100.000 vmlinux vmlinux free_pages_and_swap_cache [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux get_task_mm
+ 3 100.000 vmlinux vmlinux get_task_mm [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux getname
+ 3 100.000 vmlinux vmlinux getname [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux handle_edge_irq
+ 3 100.000 vmlinux vmlinux handle_edge_irq [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux link_path_walk
+ 3 100.000 vmlinux vmlinux link_path_walk [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux mutex_lock
+ 3 100.000 vmlinux vmlinux mutex_lock [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux number
+ 3 100.000 vmlinux vmlinux number [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux open_namei
+ 3 100.000 vmlinux vmlinux open_namei [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux rcu_pending
+ 3 100.000 vmlinux vmlinux rcu_pending [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux read_tsc
+ 3 100.000 vmlinux vmlinux read_tsc [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux run_posix_cpu_timers
+ 3 100.000 vmlinux vmlinux run_posix_cpu_timers [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux rw_verify_area
+ 3 100.000 vmlinux vmlinux rw_verify_area [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux sys_read
+ 3 100.000 vmlinux vmlinux sys_read [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux syscall_exit
+ 3 100.000 vmlinux vmlinux syscall_exit [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux test_set_page_writeback
+ 3 100.000 vmlinux vmlinux test_set_page_writeback [self]
+-------------------------------------------------------------------------------
+3 0.0033 vmlinux vmlinux unix_stream_recvmsg
+ 3 100.000 vmlinux vmlinux unix_stream_recvmsg [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg CreateGC
+2 0.0022 Xorg Xorg AllocateGC
+ 2 66.6667 Xorg Xorg AllocateGC [self]
+ 1 33.3333 Xorg Xorg Xalloc
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damageGlyphs
+2 0.0022 Xorg Xorg FreeScratchPixmapHeader
+ 2 100.000 Xorg Xorg FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 2 2.2472 Xorg Xorg XaceCatchExtProc
+ 87 97.7528 Xorg Xorg ProcRenderDispatch
+2 0.0022 Xorg Xorg ProcRenderFreePicture
+ 62 69.6629 Xorg Xorg FreeResource
+ 22 24.7191 Xorg Xorg SecurityLookupIDByType
+ 3 3.3708 Xorg Xorg Hash
+ 2 2.2472 Xorg Xorg ProcRenderFreePicture [self]
+-------------------------------------------------------------------------------
+ 1 4.5455 Xorg Xorg XaceCatchExtProc
+ 21 95.4545 Xorg Xorg ProcRenderDispatch
+2 0.0022 Xorg Xorg ProcRenderSetPictureTransform
+ 10 45.4545 Xorg Xorg SecurityLookupIDByType
+ 8 36.3636 Xorg Xorg SetPictureTransform
+ 2 9.0909 Xorg Xorg ProcRenderSetPictureTransform [self]
+ 1 4.5455 Xorg Xorg Hash
+ 1 4.5455 Xorg Xorg miChangePictureTransform
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg Xorg ProcSetClipRectangles
+2 0.0022 Xorg Xorg SetClipRects
+ 3 30.0000 Xorg Xorg damageChangeClip
+ 2 20.0000 Xorg Xorg Xalloc
+ 2 20.0000 Xorg Xorg SetClipRects [self]
+ 1 10.0000 Xorg Xorg .plt
+ 1 10.0000 Xorg Xorg VerifyRectOrder
+ 1 10.0000 Xorg Xorg damageChangeGC
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg Dispatch
+2 0.0022 Xorg Xorg WaitForSomething
+ 2 66.6667 Xorg Xorg WaitForSomething [self]
+ 1 33.3333 libc-2.5.so Xorg gettimeofday
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg Xorg ReadRequestFromClient
+ 1 50.0000 Xorg Xorg _XSERVTransRead
+2 0.0022 Xorg Xorg _XSERVTransSocketRead
+ 2 100.000 Xorg Xorg _XSERVTransSocketRead [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg XaceCatchExtProc
+2 0.0022 Xorg Xorg __i686.get_pc_thunk.cx
+ 2 100.000 Xorg Xorg __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+2 0.0022 Xorg Xorg damageRemoveDamage
+ 2 100.000 Xorg Xorg damageRemoveDamage [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg Xorg ProcCopyArea
+ 1 7.6923 Xorg Xorg XaceCatchDispatchProc
+ 1 7.6923 Xorg Xorg ProcFreeGC
+ 1 7.6923 Xorg Xorg ProcPolySegment
+ 4 30.7692 Xorg Xorg ProcSetClipRectangles
+ 5 38.4615 Xorg Xorg ProcChangeGC
+2 0.0022 Xorg Xorg dixLookupGC
+ 11 84.6154 Xorg Xorg SecurityLookupIDByType
+ 2 15.3846 Xorg Xorg dixLookupGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcRenderCreatePicture
+2 0.0022 Xorg Xorg miCreatePicture
+ 2 100.000 Xorg Xorg miCreatePicture [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg Xorg miValidatePicture
+ 1 20.0000 Xorg Xorg damagePolyFillRect
+ 3 60.0000 Xorg Xorg miComputeCompositeClip
+2 0.0022 Xorg Xorg miTranslateRegion
+ 7 77.7778 libpixman.so.0.0.0 Xorg pixman_region_translate
+ 2 22.2222 Xorg Xorg miTranslateRegion [self]
+-------------------------------------------------------------------------------
+2 0.0022 ext3.ko ext3 ext3_check_dir_entry
+ 2 100.000 ext3.ko ext3 ext3_check_dir_entry [self]
+-------------------------------------------------------------------------------
+2 0.0022 ext3.ko ext3 ext3_get_group_desc
+ 2 100.000 ext3.ko ext3 ext3_get_group_desc [self]
+-------------------------------------------------------------------------------
+2 0.0022 ext3.ko ext3 ext3_lookup
+ 2 100.000 ext3.ko ext3 ext3_lookup [self]
+-------------------------------------------------------------------------------
+2 0.0022 ext3.ko ext3 ext3_new_blocks
+ 2 100.000 ext3.ko ext3 ext3_new_blocks [self]
+-------------------------------------------------------------------------------
+2 0.0022 ext3.ko ext3 ext3_orphan_del
+ 2 100.000 ext3.ko ext3 ext3_orphan_del [self]
+-------------------------------------------------------------------------------
+2 0.0022 jbd.ko jbd journal_get_create_access
+ 2 100.000 jbd.ko jbd journal_get_create_access [self]
+-------------------------------------------------------------------------------
+2 0.0022 jbd.ko jbd journal_stop
+ 2 100.000 jbd.ko jbd journal_stop [self]
+-------------------------------------------------------------------------------
+2 0.0022 jbd.ko jbd journal_unfile_buffer
+ 2 100.000 jbd.ko jbd journal_unfile_buffer [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so check_match.7793
+2 0.0022 ld-2.5.so ld-2.5.so strcmp
+ 2 100.000 ld-2.5.so ld-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so vfprintf
+ 1 50.0000 libc-2.5.so libc-2.5.so vsprintf
+2 0.0022 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_default_xsputn [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so fwrite
+2 0.0022 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 2 50.0000 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 2 50.0000 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so vsscanf
+2 0.0022 libc-2.5.so libc-2.5.so _IO_vfscanf
+ 2 66.6667 libc-2.5.so libc-2.5.so _IO_vfscanf [self]
+ 1 33.3333 libc-2.5.so libc-2.5.so __strtoul_internal
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so vfprintf
+2 0.0022 libc-2.5.so libc-2.5.so __find_specmb
+ 2 100.000 libc-2.5.so libc-2.5.so __find_specmb [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so ptmalloc_init
+2 0.0022 libc-2.5.so libc-2.5.so _dl_addr
+ 2 100.000 libc-2.5.so libc-2.5.so _dl_addr [self]
+-------------------------------------------------------------------------------
+2 0.0022 libc-2.5.so libc-2.5.so ftruncate
+ 2 100.000 libc-2.5.so libc-2.5.so ftruncate [self]
+-------------------------------------------------------------------------------
+2 0.0022 libc-2.5.so libc-2.5.so fwrite
+ 3 60.0000 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 2 40.0000 libc-2.5.so libc-2.5.so fwrite [self]
+-------------------------------------------------------------------------------
+2 0.0022 libc-2.5.so libc-2.5.so poll
+ 2 100.000 libc-2.5.so libc-2.5.so poll [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libc-2.5.so libc-2.5.so vsprintf
+2 0.0022 libc-2.5.so libc-2.5.so vfprintf
+ 2 33.3333 libc-2.5.so libc-2.5.so __find_specmb
+ 2 33.3333 libc-2.5.so libc-2.5.so vfprintf [self]
+ 1 16.6667 libc-2.5.so libc-2.5.so _itoa_word
+ 1 16.6667 libc-2.5.so libc-2.5.so _IO_default_xsputn
+-------------------------------------------------------------------------------
+2 0.0022 libexa.so libexa.so exaRasterizeTrapezoid
+ 5589 68.0507 libfb.so libexa.so fbRasterizeTrapezoid
+ 2617 31.8641 libexa.so libexa.so exaPrepareAccess
+ 2 0.0244 libfb.so libexa.so image_from_pict
+ 2 0.0244 libexa.so libexa.so exaRasterizeTrapezoid [self]
+ 1 0.0122 libexa.so libexa.so .plt
+ 1 0.0122 libexa.so libexa.so exaFinishAccess
+ 1 0.0122 libexa.so libexa.so exaPixmapDirty
+-------------------------------------------------------------------------------
+2 0.0022 libfb.so libfb.so __i686.get_pc_thunk.cx
+ 2 100.000 libfb.so libfb.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+2 0.0022 libfb.so libfb.so fbGetGCPrivateIndex
+ 2 100.000 libfb.so libfb.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+2 0.0022 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+ 2 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref [self]
+-------------------------------------------------------------------------------
+2 0.0022 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 2 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+2 0.0022 libpthread-2.5.so libpthread-2.5.so __write_nocancel
+ 2 100.000 libpthread-2.5.so libpthread-2.5.so __write_nocancel [self]
+-------------------------------------------------------------------------------
+2 0.0022 libpthread-2.5.so libpthread-2.5.so write
+ 2 100.000 libpthread-2.5.so libpthread-2.5.so write [self]
+-------------------------------------------------------------------------------
+2 0.0022 uhci-hcd.ko uhci_hcd uhci_scan_schedule
+ 2 100.000 uhci-hcd.ko uhci_hcd uhci_scan_schedule [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux __bread
+ 2 100.000 vmlinux vmlinux __bread [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux __dec_zone_page_state
+ 2 100.000 vmlinux vmlinux __dec_zone_page_state [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux __generic_file_aio_write_nolock
+ 2 100.000 vmlinux vmlinux __generic_file_aio_write_nolock [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux __inc_zone_page_state
+ 2 100.000 vmlinux vmlinux __inc_zone_page_state [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux __mod_timer
+ 2 100.000 vmlinux vmlinux __mod_timer [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux __rcu_pending
+ 2 100.000 vmlinux vmlinux __rcu_pending [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux __scsi_done
+ 2 100.000 vmlinux vmlinux __scsi_done [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux ahci_scr_read
+ 2 100.000 vmlinux vmlinux ahci_scr_read [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux alloc_inode
+ 2 100.000 vmlinux vmlinux alloc_inode [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux copy_from_user
+ 2 100.000 vmlinux vmlinux copy_from_user [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux cpu_idle
+ 2 100.000 vmlinux vmlinux cpu_idle [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux do_mmap_pgoff
+ 2 100.000 vmlinux vmlinux do_mmap_pgoff [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux do_munmap
+ 2 100.000 vmlinux vmlinux do_munmap [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux do_notify_resume
+ 2 100.000 vmlinux vmlinux do_notify_resume [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux do_sys_ftruncate
+ 2 100.000 vmlinux vmlinux do_sys_ftruncate [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux end_bio_bh_io_sync
+ 2 100.000 vmlinux vmlinux end_bio_bh_io_sync [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux end_page_writeback
+ 2 100.000 vmlinux vmlinux end_page_writeback [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux fget
+ 2 100.000 vmlinux vmlinux fget [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux filemap_nopage
+ 2 100.000 vmlinux vmlinux filemap_nopage [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux generic_writepages
+ 2 100.000 vmlinux vmlinux generic_writepages [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux get_unused_fd
+ 2 100.000 vmlinux vmlinux get_unused_fd [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux get_write_access
+ 2 100.000 vmlinux vmlinux get_write_access [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux iret_exc
+ 2 100.000 vmlinux vmlinux iret_exc [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux irq_exit
+ 2 100.000 vmlinux vmlinux irq_exit [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux ll_back_merge_fn
+ 2 100.000 vmlinux vmlinux ll_back_merge_fn [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux mark_page_accessed
+ 2 100.000 vmlinux vmlinux mark_page_accessed [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux memcpy_fromiovec
+ 2 100.000 vmlinux vmlinux memcpy_fromiovec [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux move_page_tables
+ 2 100.000 vmlinux vmlinux move_page_tables [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux note_interrupt
+ 2 100.000 vmlinux vmlinux note_interrupt [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux page_waitqueue
+ 2 100.000 vmlinux vmlinux page_waitqueue [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux percpu_counter_mod
+ 2 100.000 vmlinux vmlinux percpu_counter_mod [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux put_page
+ 2 100.000 vmlinux vmlinux put_page [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux ret_from_exception
+ 2 100.000 vmlinux vmlinux ret_from_exception [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux scheduler_tick
+ 2 100.000 vmlinux vmlinux scheduler_tick [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux scsi_run_queue
+ 2 100.000 vmlinux vmlinux scsi_run_queue [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux search_extable
+ 2 100.000 vmlinux vmlinux search_extable [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux skb_dequeue
+ 2 100.000 vmlinux vmlinux skb_dequeue [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux sync_sb_inodes
+ 2 100.000 vmlinux vmlinux sync_sb_inodes [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux sys_munmap
+ 2 100.000 vmlinux vmlinux sys_munmap [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux vfs_mkdir
+ 2 100.000 vmlinux vmlinux vfs_mkdir [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux vfs_write
+ 2 100.000 vmlinux vmlinux vfs_write [self]
+-------------------------------------------------------------------------------
+2 0.0022 vmlinux vmlinux wake_up_bit
+ 2 100.000 vmlinux vmlinux wake_up_bit [self]
+-------------------------------------------------------------------------------
+ 1 0.0020 Xorg Xorg ProcRenderDispatch
+ 50816 99.9980 Xorg Xorg ProcRenderCompositeGlyphs
+1 0.0011 Xorg Xorg CompositeGlyphs
+ 50802 99.9646 Xorg Xorg damageGlyphs
+ 15 0.0295 Xorg Xorg ValidatePicture
+ 2 0.0039 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.0020 Xorg Xorg CompositeGlyphs [self]
+-------------------------------------------------------------------------------
+ 545 100.000 Xorg Xorg ProcRenderFillRectangles
+1 0.0011 Xorg Xorg CompositeRects
+ 523 95.9633 Xorg Xorg miCompositeRects
+ 14 2.5688 Xorg Xorg ValidatePicture
+ 3 0.5505 Xorg Xorg ValidateOnePicture
+ 2 0.3670 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.1835 Xorg Xorg FreeScratchGC
+ 1 0.1835 Xorg Xorg miColorRects
+ 1 0.1835 Xorg Xorg CompositeRects [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg ProcCreateGC
+1 0.0011 Xorg Xorg CreateGC
+ 3 75.0000 Xorg Xorg AllocateGC
+ 1 25.0000 Xorg Xorg CreateGC [self]
+-------------------------------------------------------------------------------
+1 0.0011 Xorg Xorg DamageRegister
+ 3 75.0000 Xorg Xorg getDrawableDamageRef
+ 1 25.0000 Xorg Xorg DamageRegister [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg FreeResource
+1 0.0011 Xorg Xorg FreeGC
+ 1 100.000 Xorg Xorg FreeGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageGlyphs
+1 0.0011 Xorg Xorg GetScratchPixmapHeader
+ 4 80.0000 Xorg Xorg miModifyPixmapHeader
+ 1 20.0000 Xorg Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+1 0.0011 Xorg Xorg GetTimeInMillis
+ 1 100.000 Xorg Xorg GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+ 1 8.3333 Xorg Xorg Dispatch
+ 11 91.6667 Xorg Xorg XaceCatchDispatchProc
+1 0.0011 Xorg Xorg ProcChangeGC
+ 6 50.0000 Xorg Xorg dixChangeGC
+ 5 41.6667 Xorg Xorg dixLookupGC
+ 1 8.3333 Xorg Xorg ProcChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg Xorg Dispatch
+ 8 88.8889 Xorg Xorg XaceCatchDispatchProc
+1 0.0011 Xorg Xorg ProcCopyArea
+ 4 44.4444 Xorg Xorg damageCopyArea
+ 2 22.2222 Xorg Xorg ValidateGC
+ 1 11.1111 Xorg Xorg dixLookupGC
+ 1 11.1111 Xorg Xorg dixLookupDrawable
+ 1 11.1111 Xorg Xorg ProcCopyArea [self]
+-------------------------------------------------------------------------------
+ 11 100.000 Xorg Xorg XaceCatchDispatchProc
+1 0.0011 Xorg Xorg ProcPolyFillRectangle
+ 6 54.5455 Xorg Xorg damagePolyFillRect
+ 3 27.2727 Xorg Xorg ValidateGC
+ 1 9.0909 Xorg Xorg dixLookupDrawable
+ 1 9.0909 Xorg Xorg ProcPolyFillRectangle [self]
+-------------------------------------------------------------------------------
+ 2022 100.000 Xorg Xorg ProcRenderDispatch
+1 0.0011 Xorg Xorg ProcRenderComposite
+ 2014 99.6044 Xorg Xorg CompositePicture
+ 5 0.2473 Xorg Xorg SecurityLookupIDByType
+ 1 0.0495 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.0495 Xorg Xorg damageComposite
+ 1 0.0495 Xorg Xorg ProcRenderComposite [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg Xorg XaceCatchExtProc
+ 8 88.8889 Xorg Xorg ProcRenderDispatch
+1 0.0011 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 7 77.7778 Xorg Xorg SetPictureClipRects
+ 1 11.1111 Xorg Xorg SecurityLookupIDByType
+ 1 11.1111 Xorg Xorg ProcRenderSetPictureClipRectangles [self]
+-------------------------------------------------------------------------------
+ 15 100.000 Xorg Xorg XaceCatchDispatchProc
+1 0.0011 Xorg Xorg ProcSetClipRectangles
+ 10 66.6667 Xorg Xorg SetClipRects
+ 4 26.6667 Xorg Xorg dixLookupGC
+ 1 6.6667 Xorg Xorg ProcSetClipRectangles [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg miRegionValidate
+1 0.0011 Xorg Xorg QuickSortRects
+ 1 100.000 Xorg Xorg QuickSortRects [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg SetClipRects
+1 0.0011 Xorg Xorg VerifyRectOrder
+ 1 100.000 Xorg Xorg VerifyRectOrder [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg ReadRequestFromClient
+1 0.0011 Xorg Xorg _XSERVTransRead
+ 3 60.0000 libc-2.5.so Xorg __read_nocancel
+ 1 20.0000 Xorg Xorg _XSERVTransSocketRead
+ 1 20.0000 Xorg Xorg _XSERVTransRead [self]
+-------------------------------------------------------------------------------
+ 1 5.5556 Xorg Xorg miCompositeRects
+ 2 11.1111 Xorg Xorg dixChangeGC
+ 3 16.6667 Xorg Xorg SetClipRects
+ 12 66.6667 Xorg Xorg GetScratchGC
+1 0.0011 Xorg Xorg damageChangeClip
+ 14 77.7778 Xorg Xorg miBSCheapChangeClip
+ 3 16.6667 Xorg Xorg miChangeClip
+ 1 5.5556 Xorg Xorg damageChangeClip [self]
+-------------------------------------------------------------------------------
+1 0.0011 Xorg Xorg damageInsertDamage
+ 1 100.000 Xorg Xorg damageInsertDamage [self]
+-------------------------------------------------------------------------------
+ 38 100.000 Xorg Xorg ProcPolySegment
+1 0.0011 Xorg Xorg damagePolySegment
+ 34 89.4737 libexa.so Xorg exaPolySegment
+ 2 5.2632 Xorg Xorg damageDamageBox
+ 1 2.6316 Xorg Xorg damageReportPostOp
+ 1 2.6316 Xorg Xorg damagePolySegment [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg dixChangeGC
+1 0.0011 Xorg Xorg miBSCheapChangeGC
+ 1 100.000 Xorg Xorg miBSCheapChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcRenderChangePicture
+1 0.0011 Xorg Xorg miChangePicture
+ 1 100.000 Xorg Xorg miChangePicture [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg SetPictureClipRects
+1 0.0011 Xorg Xorg miChangePictureClip
+ 1 50.0000 Xorg Xorg miDestroyPictureClip
+ 1 50.0000 Xorg Xorg miChangePictureClip [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcRenderSetPictureFilter
+1 0.0011 Xorg Xorg miChangePictureFilter
+ 1 100.000 Xorg Xorg miChangePictureFilter [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcRenderSetPictureTransform
+1 0.0011 Xorg Xorg miChangePictureTransform
+ 1 100.000 Xorg Xorg miChangePictureTransform [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg Xorg miChangeClip
+1 0.0011 Xorg Xorg miDestroyClip
+ 7 87.5000 Xorg Xorg miRegionDestroy
+ 1 12.5000 Xorg Xorg miDestroyClip [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg Xorg miCompositeRects
+ 4 80.0000 Xorg Xorg miColorRects
+1 0.0011 Xorg Xorg miRegionCopy
+ 4 80.0000 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 1 20.0000 Xorg Xorg miRegionCopy [self]
+-------------------------------------------------------------------------------
+ 8299 100.000 Xorg Xorg CompositeTrapezoids
+1 0.0011 Xorg Xorg miTrapezoids
+ 8213 98.9637 libexa.so Xorg exaRasterizeTrapezoid
+ 31 0.3735 Xorg Xorg CompositePicture
+ 24 0.2892 Xorg Xorg miTrapezoidBounds
+ 20 0.2410 Xorg Xorg miCreateAlphaPicture
+ 7 0.0843 Xorg Xorg FreePicture
+ 2 0.0241 libexa.so Xorg exaPixmapDirty
+ 1 0.0120 libexa.so Xorg .plt
+ 1 0.0120 Xorg Xorg miTrapezoids [self]
+-------------------------------------------------------------------------------
+1 0.0011 anon (tgid:28734 range:0xb7f37000-0xb7f38000) Xorg (no symbols)
+ 1 100.000 anon (tgid:28734 range:0xb7f37000-0xb7f38000) Xorg (no symbols) [self]
+-------------------------------------------------------------------------------
+1 0.0011 ehci-hcd.ko ehci_hcd ehci_hub_status_data
+ 1 100.000 ehci-hcd.ko ehci_hcd ehci_hub_status_data [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 ext3_block_to_path
+ 1 100.000 ext3.ko ext3 ext3_block_to_path [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 ext3_bread
+ 1 100.000 ext3.ko ext3 ext3_bread [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 ext3_discard_reservation
+ 1 100.000 ext3.ko ext3 ext3_discard_reservation [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 ext3_free_data
+ 1 100.000 ext3.ko ext3 ext3_free_data [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 ext3_get_inode_loc
+ 1 100.000 ext3.ko ext3 ext3_get_inode_loc [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 ext3_getblk
+ 1 100.000 ext3.ko ext3 ext3_getblk [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 ext3_mark_inode_dirty
+ 1 100.000 ext3.ko ext3 ext3_mark_inode_dirty [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 ext3_reserve_inode_write
+ 1 100.000 ext3.ko ext3 ext3_reserve_inode_write [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 ext3_set_inode_flags
+ 1 100.000 ext3.ko ext3 ext3_set_inode_flags [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 ext3_try_to_allocate_with_rsv
+ 1 100.000 ext3.ko ext3 ext3_try_to_allocate_with_rsv [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 read_block_bitmap
+ 1 100.000 ext3.ko ext3 read_block_bitmap [self]
+-------------------------------------------------------------------------------
+1 0.0011 ext3.ko ext3 walk_page_buffers
+ 1 100.000 ext3.ko ext3 walk_page_buffers [self]
+-------------------------------------------------------------------------------
+1 0.0011 gconfd-2 gconfd-2 (no symbols)
+ 1 100.000 gconfd-2 gconfd-2 (no symbols) [self]
+-------------------------------------------------------------------------------
+1 0.0011 jbd.ko jbd __journal_refile_buffer
+ 1 100.000 jbd.ko jbd __journal_refile_buffer [self]
+-------------------------------------------------------------------------------
+1 0.0011 jbd.ko jbd __journal_remove_checkpoint
+ 1 100.000 jbd.ko jbd __journal_remove_checkpoint [self]
+-------------------------------------------------------------------------------
+1 0.0011 jbd.ko jbd find_revoke_record
+ 1 100.000 jbd.ko jbd find_revoke_record [self]
+-------------------------------------------------------------------------------
+1 0.0011 jbd.ko jbd journal_dirty_data
+ 1 100.000 jbd.ko jbd journal_dirty_data [self]
+-------------------------------------------------------------------------------
+1 0.0011 jbd.ko jbd journal_get_write_access
+ 1 100.000 jbd.ko jbd journal_get_write_access [self]
+-------------------------------------------------------------------------------
+1 0.0011 jbd.ko jbd journal_invalidatepage
+ 1 100.000 jbd.ko jbd journal_invalidatepage [self]
+-------------------------------------------------------------------------------
+1 0.0011 jbd.ko jbd journal_remove_journal_head
+ 1 100.000 jbd.ko jbd journal_remove_journal_head [self]
+-------------------------------------------------------------------------------
+1 0.0011 jbd.ko jbd journal_start
+ 1 100.000 jbd.ko jbd journal_start [self]
+-------------------------------------------------------------------------------
+1 0.0011 jbd.ko jbd journal_switch_revoke_table
+ 1 100.000 jbd.ko jbd journal_switch_revoke_table [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+1 0.0011 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_load_cache_lookup [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 ld-2.5.so ld-2.5.so _dl_fixup
+ 2 66.6667 ld-2.5.so ld-2.5.so _dl_relocate_object
+1 0.0011 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 2 66.6667 ld-2.5.so ld-2.5.so do_lookup_x
+ 1 33.3333 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x [self]
+-------------------------------------------------------------------------------
+ 3 100.000 ld-2.5.so ld-2.5.so dl_main
+1 0.0011 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 2 66.6667 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 1 33.3333 ld-2.5.so ld-2.5.so _dl_relocate_object [self]
+-------------------------------------------------------------------------------
+1 0.0011 libORBit-2.so.0.1.0 libORBit-2.so.0.1.0 (no symbols)
+ 1 100.000 libORBit-2.so.0.1.0 libORBit-2.so.0.1.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 0.0011 libc-2.5.so libc-2.5.so _IO_do_write@@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_do_write@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+1 0.0011 libc-2.5.so libc-2.5.so _IO_doallocbuf
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_file_doallocate
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_doallocbuf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __fopen_internal
+1 0.0011 libc-2.5.so libc-2.5.so _IO_file_open
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_open [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_no_init
+1 0.0011 libc-2.5.so libc-2.5.so _IO_old_init
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_old_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so sscanf
+1 0.0011 libc-2.5.so libc-2.5.so _IO_str_init_static_internal
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_str_init_static_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 0.0011 libc-2.5.so libc-2.5.so _IO_unsave_markers
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_unsave_markers [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __strtoul_internal
+1 0.0011 libc-2.5.so libc-2.5.so ____strtoul_l_internal
+ 1 100.000 libc-2.5.so libc-2.5.so ____strtoul_l_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 0.0011 libc-2.5.so libc-2.5.so __close_nocancel
+ 1 100.000 libc-2.5.so libc-2.5.so __close_nocancel [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_stat
+1 0.0011 libc-2.5.so libc-2.5.so __fxstat64@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so __fxstat64@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+1 0.0011 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx
+ 1 100.000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+1 0.0011 libc-2.5.so libc-2.5.so __xstat
+ 1 50.0000 libc-2.5.so libc-2.5.so __xstat32_conv
+ 1 50.0000 libc-2.5.so libc-2.5.so __xstat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __xstat
+1 0.0011 libc-2.5.so libc-2.5.so __xstat32_conv
+ 1 100.000 libc-2.5.so libc-2.5.so __xstat32_conv [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so vfprintf
+1 0.0011 libc-2.5.so libc-2.5.so _itoa_word
+ 1 100.000 libc-2.5.so libc-2.5.so _itoa_word [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so _nl_find_locale
+1 0.0011 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+ 2 66.6667 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 1 33.3333 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive [self]
+-------------------------------------------------------------------------------
+1 0.0011 libc-2.5.so libc-2.5.so fgets
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_getline
+ 1 50.0000 libc-2.5.so libc-2.5.so fgets [self]
+-------------------------------------------------------------------------------
+1 0.0011 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 5 83.3333 libc-2.5.so libc-2.5.so __fopen_internal
+ 1 16.6667 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+1 0.0011 libc-2.5.so libc-2.5.so mbrtowc
+ 1 100.000 libc-2.5.so libc-2.5.so mbrtowc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_getline
+1 0.0011 libc-2.5.so libc-2.5.so memchr
+ 1 100.000 libc-2.5.so libc-2.5.so memchr [self]
+-------------------------------------------------------------------------------
+1 0.0011 libc-2.5.so libc-2.5.so mremap
+ 1 100.000 libc-2.5.so libc-2.5.so mremap [self]
+-------------------------------------------------------------------------------
+1 0.0011 libc-2.5.so libc-2.5.so strcpy
+ 1 100.000 libc-2.5.so libc-2.5.so strcpy [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so sscanf
+1 0.0011 libc-2.5.so libc-2.5.so vsscanf
+ 3 75.0000 libc-2.5.so libc-2.5.so _IO_vfscanf
+ 1 25.0000 libc-2.5.so libc-2.5.so vsscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaRasterizeTrapezoid
+1 0.0011 libexa.so libexa.so exaFinishAccess
+ 1 100.000 libexa.so libexa.so exaFinishAccess [self]
+-------------------------------------------------------------------------------
+ 2617 100.000 libexa.so libexa.so exaRasterizeTrapezoid
+1 0.0011 libexa.so libexa.so exaPrepareAccess
+ 2616 99.9618 libexa.so libexa.so exaWaitSync
+ 1 0.0382 libexa.so libexa.so exaPrepareAccess [self]
+-------------------------------------------------------------------------------
+1 0.0011 libfb.so libfb.so fbDestroyPixmap
+ 19 95.0000 Xorg libfb.so Xfree
+ 1 5.0000 libfb.so libfb.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+1 0.0011 libfb.so libfb.so fbRasterizeTrapezoid
+ 5563 99.5170 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid
+ 16 0.2862 libfb.so libfb.so image_from_pict
+ 2 0.0358 libpixman.so.0.0.0 libfb.so .plt
+ 2 0.0358 libpixman.so.0.0.0 libfb.so pixman_image_unref
+ 1 0.0179 libpixman.so.0.0.0 libfb.so pixman_image_set_repeat
+ 1 0.0179 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 1 0.0179 libpixman.so.0.0.0 libfb.so pixman_line_fixed_edge_init
+ 1 0.0179 libpixman.so.0.0.0 libfb.so pixman_rasterize_edges
+ 1 0.0179 libfb.so libfb.so .plt
+ 1 0.0179 libfb.so libfb.so __i686.get_pc_thunk.bx
+ 1 0.0179 libfb.so libfb.so fbRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+1 0.0011 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+ 8 57.1429 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 2 14.2857 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect
+ 1 7.1429 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 7.1429 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+ 1 7.1429 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 1 7.1429 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits [self]
+-------------------------------------------------------------------------------
+1 0.0011 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_repeat
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_repeat [self]
+-------------------------------------------------------------------------------
+ 36 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+1 0.0011 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 36 97.2973 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 1 2.7027 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+1 0.0011 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y [self]
+-------------------------------------------------------------------------------
+1 0.0011 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.cx
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+1 0.0011 libpthread-2.5.so libpthread-2.5.so __read_nocancel
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+1 0.0011 libpthread-2.5.so libpthread-2.5.so pthread_cond_signal@@GLIBC_2.3.2
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so pthread_cond_signal@@GLIBC_2.3.2 [self]
+-------------------------------------------------------------------------------
+1 0.0011 libpthread-2.5.so libpthread-2.5.so pthread_equal
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so pthread_equal [self]
+-------------------------------------------------------------------------------
+1 0.0011 libpthread-2.5.so libpthread-2.5.so pthread_self
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so pthread_self [self]
+-------------------------------------------------------------------------------
+1 0.0011 libpthread-2.5.so libpthread-2.5.so read
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so read [self]
+-------------------------------------------------------------------------------
+1 0.0011 uhci-hcd.ko uhci_hcd any_ports_active
+ 1 100.000 uhci-hcd.ko uhci_hcd any_ports_active [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __add_entropy_words
+ 1 100.000 vmlinux vmlinux __add_entropy_words [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __alloc_pages
+ 1 100.000 vmlinux vmlinux __alloc_pages [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __ata_qc_complete
+ 1 100.000 vmlinux vmlinux __ata_qc_complete [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __d_path
+ 1 100.000 vmlinux vmlinux __d_path [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __end_that_request_first
+ 1 100.000 vmlinux vmlinux __end_that_request_first [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __fput
+ 1 100.000 vmlinux vmlinux __fput [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __inc_zone_state
+ 1 100.000 vmlinux vmlinux __inc_zone_state [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __pagevec_lru_add
+ 1 100.000 vmlinux vmlinux __pagevec_lru_add [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __queue_work
+ 1 100.000 vmlinux vmlinux __queue_work [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __remove_from_page_cache
+ 1 100.000 vmlinux vmlinux __remove_from_page_cache [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __wake_up_common
+ 1 100.000 vmlinux vmlinux __wake_up_common [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux __writeback_single_inode
+ 1 100.000 vmlinux vmlinux __writeback_single_inode [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux account_system_time
+ 1 100.000 vmlinux vmlinux account_system_time [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux ahci_fill_cmd_slot
+ 1 100.000 vmlinux vmlinux ahci_fill_cmd_slot [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux ahci_qc_prep
+ 1 100.000 vmlinux vmlinux ahci_qc_prep [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux alloc_page_buffers
+ 1 100.000 vmlinux vmlinux alloc_page_buffers [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux arch_unmap_area_topdown
+ 1 100.000 vmlinux vmlinux arch_unmap_area_topdown [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux as_add_rq_rb
+ 1 100.000 vmlinux vmlinux as_add_rq_rb [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux as_merge
+ 1 100.000 vmlinux vmlinux as_merge [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux as_put_io_context
+ 1 100.000 vmlinux vmlinux as_put_io_context [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux ata_qc_new_init
+ 1 100.000 vmlinux vmlinux ata_qc_new_init [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux ata_scsi_qc_complete
+ 1 100.000 vmlinux vmlinux ata_scsi_qc_complete [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux ata_scsi_qc_new
+ 1 100.000 vmlinux vmlinux ata_scsi_qc_new [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux ata_scsi_rw_xlat
+ 1 100.000 vmlinux vmlinux ata_scsi_rw_xlat [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux atomic_notifier_call_chain
+ 1 100.000 vmlinux vmlinux atomic_notifier_call_chain [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux bd_set_size
+ 1 100.000 vmlinux vmlinux bd_set_size [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux bio_alloc
+ 1 100.000 vmlinux vmlinux bio_alloc [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux bio_alloc_bioset
+ 1 100.000 vmlinux vmlinux bio_alloc_bioset [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux bio_endio
+ 1 100.000 vmlinux vmlinux bio_endio [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux bio_free
+ 1 100.000 vmlinux vmlinux bio_free [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux bio_phys_segments
+ 1 100.000 vmlinux vmlinux bio_phys_segments [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux blk_done_softirq
+ 1 100.000 vmlinux vmlinux blk_done_softirq [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux block_prepare_write
+ 1 100.000 vmlinux vmlinux block_prepare_write [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux bmap
+ 1 100.000 vmlinux vmlinux bmap [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux cache_flusharray
+ 1 100.000 vmlinux vmlinux cache_flusharray [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux can_vma_merge_before
+ 1 100.000 vmlinux vmlinux can_vma_merge_before [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux cdrom_ioctl
+ 1 100.000 vmlinux vmlinux cdrom_ioctl [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux clear_bdi_congested
+ 1 100.000 vmlinux vmlinux clear_bdi_congested [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux clocksource_get_next
+ 1 100.000 vmlinux vmlinux clocksource_get_next [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux convert_fxsr_from_user
+ 1 100.000 vmlinux vmlinux convert_fxsr_from_user [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux copy_process
+ 1 100.000 vmlinux vmlinux copy_process [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux cp_new_stat64
+ 1 100.000 vmlinux vmlinux cp_new_stat64 [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux create_empty_buffers
+ 1 100.000 vmlinux vmlinux create_empty_buffers [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux current_fs_time
+ 1 100.000 vmlinux vmlinux current_fs_time [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux current_tick_length
+ 1 100.000 vmlinux vmlinux current_tick_length [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux do_sync_read
+ 1 100.000 vmlinux vmlinux do_sync_read [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux do_sys_open
+ 1 100.000 vmlinux vmlinux do_sys_open [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux do_sys_poll
+ 1 100.000 vmlinux vmlinux do_sys_poll [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux do_wp_page
+ 1 100.000 vmlinux vmlinux do_wp_page [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux dummy_inode_permission
+ 1 100.000 vmlinux vmlinux dummy_inode_permission [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux end_buffer_async_write
+ 1 100.000 vmlinux vmlinux end_buffer_async_write [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux expand_files
+ 1 100.000 vmlinux vmlinux expand_files [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux file_ra_state_init
+ 1 100.000 vmlinux vmlinux file_ra_state_init [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux find_lock_page
+ 1 100.000 vmlinux vmlinux find_lock_page [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux find_next_bit
+ 1 100.000 vmlinux vmlinux find_next_bit [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux find_or_create_page
+ 1 100.000 vmlinux vmlinux find_or_create_page [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux flush_cpu_workqueue
+ 1 100.000 vmlinux vmlinux flush_cpu_workqueue [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux flush_tlb_mm
+ 1 100.000 vmlinux vmlinux flush_tlb_mm [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux flush_tlb_page
+ 1 100.000 vmlinux vmlinux flush_tlb_page [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux fput
+ 1 100.000 vmlinux vmlinux fput [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux generic_file_mmap
+ 1 100.000 vmlinux vmlinux generic_file_mmap [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux generic_fillattr
+ 1 100.000 vmlinux vmlinux generic_fillattr [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux get_empty_filp
+ 1 100.000 vmlinux vmlinux get_empty_filp [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux get_index
+ 1 100.000 vmlinux vmlinux get_index [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux handle_IRQ_event
+ 1 100.000 vmlinux vmlinux handle_IRQ_event [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux hrtimer_forward
+ 1 100.000 vmlinux vmlinux hrtimer_forward [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux inc_zone_page_state
+ 1 100.000 vmlinux vmlinux inc_zone_page_state [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux init_buffer
+ 1 100.000 vmlinux vmlinux init_buffer [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux inode_add_bytes
+ 1 100.000 vmlinux vmlinux inode_add_bytes [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux inode_setattr
+ 1 100.000 vmlinux vmlinux inode_setattr [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux inotify_inode_queue_event
+ 1 100.000 vmlinux vmlinux inotify_inode_queue_event [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux ioread32
+ 1 100.000 vmlinux vmlinux ioread32 [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux iput
+ 1 100.000 vmlinux vmlinux iput [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux kfree
+ 1 100.000 vmlinux vmlinux kfree [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux kobject_get
+ 1 100.000 vmlinux vmlinux kobject_get [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux kref_get
+ 1 100.000 vmlinux vmlinux kref_get [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux ll_rw_block
+ 1 100.000 vmlinux vmlinux ll_rw_block [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux lock_timer_base
+ 1 100.000 vmlinux vmlinux lock_timer_base [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux lookup_create
+ 1 100.000 vmlinux vmlinux lookup_create [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux math_state_restore
+ 1 100.000 vmlinux vmlinux math_state_restore [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux may_expand_vm
+ 1 100.000 vmlinux vmlinux may_expand_vm [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux memcpy
+ 1 100.000 vmlinux vmlinux memcpy [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux memcpy_toiovec
+ 1 100.000 vmlinux vmlinux memcpy_toiovec [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux mempool_alloc_slab
+ 1 100.000 vmlinux vmlinux mempool_alloc_slab [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux mempool_free
+ 1 100.000 vmlinux vmlinux mempool_free [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux move_native_irq
+ 1 100.000 vmlinux vmlinux move_native_irq [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux no_singlestep
+ 1 100.000 vmlinux vmlinux no_singlestep [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux normal_poll
+ 1 100.000 vmlinux vmlinux normal_poll [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux notifier_call_chain
+ 1 100.000 vmlinux vmlinux notifier_call_chain [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux page_address
+ 1 100.000 vmlinux vmlinux page_address [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux page_remove_rmap
+ 1 100.000 vmlinux vmlinux page_remove_rmap [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux proc_pid_lookup
+ 1 100.000 vmlinux vmlinux proc_pid_lookup [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux profile_hit
+ 1 100.000 vmlinux vmlinux profile_hit [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux queue_delayed_work
+ 1 100.000 vmlinux vmlinux queue_delayed_work [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux radix_tree_insert
+ 1 100.000 vmlinux vmlinux radix_tree_insert [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux radix_tree_lookup
+ 1 100.000 vmlinux vmlinux radix_tree_lookup [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux radix_tree_tag_set
+ 1 100.000 vmlinux vmlinux radix_tree_tag_set [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux rb_insert_color
+ 1 100.000 vmlinux vmlinux rb_insert_color [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux rcu_process_callbacks
+ 1 100.000 vmlinux vmlinux rcu_process_callbacks [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux recalc_bh_state
+ 1 100.000 vmlinux vmlinux recalc_bh_state [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux recalc_task_prio
+ 1 100.000 vmlinux vmlinux recalc_task_prio [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux resched_task
+ 1 100.000 vmlinux vmlinux resched_task [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux restore_all
+ 1 100.000 vmlinux vmlinux restore_all [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux resume_userspace
+ 1 100.000 vmlinux vmlinux resume_userspace [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux rq_init
+ 1 100.000 vmlinux vmlinux rq_init [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux run_local_timers
+ 1 100.000 vmlinux vmlinux run_local_timers [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux run_workqueue
+ 1 100.000 vmlinux vmlinux run_workqueue [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux rw_copy_check_uvector
+ 1 100.000 vmlinux vmlinux rw_copy_check_uvector [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux save_i387
+ 1 100.000 vmlinux vmlinux save_i387 [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux scsi_error_handler
+ 1 100.000 vmlinux vmlinux scsi_error_handler [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux scsi_finish_command
+ 1 100.000 vmlinux vmlinux scsi_finish_command [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux scsi_prep_fn
+ 1 100.000 vmlinux vmlinux scsi_prep_fn [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux set_page_dirty
+ 1 100.000 vmlinux vmlinux set_page_dirty [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux skb_queue_tail
+ 1 100.000 vmlinux vmlinux skb_queue_tail [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux sock_alloc_send_skb
+ 1 100.000 vmlinux vmlinux sock_alloc_send_skb [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux submit_bh
+ 1 100.000 vmlinux vmlinux submit_bh [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux submit_bio
+ 1 100.000 vmlinux vmlinux submit_bio [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux sys_gettimeofday
+ 1 100.000 vmlinux vmlinux sys_gettimeofday [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux sys_write
+ 1 100.000 vmlinux vmlinux sys_write [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux sys_writev
+ 1 100.000 vmlinux vmlinux sys_writev [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux syscall_call
+ 1 100.000 vmlinux vmlinux syscall_call [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux task_rq_lock
+ 1 100.000 vmlinux vmlinux task_rq_lock [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux tcp_transmit_skb
+ 1 100.000 vmlinux vmlinux tcp_transmit_skb [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux test_clear_page_writeback
+ 1 100.000 vmlinux vmlinux test_clear_page_writeback [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux try_to_free_buffers
+ 1 100.000 vmlinux vmlinux try_to_free_buffers [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux unix_release_sock
+ 1 100.000 vmlinux vmlinux unix_release_sock [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux unix_write_space
+ 1 100.000 vmlinux vmlinux unix_write_space [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux unlink_file_vma
+ 1 100.000 vmlinux vmlinux unlink_file_vma [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux up_read
+ 1 100.000 vmlinux vmlinux up_read [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux up_write
+ 1 100.000 vmlinux vmlinux up_write [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux update_process_times
+ 1 100.000 vmlinux vmlinux update_process_times [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux vfs_fstat
+ 1 100.000 vmlinux vmlinux vfs_fstat [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux vfs_read
+ 1 100.000 vmlinux vmlinux vfs_read [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux vm_acct_memory
+ 1 100.000 vmlinux vmlinux vm_acct_memory [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux vma_merge
+ 1 100.000 vmlinux vmlinux vma_merge [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux vmtruncate
+ 1 100.000 vmlinux vmlinux vmtruncate [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux wait_for_completion_timeout
+ 1 100.000 vmlinux vmlinux wait_for_completion_timeout [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux wake_up_inode
+ 1 100.000 vmlinux vmlinux wake_up_inode [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux worker_thread
+ 1 100.000 vmlinux vmlinux worker_thread [self]
+-------------------------------------------------------------------------------
+1 0.0011 vmlinux vmlinux zone_watermark_ok
+ 1 100.000 vmlinux vmlinux zone_watermark_ok [self]
+-------------------------------------------------------------------------------
+ 8297 100.000 Xorg Xorg ProcRenderTrapezoids
+0 0 Xorg Xorg CompositeTrapezoids
+ 8299 100.000 Xorg Xorg miTrapezoids
+ 0 0 Xorg Xorg CompositeTrapezoids [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcCreateGC
+ 4 100.000 Xorg Xorg CreateGC
+ 0 0 Xorg Xorg ProcCreateGC [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcFreeGC
+ 1 50.0000 Xorg Xorg FreeResource
+ 1 50.0000 Xorg Xorg dixLookupGC
+ 0 0 Xorg Xorg ProcFreeGC [self]
+-------------------------------------------------------------------------------
+ 45 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcPolySegment
+ 38 84.4444 Xorg Xorg damagePolySegment
+ 4 8.8889 Xorg Xorg ValidateGC
+ 2 4.4444 Xorg Xorg dixLookupDrawable
+ 1 2.2222 Xorg Xorg dixLookupGC
+ 0 0 Xorg Xorg ProcPolySegment [self]
+-------------------------------------------------------------------------------
+ 8299 100.000 Xorg Xorg ProcRenderDispatch
+0 0 Xorg Xorg ProcRenderTrapezoids
+ 8297 99.9759 Xorg Xorg CompositeTrapezoids
+ 2 0.0241 Xorg Xorg SecurityLookupIDByType
+ 0 0 Xorg Xorg ProcRenderTrapezoids [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg Xorg ProcRenderSetPictureClipRectangles
+0 0 Xorg Xorg SetPictureClipRects
+ 5 71.4286 Xorg Xorg miRectsToRegion
+ 2 28.5714 Xorg Xorg miChangePictureClip
+ 0 0 Xorg Xorg SetPictureClipRects [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg _start
+ 62686 100.000 libc-2.5.so Xorg __libc_start_main
+ 0 0 Xorg Xorg _start [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg ProcCopyArea
+0 0 Xorg Xorg damageCopyArea
+ 3 75.0000 libexa.so Xorg exaCopyArea
+ 1 25.0000 Xorg Xorg getDrawableDamageRef
+ 0 0 Xorg Xorg damageCopyArea [self]
+-------------------------------------------------------------------------------
+ 24 100.000 Xorg Xorg FreeResource
+0 0 Xorg Xorg dixDestroyPixmap
+ 24 100.000 libextmod.so Xorg XvDestroyPixmap
+ 0 0 Xorg Xorg dixDestroyPixmap [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg main
+ 62687 99.9777 Xorg Xorg Dispatch
+ 8 0.0128 Xorg Xorg XaceHook
+ 3 0.0048 Xorg Xorg XaceCatchDispatchProc
+ 2 0.0032 Xorg Xorg XaceCatchExtProc
+ 1 0.0016 Xorg Xorg ReadRequestFromClient
+ 0 0 Xorg Xorg main [self]
+-------------------------------------------------------------------------------
+ 20 100.000 Xorg Xorg miTrapezoids
+0 0 Xorg Xorg miCreateAlphaPicture
+ 8 40.0000 Xorg Xorg damagePolyFillRect
+ 5 25.0000 libexa.so Xorg exaCreatePixmap
+ 2 10.0000 Xorg Xorg CreatePicture
+ 2 10.0000 libextmod.so Xorg XvDestroyPixmap
+ 1 5.0000 Xorg Xorg ValidateGC
+ 1 5.0000 Xorg Xorg GetScratchGC
+ 1 5.0000 Xorg Xorg damageDestroyPixmap
+ 0 0 Xorg Xorg miCreateAlphaPicture [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg Xorg miChangePictureClip
+ 1 50.0000 Xorg Xorg FreePicture
+0 0 Xorg Xorg miDestroyPictureClip
+ 2 100.000 Xorg Xorg miRegionDestroy
+ 0 0 Xorg Xorg miDestroyPictureClip [self]
+-------------------------------------------------------------------------------
+ 1 100.000 intel_drv.so intel_drv.so I830Sync
+0 0 Xorg intel_drv.so GetTimeInMillis
+ 0 0 Xorg intel_drv.so GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+ 62693 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 Xorg libc-2.5.so main
+ 0 0 Xorg libc-2.5.so main [self]
+-------------------------------------------------------------------------------
+ 8 17.7778 libexa.so libexa.so exaPixmapDirty
+ 37 82.2222 libexa.so libexa.so exaTryDriverComposite
+0 0 Xorg libexa.so .plt
+ 0 0 Xorg libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so ChangePicture
+ 0 0 Xorg libexa.so ChangePicture [self]
+-------------------------------------------------------------------------------
+ 24 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so CreatePicture
+ 0 0 Xorg libexa.so CreatePicture [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so libexa.so exaCreatePixmap
+0 0 Xorg libexa.so DamageCreate
+ 0 0 Xorg libexa.so DamageCreate [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libexa.so libexa.so exaDoMigration
+ 2 66.6667 libexa.so libexa.so exaMoveInPixmap
+0 0 Xorg libexa.so DamageEmpty
+ 0 0 Xorg libexa.so DamageEmpty [self]
+-------------------------------------------------------------------------------
+ 2 20.0000 libexa.so libexa.so exaPixmapDirty
+ 2 20.0000 libexa.so libexa.so exaComposite
+ 6 60.0000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so DamageRegion
+ 0 0 Xorg libexa.so DamageRegion [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so libexa.so exaCreatePixmap
+0 0 Xorg libexa.so DamageRegister
+ 0 0 Xorg libexa.so DamageRegister [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libexa.so libexa.so exaCreatePixmap
+ 1 50.0000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so DamageSetReportAfterOp
+ 0 0 Xorg libexa.so DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 27 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so FreePicture
+ 0 0 Xorg libexa.so FreePicture [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so FreeScratchGC
+ 0 0 Xorg libexa.so FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so GetScratchPixmapHeader
+ 0 0 Xorg libexa.so GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 24 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so ValidateGC
+ 0 0 Xorg libexa.so ValidateGC [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so ValidatePicture
+ 0 0 Xorg libexa.so ValidatePicture [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libexa.so libexa.so exaCreatePixmap
+ 4 80.0000 libexa.so libexa.so exaOffscreenAlloc
+0 0 Xorg libexa.so Xalloc
+ 0 0 Xorg libexa.so Xalloc [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libexa.so libexa.so exaDestroyPixmap
+ 4 80.0000 libexa.so libexa.so ExaOffscreenMerge
+0 0 Xorg libexa.so Xfree
+ 0 0 Xorg libexa.so Xfree [self]
+-------------------------------------------------------------------------------
+ 1 4.5455 libexa.so libexa.so exaMoveInPixmap
+ 2 9.0909 libexa.so libexa.so exaOffscreenAlloc
+ 6 27.2727 libexa.so libexa.so exaPixmapDirty
+ 6 27.2727 libexa.so libexa.so exaTryDriverComposite
+ 7 31.8182 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so __i686.get_pc_thunk.bx
+ 0 0 Xorg libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so damageInsertDamage
+ 0 0 Xorg libexa.so damageInsertDamage [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so damagePolyFillRect
+ 0 0 Xorg libexa.so damagePolyFillRect [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so damageValidateGC
+ 0 0 Xorg libexa.so damageValidateGC [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 Xorg libexa.so miCompositeSourceValidate
+ 0 0 Xorg libexa.so miCompositeSourceValidate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaValidateGC
+0 0 Xorg libexa.so miComputeCompositeClip
+ 0 0 Xorg libexa.so miComputeCompositeClip [self]
+-------------------------------------------------------------------------------
+ 6 0.9554 libexa.so libexa.so exaComposite
+ 622 99.0446 libexa.so libexa.so exaTryDriverComposite
+0 0 Xorg libexa.so miComputeCompositeRegion
+ 0 0 Xorg libexa.so miComputeCompositeRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so miCreatePicture
+ 0 0 Xorg libexa.so miCreatePicture [self]
+-------------------------------------------------------------------------------
+ 14 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so miGlyphExtents
+ 0 0 Xorg libexa.so miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miIntersect
+ 0 0 Xorg libexa.so miIntersect [self]
+-------------------------------------------------------------------------------
+ 55 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so miModifyPixmapHeader
+ 0 0 Xorg libexa.so miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 29 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miRectsToRegion
+ 0 0 Xorg libexa.so miRectsToRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miRegionCreate
+ 0 0 Xorg libexa.so miRegionCreate [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miRegionDestroy
+ 0 0 Xorg libexa.so miRegionDestroy [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miRegionValidate
+ 0 0 Xorg libexa.so miRegionValidate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaCopyArea
+0 0 Xorg libexa.so miSpriteSourceValidate
+ 0 0 Xorg libexa.so miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miTranslateRegion
+ 0 0 Xorg libexa.so miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 2 0.4630 libexa.so libexa.so exaComposite
+ 6 1.3889 libexa.so libexa.so exaGlyphs
+ 8 1.8519 libexa.so libexa.so exaMoveInPixmap
+ 416 96.2963 libexa.so libexa.so exaPixmapDirty
+0 0 Xorg libexa.so miUnion
+ 0 0 Xorg libexa.so miUnion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 Xorg libextmod.so DamageDestroy
+ 0 0 Xorg libextmod.so DamageDestroy [self]
+-------------------------------------------------------------------------------
+ 66 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 Xorg libextmod.so damageDestroyPixmap
+ 0 0 Xorg libextmod.so damageDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 Xorg libextmod.so damageRemoveDamage
+ 0 0 Xorg libextmod.so damageRemoveDamage [self]
+-------------------------------------------------------------------------------
+ 4 4.9383 libfb.so libfb.so fbCreatePixmap
+ 77 95.0617 libfb.so libfb.so fbCreatePixmapBpp
+0 0 Xorg libfb.so AllocatePixmap
+ 0 0 Xorg libfb.so AllocatePixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbCreatePixmapBpp
+0 0 Xorg libfb.so Xalloc
+ 0 0 Xorg libfb.so Xalloc [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libfb.so libfb.so fbDestroyPixmap
+0 0 Xorg libfb.so Xfree
+ 0 0 Xorg libfb.so Xfree [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libfb.so libfb.so fbCreatePixmapBpp
+ 3 75.0000 libfb.so libfb.so fbDoCopy
+0 0 Xorg libfb.so __i686.get_pc_thunk.bx
+ 0 0 Xorg libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 22 100.000 libfb.so libfb.so fbValidateGC
+0 0 Xorg libfb.so miComputeCompositeClip
+ 0 0 Xorg libfb.so miComputeCompositeClip [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libfb.so libfb.so fbDoCopy
+0 0 Xorg libfb.so miSpriteSourceValidate
+ 0 0 Xorg libfb.so miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbValidateGC
+0 0 Xorg libfb.so miTranslateRegion
+ 0 0 Xorg libfb.so miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 anon (tgid:28734 range:0xb7f37000-0xb7f38000) libexa.so (no symbols)
+ 0 0 anon (tgid:28734 range:0xb7f37000-0xb7f38000) libexa.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 bash libc-2.5.so (no symbols)
+ 0 0 bash libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 cat libc-2.5.so (no symbols)
+ 0 0 cat libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 524 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 firefox-bin libc-2.5.so (no symbols)
+ 0 0 firefox-bin libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 gconfd-2 libc-2.5.so (no symbols)
+ 0 0 gconfd-2 libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 hald-addon-storage libc-2.5.so (no symbols)
+ 0 0 hald-addon-storage libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 1.4085 libexa.so libexa.so exaWaitSync
+ 3 4.2254 libexa.so libexa.so exaFillRegionSolid
+ 67 94.3662 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so .plt
+ 0 0 intel_drv.so libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 14 100.000 libexa.so libexa.so exaFillRegionSolid
+0 0 intel_drv.so libexa.so I830EXAPrepareSolid
+ 0 0 intel_drv.so libexa.so I830EXAPrepareSolid [self]
+-------------------------------------------------------------------------------
+ 2 5.1282 libexa.so libexa.so exaPolyFillRect
+ 37 94.8718 libexa.so libexa.so exaFillRegionSolid
+0 0 intel_drv.so libexa.so I830EXASolid
+ 0 0 intel_drv.so libexa.so I830EXASolid [self]
+-------------------------------------------------------------------------------
+ 31418 100.000 libexa.so libexa.so exaWaitSync
+0 0 intel_drv.so libexa.so I830EXASync
+ 0 0 intel_drv.so libexa.so I830EXASync [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so libexa.so exaWaitSync
+0 0 intel_drv.so libexa.so I830Sync
+ 0 0 intel_drv.so libexa.so I830Sync [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so IntelEmitInvarientState
+ 0 0 intel_drv.so libexa.so IntelEmitInvarientState [self]
+-------------------------------------------------------------------------------
+ 2 7.4074 libexa.so libexa.so exaWaitSync
+ 4 14.8148 libexa.so libexa.so exaFillRegionSolid
+ 4 14.8148 libexa.so libexa.so exaComposite
+ 17 62.9630 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 0 0 intel_drv.so libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i830MarkSync
+ 0 0 intel_drv.so libexa.so i830MarkSync [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i830WaitSync
+ 0 0 intel_drv.so libexa.so i830WaitSync [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so libexa.so exaComposite
+0 0 intel_drv.so libexa.so i830_done_composite
+ 0 0 intel_drv.so libexa.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+ 30 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i830_get_transformed_coordinates
+ 0 0 intel_drv.so libexa.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+ 5 3.7313 libexa.so libexa.so exaGlyphs
+ 63 47.0149 libexa.so libexa.so exaTryDriverComposite
+ 66 49.2537 libexa.so libexa.so exaComposite
+0 0 intel_drv.so libexa.so i965_check_composite
+ 0 0 intel_drv.so libexa.so i965_check_composite [self]
+-------------------------------------------------------------------------------
+ 7 50.0000 libexa.so libexa.so exaTryDriverComposite
+ 7 50.0000 libexa.so libexa.so exaComposite
+0 0 intel_drv.so libexa.so i965_check_composite_texture
+ 0 0 intel_drv.so libexa.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+ 656 21.1136 libexa.so libexa.so exaComposite
+ 2451 78.8864 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_composite
+ 0 0 intel_drv.so libexa.so i965_composite [self]
+-------------------------------------------------------------------------------
+ 17 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_get_card_format
+ 0 0 intel_drv.so libexa.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+ 2 20.0000 libexa.so libexa.so exaComposite
+ 8 80.0000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_get_dest_format
+ 0 0 intel_drv.so libexa.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+ 3 0.0067 libexa.so libexa.so exaComposite
+ 44587 99.9933 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_prepare_composite
+ 0 0 intel_drv.so libexa.so i965_prepare_composite [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so intel_get_pixmap_offset
+ 0 0 intel_drv.so libexa.so intel_get_pixmap_offset [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so intel_get_pixmap_pitch
+ 0 0 intel_drv.so libexa.so intel_get_pixmap_pitch [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object_deps
+0 0 ld-2.5.so ld-2.5.so _dl_catch_error
+ 1 100.000 ld-2.5.so ld-2.5.so openaux
+ 0 0 ld-2.5.so ld-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_runtime_resolve
+0 0 ld-2.5.so ld-2.5.so _dl_fixup
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 0 0 ld-2.5.so ld-2.5.so _dl_fixup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so openaux
+0 0 ld-2.5.so ld-2.5.so _dl_map_object
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+ 0 0 ld-2.5.so ld-2.5.so _dl_map_object [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so dl_main
+0 0 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so ld-2.5.so _dl_map_object_deps [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_runtime_resolve
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_fixup
+ 0 0 ld-2.5.so ld-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 4 100.000 ld-2.5.so ld-2.5.so _dl_start_user
+0 0 ld-2.5.so ld-2.5.so _dl_start
+ 4 100.000 ld-2.5.so ld-2.5.so _dl_sysdep_start
+ 0 0 ld-2.5.so ld-2.5.so _dl_start [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_start_user
+ 4 100.000 ld-2.5.so ld-2.5.so _dl_start
+ 0 0 ld-2.5.so ld-2.5.so _dl_start_user [self]
+-------------------------------------------------------------------------------
+ 4 100.000 ld-2.5.so ld-2.5.so _dl_start
+0 0 ld-2.5.so ld-2.5.so _dl_sysdep_start
+ 4 100.000 ld-2.5.so ld-2.5.so dl_main
+ 0 0 ld-2.5.so ld-2.5.so _dl_sysdep_start [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so do_lookup_x
+0 0 ld-2.5.so ld-2.5.so check_match.7793
+ 2 100.000 ld-2.5.so ld-2.5.so strcmp
+ 0 0 ld-2.5.so ld-2.5.so check_match.7793 [self]
+-------------------------------------------------------------------------------
+ 4 100.000 ld-2.5.so ld-2.5.so _dl_sysdep_start
+0 0 ld-2.5.so ld-2.5.so dl_main
+ 3 75.0000 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 1 25.0000 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 0 0 ld-2.5.so ld-2.5.so dl_main [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+0 0 ld-2.5.so ld-2.5.so do_lookup_x
+ 2 100.000 ld-2.5.so ld-2.5.so check_match.7793
+ 0 0 ld-2.5.so ld-2.5.so do_lookup_x [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 ld-2.5.so ld-2.5.so openaux
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+ 0 0 ld-2.5.so ld-2.5.so openaux [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg Xorg Xfree
+ 4 80.0000 Xorg Xorg Xalloc
+0 0 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 62686 100.000 Xorg Xorg _start
+0 0 libc-2.5.so Xorg __libc_start_main
+ 0 0 libc-2.5.so Xorg __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg _XSERVTransRead
+0 0 libc-2.5.so Xorg __read_nocancel
+ 0 0 libc-2.5.so Xorg __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg _int_free
+ 0 0 libc-2.5.so Xorg _int_free [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg Xalloc
+0 0 libc-2.5.so Xorg _int_malloc
+ 0 0 libc-2.5.so Xorg _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 1.6129 Xorg Xorg miRegionDestroy
+ 61 98.3871 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg free
+ 0 0 libc-2.5.so Xorg free [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg WaitForSomething
+0 0 libc-2.5.so Xorg gettimeofday
+ 0 0 libc-2.5.so Xorg gettimeofday [self]
+-------------------------------------------------------------------------------
+ 136 100.000 Xorg Xorg Xalloc
+0 0 libc-2.5.so Xorg malloc
+ 0 0 libc-2.5.so Xorg malloc [self]
+-------------------------------------------------------------------------------
+ 14 100.000 Xorg Xorg SetPictureToDefaults
+0 0 libc-2.5.so Xorg strlen
+ 0 0 libc-2.5.so Xorg strlen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 intel_drv.so intel_drv.so I830WaitLpRing
+0 0 libc-2.5.so intel_drv.so gettimeofday
+ 0 0 libc-2.5.so intel_drv.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 5524 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+0 0 libc-2.5.so intel_drv.so memcpy
+ 0 0 libc-2.5.so intel_drv.so memcpy [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+0 0 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so libc-2.5.so _IO_do_write@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so libc-2.5.so _IO_unsave_markers
+ 1 33.3333 libc-2.5.so libc-2.5.so __close_nocancel
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_doallocbuf
+0 0 libc-2.5.so libc-2.5.so _IO_file_doallocate
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_stat
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_doallocate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __fopen_internal
+0 0 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so strstr
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+0 0 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_doallocbuf
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_doallocate
+0 0 libc-2.5.so libc-2.5.so _IO_file_stat
+ 1 100.000 libc-2.5.so libc-2.5.so __fxstat64@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_stat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so fgets
+0 0 libc-2.5.so libc-2.5.so _IO_getline
+ 1 100.000 libc-2.5.so libc-2.5.so memchr
+ 0 0 libc-2.5.so libc-2.5.so _IO_getline [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __fopen_internal
+0 0 libc-2.5.so libc-2.5.so _IO_no_init
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_old_init
+ 0 0 libc-2.5.so libc-2.5.so _IO_no_init [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+0 0 libc-2.5.so libc-2.5.so __fopen_internal
+ 1 20.0000 libc-2.5.so libc-2.5.so _IO_file_open
+ 1 20.0000 libc-2.5.so libc-2.5.so _int_malloc
+ 1 20.0000 libc-2.5.so libc-2.5.so malloc
+ 1 20.0000 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 1 20.0000 libc-2.5.so libc-2.5.so _IO_no_init
+ 0 0 libc-2.5.so libc-2.5.so __fopen_internal [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so __libc_start_main
+ 62693 91.5066 Xorg libc-2.5.so main
+ 5284 7.7125 oprofiled libc-2.5.so (no symbols)
+ 524 0.7648 firefox-bin libc-2.5.so (no symbols)
+ 5 0.0073 bash libc-2.5.so (no symbols)
+ 2 0.0029 gconfd-2 libc-2.5.so (no symbols)
+ 2 0.0029 sleep libc-2.5.so (no symbols)
+ 1 0.0015 cat libc-2.5.so (no symbols)
+ 1 0.0015 hald-addon-storage libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_vfscanf
+0 0 libc-2.5.so libc-2.5.so __strtoul_internal
+ 1 100.000 libc-2.5.so libc-2.5.so ____strtoul_l_internal
+ 0 0 libc-2.5.so libc-2.5.so __strtoul_internal [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so setlocale
+0 0 libc-2.5.so libc-2.5.so _nl_find_locale
+ 3 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+ 0 0 libc-2.5.so libc-2.5.so _nl_find_locale [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+0 0 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 2 100.000 libc-2.5.so libc-2.5.so malloc
+ 0 0 libc-2.5.so libc-2.5.so _nl_normalize_codeset [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so clone
+ 3 100.000 libpthread-2.5.so libc-2.5.so start_thread
+ 0 0 libc-2.5.so libc-2.5.so clone [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+ 3 100.000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so malloc
+0 0 libc-2.5.so libc-2.5.so malloc_hook_ini
+ 2 100.000 libc-2.5.so libc-2.5.so ptmalloc_init
+ 0 0 libc-2.5.so libc-2.5.so malloc_hook_ini [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so malloc_hook_ini
+0 0 libc-2.5.so libc-2.5.so ptmalloc_init
+ 2 100.000 libc-2.5.so libc-2.5.so _dl_addr
+ 0 0 libc-2.5.so libc-2.5.so ptmalloc_init [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so setlocale
+ 3 100.000 libc-2.5.so libc-2.5.so _nl_find_locale
+ 0 0 libc-2.5.so libc-2.5.so setlocale [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so sprintf
+ 7 100.000 libc-2.5.so libc-2.5.so vsprintf
+ 0 0 libc-2.5.so libc-2.5.so sprintf [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so sscanf
+ 4 80.0000 libc-2.5.so libc-2.5.so vsscanf
+ 1 20.0000 libc-2.5.so libc-2.5.so _IO_str_init_static_internal
+ 0 0 libc-2.5.so libc-2.5.so sscanf [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so libc-2.5.so sprintf
+0 0 libc-2.5.so libc-2.5.so vsprintf
+ 6 85.7143 libc-2.5.so libc-2.5.so vfprintf
+ 1 14.2857 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 0 0 libc-2.5.so libc-2.5.so vsprintf [self]
+-------------------------------------------------------------------------------
+ 15 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libc-2.5.so libexa.so memcpy
+ 0 0 libc-2.5.so libexa.so memcpy [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so libpixman.so.0.0.0 _int_malloc
+ 0 0 libc-2.5.so libpixman.so.0.0.0 _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 3.0303 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 3 9.0909 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 29 87.8788 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so libpixman.so.0.0.0 free
+ 0 0 libc-2.5.so libpixman.so.0.0.0 free [self]
+-------------------------------------------------------------------------------
+ 8 13.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 52 86.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so libpixman.so.0.0.0 malloc
+ 0 0 libc-2.5.so libpixman.so.0.0.0 malloc [self]
+-------------------------------------------------------------------------------
+ 24 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so libpixman.so.0.0.0 memmove
+ 0 0 libc-2.5.so libpixman.so.0.0.0 memmove [self]
+-------------------------------------------------------------------------------
+ 113 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+0 0 libc-2.5.so libpixman.so.0.0.0 memset
+ 0 0 libc-2.5.so libpixman.so.0.0.0 memset [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so msort_with_tmp
+0 0 libcairo.so.2.11.3 libc-2.5.so (no symbols)
+ 0 0 libcairo.so.2.11.3 libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 7 43.7500 intel_drv.so intel_drv.so IntelEmitInvarientState
+ 9 56.2500 intel_drv.so intel_drv.so i965_prepare_composite
+0 0 libdri.so intel_drv.so DRIGetContext
+ 0 0 libdri.so intel_drv.so DRIGetContext [self]
+-------------------------------------------------------------------------------
+ 10 40.0000 intel_drv.so intel_drv.so i965_prepare_composite
+ 15 60.0000 intel_drv.so intel_drv.so IntelEmitInvarientState
+0 0 libdri.so intel_drv.so DRIGetSAREAPrivate
+ 0 0 libdri.so intel_drv.so DRIGetSAREAPrivate [self]
+-------------------------------------------------------------------------------
+ 8 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+0 0 libdri.so intel_drv.so __i686.get_pc_thunk.cx
+ 0 0 libdri.so intel_drv.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 Xorg Xorg ProcCreatePixmap
+ 1 10.0000 Xorg Xorg miTrapezoids
+ 1 10.0000 Xorg Xorg damagePolyFillRect
+ 7 70.0000 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg .plt
+ 0 0 libexa.so Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg Xorg damagePolyFillRect
+ 2 25.0000 Xorg Xorg damageComposite
+ 5 62.5000 Xorg Xorg ProcCreatePixmap
+0 0 libexa.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libexa.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 11 0.5304 Xorg Xorg damageGlyphs
+ 2063 99.4696 Xorg Xorg damageComposite
+0 0 libexa.so Xorg exaComposite
+ 0 0 libexa.so Xorg exaComposite [self]
+-------------------------------------------------------------------------------
+ 3 42.8571 Xorg Xorg damageCopyArea
+ 4 57.1429 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg exaCopyArea
+ 0 0 libexa.so Xorg exaCopyArea [self]
+-------------------------------------------------------------------------------
+ 1 1.0753 Xorg Xorg XaceCatchDispatchProc
+ 3 3.2258 Xorg Xorg miCompositeRects
+ 3 3.2258 Xorg Xorg damageGlyphs
+ 5 5.3763 Xorg Xorg miCreateAlphaPicture
+ 81 87.0968 Xorg Xorg ProcCreatePixmap
+0 0 libexa.so Xorg exaCreatePixmap
+ 0 0 libexa.so Xorg exaCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 45 100.000 Xorg Xorg damageDestroyPixmap
+0 0 libexa.so Xorg exaDestroyPixmap
+ 0 0 libexa.so Xorg exaDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damagePolyFillRect
+0 0 libexa.so Xorg exaFillRegionSolid
+ 0 0 libexa.so Xorg exaFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 50684 100.000 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg exaGlyphs
+ 0 0 libexa.so Xorg exaGlyphs [self]
+-------------------------------------------------------------------------------
+ 2 50.0000 Xorg Xorg miTrapezoids
+ 2 50.0000 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg exaPixmapDirty
+ 0 0 libexa.so Xorg exaPixmapDirty [self]
+-------------------------------------------------------------------------------
+ 1 0.3704 Xorg Xorg miColorRects
+ 269 99.6296 Xorg Xorg damagePolyFillRect
+0 0 libexa.so Xorg exaPolyFillRect
+ 0 0 libexa.so Xorg exaPolyFillRect [self]
+-------------------------------------------------------------------------------
+ 34 100.000 Xorg Xorg damagePolySegment
+0 0 libexa.so Xorg exaPolySegment
+ 0 0 libexa.so Xorg exaPolySegment [self]
+-------------------------------------------------------------------------------
+ 8213 100.000 Xorg Xorg miTrapezoids
+0 0 libexa.so Xorg exaRasterizeTrapezoid
+ 0 0 libexa.so Xorg exaRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 2 2.8986 Xorg Xorg damageValidateGC
+ 67 97.1014 Xorg Xorg miBSCheapValidateGC
+0 0 libexa.so Xorg exaValidateGC
+ 0 0 libexa.so Xorg exaValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 5.0000 intel_drv.so intel_drv.so I830EXASolid
+ 3 15.0000 intel_drv.so intel_drv.so i830MarkSync
+ 5 25.0000 intel_drv.so intel_drv.so i830WaitSync
+ 11 55.0000 intel_drv.so intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 3 9.3750 intel_drv.so intel_drv.so I830EXAPrepareSolid
+ 5 15.6250 intel_drv.so intel_drv.so i965_prepare_composite
+ 24 75.0000 intel_drv.so intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so intel_drv.so exaGetPixmapOffset
+ 0 0 libexa.so intel_drv.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 intel_drv.so intel_drv.so I830EXAPrepareSolid
+ 1 20.0000 intel_drv.so intel_drv.so i965_prepare_composite
+ 3 60.0000 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+0 0 libexa.so intel_drv.so exaGetPixmapPitch
+ 0 0 libexa.so intel_drv.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+ 5 20.8333 intel_drv.so intel_drv.so i965_composite
+ 19 79.1667 intel_drv.so intel_drv.so i830MarkSync
+0 0 libexa.so intel_drv.so exaMarkSync
+ 0 0 libexa.so intel_drv.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+ 2 0.0069 intel_drv.so intel_drv.so i965_composite
+ 12 0.0415 intel_drv.so intel_drv.so i965_prepare_composite
+ 28896 99.9516 intel_drv.so intel_drv.so i830WaitSync
+0 0 libexa.so intel_drv.so exaWaitSync
+ 0 0 libexa.so intel_drv.so exaWaitSync [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 libexa.so libextmod.so exaDestroyPixmap
+ 0 0 libexa.so libextmod.so exaDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 17 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so .plt
+ 0 0 libexa.so libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 2 1.5267 libfb.so libfb.so fbDoCopy
+ 129 98.4733 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaCopyNtoN
+ 0 0 libexa.so libfb.so exaCopyNtoN [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaDoMigration
+ 0 0 libexa.so libfb.so exaDoMigration [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaGetDrawableDeltas
+ 0 0 libexa.so libfb.so exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+ 10 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaGetDrawablePixmap
+ 0 0 libexa.so libfb.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaPixmapIsOffscreen
+ 0 0 libexa.so libfb.so exaPixmapIsOffscreen [self]
+-------------------------------------------------------------------------------
+ 2 3.7736 Xorg Xorg miCreateAlphaPicture
+ 24 45.2830 Xorg Xorg dixDestroyPixmap
+ 27 50.9434 Xorg Xorg FreePicture
+0 0 libextmod.so Xorg XvDestroyPixmap
+ 0 0 libextmod.so Xorg XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 43 100.000 libexa.so libexa.so exaGlyphs
+0 0 libextmod.so libexa.so XvDestroyPixmap
+ 0 0 libextmod.so libexa.so XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageDestroyPixmap
+0 0 libfb.so Xorg fbDestroyPixmap
+ 0 0 libfb.so Xorg fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg miBSCheapValidateGC
+0 0 libfb.so Xorg fbValidateGC
+ 0 0 libfb.so Xorg fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libexa.so libexa.so exaCreatePixmap
+ 1 50.0000 libexa.so libexa.so exaCopyArea
+0 0 libfb.so libexa.so .plt
+ 0 0 libfb.so libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 4 36.3636 libexa.so libexa.so exaDestroyPixmap
+ 7 63.6364 libexa.so libexa.so exaCopyArea
+0 0 libfb.so libexa.so __i686.get_pc_thunk.bx
+ 0 0 libfb.so libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaValidateGC
+0 0 libfb.so libexa.so __i686.get_pc_thunk.cx
+ 0 0 libfb.so libexa.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so libexa.so exaCopyArea
+0 0 libfb.so libexa.so fbCopyRegion
+ 0 0 libfb.so libexa.so fbCopyRegion [self]
+-------------------------------------------------------------------------------
+ 1 0.9524 libexa.so libexa.so exaGlyphs
+ 104 99.0476 libexa.so libexa.so exaCreatePixmap
+0 0 libfb.so libexa.so fbCreatePixmap
+ 0 0 libfb.so libexa.so fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libexa.so libexa.so exaDestroyPixmap
+0 0 libfb.so libexa.so fbDestroyPixmap
+ 0 0 libfb.so libexa.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 0.3185 libexa.so libexa.so exaGlyphs
+ 313 99.6815 libexa.so libexa.so exaCopyArea
+0 0 libfb.so libexa.so fbDoCopy
+ 0 0 libfb.so libexa.so fbDoCopy [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaValidateGC
+0 0 libfb.so libexa.so fbGetGCPrivateIndex
+ 0 0 libfb.so libexa.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 5589 100.000 libexa.so libexa.so exaRasterizeTrapezoid
+0 0 libfb.so libexa.so fbRasterizeTrapezoid
+ 0 0 libfb.so libexa.so fbRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 55 100.000 libexa.so libexa.so exaValidateGC
+0 0 libfb.so libexa.so fbValidateGC
+ 0 0 libfb.so libexa.so fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaRasterizeTrapezoid
+0 0 libfb.so libexa.so image_from_pict
+ 0 0 libfb.so libexa.so image_from_pict [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so bsearch
+0 0 libgtk-x11-2.0.so.0.1000.12 libc-2.5.so (no symbols)
+ 0 0 libgtk-x11-2.0.so.0.1000.12 libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libpthread-2.5.so libpthread-2.5.so start_thread
+0 0 libnspr4.so libpthread-2.5.so (no symbols)
+ 0 0 libnspr4.so libpthread-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg .plt
+ 0 0 libpixman.so.0.0.0 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg Xorg miRegionDestroy
+ 1 12.5000 Xorg Xorg miComputeCompositeRegion
+ 2 25.0000 Xorg Xorg miIntersect
+ 4 50.0000 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 3 42.8571 Xorg Xorg miUnion
+ 4 57.1429 Xorg Xorg miRegionCopy
+0 0 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 2 10.5263 Xorg Xorg miDestroyPicture
+ 17 89.4737 Xorg Xorg miRegionDestroy
+0 0 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 3 42.8571 Xorg Xorg miRegionInit
+ 4 57.1429 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_init
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg Xorg miRegionInit
+ 1 50.0000 Xorg Xorg miRegionCreate
+0 0 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+ 2 15.3846 Xorg Xorg damageDamageRegion
+ 11 84.6154 Xorg Xorg miIntersect
+0 0 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 24 100.000 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 51 100.000 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg Xorg miTranslateRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_translate
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 1 0.2358 Xorg Xorg DamageReportDamage
+ 1 0.2358 Xorg Xorg damageDamageRegion
+ 422 99.5283 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_union
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_union [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_fini
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_init
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 14 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 31 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaMoveInPixmap
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_union
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_union [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so .plt
+ 0 0 libpixman.so.0.0.0 libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 7.1429 libfb.so libfb.so fbRasterizeTrapezoid
+ 13 92.8571 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_create_bits [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_repeat
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_repeat [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_unref
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_unref [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_line_fixed_edge_init
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_line_fixed_edge_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_edges
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_edges [self]
+-------------------------------------------------------------------------------
+ 5563 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_region_init_rect
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_region_init_rect [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so clone
+0 0 libpthread-2.5.so libc-2.5.so start_thread
+ 0 0 libpthread-2.5.so libc-2.5.so start_thread [self]
+-------------------------------------------------------------------------------
+0 0 libpthread-2.5.so libpthread-2.5.so start_thread
+ 3 100.000 libnspr4.so libpthread-2.5.so (no symbols)
+ 0 0 libpthread-2.5.so libpthread-2.5.so start_thread [self]
+-------------------------------------------------------------------------------
+ 1 1.2987 libc-2.5.so libc-2.5.so qsort
+ 76 98.7013 libc-2.5.so libc-2.5.so msort_with_tmp
+0 0 libxul.so libc-2.5.so (no symbols)
+ 0 0 libxul.so libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5284 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 oprofiled libc-2.5.so (no symbols)
+ 0 0 oprofiled libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 sleep libc-2.5.so (no symbols)
+ 0 0 sleep libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+CPU_CLK_UNHALT...|
+ samples| %|
+------------------
+ 44960 48.9787 intel_drv.so
+ 14366 15.6501 libxul.so
+ 9243 10.0692 libc-2.5.so
+ 6006 6.5428 libpixman.so.0.0.0
+ 5213 5.6790 oprofiled
+ 3508 3.8216 libexa.so
+ 2027 2.2082 Xorg
+ CPU_CLK_UNHALT...|
+ samples| %|
+ ------------------
+ 2026 99.9507 Xorg
+ 1 0.0493 anon (tgid:28734 range:0xb7f37000-0xb7f38000)
+ 1936 2.1090 vmlinux
+ 1538 1.6755 oprofile
+ 592 0.6449 libXrender.so.1.3.0
+ 264 0.2876 libgobject-2.0.so.0.1200.12
+ 216 0.2353 libm-2.5.so
+ 212 0.2309 libgdk-x11-2.0.so.0.1000.12
+ 208 0.2266 libcairo.so.2.11.3
+ 207 0.2255 libfb.so
+ 203 0.2211 libX11.so.6.2.0
+ 144 0.1569 libnspr4.so
+ 142 0.1547 libpthread-2.5.so
+ 140 0.1525 libmozjs.so
+ 140 0.1525 jbd
+ 140 0.1525 libglib-2.0.so.0.1200.12
+ 86 0.0937 libgtk-x11-2.0.so.0.1000.12
+ 75 0.0817 ext3
+ 73 0.0795 libgcc_s.so.1
+ 49 0.0534 libdri.so
+ 29 0.0316 libstdc++.so.6.0.9
+ 26 0.0283 libextmod.so
+ 18 0.0196 sysprof_module
+ 13 0.0142 libgthread-2.0.so.0.1200.12
+ 7 0.0076 libplds4.so
+ 5 0.0054 ld-2.5.so
+ 3 0.0033 bash
+ 3 0.0033 uhci_hcd
+ 1 0.0011 ehci_hcd
+ 1 0.0011 libORBit-2.so.0.1.0
+ 1 0.0011 gconfd-2
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name app name symbol name
+31130 33.9125 intel_drv.so intel_drv.so I830WaitLpRing
+14366 15.6501 libxul.so libxul.so (no symbols)
+9782 10.6564 intel_drv.so intel_drv.so i965_prepare_composite
+6941 7.5614 libc-2.5.so libc-2.5.so memcpy
+5402 5.8849 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+5213 5.6790 oprofiled oprofiled (no symbols)
+2800 3.0503 intel_drv.so intel_drv.so i965_composite
+1024 1.1155 oprofile.ko oprofile sync_buffer
+592 0.6449 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols)
+576 0.6275 libexa.so libexa.so __i686.get_pc_thunk.bx
+482 0.5251 vmlinux vmlinux find_vma
+460 0.5011 libc-2.5.so libc-2.5.so _int_malloc
+452 0.4924 libexa.so libexa.so ExaOffscreenMarkUsed
+443 0.4826 libc-2.5.so libc-2.5.so malloc
+421 0.4586 oprofile.ko oprofile add_event_entry
+380 0.4140 libc-2.5.so libc-2.5.so free
+354 0.3856 libexa.so libexa.so exaComposite
+348 0.3791 libexa.so libexa.so exaTryDriverComposite
+320 0.3486 vmlinux vmlinux __copy_to_user_ll
+296 0.3225 Xorg Xorg miComputeCompositeRegion
+272 0.2963 intel_drv.so intel_drv.so I830Sync
+267 0.2909 libexa.so libexa.so exaPixmapIsOffscreen
+264 0.2876 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols)
+227 0.2473 libc-2.5.so libc-2.5.so _int_free
+212 0.2309 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols)
+208 0.2266 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols)
+203 0.2211 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols)
+187 0.2037 intel_drv.so intel_drv.so i830_get_transformed_coordinates
+185 0.2015 libexa.so libexa.so exaGlyphs
+184 0.2004 libexa.so libexa.so .plt
+176 0.1917 libc-2.5.so libc-2.5.so memcmp
+167 0.1819 libm-2.5.so libm-2.5.so floor
+166 0.1808 libexa.so libexa.so exaDoMigration
+146 0.1591 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+144 0.1569 libnspr4.so libnspr4.so (no symbols)
+140 0.1525 Xorg Xorg miSpriteSourceValidate
+140 0.1525 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols)
+140 0.1525 libmozjs.so libmozjs.so (no symbols)
+133 0.1449 libexa.so libexa.so exaMoveInPixmap
+125 0.1362 libc-2.5.so libc-2.5.so msort_with_tmp
+119 0.1296 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+118 0.1285 libc-2.5.so libc-2.5.so memset
+111 0.1209 libexa.so libexa.so exaGetDrawablePixmap
+107 0.1166 vmlinux vmlinux __d_lookup
+106 0.1155 Xorg Xorg miCompositeSourceValidate
+103 0.1122 intel_drv.so intel_drv.so i830WaitSync
+102 0.1111 libexa.so libexa.so exaWaitSync
+100 0.1089 libfb.so libfb.so fbDoCopy
+99 0.1078 intel_drv.so intel_drv.so .plt
+97 0.1057 Xorg Xorg __i686.get_pc_thunk.bx
+93 0.1013 oprofile.ko oprofile add_sample_entry
+90 0.0980 libexa.so libexa.so exaPixmapDirty
+88 0.0959 Xorg Xorg FindGlyphRef
+88 0.0959 libexa.so libexa.so exaMarkSync
+87 0.0948 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+86 0.0937 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+83 0.0904 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+82 0.0893 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles
+77 0.0839 intel_drv.so intel_drv.so intel_get_pixmap_offset
+74 0.0806 Xorg Xorg XaceHook
+73 0.0795 intel_drv.so intel_drv.so i965_check_composite_texture
+73 0.0795 libgcc_s.so.1 libgcc_s.so.1 (no symbols)
+71 0.0773 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock
+69 0.0752 libexa.so libexa.so exaGetOffscreenPixmap
+68 0.0741 libexa.so libexa.so exaOffscreenAlloc
+67 0.0730 libc-2.5.so libc-2.5.so strstr
+66 0.0719 Xorg Xorg miModifyPixmapHeader
+65 0.0708 libc-2.5.so libc-2.5.so malloc_consolidate
+61 0.0665 Xorg Xorg damageGlyphs
+61 0.0665 libc-2.5.so libc-2.5.so memmove
+60 0.0654 Xorg Xorg ReadRequestFromClient
+54 0.0588 intel_drv.so intel_drv.so i965_check_composite
+53 0.0577 vmlinux vmlinux __link_path_walk
+52 0.0566 libexa.so libexa.so exaGetDrawableDeltas
+50 0.0545 Xorg Xorg .plt
+50 0.0545 vmlinux vmlinux __copy_from_user_ll
+47 0.0512 libexa.so libexa.so exaCopyNtoN
+45 0.0490 libexa.so libexa.so exaPixmapIsPinned
+44 0.0479 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+44 0.0479 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+41 0.0447 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+41 0.0447 vmlinux vmlinux _atomic_dec_and_lock
+40 0.0436 Xorg Xorg SecurityLookupIDByType
+39 0.0425 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+38 0.0414 intel_drv.so intel_drv.so I830EXASolid
+38 0.0414 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects
+37 0.0403 Xorg Xorg Dispatch
+36 0.0392 Xorg Xorg SecurityCheckResourceIDAccess
+36 0.0392 intel_drv.so intel_drv.so IntelEmitInvarientState
+35 0.0381 libexa.so libexa.so exaGetPixmapOffset
+34 0.0370 libfb.so libfb.so fbValidateGC
+34 0.0370 vmlinux vmlinux mwait_idle_with_hints
+33 0.0359 libexa.so libexa.so exaCopyArea
+32 0.0349 intel_drv.so intel_drv.so i965_get_card_format
+30 0.0327 Xorg Xorg ProcRenderCompositeGlyphs
+30 0.0327 Xorg Xorg _CallCallbacks
+29 0.0316 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols)
+28 0.0305 intel_drv.so intel_drv.so i965_get_dest_format
+28 0.0305 libc-2.5.so libc-2.5.so strlen
+28 0.0305 vmlinux vmlinux memcmp
+27 0.0294 Xorg Xorg CallCallbacks
+27 0.0294 Xorg Xorg FreeResource
+27 0.0294 Xorg Xorg Hash
+27 0.0294 Xorg Xorg miUnion
+27 0.0294 libfb.so libfb.so fbCopyRegion
+27 0.0294 vmlinux vmlinux timer_interrupt
+26 0.0283 libextmod.so libextmod.so XvDestroyPixmap
+25 0.0272 libdri.so libdri.so DRIGetSAREAPrivate
+24 0.0261 Xorg Xorg dixChangeGC
+24 0.0261 jbd.ko jbd journal_add_journal_head
+22 0.0240 Xorg Xorg CompareISOLatin1Lowered
+22 0.0240 Xorg Xorg XaceCatchExtProc
+22 0.0240 jbd.ko jbd do_get_write_access
+21 0.0229 Xorg Xorg damageDamageRegion
+21 0.0229 vmlinux vmlinux __find_get_block
+20 0.0218 Xorg Xorg miComputeCompositeClip
+19 0.0207 intel_drv.so intel_drv.so I830EXASync
+19 0.0207 libexa.so libexa.so exaCreatePixmap
+19 0.0207 libexa.so libexa.so exaPolyFillRect
+19 0.0207 vmlinux vmlinux system_call
+18 0.0196 libm-2.5.so libm-2.5.so cos
+18 0.0196 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+18 0.0196 sysprof_module sysprof_module (no symbols)
+18 0.0196 vmlinux vmlinux kmem_cache_alloc
+17 0.0185 Xorg Xorg damagePolyFillRect
+17 0.0185 libm-2.5.so libm-2.5.so ceil
+17 0.0185 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty
+17 0.0185 vmlinux vmlinux page_fault
+16 0.0174 Xorg Xorg ChangePicture
+16 0.0174 Xorg Xorg PictureGetFilterId
+16 0.0174 Xorg Xorg miGlyphExtents
+16 0.0174 libdri.so libdri.so DRIGetContext
+16 0.0174 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+16 0.0174 vmlinux vmlinux apic_timer_interrupt
+15 0.0163 Xorg Xorg FindGlyph
+15 0.0163 Xorg Xorg damageDestroyPixmap
+15 0.0163 Xorg Xorg miColorRects
+15 0.0163 intel_drv.so intel_drv.so i830MarkSync
+15 0.0163 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+15 0.0163 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+15 0.0163 vmlinux vmlinux unix_stream_sendmsg
+14 0.0153 Xorg Xorg ProcRenderCreatePicture
+14 0.0153 Xorg Xorg SecurityCheckExtAccess
+14 0.0153 jbd.ko jbd journal_put_journal_head
+14 0.0153 libc-2.5.so libc-2.5.so mkdir
+14 0.0153 libexa.so libexa.so __i686.get_pc_thunk.cx
+14 0.0153 vmlinux vmlinux __copy_from_user_ll_nozero
+13 0.0142 Xorg Xorg AllocatePixmap
+13 0.0142 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols)
+13 0.0142 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+13 0.0142 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect
+13 0.0142 vmlinux vmlinux do_lookup
+12 0.0131 Xorg Xorg CreatePicture
+12 0.0131 Xorg Xorg DamageCreate
+12 0.0131 Xorg Xorg __divdi3
+12 0.0131 libfb.so libfb.so __i686.get_pc_thunk.bx
+12 0.0131 vmlinux vmlinux kmem_cache_free
+11 0.0120 ext3.ko ext3 ext3_mark_iloc_dirty
+11 0.0120 libc-2.5.so libc-2.5.so realloc
+11 0.0120 libexa.so libexa.so exaOffscreenFree
+11 0.0120 vmlinux vmlinux hrtimer_run_queues
+10 0.0109 Xorg Xorg DamageRegion
+10 0.0109 Xorg Xorg FreeScratchGC
+10 0.0109 Xorg Xorg ProcRenderDispatch
+10 0.0109 Xorg Xorg ProcRenderFillRectangles
+10 0.0109 Xorg Xorg SetPictureFilter
+10 0.0109 Xorg Xorg SetPictureTransform
+10 0.0109 Xorg Xorg ValidateOnePicture
+10 0.0109 Xorg Xorg Xalloc
+10 0.0109 Xorg Xorg Xfree
+10 0.0109 intel_drv.so intel_drv.so I830EXAPrepareSolid
+10 0.0109 jbd.ko jbd journal_dirty_metadata
+10 0.0109 libc-2.5.so libc-2.5.so _int_realloc
+10 0.0109 libfb.so libfb.so fbCreatePixmap
+10 0.0109 libfb.so libfb.so fbCreatePixmapBpp
+10 0.0109 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+10 0.0109 vmlinux vmlinux __alloc_skb
+10 0.0109 vmlinux vmlinux schedule
+10 0.0109 vmlinux vmlinux strncpy_from_user
+9 0.0098 Xorg Xorg Ones
+9 0.0098 Xorg Xorg ProcCreatePixmap
+9 0.0098 Xorg Xorg damageChangeGC
+9 0.0098 Xorg Xorg miCompositeRects
+9 0.0098 Xorg Xorg miValidatePicture
+9 0.0098 ext3.ko ext3 ext3_new_inode
+9 0.0098 libc-2.5.so libc-2.5.so strcmp
+9 0.0098 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+9 0.0098 vmlinux vmlinux __brelse
+9 0.0098 vmlinux vmlinux __insert_inode_hash
+9 0.0098 vmlinux vmlinux cache_alloc_refill
+9 0.0098 vmlinux vmlinux permission
+8 0.0087 Xorg Xorg AddResource
+8 0.0087 Xorg Xorg FreePicture
+8 0.0087 Xorg Xorg GetScratchGC
+8 0.0087 Xorg Xorg PictureFindFilter
+8 0.0087 Xorg Xorg SecurityLookupIDByClass
+8 0.0087 Xorg Xorg SetPictureToDefaults
+8 0.0087 Xorg Xorg miLineFixedX
+8 0.0087 Xorg Xorg miRectsToRegion
+8 0.0087 jbd.ko jbd journal_commit_transaction
+8 0.0087 jbd.ko jbd journal_file_buffer
+8 0.0087 jbd.ko jbd journal_write_metadata_buffer
+8 0.0087 libdri.so libdri.so __i686.get_pc_thunk.cx
+8 0.0087 libexa.so libexa.so exaValidateGC
+8 0.0087 vmlinux vmlinux __follow_mount
+8 0.0087 vmlinux vmlinux ahci_qc_issue
+8 0.0087 vmlinux vmlinux dput
+8 0.0087 vmlinux vmlinux free_block
+8 0.0087 vmlinux vmlinux irq_entries_start
+8 0.0087 vmlinux vmlinux kunmap_atomic
+8 0.0087 vmlinux vmlinux smp_apic_timer_interrupt
+7 0.0076 Xorg Xorg LegalNewID
+7 0.0076 Xorg Xorg ProcRenderChangePicture
+7 0.0076 Xorg Xorg damageValidateGC
+7 0.0076 Xorg Xorg miRegionValidate
+7 0.0076 ext3.ko ext3 __ext3_get_inode_loc
+7 0.0076 ext3.ko ext3 ext3_get_blocks_handle
+7 0.0076 jbd.ko jbd journal_cancel_revoke
+7 0.0076 libc-2.5.so libc-2.5.so gettimeofday
+7 0.0076 libexa.so libexa.so exaFillRegionSolid
+7 0.0076 libexa.so libexa.so exaGetPixmapPitch
+7 0.0076 libm-2.5.so libm-2.5.so sin
+7 0.0076 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+7 0.0076 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+7 0.0076 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+7 0.0076 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate
+7 0.0076 libplds4.so libplds4.so (no symbols)
+7 0.0076 vmlinux vmlinux dnotify_parent
+7 0.0076 vmlinux vmlinux find_busiest_group
+7 0.0076 vmlinux vmlinux find_get_page
+7 0.0076 vmlinux vmlinux run_timer_softirq
+7 0.0076 vmlinux vmlinux unlock_buffer
+6 0.0065 Xorg Xorg ProcFreePixmap
+6 0.0065 Xorg Xorg damageComposite
+6 0.0065 Xorg Xorg dixLookupDrawable
+6 0.0065 Xorg Xorg getDrawableDamageRef
+6 0.0065 Xorg Xorg miChangeGC
+6 0.0065 Xorg Xorg miIntersect
+6 0.0065 libpthread-2.5.so libpthread-2.5.so pthread_getspecific
+6 0.0065 vmlinux vmlinux __find_get_block_slow
+6 0.0065 vmlinux vmlinux __handle_mm_fault
+6 0.0065 vmlinux vmlinux ahci_interrupt
+6 0.0065 vmlinux vmlinux find_get_pages_tag
+6 0.0065 vmlinux vmlinux radix_tree_tag_clear
+6 0.0065 vmlinux vmlinux unmap_vmas
+5 0.0054 Xorg Xorg ChangeGC
+5 0.0054 Xorg Xorg DamageSetReportAfterOp
+5 0.0054 Xorg Xorg GetExtensionEntry
+5 0.0054 Xorg Xorg XaceCatchDispatchProc
+5 0.0054 Xorg Xorg miBSCheapValidateGC
+5 0.0054 Xorg Xorg miRegionCreate
+5 0.0054 Xorg Xorg miRegionDestroy
+5 0.0054 Xorg Xorg miRegionInit
+5 0.0054 Xorg Xorg miRenderColorToPixel
+5 0.0054 jbd.ko jbd __journal_file_buffer
+5 0.0054 jbd.ko jbd __journal_remove_journal_head
+5 0.0054 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+5 0.0054 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+5 0.0054 vmlinux vmlinux __wake_up_bit
+5 0.0054 vmlinux vmlinux d_alloc
+5 0.0054 vmlinux vmlinux do_softirq
+5 0.0054 vmlinux vmlinux fget_light
+5 0.0054 vmlinux vmlinux get_page_from_freelist
+5 0.0054 vmlinux vmlinux rebalance_tick
+5 0.0054 vmlinux vmlinux release_pages
+5 0.0054 vmlinux vmlinux skb_queue_head
+5 0.0054 vmlinux vmlinux sock_def_readable
+4 0.0044 Xorg Xorg AllocatePicture
+4 0.0044 Xorg Xorg CompositePicture
+4 0.0044 Xorg Xorg DamageReportDamage
+4 0.0044 Xorg Xorg FlushClientCaches
+4 0.0044 Xorg Xorg ProcRenderSetPictureFilter
+4 0.0044 Xorg Xorg miChangeClip
+4 0.0044 Xorg Xorg miDestroyPicture
+4 0.0044 ext3.ko ext3 ext3_find_entry
+4 0.0044 jbd.ko jbd __journal_temp_unlink_buffer
+4 0.0044 jbd.ko jbd start_this_handle
+4 0.0044 libc-2.5.so libc-2.5.so bsearch
+4 0.0044 libc-2.5.so libc-2.5.so qsort
+4 0.0044 libc-2.5.so libc-2.5.so strchr
+4 0.0044 libexa.so libexa.so exaDestroyPixmap
+4 0.0044 libexa.so libexa.so exaOpReadsDestination
+4 0.0044 libfb.so libfb.so .plt
+4 0.0044 libfb.so libfb.so image_from_pict
+4 0.0044 libm-2.5.so libm-2.5.so floorf
+4 0.0044 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+4 0.0044 vmlinux vmlinux __block_prepare_write
+4 0.0044 vmlinux vmlinux __getblk
+4 0.0044 vmlinux vmlinux __kmalloc
+4 0.0044 vmlinux vmlinux __wake_up
+4 0.0044 vmlinux vmlinux bit_waitqueue
+4 0.0044 vmlinux vmlinux cond_resched
+4 0.0044 vmlinux vmlinux do_path_lookup
+4 0.0044 vmlinux vmlinux do_timer
+4 0.0044 vmlinux vmlinux find_next_zero_bit
+4 0.0044 vmlinux vmlinux internal_add_timer
+4 0.0044 vmlinux vmlinux raise_softirq
+4 0.0044 vmlinux vmlinux restore_nocheck
+4 0.0044 vmlinux vmlinux sched_clock
+4 0.0044 vmlinux vmlinux sock_aio_write
+4 0.0044 vmlinux vmlinux sock_poll
+4 0.0044 vmlinux vmlinux sys_mkdirat
+4 0.0044 vmlinux vmlinux vfs_permission
+3 0.0033 Xorg Xorg DamageDestroy
+3 0.0033 Xorg Xorg DamageEmpty
+3 0.0033 Xorg Xorg ValidateGC
+3 0.0033 Xorg Xorg ValidatePicture
+3 0.0033 Xorg Xorg damageDamageBox
+3 0.0033 Xorg Xorg damageReportPostOp
+3 0.0033 Xorg Xorg miBSCheapChangeClip
+3 0.0033 Xorg Xorg miTrapezoidBounds
+3 0.0033 bash bash (no symbols)
+3 0.0033 ext3.ko ext3 ext3_get_branch
+3 0.0033 ext3.ko ext3 ext3_mkdir
+3 0.0033 ext3.ko ext3 ext3_test_allocatable
+3 0.0033 ext3.ko ext3 ext3_truncate
+3 0.0033 ext3.ko ext3 ext3_try_to_allocate
+3 0.0033 intel_drv.so intel_drv.so i830_done_composite
+3 0.0033 jbd.ko jbd journal_clean_one_cp_list
+3 0.0033 jbd.ko jbd journal_get_undo_access
+3 0.0033 libc-2.5.so libc-2.5.so __read_nocancel
+3 0.0033 libc-2.5.so libc-2.5.so strcat
+3 0.0033 libexa.so libexa.so ExaOffscreenMerge
+3 0.0033 libexa.so libexa.so exaPolySegment
+3 0.0033 libm-2.5.so libm-2.5.so tan
+3 0.0033 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+3 0.0033 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect
+3 0.0033 vmlinux vmlinux __block_write_full_page
+3 0.0033 vmlinux vmlinux __do_softirq
+3 0.0033 vmlinux vmlinux __make_request
+3 0.0033 vmlinux vmlinux __mark_inode_dirty
+3 0.0033 vmlinux vmlinux __set_page_dirty_buffers
+3 0.0033 vmlinux vmlinux __set_page_dirty_nobuffers
+3 0.0033 vmlinux vmlinux __switch_to
+3 0.0033 vmlinux vmlinux arch_get_unmapped_area_topdown
+3 0.0033 vmlinux vmlinux blk_recount_segments
+3 0.0033 vmlinux vmlinux blk_rq_map_sg
+3 0.0033 vmlinux vmlinux block_read_full_page
+3 0.0033 vmlinux vmlinux block_write_full_page
+3 0.0033 vmlinux vmlinux cache_reap
+3 0.0033 vmlinux vmlinux d_instantiate
+3 0.0033 vmlinux vmlinux device_not_available
+3 0.0033 vmlinux vmlinux do_gettimeofday
+3 0.0033 vmlinux vmlinux do_mpage_readpage
+3 0.0033 vmlinux vmlinux do_page_fault
+3 0.0033 vmlinux vmlinux do_readv_writev
+3 0.0033 vmlinux vmlinux find_vma_prev
+3 0.0033 vmlinux vmlinux free_pages_and_swap_cache
+3 0.0033 vmlinux vmlinux get_task_mm
+3 0.0033 vmlinux vmlinux getname
+3 0.0033 vmlinux vmlinux handle_edge_irq
+3 0.0033 vmlinux vmlinux link_path_walk
+3 0.0033 vmlinux vmlinux mutex_lock
+3 0.0033 vmlinux vmlinux number
+3 0.0033 vmlinux vmlinux open_namei
+3 0.0033 vmlinux vmlinux rcu_pending
+3 0.0033 vmlinux vmlinux read_tsc
+3 0.0033 vmlinux vmlinux run_posix_cpu_timers
+3 0.0033 vmlinux vmlinux rw_verify_area
+3 0.0033 vmlinux vmlinux sys_read
+3 0.0033 vmlinux vmlinux syscall_exit
+3 0.0033 vmlinux vmlinux test_set_page_writeback
+3 0.0033 vmlinux vmlinux unix_stream_recvmsg
+2 0.0022 Xorg Xorg AllocateGC
+2 0.0022 Xorg Xorg FreeScratchPixmapHeader
+2 0.0022 Xorg Xorg ProcRenderFreePicture
+2 0.0022 Xorg Xorg ProcRenderSetPictureTransform
+2 0.0022 Xorg Xorg SetClipRects
+2 0.0022 Xorg Xorg WaitForSomething
+2 0.0022 Xorg Xorg _XSERVTransSocketRead
+2 0.0022 Xorg Xorg __i686.get_pc_thunk.cx
+2 0.0022 Xorg Xorg damageRemoveDamage
+2 0.0022 Xorg Xorg dixLookupGC
+2 0.0022 Xorg Xorg miCreatePicture
+2 0.0022 Xorg Xorg miTranslateRegion
+2 0.0022 ext3.ko ext3 ext3_check_dir_entry
+2 0.0022 ext3.ko ext3 ext3_get_group_desc
+2 0.0022 ext3.ko ext3 ext3_lookup
+2 0.0022 ext3.ko ext3 ext3_new_blocks
+2 0.0022 ext3.ko ext3 ext3_orphan_del
+2 0.0022 jbd.ko jbd journal_get_create_access
+2 0.0022 jbd.ko jbd journal_stop
+2 0.0022 jbd.ko jbd journal_unfile_buffer
+2 0.0022 ld-2.5.so ld-2.5.so strcmp
+2 0.0022 libc-2.5.so libc-2.5.so _IO_default_xsputn
+2 0.0022 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+2 0.0022 libc-2.5.so libc-2.5.so _IO_vfscanf
+2 0.0022 libc-2.5.so libc-2.5.so __find_specmb
+2 0.0022 libc-2.5.so libc-2.5.so _dl_addr
+2 0.0022 libc-2.5.so libc-2.5.so ftruncate
+2 0.0022 libc-2.5.so libc-2.5.so fwrite
+2 0.0022 libc-2.5.so libc-2.5.so poll
+2 0.0022 libc-2.5.so libc-2.5.so vfprintf
+2 0.0022 libexa.so libexa.so exaRasterizeTrapezoid
+2 0.0022 libfb.so libfb.so __i686.get_pc_thunk.cx
+2 0.0022 libfb.so libfb.so fbGetGCPrivateIndex
+2 0.0022 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+2 0.0022 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents
+2 0.0022 libpthread-2.5.so libpthread-2.5.so __write_nocancel
+2 0.0022 libpthread-2.5.so libpthread-2.5.so write
+2 0.0022 uhci-hcd.ko uhci_hcd uhci_scan_schedule
+2 0.0022 vmlinux vmlinux __bread
+2 0.0022 vmlinux vmlinux __dec_zone_page_state
+2 0.0022 vmlinux vmlinux __generic_file_aio_write_nolock
+2 0.0022 vmlinux vmlinux __inc_zone_page_state
+2 0.0022 vmlinux vmlinux __mod_timer
+2 0.0022 vmlinux vmlinux __rcu_pending
+2 0.0022 vmlinux vmlinux __scsi_done
+2 0.0022 vmlinux vmlinux ahci_scr_read
+2 0.0022 vmlinux vmlinux alloc_inode
+2 0.0022 vmlinux vmlinux copy_from_user
+2 0.0022 vmlinux vmlinux cpu_idle
+2 0.0022 vmlinux vmlinux do_mmap_pgoff
+2 0.0022 vmlinux vmlinux do_munmap
+2 0.0022 vmlinux vmlinux do_notify_resume
+2 0.0022 vmlinux vmlinux do_sys_ftruncate
+2 0.0022 vmlinux vmlinux end_bio_bh_io_sync
+2 0.0022 vmlinux vmlinux end_page_writeback
+2 0.0022 vmlinux vmlinux fget
+2 0.0022 vmlinux vmlinux filemap_nopage
+2 0.0022 vmlinux vmlinux generic_writepages
+2 0.0022 vmlinux vmlinux get_unused_fd
+2 0.0022 vmlinux vmlinux get_write_access
+2 0.0022 vmlinux vmlinux iret_exc
+2 0.0022 vmlinux vmlinux irq_exit
+2 0.0022 vmlinux vmlinux ll_back_merge_fn
+2 0.0022 vmlinux vmlinux mark_page_accessed
+2 0.0022 vmlinux vmlinux memcpy_fromiovec
+2 0.0022 vmlinux vmlinux move_page_tables
+2 0.0022 vmlinux vmlinux note_interrupt
+2 0.0022 vmlinux vmlinux page_waitqueue
+2 0.0022 vmlinux vmlinux percpu_counter_mod
+2 0.0022 vmlinux vmlinux put_page
+2 0.0022 vmlinux vmlinux ret_from_exception
+2 0.0022 vmlinux vmlinux scheduler_tick
+2 0.0022 vmlinux vmlinux scsi_run_queue
+2 0.0022 vmlinux vmlinux search_extable
+2 0.0022 vmlinux vmlinux skb_dequeue
+2 0.0022 vmlinux vmlinux sync_sb_inodes
+2 0.0022 vmlinux vmlinux sys_munmap
+2 0.0022 vmlinux vmlinux vfs_mkdir
+2 0.0022 vmlinux vmlinux vfs_write
+2 0.0022 vmlinux vmlinux wake_up_bit
+1 0.0011 Xorg Xorg CompositeGlyphs
+1 0.0011 Xorg Xorg CompositeRects
+1 0.0011 Xorg Xorg CreateGC
+1 0.0011 Xorg Xorg DamageRegister
+1 0.0011 Xorg Xorg FreeGC
+1 0.0011 Xorg Xorg GetScratchPixmapHeader
+1 0.0011 Xorg Xorg GetTimeInMillis
+1 0.0011 Xorg Xorg ProcChangeGC
+1 0.0011 Xorg Xorg ProcCopyArea
+1 0.0011 Xorg Xorg ProcPolyFillRectangle
+1 0.0011 Xorg Xorg ProcRenderComposite
+1 0.0011 Xorg Xorg ProcRenderSetPictureClipRectangles
+1 0.0011 Xorg Xorg ProcSetClipRectangles
+1 0.0011 Xorg Xorg QuickSortRects
+1 0.0011 Xorg Xorg VerifyRectOrder
+1 0.0011 Xorg Xorg _XSERVTransRead
+1 0.0011 Xorg Xorg damageChangeClip
+1 0.0011 Xorg Xorg damageInsertDamage
+1 0.0011 Xorg Xorg damagePolySegment
+1 0.0011 Xorg Xorg miBSCheapChangeGC
+1 0.0011 Xorg Xorg miChangePicture
+1 0.0011 Xorg Xorg miChangePictureClip
+1 0.0011 Xorg Xorg miChangePictureFilter
+1 0.0011 Xorg Xorg miChangePictureTransform
+1 0.0011 Xorg Xorg miDestroyClip
+1 0.0011 Xorg Xorg miRegionCopy
+1 0.0011 Xorg Xorg miTrapezoids
+1 0.0011 anon (tgid:28734 range:0xb7f37000-0xb7f38000) Xorg (no symbols)
+1 0.0011 ehci-hcd.ko ehci_hcd ehci_hub_status_data
+1 0.0011 ext3.ko ext3 ext3_block_to_path
+1 0.0011 ext3.ko ext3 ext3_bread
+1 0.0011 ext3.ko ext3 ext3_discard_reservation
+1 0.0011 ext3.ko ext3 ext3_free_data
+1 0.0011 ext3.ko ext3 ext3_get_inode_loc
+1 0.0011 ext3.ko ext3 ext3_getblk
+1 0.0011 ext3.ko ext3 ext3_mark_inode_dirty
+1 0.0011 ext3.ko ext3 ext3_reserve_inode_write
+1 0.0011 ext3.ko ext3 ext3_set_inode_flags
+1 0.0011 ext3.ko ext3 ext3_try_to_allocate_with_rsv
+1 0.0011 ext3.ko ext3 read_block_bitmap
+1 0.0011 ext3.ko ext3 walk_page_buffers
+1 0.0011 gconfd-2 gconfd-2 (no symbols)
+1 0.0011 jbd.ko jbd __journal_refile_buffer
+1 0.0011 jbd.ko jbd __journal_remove_checkpoint
+1 0.0011 jbd.ko jbd find_revoke_record
+1 0.0011 jbd.ko jbd journal_dirty_data
+1 0.0011 jbd.ko jbd journal_get_write_access
+1 0.0011 jbd.ko jbd journal_invalidatepage
+1 0.0011 jbd.ko jbd journal_remove_journal_head
+1 0.0011 jbd.ko jbd journal_start
+1 0.0011 jbd.ko jbd journal_switch_revoke_table
+1 0.0011 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+1 0.0011 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+1 0.0011 ld-2.5.so ld-2.5.so _dl_relocate_object
+1 0.0011 libORBit-2.so.0.1.0 libORBit-2.so.0.1.0 (no symbols)
+1 0.0011 libc-2.5.so libc-2.5.so _IO_do_write@@GLIBC_2.1
+1 0.0011 libc-2.5.so libc-2.5.so _IO_doallocbuf
+1 0.0011 libc-2.5.so libc-2.5.so _IO_file_open
+1 0.0011 libc-2.5.so libc-2.5.so _IO_old_init
+1 0.0011 libc-2.5.so libc-2.5.so _IO_str_init_static_internal
+1 0.0011 libc-2.5.so libc-2.5.so _IO_unsave_markers
+1 0.0011 libc-2.5.so libc-2.5.so ____strtoul_l_internal
+1 0.0011 libc-2.5.so libc-2.5.so __close_nocancel
+1 0.0011 libc-2.5.so libc-2.5.so __fxstat64@GLIBC_2.1
+1 0.0011 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx
+1 0.0011 libc-2.5.so libc-2.5.so __xstat
+1 0.0011 libc-2.5.so libc-2.5.so __xstat32_conv
+1 0.0011 libc-2.5.so libc-2.5.so _itoa_word
+1 0.0011 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+1 0.0011 libc-2.5.so libc-2.5.so fgets
+1 0.0011 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+1 0.0011 libc-2.5.so libc-2.5.so mbrtowc
+1 0.0011 libc-2.5.so libc-2.5.so memchr
+1 0.0011 libc-2.5.so libc-2.5.so mremap
+1 0.0011 libc-2.5.so libc-2.5.so strcpy
+1 0.0011 libc-2.5.so libc-2.5.so vsscanf
+1 0.0011 libexa.so libexa.so exaFinishAccess
+1 0.0011 libexa.so libexa.so exaPrepareAccess
+1 0.0011 libfb.so libfb.so fbDestroyPixmap
+1 0.0011 libfb.so libfb.so fbRasterizeTrapezoid
+1 0.0011 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+1 0.0011 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_repeat
+1 0.0011 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+1 0.0011 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+1 0.0011 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.cx
+1 0.0011 libpthread-2.5.so libpthread-2.5.so __read_nocancel
+1 0.0011 libpthread-2.5.so libpthread-2.5.so pthread_cond_signal@@GLIBC_2.3.2
+1 0.0011 libpthread-2.5.so libpthread-2.5.so pthread_equal
+1 0.0011 libpthread-2.5.so libpthread-2.5.so pthread_self
+1 0.0011 libpthread-2.5.so libpthread-2.5.so read
+1 0.0011 uhci-hcd.ko uhci_hcd any_ports_active
+1 0.0011 vmlinux vmlinux __add_entropy_words
+1 0.0011 vmlinux vmlinux __alloc_pages
+1 0.0011 vmlinux vmlinux __ata_qc_complete
+1 0.0011 vmlinux vmlinux __d_path
+1 0.0011 vmlinux vmlinux __end_that_request_first
+1 0.0011 vmlinux vmlinux __fput
+1 0.0011 vmlinux vmlinux __inc_zone_state
+1 0.0011 vmlinux vmlinux __pagevec_lru_add
+1 0.0011 vmlinux vmlinux __queue_work
+1 0.0011 vmlinux vmlinux __remove_from_page_cache
+1 0.0011 vmlinux vmlinux __wake_up_common
+1 0.0011 vmlinux vmlinux __writeback_single_inode
+1 0.0011 vmlinux vmlinux account_system_time
+1 0.0011 vmlinux vmlinux ahci_fill_cmd_slot
+1 0.0011 vmlinux vmlinux ahci_qc_prep
+1 0.0011 vmlinux vmlinux alloc_page_buffers
+1 0.0011 vmlinux vmlinux arch_unmap_area_topdown
+1 0.0011 vmlinux vmlinux as_add_rq_rb
+1 0.0011 vmlinux vmlinux as_merge
+1 0.0011 vmlinux vmlinux as_put_io_context
+1 0.0011 vmlinux vmlinux ata_qc_new_init
+1 0.0011 vmlinux vmlinux ata_scsi_qc_complete
+1 0.0011 vmlinux vmlinux ata_scsi_qc_new
+1 0.0011 vmlinux vmlinux ata_scsi_rw_xlat
+1 0.0011 vmlinux vmlinux atomic_notifier_call_chain
+1 0.0011 vmlinux vmlinux bd_set_size
+1 0.0011 vmlinux vmlinux bio_alloc
+1 0.0011 vmlinux vmlinux bio_alloc_bioset
+1 0.0011 vmlinux vmlinux bio_endio
+1 0.0011 vmlinux vmlinux bio_free
+1 0.0011 vmlinux vmlinux bio_phys_segments
+1 0.0011 vmlinux vmlinux blk_done_softirq
+1 0.0011 vmlinux vmlinux block_prepare_write
+1 0.0011 vmlinux vmlinux bmap
+1 0.0011 vmlinux vmlinux cache_flusharray
+1 0.0011 vmlinux vmlinux can_vma_merge_before
+1 0.0011 vmlinux vmlinux cdrom_ioctl
+1 0.0011 vmlinux vmlinux clear_bdi_congested
+1 0.0011 vmlinux vmlinux clocksource_get_next
+1 0.0011 vmlinux vmlinux convert_fxsr_from_user
+1 0.0011 vmlinux vmlinux copy_process
+1 0.0011 vmlinux vmlinux cp_new_stat64
+1 0.0011 vmlinux vmlinux create_empty_buffers
+1 0.0011 vmlinux vmlinux current_fs_time
+1 0.0011 vmlinux vmlinux current_tick_length
+1 0.0011 vmlinux vmlinux do_sync_read
+1 0.0011 vmlinux vmlinux do_sys_open
+1 0.0011 vmlinux vmlinux do_sys_poll
+1 0.0011 vmlinux vmlinux do_wp_page
+1 0.0011 vmlinux vmlinux dummy_inode_permission
+1 0.0011 vmlinux vmlinux end_buffer_async_write
+1 0.0011 vmlinux vmlinux expand_files
+1 0.0011 vmlinux vmlinux file_ra_state_init
+1 0.0011 vmlinux vmlinux find_lock_page
+1 0.0011 vmlinux vmlinux find_next_bit
+1 0.0011 vmlinux vmlinux find_or_create_page
+1 0.0011 vmlinux vmlinux flush_cpu_workqueue
+1 0.0011 vmlinux vmlinux flush_tlb_mm
+1 0.0011 vmlinux vmlinux flush_tlb_page
+1 0.0011 vmlinux vmlinux fput
+1 0.0011 vmlinux vmlinux generic_file_mmap
+1 0.0011 vmlinux vmlinux generic_fillattr
+1 0.0011 vmlinux vmlinux get_empty_filp
+1 0.0011 vmlinux vmlinux get_index
+1 0.0011 vmlinux vmlinux handle_IRQ_event
+1 0.0011 vmlinux vmlinux hrtimer_forward
+1 0.0011 vmlinux vmlinux inc_zone_page_state
+1 0.0011 vmlinux vmlinux init_buffer
+1 0.0011 vmlinux vmlinux inode_add_bytes
+1 0.0011 vmlinux vmlinux inode_setattr
+1 0.0011 vmlinux vmlinux inotify_inode_queue_event
+1 0.0011 vmlinux vmlinux ioread32
+1 0.0011 vmlinux vmlinux iput
+1 0.0011 vmlinux vmlinux kfree
+1 0.0011 vmlinux vmlinux kobject_get
+1 0.0011 vmlinux vmlinux kref_get
+1 0.0011 vmlinux vmlinux ll_rw_block
+1 0.0011 vmlinux vmlinux lock_timer_base
+1 0.0011 vmlinux vmlinux lookup_create
+1 0.0011 vmlinux vmlinux math_state_restore
+1 0.0011 vmlinux vmlinux may_expand_vm
+1 0.0011 vmlinux vmlinux memcpy
+1 0.0011 vmlinux vmlinux memcpy_toiovec
+1 0.0011 vmlinux vmlinux mempool_alloc_slab
+1 0.0011 vmlinux vmlinux mempool_free
+1 0.0011 vmlinux vmlinux move_native_irq
+1 0.0011 vmlinux vmlinux no_singlestep
+1 0.0011 vmlinux vmlinux normal_poll
+1 0.0011 vmlinux vmlinux notifier_call_chain
+1 0.0011 vmlinux vmlinux page_address
+1 0.0011 vmlinux vmlinux page_remove_rmap
+1 0.0011 vmlinux vmlinux proc_pid_lookup
+1 0.0011 vmlinux vmlinux profile_hit
+1 0.0011 vmlinux vmlinux queue_delayed_work
+1 0.0011 vmlinux vmlinux radix_tree_insert
+1 0.0011 vmlinux vmlinux radix_tree_lookup
+1 0.0011 vmlinux vmlinux radix_tree_tag_set
+1 0.0011 vmlinux vmlinux rb_insert_color
+1 0.0011 vmlinux vmlinux rcu_process_callbacks
+1 0.0011 vmlinux vmlinux recalc_bh_state
+1 0.0011 vmlinux vmlinux recalc_task_prio
+1 0.0011 vmlinux vmlinux resched_task
+1 0.0011 vmlinux vmlinux restore_all
+1 0.0011 vmlinux vmlinux resume_userspace
+1 0.0011 vmlinux vmlinux rq_init
+1 0.0011 vmlinux vmlinux run_local_timers
+1 0.0011 vmlinux vmlinux run_workqueue
+1 0.0011 vmlinux vmlinux rw_copy_check_uvector
+1 0.0011 vmlinux vmlinux save_i387
+1 0.0011 vmlinux vmlinux scsi_error_handler
+1 0.0011 vmlinux vmlinux scsi_finish_command
+1 0.0011 vmlinux vmlinux scsi_prep_fn
+1 0.0011 vmlinux vmlinux set_page_dirty
+1 0.0011 vmlinux vmlinux skb_queue_tail
+1 0.0011 vmlinux vmlinux sock_alloc_send_skb
+1 0.0011 vmlinux vmlinux submit_bh
+1 0.0011 vmlinux vmlinux submit_bio
+1 0.0011 vmlinux vmlinux sys_gettimeofday
+1 0.0011 vmlinux vmlinux sys_write
+1 0.0011 vmlinux vmlinux sys_writev
+1 0.0011 vmlinux vmlinux syscall_call
+1 0.0011 vmlinux vmlinux task_rq_lock
+1 0.0011 vmlinux vmlinux tcp_transmit_skb
+1 0.0011 vmlinux vmlinux test_clear_page_writeback
+1 0.0011 vmlinux vmlinux try_to_free_buffers
+1 0.0011 vmlinux vmlinux unix_release_sock
+1 0.0011 vmlinux vmlinux unix_write_space
+1 0.0011 vmlinux vmlinux unlink_file_vma
+1 0.0011 vmlinux vmlinux up_read
+1 0.0011 vmlinux vmlinux up_write
+1 0.0011 vmlinux vmlinux update_process_times
+1 0.0011 vmlinux vmlinux vfs_fstat
+1 0.0011 vmlinux vmlinux vfs_read
+1 0.0011 vmlinux vmlinux vm_acct_memory
+1 0.0011 vmlinux vmlinux vma_merge
+1 0.0011 vmlinux vmlinux vmtruncate
+1 0.0011 vmlinux vmlinux wait_for_completion_timeout
+1 0.0011 vmlinux vmlinux wake_up_inode
+1 0.0011 vmlinux vmlinux worker_thread
+1 0.0011 vmlinux vmlinux zone_watermark_ok
--- /dev/null
+Average: 53.730 Raw: 4,4,4,157,4,4,147,5,4,146,4,4,140,4,135,4,4,147,4,5,148,4,4,147,4,127,4,5,146,4,4,145,4,5,145,5,127,4,5,149,4,4,147,4,4,145,4,131,4,4,144,4,4,147,4,5,148,4,4,126,91,5,4,146,5,4,144,5,128,5,4,148,4,4,148,5,4,144,4,133,4,4,144,4,4,148,4,4,147,5,4,126,91,5,4,146,4,4,146,4,128,4,5,148,5,4,147,4,4,146,4,132,4,4,144,4,4,147,5,4,148,4,5,125,92,4,4,146,4,4,145,5,128,4,4,149,4,4,148,4,4,145,4,132,4,5,143,4,5,147,4,4,147,4,5,126,91,4,4,147,5,4,144,5,128,5,4,148,4,4,148,5,4,144,4,133,4,4,143,4,4,149,4,4,147,5,4,126,91,4,4,146,4,5,145,4,128,4,4,149,4,4,147,4,4,146,4,132,4,4,143,5,4,147,4,4,148,5,4,126,91,5,4,146,4,4,146,4,128,4,4,150,4,4,147,4,4,145,4,131,5,4,144,4,4,147,4,5,148,4,4,126,90,3,3,144,3,3,142,4,125,4,4,146,4,4,144,4,4,142,4,129,4,4,141,4,4,144,4,4,145,4,4,124,89,4,4,143,4,4,142,4,126,4,4,145,4,4,145,4
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+1257 23.9794 Xorg GetTimeInMillis
+ 1257 100.000 Xorg GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+898 17.1309 Xorg miComputeCompositeRegion
+ 898 53.8047 Xorg miComputeCompositeRegion [self]
+ 523 31.3361 Xorg miCompositeSourceValidate
+ 94 5.6321 libpixman.so.0.0.0 pixman_region_rectangles
+ 61 3.6549 libpixman.so.0.0.0 pixman_region_n_rects
+ 38 2.2768 Xorg miSpriteSourceValidate
+ 25 1.4979 libpixman.so.0.0.0 pixman_region_not_empty
+ 24 1.4380 Xorg __i686.get_pc_thunk.bx
+ 5 0.2996 libpixman.so.0.0.0 pixman_region_init
+ 1 0.0599 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 38 12.6246 Xorg miComputeCompositeRegion
+ 263 87.3754 Xorg miCompositeSourceValidate
+360 6.8676 Xorg miSpriteSourceValidate
+ 360 100.000 Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 523 100.000 Xorg miComputeCompositeRegion
+255 4.8646 Xorg miCompositeSourceValidate
+ 263 48.4346 Xorg miSpriteSourceValidate
+ 255 46.9613 Xorg miCompositeSourceValidate [self]
+ 25 4.6041 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.9615 Xorg CreatePicture
+ 1 0.9615 Xorg SetPictureToDefaults
+ 1 0.9615 Xorg ProcRenderSetPictureFilter
+ 1 0.9615 Xorg ValidatePicture
+ 1 0.9615 Xorg ValidateOnePicture
+ 1 0.9615 Xorg ProcRenderFillRectangles
+ 1 0.9615 Xorg miValidatePicture
+ 1 0.9615 Xorg miDestroyPicture
+ 1 0.9615 Xorg ProcRenderFreePicture
+ 1 0.9615 Xorg XaceCatchExtProc
+ 1 0.9615 Xorg miRegionCreate
+ 1 0.9615 Xorg miChangeClip
+ 1 0.9615 Xorg miDestroyClip
+ 1 0.9615 Xorg GetScratchGC
+ 1 0.9615 Xorg DamageDestroy
+ 1 0.9615 Xorg damagePolySegment
+ 1 0.9615 Xorg ProcFreePixmap
+ 1 0.9615 Xorg FreeGC
+ 2 1.9231 Xorg ProcRenderCreatePicture
+ 2 1.9231 Xorg dixLookupDrawable
+ 2 1.9231 Xorg FreeResource
+ 3 2.8846 Xorg damageDamageRegion
+ 3 2.8846 Xorg FreePicture
+ 3 2.8846 Xorg XaceCatchDispatchProc
+ 3 2.8846 Xorg CallCallbacks
+ 3 2.8846 Xorg Dispatch
+ 3 2.8846 Xorg SecurityLookupIDByType
+ 4 3.8462 Xorg ProcRenderDispatch
+ 4 3.8462 Xorg ProcRenderCompositeGlyphs
+ 5 4.8077 Xorg _CallCallbacks
+ 24 23.0769 Xorg miComputeCompositeRegion
+ 25 24.0385 Xorg miCompositeSourceValidate
+230 4.3876 Xorg __i686.get_pc_thunk.bx
+ 230 100.000 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 5 12.1951 Xorg GetScratchPixmapHeader
+ 36 87.8049 Xorg damageGlyphs
+211 4.0252 Xorg miModifyPixmapHeader
+ 211 100.000 Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 1 9.0909 Xorg AddResource
+ 1 9.0909 Xorg miComputeCompositeClip
+ 1 9.0909 Xorg miRegionDestroy
+ 1 9.0909 Xorg FreePicture
+ 1 9.0909 Xorg damageDamageRegion
+ 2 18.1818 Xorg AllocatePicture
+ 4 36.3636 Xorg miRegionCreate
+176 3.3575 Xorg .plt
+ 176 100.000 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 2 0.8696 Xorg ProcRenderFillRectangles
+ 7 3.0435 Xorg XaceCatchDispatchProc
+ 10 4.3478 Xorg main
+ 11 4.7826 Xorg dixLookupDrawable
+ 16 6.9565 Xorg SecurityLookupIDByClass
+ 45 19.5652 Xorg XaceCatchExtProc
+ 46 20.0000 Xorg Dispatch
+ 93 40.4348 Xorg SecurityLookupIDByType
+111 2.1175 Xorg XaceHook
+ 111 48.2609 Xorg XaceHook [self]
+ 102 44.3478 Xorg CallCallbacks
+ 17 7.3913 Xorg _CallCallbacks
+-------------------------------------------------------------------------------
+ 7 6.6667 Xorg ProcRenderCompositeGlyphs
+ 98 93.3333 Xorg FindGlyph
+105 2.0031 Xorg FindGlyphRef
+ 105 100.000 Xorg FindGlyphRef [self]
+-------------------------------------------------------------------------------
+ 3 1.0989 Xorg damageDamageBox
+ 21 7.6923 Xorg damageDamageRegion
+ 249 91.2088 Xorg DamageReportDamage
+105 2.0031 Xorg miUnion
+ 3906 96.0886 libpixman.so.0.0.0 pixman_region_union
+ 105 2.5830 Xorg miUnion [self]
+ 23 0.5658 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 17 0.4182 libpixman.so.0.0.0 pixman_region_copy
+ 11 0.2706 libpixman.so.0.0.0 pixman_op
+ 3 0.0738 libpixman.so.0.0.0 .plt
+-------------------------------------------------------------------------------
+ 5 0.0088 Xorg ProcRenderCompositeGlyphs
+ 56812 99.9912 Xorg CompositeGlyphs
+92 1.7551 Xorg damageGlyphs
+ 56465 99.3682 libexa.so exaGlyphs
+ 123 0.2165 Xorg damageReportPostOp
+ 92 0.1619 Xorg damageGlyphs [self]
+ 36 0.0634 Xorg miModifyPixmapHeader
+ 32 0.0563 libexa.so exaCopyArea
+ 20 0.0352 Xorg damageDamageBox
+ 12 0.0211 libexa.so .plt
+ 10 0.0176 libexa.so exaComposite
+ 9 0.0158 libexa.so exaPixmapDirty
+ 6 0.0106 Xorg FreeScratchGC
+ 4 0.0070 Xorg getDrawableDamageRef
+ 4 0.0070 Xorg GetScratchGC
+ 2 0.0035 Xorg FreePicture
+ 2 0.0035 Xorg FreeScratchPixmapHeader
+ 2 0.0035 Xorg ValidatePicture
+ 1 0.0018 Xorg ValidateGC
+ 1 0.0018 Xorg CreatePicture
+ 1 0.0018 libexa.so exaCreatePixmap
+ 1 0.0018 libexa.so exaGetDrawableDeltas
+ 1 0.0018 Xorg GetScratchPixmapHeader
+-------------------------------------------------------------------------------
+ 3 3.5714 Xorg main
+ 81 96.4286 Xorg Dispatch
+77 1.4689 Xorg ReadRequestFromClient
+ 77 91.6667 Xorg ReadRequestFromClient [self]
+ 3 3.5714 libc-2.5.so memmove
+ 2 2.3810 Xorg _XSERVTransRead
+ 2 2.3810 Xorg _XSERVTransSocketRead
+-------------------------------------------------------------------------------
+ 8 3.8462 Xorg ProcFreeGC
+ 69 33.1731 Xorg ProcFreePixmap
+ 131 62.9808 Xorg ProcRenderFreePicture
+60 1.1446 Xorg FreeResource
+ 73 35.0962 Xorg FreePicture
+ 60 28.8462 Xorg FreeResource [self]
+ 40 19.2308 Xorg dixDestroyPixmap
+ 15 7.2115 Xorg Xfree
+ 6 2.8846 Xorg FreeGC
+ 4 1.9231 Xorg Hash
+ 4 1.9231 Xorg FlushClientCaches
+ 3 1.4423 libextmod.so XvDestroyPixmap
+ 2 0.9615 Xorg __i686.get_pc_thunk.bx
+ 1 0.4808 Xorg damageDestroyGC
+-------------------------------------------------------------------------------
+57 1.0874 Xorg DamageEmpty
+ 57 100.000 Xorg DamageEmpty [self]
+-------------------------------------------------------------------------------
+ 1 0.5747 Xorg XaceCatchDispatchProc
+ 3 1.7241 Xorg ProcRenderComposite
+ 3 1.7241 Xorg ProcRenderTrapezoids
+ 6 3.4483 Xorg dixLookupGC
+ 6 3.4483 Xorg ProcRenderDispatch
+ 7 4.0230 Xorg ProcRenderSetPictureClipRectangles
+ 8 4.5977 Xorg ProcRenderChangePicture
+ 10 5.7471 Xorg ProcRenderSetPictureTransform
+ 12 6.8966 Xorg ProcFreePixmap
+ 16 9.1954 Xorg ProcRenderSetPictureFilter
+ 16 9.1954 Xorg ProcRenderFillRectangles
+ 19 10.9195 Xorg ProcRenderCreatePicture
+ 31 17.8161 Xorg ProcRenderFreePicture
+ 36 20.6897 Xorg ProcRenderCompositeGlyphs
+56 1.0683 Xorg SecurityLookupIDByType
+ 93 53.4483 Xorg XaceHook
+ 56 32.1839 Xorg SecurityLookupIDByType [self]
+ 18 10.3448 Xorg Hash
+ 4 2.2989 Xorg CallCallbacks
+ 3 1.7241 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 91200 100.000 Xorg main
+46 0.8775 Xorg Dispatch
+ 90672 99.4102 Xorg XaceCatchExtProc
+ 336 0.3684 Xorg XaceCatchDispatchProc
+ 81 0.0888 Xorg ReadRequestFromClient
+ 46 0.0504 Xorg Dispatch [self]
+ 46 0.0504 Xorg XaceHook
+ 6 0.0066 Xorg WaitForSomething
+ 5 0.0055 Xorg CallCallbacks
+ 3 0.0033 Xorg GetExtensionEntry
+ 3 0.0033 Xorg ProcRenderDispatch
+ 3 0.0033 Xorg __i686.get_pc_thunk.bx
+ 2 0.0022 Xorg ProcessInputEvents
+ 2 0.0022 libc-2.5.so memmove
+ 1 0.0011 Xorg ProcCreateGC
+ 1 0.0011 Xorg ProcPolyFillRectangle
+ 1 0.0011 Xorg ProcFreePixmap
+ 1 0.0011 Xorg _XSERVTransRead
+ 1 0.0011 Xorg FlushAllOutput
+-------------------------------------------------------------------------------
+ 1 0.0018 Xorg XaceCatchExtProc
+ 57023 99.9982 Xorg ProcRenderDispatch
+40 0.7631 Xorg ProcRenderCompositeGlyphs
+ 56825 99.6423 Xorg CompositeGlyphs
+ 111 0.1946 Xorg FindGlyph
+ 40 0.0701 Xorg ProcRenderCompositeGlyphs [self]
+ 36 0.0631 Xorg SecurityLookupIDByType
+ 7 0.0123 Xorg FindGlyphRef
+ 5 0.0088 Xorg damageGlyphs
+ 4 0.0070 Xorg __i686.get_pc_thunk.bx
+ 1 0.0018 Xorg ValidatePicture
+-------------------------------------------------------------------------------
+ 17 20.4819 Xorg XaceHook
+ 66 79.5181 Xorg CallCallbacks
+40 0.7631 Xorg _CallCallbacks
+ 40 48.1928 Xorg _CallCallbacks [self]
+ 30 36.1446 Xorg SecurityCheckResourceIDAccess
+ 8 9.6386 Xorg SecurityCheckExtAccess
+ 5 6.0241 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.8772 Xorg dixLookupDrawable
+ 2 1.7544 Xorg XaceCatchExtProc
+ 4 3.5088 Xorg SecurityLookupIDByType
+ 5 4.3860 Xorg Dispatch
+ 102 89.4737 Xorg XaceHook
+39 0.7440 Xorg CallCallbacks
+ 66 57.8947 Xorg _CallCallbacks
+ 39 34.2105 Xorg CallCallbacks [self]
+ 4 3.5088 Xorg SecurityCheckResourceIDAccess
+ 3 2.6316 Xorg __i686.get_pc_thunk.bx
+ 2 1.7544 Xorg SecurityCheckExtAccess
+-------------------------------------------------------------------------------
+ 3 6.0000 Xorg miColorRects
+ 4 8.0000 Xorg ProcChangeGC
+ 43 86.0000 Xorg ChangeGC
+39 0.7440 Xorg dixChangeGC
+ 39 78.0000 Xorg dixChangeGC [self]
+ 7 14.0000 Xorg damageChangeGC
+ 3 6.0000 Xorg miBSCheapChangeGC
+ 1 2.0000 Xorg damageChangeClip
+-------------------------------------------------------------------------------
+35 0.6677 Xorg DamageRegion
+ 35 100.000 Xorg DamageRegion [self]
+-------------------------------------------------------------------------------
+ 4 11.7647 Xorg CallCallbacks
+ 30 88.2353 Xorg _CallCallbacks
+34 0.6486 Xorg SecurityCheckResourceIDAccess
+ 34 100.000 Xorg SecurityCheckResourceIDAccess [self]
+-------------------------------------------------------------------------------
+ 1 1.2500 Xorg damagePolyFillRect
+ 79 98.7500 Xorg damageDamageBox
+34 0.6486 Xorg damageDamageRegion
+ 34 42.5000 Xorg damageDamageRegion [self]
+ 21 26.2500 Xorg miUnion
+ 15 18.7500 Xorg miIntersect
+ 4 5.0000 libpixman.so.0.0.0 pixman_region_intersect
+ 3 3.7500 Xorg __i686.get_pc_thunk.bx
+ 2 2.5000 Xorg getDrawableDamageRef
+ 1 1.2500 Xorg .plt
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg dixDestroyPixmap
+ 4 80.0000 Xorg FreePicture
+29 0.5532 Xorg damageDestroyPixmap
+ 88 57.1429 libexa.so exaDestroyPixmap
+ 29 18.8312 Xorg damageDestroyPixmap [self]
+ 25 16.2338 Xorg DamageDestroy
+ 5 3.2468 libexa.so exaOffscreenFree
+ 2 1.2987 Xorg Xfree
+ 2 1.2987 libexa.so .plt
+ 2 1.2987 libfb.so fbDestroyPixmap
+ 1 0.6494 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 3.5714 Xorg SecurityLookupIDByClass
+ 1 3.5714 Xorg AddResource
+ 1 3.5714 Xorg ProcRenderSetPictureFilter
+ 1 3.5714 Xorg ProcRenderSetPictureClipRectangles
+ 2 7.1429 Xorg ProcRenderFreePicture
+ 4 14.2857 Xorg FreeResource
+ 18 64.2857 Xorg SecurityLookupIDByType
+28 0.5341 Xorg Hash
+ 28 100.000 Xorg Hash [self]
+-------------------------------------------------------------------------------
+ 3 12.5000 Xorg SetPictureToDefaults
+ 21 87.5000 Xorg PictureGetFilterId
+24 0.4578 Xorg CompareISOLatin1Lowered
+ 24 100.000 Xorg CompareISOLatin1Lowered [self]
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg ProcRenderDispatch
+ 7 33.3333 Xorg CreatePicture
+ 13 61.9048 Xorg ProcRenderChangePicture
+21 0.4006 Xorg ChangePicture
+ 21 100.000 Xorg ChangePicture [self]
+-------------------------------------------------------------------------------
+ 8 6.7227 Xorg ProcRenderDispatch
+ 111 93.2773 Xorg ProcRenderCompositeGlyphs
+21 0.4006 Xorg FindGlyph
+ 98 82.3529 Xorg FindGlyphRef
+ 21 17.6471 Xorg FindGlyph [self]
+-------------------------------------------------------------------------------
+ 3 5.6604 Xorg ValidatePicture
+ 50 94.3396 Xorg ValidateOnePicture
+21 0.4006 Xorg miValidatePicture
+ 28 52.8302 Xorg miRegionCreate
+ 21 39.6226 Xorg miValidatePicture [self]
+ 1 1.8868 Xorg __i686.get_pc_thunk.bx
+ 1 1.8868 Xorg miTranslateRegion
+ 1 1.8868 Xorg miIntersect
+ 1 1.8868 Xorg Xalloc
+-------------------------------------------------------------------------------
+ 1 1.2195 Xorg miDestroyPictureClip
+ 2 2.4390 Xorg damageDestroyPixmap
+ 3 3.6585 Xorg miRegionValidate
+ 4 4.8780 Xorg miDestroyPicture
+ 15 18.2927 Xorg FreeResource
+ 17 20.7317 Xorg FreePicture
+ 17 20.7317 Xorg DamageDestroy
+ 23 28.0488 Xorg miRegionDestroy
+20 0.3815 Xorg Xfree
+ 88 75.8621 libc-2.5.so free
+ 20 17.2414 Xorg Xfree [self]
+ 4 3.4483 libc-2.5.so _int_free
+ 3 2.5862 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.8621 libc-2.5.so munmap
+-------------------------------------------------------------------------------
+19 0.3625 Xorg AllocatePixmap
+ 74 78.7234 Xorg Xalloc
+ 19 20.2128 Xorg AllocatePixmap [self]
+ 1 1.0638 libc-2.5.so malloc
+-------------------------------------------------------------------------------
+ 1 6.2500 Xorg miCompositeRects
+ 2 12.5000 Xorg CompositeRects
+ 6 37.5000 Xorg damageGlyphs
+ 7 43.7500 Xorg miColorRects
+19 0.3625 Xorg FreeScratchGC
+ 19 100.000 Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 1 1.4925 Xorg miCreateAlphaPicture
+ 1 1.4925 Xorg damageGlyphs
+ 2 2.9851 Xorg miCompositeRects
+ 3 4.4776 Xorg ProcRenderDispatch
+ 60 89.5522 Xorg ProcRenderCreatePicture
+18 0.3434 Xorg CreatePicture
+ 43 40.1869 Xorg SetPictureToDefaults
+ 35 32.7103 Xorg AllocatePicture
+ 18 16.8224 Xorg CreatePicture [self]
+ 7 6.5421 Xorg ChangePicture
+ 2 1.8692 Xorg PictureGetFilterId
+ 1 0.9346 Xorg __i686.get_pc_thunk.bx
+ 1 0.9346 Xorg miChangePicture
+-------------------------------------------------------------------------------
+ 1 0.9009 Xorg CompositeRects
+ 2 1.8018 Xorg miCompositeRects
+ 2 1.8018 Xorg damageGlyphs
+ 3 2.7027 Xorg ProcRenderFreePicture
+ 30 27.0270 Xorg miTrapezoids
+ 73 65.7658 Xorg FreeResource
+18 0.3434 Xorg FreePicture
+ 87 52.7273 libextmod.so XvDestroyPixmap
+ 28 16.9697 Xorg miDestroyPicture
+ 18 10.9091 Xorg FreePicture [self]
+ 17 10.3030 Xorg Xfree
+ 4 2.4242 Xorg damageDestroyPixmap
+ 3 1.8182 Xorg __i686.get_pc_thunk.bx
+ 3 1.8182 Xorg miRegionDestroy
+ 3 1.8182 Xorg miDestroyPictureClip
+ 1 0.6061 Xorg .plt
+ 1 0.6061 libextmod.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 4 2.5974 Xorg XaceCatchExtProc
+ 150 97.4026 Xorg ProcRenderDispatch
+17 0.3243 Xorg ProcRenderCreatePicture
+ 60 38.9610 Xorg CreatePicture
+ 30 19.4805 Xorg dixLookupDrawable
+ 19 12.3377 Xorg SecurityLookupIDByType
+ 17 11.0390 Xorg ProcRenderCreatePicture [self]
+ 16 10.3896 Xorg AddResource
+ 4 2.5974 Xorg LegalNewID
+ 4 2.5974 Xorg Ones
+ 2 1.2987 Xorg __i686.get_pc_thunk.bx
+ 1 0.6494 Xorg SecurityLookupIDByClass
+ 1 0.6494 Xorg SetPictureToDefaults
+-------------------------------------------------------------------------------
+ 1 0.0011 Xorg main
+ 90672 99.9989 Xorg Dispatch
+17 0.3243 Xorg XaceCatchExtProc
+ 90586 99.8941 Xorg ProcRenderDispatch
+ 45 0.0496 Xorg XaceHook
+ 17 0.0187 Xorg XaceCatchExtProc [self]
+ 6 0.0066 Xorg ProcRenderSetPictureFilter
+ 4 0.0044 Xorg GetExtensionEntry
+ 4 0.0044 Xorg ProcRenderFreePicture
+ 4 0.0044 Xorg ProcRenderCreatePicture
+ 3 0.0033 Xorg ProcRenderFillRectangles
+ 3 0.0033 Xorg ProcRenderChangePicture
+ 2 0.0022 Xorg __i686.get_pc_thunk.cx
+ 2 0.0022 Xorg CallCallbacks
+ 2 0.0022 Xorg ProcRenderSetPictureTransform
+ 1 0.0011 Xorg __i686.get_pc_thunk.bx
+ 1 0.0011 Xorg ProcRenderCompositeGlyphs
+ 1 0.0011 Xorg ProcRenderTrapezoids
+ 1 0.0011 Xorg ProcRenderSetPictureClipRectangles
+-------------------------------------------------------------------------------
+ 1 5.8824 Xorg DamageRegister
+ 1 5.8824 Xorg damageDamageBox
+ 1 5.8824 Xorg damagePolyFillRect
+ 1 5.8824 Xorg damageComposite
+ 2 11.7647 Xorg damageDamageRegion
+ 3 17.6471 Xorg miColorRects
+ 4 23.5294 Xorg damageReportPostOp
+ 4 23.5294 Xorg damageGlyphs
+17 0.3243 Xorg getDrawableDamageRef
+ 17 100.000 Xorg getDrawableDamageRef [self]
+-------------------------------------------------------------------------------
+ 1 6.2500 Xorg miColorRects
+ 4 25.0000 Xorg ProcRenderCreatePicture
+ 5 31.2500 Xorg ProcRenderChangePicture
+ 6 37.5000 Xorg miRenderColorToPixel
+16 0.3052 Xorg Ones
+ 16 100.000 Xorg Ones [self]
+-------------------------------------------------------------------------------
+16 0.3052 Xorg miComputeCompositeClip
+ 16 59.2593 Xorg miComputeCompositeClip [self]
+ 6 22.2222 Xorg miIntersect
+ 4 14.8148 Xorg miTranslateRegion
+ 1 3.7037 Xorg .plt
+-------------------------------------------------------------------------------
+ 1 3.4483 Xorg miCompositeRects
+ 4 13.7931 Xorg damageGlyphs
+ 24 82.7586 Xorg miColorRects
+15 0.2862 Xorg GetScratchGC
+ 15 48.3871 Xorg GetScratchGC [self]
+ 14 45.1613 Xorg damageChangeClip
+ 1 3.2258 Xorg __i686.get_pc_thunk.bx
+ 1 3.2258 Xorg miBSCheapChangeClip
+-------------------------------------------------------------------------------
+ 9 2.6087 Xorg main
+ 336 97.3913 Xorg Dispatch
+15 0.2862 Xorg XaceCatchDispatchProc
+ 116 33.6232 Xorg ProcCreatePixmap
+ 89 25.7971 Xorg ProcFreePixmap
+ 49 14.2029 Xorg ProcPolySegment
+ 16 4.6377 Xorg ProcSetClipRectangles
+ 15 4.3478 Xorg XaceCatchDispatchProc [self]
+ 12 3.4783 Xorg ProcPolyFillRectangle
+ 8 2.3188 Xorg ProcFreeGC
+ 7 2.0290 Xorg ProcCopyArea
+ 7 2.0290 Xorg XaceHook
+ 6 1.7391 Xorg ProcCreateGC
+ 6 1.7391 Xorg ProcChangeGC
+ 3 0.8696 Xorg dixLookupDrawable
+ 3 0.8696 Xorg __i686.get_pc_thunk.bx
+ 2 0.5797 Xorg dixLookupGC
+ 2 0.5797 Xorg damagePolySegment
+ 1 0.2899 Xorg CreateGC
+ 1 0.2899 Xorg AddResource
+ 1 0.2899 Xorg SecurityLookupIDByType
+ 1 0.2899 Xorg LegalNewID
+-------------------------------------------------------------------------------
+ 2 13.3333 Xorg miTrapezoidBounds
+ 13 86.6667 Xorg miLineFixedX
+15 0.2862 Xorg __divdi3
+ 15 100.000 Xorg __divdi3 [self]
+-------------------------------------------------------------------------------
+ 8 1.7354 Xorg ProcPolyFillRectangle
+ 10 2.1692 Xorg miCompositeRects
+ 34 7.3753 Xorg miCreateAlphaPicture
+ 409 88.7202 Xorg miColorRects
+15 0.2862 Xorg damagePolyFillRect
+ 319 66.3202 libexa.so exaPolyFillRect
+ 71 14.7609 Xorg damageReportPostOp
+ 54 11.2266 Xorg damageDamageBox
+ 15 3.1185 Xorg damagePolyFillRect [self]
+ 7 1.4553 libexa.so exaGetDrawableDeltas
+ 3 0.6237 Xorg miTranslateRegion
+ 2 0.4158 Xorg miIntersect
+ 2 0.4158 Xorg miRectsToRegion
+ 2 0.4158 libexa.so exaFillRegionSolid
+ 1 0.2079 Xorg miRegionDestroy
+ 1 0.2079 Xorg getDrawableDamageRef
+ 1 0.2079 Xorg damageDamageRegion
+ 1 0.2079 libexa.so .plt
+ 1 0.2079 libexa.so __i686.get_pc_thunk.bx
+ 1 0.2079 libexa.so exaGetDrawablePixmap
+-------------------------------------------------------------------------------
+ 1 1.7857 Xorg ProcCreateGC
+ 3 5.3571 Xorg XaceCatchDispatchProc
+ 3 5.3571 Xorg ProcPolySegment
+ 19 33.9286 Xorg ProcCreatePixmap
+ 30 53.5714 Xorg ProcRenderCreatePicture
+15 0.2862 Xorg dixLookupDrawable
+ 27 48.2143 Xorg SecurityLookupIDByClass
+ 15 26.7857 Xorg dixLookupDrawable [self]
+ 11 19.6429 Xorg XaceHook
+ 2 3.5714 Xorg __i686.get_pc_thunk.bx
+ 1 1.7857 Xorg CallCallbacks
+-------------------------------------------------------------------------------
+ 1 0.1658 Xorg CompositeRects
+ 602 99.8342 Xorg miCompositeRects
+15 0.2862 Xorg miColorRects
+ 409 67.8275 Xorg damagePolyFillRect
+ 59 9.7844 Xorg ValidateGC
+ 46 7.6285 Xorg ChangeGC
+ 24 3.9801 Xorg GetScratchGC
+ 15 2.4876 Xorg miColorRects [self]
+ 8 1.3267 Xorg miRegionCreate
+ 8 1.3267 Xorg miRenderColorToPixel
+ 7 1.1609 Xorg FreeScratchGC
+ 6 0.9950 Xorg damageDamageBox
+ 4 0.6633 Xorg damageChangeClip
+ 3 0.4975 libexa.so exaPolyFillRect
+ 3 0.4975 libpixman.so.0.0.0 pixman_region_copy
+ 3 0.4975 Xorg getDrawableDamageRef
+ 3 0.4975 Xorg dixChangeGC
+ 2 0.3317 Xorg damageValidateGC
+ 2 0.3317 Xorg miRegionCopy
+ 1 0.1658 Xorg Ones
+-------------------------------------------------------------------------------
+ 3 0.0033 Xorg Dispatch
+ 90586 99.9967 Xorg XaceCatchExtProc
+14 0.2671 Xorg ProcRenderDispatch
+ 57023 62.9386 Xorg ProcRenderCompositeGlyphs
+ 30723 33.9102 Xorg ProcRenderTrapezoids
+ 1619 1.7870 Xorg ProcRenderComposite
+ 756 0.8344 Xorg ProcRenderFillRectangles
+ 175 0.1932 Xorg ProcRenderFreePicture
+ 150 0.1656 Xorg ProcRenderCreatePicture
+ 43 0.0475 Xorg ProcRenderSetPictureFilter
+ 29 0.0320 Xorg ProcRenderChangePicture
+ 21 0.0232 Xorg ProcRenderSetPictureClipRectangles
+ 19 0.0210 Xorg ProcRenderSetPictureTransform
+ 14 0.0155 Xorg ProcRenderDispatch [self]
+ 8 0.0088 Xorg FindGlyph
+ 6 0.0066 Xorg SecurityLookupIDByType
+ 4 0.0044 Xorg __i686.get_pc_thunk.bx
+ 3 0.0033 Xorg CreatePicture
+ 2 0.0022 Xorg PictOpValid
+ 2 0.0022 Xorg CompositeGlyphs
+ 1 0.0011 Xorg ChangePicture
+ 1 0.0011 Xorg SetPictureClipRects
+ 1 0.0011 Xorg SetPictureTransform
+ 1 0.0011 Xorg CompositeRects
+-------------------------------------------------------------------------------
+ 2 14.2857 Xorg damagePolyFillRect
+ 6 42.8571 Xorg miChangeClip
+ 6 42.8571 Xorg SetPictureClipRects
+14 0.2671 Xorg miRectsToRegion
+ 17 38.6364 Xorg miRegionCreate
+ 14 31.8182 Xorg miRectsToRegion [self]
+ 10 22.7273 Xorg miRegionValidate
+ 2 4.5455 Xorg miRegionInit
+ 1 2.2727 Xorg Xalloc
+-------------------------------------------------------------------------------
+ 1 3.0303 Xorg SetPictureFilter
+ 2 6.0606 Xorg CreatePicture
+ 9 27.2727 Xorg PictureFindFilter
+ 21 63.6364 Xorg SetPictureToDefaults
+12 0.2289 Xorg PictureGetFilterId
+ 21 63.6364 Xorg CompareISOLatin1Lowered
+ 12 36.3636 Xorg PictureGetFilterId [self]
+-------------------------------------------------------------------------------
+ 1 1.0204 Xorg CompositePicture
+ 1 1.0204 Xorg damageCopyArea
+ 6 6.1224 Xorg miColorRects
+ 16 16.3265 Xorg damageComposite
+ 20 20.4082 Xorg damageGlyphs
+ 54 55.1020 Xorg damagePolyFillRect
+12 0.2289 Xorg damageDamageBox
+ 79 80.6122 Xorg damageDamageRegion
+ 12 12.2449 Xorg damageDamageBox [self]
+ 3 3.0612 Xorg miUnion
+ 3 3.0612 Xorg miIntersect
+ 1 1.0204 Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 25 100.000 Xorg miTrapezoidBounds
+12 0.2289 Xorg miLineFixedX
+ 13 52.0000 Xorg __divdi3
+ 12 48.0000 Xorg miLineFixedX [self]
+-------------------------------------------------------------------------------
+ 4 2.2346 Xorg XaceCatchExtProc
+ 175 97.7654 Xorg ProcRenderDispatch
+11 0.2098 Xorg ProcRenderFreePicture
+ 131 73.1844 Xorg FreeResource
+ 31 17.3184 Xorg SecurityLookupIDByType
+ 11 6.1453 Xorg ProcRenderFreePicture [self]
+ 3 1.6760 Xorg FreePicture
+ 2 1.1173 Xorg Hash
+ 1 0.5587 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 3.5714 Xorg ProcRenderCreatePicture
+ 27 96.4286 Xorg dixLookupDrawable
+11 0.2098 Xorg SecurityLookupIDByClass
+ 16 57.1429 Xorg XaceHook
+ 11 39.2857 Xorg SecurityLookupIDByClass [self]
+ 1 3.5714 Xorg Hash
+-------------------------------------------------------------------------------
+ 2 0.2861 Xorg ProcRenderFillRectangles
+ 697 99.7139 Xorg CompositeRects
+11 0.2098 Xorg miCompositeRects
+ 602 86.1230 Xorg miColorRects
+ 51 7.2961 Xorg CompositePicture
+ 11 1.5737 Xorg miCompositeRects [self]
+ 10 1.4306 Xorg damagePolyFillRect
+ 6 0.8584 Xorg ValidateGC
+ 4 0.5722 Xorg ChangeGC
+ 3 0.4292 libextmod.so XvDestroyPixmap
+ 2 0.2861 Xorg miRenderColorToPixel
+ 2 0.2861 Xorg FreePicture
+ 2 0.2861 Xorg CreatePicture
+ 2 0.2861 libexa.so exaCreatePixmap
+ 1 0.1431 Xorg FreeScratchGC
+ 1 0.1431 Xorg GetScratchGC
+ 1 0.1431 Xorg miDestroyPicture
+ 1 0.1431 Xorg PictureMatchFormat
+-------------------------------------------------------------------------------
+11 0.2098 Xorg miGlyphExtents
+ 11 100.000 Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 116 100.000 Xorg XaceCatchDispatchProc
+10 0.1908 Xorg ProcCreatePixmap
+ 69 59.4828 libexa.so exaCreatePixmap
+ 19 16.3793 Xorg dixLookupDrawable
+ 10 8.6207 Xorg ProcCreatePixmap [self]
+ 7 6.0345 Xorg AddResource
+ 4 3.4483 Xorg LegalNewID
+ 3 2.5862 Xorg DamageSetReportAfterOp
+ 2 1.7241 Xorg DamageRegister
+ 1 0.8621 libexa.so __i686.get_pc_thunk.bx
+ 1 0.8621 libfb.so fbCreatePixmap
+-------------------------------------------------------------------------------
+ 2 20.0000 Xorg CallCallbacks
+ 8 80.0000 Xorg _CallCallbacks
+10 0.1908 Xorg SecurityCheckExtAccess
+ 10 100.000 Xorg SecurityCheckExtAccess [self]
+-------------------------------------------------------------------------------
+ 71 26.1029 Xorg damagePolyFillRect
+ 78 28.6765 Xorg damageComposite
+ 123 45.2206 Xorg damageGlyphs
+10 0.1908 Xorg damageReportPostOp
+ 258 94.8529 Xorg DamageReportDamage
+ 10 3.6765 Xorg damageReportPostOp [self]
+ 4 1.4706 Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 1 3.7037 Xorg miValidatePicture
+ 2 7.4074 Xorg damagePolyFillRect
+ 3 11.1111 Xorg damageDamageBox
+ 6 22.2222 Xorg miComputeCompositeClip
+ 15 55.5556 Xorg damageDamageRegion
+10 0.1908 Xorg miIntersect
+ 24 70.5882 libpixman.so.0.0.0 pixman_region_intersect
+ 10 29.4118 Xorg miIntersect [self]
+-------------------------------------------------------------------------------
+ 258 100.000 Xorg damageReportPostOp
+9 0.1717 Xorg DamageReportDamage
+ 249 96.5116 Xorg miUnion
+ 9 3.4884 Xorg DamageReportDamage [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg XaceCatchDispatchProc
+ 4 44.4444 Xorg ProcCreatePixmap
+ 4 44.4444 Xorg ProcRenderCreatePicture
+9 0.1717 Xorg LegalNewID
+ 9 100.000 Xorg LegalNewID [self]
+-------------------------------------------------------------------------------
+ 1 9.0909 Xorg SetClipRects
+ 3 27.2727 Xorg ChangeGC
+ 7 63.6364 Xorg dixChangeGC
+9 0.1717 Xorg damageChangeGC
+ 9 81.8182 Xorg damageChangeGC [self]
+ 2 18.1818 Xorg miBSCheapChangeGC
+-------------------------------------------------------------------------------
+ 1 3.0303 Xorg damagePolyFillRect
+ 2 6.0606 Xorg miDestroyPictureClip
+ 3 9.0909 Xorg FreePicture
+ 8 24.2424 Xorg miDestroyClip
+ 19 57.5758 Xorg miDestroyPicture
+9 0.1717 Xorg miRegionDestroy
+ 23 44.2308 Xorg Xfree
+ 11 21.1538 libpixman.so.0.0.0 pixman_region_fini
+ 9 17.3077 Xorg miRegionDestroy [self]
+ 4 7.6923 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 4 7.6923 libc-2.5.so free
+ 1 1.9231 Xorg .plt
+-------------------------------------------------------------------------------
+ 1 4.1667 Xorg XaceCatchDispatchProc
+ 7 29.1667 Xorg ProcCreatePixmap
+ 16 66.6667 Xorg ProcRenderCreatePicture
+8 0.1526 Xorg AddResource
+ 14 58.3333 Xorg Xalloc
+ 8 33.3333 Xorg AddResource [self]
+ 1 4.1667 Xorg .plt
+ 1 4.1667 Xorg Hash
+-------------------------------------------------------------------------------
+ 35 100.000 Xorg CreatePicture
+8 0.1526 Xorg AllocatePicture
+ 26 72.2222 Xorg Xalloc
+ 8 22.2222 Xorg AllocatePicture [self]
+ 2 5.5556 Xorg .plt
+-------------------------------------------------------------------------------
+ 26089 100.000 Xorg CompositePicture
+8 0.1526 Xorg damageComposite
+ 25987 99.5976 libexa.so exaComposite
+ 78 0.2989 Xorg damageReportPostOp
+ 16 0.0613 Xorg damageDamageBox
+ 8 0.0307 Xorg damageComposite [self]
+ 2 0.0077 libexa.so ExaCheckComposite
+ 1 0.0038 Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 2 2.0408 Xorg miColorRects
+ 96 97.9592 Xorg ValidateGC
+8 0.1526 Xorg damageValidateGC
+ 88 89.7959 Xorg miBSCheapValidateGC
+ 8 8.1633 Xorg damageValidateGC [self]
+ 2 2.0408 libexa.so exaValidateGC
+-------------------------------------------------------------------------------
+ 1 1.8519 Xorg ValidateOnePicture
+ 8 14.8148 Xorg miColorRects
+ 17 31.4815 Xorg miRectsToRegion
+ 28 51.8519 Xorg miValidatePicture
+8 0.1526 Xorg miRegionCreate
+ 25 46.2963 Xorg Xalloc
+ 9 16.6667 Xorg miRegionInit
+ 8 14.8148 Xorg miRegionCreate [self]
+ 4 7.4074 Xorg .plt
+ 3 5.5556 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 2 3.7037 libpixman.so.0.0.0 pixman_region_init
+ 2 3.7037 libc-2.5.so malloc
+ 1 1.8519 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 25 100.000 Xorg damageDestroyPixmap
+7 0.1335 Xorg DamageDestroy
+ 17 68.0000 Xorg Xfree
+ 7 28.0000 Xorg DamageDestroy [self]
+ 1 4.0000 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg miCreateAlphaPicture
+ 2 66.6667 Xorg ProcCreatePixmap
+7 0.1335 Xorg DamageRegister
+ 7 87.5000 Xorg DamageRegister [self]
+ 1 12.5000 Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 3 42.8571 Xorg Dispatch
+ 4 57.1429 Xorg XaceCatchExtProc
+7 0.1335 Xorg GetExtensionEntry
+ 7 100.000 Xorg GetExtensionEntry [self]
+-------------------------------------------------------------------------------
+ 3 0.3953 Xorg XaceCatchExtProc
+ 756 99.6047 Xorg ProcRenderDispatch
+7 0.1335 Xorg ProcRenderFillRectangles
+ 728 95.9157 Xorg CompositeRects
+ 16 2.1080 Xorg SecurityLookupIDByType
+ 7 0.9223 Xorg ProcRenderFillRectangles [self]
+ 2 0.2635 Xorg XaceHook
+ 2 0.2635 Xorg miCompositeRects
+ 2 0.2635 Xorg ValidatePicture
+ 1 0.1318 Xorg __i686.get_pc_thunk.bx
+ 1 0.1318 Xorg PictOpValid
+-------------------------------------------------------------------------------
+ 6 12.2449 Xorg XaceCatchExtProc
+ 43 87.7551 Xorg ProcRenderDispatch
+7 0.1335 Xorg ProcRenderSetPictureFilter
+ 21 42.8571 Xorg SetPictureFilter
+ 16 32.6531 Xorg SecurityLookupIDByType
+ 7 14.2857 Xorg ProcRenderSetPictureFilter [self]
+ 3 6.1224 Xorg miChangePictureFilter
+ 1 2.0408 Xorg __i686.get_pc_thunk.bx
+ 1 2.0408 Xorg Hash
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg ProcRenderDispatch
+ 6 85.7143 Xorg ProcRenderSetPictureTransform
+7 0.1335 Xorg SetPictureTransform
+ 7 100.000 Xorg SetPictureTransform [self]
+-------------------------------------------------------------------------------
+ 1 1.2658 Xorg miCreateAlphaPicture
+ 1 1.2658 Xorg damageGlyphs
+ 2 2.5316 Xorg ProcCopyArea
+ 3 3.7975 Xorg ProcPolyFillRectangle
+ 6 7.5949 Xorg miCompositeRects
+ 7 8.8608 Xorg ProcPolySegment
+ 59 74.6835 Xorg miColorRects
+7 0.1335 Xorg ValidateGC
+ 96 90.5660 Xorg damageValidateGC
+ 7 6.6038 Xorg ValidateGC [self]
+ 3 2.8302 Xorg miBSCheapValidateGC
+-------------------------------------------------------------------------------
+ 1 0.5882 Xorg miRectsToRegion
+ 1 0.5882 Xorg miValidatePicture
+ 1 0.5882 Xorg SetClipRects
+ 1 0.5882 Xorg AllocateGC
+ 2 1.1765 Xorg miRegionValidate
+ 14 8.2353 Xorg AddResource
+ 25 14.7059 Xorg miRegionCreate
+ 25 14.7059 Xorg DamageCreate
+ 26 15.2941 Xorg AllocatePicture
+ 74 43.5294 Xorg AllocatePixmap
+7 0.1335 Xorg Xalloc
+ 171 92.9348 libc-2.5.so malloc
+ 7 3.8043 Xorg Xalloc [self]
+ 4 2.1739 libc-2.5.so _int_malloc
+ 2 1.0870 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 5.1282 Xorg XaceCatchDispatchProc
+ 37 94.8718 Xorg ProcPolySegment
+7 0.1335 Xorg damagePolySegment
+ 31 79.4872 libexa.so exaPolySegment
+ 7 17.9487 Xorg damagePolySegment [self]
+ 1 2.5641 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3 3.2967 Xorg ValidateGC
+ 88 96.7033 Xorg damageValidateGC
+7 0.1335 Xorg miBSCheapValidateGC
+ 78 85.7143 libexa.so exaValidateGC
+ 7 7.6923 Xorg miBSCheapValidateGC [self]
+ 3 3.2967 libfb.so fbValidateGC
+ 2 2.1978 libexa.so .plt
+ 1 1.0989 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.0038 Xorg CompositeTrapezoids
+ 51 0.1954 Xorg miCompositeRects
+ 1615 6.1885 Xorg ProcRenderComposite
+ 24430 93.6123 Xorg miTrapezoids
+6 0.1145 Xorg CompositePicture
+ 26089 99.9540 Xorg damageComposite
+ 6 0.0230 Xorg CompositePicture [self]
+ 5 0.0192 Xorg ValidatePicture
+ 1 0.0038 Xorg damageDamageBox
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damageGlyphs
+6 0.1145 Xorg FreeScratchPixmapHeader
+ 6 100.000 Xorg FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 3 9.3750 Xorg XaceCatchExtProc
+ 29 90.6250 Xorg ProcRenderDispatch
+6 0.1145 Xorg ProcRenderChangePicture
+ 13 40.6250 Xorg ChangePicture
+ 8 25.0000 Xorg SecurityLookupIDByType
+ 6 18.7500 Xorg ProcRenderChangePicture [self]
+ 5 15.6250 Xorg Ones
+-------------------------------------------------------------------------------
+ 21 100.000 Xorg ProcRenderSetPictureFilter
+6 0.1145 Xorg SetPictureFilter
+ 14 66.6667 Xorg PictureFindFilter
+ 6 28.5714 Xorg SetPictureFilter [self]
+ 1 4.7619 Xorg PictureGetFilterId
+-------------------------------------------------------------------------------
+ 1 2.2727 Xorg ProcRenderCreatePicture
+ 43 97.7273 Xorg CreatePicture
+6 0.1145 Xorg SetPictureToDefaults
+ 21 47.7273 Xorg PictureGetFilterId
+ 13 29.5455 libc-2.5.so strlen
+ 6 13.6364 Xorg SetPictureToDefaults [self]
+ 3 6.8182 Xorg CompareISOLatin1Lowered
+ 1 2.2727 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 1.9608 Xorg CompositeTrapezoids
+ 1 1.9608 Xorg ProcRenderCompositeGlyphs
+ 2 3.9216 Xorg ProcRenderFillRectangles
+ 2 3.9216 Xorg damageGlyphs
+ 5 9.8039 Xorg CompositePicture
+ 17 33.3333 Xorg CompositeGlyphs
+ 23 45.0980 Xorg CompositeRects
+6 0.1145 Xorg ValidatePicture
+ 53 84.1270 Xorg ValidateOnePicture
+ 6 9.5238 Xorg ValidatePicture [self]
+ 3 4.7619 Xorg miValidatePicture
+ 1 1.5873 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 3.5714 Xorg dixChangeGC
+ 4 14.2857 Xorg miColorRects
+ 9 32.1429 Xorg SetClipRects
+ 14 50.0000 Xorg GetScratchGC
+6 0.1145 Xorg damageChangeClip
+ 22 78.5714 Xorg miBSCheapChangeClip
+ 6 21.4286 Xorg damageChangeClip [self]
+-------------------------------------------------------------------------------
+ 1 1.9608 Xorg CreateGC
+ 4 7.8431 Xorg miCompositeRects
+ 46 90.1961 Xorg miColorRects
+5 0.0954 Xorg ChangeGC
+ 43 84.3137 Xorg dixChangeGC
+ 5 9.8039 Xorg ChangeGC [self]
+ 3 5.8824 Xorg damageChangeGC
+-------------------------------------------------------------------------------
+ 2 0.0035 Xorg ProcRenderDispatch
+ 56825 99.9965 Xorg ProcRenderCompositeGlyphs
+5 0.0954 Xorg CompositeGlyphs
+ 56812 99.9578 Xorg damageGlyphs
+ 17 0.0299 Xorg ValidatePicture
+ 5 0.0088 Xorg CompositeGlyphs [self]
+ 1 0.0018 Xorg ValidateOnePicture
+ 1 0.0018 libexa.so exaGlyphs
+-------------------------------------------------------------------------------
+5 0.0954 Xorg DamageCreate
+ 25 80.6452 Xorg Xalloc
+ 5 16.1290 Xorg DamageCreate [self]
+ 1 3.2258 libc-2.5.so malloc
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg ProcCreatePixmap
+5 0.0954 Xorg DamageSetReportAfterOp
+ 5 100.000 Xorg DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg ProcFreePixmap
+ 4 80.0000 Xorg FreeResource
+5 0.0954 Xorg FlushClientCaches
+ 5 100.000 Xorg FlushClientCaches [self]
+-------------------------------------------------------------------------------
+ 14 100.000 Xorg SetPictureFilter
+5 0.0954 Xorg PictureFindFilter
+ 9 64.2857 Xorg PictureGetFilterId
+ 5 35.7143 Xorg PictureFindFilter [self]
+-------------------------------------------------------------------------------
+ 1 1.1111 Xorg Dispatch
+ 89 98.8889 Xorg XaceCatchDispatchProc
+5 0.0954 Xorg ProcFreePixmap
+ 69 76.6667 Xorg FreeResource
+ 12 13.3333 Xorg SecurityLookupIDByType
+ 5 5.5556 Xorg ProcFreePixmap [self]
+ 2 2.2222 Xorg dixDestroyPixmap
+ 1 1.1111 Xorg __i686.get_pc_thunk.bx
+ 1 1.1111 Xorg FlushClientCaches
+-------------------------------------------------------------------------------
+ 1 1.7544 Xorg CompositeGlyphs
+ 3 5.2632 Xorg CompositeRects
+ 53 92.9825 Xorg ValidatePicture
+5 0.0954 Xorg ValidateOnePicture
+ 50 87.7193 Xorg miValidatePicture
+ 5 8.7719 Xorg ValidateOnePicture [self]
+ 1 1.7544 Xorg __i686.get_pc_thunk.bx
+ 1 1.7544 Xorg miRegionCreate
+-------------------------------------------------------------------------------
+ 2 40.0000 Xorg damageChangeGC
+ 3 60.0000 Xorg dixChangeGC
+5 0.0954 Xorg miBSCheapChangeGC
+ 5 100.000 Xorg miBSCheapChangeGC [self]
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg miRectsToRegion
+5 0.0954 Xorg miRegionValidate
+ 5 45.4545 Xorg miRegionValidate [self]
+ 3 27.2727 Xorg Xfree
+ 2 18.1818 Xorg Xalloc
+ 1 9.0909 Xorg QuickSortRects
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg miValidatePicture
+ 3 37.5000 Xorg damagePolyFillRect
+ 4 50.0000 Xorg miComputeCompositeClip
+5 0.0954 Xorg miTranslateRegion
+ 10 62.5000 libpixman.so.0.0.0 pixman_region_translate
+ 5 31.2500 Xorg miTranslateRegion [self]
+ 1 6.2500 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 9.5238 Xorg XaceCatchExtProc
+ 19 90.4762 Xorg ProcRenderDispatch
+4 0.0763 Xorg ProcRenderSetPictureTransform
+ 10 47.6190 Xorg SecurityLookupIDByType
+ 6 28.5714 Xorg SetPictureTransform
+ 4 19.0476 Xorg ProcRenderSetPictureTransform [self]
+ 1 4.7619 Xorg miChangePictureTransform
+-------------------------------------------------------------------------------
+ 3 42.8571 Xorg FreePicture
+ 4 57.1429 Xorg miChangePictureClip
+4 0.0763 Xorg miDestroyPictureClip
+ 4 57.1429 Xorg miDestroyPictureClip [self]
+ 2 28.5714 Xorg miRegionDestroy
+ 1 14.2857 Xorg Xfree
+-------------------------------------------------------------------------------
+ 2 18.1818 Xorg miRectsToRegion
+ 9 81.8182 Xorg miRegionCreate
+4 0.0763 Xorg miRegionInit
+ 4 36.3636 Xorg miRegionInit [self]
+ 3 27.2727 libpixman.so.0.0.0 pixman_region_init
+ 3 27.2727 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 1 9.0909 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 20.0000 Xorg miCompositeRects
+ 8 80.0000 Xorg miColorRects
+4 0.0763 Xorg miRenderColorToPixel
+ 6 60.0000 Xorg Ones
+ 4 40.0000 Xorg miRenderColorToPixel [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg ProcRenderFillRectangles
+ 2 66.6667 Xorg ProcRenderDispatch
+3 0.0572 Xorg PictOpValid
+ 3 100.000 Xorg PictOpValid [self]
+-------------------------------------------------------------------------------
+ 1 0.0033 Xorg XaceCatchExtProc
+ 30723 99.9967 Xorg ProcRenderDispatch
+3 0.0572 Xorg ProcRenderTrapezoids
+ 30720 99.9805 Xorg CompositeTrapezoids
+ 3 0.0098 Xorg SecurityLookupIDByType
+ 3 0.0098 Xorg ProcRenderTrapezoids [self]
+-------------------------------------------------------------------------------
+ 2 4.7619 Xorg ProcFreePixmap
+ 40 95.2381 Xorg FreeResource
+3 0.0572 Xorg dixDestroyPixmap
+ 38 90.4762 libextmod.so XvDestroyPixmap
+ 3 7.1429 Xorg dixDestroyPixmap [self]
+ 1 2.3810 Xorg damageDestroyPixmap
+-------------------------------------------------------------------------------
+ 21 100.000 Xorg miBSCheapChangeClip
+3 0.0572 Xorg miChangeClip
+ 11 52.3810 Xorg miDestroyClip
+ 6 28.5714 Xorg miRectsToRegion
+ 3 14.2857 Xorg miChangeClip [self]
+ 1 4.7619 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg ProcRenderSetPictureFilter
+3 0.0572 Xorg miChangePictureFilter
+ 3 100.000 Xorg miChangePictureFilter [self]
+-------------------------------------------------------------------------------
+ 2 15.3846 Xorg miBSCheapDestroyClip
+ 11 84.6154 Xorg miChangeClip
+3 0.0572 Xorg miDestroyClip
+ 8 61.5385 Xorg miRegionDestroy
+ 3 23.0769 Xorg miDestroyClip [self]
+ 1 7.6923 Xorg __i686.get_pc_thunk.bx
+ 1 7.6923 libpixman.so.0.0.0 pixman_region_fini
+-------------------------------------------------------------------------------
+ 30 100.000 Xorg miTrapezoids
+3 0.0572 Xorg miTrapezoidBounds
+ 25 83.3333 Xorg miLineFixedX
+ 3 10.0000 Xorg miTrapezoidBounds [self]
+ 2 6.6667 Xorg __divdi3
+-------------------------------------------------------------------------------
+ 1 0.1372 Xorg ProcRenderDispatch
+ 728 99.8628 Xorg ProcRenderFillRectangles
+2 0.0382 Xorg CompositeRects
+ 697 95.6104 Xorg miCompositeRects
+ 23 3.1550 Xorg ValidatePicture
+ 3 0.4115 Xorg ValidateOnePicture
+ 2 0.2743 Xorg FreeScratchGC
+ 2 0.2743 Xorg CompositeRects [self]
+ 1 0.1372 Xorg miColorRects
+ 1 0.1372 Xorg FreePicture
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg XaceCatchDispatchProc
+ 5 83.3333 Xorg ProcCreateGC
+2 0.0382 Xorg CreateGC
+ 2 33.3333 Xorg damageCreateGC
+ 2 33.3333 Xorg CreateGC [self]
+ 1 16.6667 Xorg ChangeGC
+ 1 16.6667 Xorg AllocateGC
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageGlyphs
+2 0.0382 Xorg GetScratchPixmapHeader
+ 5 71.4286 Xorg miModifyPixmapHeader
+ 2 28.5714 Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg Dispatch
+ 12 92.3077 Xorg XaceCatchDispatchProc
+2 0.0382 Xorg ProcPolyFillRectangle
+ 8 61.5385 Xorg damagePolyFillRect
+ 3 23.0769 Xorg ValidateGC
+ 2 15.3846 Xorg ProcPolyFillRectangle [self]
+-------------------------------------------------------------------------------
+ 16 100.000 Xorg XaceCatchDispatchProc
+2 0.0382 Xorg ProcSetClipRectangles
+ 11 68.7500 Xorg SetClipRects
+ 3 18.7500 Xorg dixLookupGC
+ 2 12.5000 Xorg ProcSetClipRectangles [self]
+-------------------------------------------------------------------------------
+ 1 7.1429 Xorg ProcRenderDispatch
+ 13 92.8571 Xorg ProcRenderSetPictureClipRectangles
+2 0.0382 Xorg SetPictureClipRects
+ 6 42.8571 Xorg miRectsToRegion
+ 6 42.8571 Xorg miChangePictureClip
+ 2 14.2857 Xorg SetPictureClipRects [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg ReadRequestFromClient
+2 0.0382 Xorg _XSERVTransSocketRead
+ 2 100.000 Xorg _XSERVTransSocketRead [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg XaceCatchExtProc
+2 0.0382 Xorg __i686.get_pc_thunk.cx
+ 2 100.000 Xorg __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg ProcChangeGC
+ 2 25.0000 Xorg XaceCatchDispatchProc
+ 2 25.0000 Xorg ProcPolySegment
+ 3 37.5000 Xorg ProcSetClipRectangles
+2 0.0382 Xorg dixLookupGC
+ 6 75.0000 Xorg SecurityLookupIDByType
+ 2 25.0000 Xorg dixLookupGC [self]
+-------------------------------------------------------------------------------
+ 1 4.3478 Xorg GetScratchGC
+ 22 95.6522 Xorg damageChangeClip
+2 0.0382 Xorg miBSCheapChangeClip
+ 21 91.3043 Xorg miChangeClip
+ 2 8.6957 Xorg miBSCheapChangeClip [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg SetPictureClipRects
+2 0.0382 Xorg miChangePictureClip
+ 4 66.6667 Xorg miDestroyPictureClip
+ 2 33.3333 Xorg miChangePictureClip [self]
+-------------------------------------------------------------------------------
+ 1 3.4483 Xorg miCompositeRects
+ 28 96.5517 Xorg FreePicture
+2 0.0382 Xorg miDestroyPicture
+ 19 63.3333 Xorg miRegionDestroy
+ 4 13.3333 Xorg Xfree
+ 4 13.3333 libpixman.so.0.0.0 pixman_region_fini
+ 2 6.6667 Xorg miDestroyPicture [self]
+ 1 3.3333 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg WaitForSomething
+1 0.0191 Xorg BlockHandler
+ 2 50.0000 libdri.so DRIBlockHandler
+ 1 25.0000 mouse_drv.so MouseBlockHandler
+ 1 25.0000 Xorg BlockHandler [self]
+-------------------------------------------------------------------------------
+ 30720 100.000 Xorg ProcRenderTrapezoids
+1 0.0191 Xorg CompositeTrapezoids
+ 30717 99.9902 Xorg miTrapezoids
+ 1 0.0033 Xorg ValidatePicture
+ 1 0.0033 Xorg CompositePicture
+ 1 0.0033 Xorg CompositeTrapezoids [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg CoreProcessPointerEvent
+ 1 50.0000 Xorg ProcessOtherEvent
+1 0.0191 Xorg DeliverDeviceEvents
+ 1 50.0000 Xorg DeliverEventsToWindow
+ 1 50.0000 Xorg DeliverDeviceEvents [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg FlushAllOutput
+1 0.0191 Xorg FlushClient
+ 1 100.000 Xorg FlushClient [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg miCompositeRects
+1 0.0191 Xorg PictureMatchFormat
+ 1 100.000 Xorg PictureMatchFormat [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg XaceCatchDispatchProc
+1 0.0191 Xorg ProcChangeGC
+ 4 66.6667 Xorg dixChangeGC
+ 1 16.6667 Xorg dixLookupGC
+ 1 16.6667 Xorg ProcChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg Dispatch
+ 6 85.7143 Xorg XaceCatchDispatchProc
+1 0.0191 Xorg ProcCreateGC
+ 5 71.4286 Xorg CreateGC
+ 1 14.2857 Xorg dixLookupDrawable
+ 1 14.2857 Xorg ProcCreateGC [self]
+-------------------------------------------------------------------------------
+ 1619 100.000 Xorg ProcRenderDispatch
+1 0.0191 Xorg ProcRenderComposite
+ 1615 99.7529 Xorg CompositePicture
+ 3 0.1853 Xorg SecurityLookupIDByType
+ 1 0.0618 Xorg ProcRenderComposite [self]
+-------------------------------------------------------------------------------
+ 1 4.5455 Xorg XaceCatchExtProc
+ 21 95.4545 Xorg ProcRenderDispatch
+1 0.0191 Xorg ProcRenderSetPictureClipRectangles
+ 13 59.0909 Xorg SetPictureClipRects
+ 7 31.8182 Xorg SecurityLookupIDByType
+ 1 4.5455 Xorg Hash
+ 1 4.5455 Xorg ProcRenderSetPictureClipRectangles [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg miRegionValidate
+1 0.0191 Xorg QuickSortRects
+ 1 100.000 Xorg QuickSortRects [self]
+-------------------------------------------------------------------------------
+1 0.0191 Xorg SmartScheduleTimer
+ 1 100.000 Xorg SmartScheduleTimer [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg TryClientEvents
+1 0.0191 Xorg XkbFilterEvents
+ 1 100.000 Xorg XkbFilterEvents [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Dispatch
+ 2 66.6667 Xorg ReadRequestFromClient
+1 0.0191 Xorg _XSERVTransRead
+ 2 66.6667 libc-2.5.so __read_nocancel
+ 1 33.3333 Xorg _XSERVTransRead [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg FreeResource
+1 0.0191 Xorg damageDestroyGC
+ 1 100.000 Xorg damageDestroyGC [self]
+-------------------------------------------------------------------------------
+1 0.0191 Xorg damageInsertDamage
+ 1 100.000 Xorg damageInsertDamage [self]
+-------------------------------------------------------------------------------
+1 0.0191 Xorg damageRemoveDamage
+ 1 100.000 Xorg damageRemoveDamage [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg FreeGC
+ 2 66.6667 Xorg damageDestroyClip
+1 0.0191 Xorg miBSCheapDestroyClip
+ 2 66.6667 Xorg miDestroyClip
+ 1 33.3333 Xorg miBSCheapDestroyClip [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damageCreateGC
+1 0.0191 Xorg miBSCreateGC
+ 1 50.0000 libexa.so exaCreateGC
+ 1 50.0000 Xorg miBSCreateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg CreatePicture
+1 0.0191 Xorg miChangePicture
+ 1 100.000 Xorg miChangePicture [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcRenderSetPictureTransform
+1 0.0191 Xorg miChangePictureTransform
+ 1 100.000 Xorg miChangePictureTransform [self]
+-------------------------------------------------------------------------------
+ 43 100.000 Xorg miTrapezoids
+1 0.0191 Xorg miCreateAlphaPicture
+ 34 79.0698 Xorg damagePolyFillRect
+ 4 9.3023 libexa.so exaCreatePixmap
+ 1 2.3256 Xorg ValidateGC
+ 1 2.3256 Xorg CreatePicture
+ 1 2.3256 Xorg DamageRegister
+ 1 2.3256 libextmod.so __i686.get_pc_thunk.bx
+ 1 2.3256 Xorg miCreateAlphaPicture [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg WakeupHandler
+1 0.0191 Xorg xf86VTSwitchPending
+ 1 100.000 Xorg xf86VTSwitchPending [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg CreateGC
+0 0 Xorg AllocateGC
+ 1 100.000 Xorg Xalloc
+ 0 0 Xorg AllocateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcessPointerEvent
+0 0 Xorg CoreProcessPointerEvent
+ 1 100.000 Xorg DeliverDeviceEvents
+ 0 0 Xorg CoreProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg DeliverDeviceEvents
+0 0 Xorg DeliverEventsToWindow
+ 1 100.000 Xorg TryClientEvents
+ 0 0 Xorg DeliverEventsToWindow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Dispatch
+0 0 Xorg FlushAllOutput
+ 1 100.000 Xorg FlushClient
+ 0 0 Xorg FlushAllOutput [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg FreeResource
+0 0 Xorg FreeGC
+ 2 33.3333 Xorg damageDestroyClip
+ 2 33.3333 libextmod.so XvDestroyPixmap
+ 1 16.6667 Xorg __i686.get_pc_thunk.bx
+ 1 16.6667 Xorg miBSCheapDestroyClip
+ 0 0 Xorg FreeGC [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcCopyArea
+ 5 71.4286 Xorg damageCopyArea
+ 2 28.5714 Xorg ValidateGC
+ 0 0 Xorg ProcCopyArea [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcFreeGC
+ 8 100.000 Xorg FreeResource
+ 0 0 Xorg ProcFreeGC [self]
+-------------------------------------------------------------------------------
+ 49 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcPolySegment
+ 37 75.5102 Xorg damagePolySegment
+ 7 14.2857 Xorg ValidateGC
+ 3 6.1224 Xorg dixLookupDrawable
+ 2 4.0816 Xorg dixLookupGC
+ 0 0 Xorg ProcPolySegment [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Dispatch
+0 0 Xorg ProcessInputEvents
+ 2 100.000 Xorg mieqProcessInputEvents
+ 0 0 Xorg ProcessInputEvents [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg mieqProcessInputEvents
+0 0 Xorg ProcessOtherEvent
+ 1 100.000 Xorg DeliverDeviceEvents
+ 0 0 Xorg ProcessOtherEvent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg mieqProcessInputEvents
+0 0 Xorg ProcessPointerEvent
+ 1 100.000 Xorg CoreProcessPointerEvent
+ 0 0 Xorg ProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 11 100.000 Xorg ProcSetClipRectangles
+0 0 Xorg SetClipRects
+ 9 81.8182 Xorg damageChangeClip
+ 1 9.0909 Xorg damageChangeGC
+ 1 9.0909 Xorg Xalloc
+ 0 0 Xorg SetClipRects [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg DeliverEventsToWindow
+0 0 Xorg TryClientEvents
+ 1 100.000 Xorg XkbFilterEvents
+ 0 0 Xorg TryClientEvents [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Dispatch
+0 0 Xorg WaitForSomething
+ 4 66.6667 Xorg BlockHandler
+ 1 16.6667 Xorg WakeupHandler
+ 1 16.6667 mouse_drv.so MouseWakeupHandler
+ 0 0 Xorg WaitForSomething [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg WaitForSomething
+0 0 Xorg WakeupHandler
+ 1 100.000 Xorg xf86VTSwitchPending
+ 0 0 Xorg WakeupHandler [self]
+-------------------------------------------------------------------------------
+0 0 Xorg XisbRead
+ 1 50.0000 libc-2.5.so __read_nocancel
+ 1 50.0000 libc-2.5.so ___newselect_nocancel
+ 0 0 Xorg XisbRead [self]
+-------------------------------------------------------------------------------
+0 0 Xorg _start
+ 91197 100.000 libc-2.5.so __libc_start_main
+ 0 0 Xorg _start [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg ProcCopyArea
+0 0 Xorg damageCopyArea
+ 4 80.0000 libexa.so exaCopyArea
+ 1 20.0000 Xorg damageDamageBox
+ 0 0 Xorg damageCopyArea [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg CreateGC
+0 0 Xorg damageCreateGC
+ 2 100.000 Xorg miBSCreateGC
+ 0 0 Xorg damageCreateGC [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg FreeGC
+0 0 Xorg damageDestroyClip
+ 2 100.000 Xorg miBSCheapDestroyClip
+ 0 0 Xorg damageDestroyClip [self]
+-------------------------------------------------------------------------------
+0 0 Xorg main
+ 91200 99.9748 Xorg Dispatch
+ 10 0.0110 Xorg XaceHook
+ 9 0.0099 Xorg XaceCatchDispatchProc
+ 3 0.0033 Xorg ReadRequestFromClient
+ 1 0.0011 Xorg XaceCatchExtProc
+ 0 0 Xorg main [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg miColorRects
+0 0 Xorg miRegionCopy
+ 2 100.000 libpixman.so.0.0.0 pixman_region_copy
+ 0 0 Xorg miRegionCopy [self]
+-------------------------------------------------------------------------------
+ 30717 100.000 Xorg CompositeTrapezoids
+0 0 Xorg miTrapezoids
+ 24430 79.5247 Xorg CompositePicture
+ 6185 20.1335 libexa.so exaRasterizeTrapezoid
+ 43 0.1400 Xorg miCreateAlphaPicture
+ 30 0.0977 Xorg miTrapezoidBounds
+ 30 0.0977 Xorg FreePicture
+ 1 0.0033 libextmod.so XvDestroyPixmap
+ 1 0.0033 libexa.so .plt
+ 0 0 Xorg miTrapezoids [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg ProcessInputEvents
+0 0 Xorg mieqProcessInputEvents
+ 1 50.0000 Xorg ProcessOtherEvent
+ 1 50.0000 Xorg ProcessPointerEvent
+ 0 0 Xorg mieqProcessInputEvents [self]
+-------------------------------------------------------------------------------
+0 0 Xorg xf86SIGIO
+ 3 100.000 Xorg xf86SigioReadInput
+ 0 0 Xorg xf86SIGIO [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg xf86SIGIO
+0 0 Xorg xf86SigioReadInput
+ 2 66.6667 mouse_drv.so MouseReadInput
+ 1 33.3333 mouse_drv.so .plt
+ 0 0 Xorg xf86SigioReadInput [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg XisbRead
+0 0 libc-2.5.so ___newselect_nocancel
+ 0 0 libc-2.5.so ___newselect_nocancel [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 Xorg Xalloc
+ 3 60.0000 Xorg Xfree
+0 0 libc-2.5.so __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 91197 100.000 Xorg _start
+0 0 libc-2.5.so __libc_start_main
+ 0 0 libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg XisbRead
+ 2 66.6667 Xorg _XSERVTransRead
+0 0 libc-2.5.so __read_nocancel
+ 0 0 libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xfree
+0 0 libc-2.5.so _int_free
+ 0 0 libc-2.5.so _int_free [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xalloc
+0 0 libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so _int_malloc [self]
+-------------------------------------------------------------------------------
+ 4 4.3478 Xorg miRegionDestroy
+ 88 95.6522 Xorg Xfree
+0 0 libc-2.5.so free
+ 0 0 libc-2.5.so free [self]
+-------------------------------------------------------------------------------
+ 1 0.5714 Xorg AllocatePixmap
+ 1 0.5714 Xorg DamageCreate
+ 2 1.1429 Xorg miRegionCreate
+ 171 97.7143 Xorg Xalloc
+0 0 libc-2.5.so malloc
+ 0 0 libc-2.5.so malloc [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 Xorg Dispatch
+ 3 60.0000 Xorg ReadRequestFromClient
+0 0 libc-2.5.so memmove
+ 0 0 libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xfree
+0 0 libc-2.5.so munmap
+ 0 0 libc-2.5.so munmap [self]
+-------------------------------------------------------------------------------
+ 13 100.000 Xorg SetPictureToDefaults
+0 0 libc-2.5.so strlen
+ 0 0 libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg BlockHandler
+0 0 libdri.so DRIBlockHandler
+ 0 0 libdri.so DRIBlockHandler [self]
+-------------------------------------------------------------------------------
+ 1 5.5556 Xorg damagePolyFillRect
+ 1 5.5556 Xorg miTrapezoids
+ 2 11.1111 Xorg miBSCheapValidateGC
+ 2 11.1111 Xorg damageDestroyPixmap
+ 12 66.6667 Xorg damageGlyphs
+0 0 libexa.so .plt
+ 0 0 libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damageComposite
+0 0 libexa.so ExaCheckComposite
+ 0 0 libexa.so ExaCheckComposite [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 Xorg ProcCreatePixmap
+ 1 25.0000 Xorg miBSCheapValidateGC
+ 1 25.0000 Xorg damageDestroyPixmap
+ 1 25.0000 Xorg damagePolyFillRect
+0 0 libexa.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 10 0.0385 Xorg damageGlyphs
+ 25987 99.9615 Xorg damageComposite
+0 0 libexa.so exaComposite
+ 0 0 libexa.so exaComposite [self]
+-------------------------------------------------------------------------------
+ 4 11.1111 Xorg damageCopyArea
+ 32 88.8889 Xorg damageGlyphs
+0 0 libexa.so exaCopyArea
+ 0 0 libexa.so exaCopyArea [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg miBSCreateGC
+0 0 libexa.so exaCreateGC
+ 0 0 libexa.so exaCreateGC [self]
+-------------------------------------------------------------------------------
+ 1 1.3158 Xorg damageGlyphs
+ 2 2.6316 Xorg miCompositeRects
+ 4 5.2632 Xorg miCreateAlphaPicture
+ 69 90.7895 Xorg ProcCreatePixmap
+0 0 libexa.so exaCreatePixmap
+ 0 0 libexa.so exaCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 88 100.000 Xorg damageDestroyPixmap
+0 0 libexa.so exaDestroyPixmap
+ 0 0 libexa.so exaDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damagePolyFillRect
+0 0 libexa.so exaFillRegionSolid
+ 0 0 libexa.so exaFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg damageGlyphs
+ 7 87.5000 Xorg damagePolyFillRect
+0 0 libexa.so exaGetDrawableDeltas
+ 0 0 libexa.so exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damagePolyFillRect
+0 0 libexa.so exaGetDrawablePixmap
+ 0 0 libexa.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 1 0.0018 Xorg CompositeGlyphs
+ 56465 99.9982 Xorg damageGlyphs
+0 0 libexa.so exaGlyphs
+ 0 0 libexa.so exaGlyphs [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg damageDestroyPixmap
+0 0 libexa.so exaOffscreenFree
+ 0 0 libexa.so exaOffscreenFree [self]
+-------------------------------------------------------------------------------
+ 9 100.000 Xorg damageGlyphs
+0 0 libexa.so exaPixmapDirty
+ 0 0 libexa.so exaPixmapDirty [self]
+-------------------------------------------------------------------------------
+ 3 0.9317 Xorg miColorRects
+ 319 99.0683 Xorg damagePolyFillRect
+0 0 libexa.so exaPolyFillRect
+ 0 0 libexa.so exaPolyFillRect [self]
+-------------------------------------------------------------------------------
+ 31 100.000 Xorg damagePolySegment
+0 0 libexa.so exaPolySegment
+ 0 0 libexa.so exaPolySegment [self]
+-------------------------------------------------------------------------------
+ 6185 100.000 Xorg miTrapezoids
+0 0 libexa.so exaRasterizeTrapezoid
+ 0 0 libexa.so exaRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 2 2.5000 Xorg damageValidateGC
+ 78 97.5000 Xorg miBSCheapValidateGC
+0 0 libexa.so exaValidateGC
+ 0 0 libexa.so exaValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 0.7463 Xorg miTrapezoids
+ 2 1.4925 Xorg FreeGC
+ 3 2.2388 Xorg FreeResource
+ 3 2.2388 Xorg miCompositeRects
+ 38 28.3582 Xorg dixDestroyPixmap
+ 87 64.9254 Xorg FreePicture
+0 0 libextmod.so XvDestroyPixmap
+ 0 0 libextmod.so XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg miCreateAlphaPicture
+ 1 50.0000 Xorg FreePicture
+0 0 libextmod.so __i686.get_pc_thunk.bx
+ 0 0 libextmod.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcCreatePixmap
+0 0 libfb.so fbCreatePixmap
+ 0 0 libfb.so fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damageDestroyPixmap
+0 0 libfb.so fbDestroyPixmap
+ 0 0 libfb.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg miBSCheapValidateGC
+0 0 libfb.so fbValidateGC
+ 0 0 libfb.so fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg miUnion
+0 0 libpixman.so.0.0.0 .plt
+ 0 0 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+ 1 3.3333 Xorg miTranslateRegion
+ 1 3.3333 Xorg miRegionInit
+ 1 3.3333 Xorg miComputeCompositeRegion
+ 4 13.3333 Xorg miRegionDestroy
+ 23 76.6667 Xorg miUnion
+0 0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 11 100.000 Xorg miUnion
+0 0 libpixman.so.0.0.0 pixman_op
+ 0 0 libpixman.so.0.0.0 pixman_op [self]
+-------------------------------------------------------------------------------
+ 2 9.0909 Xorg miRegionCopy
+ 3 13.6364 Xorg miColorRects
+ 17 77.2727 Xorg miUnion
+0 0 libpixman.so.0.0.0 pixman_region_copy
+ 0 0 libpixman.so.0.0.0 pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 1 6.2500 Xorg miDestroyClip
+ 4 25.0000 Xorg miDestroyPicture
+ 11 68.7500 Xorg miRegionDestroy
+0 0 libpixman.so.0.0.0 pixman_region_fini
+ 0 0 libpixman.so.0.0.0 pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 2 20.0000 Xorg miRegionCreate
+ 3 30.0000 Xorg miRegionInit
+ 5 50.0000 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_init
+ 0 0 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 3 50.0000 Xorg miRegionInit
+ 3 50.0000 Xorg miRegionCreate
+0 0 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 0 0 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+ 4 14.2857 Xorg damageDamageRegion
+ 24 85.7143 Xorg miIntersect
+0 0 libpixman.so.0.0.0 pixman_region_intersect
+ 0 0 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 61 100.000 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 25 100.000 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 94 100.000 Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg miTranslateRegion
+0 0 libpixman.so.0.0.0 pixman_region_translate
+ 0 0 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 3906 100.000 Xorg miUnion
+0 0 libpixman.so.0.0.0 pixman_region_union
+ 0 0 libpixman.so.0.0.0 pixman_region_union [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg xf86SigioReadInput
+0 0 mouse_drv.so .plt
+ 0 0 mouse_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg BlockHandler
+0 0 mouse_drv.so MouseBlockHandler
+ 0 0 mouse_drv.so MouseBlockHandler [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg xf86SigioReadInput
+0 0 mouse_drv.so MouseReadInput
+ 0 0 mouse_drv.so MouseReadInput [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg WaitForSomething
+0 0 mouse_drv.so MouseWakeupHandler
+ 0 0 mouse_drv.so MouseWakeupHandler [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+1257 23.9794 GetTimeInMillis
+898 17.1309 miComputeCompositeRegion
+360 6.8676 miSpriteSourceValidate
+255 4.8646 miCompositeSourceValidate
+230 4.3876 __i686.get_pc_thunk.bx
+211 4.0252 miModifyPixmapHeader
+176 3.3575 .plt
+111 2.1175 XaceHook
+105 2.0031 FindGlyphRef
+105 2.0031 miUnion
+92 1.7551 damageGlyphs
+77 1.4689 ReadRequestFromClient
+60 1.1446 FreeResource
+57 1.0874 DamageEmpty
+56 1.0683 SecurityLookupIDByType
+46 0.8775 Dispatch
+40 0.7631 ProcRenderCompositeGlyphs
+40 0.7631 _CallCallbacks
+39 0.7440 CallCallbacks
+39 0.7440 dixChangeGC
+35 0.6677 DamageRegion
+34 0.6486 SecurityCheckResourceIDAccess
+34 0.6486 damageDamageRegion
+29 0.5532 damageDestroyPixmap
+28 0.5341 Hash
+24 0.4578 CompareISOLatin1Lowered
+21 0.4006 ChangePicture
+21 0.4006 FindGlyph
+21 0.4006 miValidatePicture
+20 0.3815 Xfree
+19 0.3625 AllocatePixmap
+19 0.3625 FreeScratchGC
+18 0.3434 CreatePicture
+18 0.3434 FreePicture
+17 0.3243 ProcRenderCreatePicture
+17 0.3243 XaceCatchExtProc
+17 0.3243 getDrawableDamageRef
+16 0.3052 Ones
+16 0.3052 miComputeCompositeClip
+15 0.2862 GetScratchGC
+15 0.2862 XaceCatchDispatchProc
+15 0.2862 __divdi3
+15 0.2862 damagePolyFillRect
+15 0.2862 dixLookupDrawable
+15 0.2862 miColorRects
+14 0.2671 ProcRenderDispatch
+14 0.2671 miRectsToRegion
+12 0.2289 PictureGetFilterId
+12 0.2289 damageDamageBox
+12 0.2289 miLineFixedX
+11 0.2098 ProcRenderFreePicture
+11 0.2098 SecurityLookupIDByClass
+11 0.2098 miCompositeRects
+11 0.2098 miGlyphExtents
+10 0.1908 ProcCreatePixmap
+10 0.1908 SecurityCheckExtAccess
+10 0.1908 damageReportPostOp
+10 0.1908 miIntersect
+9 0.1717 DamageReportDamage
+9 0.1717 LegalNewID
+9 0.1717 damageChangeGC
+9 0.1717 miRegionDestroy
+8 0.1526 AddResource
+8 0.1526 AllocatePicture
+8 0.1526 damageComposite
+8 0.1526 damageValidateGC
+8 0.1526 miRegionCreate
+7 0.1335 DamageDestroy
+7 0.1335 DamageRegister
+7 0.1335 GetExtensionEntry
+7 0.1335 ProcRenderFillRectangles
+7 0.1335 ProcRenderSetPictureFilter
+7 0.1335 SetPictureTransform
+7 0.1335 ValidateGC
+7 0.1335 Xalloc
+7 0.1335 damagePolySegment
+7 0.1335 miBSCheapValidateGC
+6 0.1145 CompositePicture
+6 0.1145 FreeScratchPixmapHeader
+6 0.1145 ProcRenderChangePicture
+6 0.1145 SetPictureFilter
+6 0.1145 SetPictureToDefaults
+6 0.1145 ValidatePicture
+6 0.1145 damageChangeClip
+5 0.0954 ChangeGC
+5 0.0954 CompositeGlyphs
+5 0.0954 DamageCreate
+5 0.0954 DamageSetReportAfterOp
+5 0.0954 FlushClientCaches
+5 0.0954 PictureFindFilter
+5 0.0954 ProcFreePixmap
+5 0.0954 ValidateOnePicture
+5 0.0954 miBSCheapChangeGC
+5 0.0954 miRegionValidate
+5 0.0954 miTranslateRegion
+4 0.0763 ProcRenderSetPictureTransform
+4 0.0763 miDestroyPictureClip
+4 0.0763 miRegionInit
+4 0.0763 miRenderColorToPixel
+3 0.0572 PictOpValid
+3 0.0572 ProcRenderTrapezoids
+3 0.0572 dixDestroyPixmap
+3 0.0572 miChangeClip
+3 0.0572 miChangePictureFilter
+3 0.0572 miDestroyClip
+3 0.0572 miTrapezoidBounds
+2 0.0382 CompositeRects
+2 0.0382 CreateGC
+2 0.0382 GetScratchPixmapHeader
+2 0.0382 ProcPolyFillRectangle
+2 0.0382 ProcSetClipRectangles
+2 0.0382 SetPictureClipRects
+2 0.0382 _XSERVTransSocketRead
+2 0.0382 __i686.get_pc_thunk.cx
+2 0.0382 dixLookupGC
+2 0.0382 miBSCheapChangeClip
+2 0.0382 miChangePictureClip
+2 0.0382 miDestroyPicture
+1 0.0191 BlockHandler
+1 0.0191 CompositeTrapezoids
+1 0.0191 DeliverDeviceEvents
+1 0.0191 FlushClient
+1 0.0191 PictureMatchFormat
+1 0.0191 ProcChangeGC
+1 0.0191 ProcCreateGC
+1 0.0191 ProcRenderComposite
+1 0.0191 ProcRenderSetPictureClipRectangles
+1 0.0191 QuickSortRects
+1 0.0191 SmartScheduleTimer
+1 0.0191 XkbFilterEvents
+1 0.0191 _XSERVTransRead
+1 0.0191 damageDestroyGC
+1 0.0191 damageInsertDamage
+1 0.0191 damageRemoveDamage
+1 0.0191 miBSCheapDestroyClip
+1 0.0191 miBSCreateGC
+1 0.0191 miChangePicture
+1 0.0191 miChangePictureTransform
+1 0.0191 miCreateAlphaPicture
+1 0.0191 xf86VTSwitchPending
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 16 0.0756 intel_drv.so I830EXASync
+ 21162 99.9244 intel_drv.so I830Sync
+11683 41.1417 intel_drv.so I830WaitLpRing
+ 11683 55.1657 intel_drv.so I830WaitLpRing [self]
+ 8254 38.9744 libc-2.5.so gettimeofday
+ 1130 5.3357 Xorg GetTimeInMillis
+ 62 0.2928 Xorg __i686.get_pc_thunk.bx
+ 49 0.2314 Xorg .plt
+-------------------------------------------------------------------------------
+10181 35.8524 intel_drv.so i965_prepare_composite
+ 12089 44.7525 intel_drv.so i830WaitSync
+ 10181 37.6893 intel_drv.so i965_prepare_composite [self]
+ 4090 15.1409 libc-2.5.so memcpy
+ 218 0.8070 intel_drv.so intel_get_pixmap_offset
+ 124 0.4590 intel_drv.so intel_get_pixmap_pitch
+ 118 0.4368 intel_drv.so IntelEmitInvarientState
+ 62 0.2295 intel_drv.so __i686.get_pc_thunk.bx
+ 31 0.1148 intel_drv.so .plt
+ 22 0.0814 libdri.so DRIGetContext
+ 17 0.0629 libdri.so __i686.get_pc_thunk.cx
+ 17 0.0629 libexa.so exaGetPixmapPitch
+ 14 0.0518 libexa.so exaGetPixmapOffset
+ 11 0.0407 intel_drv.so i965_get_card_format
+ 8 0.0296 libexa.so exaWaitSync
+ 7 0.0259 libdri.so DRIGetSAREAPrivate
+ 4 0.0148 intel_drv.so i965_get_dest_format
+-------------------------------------------------------------------------------
+4128 14.5367 intel_drv.so i965_composite
+ 4128 90.6257 intel_drv.so i965_composite [self]
+ 179 3.9297 intel_drv.so i830_get_transformed_coordinates
+ 127 2.7881 intel_drv.so i830WaitSync
+ 56 1.2294 intel_drv.so i830MarkSync
+ 43 0.9440 intel_drv.so __i686.get_pc_thunk.bx
+ 16 0.3513 intel_drv.so .plt
+ 5 0.1098 libexa.so exaWaitSync
+ 1 0.0220 libexa.so exaMarkSync
+-------------------------------------------------------------------------------
+ 21910 100.000 intel_drv.so I830EXASync
+570 2.0073 intel_drv.so I830Sync
+ 21162 96.5508 intel_drv.so I830WaitLpRing
+ 570 2.6006 intel_drv.so I830Sync [self]
+ 127 0.5794 Xorg GetTimeInMillis
+ 50 0.2281 intel_drv.so .plt
+ 8 0.0365 intel_drv.so __i686.get_pc_thunk.bx
+ 1 0.0046 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols)
+-------------------------------------------------------------------------------
+ 9 8.4906 intel_drv.so I830EXASync
+ 16 15.0943 intel_drv.so i965_composite
+ 31 29.2453 intel_drv.so i965_prepare_composite
+ 50 47.1698 intel_drv.so I830Sync
+224 0.7888 intel_drv.so .plt
+ 224 100.000 intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 179 100.000 intel_drv.so i965_composite
+216 0.7606 intel_drv.so i830_get_transformed_coordinates
+ 216 100.000 intel_drv.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+211 0.7430 intel_drv.so i965_check_composite
+ 211 52.0988 intel_drv.so i965_check_composite [self]
+ 155 38.2716 intel_drv.so i965_check_composite_texture
+ 21 5.1852 intel_drv.so __i686.get_pc_thunk.bx
+ 18 4.4444 intel_drv.so i965_get_dest_format
+-------------------------------------------------------------------------------
+ 6 4.2857 intel_drv.so I830EXASync
+ 8 5.7143 intel_drv.so I830Sync
+ 21 15.0000 intel_drv.so i965_check_composite
+ 43 30.7143 intel_drv.so i965_composite
+ 62 44.2857 intel_drv.so i965_prepare_composite
+193 0.6796 intel_drv.so __i686.get_pc_thunk.bx
+ 193 100.000 intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 155 100.000 intel_drv.so i965_check_composite
+193 0.6796 intel_drv.so i965_check_composite_texture
+ 193 100.000 intel_drv.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+ 127 1.0396 intel_drv.so i965_composite
+ 12089 98.9604 intel_drv.so i965_prepare_composite
+170 0.5987 intel_drv.so i830WaitSync
+ 12054 98.4563 libexa.so exaWaitSync
+ 170 1.3885 intel_drv.so i830WaitSync [self]
+ 12 0.0980 libexa.so __i686.get_pc_thunk.bx
+ 7 0.0572 intel_drv.so I830EXASync
+-------------------------------------------------------------------------------
+ 124 100.000 intel_drv.so i965_prepare_composite
+164 0.5775 intel_drv.so intel_get_pixmap_pitch
+ 164 96.4706 intel_drv.so intel_get_pixmap_pitch [self]
+ 6 3.5294 libexa.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+ 218 100.000 intel_drv.so i965_prepare_composite
+151 0.5317 intel_drv.so intel_get_pixmap_offset
+ 151 63.1799 intel_drv.so intel_get_pixmap_offset [self]
+ 71 29.7071 libexa.so exaGetPixmapOffset
+ 17 7.1130 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 118 100.000 intel_drv.so i965_prepare_composite
+82 0.2888 intel_drv.so IntelEmitInvarientState
+ 82 62.1212 intel_drv.so IntelEmitInvarientState [self]
+ 34 25.7576 libdri.so DRIGetSAREAPrivate
+ 16 12.1212 libdri.so DRIGetContext
+-------------------------------------------------------------------------------
+ 7 100.000 intel_drv.so i830WaitSync
+77 0.2712 intel_drv.so I830EXASync
+ 21910 99.5095 intel_drv.so I830Sync
+ 77 0.3497 intel_drv.so I830EXASync [self]
+ 16 0.0727 intel_drv.so I830WaitLpRing
+ 9 0.0409 intel_drv.so .plt
+ 6 0.0273 intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 4 18.1818 intel_drv.so i965_prepare_composite
+ 18 81.8182 intel_drv.so i965_check_composite
+42 0.1479 intel_drv.so i965_get_dest_format
+ 42 100.000 intel_drv.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+39 0.1373 intel_drv.so I830EXASolid
+ 39 95.1220 intel_drv.so I830EXASolid [self]
+ 2 4.8780 libexa.so exaGetPixmapOffset
+-------------------------------------------------------------------------------
+23 0.0810 intel_drv.so I830EXAPrepareSolid
+ 23 88.4615 intel_drv.so I830EXAPrepareSolid [self]
+ 3 11.5385 libexa.so exaGetPixmapOffset
+-------------------------------------------------------------------------------
+ 56 100.000 intel_drv.so i965_composite
+19 0.0669 intel_drv.so i830MarkSync
+ 35 56.4516 libexa.so exaMarkSync
+ 19 30.6452 intel_drv.so i830MarkSync [self]
+ 8 12.9032 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 11 100.000 intel_drv.so i965_prepare_composite
+17 0.0599 intel_drv.so i965_get_card_format
+ 17 100.000 intel_drv.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+13 0.0458 intel_drv.so i830_done_composite
+ 13 100.000 intel_drv.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+1 0.0035 intel_drv.so I830EXACopy
+ 1 100.000 intel_drv.so I830EXACopy [self]
+-------------------------------------------------------------------------------
+ 49 100.000 intel_drv.so I830WaitLpRing
+0 0 Xorg .plt
+ 0 0 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 127 10.1034 intel_drv.so I830Sync
+ 1130 89.8966 intel_drv.so I830WaitLpRing
+0 0 Xorg GetTimeInMillis
+ 0 0 Xorg GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+ 62 100.000 intel_drv.so I830WaitLpRing
+0 0 Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 intel_drv.so I830Sync
+0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols)
+ 0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols) [self]
+-------------------------------------------------------------------------------
+ 8254 100.000 intel_drv.so I830WaitLpRing
+0 0 libc-2.5.so gettimeofday
+ 0 0 libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 4090 100.000 intel_drv.so i965_prepare_composite
+0 0 libc-2.5.so memcpy
+ 0 0 libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 16 42.1053 intel_drv.so IntelEmitInvarientState
+ 22 57.8947 intel_drv.so i965_prepare_composite
+0 0 libdri.so DRIGetContext
+ 0 0 libdri.so DRIGetContext [self]
+-------------------------------------------------------------------------------
+ 7 17.0732 intel_drv.so i965_prepare_composite
+ 34 82.9268 intel_drv.so IntelEmitInvarientState
+0 0 libdri.so DRIGetSAREAPrivate
+ 0 0 libdri.so DRIGetSAREAPrivate [self]
+-------------------------------------------------------------------------------
+ 17 100.000 intel_drv.so i965_prepare_composite
+0 0 libdri.so __i686.get_pc_thunk.cx
+ 0 0 libdri.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 8 21.6216 intel_drv.so i830MarkSync
+ 12 32.4324 intel_drv.so i830WaitSync
+ 17 45.9459 intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 2 2.2222 intel_drv.so I830EXASolid
+ 3 3.3333 intel_drv.so I830EXAPrepareSolid
+ 14 15.5556 intel_drv.so i965_prepare_composite
+ 71 78.8889 intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so exaGetPixmapOffset
+ 0 0 libexa.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+ 6 26.0870 intel_drv.so intel_get_pixmap_pitch
+ 17 73.9130 intel_drv.so i965_prepare_composite
+0 0 libexa.so exaGetPixmapPitch
+ 0 0 libexa.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+ 1 2.7778 intel_drv.so i965_composite
+ 35 97.2222 intel_drv.so i830MarkSync
+0 0 libexa.so exaMarkSync
+ 0 0 libexa.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+ 5 0.0414 intel_drv.so i965_composite
+ 8 0.0663 intel_drv.so i965_prepare_composite
+ 12054 99.8923 intel_drv.so i830WaitSync
+0 0 libexa.so exaWaitSync
+ 0 0 libexa.so exaWaitSync [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+11683 41.1417 I830WaitLpRing
+10181 35.8524 i965_prepare_composite
+4128 14.5367 i965_composite
+570 2.0073 I830Sync
+224 0.7888 .plt
+216 0.7606 i830_get_transformed_coordinates
+211 0.7430 i965_check_composite
+193 0.6796 __i686.get_pc_thunk.bx
+193 0.6796 i965_check_composite_texture
+170 0.5987 i830WaitSync
+164 0.5775 intel_get_pixmap_pitch
+151 0.5317 intel_get_pixmap_offset
+82 0.2888 IntelEmitInvarientState
+77 0.2712 I830EXASync
+42 0.1479 i965_get_dest_format
+39 0.1373 I830EXASolid
+23 0.0810 I830EXAPrepareSolid
+19 0.0669 i830MarkSync
+17 0.0599 i965_get_card_format
+13 0.0458 i830_done_composite
+1 0.0035 I830EXACopy
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 1 0.8130 libc-2.5.so read_alias_file
+ 1 0.8130 libc-2.5.so _IO_getline_info
+ 3 2.4390 libc-2.5.so _int_realloc
+ 118 95.9350 libc-2.5.so msort_with_tmp
+31820 72.8380 libc-2.5.so memcpy
+ 31820 100.000 libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+8255 18.8962 libc-2.5.so gettimeofday
+ 8255 100.000 libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 18 1.7964 libc-2.5.so _int_realloc
+ 984 98.2036 libc-2.5.so malloc
+879 2.0121 libc-2.5.so _int_malloc
+ 879 86.0921 libc-2.5.so _int_malloc [self]
+ 142 13.9079 libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+ 1 2.3256 libc-2.5.so vasprintf
+ 1 2.3256 libc-2.5.so malloc_hook_ini
+ 1 2.3256 libc-2.5.so strdup
+ 8 18.6047 libc-2.5.so __fopen_internal
+ 12 27.9070 libc-2.5.so _nl_normalize_codeset
+ 20 46.5116 libc-2.5.so realloc
+668 1.5291 libc-2.5.so malloc
+ 984 58.1560 libc-2.5.so _int_malloc
+ 668 39.4799 libc-2.5.so malloc [self]
+ 19 1.1229 libc-2.5.so malloc_hook_ini
+ 17 1.0047 libc-2.5.so __i686.get_pc_thunk.bx
+ 4 0.2364 libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _nl_make_l10nflist
+471 1.0781 libc-2.5.so free
+ 471 58.0764 libc-2.5.so free [self]
+ 327 40.3206 libc-2.5.so _int_free
+ 13 1.6030 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 10 2.9674 libc-2.5.so _int_realloc
+ 327 97.0326 libc-2.5.so free
+356 0.8149 libc-2.5.so _int_free
+ 356 98.6150 libc-2.5.so _int_free [self]
+ 5 1.3850 libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+197 0.4509 libc-2.5.so memcmp
+ 197 100.000 libc-2.5.so memcmp [self]
+-------------------------------------------------------------------------------
+ 367 24.3854 libc-2.5.so qsort
+ 1138 75.6146 libc-2.5.so msort_with_tmp
+153 0.3502 libc-2.5.so msort_with_tmp
+ 1138 75.4642 libc-2.5.so msort_with_tmp
+ 153 10.1459 libc-2.5.so msort_with_tmp [self]
+ 118 7.8249 libc-2.5.so memcpy
+ 89 5.9019 libxul.so (no symbols)
+ 4 0.2653 libc-2.5.so __i686.get_pc_thunk.bx
+ 3 0.1989 libcairo.so.2.11.3 (no symbols)
+ 2 0.1326 libc-2.5.so mempcpy
+ 1 0.0663 libc-2.5.so strcoll
+-------------------------------------------------------------------------------
+ 4 2.6490 libc-2.5.so malloc
+ 5 3.3113 libc-2.5.so _int_free
+ 142 94.0397 libc-2.5.so _int_malloc
+151 0.3456 libc-2.5.so malloc_consolidate
+ 151 100.000 libc-2.5.so malloc_consolidate [self]
+-------------------------------------------------------------------------------
+149 0.3411 libc-2.5.so memmove
+ 149 100.000 libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 1 2.4390 libc-2.5.so qsort
+ 1 2.4390 libc-2.5.so _nl_find_locale
+ 4 9.7561 libc-2.5.so msort_with_tmp
+ 5 12.1951 libc-2.5.so mbrtowc
+ 13 31.7073 libc-2.5.so free
+ 17 41.4634 libc-2.5.so malloc
+90 0.2060 libc-2.5.so __i686.get_pc_thunk.bx
+ 90 100.000 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so sigemptyset
+85 0.1946 libc-2.5.so memset
+ 85 100.000 libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __fopen_internal
+73 0.1671 libc-2.5.so strstr
+ 73 100.000 libc-2.5.so strstr [self]
+-------------------------------------------------------------------------------
+ 53 100.000 libc-2.5.so mbrtowc
+53 0.1213 libc-2.5.so __gconv_transform_utf8_internal
+ 53 100.000 libc-2.5.so __gconv_transform_utf8_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nss_lookup
+46 0.1053 libc-2.5.so strlen
+ 46 100.000 libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so mblen
+44 0.1007 libc-2.5.so mbrtowc
+ 53 50.4762 libc-2.5.so __gconv_transform_utf8_internal
+ 44 41.9048 libc-2.5.so mbrtowc [self]
+ 5 4.7619 libc-2.5.so __i686.get_pc_thunk.bx
+ 2 1.9048 libc-2.5.so _dl_mcount_wrapper_check
+ 1 0.9524 libc-2.5.so __wcsmbs_load_conv
+-------------------------------------------------------------------------------
+ 18 100.000 libc-2.5.so ptmalloc_init
+18 0.0412 libc-2.5.so _dl_addr
+ 18 100.000 libc-2.5.so _dl_addr [self]
+-------------------------------------------------------------------------------
+18 0.0412 libc-2.5.so mkdir
+ 18 100.000 libc-2.5.so mkdir [self]
+-------------------------------------------------------------------------------
+ 45 100.000 libc-2.5.so realloc
+14 0.0320 libc-2.5.so _int_realloc
+ 18 40.0000 libc-2.5.so _int_malloc
+ 14 31.1111 libc-2.5.so _int_realloc [self]
+ 10 22.2222 libc-2.5.so _int_free
+ 3 6.6667 libc-2.5.so memcpy
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so read_alias_file
+14 0.0320 libc-2.5.so qsort
+ 367 95.5729 libc-2.5.so msort_with_tmp
+ 14 3.6458 libc-2.5.so qsort [self]
+ 2 0.5208 libxul.so (no symbols)
+ 1 0.2604 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+12 0.0275 libc-2.5.so realloc
+ 45 58.4416 libc-2.5.so _int_realloc
+ 20 25.9740 libc-2.5.so malloc
+ 12 15.5844 libc-2.5.so realloc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _nl_make_l10nflist
+12 0.0275 libc-2.5.so strcmp
+ 12 100.000 libc-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libc-2.5.so vsscanf
+6 0.0137 libc-2.5.so _IO_vfscanf
+ 6 75.0000 libc-2.5.so _IO_vfscanf [self]
+ 1 12.5000 libc-2.5.so _IO_sputbackc
+ 1 12.5000 libc-2.5.so __strtoul_internal
+-------------------------------------------------------------------------------
+6 0.0137 libc-2.5.so __read_nocancel
+ 6 100.000 libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _nl_expand_alias
+6 0.0137 libc-2.5.so strchr
+ 6 100.000 libc-2.5.so strchr [self]
+-------------------------------------------------------------------------------
+ 4 50.0000 libc-2.5.so vsprintf
+ 4 50.0000 libc-2.5.so vasprintf
+5 0.0114 libc-2.5.so vfprintf
+ 5 62.5000 libc-2.5.so vfprintf [self]
+ 3 37.5000 libc-2.5.so _IO_default_xsputn
+-------------------------------------------------------------------------------
+4 0.0092 libc-2.5.so __i686.get_pc_thunk.cx
+ 4 100.000 libc-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so mbrtowc
+4 0.0092 libc-2.5.so _dl_mcount_wrapper_check
+ 4 100.000 libc-2.5.so _dl_mcount_wrapper_check [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so vfprintf
+3 0.0069 libc-2.5.so _IO_default_xsputn
+ 3 100.000 libc-2.5.so _IO_default_xsputn [self]
+-------------------------------------------------------------------------------
+3 0.0069 libc-2.5.so __ctype_get_mb_cur_max
+ 3 100.000 libc-2.5.so __ctype_get_mb_cur_max [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __sigjmp_save
+3 0.0069 libc-2.5.so sigprocmask
+ 3 100.000 libc-2.5.so sigprocmask [self]
+-------------------------------------------------------------------------------
+3 0.0069 libc-2.5.so strcpy
+ 3 100.000 libc-2.5.so strcpy [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so fopen@@GLIBC_2.1
+ 2 66.6667 libc-2.5.so __fopen_internal
+2 0.0046 libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 2 66.6667 libc-2.5.so _IO_file_fopen@@GLIBC_2.1 [self]
+ 1 33.3333 libc-2.5.so __open_nocancel
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so __fopen_internal
+ 1 50.0000 libc-2.5.so fopen@@GLIBC_2.1
+2 0.0046 libc-2.5.so _IO_file_init@@GLIBC_2.1
+ 2 100.000 libc-2.5.so _IO_file_init@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so fclose@@GLIBC_2.1
+2 0.0046 libc-2.5.so _IO_un_link
+ 2 100.000 libc-2.5.so _IO_un_link [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __strtoul_internal
+2 0.0046 libc-2.5.so ____strtoul_l_internal
+ 2 100.000 libc-2.5.so ____strtoul_l_internal [self]
+-------------------------------------------------------------------------------
+2 0.0046 libc-2.5.so __close_nocancel
+ 2 100.000 libc-2.5.so __close_nocancel [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so _nl_find_locale
+2 0.0046 libc-2.5.so __open_nocancel
+ 2 100.000 libc-2.5.so __open_nocancel [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so __rpc_thread_destroy
+ 1 50.0000 libc-2.5.so setutent_file
+2 0.0046 libc-2.5.so __rpc_thread_destroy
+ 2 66.6667 libc-2.5.so __rpc_thread_destroy [self]
+ 1 33.3333 libc-2.5.so __rpc_thread_destroy
+-------------------------------------------------------------------------------
+2 0.0046 libc-2.5.so __xstat
+ 2 66.6667 libc-2.5.so __xstat [self]
+ 1 33.3333 libc-2.5.so __xstat32_conv
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so _nl_load_locale_from_archive
+2 0.0046 libc-2.5.so _nl_intern_locale_data
+ 2 100.000 libc-2.5.so _nl_intern_locale_data [self]
+-------------------------------------------------------------------------------
+2 0.0046 libc-2.5.so bsearch
+ 3 60.0000 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+ 2 40.0000 libc-2.5.so bsearch [self]
+-------------------------------------------------------------------------------
+2 0.0046 libc-2.5.so fclose@@GLIBC_2.1
+ 2 50.0000 libc-2.5.so fclose@@GLIBC_2.1 [self]
+ 1 25.0000 libc-2.5.so _IO_un_link
+ 1 25.0000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+-------------------------------------------------------------------------------
+2 0.0046 libc-2.5.so ftruncate
+ 2 100.000 libc-2.5.so ftruncate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so msort_with_tmp
+2 0.0046 libc-2.5.so mempcpy
+ 2 100.000 libc-2.5.so mempcpy [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+2 0.0046 libc-2.5.so munmap
+ 2 100.000 libc-2.5.so munmap [self]
+-------------------------------------------------------------------------------
+2 0.0046 libc-2.5.so strcat
+ 2 100.000 libc-2.5.so strcat [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so fwrite
+1 0.0023 libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so _IO_doallocbuf
+ 1 50.0000 libc-2.5.so _IO_file_overflow@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_doallocate
+1 0.0023 libc-2.5.so _IO_file_stat
+ 1 100.000 libc-2.5.so _IO_file_stat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_default_uflow
+1 0.0023 libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 1 100.000 libc-2.5.so _IO_file_underflow@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so fwrite
+1 0.0023 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so vsprintf
+1 0.0023 libc-2.5.so _IO_setb
+ 1 100.000 libc-2.5.so _IO_setb [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_vfscanf
+1 0.0023 libc-2.5.so _IO_sputbackc
+ 1 100.000 libc-2.5.so _IO_sputbackc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __strtod_internal
+1 0.0023 libc-2.5.so ____strtod_l_internal
+ 1 100.000 libc-2.5.so ____strtod_l_internal [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so ___newselect_nocancel
+ 1 100.000 libc-2.5.so ___newselect_nocancel [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so __libc_enable_asynccancel
+ 1 100.000 libc-2.5.so __libc_enable_asynccancel [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __cxa_atexit
+1 0.0023 libc-2.5.so __new_exitfn
+ 1 100.000 libc-2.5.so __new_exitfn [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so __sigjmp_save
+ 1 50.0000 libc-2.5.so sigprocmask
+ 1 50.0000 libc-2.5.so __sigjmp_save [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __xstat
+1 0.0023 libc-2.5.so __xstat32_conv
+ 1 100.000 libc-2.5.so __xstat32_conv [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getopt_long
+1 0.0023 libc-2.5.so _getopt_internal
+ 1 100.000 libc-2.5.so _getopt_internal [self]
+-------------------------------------------------------------------------------
+ 3 37.5000 libc-2.5.so _nl_find_domain
+ 5 62.5000 libc-2.5.so _nl_make_l10nflist
+1 0.0023 libc-2.5.so _nl_make_l10nflist
+ 5 62.5000 libc-2.5.so _nl_make_l10nflist
+ 1 12.5000 libc-2.5.so free
+ 1 12.5000 libc-2.5.so strcmp
+ 1 12.5000 libc-2.5.so _nl_make_l10nflist [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libc-2.5.so _nl_load_locale_from_archive
+1 0.0023 libc-2.5.so _nl_normalize_codeset
+ 12 92.3077 libc-2.5.so malloc
+ 1 7.6923 libc-2.5.so _nl_normalize_codeset [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so fgets
+ 1 100.000 libc-2.5.so fgets [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so fork
+ 1 100.000 libc-2.5.so fork [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nscd_get_map_ref
+1 0.0023 libc-2.5.so get_mapping
+ 1 100.000 libc-2.5.so get_mapping [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so getpid
+ 1 100.000 libc-2.5.so getpid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __res_iclose
+1 0.0023 libc-2.5.so inet_nsap_ntoa
+ 1 100.000 libc-2.5.so inet_nsap_ntoa [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __gconv_read_conf
+1 0.0023 libc-2.5.so mmap
+ 1 100.000 libc-2.5.so mmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so setlocale
+1 0.0023 libc-2.5.so new_composite_name
+ 1 100.000 libc-2.5.so new_composite_name [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so parse_reg_exp
+1 0.0023 libc-2.5.so parse_expression
+ 1 100.000 libc-2.5.so parse_expression [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_compile_internal
+1 0.0023 libc-2.5.so peek_token
+ 1 100.000 libc-2.5.so peek_token [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so pipe
+ 1 100.000 libc-2.5.so pipe [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so random_r
+ 1 100.000 libc-2.5.so random_r [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so sbrk
+ 1 100.000 libc-2.5.so sbrk [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so setlocale
+ 18 90.0000 libc-2.5.so _nl_find_locale
+ 1 5.0000 libc-2.5.so new_composite_name
+ 1 5.0000 libc-2.5.so setlocale [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so sigemptyset
+ 1 50.0000 libc-2.5.so memset
+ 1 50.0000 libc-2.5.so sigemptyset [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so sprintf
+ 5 83.3333 libc-2.5.so vsprintf
+ 1 16.6667 libc-2.5.so sprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so strcoll
+1 0.0023 libc-2.5.so strcoll_l
+ 1 100.000 libc-2.5.so strcoll_l [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _nl_load_locale_from_archive
+1 0.0023 libc-2.5.so strncmp
+ 1 100.000 libc-2.5.so strncmp [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so time
+ 1 100.000 libc-2.5.so time [self]
+-------------------------------------------------------------------------------
+1 0.0023 libc-2.5.so trans_compare
+ 1 100.000 libc-2.5.so trans_compare [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so wctob
+1 0.0023 libc-2.5.so wcsrtombs
+ 1 100.000 libc-2.5.so wcsrtombs [self]
+-------------------------------------------------------------------------------
+ 91211 100.000 libc-2.5.so __libc_start_main
+0 0 Xorg main
+ 0 0 Xorg main [self]
+-------------------------------------------------------------------------------
+ 1 0.3906 libc-2.5.so _IO_wfile_seekoff
+ 255 99.6094 libc-2.5.so __libc_start_main
+0 0 bash (no symbols)
+ 0 0 bash (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so __libc_start_main
+0 0 cat (no symbols)
+ 0 0 cat (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 dirname (no symbols)
+ 0 0 dirname (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 expr (no symbols)
+ 0 0 expr (no symbols) [self]
+-------------------------------------------------------------------------------
+ 629 100.000 libc-2.5.so __libc_start_main
+0 0 firefox-bin (no symbols)
+ 0 0 firefox-bin (no symbols) [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libc-2.5.so __libc_start_main
+0 0 gawk (no symbols)
+ 0 0 gawk (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 4.1667 libc-2.5.so exit
+ 23 95.8333 libc-2.5.so __libc_start_main
+0 0 grep (no symbols)
+ 0 0 grep (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so __libc_dlopen_mode
+0 0 ld-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so exit
+0 0 ld-2.5.so _dl_fini
+ 0 0 ld-2.5.so _dl_fini [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so do_dlopen
+0 0 ld-2.5.so _dl_open
+ 0 0 ld-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libc-2.5.so re_compile_pattern
+ 4 80.0000 libc-2.5.so __libc_start_main
+0 0 ld-2.5.so _dl_runtime_resolve
+ 0 0 ld-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __uflow
+0 0 libc-2.5.so _IO_default_uflow
+ 1 100.000 libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 0 0 libc-2.5.so _IO_default_uflow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+0 0 libc-2.5.so _IO_doallocbuf
+ 1 100.000 libc-2.5.so _IO_file_doallocate
+ 0 0 libc-2.5.so _IO_doallocbuf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so fclose@@GLIBC_2.1
+0 0 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 100.000 libc-2.5.so munmap
+ 0 0 libc-2.5.so _IO_file_close_it@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_doallocbuf
+0 0 libc-2.5.so _IO_file_doallocate
+ 1 100.000 libc-2.5.so _IO_file_stat
+ 0 0 libc-2.5.so _IO_file_doallocate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so fgets_unlocked
+0 0 libc-2.5.so _IO_getline
+ 2 100.000 libc-2.5.so _IO_getline_info
+ 0 0 libc-2.5.so _IO_getline [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so _IO_getline
+0 0 libc-2.5.so _IO_getline_info
+ 1 50.0000 libc-2.5.so memcpy
+ 1 50.0000 libc-2.5.so __uflow
+ 0 0 libc-2.5.so _IO_getline_info [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so _IO_wfile_seekoff
+ 1 100.000 bash (no symbols)
+ 0 0 libc-2.5.so _IO_wfile_seekoff [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so __cxa_atexit
+ 1 100.000 libc-2.5.so __new_exitfn
+ 0 0 libc-2.5.so __cxa_atexit [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so dcgettext
+0 0 libc-2.5.so __dcigettext
+ 7 100.000 libc-2.5.so _nl_find_domain
+ 0 0 libc-2.5.so __dcigettext [self]
+-------------------------------------------------------------------------------
+ 4 30.7692 libc-2.5.so fopen64
+ 9 69.2308 libc-2.5.so fopen@@GLIBC_2.1
+0 0 libc-2.5.so __fopen_internal
+ 8 61.5385 libc-2.5.so malloc
+ 2 15.3846 libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 2 15.3846 libc-2.5.so strstr
+ 1 7.6923 libc-2.5.so _IO_file_init@@GLIBC_2.1
+ 0 0 libc-2.5.so __fopen_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __wcsmbs_load_conv
+0 0 libc-2.5.so __gconv_find_transform
+ 1 100.000 libc-2.5.so __gconv_read_conf
+ 0 0 libc-2.5.so __gconv_find_transform [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __gconv_find_transform
+0 0 libc-2.5.so __gconv_read_conf
+ 1 100.000 libc-2.5.so mmap
+ 0 0 libc-2.5.so __gconv_read_conf [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so __nss_lookup_function
+0 0 libc-2.5.so __libc_dlopen_mode
+ 5 100.000 ld-2.5.so _dl_catch_error
+ 0 0 libc-2.5.so __libc_dlopen_mode [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so __libc_start_main
+ 91211 91.8235 Xorg main
+ 7158 7.2061 oprofiled (no symbols)
+ 629 0.6332 firefox-bin (no symbols)
+ 255 0.2567 bash (no symbols)
+ 23 0.0232 grep (no symbols)
+ 16 0.0161 sudo (no symbols)
+ 7 0.0070 ls (no symbols)
+ 6 0.0060 gawk (no symbols)
+ 5 0.0050 cat (no symbols)
+ 5 0.0050 mkdir (no symbols)
+ 4 0.0040 ophelp (no symbols)
+ 4 0.0040 ld-2.5.so _dl_runtime_resolve
+ 3 0.0030 tr (no symbols)
+ 2 0.0020 expr (no symbols)
+ 2 0.0020 sshd (no symbols)
+ 1 0.0010 dirname (no symbols)
+ 1 0.0010 sleep (no symbols)
+ 1 0.0010 mktemp (no symbols)
+ 0 0 libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so nscd_getpw_r
+0 0 libc-2.5.so __nscd_get_map_ref
+ 1 100.000 libc-2.5.so get_mapping
+ 0 0 libc-2.5.so __nscd_get_map_ref [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+0 0 libc-2.5.so __nscd_getpwuid_r
+ 1 100.000 libc-2.5.so nscd_getpw_r
+ 0 0 libc-2.5.so __nscd_getpwuid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nss_passwd_lookup
+0 0 libc-2.5.so __nss_database_lookup
+ 1 100.000 libc-2.5.so fopen@@GLIBC_2.1
+ 0 0 libc-2.5.so __nss_database_lookup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getprotoent_r@@GLIBC_2.1.2
+0 0 libc-2.5.so __nss_hostname_digits_dots
+ 1 100.000 libc-2.5.so __res_iclose
+ 0 0 libc-2.5.so __nss_hostname_digits_dots [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+0 0 libc-2.5.so __nss_hosts_lookup
+ 1 100.000 libc-2.5.so __nss_lookup
+ 0 0 libc-2.5.so __nss_hosts_lookup [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libc-2.5.so __nss_hosts_lookup
+ 4 80.0000 libc-2.5.so __nss_passwd_lookup
+0 0 libc-2.5.so __nss_lookup
+ 4 80.0000 libc-2.5.so __nss_lookup_function
+ 1 20.0000 libc-2.5.so strlen
+ 0 0 libc-2.5.so __nss_lookup [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so __nss_lookup
+0 0 libc-2.5.so __nss_lookup_function
+ 5 100.000 libc-2.5.so __libc_dlopen_mode
+ 0 0 libc-2.5.so __nss_lookup_function [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 3 60.0000 libc-2.5.so __nss_setent
+0 0 libc-2.5.so __nss_passwd_lookup
+ 4 80.0000 libc-2.5.so __nss_lookup
+ 1 20.0000 libc-2.5.so __nss_database_lookup
+ 0 0 libc-2.5.so __nss_passwd_lookup [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so setpwent
+0 0 libc-2.5.so __nss_setent
+ 3 100.000 libc-2.5.so __nss_passwd_lookup
+ 0 0 libc-2.5.so __nss_setent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so iswdigit_l
+0 0 libc-2.5.so __printf_fp
+ 1 100.000 libc-2.5.so endspent
+ 0 0 libc-2.5.so __printf_fp [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nss_hostname_digits_dots
+0 0 libc-2.5.so __res_iclose
+ 1 100.000 libc-2.5.so inet_nsap_ntoa
+ 0 0 libc-2.5.so __res_iclose [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so __strtod_internal
+ 1 100.000 libc-2.5.so ____strtod_l_internal
+ 0 0 libc-2.5.so __strtod_internal [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so _IO_vfscanf
+ 1 50.0000 libc-2.5.so _nss_files_parse_pwent
+0 0 libc-2.5.so __strtoul_internal
+ 2 100.000 libc-2.5.so ____strtoul_l_internal
+ 0 0 libc-2.5.so __strtoul_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_getline_info
+0 0 libc-2.5.so __uflow
+ 1 100.000 libc-2.5.so _IO_default_uflow
+ 0 0 libc-2.5.so __uflow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so mbrtowc
+0 0 libc-2.5.so __wcsmbs_load_conv
+ 1 100.000 libc-2.5.so __gconv_find_transform
+ 0 0 libc-2.5.so __wcsmbs_load_conv [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so _nl_find_domain
+0 0 libc-2.5.so _nl_expand_alias
+ 3 75.0000 libc-2.5.so read_alias_file
+ 1 25.0000 libc-2.5.so strchr
+ 0 0 libc-2.5.so _nl_expand_alias [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so __dcigettext
+0 0 libc-2.5.so _nl_find_domain
+ 4 57.1429 libc-2.5.so _nl_expand_alias
+ 3 42.8571 libc-2.5.so _nl_make_l10nflist
+ 0 0 libc-2.5.so _nl_find_domain [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libc-2.5.so setlocale
+0 0 libc-2.5.so _nl_find_locale
+ 16 88.8889 libc-2.5.so _nl_load_locale_from_archive
+ 1 5.5556 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 5.5556 libc-2.5.so __open_nocancel
+ 0 0 libc-2.5.so _nl_find_locale [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libc-2.5.so _nl_find_locale
+0 0 libc-2.5.so _nl_load_locale_from_archive
+ 13 81.2500 libc-2.5.so _nl_normalize_codeset
+ 2 12.5000 libc-2.5.so _nl_intern_locale_data
+ 1 6.2500 libc-2.5.so strncmp
+ 0 0 libc-2.5.so _nl_load_locale_from_archive [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so _nss_files_parse_pwent
+ 1 100.000 libc-2.5.so __strtoul_internal
+ 0 0 libc-2.5.so _nss_files_parse_pwent [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so asprintf
+ 4 100.000 libc-2.5.so vasprintf
+ 0 0 libc-2.5.so asprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so strerror_r
+0 0 libc-2.5.so dcgettext
+ 7 100.000 libc-2.5.so __dcigettext
+ 0 0 libc-2.5.so dcgettext [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so do_dlopen
+ 5 100.000 ld-2.5.so _dl_open
+ 0 0 libc-2.5.so do_dlopen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __printf_fp
+0 0 libc-2.5.so endspent
+ 1 100.000 libc-2.5.so wctob
+ 0 0 libc-2.5.so endspent [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so error
+ 1 100.000 libc-2.5.so error_tail
+ 0 0 libc-2.5.so error [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so error
+0 0 libc-2.5.so error_tail
+ 1 100.000 libc-2.5.so strerror_r
+ 0 0 libc-2.5.so error_tail [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so exit
+ 5 83.3333 ld-2.5.so _dl_fini
+ 1 16.6667 grep (no symbols)
+ 0 0 libc-2.5.so exit [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so free_derivation
+0 0 libc-2.5.so fallback_frame_state_for
+ 1 100.000 libc-2.5.so pututline_file
+ 0 0 libc-2.5.so fallback_frame_state_for [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so read_alias_file
+0 0 libc-2.5.so fgets_unlocked
+ 2 100.000 libc-2.5.so _IO_getline
+ 0 0 libc-2.5.so fgets_unlocked [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fopen64
+ 4 100.000 libc-2.5.so __fopen_internal
+ 0 0 libc-2.5.so fopen64 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nss_database_lookup
+0 0 libc-2.5.so fopen@@GLIBC_2.1
+ 9 81.8182 libc-2.5.so __fopen_internal
+ 1 9.0909 libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 1 9.0909 libc-2.5.so _IO_file_init@@GLIBC_2.1
+ 0 0 libc-2.5.so fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so free_derivation
+ 1 100.000 libc-2.5.so fallback_frame_state_for
+ 0 0 libc-2.5.so free_derivation [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fwrite
+ 2 66.6667 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 0 0 libc-2.5.so fwrite [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so gethostbyname
+ 2 100.000 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so gethostbyname [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so gethostbyname
+0 0 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 1 50.0000 libc-2.5.so __nss_hosts_lookup
+ 1 50.0000 libnss_files-2.5.so _nss_files_gethostbyname_r
+ 0 0 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so getopt_long
+ 1 100.000 libc-2.5.so _getopt_internal
+ 0 0 libc-2.5.so getopt_long [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so getprotoent_r@@GLIBC_2.1.2
+ 1 100.000 libc-2.5.so __nss_hostname_digits_dots
+ 0 0 libc-2.5.so getprotoent_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so getpwuid
+ 5 100.000 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so getpwuid [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so getpwuid
+0 0 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 2 40.0000 libc-2.5.so __nss_passwd_lookup
+ 2 40.0000 libnss_compat-2.5.so _nss_compat_getpwuid_r
+ 1 20.0000 libc-2.5.so __nscd_getpwuid_r
+ 0 0 libc-2.5.so getpwuid_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so pututline_file
+0 0 libc-2.5.so internal_getut_r
+ 1 100.000 libc-2.5.so setutent_file
+ 0 0 libc-2.5.so internal_getut_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so iswprint_l
+0 0 libc-2.5.so iswdigit_l
+ 1 100.000 libc-2.5.so __printf_fp
+ 0 0 libc-2.5.so iswdigit_l [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so iswprint_l
+ 1 100.000 libc-2.5.so iswdigit_l
+ 0 0 libc-2.5.so iswprint_l [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libc-2.5.so malloc
+0 0 libc-2.5.so malloc_hook_ini
+ 18 94.7368 libc-2.5.so ptmalloc_init
+ 1 5.2632 libc-2.5.so malloc
+ 0 0 libc-2.5.so malloc_hook_ini [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so mblen
+ 1 100.000 libc-2.5.so mbrtowc
+ 0 0 libc-2.5.so mblen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nscd_getpwuid_r
+0 0 libc-2.5.so nscd_getpw_r
+ 1 100.000 libc-2.5.so __nscd_get_map_ref
+ 0 0 libc-2.5.so nscd_getpw_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_compile_internal
+0 0 libc-2.5.so parse_reg_exp
+ 1 100.000 libc-2.5.so parse_expression
+ 0 0 libc-2.5.so parse_reg_exp [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libc-2.5.so malloc_hook_ini
+0 0 libc-2.5.so ptmalloc_init
+ 18 100.000 libc-2.5.so _dl_addr
+ 0 0 libc-2.5.so ptmalloc_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so fallback_frame_state_for
+0 0 libc-2.5.so pututline_file
+ 1 100.000 libc-2.5.so internal_getut_r
+ 0 0 libc-2.5.so pututline_file [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so re_compile_pattern
+0 0 libc-2.5.so re_compile_internal
+ 1 50.0000 libc-2.5.so peek_token
+ 1 50.0000 libc-2.5.so parse_reg_exp
+ 0 0 libc-2.5.so re_compile_internal [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so re_compile_pattern
+ 2 66.6667 libc-2.5.so re_compile_internal
+ 1 33.3333 ld-2.5.so _dl_runtime_resolve
+ 0 0 libc-2.5.so re_compile_pattern [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so _nl_expand_alias
+0 0 libc-2.5.so read_alias_file
+ 1 33.3333 libc-2.5.so qsort
+ 1 33.3333 libc-2.5.so memcpy
+ 1 33.3333 libc-2.5.so fgets_unlocked
+ 0 0 libc-2.5.so read_alias_file [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so setpwent
+ 3 100.000 libc-2.5.so __nss_setent
+ 0 0 libc-2.5.so setpwent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so internal_getut_r
+0 0 libc-2.5.so setutent_file
+ 1 100.000 libc-2.5.so __rpc_thread_destroy
+ 0 0 libc-2.5.so setutent_file [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so sscanf
+ 8 100.000 libc-2.5.so vsscanf
+ 0 0 libc-2.5.so sscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so msort_with_tmp
+0 0 libc-2.5.so strcoll
+ 1 100.000 libc-2.5.so strcoll_l
+ 0 0 libc-2.5.so strcoll [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so strdup
+ 1 100.000 libc-2.5.so malloc
+ 0 0 libc-2.5.so strdup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so error_tail
+0 0 libc-2.5.so strerror_r
+ 1 100.000 libc-2.5.so dcgettext
+ 0 0 libc-2.5.so strerror_r [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so asprintf
+0 0 libc-2.5.so vasprintf
+ 4 80.0000 libc-2.5.so vfprintf
+ 1 20.0000 libc-2.5.so malloc
+ 0 0 libc-2.5.so vasprintf [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so sprintf
+0 0 libc-2.5.so vsprintf
+ 4 80.0000 libc-2.5.so vfprintf
+ 1 20.0000 libc-2.5.so _IO_setb
+ 0 0 libc-2.5.so vsprintf [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libc-2.5.so sscanf
+0 0 libc-2.5.so vsscanf
+ 8 100.000 libc-2.5.so _IO_vfscanf
+ 0 0 libc-2.5.so vsscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so endspent
+0 0 libc-2.5.so wctob
+ 1 100.000 libc-2.5.so wcsrtombs
+ 0 0 libc-2.5.so wctob [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so msort_with_tmp
+0 0 libcairo.so.2.11.3 (no symbols)
+ 0 0 libcairo.so.2.11.3 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so bsearch
+0 0 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+ 0 0 libgtk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so _nss_compat_getpwuid_r
+ 0 0 libnss_compat-2.5.so _nss_compat_getpwuid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+0 0 libnss_files-2.5.so _nss_files_gethostbyname_r
+ 0 0 libnss_files-2.5.so _nss_files_gethostbyname_r [self]
+-------------------------------------------------------------------------------
+ 2 2.1978 libc-2.5.so qsort
+ 89 97.8022 libc-2.5.so msort_with_tmp
+0 0 libxul.so (no symbols)
+ 0 0 libxul.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so __libc_start_main
+0 0 ls (no symbols)
+ 0 0 ls (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so __libc_start_main
+0 0 mkdir (no symbols)
+ 0 0 mkdir (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 mktemp (no symbols)
+ 0 0 mktemp (no symbols) [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so __libc_start_main
+0 0 ophelp (no symbols)
+ 0 0 ophelp (no symbols) [self]
+-------------------------------------------------------------------------------
+ 7158 100.000 libc-2.5.so __libc_start_main
+0 0 oprofiled (no symbols)
+ 0 0 oprofiled (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 sleep (no symbols)
+ 0 0 sleep (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 sshd (no symbols)
+ 0 0 sshd (no symbols) [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libc-2.5.so __libc_start_main
+0 0 sudo (no symbols)
+ 0 0 sudo (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so __libc_start_main
+0 0 tr (no symbols)
+ 0 0 tr (no symbols) [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+31820 72.8380 memcpy
+8255 18.8962 gettimeofday
+879 2.0121 _int_malloc
+668 1.5291 malloc
+471 1.0781 free
+356 0.8149 _int_free
+197 0.4509 memcmp
+153 0.3502 msort_with_tmp
+151 0.3456 malloc_consolidate
+149 0.3411 memmove
+90 0.2060 __i686.get_pc_thunk.bx
+85 0.1946 memset
+73 0.1671 strstr
+53 0.1213 __gconv_transform_utf8_internal
+46 0.1053 strlen
+44 0.1007 mbrtowc
+18 0.0412 _dl_addr
+18 0.0412 mkdir
+14 0.0320 _int_realloc
+14 0.0320 qsort
+12 0.0275 realloc
+12 0.0275 strcmp
+6 0.0137 _IO_vfscanf
+6 0.0137 __read_nocancel
+6 0.0137 strchr
+5 0.0114 vfprintf
+4 0.0092 __i686.get_pc_thunk.cx
+4 0.0092 _dl_mcount_wrapper_check
+3 0.0069 _IO_default_xsputn
+3 0.0069 __ctype_get_mb_cur_max
+3 0.0069 sigprocmask
+3 0.0069 strcpy
+2 0.0046 _IO_file_fopen@@GLIBC_2.1
+2 0.0046 _IO_file_init@@GLIBC_2.1
+2 0.0046 _IO_un_link
+2 0.0046 ____strtoul_l_internal
+2 0.0046 __close_nocancel
+2 0.0046 __open_nocancel
+2 0.0046 __rpc_thread_destroy
+2 0.0046 __xstat
+2 0.0046 _nl_intern_locale_data
+2 0.0046 bsearch
+2 0.0046 fclose@@GLIBC_2.1
+2 0.0046 ftruncate
+2 0.0046 mempcpy
+2 0.0046 munmap
+2 0.0046 strcat
+1 0.0023 _IO_file_overflow@@GLIBC_2.1
+1 0.0023 _IO_file_stat
+1 0.0023 _IO_file_underflow@@GLIBC_2.1
+1 0.0023 _IO_file_xsputn@@GLIBC_2.1
+1 0.0023 _IO_setb
+1 0.0023 _IO_sputbackc
+1 0.0023 ____strtod_l_internal
+1 0.0023 ___newselect_nocancel
+1 0.0023 __libc_enable_asynccancel
+1 0.0023 __new_exitfn
+1 0.0023 __sigjmp_save
+1 0.0023 __xstat32_conv
+1 0.0023 _getopt_internal
+1 0.0023 _nl_make_l10nflist
+1 0.0023 _nl_normalize_codeset
+1 0.0023 fgets
+1 0.0023 fork
+1 0.0023 get_mapping
+1 0.0023 getpid
+1 0.0023 inet_nsap_ntoa
+1 0.0023 mmap
+1 0.0023 new_composite_name
+1 0.0023 parse_expression
+1 0.0023 peek_token
+1 0.0023 pipe
+1 0.0023 random_r
+1 0.0023 sbrk
+1 0.0023 setlocale
+1 0.0023 sigemptyset
+1 0.0023 sprintf
+1 0.0023 strcoll_l
+1 0.0023 strncmp
+1 0.0023 time
+1 0.0023 trans_compare
+1 0.0023 wcsrtombs
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 1 0.0970 libexa.so exaCopyDirtyToSys
+ 1 0.0970 libexa.so exaRasterizeTrapezoid
+ 2 0.1940 libexa.so exaFillRegionSolid
+ 9 0.8729 libexa.so exaMoveOutPixmap
+ 11 1.0669 libexa.so exaPrepareAccess
+ 15 1.4549 libexa.so exaGetOffscreenPixmap
+ 19 1.8429 libexa.so exaGlyphs
+ 24 2.3278 libexa.so exaCopyNtoN
+ 26 2.5218 libexa.so exaComposite
+ 31 3.0068 libexa.so exaMoveInPixmap
+ 81 7.8565 libexa.so exaDoMigration
+ 811 78.6615 libexa.so exaTryDriverComposite
+1077 12.0889 libexa.so __i686.get_pc_thunk.bx
+ 1077 100.000 libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 0.0977 libexa.so exaGlyphs
+ 2 0.1953 libexa.so exaFillRegionSolid
+ 26 2.5391 libexa.so exaTryDriverComposite
+ 995 97.1680 libexa.so exaDoMigration
+1024 11.4940 libexa.so ExaOffscreenMarkUsed
+ 1024 100.000 libexa.so ExaOffscreenMarkUsed [self]
+-------------------------------------------------------------------------------
+ 43921 46.2882 libexa.so exaComposite
+ 50965 53.7118 libexa.so exaGlyphs
+895 10.0460 libexa.so exaComposite
+ 49942 41.3089 libexa.so exaTryDriverComposite
+ 43921 36.3287 libexa.so exaComposite
+ 20468 16.9298 libexa.so exaDoMigration
+ 2818 2.3309 libexa.so ExaCheckComposite
+ 1578 1.3052 libexa.so exaPixmapDirty
+ 895 0.7403 libexa.so exaComposite [self]
+ 720 0.5955 intel_drv.so i965_composite
+ 159 0.1315 intel_drv.so i965_check_composite
+ 128 0.1059 libexa.so exaGetDrawablePixmap
+ 91 0.0753 libexa.so .plt
+ 28 0.0232 Xorg miComputeCompositeRegion
+ 27 0.0223 libexa.so exaGetOffscreenPixmap
+ 26 0.0215 libexa.so __i686.get_pc_thunk.bx
+ 18 0.0149 libexa.so exaGetDrawableDeltas
+ 17 0.0141 libexa.so exaOpReadsDestination
+ 15 0.0124 intel_drv.so i965_check_composite_texture
+ 13 0.0108 intel_drv.so i830_done_composite
+ 11 0.0091 intel_drv.so i965_prepare_composite
+ 9 0.0074 intel_drv.so __i686.get_pc_thunk.bx
+ 7 0.0058 intel_drv.so i965_get_dest_format
+ 2 0.0017 libexa.so exaMarkSync
+ 2 0.0017 Xorg miUnion
+ 2 0.0017 Xorg DamageRegion
+ 1 8.3e-04 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols)
+ 1 8.3e-04 libfb.so fbComposite
+-------------------------------------------------------------------------------
+ 7 0.0140 libexa.so exaGlyphs
+ 49942 99.9860 libexa.so exaComposite
+684 7.6776 libexa.so exaTryDriverComposite
+ 27000 54.0497 intel_drv.so i965_prepare_composite
+ 14295 28.6163 libexa.so exaDoMigration
+ 3835 7.6771 intel_drv.so i965_composite
+ 1641 3.2850 Xorg miComputeCompositeRegion
+ 811 1.6235 libexa.so __i686.get_pc_thunk.bx
+ 684 1.3693 libexa.so exaTryDriverComposite [self]
+ 367 0.7347 libexa.so exaGetOffscreenPixmap
+ 233 0.4664 intel_drv.so i965_check_composite
+ 110 0.2202 intel_drv.so .plt
+ 101 0.2022 Xorg .plt
+ 100 0.2002 libpixman.so.0.0.0 pixman_region_rectangles
+ 91 0.1822 libexa.so .plt
+ 89 0.1782 libexa.so exaMarkSync
+ 87 0.1742 libexa.so exaGetDrawablePixmap
+ 46 0.0921 intel_drv.so intel_get_pixmap_pitch
+ 45 0.0901 libpixman.so.0.0.0 pixman_region_n_rects
+ 37 0.0741 libexa.so exaPixmapIsOffscreen
+ 37 0.0741 intel_drv.so i830_get_transformed_coordinates
+ 35 0.0701 intel_drv.so __i686.get_pc_thunk.bx
+ 28 0.0561 libexa.so exaPixmapIsPinned
+ 26 0.0520 libexa.so ExaOffscreenMarkUsed
+ 25 0.0500 intel_drv.so i830WaitSync
+ 23 0.0460 libpixman.so.0.0.0 pixman_region_not_empty
+ 23 0.0460 intel_drv.so i965_check_composite_texture
+ 21 0.0420 libexa.so exaMoveInPixmap
+ 21 0.0420 intel_drv.so intel_get_pixmap_offset
+ 20 0.0400 libc-2.5.so memcpy
+ 20 0.0400 libexa.so __i686.get_pc_thunk.cx
+ 19 0.0380 libexa.so exaGetDrawableDeltas
+ 18 0.0360 Xorg miCompositeSourceValidate
+ 15 0.0300 Xorg __i686.get_pc_thunk.bx
+ 14 0.0280 intel_drv.so IntelEmitInvarientState
+ 13 0.0260 intel_drv.so i965_get_dest_format
+ 9 0.0180 libpixman.so.0.0.0 pixman_region_init
+ 6 0.0120 intel_drv.so i830MarkSync
+ 6 0.0120 intel_drv.so i965_get_card_format
+ 2 0.0040 libexa.so exaOpReadsDestination
+ 1 0.0020 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols)
+-------------------------------------------------------------------------------
+ 2 0.2981 libexa.so exaFillRegionSolid
+ 36 5.3651 libexa.so exaMoveOutPixmap
+ 37 5.5142 libexa.so exaCopyNtoN
+ 37 5.5142 libexa.so exaTryDriverComposite
+ 82 12.2206 libexa.so exaPrepareAccess
+ 143 21.3115 libexa.so exaMoveInPixmap
+ 164 24.4411 libexa.so exaDoMigration
+ 170 25.3353 libexa.so exaGetOffscreenPixmap
+674 7.5654 libexa.so exaPixmapIsOffscreen
+ 674 100.000 libexa.so exaPixmapIsOffscreen [self]
+-------------------------------------------------------------------------------
+ 3 0.0232 libexa.so exaFillRegionSolid
+ 21 0.1627 libexa.so exaTryDriverComposite
+ 12884 99.8141 libexa.so exaDoMigration
+542 6.0837 libexa.so exaMoveInPixmap
+ 8867 68.6832 libexa.so exaPrepareAccess
+ 2052 15.8947 libexa.so exaMemcpyBox
+ 990 7.6685 Xorg miUnion
+ 542 4.1983 libexa.so exaMoveInPixmap [self]
+ 143 1.1077 libexa.so exaPixmapIsOffscreen
+ 92 0.7126 libexa.so exaOffscreenAlloc
+ 61 0.4725 libc-2.5.so memcpy
+ 53 0.4105 libexa.so exaFinishAccess
+ 34 0.2634 libexa.so .plt
+ 31 0.2401 libexa.so __i686.get_pc_thunk.bx
+ 22 0.1704 Xorg DamageEmpty
+ 7 0.0542 libexa.so exaPixmapIsPinned
+ 7 0.0542 Xorg __i686.get_pc_thunk.bx
+ 3 0.0232 libexa.so exaWaitSync
+ 2 0.0155 libexa.so exaGetDrawablePixmap
+ 2 0.0155 libpixman.so.0.0.0 pixman_region_union
+ 1 0.0077 Xorg .plt
+ 1 0.0077 Xorg DamageRegion
+-------------------------------------------------------------------------------
+ 1 0.2817 libexa.so exaCopyDirtyToSys
+ 2 0.5634 libexa.so exaFillRegionSolid
+ 2 0.5634 libexa.so exaRasterizeTrapezoid
+ 3 0.8451 libexa.so exaPolyFillRect
+ 9 2.5352 libexa.so exaMoveOutPixmap
+ 34 9.5775 libexa.so exaMoveInPixmap
+ 35 9.8592 libexa.so exaGlyphs
+ 43 12.1127 libexa.so exaDoMigration
+ 44 12.3944 libexa.so exaCopyNtoN
+ 91 25.6338 libexa.so exaTryDriverComposite
+ 91 25.6338 libexa.so exaComposite
+424 4.7592 libexa.so .plt
+ 424 100.000 libexa.so .plt [self]
+-------------------------------------------------------------------------------
+402 4.5123 libexa.so exaGlyphs
+ 50965 90.2467 libexa.so exaComposite
+ 3027 5.3601 libexa.so exaCopyArea
+ 1307 2.3144 libexa.so exaPixmapDirty
+ 402 0.7118 libexa.so exaGlyphs [self]
+ 170 0.3010 Xorg miModifyPixmapHeader
+ 99 0.1753 libexa.so exaDoMigration
+ 98 0.1735 libexa.so exaCreatePixmap
+ 73 0.1293 libextmod.so XvDestroyPixmap
+ 54 0.0956 Xorg FreePicture
+ 39 0.0691 Xorg CreatePicture
+ 35 0.0620 libexa.so .plt
+ 27 0.0478 Xorg ValidateGC
+ 20 0.0354 libfb.so fbDoCopy
+ 20 0.0354 Xorg damagePolyFillRect
+ 20 0.0354 libexa.so exaGetDrawablePixmap
+ 19 0.0336 libexa.so __i686.get_pc_thunk.bx
+ 13 0.0230 intel_drv.so i965_check_composite
+ 12 0.0212 Xorg ValidatePicture
+ 12 0.0212 Xorg DamageRegion
+ 11 0.0195 Xorg miGlyphExtents
+ 7 0.0124 libexa.so exaOpReadsDestination
+ 7 0.0124 libexa.so exaTryDriverComposite
+ 7 0.0124 Xorg __i686.get_pc_thunk.bx
+ 6 0.0106 Xorg GetScratchPixmapHeader
+ 4 0.0071 Xorg miUnion
+ 4 0.0071 Xorg FreeScratchPixmapHeader
+ 3 0.0053 Xorg FreeScratchGC
+ 2 0.0035 Xorg DamageSetReportAfterOp
+ 2 0.0035 Xorg GetScratchGC
+ 1 0.0018 Xorg miDestroyPicture
+ 1 0.0018 libexa.so exaGetDrawableDeltas
+ 1 0.0018 Xorg DamageCreate
+ 1 0.0018 Xorg AllocatePicture
+ 1 0.0018 libexa.so __i686.get_pc_thunk.cx
+ 1 0.0018 Xorg damageInsertDamage
+ 1 0.0018 Xorg Xfree
+ 1 0.0018 libexa.so ExaOffscreenMarkUsed
+-------------------------------------------------------------------------------
+ 4 0.0098 libexa.so exaPolyFillRect
+ 97 0.2377 libexa.so exaFillRegionSolid
+ 99 0.2426 libexa.so exaGlyphs
+ 583 1.4289 libexa.so exaCopyNtoN
+ 5256 12.8817 libexa.so exaRasterizeTrapezoid
+ 14295 35.0350 libexa.so exaTryDriverComposite
+ 20468 50.1642 libexa.so exaComposite
+400 4.4898 libexa.so exaDoMigration
+ 26084 63.8969 libexa.so exaMoveOutPixmap
+ 12884 31.5614 libexa.so exaMoveInPixmap
+ 995 2.4374 libexa.so ExaOffscreenMarkUsed
+ 400 0.9799 libexa.so exaDoMigration [self]
+ 164 0.4017 libexa.so exaPixmapIsOffscreen
+ 132 0.3234 libexa.so exaPixmapIsPinned
+ 81 0.1984 libexa.so __i686.get_pc_thunk.bx
+ 43 0.1053 libexa.so .plt
+ 11 0.0269 libexa.so __i686.get_pc_thunk.cx
+ 7 0.0171 libexa.so exaCopyDirtyToSys
+ 5 0.0122 libexa.so exaMemcpyBox
+ 3 0.0073 libexa.so exaFinishAccess
+ 3 0.0073 Xorg miUnion
+ 3 0.0073 Xorg DamageRegion
+ 3 0.0073 Xorg DamageEmpty
+ 2 0.0049 libexa.so exaPrepareAccess
+ 2 0.0049 libexa.so exaOffscreenAlloc
+-------------------------------------------------------------------------------
+ 1 0.3215 libexa.so exaFillRegionSolid
+ 2 0.6431 libexa.so exaPolyFillRect
+ 2 0.6431 libexa.so exaMoveInPixmap
+ 9 2.8939 libexa.so exaFinishAccess
+ 10 3.2154 libexa.so exaPrepareAccess
+ 20 6.4309 libexa.so exaGlyphs
+ 26 8.3601 libexa.so exaGetOffscreenPixmap
+ 26 8.3601 libexa.so exaCopyNtoN
+ 87 27.9743 libexa.so exaTryDriverComposite
+ 128 41.1576 libexa.so exaComposite
+320 3.5919 libexa.so exaGetDrawablePixmap
+ 320 100.000 libexa.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 7 0.2288 libexa.so exaRasterizeTrapezoid
+ 167 5.4593 libexa.so exaCopyNtoN
+ 1307 42.7264 libexa.so exaGlyphs
+ 1578 51.5855 libexa.so exaComposite
+291 3.2664 libexa.so exaPixmapDirty
+ 2735 89.0010 Xorg miUnion
+ 291 9.4696 libexa.so exaPixmapDirty [self]
+ 18 0.5857 Xorg __i686.get_pc_thunk.bx
+ 11 0.3580 libpixman.so.0.0.0 pixman_region_union
+ 9 0.2929 Xorg .plt
+ 9 0.2929 Xorg DamageRegion
+-------------------------------------------------------------------------------
+ 3 0.0294 libexa.so exaMoveInPixmap
+ 10189 99.9706 libexa.so exaPrepareAccess
+233 2.6153 libexa.so exaWaitSync
+ 22008 98.8590 intel_drv.so I830EXASync
+ 233 1.0466 libexa.so exaWaitSync [self]
+ 8 0.0359 intel_drv.so I830Sync
+ 7 0.0314 intel_drv.so .plt
+ 6 0.0270 intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 7 3.1111 libexa.so exaMoveInPixmap
+ 24 10.6667 libexa.so exaCopyNtoN
+ 28 12.4444 libexa.so exaTryDriverComposite
+ 34 15.1111 libexa.so exaMoveOutPixmap
+ 132 58.6667 libexa.so exaDoMigration
+225 2.5255 libexa.so exaPixmapIsPinned
+ 225 100.000 libexa.so exaPixmapIsPinned [self]
+-------------------------------------------------------------------------------
+211 2.3684 libexa.so exaCopyNtoN
+ 985 41.3171 libfb.so fbCopyNtoN
+ 583 24.4547 libexa.so exaDoMigration
+ 211 8.8507 libexa.so exaCopyNtoN [self]
+ 167 7.0050 libexa.so exaPixmapDirty
+ 97 4.0688 libexa.so exaPrepareAccess
+ 59 2.4748 libexa.so exaFinishAccess
+ 44 1.8456 libexa.so .plt
+ 37 1.5520 libexa.so exaPixmapIsOffscreen
+ 26 1.0906 libpixman.so.0.0.0 pixman_blt
+ 26 1.0906 libexa.so exaGetDrawablePixmap
+ 25 1.0487 libfb.so __i686.get_pc_thunk.cx
+ 24 1.0067 libexa.so exaPixmapIsPinned
+ 24 1.0067 libexa.so __i686.get_pc_thunk.bx
+ 18 0.7550 libfb.so fbGetGCPrivateIndex
+ 16 0.6711 libexa.so exaGetDrawableDeltas
+ 13 0.5453 Xorg miUnion
+ 10 0.4195 libexa.so __i686.get_pc_thunk.cx
+ 7 0.2936 libexa.so exaMoveOutPixmap
+ 5 0.2097 libfb.so .plt
+ 5 0.2097 libfb.so __i686.get_pc_thunk.bx
+ 1 0.0419 Xorg DamageRegion
+ 1 0.0419 intel_drv.so I830EXACopy
+-------------------------------------------------------------------------------
+ 5 0.0190 libexa.so exaDoMigration
+ 2052 7.7887 libexa.so exaMoveInPixmap
+ 24289 92.1924 libexa.so exaCopyDirtyToSys
+211 2.3684 libexa.so exaMemcpyBox
+ 26134 99.1953 libc-2.5.so memcpy
+ 211 0.8009 libexa.so exaMemcpyBox [self]
+ 1 0.0038 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols)
+-------------------------------------------------------------------------------
+ 1 0.2488 libexa.so exaPolyFillRect
+ 7 1.7413 libexa.so exaFillRegionSolid
+ 27 6.7164 libexa.so exaComposite
+ 367 91.2935 libexa.so exaTryDriverComposite
+146 1.6388 libexa.so exaGetOffscreenPixmap
+ 170 42.2886 libexa.so exaPixmapIsOffscreen
+ 146 36.3184 libexa.so exaGetOffscreenPixmap [self]
+ 45 11.1940 libexa.so exaGetDrawableDeltas
+ 26 6.4677 libexa.so exaGetDrawablePixmap
+ 15 3.7313 libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 1.0870 libexa.so exaFillRegionSolid
+ 2 2.1739 libexa.so exaComposite
+ 89 96.7391 libexa.so exaTryDriverComposite
+128 1.4367 libexa.so exaMarkSync
+ 128 100.000 libexa.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+ 1 0.8065 libexa.so ExaCheckComposite
+ 3 2.4194 libexa.so exaDoMigration
+ 3 2.4194 libexa.so exaRasterizeTrapezoid
+ 5 4.0323 libexa.so exaCopyDirtyToSys
+ 53 42.7419 libexa.so exaMoveInPixmap
+ 59 47.5806 libexa.so exaCopyNtoN
+117 1.3133 libexa.so exaFinishAccess
+ 117 92.8571 libexa.so exaFinishAccess [self]
+ 9 7.1429 libexa.so exaGetDrawablePixmap
+-------------------------------------------------------------------------------
+ 1 1.0000 libexa.so exaPolyFillRect
+ 1 1.0000 libexa.so exaGlyphs
+ 16 16.0000 libexa.so exaCopyNtoN
+ 18 18.0000 libexa.so exaComposite
+ 19 19.0000 libexa.so exaTryDriverComposite
+ 45 45.0000 libexa.so exaGetOffscreenPixmap
+114 1.2796 libexa.so exaGetDrawableDeltas
+ 114 100.000 libexa.so exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+ 7 0.0270 libexa.so exaDoMigration
+ 25899 99.9730 libexa.so exaMoveOutPixmap
+111 1.2459 libexa.so exaCopyDirtyToSys
+ 24289 93.7473 libexa.so exaMemcpyBox
+ 1417 5.4691 libexa.so exaPrepareAccess
+ 111 0.4284 libexa.so exaCopyDirtyToSys [self]
+ 43 0.1660 Xorg miUnion
+ 29 0.1119 Xorg DamageEmpty
+ 5 0.0193 libexa.so exaFinishAccess
+ 3 0.0116 Xorg .plt
+ 3 0.0116 Xorg __i686.get_pc_thunk.bx
+ 3 0.0116 Xorg DamageRegion
+ 3 0.0116 libpixman.so.0.0.0 pixman_region_union
+ 1 0.0039 libexa.so .plt
+ 1 0.0039 libexa.so __i686.get_pc_thunk.bx
+ 1 0.0039 libc-2.5.so memcpy
+-------------------------------------------------------------------------------
+ 7 0.0268 libexa.so exaCopyNtoN
+ 26084 99.9732 libexa.so exaDoMigration
+100 1.1225 libexa.so exaMoveOutPixmap
+ 25899 99.2451 libexa.so exaCopyDirtyToSys
+ 100 0.3832 libexa.so exaMoveOutPixmap [self]
+ 36 0.1380 libexa.so exaPixmapIsOffscreen
+ 34 0.1303 libexa.so exaPixmapIsPinned
+ 9 0.0345 libexa.so .plt
+ 9 0.0345 libexa.so __i686.get_pc_thunk.bx
+ 4 0.0153 Xorg DamageRegion
+ 3 0.0115 Xorg DamageEmpty
+ 2 0.0077 Xorg miUnion
+-------------------------------------------------------------------------------
+ 2 0.0193 libexa.so exaDoMigration
+ 5 0.0481 libexa.so exaRasterizeTrapezoid
+ 97 0.9338 libexa.so exaCopyNtoN
+ 1417 13.6407 libexa.so exaCopyDirtyToSys
+ 8867 85.3581 libexa.so exaMoveInPixmap
+99 1.1112 libexa.so exaPrepareAccess
+ 10189 98.0277 libexa.so exaWaitSync
+ 99 0.9525 libexa.so exaPrepareAccess [self]
+ 82 0.7889 libexa.so exaPixmapIsOffscreen
+ 11 0.1058 libexa.so __i686.get_pc_thunk.bx
+ 10 0.0962 libexa.so exaGetDrawablePixmap
+ 3 0.0289 intel_drv.so I830EXASync
+-------------------------------------------------------------------------------
+ 3027 100.000 libexa.so exaGlyphs
+94 1.0551 libexa.so exaCopyArea
+ 2919 95.2676 libfb.so fbDoCopy
+ 94 3.0679 libexa.so exaCopyArea [self]
+ 38 1.2402 libfb.so fbCopyRegion
+ 6 0.1958 Xorg miSpriteSourceValidate
+ 4 0.1305 libfb.so __i686.get_pc_thunk.bx
+ 3 0.0979 libfb.so .plt
+-------------------------------------------------------------------------------
+90 1.0102 libexa.so exaGetPixmapOffset
+ 90 100.000 libexa.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+ 2 2.1277 libexa.so exaDoMigration
+ 92 97.8723 libexa.so exaMoveInPixmap
+80 0.8980 libexa.so exaOffscreenAlloc
+ 80 85.1064 libexa.so exaOffscreenAlloc [self]
+ 13 13.8298 Xorg Xalloc
+ 1 1.0638 Xorg .plt
+-------------------------------------------------------------------------------
+ 1 2.1277 libexa.so exaGlyphs
+ 5 10.6383 libexa.so exaFillRegionSolid
+ 10 21.2766 libexa.so exaCopyNtoN
+ 11 23.4043 libexa.so exaDoMigration
+ 20 42.5532 libexa.so exaTryDriverComposite
+47 0.5276 libexa.so __i686.get_pc_thunk.cx
+ 47 100.000 libexa.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 47 100.000 libexa.so exaDestroyPixmap
+45 0.5051 libexa.so exaOffscreenFree
+ 45 86.5385 libexa.so exaOffscreenFree [self]
+ 7 13.4615 libexa.so ExaOffscreenMerge
+-------------------------------------------------------------------------------
+ 2 7.6923 libexa.so exaTryDriverComposite
+ 7 26.9231 libexa.so exaGlyphs
+ 17 65.3846 libexa.so exaComposite
+26 0.2918 libexa.so exaOpReadsDestination
+ 26 100.000 libexa.so exaOpReadsDestination [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaFillRegionSolid
+24 0.2694 libexa.so exaGetPixmapPitch
+ 24 100.000 libexa.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+ 98 100.000 libexa.so exaGlyphs
+22 0.2469 libexa.so exaCreatePixmap
+ 115 65.7143 libfb.so fbCreatePixmap
+ 30 17.1429 Xorg DamageCreate
+ 22 12.5714 libexa.so exaCreatePixmap [self]
+ 5 2.8571 Xorg DamageRegister
+ 1 0.5714 Xorg __i686.get_pc_thunk.bx
+ 1 0.5714 libfb.so .plt
+ 1 0.5714 libfb.so fbCreatePixmapBpp
+-------------------------------------------------------------------------------
+ 30 100.000 libexa.so exaPolySegment
+17 0.1908 libexa.so exaPolyFillRect
+ 216 61.3636 libexa.so exaFillRegionSolid
+ 34 9.6591 libpixman.so.0.0.0 pixman_region_fini
+ 30 8.5227 Xorg miRectsToRegion
+ 19 5.3977 Xorg miRegionDestroy
+ 17 4.8295 libexa.so exaPolyFillRect [self]
+ 7 1.9886 Xorg miTranslateRegion
+ 5 1.4205 Xorg miIntersect
+ 5 1.4205 intel_drv.so I830EXAPrepareSolid
+ 4 1.1364 libexa.so exaDoMigration
+ 3 0.8523 libexa.so .plt
+ 2 0.5682 Xorg Xfree
+ 2 0.5682 libpixman.so.0.0.0 pixman_region_translate
+ 2 0.5682 libexa.so exaGetDrawablePixmap
+ 2 0.5682 intel_drv.so I830EXASolid
+ 1 0.2841 libexa.so exaGetOffscreenPixmap
+ 1 0.2841 Xorg miRegionValidate
+ 1 0.2841 libexa.so exaGetDrawableDeltas
+ 1 0.2841 libfb.so fbFillRegionSolid
+-------------------------------------------------------------------------------
+14 0.1571 libexa.so exaDestroyPixmap
+ 47 50.0000 libexa.so exaOffscreenFree
+ 23 24.4681 libfb.so fbDestroyPixmap
+ 14 14.8936 libexa.so exaDestroyPixmap [self]
+ 4 4.2553 Xorg Xfree
+ 3 3.1915 libfb.so __i686.get_pc_thunk.bx
+ 2 2.1277 libfb.so .plt
+ 1 1.0638 libexa.so ExaOffscreenMerge
+-------------------------------------------------------------------------------
+ 216 100.000 libexa.so exaPolyFillRect
+12 0.1347 libexa.so exaFillRegionSolid
+ 97 44.4954 libexa.so exaDoMigration
+ 39 17.8899 intel_drv.so I830EXASolid
+ 21 9.6330 intel_drv.so I830EXAPrepareSolid
+ 20 9.1743 libfb.so fbFillRegionSolid
+ 12 5.5046 libexa.so exaFillRegionSolid [self]
+ 7 3.2110 libexa.so exaGetOffscreenPixmap
+ 5 2.2936 libexa.so __i686.get_pc_thunk.cx
+ 3 1.3761 libexa.so exaMoveInPixmap
+ 2 0.9174 libexa.so exaPixmapIsOffscreen
+ 2 0.9174 libexa.so ExaOffscreenMarkUsed
+ 2 0.9174 intel_drv.so __i686.get_pc_thunk.bx
+ 2 0.9174 libexa.so __i686.get_pc_thunk.bx
+ 2 0.9174 libexa.so .plt
+ 1 0.4587 libexa.so exaMarkSync
+ 1 0.4587 intel_drv.so .plt
+ 1 0.4587 libexa.so exaGetDrawablePixmap
+ 1 0.4587 libexa.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+5 0.0561 libexa.so exaValidateGC
+ 66 82.5000 libfb.so fbValidateGC
+ 5 6.2500 libfb.so fbGetGCPrivateIndex
+ 5 6.2500 libexa.so exaValidateGC [self]
+ 1 1.2500 Xorg miComputeCompositeClip
+ 1 1.2500 libfb.so .plt
+ 1 1.2500 libfb.so __i686.get_pc_thunk.bx
+ 1 1.2500 libfb.so __i686.get_pc_thunk.cx
+-------------------------------------------------------------------------------
+ 2818 100.000 libexa.so exaComposite
+2 0.0224 libexa.so ExaCheckComposite
+ 2817 99.8936 libfb.so fbComposite
+ 2 0.0709 libexa.so ExaCheckComposite [self]
+ 1 0.0355 libexa.so exaFinishAccess
+-------------------------------------------------------------------------------
+ 1 12.5000 libexa.so exaDestroyPixmap
+ 7 87.5000 libexa.so exaOffscreenFree
+1 0.0112 libexa.so ExaOffscreenMerge
+ 7 87.5000 Xorg Xfree
+ 1 12.5000 libexa.so ExaOffscreenMerge [self]
+-------------------------------------------------------------------------------
+1 0.0112 libexa.so exaPolySegment
+ 30 96.7742 libexa.so exaPolyFillRect
+ 1 3.2258 libexa.so exaPolySegment [self]
+-------------------------------------------------------------------------------
+1 0.0112 libexa.so exaRasterizeTrapezoid
+ 5256 84.9661 libexa.so exaDoMigration
+ 910 14.7106 libfb.so fbRasterizeTrapezoid
+ 7 0.1132 libexa.so exaPixmapDirty
+ 5 0.0808 libexa.so exaPrepareAccess
+ 3 0.0485 libexa.so exaFinishAccess
+ 2 0.0323 libexa.so .plt
+ 1 0.0162 libexa.so __i686.get_pc_thunk.bx
+ 1 0.0162 libfb.so image_from_pict
+ 1 0.0162 libexa.so exaRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 1 0.8696 libexa.so exaMoveInPixmap
+ 1 0.8696 libexa.so exaOffscreenAlloc
+ 3 2.6087 libexa.so exaCopyDirtyToSys
+ 9 7.8261 libexa.so exaPixmapDirty
+ 101 87.8261 libexa.so exaTryDriverComposite
+0 0 Xorg .plt
+ 0 0 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaGlyphs
+0 0 Xorg AllocatePicture
+ 0 0 Xorg AllocatePicture [self]
+-------------------------------------------------------------------------------
+ 39 100.000 libexa.so exaGlyphs
+0 0 Xorg CreatePicture
+ 0 0 Xorg CreatePicture [self]
+-------------------------------------------------------------------------------
+ 1 3.2258 libexa.so exaGlyphs
+ 30 96.7742 libexa.so exaCreatePixmap
+0 0 Xorg DamageCreate
+ 0 0 Xorg DamageCreate [self]
+-------------------------------------------------------------------------------
+ 3 5.2632 libexa.so exaMoveOutPixmap
+ 3 5.2632 libexa.so exaDoMigration
+ 22 38.5965 libexa.so exaMoveInPixmap
+ 29 50.8772 libexa.so exaCopyDirtyToSys
+0 0 Xorg DamageEmpty
+ 0 0 Xorg DamageEmpty [self]
+-------------------------------------------------------------------------------
+ 1 2.8571 libexa.so exaCopyNtoN
+ 1 2.8571 libexa.so exaMoveInPixmap
+ 2 5.7143 libexa.so exaComposite
+ 3 8.5714 libexa.so exaCopyDirtyToSys
+ 3 8.5714 libexa.so exaDoMigration
+ 4 11.4286 libexa.so exaMoveOutPixmap
+ 9 25.7143 libexa.so exaPixmapDirty
+ 12 34.2857 libexa.so exaGlyphs
+0 0 Xorg DamageRegion
+ 0 0 Xorg DamageRegion [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libexa.so exaCreatePixmap
+0 0 Xorg DamageRegister
+ 0 0 Xorg DamageRegister [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaGlyphs
+0 0 Xorg DamageSetReportAfterOp
+ 0 0 Xorg DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 54 100.000 libexa.so exaGlyphs
+0 0 Xorg FreePicture
+ 0 0 Xorg FreePicture [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so exaGlyphs
+0 0 Xorg FreeScratchGC
+ 0 0 Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so exaGlyphs
+0 0 Xorg FreeScratchPixmapHeader
+ 0 0 Xorg FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaGlyphs
+0 0 Xorg GetScratchGC
+ 0 0 Xorg GetScratchGC [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so exaGlyphs
+0 0 Xorg GetScratchPixmapHeader
+ 0 0 Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 27 100.000 libexa.so exaGlyphs
+0 0 Xorg ValidateGC
+ 0 0 Xorg ValidateGC [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libexa.so exaGlyphs
+0 0 Xorg ValidatePicture
+ 0 0 Xorg ValidatePicture [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libexa.so exaOffscreenAlloc
+0 0 Xorg Xalloc
+ 0 0 Xorg Xalloc [self]
+-------------------------------------------------------------------------------
+ 1 7.1429 libexa.so exaGlyphs
+ 2 14.2857 libexa.so exaPolyFillRect
+ 4 28.5714 libexa.so exaDestroyPixmap
+ 7 50.0000 libexa.so ExaOffscreenMerge
+0 0 Xorg Xfree
+ 0 0 Xorg Xfree [self]
+-------------------------------------------------------------------------------
+ 1 1.9608 libexa.so exaCreatePixmap
+ 3 5.8824 libexa.so exaCopyDirtyToSys
+ 7 13.7255 libexa.so exaMoveInPixmap
+ 7 13.7255 libexa.so exaGlyphs
+ 15 29.4118 libexa.so exaTryDriverComposite
+ 18 35.2941 libexa.so exaPixmapDirty
+0 0 Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaGlyphs
+0 0 Xorg damageInsertDamage
+ 0 0 Xorg damageInsertDamage [self]
+-------------------------------------------------------------------------------
+ 20 100.000 libexa.so exaGlyphs
+0 0 Xorg damagePolyFillRect
+ 0 0 Xorg damagePolyFillRect [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libexa.so exaTryDriverComposite
+0 0 Xorg miCompositeSourceValidate
+ 0 0 Xorg miCompositeSourceValidate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaValidateGC
+0 0 Xorg miComputeCompositeClip
+ 0 0 Xorg miComputeCompositeClip [self]
+-------------------------------------------------------------------------------
+ 28 1.6777 libexa.so exaComposite
+ 1641 98.3223 libexa.so exaTryDriverComposite
+0 0 Xorg miComputeCompositeRegion
+ 0 0 Xorg miComputeCompositeRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaGlyphs
+0 0 Xorg miDestroyPicture
+ 0 0 Xorg miDestroyPicture [self]
+-------------------------------------------------------------------------------
+ 11 100.000 libexa.so exaGlyphs
+0 0 Xorg miGlyphExtents
+ 0 0 Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miIntersect
+ 0 0 Xorg miIntersect [self]
+-------------------------------------------------------------------------------
+ 170 100.000 libexa.so exaGlyphs
+0 0 Xorg miModifyPixmapHeader
+ 0 0 Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 30 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miRectsToRegion
+ 0 0 Xorg miRectsToRegion [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miRegionDestroy
+ 0 0 Xorg miRegionDestroy [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miRegionValidate
+ 0 0 Xorg miRegionValidate [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so exaCopyArea
+0 0 Xorg miSpriteSourceValidate
+ 0 0 Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libexa.so exaPolyFillRect
+0 0 Xorg miTranslateRegion
+ 0 0 Xorg miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 2 0.0527 libexa.so exaMoveOutPixmap
+ 2 0.0527 libexa.so exaComposite
+ 3 0.0791 libexa.so exaDoMigration
+ 4 0.1055 libexa.so exaGlyphs
+ 13 0.3428 libexa.so exaCopyNtoN
+ 43 1.1340 libexa.so exaCopyDirtyToSys
+ 990 26.1076 libexa.so exaMoveInPixmap
+ 2735 72.1255 libexa.so exaPixmapDirty
+0 0 Xorg miUnion
+ 0 0 Xorg miUnion [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libexa.so exaMemcpyBox
+ 1 33.3333 libexa.so exaTryDriverComposite
+ 1 33.3333 libexa.so exaComposite
+0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols)
+ 0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 0.8475 libexa.so exaFillRegionSolid
+ 7 5.9322 libexa.so exaWaitSync
+ 110 93.2203 libexa.so exaTryDriverComposite
+0 0 intel_drv.so .plt
+ 0 0 intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaCopyNtoN
+0 0 intel_drv.so I830EXACopy
+ 0 0 intel_drv.so I830EXACopy [self]
+-------------------------------------------------------------------------------
+ 5 19.2308 libexa.so exaPolyFillRect
+ 21 80.7692 libexa.so exaFillRegionSolid
+0 0 intel_drv.so I830EXAPrepareSolid
+ 0 0 intel_drv.so I830EXAPrepareSolid [self]
+-------------------------------------------------------------------------------
+ 2 4.8780 libexa.so exaPolyFillRect
+ 39 95.1220 libexa.so exaFillRegionSolid
+0 0 intel_drv.so I830EXASolid
+ 0 0 intel_drv.so I830EXASolid [self]
+-------------------------------------------------------------------------------
+ 3 0.0136 libexa.so exaPrepareAccess
+ 22008 99.9864 libexa.so exaWaitSync
+0 0 intel_drv.so I830EXASync
+ 0 0 intel_drv.so I830EXASync [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libexa.so exaWaitSync
+0 0 intel_drv.so I830Sync
+ 0 0 intel_drv.so I830Sync [self]
+-------------------------------------------------------------------------------
+ 14 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so IntelEmitInvarientState
+ 0 0 intel_drv.so IntelEmitInvarientState [self]
+-------------------------------------------------------------------------------
+ 2 3.8462 libexa.so exaFillRegionSolid
+ 6 11.5385 libexa.so exaWaitSync
+ 9 17.3077 libexa.so exaComposite
+ 35 67.3077 libexa.so exaTryDriverComposite
+0 0 intel_drv.so __i686.get_pc_thunk.bx
+ 0 0 intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i830MarkSync
+ 0 0 intel_drv.so i830MarkSync [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i830WaitSync
+ 0 0 intel_drv.so i830WaitSync [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libexa.so exaComposite
+0 0 intel_drv.so i830_done_composite
+ 0 0 intel_drv.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+ 37 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i830_get_transformed_coordinates
+ 0 0 intel_drv.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+ 13 3.2099 libexa.so exaGlyphs
+ 159 39.2593 libexa.so exaComposite
+ 233 57.5309 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_check_composite
+ 0 0 intel_drv.so i965_check_composite [self]
+-------------------------------------------------------------------------------
+ 15 39.4737 libexa.so exaComposite
+ 23 60.5263 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_check_composite_texture
+ 0 0 intel_drv.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+ 720 15.8068 libexa.so exaComposite
+ 3835 84.1932 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_composite
+ 0 0 intel_drv.so i965_composite [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_get_card_format
+ 0 0 intel_drv.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+ 7 35.0000 libexa.so exaComposite
+ 13 65.0000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_get_dest_format
+ 0 0 intel_drv.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+ 11 0.0407 libexa.so exaComposite
+ 27000 99.9593 libexa.so exaTryDriverComposite
+0 0 intel_drv.so i965_prepare_composite
+ 0 0 intel_drv.so i965_prepare_composite [self]
+-------------------------------------------------------------------------------
+ 21 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so intel_get_pixmap_offset
+ 0 0 intel_drv.so intel_get_pixmap_offset [self]
+-------------------------------------------------------------------------------
+ 46 100.000 libexa.so exaTryDriverComposite
+0 0 intel_drv.so intel_get_pixmap_pitch
+ 0 0 intel_drv.so intel_get_pixmap_pitch [self]
+-------------------------------------------------------------------------------
+ 1 0.0038 libexa.so exaCopyDirtyToSys
+ 20 0.0763 libexa.so exaTryDriverComposite
+ 61 0.2327 libexa.so exaMoveInPixmap
+ 26134 99.6872 libexa.so exaMemcpyBox
+0 0 libc-2.5.so memcpy
+ 0 0 libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+0 0 libexa.so exaCreateGC
+ 1 100.000 libfb.so fbCreateGC
+ 0 0 libexa.so exaCreateGC [self]
+-------------------------------------------------------------------------------
+ 73 100.000 libexa.so exaGlyphs
+0 0 libextmod.so XvDestroyPixmap
+ 0 0 libextmod.so XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 8.3333 libexa.so exaCreatePixmap
+ 1 8.3333 libexa.so exaValidateGC
+ 2 16.6667 libexa.so exaDestroyPixmap
+ 3 25.0000 libexa.so exaCopyArea
+ 5 41.6667 libexa.so exaCopyNtoN
+0 0 libfb.so .plt
+ 0 0 libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 libexa.so exaValidateGC
+ 3 23.0769 libexa.so exaDestroyPixmap
+ 4 30.7692 libexa.so exaCopyArea
+ 5 38.4615 libexa.so exaCopyNtoN
+0 0 libfb.so __i686.get_pc_thunk.bx
+ 0 0 libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 3.8462 libexa.so exaValidateGC
+ 25 96.1538 libexa.so exaCopyNtoN
+0 0 libfb.so __i686.get_pc_thunk.cx
+ 0 0 libfb.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 0.0355 libexa.so exaComposite
+ 2817 99.9645 libexa.so ExaCheckComposite
+0 0 libfb.so fbComposite
+ 0 0 libfb.so fbComposite [self]
+-------------------------------------------------------------------------------
+ 985 100.000 libexa.so exaCopyNtoN
+0 0 libfb.so fbCopyNtoN
+ 0 0 libfb.so fbCopyNtoN [self]
+-------------------------------------------------------------------------------
+ 38 100.000 libexa.so exaCopyArea
+0 0 libfb.so fbCopyRegion
+ 0 0 libfb.so fbCopyRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaCreateGC
+0 0 libfb.so fbCreateGC
+ 0 0 libfb.so fbCreateGC [self]
+-------------------------------------------------------------------------------
+ 115 100.000 libexa.so exaCreatePixmap
+0 0 libfb.so fbCreatePixmap
+ 0 0 libfb.so fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaCreatePixmap
+0 0 libfb.so fbCreatePixmapBpp
+ 0 0 libfb.so fbCreatePixmapBpp [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libexa.so exaDestroyPixmap
+0 0 libfb.so fbDestroyPixmap
+ 0 0 libfb.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 20 0.6805 libexa.so exaGlyphs
+ 2919 99.3195 libexa.so exaCopyArea
+0 0 libfb.so fbDoCopy
+ 0 0 libfb.so fbDoCopy [self]
+-------------------------------------------------------------------------------
+ 1 4.7619 libexa.so exaPolyFillRect
+ 20 95.2381 libexa.so exaFillRegionSolid
+0 0 libfb.so fbFillRegionSolid
+ 0 0 libfb.so fbFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 5 21.7391 libexa.so exaValidateGC
+ 18 78.2609 libexa.so exaCopyNtoN
+0 0 libfb.so fbGetGCPrivateIndex
+ 0 0 libfb.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 910 100.000 libexa.so exaRasterizeTrapezoid
+0 0 libfb.so fbRasterizeTrapezoid
+ 0 0 libfb.so fbRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 66 100.000 libexa.so exaValidateGC
+0 0 libfb.so fbValidateGC
+ 0 0 libfb.so fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so exaRasterizeTrapezoid
+0 0 libfb.so image_from_pict
+ 0 0 libfb.so image_from_pict [self]
+-------------------------------------------------------------------------------
+ 26 100.000 libexa.so exaCopyNtoN
+0 0 libpixman.so.0.0.0 pixman_blt
+ 0 0 libpixman.so.0.0.0 pixman_blt [self]
+-------------------------------------------------------------------------------
+ 34 100.000 libexa.so exaPolyFillRect
+0 0 libpixman.so.0.0.0 pixman_region_fini
+ 0 0 libpixman.so.0.0.0 pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_init
+ 0 0 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 45 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 100 100.000 libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so exaPolyFillRect
+0 0 libpixman.so.0.0.0 pixman_region_translate
+ 0 0 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 2 12.5000 libexa.so exaMoveInPixmap
+ 3 18.7500 libexa.so exaCopyDirtyToSys
+ 11 68.7500 libexa.so exaPixmapDirty
+0 0 libpixman.so.0.0.0 pixman_region_union
+ 0 0 libpixman.so.0.0.0 pixman_region_union [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+1077 12.0889 __i686.get_pc_thunk.bx
+1024 11.4940 ExaOffscreenMarkUsed
+895 10.0460 exaComposite
+684 7.6776 exaTryDriverComposite
+674 7.5654 exaPixmapIsOffscreen
+542 6.0837 exaMoveInPixmap
+424 4.7592 .plt
+402 4.5123 exaGlyphs
+400 4.4898 exaDoMigration
+320 3.5919 exaGetDrawablePixmap
+291 3.2664 exaPixmapDirty
+233 2.6153 exaWaitSync
+225 2.5255 exaPixmapIsPinned
+211 2.3684 exaCopyNtoN
+211 2.3684 exaMemcpyBox
+146 1.6388 exaGetOffscreenPixmap
+128 1.4367 exaMarkSync
+117 1.3133 exaFinishAccess
+114 1.2796 exaGetDrawableDeltas
+111 1.2459 exaCopyDirtyToSys
+100 1.1225 exaMoveOutPixmap
+99 1.1112 exaPrepareAccess
+94 1.0551 exaCopyArea
+90 1.0102 exaGetPixmapOffset
+80 0.8980 exaOffscreenAlloc
+47 0.5276 __i686.get_pc_thunk.cx
+45 0.5051 exaOffscreenFree
+26 0.2918 exaOpReadsDestination
+24 0.2694 exaGetPixmapPitch
+22 0.2469 exaCreatePixmap
+17 0.1908 exaPolyFillRect
+14 0.1571 exaDestroyPixmap
+12 0.1347 exaFillRegionSolid
+5 0.0561 exaValidateGC
+2 0.0224 ExaCheckComposite
+1 0.0112 ExaOffscreenMerge
+1 0.0112 exaPolySegment
+1 0.0112 exaRasterizeTrapezoid
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 3528 100.000 libpixman.so.0.0.0 pixman_region_union
+2442 30.1407 libpixman.so.0.0.0 pixman_op
+ 2442 69.0025 libpixman.so.0.0.0 pixman_op [self]
+ 556 15.7107 libpixman.so.0.0.0 pixman_rect_alloc
+ 212 5.9904 libpixman.so.0.0.0 pixman_region_unionO
+ 155 4.3798 libc-2.5.so free
+ 103 2.9104 libc-2.5.so memmove
+ 41 1.1585 libc-2.5.so malloc
+ 10 0.2826 libc-2.5.so _int_free
+ 8 0.2261 libc-2.5.so realloc
+ 5 0.1413 libpixman.so.0.0.0 .plt
+ 4 0.1130 libc-2.5.so __i686.get_pc_thunk.bx
+ 3 0.0848 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 0.1459 libpixman.so.0.0.0 pixman_image_composite_rect
+ 1369 99.8541 libpixman.so.0.0.0 pixman_composite_rect_general
+1371 16.9217 libpixman.so.0.0.0 fbCombineInU
+ 1371 100.000 libpixman.so.0.0.0 fbCombineInU [self]
+-------------------------------------------------------------------------------
+ 1001 100.000 libpixman.so.0.0.0 fbFetch
+1001 12.3550 libpixman.so.0.0.0 fbFetch_a1
+ 1001 100.000 libpixman.so.0.0.0 fbFetch_a1 [self]
+-------------------------------------------------------------------------------
+ 821 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+751 9.2693 libpixman.so.0.0.0 pixman_rasterize_edges
+ 751 91.4738 libpixman.so.0.0.0 pixman_rasterize_edges [self]
+ 70 8.5262 libc-2.5.so memset
+-------------------------------------------------------------------------------
+ 652 100.000 libpixman.so.0.0.0 pixman_blt
+691 8.5288 libpixman.so.0.0.0 pixman_blt_mmx
+ 691 100.000 libpixman.so.0.0.0 pixman_blt_mmx [self]
+-------------------------------------------------------------------------------
+ 3 0.7519 libpixman.so.0.0.0 pixman_image_composite_rect
+ 396 99.2481 libpixman.so.0.0.0 pixman_composite_rect_general
+399 4.9247 libpixman.so.0.0.0 mmxCombineOverU
+ 399 100.000 libpixman.so.0.0.0 mmxCombineOverU [self]
+-------------------------------------------------------------------------------
+301 3.7151 libpixman.so.0.0.0 pixman_region_union
+ 3528 89.9541 libpixman.so.0.0.0 pixman_op
+ 301 7.6747 libpixman.so.0.0.0 pixman_region_union [self]
+ 44 1.1219 libpixman.so.0.0.0 pixman_region_copy
+ 12 0.3060 libc-2.5.so free
+ 11 0.2805 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 8 0.2040 libc-2.5.so memmove
+ 7 0.1785 libpixman.so.0.0.0 pixman_rect_alloc
+ 7 0.1785 libpixman.so.0.0.0 pixman_region_unionO
+ 3 0.0765 libpixman.so.0.0.0 .plt
+ 1 0.0255 libc-2.5.so realloc
+-------------------------------------------------------------------------------
+ 7 3.1963 libpixman.so.0.0.0 pixman_region_union
+ 212 96.8037 libpixman.so.0.0.0 pixman_op
+219 2.7030 libpixman.so.0.0.0 pixman_region_unionO
+ 219 100.000 libpixman.so.0.0.0 pixman_region_unionO [self]
+-------------------------------------------------------------------------------
+194 2.3945 libpixman.so.0.0.0 pixman_region_rectangles
+ 194 100.000 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+106 1.3083 libpixman.so.0.0.0 pixman_region_n_rects
+ 106 100.000 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+79 0.9751 libpixman.so.0.0.0 pixman_blt
+ 652 84.5655 libpixman.so.0.0.0 pixman_blt_mmx
+ 79 10.2464 libpixman.so.0.0.0 pixman_blt [self]
+ 39 5.0584 libpixman.so.0.0.0 pixman_have_mmx
+ 1 0.1297 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 39 100.000 libpixman.so.0.0.0 pixman_blt
+68 0.8393 libpixman.so.0.0.0 pixman_have_mmx
+ 68 100.000 libpixman.so.0.0.0 pixman_have_mmx [self]
+-------------------------------------------------------------------------------
+ 44 100.000 libpixman.so.0.0.0 pixman_region_union
+65 0.8023 libpixman.so.0.0.0 pixman_region_copy
+ 65 98.4848 libpixman.so.0.0.0 pixman_region_copy [self]
+ 1 1.5152 libc-2.5.so free
+-------------------------------------------------------------------------------
+ 1 4.3478 libpixman.so.0.0.0 pixman_image_unref
+ 1 4.3478 libpixman.so.0.0.0 allocate_image
+ 1 4.3478 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1 4.3478 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 1 4.3478 libpixman.so.0.0.0 pixman_blt
+ 1 4.3478 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 3 13.0435 libpixman.so.0.0.0 pixman_op
+ 3 13.0435 libpixman.so.0.0.0 pixman_edge_init
+ 11 47.8261 libpixman.so.0.0.0 pixman_region_union
+63 0.7776 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 63 100.000 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 7 1.2433 libpixman.so.0.0.0 pixman_region_union
+ 556 98.7567 libpixman.so.0.0.0 pixman_op
+61 0.7529 libpixman.so.0.0.0 pixman_rect_alloc
+ 482 85.6128 libc-2.5.so malloc
+ 61 10.8348 libpixman.so.0.0.0 pixman_rect_alloc [self]
+ 15 2.6643 libc-2.5.so __i686.get_pc_thunk.bx
+ 5 0.8881 libc-2.5.so _int_malloc
+-------------------------------------------------------------------------------
+48 0.5924 libpixman.so.0.0.0 pixman_region_fini
+ 48 96.0000 libpixman.so.0.0.0 pixman_region_fini [self]
+ 2 4.0000 libc-2.5.so free
+-------------------------------------------------------------------------------
+48 0.5924 libpixman.so.0.0.0 pixman_region_not_empty
+ 48 100.000 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+28 0.3456 libpixman.so.0.0.0 pixman_region_intersect
+ 28 100.000 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 2805 100.000 libpixman.so.0.0.0 pixman_image_composite_rect
+21 0.2592 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1369 48.8057 libpixman.so.0.0.0 fbCombineInU
+ 1016 36.2210 libpixman.so.0.0.0 fbFetch
+ 396 14.1176 libpixman.so.0.0.0 mmxCombineOverU
+ 21 0.7487 libpixman.so.0.0.0 pixman_composite_rect_general [self]
+ 1 0.0357 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 0.0357 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8
+ 1 0.0357 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols)
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_image_create_bits
+20 0.2469 libpixman.so.0.0.0 pixman_region_init
+ 20 100.000 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 3 37.5000 libpixman.so.0.0.0 pixman_region_union
+ 5 62.5000 libpixman.so.0.0.0 pixman_op
+17 0.2098 libpixman.so.0.0.0 .plt
+ 17 100.000 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+ 1 6.6667 libpixman.so.0.0.0 pixman_edge_init
+ 4 26.6667 libpixman.so.0.0.0 pixman_edge_step
+ 10 66.6667 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+15 0.1851 libpixman.so.0.0.0 __divdi3
+ 15 100.000 libpixman.so.0.0.0 __divdi3 [self]
+-------------------------------------------------------------------------------
+ 1016 100.000 libpixman.so.0.0.0 pixman_composite_rect_general
+15 0.1851 libpixman.so.0.0.0 fbFetch
+ 1001 98.5236 libpixman.so.0.0.0 fbFetch_a1
+ 15 1.4764 libpixman.so.0.0.0 fbFetch [self]
+-------------------------------------------------------------------------------
+12 0.1481 libpixman.so.0.0.0 pixman_region_translate
+ 12 100.000 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 42 100.000 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+11 0.1358 libpixman.so.0.0.0 pixman_edge_init
+ 18 42.8571 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 11 26.1905 libpixman.so.0.0.0 pixman_edge_init [self]
+ 9 21.4286 libpixman.so.0.0.0 pixman_edge_step
+ 3 7.1429 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 2.3810 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+ 2 10.0000 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 18 90.0000 libpixman.so.0.0.0 pixman_edge_init
+10 0.1234 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 10 50.0000 libpixman.so.0.0.0 __divdi3
+ 10 50.0000 libpixman.so.0.0.0 _pixman_edge_tMultiInit [self]
+-------------------------------------------------------------------------------
+ 10 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+10 0.1234 libpixman.so.0.0.0 pixman_sample_floor_y
+ 10 100.000 libpixman.so.0.0.0 pixman_sample_floor_y [self]
+-------------------------------------------------------------------------------
+9 0.1111 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 821 92.1437 libpixman.so.0.0.0 pixman_rasterize_edges
+ 49 5.4994 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 10 1.1223 libpixman.so.0.0.0 pixman_sample_floor_y
+ 9 1.0101 libpixman.so.0.0.0 pixman_rasterize_trapezoid [self]
+ 1 0.1122 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 0.1122 libpixman.so.0.0.0 pixman_sample_ceil_y
+-------------------------------------------------------------------------------
+ 1 10.0000 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 9 90.0000 libpixman.so.0.0.0 pixman_edge_init
+6 0.0741 libpixman.so.0.0.0 pixman_edge_step
+ 6 60.0000 libpixman.so.0.0.0 pixman_edge_step [self]
+ 4 40.0000 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+6 0.0741 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 6 100.000 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libpixman.so.0.0.0 pixman_image_create_bits
+3 0.0370 libpixman.so.0.0.0 allocate_image
+ 3 75.0000 libpixman.so.0.0.0 allocate_image [self]
+ 1 25.0000 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 49 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+3 0.0370 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 42 85.7143 libpixman.so.0.0.0 pixman_edge_init
+ 3 6.1224 libpixman.so.0.0.0 pixman_line_fixed_edge_init [self]
+ 2 4.0816 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 1 2.0408 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 2.0408 libpixman.so.0.0.0 pixman_edge_step
+-------------------------------------------------------------------------------
+2 0.0247 libpixman.so.0.0.0 pixman_image_unref
+ 2 66.6667 libpixman.so.0.0.0 pixman_image_unref [self]
+ 1 33.3333 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_composite_rect_general
+1 0.0123 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8
+ 1 100.000 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8 [self]
+-------------------------------------------------------------------------------
+1 0.0123 libpixman.so.0.0.0 pixman_image_create_bits
+ 4 57.1429 libpixman.so.0.0.0 allocate_image
+ 1 14.2857 libpixman.so.0.0.0 pixman_region_init
+ 1 14.2857 libpixman.so.0.0.0 pixman_region_init_rect
+ 1 14.2857 libpixman.so.0.0.0 pixman_image_create_bits [self]
+-------------------------------------------------------------------------------
+1 0.0123 libpixman.so.0.0.0 pixman_image_set_component_alpha
+ 1 100.000 libpixman.so.0.0.0 pixman_image_set_component_alpha [self]
+-------------------------------------------------------------------------------
+1 0.0123 libpixman.so.0.0.0 pixman_image_set_filter
+ 1 100.000 libpixman.so.0.0.0 pixman_image_set_filter [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_image_create_bits
+1 0.0123 libpixman.so.0.0.0 pixman_region_init_rect
+ 1 100.000 libpixman.so.0.0.0 pixman_region_init_rect [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+1 0.0123 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 1 100.000 libpixman.so.0.0.0 pixman_sample_ceil_y [self]
+-------------------------------------------------------------------------------
+1 0.0123 libpixman.so.0.0.0 reset_clip_region
+ 1 100.000 libpixman.so.0.0.0 reset_clip_region [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_composite_rect_general
+0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols)
+ 0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) (no symbols) [self]
+-------------------------------------------------------------------------------
+ 4 21.0526 libpixman.so.0.0.0 pixman_op
+ 15 78.9474 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 10 100.000 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so _int_free
+ 0 0 libc-2.5.so _int_free [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 0.5882 libpixman.so.0.0.0 pixman_region_copy
+ 2 1.1765 libpixman.so.0.0.0 pixman_region_fini
+ 12 7.0588 libpixman.so.0.0.0 pixman_region_union
+ 155 91.1765 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so free
+ 0 0 libc-2.5.so free [self]
+-------------------------------------------------------------------------------
+ 41 7.8394 libpixman.so.0.0.0 pixman_op
+ 482 92.1606 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so malloc
+ 0 0 libc-2.5.so malloc [self]
+-------------------------------------------------------------------------------
+ 8 7.2072 libpixman.so.0.0.0 pixman_region_union
+ 103 92.7928 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so memmove
+ 0 0 libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 70 100.000 libpixman.so.0.0.0 pixman_rasterize_edges
+0 0 libc-2.5.so memset
+ 0 0 libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 libpixman.so.0.0.0 pixman_region_union
+ 8 88.8889 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so realloc
+ 0 0 libc-2.5.so realloc [self]
+-------------------------------------------------------------------------------
+0 0 libpixman.so.0.0.0 pixman_image_composite
+ 2810 100.000 libpixman.so.0.0.0 pixman_image_composite_rect
+ 0 0 libpixman.so.0.0.0 pixman_image_composite [self]
+-------------------------------------------------------------------------------
+ 2810 100.000 libpixman.so.0.0.0 pixman_image_composite
+0 0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 2805 99.8221 libpixman.so.0.0.0 pixman_composite_rect_general
+ 3 0.1068 libpixman.so.0.0.0 mmxCombineOverU
+ 2 0.0712 libpixman.so.0.0.0 fbCombineInU
+ 0 0 libpixman.so.0.0.0 pixman_image_composite_rect [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+2442 30.1407 pixman_op
+1371 16.9217 fbCombineInU
+1001 12.3550 fbFetch_a1
+751 9.2693 pixman_rasterize_edges
+691 8.5288 pixman_blt_mmx
+399 4.9247 mmxCombineOverU
+301 3.7151 pixman_region_union
+219 2.7030 pixman_region_unionO
+194 2.3945 pixman_region_rectangles
+106 1.3083 pixman_region_n_rects
+79 0.9751 pixman_blt
+68 0.8393 pixman_have_mmx
+65 0.8023 pixman_region_copy
+63 0.7776 __i686.get_pc_thunk.bx
+61 0.7529 pixman_rect_alloc
+48 0.5924 pixman_region_fini
+48 0.5924 pixman_region_not_empty
+28 0.3456 pixman_region_intersect
+21 0.2592 pixman_composite_rect_general
+20 0.2469 pixman_region_init
+17 0.2098 .plt
+15 0.1851 __divdi3
+15 0.1851 fbFetch
+12 0.1481 pixman_region_translate
+11 0.1358 pixman_edge_init
+10 0.1234 _pixman_edge_tMultiInit
+10 0.1234 pixman_sample_floor_y
+9 0.1111 pixman_rasterize_trapezoid
+6 0.0741 pixman_edge_step
+6 0.0741 pixman_region_init_with_extents
+3 0.0370 allocate_image
+3 0.0370 pixman_line_fixed_edge_init
+2 0.0247 pixman_image_unref
+1 0.0123 fbFetchPixel_a8r8g8b8
+1 0.0123 pixman_image_create_bits
+1 0.0123 pixman_image_set_component_alpha
+1 0.0123 pixman_image_set_filter
+1 0.0123 pixman_region_init_rect
+1 0.0123 pixman_sample_ceil_y
+1 0.0123 reset_clip_region
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name app name symbol name
+-------------------------------------------------------------------------------
+ 1 0.8130 libc-2.5.so libc-2.5.so read_alias_file
+ 1 0.8130 libc-2.5.so libc-2.5.so _IO_getline_info
+ 3 2.4390 libc-2.5.so libc-2.5.so _int_realloc
+ 118 95.9350 libc-2.5.so libc-2.5.so msort_with_tmp
+31820 21.5122 libc-2.5.so libc-2.5.so memcpy
+ 31820 100.000 libc-2.5.so libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+15941 10.7771 libxul.so libxul.so (no symbols)
+ 15941 100.000 libxul.so libxul.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 16 0.0756 intel_drv.so intel_drv.so I830EXASync
+ 21162 99.9244 intel_drv.so intel_drv.so I830Sync
+11683 7.8984 intel_drv.so intel_drv.so I830WaitLpRing
+ 11683 55.1657 intel_drv.so intel_drv.so I830WaitLpRing [self]
+ 8254 38.9744 libc-2.5.so intel_drv.so gettimeofday
+ 1130 5.3357 Xorg intel_drv.so GetTimeInMillis
+ 62 0.2928 Xorg intel_drv.so __i686.get_pc_thunk.bx
+ 49 0.2314 Xorg intel_drv.so .plt
+-------------------------------------------------------------------------------
+10181 6.8830 intel_drv.so intel_drv.so i965_prepare_composite
+ 12089 44.7525 intel_drv.so intel_drv.so i830WaitSync
+ 10181 37.6893 intel_drv.so intel_drv.so i965_prepare_composite [self]
+ 4090 15.1409 libc-2.5.so intel_drv.so memcpy
+ 218 0.8070 intel_drv.so intel_drv.so intel_get_pixmap_offset
+ 124 0.4590 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+ 118 0.4368 intel_drv.so intel_drv.so IntelEmitInvarientState
+ 62 0.2295 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 31 0.1148 intel_drv.so intel_drv.so .plt
+ 22 0.0814 libdri.so intel_drv.so DRIGetContext
+ 17 0.0629 libdri.so intel_drv.so __i686.get_pc_thunk.cx
+ 17 0.0629 libexa.so intel_drv.so exaGetPixmapPitch
+ 14 0.0518 libexa.so intel_drv.so exaGetPixmapOffset
+ 11 0.0407 intel_drv.so intel_drv.so i965_get_card_format
+ 8 0.0296 libexa.so intel_drv.so exaWaitSync
+ 7 0.0259 libdri.so intel_drv.so DRIGetSAREAPrivate
+ 4 0.0148 intel_drv.so intel_drv.so i965_get_dest_format
+-------------------------------------------------------------------------------
+9093 6.1474 vmlinux vmlinux system_call
+ 9093 100.000 vmlinux vmlinux system_call [self]
+-------------------------------------------------------------------------------
+8255 5.5809 libc-2.5.so libc-2.5.so gettimeofday
+ 8255 100.000 libc-2.5.so libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+7081 4.7872 oprofiled oprofiled (no symbols)
+ 7081 100.000 oprofiled oprofiled (no symbols) [self]
+-------------------------------------------------------------------------------
+4128 2.7908 intel_drv.so intel_drv.so i965_composite
+ 4128 90.6257 intel_drv.so intel_drv.so i965_composite [self]
+ 179 3.9297 intel_drv.so intel_drv.so i830_get_transformed_coordinates
+ 127 2.7881 intel_drv.so intel_drv.so i830WaitSync
+ 56 1.2294 intel_drv.so intel_drv.so i830MarkSync
+ 43 0.9440 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 16 0.3513 intel_drv.so intel_drv.so .plt
+ 5 0.1098 libexa.so intel_drv.so exaWaitSync
+ 1 0.0220 libexa.so intel_drv.so exaMarkSync
+-------------------------------------------------------------------------------
+3301 2.2317 vmlinux vmlinux do_gettimeofday
+ 3301 100.000 vmlinux vmlinux do_gettimeofday [self]
+-------------------------------------------------------------------------------
+ 3528 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+2442 1.6509 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 2442 69.0025 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op [self]
+ 556 15.7107 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+ 212 5.9904 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+ 155 4.3798 libc-2.5.so libpixman.so.0.0.0 free
+ 103 2.9104 libc-2.5.so libpixman.so.0.0.0 memmove
+ 41 1.1585 libc-2.5.so libpixman.so.0.0.0 malloc
+ 10 0.2826 libc-2.5.so libpixman.so.0.0.0 _int_free
+ 8 0.2261 libc-2.5.so libpixman.so.0.0.0 realloc
+ 5 0.1413 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 4 0.1130 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 3 0.0848 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+1657 1.1202 vmlinux vmlinux __copy_to_user_ll
+ 1657 100.000 vmlinux vmlinux __copy_to_user_ll [self]
+-------------------------------------------------------------------------------
+1591 1.0756 vmlinux vmlinux get_page_from_freelist
+ 1591 100.000 vmlinux vmlinux get_page_from_freelist [self]
+-------------------------------------------------------------------------------
+1508 1.0195 vmlinux vmlinux read_tsc
+ 1508 100.000 vmlinux vmlinux read_tsc [self]
+-------------------------------------------------------------------------------
+1442 0.9749 oprofile.ko oprofile sync_buffer
+ 1442 100.000 oprofile.ko oprofile sync_buffer [self]
+-------------------------------------------------------------------------------
+ 2 0.1459 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 1369 99.8541 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+1371 0.9269 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+ 1371 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU [self]
+-------------------------------------------------------------------------------
+1257 0.8498 Xorg Xorg GetTimeInMillis
+ 1257 100.000 Xorg Xorg GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+ 1 0.0970 libexa.so libexa.so exaCopyDirtyToSys
+ 1 0.0970 libexa.so libexa.so exaRasterizeTrapezoid
+ 2 0.1940 libexa.so libexa.so exaFillRegionSolid
+ 9 0.8729 libexa.so libexa.so exaMoveOutPixmap
+ 11 1.0669 libexa.so libexa.so exaPrepareAccess
+ 15 1.4549 libexa.so libexa.so exaGetOffscreenPixmap
+ 19 1.8429 libexa.so libexa.so exaGlyphs
+ 24 2.3278 libexa.so libexa.so exaCopyNtoN
+ 26 2.5218 libexa.so libexa.so exaComposite
+ 31 3.0068 libexa.so libexa.so exaMoveInPixmap
+ 81 7.8565 libexa.so libexa.so exaDoMigration
+ 811 78.6615 libexa.so libexa.so exaTryDriverComposite
+1077 0.7281 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 1077 100.000 libexa.so libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 0.0977 libexa.so libexa.so exaGlyphs
+ 2 0.1953 libexa.so libexa.so exaFillRegionSolid
+ 26 2.5391 libexa.so libexa.so exaTryDriverComposite
+ 995 97.1680 libexa.so libexa.so exaDoMigration
+1024 0.6923 libexa.so libexa.so ExaOffscreenMarkUsed
+ 1024 100.000 libexa.so libexa.so ExaOffscreenMarkUsed [self]
+-------------------------------------------------------------------------------
+ 1001 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+1001 0.6767 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1
+ 1001 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1 [self]
+-------------------------------------------------------------------------------
+898 0.6071 Xorg Xorg miComputeCompositeRegion
+ 898 53.8047 Xorg Xorg miComputeCompositeRegion [self]
+ 523 31.3361 Xorg Xorg miCompositeSourceValidate
+ 94 5.6321 libpixman.so.0.0.0 Xorg pixman_region_rectangles
+ 61 3.6549 libpixman.so.0.0.0 Xorg pixman_region_n_rects
+ 38 2.2768 Xorg Xorg miSpriteSourceValidate
+ 25 1.4979 libpixman.so.0.0.0 Xorg pixman_region_not_empty
+ 24 1.4380 Xorg Xorg __i686.get_pc_thunk.bx
+ 5 0.2996 libpixman.so.0.0.0 Xorg pixman_region_init
+ 1 0.0599 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 43921 46.2882 libexa.so libexa.so exaComposite
+ 50965 53.7118 libexa.so libexa.so exaGlyphs
+895 0.6051 libexa.so libexa.so exaComposite
+ 49942 41.3089 libexa.so libexa.so exaTryDriverComposite
+ 43921 36.3287 libexa.so libexa.so exaComposite
+ 20468 16.9298 libexa.so libexa.so exaDoMigration
+ 2818 2.3309 libexa.so libexa.so ExaCheckComposite
+ 1578 1.3052 libexa.so libexa.so exaPixmapDirty
+ 895 0.7403 libexa.so libexa.so exaComposite [self]
+ 720 0.5955 intel_drv.so libexa.so i965_composite
+ 159 0.1315 intel_drv.so libexa.so i965_check_composite
+ 128 0.1059 libexa.so libexa.so exaGetDrawablePixmap
+ 91 0.0753 libexa.so libexa.so .plt
+ 28 0.0232 Xorg libexa.so miComputeCompositeRegion
+ 27 0.0223 libexa.so libexa.so exaGetOffscreenPixmap
+ 26 0.0215 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 18 0.0149 libexa.so libexa.so exaGetDrawableDeltas
+ 17 0.0141 libexa.so libexa.so exaOpReadsDestination
+ 15 0.0124 intel_drv.so libexa.so i965_check_composite_texture
+ 13 0.0108 intel_drv.so libexa.so i830_done_composite
+ 11 0.0091 intel_drv.so libexa.so i965_prepare_composite
+ 9 0.0074 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 7 0.0058 intel_drv.so libexa.so i965_get_dest_format
+ 2 0.0017 libexa.so libexa.so exaMarkSync
+ 2 0.0017 Xorg libexa.so DamageRegion
+ 2 0.0017 Xorg libexa.so miUnion
+ 1 8.3e-04 libfb.so libexa.so fbComposite
+ 1 8.3e-04 anon (tgid:5961 range:0xb7f92000-0xb7f93000) libexa.so (no symbols)
+-------------------------------------------------------------------------------
+ 18 1.7964 libc-2.5.so libc-2.5.so _int_realloc
+ 984 98.2036 libc-2.5.so libc-2.5.so malloc
+879 0.5943 libc-2.5.so libc-2.5.so _int_malloc
+ 879 86.0921 libc-2.5.so libc-2.5.so _int_malloc [self]
+ 142 13.9079 libc-2.5.so libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+765 0.5172 vmlinux vmlinux page_fault
+ 765 100.000 vmlinux vmlinux page_fault [self]
+-------------------------------------------------------------------------------
+ 821 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+751 0.5077 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+ 751 91.4738 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges [self]
+ 70 8.5262 libc-2.5.so libpixman.so.0.0.0 memset
+-------------------------------------------------------------------------------
+696 0.4705 vmlinux vmlinux find_vma
+ 696 100.000 vmlinux vmlinux find_vma [self]
+-------------------------------------------------------------------------------
+ 652 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt
+691 0.4672 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt_mmx
+ 691 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt_mmx [self]
+-------------------------------------------------------------------------------
+ 7 0.0140 libexa.so libexa.so exaGlyphs
+ 49942 99.9860 libexa.so libexa.so exaComposite
+684 0.4624 libexa.so libexa.so exaTryDriverComposite
+ 27000 54.0497 intel_drv.so libexa.so i965_prepare_composite
+ 14295 28.6163 libexa.so libexa.so exaDoMigration
+ 3835 7.6771 intel_drv.so libexa.so i965_composite
+ 1641 3.2850 Xorg libexa.so miComputeCompositeRegion
+ 811 1.6235 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 684 1.3693 libexa.so libexa.so exaTryDriverComposite [self]
+ 367 0.7347 libexa.so libexa.so exaGetOffscreenPixmap
+ 233 0.4664 intel_drv.so libexa.so i965_check_composite
+ 110 0.2202 intel_drv.so libexa.so .plt
+ 101 0.2022 Xorg libexa.so .plt
+ 100 0.2002 libpixman.so.0.0.0 libexa.so pixman_region_rectangles
+ 91 0.1822 libexa.so libexa.so .plt
+ 89 0.1782 libexa.so libexa.so exaMarkSync
+ 87 0.1742 libexa.so libexa.so exaGetDrawablePixmap
+ 46 0.0921 intel_drv.so libexa.so intel_get_pixmap_pitch
+ 45 0.0901 libpixman.so.0.0.0 libexa.so pixman_region_n_rects
+ 37 0.0741 libexa.so libexa.so exaPixmapIsOffscreen
+ 37 0.0741 intel_drv.so libexa.so i830_get_transformed_coordinates
+ 35 0.0701 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 28 0.0561 libexa.so libexa.so exaPixmapIsPinned
+ 26 0.0520 libexa.so libexa.so ExaOffscreenMarkUsed
+ 25 0.0500 intel_drv.so libexa.so i830WaitSync
+ 23 0.0460 intel_drv.so libexa.so i965_check_composite_texture
+ 23 0.0460 libpixman.so.0.0.0 libexa.so pixman_region_not_empty
+ 21 0.0420 intel_drv.so libexa.so intel_get_pixmap_offset
+ 21 0.0420 libexa.so libexa.so exaMoveInPixmap
+ 20 0.0400 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 20 0.0400 libc-2.5.so libexa.so memcpy
+ 19 0.0380 libexa.so libexa.so exaGetDrawableDeltas
+ 18 0.0360 Xorg libexa.so miCompositeSourceValidate
+ 15 0.0300 Xorg libexa.so __i686.get_pc_thunk.bx
+ 14 0.0280 intel_drv.so libexa.so IntelEmitInvarientState
+ 13 0.0260 intel_drv.so libexa.so i965_get_dest_format
+ 9 0.0180 libpixman.so.0.0.0 libexa.so pixman_region_init
+ 6 0.0120 intel_drv.so libexa.so i830MarkSync
+ 6 0.0120 intel_drv.so libexa.so i965_get_card_format
+ 2 0.0040 libexa.so libexa.so exaOpReadsDestination
+ 1 0.0020 anon (tgid:5961 range:0xb7f92000-0xb7f93000) libexa.so (no symbols)
+-------------------------------------------------------------------------------
+ 2 0.2981 libexa.so libexa.so exaFillRegionSolid
+ 36 5.3651 libexa.so libexa.so exaMoveOutPixmap
+ 37 5.5142 libexa.so libexa.so exaCopyNtoN
+ 37 5.5142 libexa.so libexa.so exaTryDriverComposite
+ 82 12.2206 libexa.so libexa.so exaPrepareAccess
+ 143 21.3115 libexa.so libexa.so exaMoveInPixmap
+ 164 24.4411 libexa.so libexa.so exaDoMigration
+ 170 25.3353 libexa.so libexa.so exaGetOffscreenPixmap
+674 0.4557 libexa.so libexa.so exaPixmapIsOffscreen
+ 674 100.000 libexa.so libexa.so exaPixmapIsOffscreen [self]
+-------------------------------------------------------------------------------
+ 1 2.3256 libc-2.5.so libc-2.5.so vasprintf
+ 1 2.3256 libc-2.5.so libc-2.5.so malloc_hook_ini
+ 1 2.3256 libc-2.5.so libc-2.5.so strdup
+ 8 18.6047 libc-2.5.so libc-2.5.so __fopen_internal
+ 12 27.9070 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 20 46.5116 libc-2.5.so libc-2.5.so realloc
+668 0.4516 libc-2.5.so libc-2.5.so malloc
+ 984 58.1560 libc-2.5.so libc-2.5.so _int_malloc
+ 668 39.4799 libc-2.5.so libc-2.5.so malloc [self]
+ 19 1.1229 libc-2.5.so libc-2.5.so malloc_hook_ini
+ 17 1.0047 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 4 0.2364 libc-2.5.so libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+640 0.4327 vmlinux vmlinux restore_nocheck
+ 640 100.000 vmlinux vmlinux restore_nocheck [self]
+-------------------------------------------------------------------------------
+620 0.4192 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols)
+ 620 100.000 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 21910 100.000 intel_drv.so intel_drv.so I830EXASync
+570 0.3854 intel_drv.so intel_drv.so I830Sync
+ 21162 96.5508 intel_drv.so intel_drv.so I830WaitLpRing
+ 570 2.6006 intel_drv.so intel_drv.so I830Sync [self]
+ 127 0.5794 Xorg intel_drv.so GetTimeInMillis
+ 50 0.2281 intel_drv.so intel_drv.so .plt
+ 8 0.0365 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 1 0.0046 anon (tgid:5961 range:0xb7f92000-0xb7f93000) intel_drv.so (no symbols)
+-------------------------------------------------------------------------------
+554 0.3745 oprofile.ko oprofile add_event_entry
+ 554 100.000 oprofile.ko oprofile add_event_entry [self]
+-------------------------------------------------------------------------------
+ 3 0.0232 libexa.so libexa.so exaFillRegionSolid
+ 21 0.1627 libexa.so libexa.so exaTryDriverComposite
+ 12884 99.8141 libexa.so libexa.so exaDoMigration
+542 0.3664 libexa.so libexa.so exaMoveInPixmap
+ 8867 68.6832 libexa.so libexa.so exaPrepareAccess
+ 2052 15.8947 libexa.so libexa.so exaMemcpyBox
+ 990 7.6685 Xorg libexa.so miUnion
+ 542 4.1983 libexa.so libexa.so exaMoveInPixmap [self]
+ 143 1.1077 libexa.so libexa.so exaPixmapIsOffscreen
+ 92 0.7126 libexa.so libexa.so exaOffscreenAlloc
+ 61 0.4725 libc-2.5.so libexa.so memcpy
+ 53 0.4105 libexa.so libexa.so exaFinishAccess
+ 34 0.2634 libexa.so libexa.so .plt
+ 31 0.2401 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 22 0.1704 Xorg libexa.so DamageEmpty
+ 7 0.0542 libexa.so libexa.so exaPixmapIsPinned
+ 7 0.0542 Xorg libexa.so __i686.get_pc_thunk.bx
+ 3 0.0232 libexa.so libexa.so exaWaitSync
+ 2 0.0155 libpixman.so.0.0.0 libexa.so pixman_region_union
+ 2 0.0155 libexa.so libexa.so exaGetDrawablePixmap
+ 1 0.0077 Xorg libexa.so DamageRegion
+ 1 0.0077 Xorg libexa.so .plt
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+471 0.3184 libc-2.5.so libc-2.5.so free
+ 471 58.0764 libc-2.5.so libc-2.5.so free [self]
+ 327 40.3206 libc-2.5.so libc-2.5.so _int_free
+ 13 1.6030 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+425 0.2873 vmlinux vmlinux kunmap_atomic
+ 425 100.000 vmlinux vmlinux kunmap_atomic [self]
+-------------------------------------------------------------------------------
+ 1 0.2817 libexa.so libexa.so exaCopyDirtyToSys
+ 2 0.5634 libexa.so libexa.so exaFillRegionSolid
+ 2 0.5634 libexa.so libexa.so exaRasterizeTrapezoid
+ 3 0.8451 libexa.so libexa.so exaPolyFillRect
+ 9 2.5352 libexa.so libexa.so exaMoveOutPixmap
+ 34 9.5775 libexa.so libexa.so exaMoveInPixmap
+ 35 9.8592 libexa.so libexa.so exaGlyphs
+ 43 12.1127 libexa.so libexa.so exaDoMigration
+ 44 12.3944 libexa.so libexa.so exaCopyNtoN
+ 91 25.6338 libexa.so libexa.so exaTryDriverComposite
+ 91 25.6338 libexa.so libexa.so exaComposite
+424 0.2866 libexa.so libexa.so .plt
+ 424 100.000 libexa.so libexa.so .plt [self]
+-------------------------------------------------------------------------------
+409 0.2765 vmlinux vmlinux syscall_exit
+ 409 100.000 vmlinux vmlinux syscall_exit [self]
+-------------------------------------------------------------------------------
+402 0.2718 libexa.so libexa.so exaGlyphs
+ 50965 90.2467 libexa.so libexa.so exaComposite
+ 3027 5.3601 libexa.so libexa.so exaCopyArea
+ 1307 2.3144 libexa.so libexa.so exaPixmapDirty
+ 402 0.7118 libexa.so libexa.so exaGlyphs [self]
+ 170 0.3010 Xorg libexa.so miModifyPixmapHeader
+ 99 0.1753 libexa.so libexa.so exaDoMigration
+ 98 0.1735 libexa.so libexa.so exaCreatePixmap
+ 73 0.1293 libextmod.so libexa.so XvDestroyPixmap
+ 54 0.0956 Xorg libexa.so FreePicture
+ 39 0.0691 Xorg libexa.so CreatePicture
+ 35 0.0620 libexa.so libexa.so .plt
+ 27 0.0478 Xorg libexa.so ValidateGC
+ 20 0.0354 libexa.so libexa.so exaGetDrawablePixmap
+ 20 0.0354 Xorg libexa.so damagePolyFillRect
+ 20 0.0354 libfb.so libexa.so fbDoCopy
+ 19 0.0336 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 13 0.0230 intel_drv.so libexa.so i965_check_composite
+ 12 0.0212 Xorg libexa.so ValidatePicture
+ 12 0.0212 Xorg libexa.so DamageRegion
+ 11 0.0195 Xorg libexa.so miGlyphExtents
+ 7 0.0124 libexa.so libexa.so exaOpReadsDestination
+ 7 0.0124 libexa.so libexa.so exaTryDriverComposite
+ 7 0.0124 Xorg libexa.so __i686.get_pc_thunk.bx
+ 6 0.0106 Xorg libexa.so GetScratchPixmapHeader
+ 4 0.0071 Xorg libexa.so miUnion
+ 4 0.0071 Xorg libexa.so FreeScratchPixmapHeader
+ 3 0.0053 Xorg libexa.so FreeScratchGC
+ 2 0.0035 Xorg libexa.so DamageSetReportAfterOp
+ 2 0.0035 Xorg libexa.so GetScratchGC
+ 1 0.0018 Xorg libexa.so Xfree
+ 1 0.0018 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 1 0.0018 Xorg libexa.so DamageCreate
+ 1 0.0018 libexa.so libexa.so exaGetDrawableDeltas
+ 1 0.0018 Xorg libexa.so damageInsertDamage
+ 1 0.0018 Xorg libexa.so AllocatePicture
+ 1 0.0018 Xorg libexa.so miDestroyPicture
+ 1 0.0018 libexa.so libexa.so ExaOffscreenMarkUsed
+-------------------------------------------------------------------------------
+ 4 0.0098 libexa.so libexa.so exaPolyFillRect
+ 97 0.2377 libexa.so libexa.so exaFillRegionSolid
+ 99 0.2426 libexa.so libexa.so exaGlyphs
+ 583 1.4289 libexa.so libexa.so exaCopyNtoN
+ 5256 12.8817 libexa.so libexa.so exaRasterizeTrapezoid
+ 14295 35.0350 libexa.so libexa.so exaTryDriverComposite
+ 20468 50.1642 libexa.so libexa.so exaComposite
+400 0.2704 libexa.so libexa.so exaDoMigration
+ 26084 63.8969 libexa.so libexa.so exaMoveOutPixmap
+ 12884 31.5614 libexa.so libexa.so exaMoveInPixmap
+ 995 2.4374 libexa.so libexa.so ExaOffscreenMarkUsed
+ 400 0.9799 libexa.so libexa.so exaDoMigration [self]
+ 164 0.4017 libexa.so libexa.so exaPixmapIsOffscreen
+ 132 0.3234 libexa.so libexa.so exaPixmapIsPinned
+ 81 0.1984 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 43 0.1053 libexa.so libexa.so .plt
+ 11 0.0269 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 7 0.0171 libexa.so libexa.so exaCopyDirtyToSys
+ 5 0.0122 libexa.so libexa.so exaMemcpyBox
+ 3 0.0073 libexa.so libexa.so exaFinishAccess
+ 3 0.0073 Xorg libexa.so DamageEmpty
+ 3 0.0073 Xorg libexa.so DamageRegion
+ 3 0.0073 Xorg libexa.so miUnion
+ 2 0.0049 libexa.so libexa.so exaPrepareAccess
+ 2 0.0049 libexa.so libexa.so exaOffscreenAlloc
+-------------------------------------------------------------------------------
+ 3 0.7519 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 396 99.2481 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+399 0.2697 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+ 399 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU [self]
+-------------------------------------------------------------------------------
+382 0.2583 vmlinux vmlinux sys_gettimeofday
+ 382 100.000 vmlinux vmlinux sys_gettimeofday [self]
+-------------------------------------------------------------------------------
+ 38 12.6246 Xorg Xorg miComputeCompositeRegion
+ 263 87.3754 Xorg Xorg miCompositeSourceValidate
+360 0.2434 Xorg Xorg miSpriteSourceValidate
+ 360 100.000 Xorg Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 10 2.9674 libc-2.5.so libc-2.5.so _int_realloc
+ 327 97.0326 libc-2.5.so libc-2.5.so free
+356 0.2407 libc-2.5.so libc-2.5.so _int_free
+ 356 98.6150 libc-2.5.so libc-2.5.so _int_free [self]
+ 5 1.3850 libc-2.5.so libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+ 1 0.3215 libexa.so libexa.so exaFillRegionSolid
+ 2 0.6431 libexa.so libexa.so exaPolyFillRect
+ 2 0.6431 libexa.so libexa.so exaMoveInPixmap
+ 9 2.8939 libexa.so libexa.so exaFinishAccess
+ 10 3.2154 libexa.so libexa.so exaPrepareAccess
+ 20 6.4309 libexa.so libexa.so exaGlyphs
+ 26 8.3601 libexa.so libexa.so exaGetOffscreenPixmap
+ 26 8.3601 libexa.so libexa.so exaCopyNtoN
+ 87 27.9743 libexa.so libexa.so exaTryDriverComposite
+ 128 41.1576 libexa.so libexa.so exaComposite
+320 0.2163 libexa.so libexa.so exaGetDrawablePixmap
+ 320 100.000 libexa.so libexa.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+318 0.2150 libfb.so libfb.so fbDoCopy
+ 2555 86.9048 libfb.so libfb.so fbCopyRegion
+ 318 10.8163 libfb.so libfb.so fbDoCopy [self]
+ 53 1.8027 Xorg libfb.so miSpriteSourceValidate
+ 12 0.4082 Xorg libfb.so __i686.get_pc_thunk.bx
+ 2 0.0680 libexa.so libfb.so exaCopyNtoN
+-------------------------------------------------------------------------------
+309 0.2089 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols)
+ 309 100.000 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+301 0.2035 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 3528 89.9541 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 301 7.6747 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union [self]
+ 44 1.1219 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+ 12 0.3060 libc-2.5.so libpixman.so.0.0.0 free
+ 11 0.2805 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 8 0.2040 libc-2.5.so libpixman.so.0.0.0 memmove
+ 7 0.1785 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+ 7 0.1785 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+ 3 0.0765 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 1 0.0255 libc-2.5.so libpixman.so.0.0.0 realloc
+-------------------------------------------------------------------------------
+ 7 0.2288 libexa.so libexa.so exaRasterizeTrapezoid
+ 167 5.4593 libexa.so libexa.so exaCopyNtoN
+ 1307 42.7264 libexa.so libexa.so exaGlyphs
+ 1578 51.5855 libexa.so libexa.so exaComposite
+291 0.1967 libexa.so libexa.so exaPixmapDirty
+ 2735 89.0010 Xorg libexa.so miUnion
+ 291 9.4696 libexa.so libexa.so exaPixmapDirty [self]
+ 18 0.5857 Xorg libexa.so __i686.get_pc_thunk.bx
+ 11 0.3580 libpixman.so.0.0.0 libexa.so pixman_region_union
+ 9 0.2929 Xorg libexa.so .plt
+ 9 0.2929 Xorg libexa.so DamageRegion
+-------------------------------------------------------------------------------
+282 0.1906 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols)
+ 282 100.000 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+260 0.1758 vmlinux vmlinux copy_to_user
+ 260 100.000 vmlinux vmlinux copy_to_user [self]
+-------------------------------------------------------------------------------
+ 523 100.000 Xorg Xorg miComputeCompositeRegion
+255 0.1724 Xorg Xorg miCompositeSourceValidate
+ 263 48.4346 Xorg Xorg miSpriteSourceValidate
+ 255 46.9613 Xorg Xorg miCompositeSourceValidate [self]
+ 25 4.6041 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+254 0.1717 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols)
+ 254 100.000 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+244 0.1650 vmlinux vmlinux restore_all
+ 244 100.000 vmlinux vmlinux restore_all [self]
+-------------------------------------------------------------------------------
+ 3 0.0294 libexa.so libexa.so exaMoveInPixmap
+ 10189 99.9706 libexa.so libexa.so exaPrepareAccess
+233 0.1575 libexa.so libexa.so exaWaitSync
+ 22008 98.8590 intel_drv.so libexa.so I830EXASync
+ 233 1.0466 libexa.so libexa.so exaWaitSync [self]
+ 8 0.0359 intel_drv.so libexa.so I830Sync
+ 7 0.0314 intel_drv.so libexa.so .plt
+ 6 0.0270 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.9615 Xorg Xorg CreatePicture
+ 1 0.9615 Xorg Xorg SetPictureToDefaults
+ 1 0.9615 Xorg Xorg ProcRenderSetPictureFilter
+ 1 0.9615 Xorg Xorg ValidatePicture
+ 1 0.9615 Xorg Xorg ValidateOnePicture
+ 1 0.9615 Xorg Xorg ProcRenderFillRectangles
+ 1 0.9615 Xorg Xorg miValidatePicture
+ 1 0.9615 Xorg Xorg miDestroyPicture
+ 1 0.9615 Xorg Xorg ProcRenderFreePicture
+ 1 0.9615 Xorg Xorg XaceCatchExtProc
+ 1 0.9615 Xorg Xorg miRegionCreate
+ 1 0.9615 Xorg Xorg miChangeClip
+ 1 0.9615 Xorg Xorg miDestroyClip
+ 1 0.9615 Xorg Xorg GetScratchGC
+ 1 0.9615 Xorg Xorg DamageDestroy
+ 1 0.9615 Xorg Xorg damagePolySegment
+ 1 0.9615 Xorg Xorg ProcFreePixmap
+ 1 0.9615 Xorg Xorg FreeGC
+ 2 1.9231 Xorg Xorg ProcRenderCreatePicture
+ 2 1.9231 Xorg Xorg dixLookupDrawable
+ 2 1.9231 Xorg Xorg FreeResource
+ 3 2.8846 Xorg Xorg damageDamageRegion
+ 3 2.8846 Xorg Xorg FreePicture
+ 3 2.8846 Xorg Xorg XaceCatchDispatchProc
+ 3 2.8846 Xorg Xorg CallCallbacks
+ 3 2.8846 Xorg Xorg Dispatch
+ 3 2.8846 Xorg Xorg SecurityLookupIDByType
+ 4 3.8462 Xorg Xorg ProcRenderDispatch
+ 4 3.8462 Xorg Xorg ProcRenderCompositeGlyphs
+ 5 4.8077 Xorg Xorg _CallCallbacks
+ 24 23.0769 Xorg Xorg miComputeCompositeRegion
+ 25 24.0385 Xorg Xorg miCompositeSourceValidate
+230 0.1555 Xorg Xorg __i686.get_pc_thunk.bx
+ 230 100.000 Xorg Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+225 0.1521 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols)
+ 225 100.000 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 7 3.1111 libexa.so libexa.so exaMoveInPixmap
+ 24 10.6667 libexa.so libexa.so exaCopyNtoN
+ 28 12.4444 libexa.so libexa.so exaTryDriverComposite
+ 34 15.1111 libexa.so libexa.so exaMoveOutPixmap
+ 132 58.6667 libexa.so libexa.so exaDoMigration
+225 0.1521 libexa.so libexa.so exaPixmapIsPinned
+ 225 100.000 libexa.so libexa.so exaPixmapIsPinned [self]
+-------------------------------------------------------------------------------
+ 9 8.4906 intel_drv.so intel_drv.so I830EXASync
+ 16 15.0943 intel_drv.so intel_drv.so i965_composite
+ 31 29.2453 intel_drv.so intel_drv.so i965_prepare_composite
+ 50 47.1698 intel_drv.so intel_drv.so I830Sync
+224 0.1514 intel_drv.so intel_drv.so .plt
+ 224 100.000 intel_drv.so intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 7 3.1963 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 212 96.8037 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+219 0.1481 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+ 219 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO [self]
+-------------------------------------------------------------------------------
+ 179 100.000 intel_drv.so intel_drv.so i965_composite
+216 0.1460 intel_drv.so intel_drv.so i830_get_transformed_coordinates
+ 216 100.000 intel_drv.so intel_drv.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+ 5 12.1951 Xorg Xorg GetScratchPixmapHeader
+ 36 87.8049 Xorg Xorg damageGlyphs
+211 0.1426 Xorg Xorg miModifyPixmapHeader
+ 211 100.000 Xorg Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+211 0.1426 intel_drv.so intel_drv.so i965_check_composite
+ 211 52.0988 intel_drv.so intel_drv.so i965_check_composite [self]
+ 155 38.2716 intel_drv.so intel_drv.so i965_check_composite_texture
+ 21 5.1852 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 18 4.4444 intel_drv.so intel_drv.so i965_get_dest_format
+-------------------------------------------------------------------------------
+211 0.1426 libexa.so libexa.so exaCopyNtoN
+ 985 41.3171 libfb.so libexa.so fbCopyNtoN
+ 583 24.4547 libexa.so libexa.so exaDoMigration
+ 211 8.8507 libexa.so libexa.so exaCopyNtoN [self]
+ 167 7.0050 libexa.so libexa.so exaPixmapDirty
+ 97 4.0688 libexa.so libexa.so exaPrepareAccess
+ 59 2.4748 libexa.so libexa.so exaFinishAccess
+ 44 1.8456 libexa.so libexa.so .plt
+ 37 1.5520 libexa.so libexa.so exaPixmapIsOffscreen
+ 26 1.0906 libexa.so libexa.so exaGetDrawablePixmap
+ 26 1.0906 libpixman.so.0.0.0 libexa.so pixman_blt
+ 25 1.0487 libfb.so libexa.so __i686.get_pc_thunk.cx
+ 24 1.0067 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 24 1.0067 libexa.so libexa.so exaPixmapIsPinned
+ 18 0.7550 libfb.so libexa.so fbGetGCPrivateIndex
+ 16 0.6711 libexa.so libexa.so exaGetDrawableDeltas
+ 13 0.5453 Xorg libexa.so miUnion
+ 10 0.4195 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 7 0.2936 libexa.so libexa.so exaMoveOutPixmap
+ 5 0.2097 libfb.so libexa.so .plt
+ 5 0.2097 libfb.so libexa.so __i686.get_pc_thunk.bx
+ 1 0.0419 intel_drv.so libexa.so I830EXACopy
+ 1 0.0419 Xorg libexa.so DamageRegion
+-------------------------------------------------------------------------------
+ 5 0.0190 libexa.so libexa.so exaDoMigration
+ 2052 7.7887 libexa.so libexa.so exaMoveInPixmap
+ 24289 92.1924 libexa.so libexa.so exaCopyDirtyToSys
+211 0.1426 libexa.so libexa.so exaMemcpyBox
+ 26134 99.1953 libc-2.5.so libexa.so memcpy
+ 211 0.8009 libexa.so libexa.so exaMemcpyBox [self]
+ 1 0.0038 anon (tgid:5961 range:0xb7f92000-0xb7f93000) libexa.so (no symbols)
+-------------------------------------------------------------------------------
+208 0.1406 vmlinux vmlinux __d_lookup
+ 208 100.000 vmlinux vmlinux __d_lookup [self]
+-------------------------------------------------------------------------------
+200 0.1352 vmlinux vmlinux cond_resched
+ 200 100.000 vmlinux vmlinux cond_resched [self]
+-------------------------------------------------------------------------------
+197 0.1332 libc-2.5.so libc-2.5.so memcmp
+ 197 100.000 libc-2.5.so libc-2.5.so memcmp [self]
+-------------------------------------------------------------------------------
+194 0.1312 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles
+ 194 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 6 4.2857 intel_drv.so intel_drv.so I830EXASync
+ 8 5.7143 intel_drv.so intel_drv.so I830Sync
+ 21 15.0000 intel_drv.so intel_drv.so i965_check_composite
+ 43 30.7143 intel_drv.so intel_drv.so i965_composite
+ 62 44.2857 intel_drv.so intel_drv.so i965_prepare_composite
+193 0.1305 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+ 193 100.000 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 155 100.000 intel_drv.so intel_drv.so i965_check_composite
+193 0.1305 intel_drv.so intel_drv.so i965_check_composite_texture
+ 193 100.000 intel_drv.so intel_drv.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+186 0.1257 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols)
+ 186 100.000 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+183 0.1237 vmlinux vmlinux unmap_vmas
+ 183 100.000 vmlinux vmlinux unmap_vmas [self]
+-------------------------------------------------------------------------------
+ 1 9.0909 Xorg Xorg AddResource
+ 1 9.0909 Xorg Xorg miComputeCompositeClip
+ 1 9.0909 Xorg Xorg miRegionDestroy
+ 1 9.0909 Xorg Xorg FreePicture
+ 1 9.0909 Xorg Xorg damageDamageRegion
+ 2 18.1818 Xorg Xorg AllocatePicture
+ 4 36.3636 Xorg Xorg miRegionCreate
+176 0.1190 Xorg Xorg .plt
+ 176 100.000 Xorg Xorg .plt [self]
+-------------------------------------------------------------------------------
+173 0.1170 libmozjs.so libmozjs.so (no symbols)
+ 173 100.000 libmozjs.so libmozjs.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 127 1.0396 intel_drv.so intel_drv.so i965_composite
+ 12089 98.9604 intel_drv.so intel_drv.so i965_prepare_composite
+170 0.1149 intel_drv.so intel_drv.so i830WaitSync
+ 12054 98.4563 libexa.so intel_drv.so exaWaitSync
+ 170 1.3885 intel_drv.so intel_drv.so i830WaitSync [self]
+ 12 0.0980 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+ 7 0.0572 intel_drv.so intel_drv.so I830EXASync
+-------------------------------------------------------------------------------
+ 6 100.000 libfb.so libfb.so fbCopyRegion
+165 0.1115 libfb.so libfb.so fbCopyNtoN
+ 745 75.1766 libpixman.so.0.0.0 libfb.so pixman_blt
+ 165 16.6498 libfb.so libfb.so fbCopyNtoN [self]
+ 39 3.9354 libpixman.so.0.0.0 libfb.so pixman_blt_mmx
+ 28 2.8254 libpixman.so.0.0.0 libfb.so pixman_have_mmx
+ 9 0.9082 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx
+ 5 0.5045 libpixman.so.0.0.0 libfb.so .plt
+-------------------------------------------------------------------------------
+ 124 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+164 0.1109 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+ 164 96.4706 intel_drv.so intel_drv.so intel_get_pixmap_pitch [self]
+ 6 3.5294 libexa.so intel_drv.so exaGetPixmapPitch
+-------------------------------------------------------------------------------
+157 0.1061 libnspr4.so libnspr4.so (no symbols)
+ 157 100.000 libnspr4.so libnspr4.so (no symbols) [self]
+-------------------------------------------------------------------------------
+153 0.1034 bash bash (no symbols)
+ 153 100.000 bash bash (no symbols) [self]
+-------------------------------------------------------------------------------
+ 367 24.3854 libc-2.5.so libc-2.5.so qsort
+ 1138 75.6146 libc-2.5.so libc-2.5.so msort_with_tmp
+153 0.1034 libc-2.5.so libc-2.5.so msort_with_tmp
+ 1138 75.4642 libc-2.5.so libc-2.5.so msort_with_tmp
+ 153 10.1459 libc-2.5.so libc-2.5.so msort_with_tmp [self]
+ 118 7.8249 libc-2.5.so libc-2.5.so memcpy
+ 89 5.9019 libxul.so libc-2.5.so (no symbols)
+ 4 0.2653 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 3 0.1989 libcairo.so.2.11.3 libc-2.5.so (no symbols)
+ 2 0.1326 libc-2.5.so libc-2.5.so mempcpy
+ 1 0.0663 libc-2.5.so libc-2.5.so strcoll
+-------------------------------------------------------------------------------
+ 218 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+151 0.1021 intel_drv.so intel_drv.so intel_get_pixmap_offset
+ 151 63.1799 intel_drv.so intel_drv.so intel_get_pixmap_offset [self]
+ 71 29.7071 libexa.so intel_drv.so exaGetPixmapOffset
+ 17 7.1130 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 4 2.6490 libc-2.5.so libc-2.5.so malloc
+ 5 3.3113 libc-2.5.so libc-2.5.so _int_free
+ 142 94.0397 libc-2.5.so libc-2.5.so _int_malloc
+151 0.1021 libc-2.5.so libc-2.5.so malloc_consolidate
+ 151 100.000 libc-2.5.so libc-2.5.so malloc_consolidate [self]
+-------------------------------------------------------------------------------
+149 0.1007 libc-2.5.so libc-2.5.so memmove
+ 149 100.000 libc-2.5.so libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 1 0.2488 libexa.so libexa.so exaPolyFillRect
+ 7 1.7413 libexa.so libexa.so exaFillRegionSolid
+ 27 6.7164 libexa.so libexa.so exaComposite
+ 367 91.2935 libexa.so libexa.so exaTryDriverComposite
+146 0.0987 libexa.so libexa.so exaGetOffscreenPixmap
+ 170 42.2886 libexa.so libexa.so exaPixmapIsOffscreen
+ 146 36.3184 libexa.so libexa.so exaGetOffscreenPixmap [self]
+ 45 11.1940 libexa.so libexa.so exaGetDrawableDeltas
+ 26 6.4677 libexa.so libexa.so exaGetDrawablePixmap
+ 15 3.7313 libexa.so libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+143 0.0967 libm-2.5.so libm-2.5.so floor
+ 143 100.000 libm-2.5.so libm-2.5.so floor [self]
+-------------------------------------------------------------------------------
+ 1 1.0870 libexa.so libexa.so exaFillRegionSolid
+ 2 2.1739 libexa.so libexa.so exaComposite
+ 89 96.7391 libexa.so libexa.so exaTryDriverComposite
+128 0.0865 libexa.so libexa.so exaMarkSync
+ 128 100.000 libexa.so libexa.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+125 0.0845 oprofile.ko oprofile add_sample_entry
+ 125 100.000 oprofile.ko oprofile add_sample_entry [self]
+-------------------------------------------------------------------------------
+ 1 0.8065 libexa.so libexa.so ExaCheckComposite
+ 3 2.4194 libexa.so libexa.so exaDoMigration
+ 3 2.4194 libexa.so libexa.so exaRasterizeTrapezoid
+ 5 4.0323 libexa.so libexa.so exaCopyDirtyToSys
+ 53 42.7419 libexa.so libexa.so exaMoveInPixmap
+ 59 47.5806 libexa.so libexa.so exaCopyNtoN
+117 0.0791 libexa.so libexa.so exaFinishAccess
+ 117 92.8571 libexa.so libexa.so exaFinishAccess [self]
+ 9 7.1429 libexa.so libexa.so exaGetDrawablePixmap
+-------------------------------------------------------------------------------
+117 0.0791 vmlinux vmlinux __handle_mm_fault
+ 117 100.000 vmlinux vmlinux __handle_mm_fault [self]
+-------------------------------------------------------------------------------
+ 1 1.0000 libexa.so libexa.so exaPolyFillRect
+ 1 1.0000 libexa.so libexa.so exaGlyphs
+ 16 16.0000 libexa.so libexa.so exaCopyNtoN
+ 18 18.0000 libexa.so libexa.so exaComposite
+ 19 19.0000 libexa.so libexa.so exaTryDriverComposite
+ 45 45.0000 libexa.so libexa.so exaGetOffscreenPixmap
+114 0.0771 libexa.so libexa.so exaGetDrawableDeltas
+ 114 100.000 libexa.so libexa.so exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+ 2 0.8696 Xorg Xorg ProcRenderFillRectangles
+ 7 3.0435 Xorg Xorg XaceCatchDispatchProc
+ 10 4.3478 Xorg Xorg main
+ 11 4.7826 Xorg Xorg dixLookupDrawable
+ 16 6.9565 Xorg Xorg SecurityLookupIDByClass
+ 45 19.5652 Xorg Xorg XaceCatchExtProc
+ 46 20.0000 Xorg Xorg Dispatch
+ 93 40.4348 Xorg Xorg SecurityLookupIDByType
+111 0.0750 Xorg Xorg XaceHook
+ 111 48.2609 Xorg Xorg XaceHook [self]
+ 102 44.3478 Xorg Xorg CallCallbacks
+ 17 7.3913 Xorg Xorg _CallCallbacks
+-------------------------------------------------------------------------------
+ 7 0.0270 libexa.so libexa.so exaDoMigration
+ 25899 99.9730 libexa.so libexa.so exaMoveOutPixmap
+111 0.0750 libexa.so libexa.so exaCopyDirtyToSys
+ 24289 93.7473 libexa.so libexa.so exaMemcpyBox
+ 1417 5.4691 libexa.so libexa.so exaPrepareAccess
+ 111 0.4284 libexa.so libexa.so exaCopyDirtyToSys [self]
+ 43 0.1660 Xorg libexa.so miUnion
+ 29 0.1119 Xorg libexa.so DamageEmpty
+ 5 0.0193 libexa.so libexa.so exaFinishAccess
+ 3 0.0116 Xorg libexa.so .plt
+ 3 0.0116 Xorg libexa.so __i686.get_pc_thunk.bx
+ 3 0.0116 Xorg libexa.so DamageRegion
+ 3 0.0116 libpixman.so.0.0.0 libexa.so pixman_region_union
+ 1 0.0039 libexa.so libexa.so .plt
+ 1 0.0039 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 1 0.0039 libc-2.5.so libexa.so memcpy
+-------------------------------------------------------------------------------
+ 2555 100.000 libfb.so libfb.so fbDoCopy
+109 0.0737 libfb.so libfb.so fbCopyRegion
+ 2382 91.8627 libexa.so libfb.so exaCopyNtoN
+ 109 4.2036 libfb.so libfb.so fbCopyRegion [self]
+ 51 1.9668 libexa.so libfb.so .plt
+ 13 0.5013 libexa.so libfb.so exaDoMigration
+ 8 0.3085 libexa.so libfb.so exaGetDrawablePixmap
+ 6 0.2314 libexa.so libfb.so exaGetDrawableDeltas
+ 6 0.2314 libfb.so libfb.so fbCopyNtoN
+ 5 0.1928 libexa.so libfb.so __i686.get_pc_thunk.bx
+ 5 0.1928 libexa.so libfb.so exaPixmapDirty
+ 3 0.1157 libexa.so libfb.so exaPixmapIsOffscreen
+ 3 0.1157 libexa.so libfb.so exaPrepareAccess
+ 2 0.0771 libexa.so libfb.so exaFinishAccess
+-------------------------------------------------------------------------------
+106 0.0717 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects
+ 106 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 7 6.6667 Xorg Xorg ProcRenderCompositeGlyphs
+ 98 93.3333 Xorg Xorg FindGlyph
+105 0.0710 Xorg Xorg FindGlyphRef
+ 105 100.000 Xorg Xorg FindGlyphRef [self]
+-------------------------------------------------------------------------------
+ 3 1.0989 Xorg Xorg damageDamageBox
+ 21 7.6923 Xorg Xorg damageDamageRegion
+ 249 91.2088 Xorg Xorg DamageReportDamage
+105 0.0710 Xorg Xorg miUnion
+ 3906 96.0886 libpixman.so.0.0.0 Xorg pixman_region_union
+ 105 2.5830 Xorg Xorg miUnion [self]
+ 23 0.5658 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 17 0.4182 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 11 0.2706 libpixman.so.0.0.0 Xorg pixman_op
+ 3 0.0738 libpixman.so.0.0.0 Xorg .plt
+-------------------------------------------------------------------------------
+ 7 0.0268 libexa.so libexa.so exaCopyNtoN
+ 26084 99.9732 libexa.so libexa.so exaDoMigration
+100 0.0676 libexa.so libexa.so exaMoveOutPixmap
+ 25899 99.2451 libexa.so libexa.so exaCopyDirtyToSys
+ 100 0.3832 libexa.so libexa.so exaMoveOutPixmap [self]
+ 36 0.1380 libexa.so libexa.so exaPixmapIsOffscreen
+ 34 0.1303 libexa.so libexa.so exaPixmapIsPinned
+ 9 0.0345 libexa.so libexa.so .plt
+ 9 0.0345 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 4 0.0153 Xorg libexa.so DamageRegion
+ 3 0.0115 Xorg libexa.so DamageEmpty
+ 2 0.0077 Xorg libexa.so miUnion
+-------------------------------------------------------------------------------
+ 2 0.0193 libexa.so libexa.so exaDoMigration
+ 5 0.0481 libexa.so libexa.so exaRasterizeTrapezoid
+ 97 0.9338 libexa.so libexa.so exaCopyNtoN
+ 1417 13.6407 libexa.so libexa.so exaCopyDirtyToSys
+ 8867 85.3581 libexa.so libexa.so exaMoveInPixmap
+99 0.0669 libexa.so libexa.so exaPrepareAccess
+ 10189 98.0277 libexa.so libexa.so exaWaitSync
+ 99 0.9525 libexa.so libexa.so exaPrepareAccess [self]
+ 82 0.7889 libexa.so libexa.so exaPixmapIsOffscreen
+ 11 0.1058 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 10 0.0962 libexa.so libexa.so exaGetDrawablePixmap
+ 3 0.0289 intel_drv.so libexa.so I830EXASync
+-------------------------------------------------------------------------------
+98 0.0663 vmlinux vmlinux __link_path_walk
+ 98 100.000 vmlinux vmlinux __link_path_walk [self]
+-------------------------------------------------------------------------------
+95 0.0642 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+ 95 100.000 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3027 100.000 libexa.so libexa.so exaGlyphs
+94 0.0635 libexa.so libexa.so exaCopyArea
+ 2919 95.2676 libfb.so libexa.so fbDoCopy
+ 94 3.0679 libexa.so libexa.so exaCopyArea [self]
+ 38 1.2402 libfb.so libexa.so fbCopyRegion
+ 6 0.1958 Xorg libexa.so miSpriteSourceValidate
+ 4 0.1305 libfb.so libexa.so __i686.get_pc_thunk.bx
+ 3 0.0979 libfb.so libexa.so .plt
+-------------------------------------------------------------------------------
+ 5 0.0088 Xorg Xorg ProcRenderCompositeGlyphs
+ 56812 99.9912 Xorg Xorg CompositeGlyphs
+92 0.0622 Xorg Xorg damageGlyphs
+ 56465 99.3682 libexa.so Xorg exaGlyphs
+ 123 0.2165 Xorg Xorg damageReportPostOp
+ 92 0.1619 Xorg Xorg damageGlyphs [self]
+ 36 0.0634 Xorg Xorg miModifyPixmapHeader
+ 32 0.0563 libexa.so Xorg exaCopyArea
+ 20 0.0352 Xorg Xorg damageDamageBox
+ 12 0.0211 libexa.so Xorg .plt
+ 10 0.0176 libexa.so Xorg exaComposite
+ 9 0.0158 libexa.so Xorg exaPixmapDirty
+ 6 0.0106 Xorg Xorg FreeScratchGC
+ 4 0.0070 Xorg Xorg getDrawableDamageRef
+ 4 0.0070 Xorg Xorg GetScratchGC
+ 2 0.0035 Xorg Xorg FreePicture
+ 2 0.0035 Xorg Xorg ValidatePicture
+ 2 0.0035 Xorg Xorg FreeScratchPixmapHeader
+ 1 0.0018 Xorg Xorg ValidateGC
+ 1 0.0018 Xorg Xorg CreatePicture
+ 1 0.0018 libexa.so Xorg exaGetDrawableDeltas
+ 1 0.0018 libexa.so Xorg exaCreatePixmap
+ 1 0.0018 Xorg Xorg GetScratchPixmapHeader
+-------------------------------------------------------------------------------
+ 1 2.4390 libc-2.5.so libc-2.5.so qsort
+ 1 2.4390 libc-2.5.so libc-2.5.so _nl_find_locale
+ 4 9.7561 libc-2.5.so libc-2.5.so msort_with_tmp
+ 5 12.1951 libc-2.5.so libc-2.5.so mbrtowc
+ 13 31.7073 libc-2.5.so libc-2.5.so free
+ 17 41.4634 libc-2.5.so libc-2.5.so malloc
+90 0.0608 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 90 100.000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+90 0.0608 libexa.so libexa.so exaGetPixmapOffset
+ 90 100.000 libexa.so libexa.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+88 0.0595 vmlinux vmlinux __rmqueue
+ 88 100.000 vmlinux vmlinux __rmqueue [self]
+-------------------------------------------------------------------------------
+88 0.0595 vmlinux vmlinux syscall_call
+ 88 100.000 vmlinux vmlinux syscall_call [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so sigemptyset
+85 0.0575 libc-2.5.so libc-2.5.so memset
+ 85 100.000 libc-2.5.so libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+83 0.0561 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock
+ 83 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock [self]
+-------------------------------------------------------------------------------
+ 118 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+82 0.0554 intel_drv.so intel_drv.so IntelEmitInvarientState
+ 82 62.1212 intel_drv.so intel_drv.so IntelEmitInvarientState [self]
+ 34 25.7576 libdri.so intel_drv.so DRIGetSAREAPrivate
+ 16 12.1212 libdri.so intel_drv.so DRIGetContext
+-------------------------------------------------------------------------------
+ 2 2.1277 libexa.so libexa.so exaDoMigration
+ 92 97.8723 libexa.so libexa.so exaMoveInPixmap
+80 0.0541 libexa.so libexa.so exaOffscreenAlloc
+ 80 85.1064 libexa.so libexa.so exaOffscreenAlloc [self]
+ 13 13.8298 Xorg libexa.so Xalloc
+ 1 1.0638 Xorg libexa.so .plt
+-------------------------------------------------------------------------------
+79 0.0534 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt
+ 652 84.5655 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt_mmx
+ 79 10.2464 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt [self]
+ 39 5.0584 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_have_mmx
+ 1 0.1297 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3 3.5714 Xorg Xorg main
+ 81 96.4286 Xorg Xorg Dispatch
+77 0.0521 Xorg Xorg ReadRequestFromClient
+ 77 91.6667 Xorg Xorg ReadRequestFromClient [self]
+ 3 3.5714 libc-2.5.so Xorg memmove
+ 2 2.3810 Xorg Xorg _XSERVTransRead
+ 2 2.3810 Xorg Xorg _XSERVTransSocketRead
+-------------------------------------------------------------------------------
+ 7 100.000 intel_drv.so intel_drv.so i830WaitSync
+77 0.0521 intel_drv.so intel_drv.so I830EXASync
+ 21910 99.5095 intel_drv.so intel_drv.so I830Sync
+ 77 0.3497 intel_drv.so intel_drv.so I830EXASync [self]
+ 16 0.0727 intel_drv.so intel_drv.so I830WaitLpRing
+ 9 0.0409 intel_drv.so intel_drv.so .plt
+ 6 0.0273 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+77 0.0521 vmlinux vmlinux release_pages
+ 77 100.000 vmlinux vmlinux release_pages [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __fopen_internal
+73 0.0494 libc-2.5.so libc-2.5.so strstr
+ 73 100.000 libc-2.5.so libc-2.5.so strstr [self]
+-------------------------------------------------------------------------------
+72 0.0487 vmlinux vmlinux do_page_fault
+ 72 100.000 vmlinux vmlinux do_page_fault [self]
+-------------------------------------------------------------------------------
+71 0.0480 libgcc_s.so.1 libgcc_s.so.1 (no symbols)
+ 71 100.000 libgcc_s.so.1 libgcc_s.so.1 (no symbols) [self]
+-------------------------------------------------------------------------------
+71 0.0480 vmlinux vmlinux __pagevec_lru_add_active
+ 71 100.000 vmlinux vmlinux __pagevec_lru_add_active [self]
+-------------------------------------------------------------------------------
+ 39 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt
+68 0.0460 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_have_mmx
+ 68 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_have_mmx [self]
+-------------------------------------------------------------------------------
+66 0.0446 vmlinux vmlinux page_address
+ 66 100.000 vmlinux vmlinux page_address [self]
+-------------------------------------------------------------------------------
+ 44 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+65 0.0439 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+ 65 98.4848 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy [self]
+ 1 1.5152 libc-2.5.so libpixman.so.0.0.0 free
+-------------------------------------------------------------------------------
+ 1 4.3478 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+ 1 4.3478 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 1 4.3478 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1 4.3478 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 1 4.3478 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt
+ 1 4.3478 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 3 13.0435 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 3 13.0435 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 11 47.8261 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+63 0.0426 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 63 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 7 1.2433 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 556 98.7567 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+61 0.0412 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+ 482 85.6128 libc-2.5.so libpixman.so.0.0.0 malloc
+ 61 10.8348 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc [self]
+ 15 2.6643 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 5 0.8881 libc-2.5.so libpixman.so.0.0.0 _int_malloc
+-------------------------------------------------------------------------------
+61 0.0412 vmlinux vmlinux free_hot_cold_page
+ 61 100.000 vmlinux vmlinux free_hot_cold_page [self]
+-------------------------------------------------------------------------------
+ 8 3.8462 Xorg Xorg ProcFreeGC
+ 69 33.1731 Xorg Xorg ProcFreePixmap
+ 131 62.9808 Xorg Xorg ProcRenderFreePicture
+60 0.0406 Xorg Xorg FreeResource
+ 73 35.0962 Xorg Xorg FreePicture
+ 60 28.8462 Xorg Xorg FreeResource [self]
+ 40 19.2308 Xorg Xorg dixDestroyPixmap
+ 15 7.2115 Xorg Xorg Xfree
+ 6 2.8846 Xorg Xorg FreeGC
+ 4 1.9231 Xorg Xorg Hash
+ 4 1.9231 Xorg Xorg FlushClientCaches
+ 3 1.4423 libextmod.so Xorg XvDestroyPixmap
+ 2 0.9615 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.4808 Xorg Xorg damageDestroyGC
+-------------------------------------------------------------------------------
+59 0.0399 vmlinux vmlinux timer_interrupt
+ 59 100.000 vmlinux vmlinux timer_interrupt [self]
+-------------------------------------------------------------------------------
+57 0.0385 Xorg Xorg DamageEmpty
+ 57 100.000 Xorg Xorg DamageEmpty [self]
+-------------------------------------------------------------------------------
+57 0.0385 vmlinux vmlinux page_remove_rmap
+ 57 100.000 vmlinux vmlinux page_remove_rmap [self]
+-------------------------------------------------------------------------------
+ 1 0.5747 Xorg Xorg XaceCatchDispatchProc
+ 3 1.7241 Xorg Xorg ProcRenderComposite
+ 3 1.7241 Xorg Xorg ProcRenderTrapezoids
+ 6 3.4483 Xorg Xorg dixLookupGC
+ 6 3.4483 Xorg Xorg ProcRenderDispatch
+ 7 4.0230 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 8 4.5977 Xorg Xorg ProcRenderChangePicture
+ 10 5.7471 Xorg Xorg ProcRenderSetPictureTransform
+ 12 6.8966 Xorg Xorg ProcFreePixmap
+ 16 9.1954 Xorg Xorg ProcRenderSetPictureFilter
+ 16 9.1954 Xorg Xorg ProcRenderFillRectangles
+ 19 10.9195 Xorg Xorg ProcRenderCreatePicture
+ 31 17.8161 Xorg Xorg ProcRenderFreePicture
+ 36 20.6897 Xorg Xorg ProcRenderCompositeGlyphs
+56 0.0379 Xorg Xorg SecurityLookupIDByType
+ 93 53.4483 Xorg Xorg XaceHook
+ 56 32.1839 Xorg Xorg SecurityLookupIDByType [self]
+ 18 10.3448 Xorg Xorg Hash
+ 4 2.2989 Xorg Xorg CallCallbacks
+ 3 1.7241 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+56 0.0379 vmlinux vmlinux _atomic_dec_and_lock
+ 56 100.000 vmlinux vmlinux _atomic_dec_and_lock [self]
+-------------------------------------------------------------------------------
+55 0.0372 vmlinux vmlinux __copy_from_user_ll
+ 55 100.000 vmlinux vmlinux __copy_from_user_ll [self]
+-------------------------------------------------------------------------------
+55 0.0372 vmlinux vmlinux lru_cache_add_active
+ 55 100.000 vmlinux vmlinux lru_cache_add_active [self]
+-------------------------------------------------------------------------------
+ 53 100.000 libc-2.5.so libc-2.5.so mbrtowc
+53 0.0358 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal
+ 53 100.000 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal [self]
+-------------------------------------------------------------------------------
+ 53 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+53 0.0358 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+ 53 100.000 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt [self]
+-------------------------------------------------------------------------------
+51 0.0345 vmlinux vmlinux mwait_idle_with_hints
+ 51 100.000 vmlinux vmlinux mwait_idle_with_hints [self]
+-------------------------------------------------------------------------------
+50 0.0338 libextmod.so libextmod.so XvDestroyPixmap
+ 149 71.9807 Xorg libextmod.so damageDestroyPixmap
+ 50 24.1546 libextmod.so libextmod.so XvDestroyPixmap [self]
+ 6 2.8986 libexa.so libextmod.so exaDestroyPixmap
+ 1 0.4831 Xorg libextmod.so __i686.get_pc_thunk.bx
+ 1 0.4831 Xorg libextmod.so damageRemoveDamage
+-------------------------------------------------------------------------------
+48 0.0325 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 48 96.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini [self]
+ 2 4.0000 libc-2.5.so libpixman.so.0.0.0 free
+-------------------------------------------------------------------------------
+48 0.0325 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty
+ 48 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 1 2.1277 libexa.so libexa.so exaGlyphs
+ 5 10.6383 libexa.so libexa.so exaFillRegionSolid
+ 10 21.2766 libexa.so libexa.so exaCopyNtoN
+ 11 23.4043 libexa.so libexa.so exaDoMigration
+ 20 42.5532 libexa.so libexa.so exaTryDriverComposite
+47 0.0318 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 47 100.000 libexa.so libexa.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 91200 100.000 Xorg Xorg main
+46 0.0311 Xorg Xorg Dispatch
+ 90672 99.4102 Xorg Xorg XaceCatchExtProc
+ 336 0.3684 Xorg Xorg XaceCatchDispatchProc
+ 81 0.0888 Xorg Xorg ReadRequestFromClient
+ 46 0.0504 Xorg Xorg Dispatch [self]
+ 46 0.0504 Xorg Xorg XaceHook
+ 6 0.0066 Xorg Xorg WaitForSomething
+ 5 0.0055 Xorg Xorg CallCallbacks
+ 3 0.0033 Xorg Xorg GetExtensionEntry
+ 3 0.0033 Xorg Xorg ProcRenderDispatch
+ 3 0.0033 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 0.0022 Xorg Xorg ProcessInputEvents
+ 2 0.0022 libc-2.5.so Xorg memmove
+ 1 0.0011 Xorg Xorg ProcCreateGC
+ 1 0.0011 Xorg Xorg ProcPolyFillRectangle
+ 1 0.0011 Xorg Xorg ProcFreePixmap
+ 1 0.0011 Xorg Xorg _XSERVTransRead
+ 1 0.0011 Xorg Xorg FlushAllOutput
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_lookup
+46 0.0311 libc-2.5.so libc-2.5.so strlen
+ 46 100.000 libc-2.5.so libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+ 47 100.000 libexa.so libexa.so exaDestroyPixmap
+45 0.0304 libexa.so libexa.so exaOffscreenFree
+ 45 86.5385 libexa.so libexa.so exaOffscreenFree [self]
+ 7 13.4615 libexa.so libexa.so ExaOffscreenMerge
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so mblen
+44 0.0297 libc-2.5.so libc-2.5.so mbrtowc
+ 53 50.4762 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal
+ 44 41.9048 libc-2.5.so libc-2.5.so mbrtowc [self]
+ 5 4.7619 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 2 1.9048 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check
+ 1 0.9524 libc-2.5.so libc-2.5.so __wcsmbs_load_conv
+-------------------------------------------------------------------------------
+ 4 18.1818 intel_drv.so intel_drv.so i965_prepare_composite
+ 18 81.8182 intel_drv.so intel_drv.so i965_check_composite
+42 0.0284 intel_drv.so intel_drv.so i965_get_dest_format
+ 42 100.000 intel_drv.so intel_drv.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+42 0.0284 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols)
+ 42 100.000 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols) [self]
+-------------------------------------------------------------------------------
+41 0.0277 libdri.so libdri.so DRIGetSAREAPrivate
+ 41 100.000 libdri.so libdri.so DRIGetSAREAPrivate [self]
+-------------------------------------------------------------------------------
+ 1 0.0018 Xorg Xorg XaceCatchExtProc
+ 57023 99.9982 Xorg Xorg ProcRenderDispatch
+40 0.0270 Xorg Xorg ProcRenderCompositeGlyphs
+ 56825 99.6423 Xorg Xorg CompositeGlyphs
+ 111 0.1946 Xorg Xorg FindGlyph
+ 40 0.0701 Xorg Xorg ProcRenderCompositeGlyphs [self]
+ 36 0.0631 Xorg Xorg SecurityLookupIDByType
+ 7 0.0123 Xorg Xorg FindGlyphRef
+ 5 0.0088 Xorg Xorg damageGlyphs
+ 4 0.0070 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.0018 Xorg Xorg ValidatePicture
+-------------------------------------------------------------------------------
+ 17 20.4819 Xorg Xorg XaceHook
+ 66 79.5181 Xorg Xorg CallCallbacks
+40 0.0270 Xorg Xorg _CallCallbacks
+ 40 48.1928 Xorg Xorg _CallCallbacks [self]
+ 30 36.1446 Xorg Xorg SecurityCheckResourceIDAccess
+ 8 9.6386 Xorg Xorg SecurityCheckExtAccess
+ 5 6.0241 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+40 0.0270 libfb.so libfb.so fbValidateGC
+ 40 57.9710 libfb.so libfb.so fbValidateGC [self]
+ 26 37.6812 Xorg libfb.so miComputeCompositeClip
+ 2 2.8986 Xorg libfb.so miIntersect
+ 1 1.4493 Xorg libfb.so miTranslateRegion
+-------------------------------------------------------------------------------
+ 1 0.8772 Xorg Xorg dixLookupDrawable
+ 2 1.7544 Xorg Xorg XaceCatchExtProc
+ 4 3.5088 Xorg Xorg SecurityLookupIDByType
+ 5 4.3860 Xorg Xorg Dispatch
+ 102 89.4737 Xorg Xorg XaceHook
+39 0.0264 Xorg Xorg CallCallbacks
+ 66 57.8947 Xorg Xorg _CallCallbacks
+ 39 34.2105 Xorg Xorg CallCallbacks [self]
+ 4 3.5088 Xorg Xorg SecurityCheckResourceIDAccess
+ 3 2.6316 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 1.7544 Xorg Xorg SecurityCheckExtAccess
+-------------------------------------------------------------------------------
+ 3 6.0000 Xorg Xorg miColorRects
+ 4 8.0000 Xorg Xorg ProcChangeGC
+ 43 86.0000 Xorg Xorg ChangeGC
+39 0.0264 Xorg Xorg dixChangeGC
+ 39 78.0000 Xorg Xorg dixChangeGC [self]
+ 7 14.0000 Xorg Xorg damageChangeGC
+ 3 6.0000 Xorg Xorg miBSCheapChangeGC
+ 1 2.0000 Xorg Xorg damageChangeClip
+-------------------------------------------------------------------------------
+39 0.0264 intel_drv.so intel_drv.so I830EXASolid
+ 39 95.1220 intel_drv.so intel_drv.so I830EXASolid [self]
+ 2 4.8780 libexa.so intel_drv.so exaGetPixmapOffset
+-------------------------------------------------------------------------------
+39 0.0264 vmlinux vmlinux down_read_trylock
+ 39 100.000 vmlinux vmlinux down_read_trylock [self]
+-------------------------------------------------------------------------------
+38 0.0257 libdri.so libdri.so DRIGetContext
+ 38 100.000 libdri.so libdri.so DRIGetContext [self]
+-------------------------------------------------------------------------------
+38 0.0257 vmlinux vmlinux error_code
+ 38 100.000 vmlinux vmlinux error_code [self]
+-------------------------------------------------------------------------------
+35 0.0237 Xorg Xorg DamageRegion
+ 35 100.000 Xorg Xorg DamageRegion [self]
+-------------------------------------------------------------------------------
+ 4 11.7647 Xorg Xorg CallCallbacks
+ 30 88.2353 Xorg Xorg _CallCallbacks
+34 0.0230 Xorg Xorg SecurityCheckResourceIDAccess
+ 34 100.000 Xorg Xorg SecurityCheckResourceIDAccess [self]
+-------------------------------------------------------------------------------
+ 1 1.2500 Xorg Xorg damagePolyFillRect
+ 79 98.7500 Xorg Xorg damageDamageBox
+34 0.0230 Xorg Xorg damageDamageRegion
+ 34 42.5000 Xorg Xorg damageDamageRegion [self]
+ 21 26.2500 Xorg Xorg miUnion
+ 15 18.7500 Xorg Xorg miIntersect
+ 4 5.0000 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 3 3.7500 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 2.5000 Xorg Xorg getDrawableDamageRef
+ 1 1.2500 Xorg Xorg .plt
+-------------------------------------------------------------------------------
+34 0.0230 sysprof_module sysprof_module (no symbols)
+ 34 100.000 sysprof_module sysprof_module (no symbols) [self]
+-------------------------------------------------------------------------------
+34 0.0230 vmlinux vmlinux free_pages_bulk
+ 34 100.000 vmlinux vmlinux free_pages_bulk [self]
+-------------------------------------------------------------------------------
+30 0.0203 ext3.ko ext3 ext3_getblk
+ 30 100.000 ext3.ko ext3 ext3_getblk [self]
+-------------------------------------------------------------------------------
+30 0.0203 vmlinux vmlinux no_singlestep
+ 30 100.000 vmlinux vmlinux no_singlestep [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg Xorg dixDestroyPixmap
+ 4 80.0000 Xorg Xorg FreePicture
+29 0.0196 Xorg Xorg damageDestroyPixmap
+ 88 57.1429 libexa.so Xorg exaDestroyPixmap
+ 29 18.8312 Xorg Xorg damageDestroyPixmap [self]
+ 25 16.2338 Xorg Xorg DamageDestroy
+ 5 3.2468 libexa.so Xorg exaOffscreenFree
+ 2 1.2987 Xorg Xorg Xfree
+ 2 1.2987 libexa.so Xorg .plt
+ 2 1.2987 libfb.so Xorg fbDestroyPixmap
+ 1 0.6494 libexa.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+29 0.0196 vmlinux vmlinux __find_get_block
+ 29 100.000 vmlinux vmlinux __find_get_block [self]
+-------------------------------------------------------------------------------
+ 1 3.5714 Xorg Xorg SecurityLookupIDByClass
+ 1 3.5714 Xorg Xorg AddResource
+ 1 3.5714 Xorg Xorg ProcRenderSetPictureFilter
+ 1 3.5714 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 2 7.1429 Xorg Xorg ProcRenderFreePicture
+ 4 14.2857 Xorg Xorg FreeResource
+ 18 64.2857 Xorg Xorg SecurityLookupIDByType
+28 0.0189 Xorg Xorg Hash
+ 28 100.000 Xorg Xorg Hash [self]
+-------------------------------------------------------------------------------
+28 0.0189 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect
+ 28 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+28 0.0189 vmlinux vmlinux __alloc_pages
+ 28 100.000 vmlinux vmlinux __alloc_pages [self]
+-------------------------------------------------------------------------------
+28 0.0189 vmlinux vmlinux find_get_page
+ 28 100.000 vmlinux vmlinux find_get_page [self]
+-------------------------------------------------------------------------------
+27 0.0183 vmlinux vmlinux do_wp_page
+ 27 100.000 vmlinux vmlinux do_wp_page [self]
+-------------------------------------------------------------------------------
+27 0.0183 vmlinux vmlinux kmem_cache_alloc
+ 27 100.000 vmlinux vmlinux kmem_cache_alloc [self]
+-------------------------------------------------------------------------------
+27 0.0183 vmlinux vmlinux prune_dcache
+ 27 100.000 vmlinux vmlinux prune_dcache [self]
+-------------------------------------------------------------------------------
+27 0.0183 vmlinux vmlinux up_read
+ 27 100.000 vmlinux vmlinux up_read [self]
+-------------------------------------------------------------------------------
+ 2 7.6923 libexa.so libexa.so exaTryDriverComposite
+ 7 26.9231 libexa.so libexa.so exaGlyphs
+ 17 65.3846 libexa.so libexa.so exaComposite
+26 0.0176 libexa.so libexa.so exaOpReadsDestination
+ 26 100.000 libexa.so libexa.so exaOpReadsDestination [self]
+-------------------------------------------------------------------------------
+26 0.0176 libfb.so libfb.so __i686.get_pc_thunk.cx
+ 26 100.000 libfb.so libfb.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+25 0.0169 vmlinux vmlinux __copy_from_user_ll_nozero
+ 25 100.000 vmlinux vmlinux __copy_from_user_ll_nozero [self]
+-------------------------------------------------------------------------------
+ 3 12.5000 Xorg Xorg SetPictureToDefaults
+ 21 87.5000 Xorg Xorg PictureGetFilterId
+24 0.0162 Xorg Xorg CompareISOLatin1Lowered
+ 24 100.000 Xorg Xorg CompareISOLatin1Lowered [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaFillRegionSolid
+24 0.0162 libexa.so libexa.so exaGetPixmapPitch
+ 24 100.000 libexa.so libexa.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+24 0.0162 vmlinux vmlinux apic_timer_interrupt
+ 24 100.000 vmlinux vmlinux apic_timer_interrupt [self]
+-------------------------------------------------------------------------------
+23 0.0155 intel_drv.so intel_drv.so I830EXAPrepareSolid
+ 23 88.4615 intel_drv.so intel_drv.so I830EXAPrepareSolid [self]
+ 3 11.5385 libexa.so intel_drv.so exaGetPixmapOffset
+-------------------------------------------------------------------------------
+23 0.0155 libfb.so libfb.so fbGetGCPrivateIndex
+ 23 100.000 libfb.so libfb.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 98 100.000 libexa.so libexa.so exaGlyphs
+22 0.0149 libexa.so libexa.so exaCreatePixmap
+ 115 65.7143 libfb.so libexa.so fbCreatePixmap
+ 30 17.1429 Xorg libexa.so DamageCreate
+ 22 12.5714 libexa.so libexa.so exaCreatePixmap [self]
+ 5 2.8571 Xorg libexa.so DamageRegister
+ 1 0.5714 Xorg libexa.so __i686.get_pc_thunk.bx
+ 1 0.5714 libfb.so libexa.so .plt
+ 1 0.5714 libfb.so libexa.so fbCreatePixmapBpp
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg Xorg ProcRenderDispatch
+ 7 33.3333 Xorg Xorg CreatePicture
+ 13 61.9048 Xorg Xorg ProcRenderChangePicture
+21 0.0142 Xorg Xorg ChangePicture
+ 21 100.000 Xorg Xorg ChangePicture [self]
+-------------------------------------------------------------------------------
+ 8 6.7227 Xorg Xorg ProcRenderDispatch
+ 111 93.2773 Xorg Xorg ProcRenderCompositeGlyphs
+21 0.0142 Xorg Xorg FindGlyph
+ 98 82.3529 Xorg Xorg FindGlyphRef
+ 21 17.6471 Xorg Xorg FindGlyph [self]
+-------------------------------------------------------------------------------
+ 3 5.6604 Xorg Xorg ValidatePicture
+ 50 94.3396 Xorg Xorg ValidateOnePicture
+21 0.0142 Xorg Xorg miValidatePicture
+ 28 52.8302 Xorg Xorg miRegionCreate
+ 21 39.6226 Xorg Xorg miValidatePicture [self]
+ 1 1.8868 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.8868 Xorg Xorg miTranslateRegion
+ 1 1.8868 Xorg Xorg miIntersect
+ 1 1.8868 Xorg Xorg Xalloc
+-------------------------------------------------------------------------------
+21 0.0142 ext3.ko ext3 ext3_mark_iloc_dirty
+ 21 100.000 ext3.ko ext3 ext3_mark_iloc_dirty [self]
+-------------------------------------------------------------------------------
+21 0.0142 jbd.ko jbd do_get_write_access
+ 21 100.000 jbd.ko jbd do_get_write_access [self]
+-------------------------------------------------------------------------------
+ 2805 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+21 0.0142 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1369 48.8057 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+ 1016 36.2210 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+ 396 14.1176 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+ 21 0.7487 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general [self]
+ 1 0.0357 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 0.0357 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8
+ 1 0.0357 anon (tgid:5961 range:0xb7f92000-0xb7f93000) libpixman.so.0.0.0 (no symbols)
+-------------------------------------------------------------------------------
+21 0.0142 vmlinux vmlinux do_path_lookup
+ 21 100.000 vmlinux vmlinux do_path_lookup [self]
+-------------------------------------------------------------------------------
+21 0.0142 vmlinux vmlinux memcmp
+ 21 100.000 vmlinux vmlinux memcmp [self]
+-------------------------------------------------------------------------------
+ 1 1.2195 Xorg Xorg miDestroyPictureClip
+ 2 2.4390 Xorg Xorg damageDestroyPixmap
+ 3 3.6585 Xorg Xorg miRegionValidate
+ 4 4.8780 Xorg Xorg miDestroyPicture
+ 15 18.2927 Xorg Xorg FreeResource
+ 17 20.7317 Xorg Xorg FreePicture
+ 17 20.7317 Xorg Xorg DamageDestroy
+ 23 28.0488 Xorg Xorg miRegionDestroy
+20 0.0135 Xorg Xorg Xfree
+ 88 75.8621 libc-2.5.so Xorg free
+ 20 17.2414 Xorg Xorg Xfree [self]
+ 4 3.4483 libc-2.5.so Xorg _int_free
+ 3 2.5862 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+ 1 0.8621 libc-2.5.so Xorg munmap
+-------------------------------------------------------------------------------
+20 0.0135 libm-2.5.so libm-2.5.so sin
+ 20 100.000 libm-2.5.so libm-2.5.so sin [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+20 0.0135 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+ 20 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+20 0.0135 vmlinux vmlinux __dec_zone_page_state
+ 20 100.000 vmlinux vmlinux __dec_zone_page_state [self]
+-------------------------------------------------------------------------------
+20 0.0135 vmlinux vmlinux hrtimer_run_queues
+ 20 100.000 vmlinux vmlinux hrtimer_run_queues [self]
+-------------------------------------------------------------------------------
+20 0.0135 vmlinux vmlinux schedule
+ 20 100.000 vmlinux vmlinux schedule [self]
+-------------------------------------------------------------------------------
+19 0.0128 Xorg Xorg AllocatePixmap
+ 74 78.7234 Xorg Xorg Xalloc
+ 19 20.2128 Xorg Xorg AllocatePixmap [self]
+ 1 1.0638 libc-2.5.so Xorg malloc
+-------------------------------------------------------------------------------
+ 1 6.2500 Xorg Xorg miCompositeRects
+ 2 12.5000 Xorg Xorg CompositeRects
+ 6 37.5000 Xorg Xorg damageGlyphs
+ 7 43.7500 Xorg Xorg miColorRects
+19 0.0128 Xorg Xorg FreeScratchGC
+ 19 100.000 Xorg Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 56 100.000 intel_drv.so intel_drv.so i965_composite
+19 0.0128 intel_drv.so intel_drv.so i830MarkSync
+ 35 56.4516 libexa.so intel_drv.so exaMarkSync
+ 19 30.6452 intel_drv.so intel_drv.so i830MarkSync [self]
+ 8 12.9032 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 108 100.000 libfb.so libfb.so fbCreatePixmap
+19 0.0128 libfb.so libfb.so fbCreatePixmapBpp
+ 89 81.6514 Xorg libfb.so AllocatePixmap
+ 19 17.4312 libfb.so libfb.so fbCreatePixmapBpp [self]
+ 1 0.9174 Xorg libfb.so Xalloc
+-------------------------------------------------------------------------------
+ 19 100.000 libfb.so libfb.so fbFillRegionSolid
+19 0.0128 libfb.so libfb.so fbSolid
+ 19 100.000 libfb.so libfb.so fbSolid [self]
+-------------------------------------------------------------------------------
+19 0.0128 vmlinux vmlinux do_lookup
+ 19 100.000 vmlinux vmlinux do_lookup [self]
+-------------------------------------------------------------------------------
+ 1 1.4925 Xorg Xorg miCreateAlphaPicture
+ 1 1.4925 Xorg Xorg damageGlyphs
+ 2 2.9851 Xorg Xorg miCompositeRects
+ 3 4.4776 Xorg Xorg ProcRenderDispatch
+ 60 89.5522 Xorg Xorg ProcRenderCreatePicture
+18 0.0122 Xorg Xorg CreatePicture
+ 43 40.1869 Xorg Xorg SetPictureToDefaults
+ 35 32.7103 Xorg Xorg AllocatePicture
+ 18 16.8224 Xorg Xorg CreatePicture [self]
+ 7 6.5421 Xorg Xorg ChangePicture
+ 2 1.8692 Xorg Xorg PictureGetFilterId
+ 1 0.9346 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.9346 Xorg Xorg miChangePicture
+-------------------------------------------------------------------------------
+ 1 0.9009 Xorg Xorg CompositeRects
+ 2 1.8018 Xorg Xorg miCompositeRects
+ 2 1.8018 Xorg Xorg damageGlyphs
+ 3 2.7027 Xorg Xorg ProcRenderFreePicture
+ 30 27.0270 Xorg Xorg miTrapezoids
+ 73 65.7658 Xorg Xorg FreeResource
+18 0.0122 Xorg Xorg FreePicture
+ 87 52.7273 libextmod.so Xorg XvDestroyPixmap
+ 28 16.9697 Xorg Xorg miDestroyPicture
+ 18 10.9091 Xorg Xorg FreePicture [self]
+ 17 10.3030 Xorg Xorg Xfree
+ 4 2.4242 Xorg Xorg damageDestroyPixmap
+ 3 1.8182 Xorg Xorg __i686.get_pc_thunk.bx
+ 3 1.8182 Xorg Xorg miRegionDestroy
+ 3 1.8182 Xorg Xorg miDestroyPictureClip
+ 1 0.6061 Xorg Xorg .plt
+ 1 0.6061 libextmod.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 18 100.000 libc-2.5.so libc-2.5.so ptmalloc_init
+18 0.0122 libc-2.5.so libc-2.5.so _dl_addr
+ 18 100.000 libc-2.5.so libc-2.5.so _dl_addr [self]
+-------------------------------------------------------------------------------
+18 0.0122 libc-2.5.so libc-2.5.so mkdir
+ 18 100.000 libc-2.5.so libc-2.5.so mkdir [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libdri.so libdri.so DRIDoBlockHandler
+18 0.0122 libdri.so libdri.so __i686.get_pc_thunk.cx
+ 18 100.000 libdri.so libdri.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 4 2.5974 Xorg Xorg XaceCatchExtProc
+ 150 97.4026 Xorg Xorg ProcRenderDispatch
+17 0.0115 Xorg Xorg ProcRenderCreatePicture
+ 60 38.9610 Xorg Xorg CreatePicture
+ 30 19.4805 Xorg Xorg dixLookupDrawable
+ 19 12.3377 Xorg Xorg SecurityLookupIDByType
+ 17 11.0390 Xorg Xorg ProcRenderCreatePicture [self]
+ 16 10.3896 Xorg Xorg AddResource
+ 4 2.5974 Xorg Xorg LegalNewID
+ 4 2.5974 Xorg Xorg Ones
+ 2 1.2987 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.6494 Xorg Xorg SecurityLookupIDByClass
+ 1 0.6494 Xorg Xorg SetPictureToDefaults
+-------------------------------------------------------------------------------
+ 1 0.0011 Xorg Xorg main
+ 90672 99.9989 Xorg Xorg Dispatch
+17 0.0115 Xorg Xorg XaceCatchExtProc
+ 90586 99.8941 Xorg Xorg ProcRenderDispatch
+ 45 0.0496 Xorg Xorg XaceHook
+ 17 0.0187 Xorg Xorg XaceCatchExtProc [self]
+ 6 0.0066 Xorg Xorg ProcRenderSetPictureFilter
+ 4 0.0044 Xorg Xorg GetExtensionEntry
+ 4 0.0044 Xorg Xorg ProcRenderFreePicture
+ 4 0.0044 Xorg Xorg ProcRenderCreatePicture
+ 3 0.0033 Xorg Xorg ProcRenderFillRectangles
+ 3 0.0033 Xorg Xorg ProcRenderChangePicture
+ 2 0.0022 Xorg Xorg __i686.get_pc_thunk.cx
+ 2 0.0022 Xorg Xorg CallCallbacks
+ 2 0.0022 Xorg Xorg ProcRenderSetPictureTransform
+ 1 0.0011 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.0011 Xorg Xorg ProcRenderCompositeGlyphs
+ 1 0.0011 Xorg Xorg ProcRenderTrapezoids
+ 1 0.0011 Xorg Xorg ProcRenderSetPictureClipRectangles
+-------------------------------------------------------------------------------
+ 1 5.8824 Xorg Xorg DamageRegister
+ 1 5.8824 Xorg Xorg damageDamageBox
+ 1 5.8824 Xorg Xorg damagePolyFillRect
+ 1 5.8824 Xorg Xorg damageComposite
+ 2 11.7647 Xorg Xorg damageDamageRegion
+ 3 17.6471 Xorg Xorg miColorRects
+ 4 23.5294 Xorg Xorg damageReportPostOp
+ 4 23.5294 Xorg Xorg damageGlyphs
+17 0.0115 Xorg Xorg getDrawableDamageRef
+ 17 100.000 Xorg Xorg getDrawableDamageRef [self]
+-------------------------------------------------------------------------------
+ 11 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+17 0.0115 intel_drv.so intel_drv.so i965_get_card_format
+ 17 100.000 intel_drv.so intel_drv.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+ 30 100.000 libexa.so libexa.so exaPolySegment
+17 0.0115 libexa.so libexa.so exaPolyFillRect
+ 216 61.3636 libexa.so libexa.so exaFillRegionSolid
+ 34 9.6591 libpixman.so.0.0.0 libexa.so pixman_region_fini
+ 30 8.5227 Xorg libexa.so miRectsToRegion
+ 19 5.3977 Xorg libexa.so miRegionDestroy
+ 17 4.8295 libexa.so libexa.so exaPolyFillRect [self]
+ 7 1.9886 Xorg libexa.so miTranslateRegion
+ 5 1.4205 intel_drv.so libexa.so I830EXAPrepareSolid
+ 5 1.4205 Xorg libexa.so miIntersect
+ 4 1.1364 libexa.so libexa.so exaDoMigration
+ 3 0.8523 libexa.so libexa.so .plt
+ 2 0.5682 Xorg libexa.so Xfree
+ 2 0.5682 libpixman.so.0.0.0 libexa.so pixman_region_translate
+ 2 0.5682 intel_drv.so libexa.so I830EXASolid
+ 2 0.5682 libexa.so libexa.so exaGetDrawablePixmap
+ 1 0.2841 Xorg libexa.so miRegionValidate
+ 1 0.2841 libexa.so libexa.so exaGetDrawableDeltas
+ 1 0.2841 libexa.so libexa.so exaGetOffscreenPixmap
+ 1 0.2841 libfb.so libexa.so fbFillRegionSolid
+-------------------------------------------------------------------------------
+ 3 37.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 5 62.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+17 0.0115 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 17 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+17 0.0115 vmlinux vmlinux permission
+ 17 100.000 vmlinux vmlinux permission [self]
+-------------------------------------------------------------------------------
+17 0.0115 vmlinux vmlinux strncpy_from_user
+ 17 100.000 vmlinux vmlinux strncpy_from_user [self]
+-------------------------------------------------------------------------------
+17 0.0115 vmlinux vmlinux unix_stream_sendmsg
+ 17 100.000 vmlinux vmlinux unix_stream_sendmsg [self]
+-------------------------------------------------------------------------------
+ 1 6.2500 Xorg Xorg miColorRects
+ 4 25.0000 Xorg Xorg ProcRenderCreatePicture
+ 5 31.2500 Xorg Xorg ProcRenderChangePicture
+ 6 37.5000 Xorg Xorg miRenderColorToPixel
+16 0.0108 Xorg Xorg Ones
+ 16 100.000 Xorg Xorg Ones [self]
+-------------------------------------------------------------------------------
+16 0.0108 Xorg Xorg miComputeCompositeClip
+ 16 59.2593 Xorg Xorg miComputeCompositeClip [self]
+ 6 22.2222 Xorg Xorg miIntersect
+ 4 14.8148 Xorg Xorg miTranslateRegion
+ 1 3.7037 Xorg Xorg .plt
+-------------------------------------------------------------------------------
+16 0.0108 jbd.ko jbd journal_add_journal_head
+ 16 100.000 jbd.ko jbd journal_add_journal_head [self]
+-------------------------------------------------------------------------------
+16 0.0108 jbd.ko jbd journal_dirty_metadata
+ 16 100.000 jbd.ko jbd journal_dirty_metadata [self]
+-------------------------------------------------------------------------------
+16 0.0108 vmlinux vmlinux find_busiest_group
+ 16 100.000 vmlinux vmlinux find_busiest_group [self]
+-------------------------------------------------------------------------------
+16 0.0108 vmlinux vmlinux zone_watermark_ok
+ 16 100.000 vmlinux vmlinux zone_watermark_ok [self]
+-------------------------------------------------------------------------------
+ 1 3.4483 Xorg Xorg miCompositeRects
+ 4 13.7931 Xorg Xorg damageGlyphs
+ 24 82.7586 Xorg Xorg miColorRects
+15 0.0101 Xorg Xorg GetScratchGC
+ 15 48.3871 Xorg Xorg GetScratchGC [self]
+ 14 45.1613 Xorg Xorg damageChangeClip
+ 1 3.2258 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 3.2258 Xorg Xorg miBSCheapChangeClip
+-------------------------------------------------------------------------------
+ 9 2.6087 Xorg Xorg main
+ 336 97.3913 Xorg Xorg Dispatch
+15 0.0101 Xorg Xorg XaceCatchDispatchProc
+ 116 33.6232 Xorg Xorg ProcCreatePixmap
+ 89 25.7971 Xorg Xorg ProcFreePixmap
+ 49 14.2029 Xorg Xorg ProcPolySegment
+ 16 4.6377 Xorg Xorg ProcSetClipRectangles
+ 15 4.3478 Xorg Xorg XaceCatchDispatchProc [self]
+ 12 3.4783 Xorg Xorg ProcPolyFillRectangle
+ 8 2.3188 Xorg Xorg ProcFreeGC
+ 7 2.0290 Xorg Xorg ProcCopyArea
+ 7 2.0290 Xorg Xorg XaceHook
+ 6 1.7391 Xorg Xorg ProcCreateGC
+ 6 1.7391 Xorg Xorg ProcChangeGC
+ 3 0.8696 Xorg Xorg dixLookupDrawable
+ 3 0.8696 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 0.5797 Xorg Xorg dixLookupGC
+ 2 0.5797 Xorg Xorg damagePolySegment
+ 1 0.2899 Xorg Xorg CreateGC
+ 1 0.2899 Xorg Xorg AddResource
+ 1 0.2899 Xorg Xorg SecurityLookupIDByType
+ 1 0.2899 Xorg Xorg LegalNewID
+-------------------------------------------------------------------------------
+ 2 13.3333 Xorg Xorg miTrapezoidBounds
+ 13 86.6667 Xorg Xorg miLineFixedX
+15 0.0101 Xorg Xorg __divdi3
+ 15 100.000 Xorg Xorg __divdi3 [self]
+-------------------------------------------------------------------------------
+ 8 1.7354 Xorg Xorg ProcPolyFillRectangle
+ 10 2.1692 Xorg Xorg miCompositeRects
+ 34 7.3753 Xorg Xorg miCreateAlphaPicture
+ 409 88.7202 Xorg Xorg miColorRects
+15 0.0101 Xorg Xorg damagePolyFillRect
+ 319 66.3202 libexa.so Xorg exaPolyFillRect
+ 71 14.7609 Xorg Xorg damageReportPostOp
+ 54 11.2266 Xorg Xorg damageDamageBox
+ 15 3.1185 Xorg Xorg damagePolyFillRect [self]
+ 7 1.4553 libexa.so Xorg exaGetDrawableDeltas
+ 3 0.6237 Xorg Xorg miTranslateRegion
+ 2 0.4158 Xorg Xorg miIntersect
+ 2 0.4158 Xorg Xorg miRectsToRegion
+ 2 0.4158 libexa.so Xorg exaFillRegionSolid
+ 1 0.2079 Xorg Xorg miRegionDestroy
+ 1 0.2079 Xorg Xorg getDrawableDamageRef
+ 1 0.2079 Xorg Xorg damageDamageRegion
+ 1 0.2079 libexa.so Xorg .plt
+ 1 0.2079 libexa.so Xorg __i686.get_pc_thunk.bx
+ 1 0.2079 libexa.so Xorg exaGetDrawablePixmap
+-------------------------------------------------------------------------------
+ 1 1.7857 Xorg Xorg ProcCreateGC
+ 3 5.3571 Xorg Xorg XaceCatchDispatchProc
+ 3 5.3571 Xorg Xorg ProcPolySegment
+ 19 33.9286 Xorg Xorg ProcCreatePixmap
+ 30 53.5714 Xorg Xorg ProcRenderCreatePicture
+15 0.0101 Xorg Xorg dixLookupDrawable
+ 27 48.2143 Xorg Xorg SecurityLookupIDByClass
+ 15 26.7857 Xorg Xorg dixLookupDrawable [self]
+ 11 19.6429 Xorg Xorg XaceHook
+ 2 3.5714 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.7857 Xorg Xorg CallCallbacks
+-------------------------------------------------------------------------------
+ 1 0.1658 Xorg Xorg CompositeRects
+ 602 99.8342 Xorg Xorg miCompositeRects
+15 0.0101 Xorg Xorg miColorRects
+ 409 67.8275 Xorg Xorg damagePolyFillRect
+ 59 9.7844 Xorg Xorg ValidateGC
+ 46 7.6285 Xorg Xorg ChangeGC
+ 24 3.9801 Xorg Xorg GetScratchGC
+ 15 2.4876 Xorg Xorg miColorRects [self]
+ 8 1.3267 Xorg Xorg miRegionCreate
+ 8 1.3267 Xorg Xorg miRenderColorToPixel
+ 7 1.1609 Xorg Xorg FreeScratchGC
+ 6 0.9950 Xorg Xorg damageDamageBox
+ 4 0.6633 Xorg Xorg damageChangeClip
+ 3 0.4975 libexa.so Xorg exaPolyFillRect
+ 3 0.4975 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 3 0.4975 Xorg Xorg getDrawableDamageRef
+ 3 0.4975 Xorg Xorg dixChangeGC
+ 2 0.3317 Xorg Xorg damageValidateGC
+ 2 0.3317 Xorg Xorg miRegionCopy
+ 1 0.1658 Xorg Xorg Ones
+-------------------------------------------------------------------------------
+ 27 100.000 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+15 0.0101 ld-2.5.so ld-2.5.so do_lookup_x
+ 15 55.5556 ld-2.5.so ld-2.5.so do_lookup_x [self]
+ 10 37.0370 ld-2.5.so ld-2.5.so check_match.7793
+ 2 7.4074 ld-2.5.so ld-2.5.so _dl_name_match_p
+-------------------------------------------------------------------------------
+ 1 6.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 4 26.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 10 66.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+15 0.0101 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+ 15 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3 [self]
+-------------------------------------------------------------------------------
+ 1016 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+15 0.0101 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+ 1001 98.5236 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1
+ 15 1.4764 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch [self]
+-------------------------------------------------------------------------------
+15 0.0101 vmlinux vmlinux __kmalloc
+ 15 100.000 vmlinux vmlinux __kmalloc [self]
+-------------------------------------------------------------------------------
+ 3 0.0033 Xorg Xorg Dispatch
+ 90586 99.9967 Xorg Xorg XaceCatchExtProc
+14 0.0095 Xorg Xorg ProcRenderDispatch
+ 57023 62.9386 Xorg Xorg ProcRenderCompositeGlyphs
+ 30723 33.9102 Xorg Xorg ProcRenderTrapezoids
+ 1619 1.7870 Xorg Xorg ProcRenderComposite
+ 756 0.8344 Xorg Xorg ProcRenderFillRectangles
+ 175 0.1932 Xorg Xorg ProcRenderFreePicture
+ 150 0.1656 Xorg Xorg ProcRenderCreatePicture
+ 43 0.0475 Xorg Xorg ProcRenderSetPictureFilter
+ 29 0.0320 Xorg Xorg ProcRenderChangePicture
+ 21 0.0232 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 19 0.0210 Xorg Xorg ProcRenderSetPictureTransform
+ 14 0.0155 Xorg Xorg ProcRenderDispatch [self]
+ 8 0.0088 Xorg Xorg FindGlyph
+ 6 0.0066 Xorg Xorg SecurityLookupIDByType
+ 4 0.0044 Xorg Xorg __i686.get_pc_thunk.bx
+ 3 0.0033 Xorg Xorg CreatePicture
+ 2 0.0022 Xorg Xorg PictOpValid
+ 2 0.0022 Xorg Xorg CompositeGlyphs
+ 1 0.0011 Xorg Xorg ChangePicture
+ 1 0.0011 Xorg Xorg SetPictureClipRects
+ 1 0.0011 Xorg Xorg SetPictureTransform
+ 1 0.0011 Xorg Xorg CompositeRects
+-------------------------------------------------------------------------------
+ 2 14.2857 Xorg Xorg damagePolyFillRect
+ 6 42.8571 Xorg Xorg miChangeClip
+ 6 42.8571 Xorg Xorg SetPictureClipRects
+14 0.0095 Xorg Xorg miRectsToRegion
+ 17 38.6364 Xorg Xorg miRegionCreate
+ 14 31.8182 Xorg Xorg miRectsToRegion [self]
+ 10 22.7273 Xorg Xorg miRegionValidate
+ 2 4.5455 Xorg Xorg miRegionInit
+ 1 2.2727 Xorg Xorg Xalloc
+-------------------------------------------------------------------------------
+14 0.0095 ext3.ko ext3 ext3_new_inode
+ 14 100.000 ext3.ko ext3 ext3_new_inode [self]
+-------------------------------------------------------------------------------
+14 0.0095 jbd.ko jbd journal_cancel_revoke
+ 14 100.000 jbd.ko jbd journal_cancel_revoke [self]
+-------------------------------------------------------------------------------
+14 0.0095 jbd.ko jbd journal_put_journal_head
+ 14 100.000 jbd.ko jbd journal_put_journal_head [self]
+-------------------------------------------------------------------------------
+ 45 100.000 libc-2.5.so libc-2.5.so realloc
+14 0.0095 libc-2.5.so libc-2.5.so _int_realloc
+ 18 40.0000 libc-2.5.so libc-2.5.so _int_malloc
+ 14 31.1111 libc-2.5.so libc-2.5.so _int_realloc [self]
+ 10 22.2222 libc-2.5.so libc-2.5.so _int_free
+ 3 6.6667 libc-2.5.so libc-2.5.so memcpy
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so read_alias_file
+14 0.0095 libc-2.5.so libc-2.5.so qsort
+ 367 95.5729 libc-2.5.so libc-2.5.so msort_with_tmp
+ 14 3.6458 libc-2.5.so libc-2.5.so qsort [self]
+ 2 0.5208 libxul.so libc-2.5.so (no symbols)
+ 1 0.2604 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+14 0.0095 libexa.so libexa.so exaDestroyPixmap
+ 47 50.0000 libexa.so libexa.so exaOffscreenFree
+ 23 24.4681 libfb.so libexa.so fbDestroyPixmap
+ 14 14.8936 libexa.so libexa.so exaDestroyPixmap [self]
+ 4 4.2553 Xorg libexa.so Xfree
+ 3 3.1915 libfb.so libexa.so __i686.get_pc_thunk.bx
+ 2 2.1277 libfb.so libexa.so .plt
+ 1 1.0638 libexa.so libexa.so ExaOffscreenMerge
+-------------------------------------------------------------------------------
+14 0.0095 libm-2.5.so libm-2.5.so ceil
+ 14 100.000 libm-2.5.so libm-2.5.so ceil [self]
+-------------------------------------------------------------------------------
+14 0.0095 libplds4.so libplds4.so (no symbols)
+ 14 100.000 libplds4.so libplds4.so (no symbols) [self]
+-------------------------------------------------------------------------------
+14 0.0095 vmlinux vmlinux __follow_mount
+ 14 100.000 vmlinux vmlinux __follow_mount [self]
+-------------------------------------------------------------------------------
+13 0.0088 intel_drv.so intel_drv.so i830_done_composite
+ 13 100.000 intel_drv.so intel_drv.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+13 0.0088 jbd.ko jbd journal_commit_transaction
+ 13 100.000 jbd.ko jbd journal_commit_transaction [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbComposite
+13 0.0088 libfb.so libfb.so .plt
+ 13 100.000 libfb.so libfb.so .plt [self]
+-------------------------------------------------------------------------------
+13 0.0088 libfb.so libfb.so __i686.get_pc_thunk.bx
+ 13 100.000 libfb.so libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+13 0.0088 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols)
+ 13 100.000 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+13 0.0088 vmlinux vmlinux rebalance_tick
+ 13 100.000 vmlinux vmlinux rebalance_tick [self]
+-------------------------------------------------------------------------------
+13 0.0088 vmlinux vmlinux resume_userspace
+ 13 100.000 vmlinux vmlinux resume_userspace [self]
+-------------------------------------------------------------------------------
+ 1 3.0303 Xorg Xorg SetPictureFilter
+ 2 6.0606 Xorg Xorg CreatePicture
+ 9 27.2727 Xorg Xorg PictureFindFilter
+ 21 63.6364 Xorg Xorg SetPictureToDefaults
+12 0.0081 Xorg Xorg PictureGetFilterId
+ 21 63.6364 Xorg Xorg CompareISOLatin1Lowered
+ 12 36.3636 Xorg Xorg PictureGetFilterId [self]
+-------------------------------------------------------------------------------
+ 1 1.0204 Xorg Xorg CompositePicture
+ 1 1.0204 Xorg Xorg damageCopyArea
+ 6 6.1224 Xorg Xorg miColorRects
+ 16 16.3265 Xorg Xorg damageComposite
+ 20 20.4082 Xorg Xorg damageGlyphs
+ 54 55.1020 Xorg Xorg damagePolyFillRect
+12 0.0081 Xorg Xorg damageDamageBox
+ 79 80.6122 Xorg Xorg damageDamageRegion
+ 12 12.2449 Xorg Xorg damageDamageBox [self]
+ 3 3.0612 Xorg Xorg miUnion
+ 3 3.0612 Xorg Xorg miIntersect
+ 1 1.0204 Xorg Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 25 100.000 Xorg Xorg miTrapezoidBounds
+12 0.0081 Xorg Xorg miLineFixedX
+ 13 52.0000 Xorg Xorg __divdi3
+ 12 48.0000 Xorg Xorg miLineFixedX [self]
+-------------------------------------------------------------------------------
+12 0.0081 ext3.ko ext3 ext3_get_blocks_handle
+ 12 100.000 ext3.ko ext3 ext3_get_blocks_handle [self]
+-------------------------------------------------------------------------------
+ 13 33.3333 ld-2.5.so ld-2.5.so _dl_fixup
+ 26 66.6667 ld-2.5.so ld-2.5.so _dl_relocate_object
+12 0.0081 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 27 69.2308 ld-2.5.so ld-2.5.so do_lookup_x
+ 12 30.7692 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x [self]
+-------------------------------------------------------------------------------
+12 0.0081 libc-2.5.so libc-2.5.so realloc
+ 45 58.4416 libc-2.5.so libc-2.5.so _int_realloc
+ 20 25.9740 libc-2.5.so libc-2.5.so malloc
+ 12 15.5844 libc-2.5.so libc-2.5.so realloc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+12 0.0081 libc-2.5.so libc-2.5.so strcmp
+ 12 100.000 libc-2.5.so libc-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+ 216 100.000 libexa.so libexa.so exaPolyFillRect
+12 0.0081 libexa.so libexa.so exaFillRegionSolid
+ 97 44.4954 libexa.so libexa.so exaDoMigration
+ 39 17.8899 intel_drv.so libexa.so I830EXASolid
+ 21 9.6330 intel_drv.so libexa.so I830EXAPrepareSolid
+ 20 9.1743 libfb.so libexa.so fbFillRegionSolid
+ 12 5.5046 libexa.so libexa.so exaFillRegionSolid [self]
+ 7 3.2110 libexa.so libexa.so exaGetOffscreenPixmap
+ 5 2.2936 libexa.so libexa.so __i686.get_pc_thunk.cx
+ 3 1.3761 libexa.so libexa.so exaMoveInPixmap
+ 2 0.9174 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 2 0.9174 libexa.so libexa.so .plt
+ 2 0.9174 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 2 0.9174 libexa.so libexa.so ExaOffscreenMarkUsed
+ 2 0.9174 libexa.so libexa.so exaPixmapIsOffscreen
+ 1 0.4587 libexa.so libexa.so exaMarkSync
+ 1 0.4587 libexa.so libexa.so exaGetDrawablePixmap
+ 1 0.4587 libexa.so libexa.so exaGetPixmapPitch
+ 1 0.4587 intel_drv.so libexa.so .plt
+-------------------------------------------------------------------------------
+12 0.0081 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate
+ 12 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+12 0.0081 vmlinux vmlinux __inc_zone_state
+ 12 100.000 vmlinux vmlinux __inc_zone_state [self]
+-------------------------------------------------------------------------------
+12 0.0081 vmlinux vmlinux kmem_cache_free
+ 12 100.000 vmlinux vmlinux kmem_cache_free [self]
+-------------------------------------------------------------------------------
+ 4 2.2346 Xorg Xorg XaceCatchExtProc
+ 175 97.7654 Xorg Xorg ProcRenderDispatch
+11 0.0074 Xorg Xorg ProcRenderFreePicture
+ 131 73.1844 Xorg Xorg FreeResource
+ 31 17.3184 Xorg Xorg SecurityLookupIDByType
+ 11 6.1453 Xorg Xorg ProcRenderFreePicture [self]
+ 3 1.6760 Xorg Xorg FreePicture
+ 2 1.1173 Xorg Xorg Hash
+ 1 0.5587 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 3.5714 Xorg Xorg ProcRenderCreatePicture
+ 27 96.4286 Xorg Xorg dixLookupDrawable
+11 0.0074 Xorg Xorg SecurityLookupIDByClass
+ 16 57.1429 Xorg Xorg XaceHook
+ 11 39.2857 Xorg Xorg SecurityLookupIDByClass [self]
+ 1 3.5714 Xorg Xorg Hash
+-------------------------------------------------------------------------------
+ 2 0.2861 Xorg Xorg ProcRenderFillRectangles
+ 697 99.7139 Xorg Xorg CompositeRects
+11 0.0074 Xorg Xorg miCompositeRects
+ 602 86.1230 Xorg Xorg miColorRects
+ 51 7.2961 Xorg Xorg CompositePicture
+ 11 1.5737 Xorg Xorg miCompositeRects [self]
+ 10 1.4306 Xorg Xorg damagePolyFillRect
+ 6 0.8584 Xorg Xorg ValidateGC
+ 4 0.5722 Xorg Xorg ChangeGC
+ 3 0.4292 libextmod.so Xorg XvDestroyPixmap
+ 2 0.2861 Xorg Xorg miRenderColorToPixel
+ 2 0.2861 Xorg Xorg FreePicture
+ 2 0.2861 Xorg Xorg CreatePicture
+ 2 0.2861 libexa.so Xorg exaCreatePixmap
+ 1 0.1431 Xorg Xorg FreeScratchGC
+ 1 0.1431 Xorg Xorg GetScratchGC
+ 1 0.1431 Xorg Xorg miDestroyPicture
+ 1 0.1431 Xorg Xorg PictureMatchFormat
+-------------------------------------------------------------------------------
+11 0.0074 Xorg Xorg miGlyphExtents
+ 11 100.000 Xorg Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 42 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+11 0.0074 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 18 42.8571 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 11 26.1905 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init [self]
+ 9 21.4286 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 3 7.1429 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 2.3810 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+11 0.0074 libpthread-2.5.so libpthread-2.5.so pthread_getspecific
+ 11 100.000 libpthread-2.5.so libpthread-2.5.so pthread_getspecific [self]
+-------------------------------------------------------------------------------
+11 0.0074 vmlinux vmlinux __alloc_skb
+ 11 100.000 vmlinux vmlinux __alloc_skb [self]
+-------------------------------------------------------------------------------
+11 0.0074 vmlinux vmlinux anon_vma_prepare
+ 11 100.000 vmlinux vmlinux anon_vma_prepare [self]
+-------------------------------------------------------------------------------
+11 0.0074 vmlinux vmlinux fget_light
+ 11 100.000 vmlinux vmlinux fget_light [self]
+-------------------------------------------------------------------------------
+11 0.0074 vmlinux vmlinux vm_normal_page
+ 11 100.000 vmlinux vmlinux vm_normal_page [self]
+-------------------------------------------------------------------------------
+ 116 100.000 Xorg Xorg XaceCatchDispatchProc
+10 0.0068 Xorg Xorg ProcCreatePixmap
+ 69 59.4828 libexa.so Xorg exaCreatePixmap
+ 19 16.3793 Xorg Xorg dixLookupDrawable
+ 10 8.6207 Xorg Xorg ProcCreatePixmap [self]
+ 7 6.0345 Xorg Xorg AddResource
+ 4 3.4483 Xorg Xorg LegalNewID
+ 3 2.5862 Xorg Xorg DamageSetReportAfterOp
+ 2 1.7241 Xorg Xorg DamageRegister
+ 1 0.8621 libexa.so Xorg __i686.get_pc_thunk.bx
+ 1 0.8621 libfb.so Xorg fbCreatePixmap
+-------------------------------------------------------------------------------
+ 2 20.0000 Xorg Xorg CallCallbacks
+ 8 80.0000 Xorg Xorg _CallCallbacks
+10 0.0068 Xorg Xorg SecurityCheckExtAccess
+ 10 100.000 Xorg Xorg SecurityCheckExtAccess [self]
+-------------------------------------------------------------------------------
+ 71 26.1029 Xorg Xorg damagePolyFillRect
+ 78 28.6765 Xorg Xorg damageComposite
+ 123 45.2206 Xorg Xorg damageGlyphs
+10 0.0068 Xorg Xorg damageReportPostOp
+ 258 94.8529 Xorg Xorg DamageReportDamage
+ 10 3.6765 Xorg Xorg damageReportPostOp [self]
+ 4 1.4706 Xorg Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 1 3.7037 Xorg Xorg miValidatePicture
+ 2 7.4074 Xorg Xorg damagePolyFillRect
+ 3 11.1111 Xorg Xorg damageDamageBox
+ 6 22.2222 Xorg Xorg miComputeCompositeClip
+ 15 55.5556 Xorg Xorg damageDamageRegion
+10 0.0068 Xorg Xorg miIntersect
+ 24 70.5882 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 10 29.4118 Xorg Xorg miIntersect [self]
+-------------------------------------------------------------------------------
+10 0.0068 jbd.ko jbd __journal_file_buffer
+ 10 100.000 jbd.ko jbd __journal_file_buffer [self]
+-------------------------------------------------------------------------------
+10 0.0068 jbd.ko jbd journal_clean_one_cp_list
+ 10 100.000 jbd.ko jbd journal_clean_one_cp_list [self]
+-------------------------------------------------------------------------------
+ 2 10.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 18 90.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+10 0.0068 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 10 50.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+ 10 50.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit [self]
+-------------------------------------------------------------------------------
+ 10 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+10 0.0068 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+ 10 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y [self]
+-------------------------------------------------------------------------------
+10 0.0068 vmlinux vmlinux do_mmap_pgoff
+ 10 100.000 vmlinux vmlinux do_mmap_pgoff [self]
+-------------------------------------------------------------------------------
+10 0.0068 vmlinux vmlinux free_block
+ 10 100.000 vmlinux vmlinux free_block [self]
+-------------------------------------------------------------------------------
+10 0.0068 vmlinux vmlinux irq_entries_start
+ 10 100.000 vmlinux vmlinux irq_entries_start [self]
+-------------------------------------------------------------------------------
+10 0.0068 vmlinux vmlinux profile_tick
+ 10 100.000 vmlinux vmlinux profile_tick [self]
+-------------------------------------------------------------------------------
+10 0.0068 vmlinux vmlinux run_timer_softirq
+ 10 100.000 vmlinux vmlinux run_timer_softirq [self]
+-------------------------------------------------------------------------------
+ 258 100.000 Xorg Xorg damageReportPostOp
+9 0.0061 Xorg Xorg DamageReportDamage
+ 249 96.5116 Xorg Xorg miUnion
+ 9 3.4884 Xorg Xorg DamageReportDamage [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg Xorg XaceCatchDispatchProc
+ 4 44.4444 Xorg Xorg ProcCreatePixmap
+ 4 44.4444 Xorg Xorg ProcRenderCreatePicture
+9 0.0061 Xorg Xorg LegalNewID
+ 9 100.000 Xorg Xorg LegalNewID [self]
+-------------------------------------------------------------------------------
+ 1 9.0909 Xorg Xorg SetClipRects
+ 3 27.2727 Xorg Xorg ChangeGC
+ 7 63.6364 Xorg Xorg dixChangeGC
+9 0.0061 Xorg Xorg damageChangeGC
+ 9 81.8182 Xorg Xorg damageChangeGC [self]
+ 2 18.1818 Xorg Xorg miBSCheapChangeGC
+-------------------------------------------------------------------------------
+ 1 3.0303 Xorg Xorg damagePolyFillRect
+ 2 6.0606 Xorg Xorg miDestroyPictureClip
+ 3 9.0909 Xorg Xorg FreePicture
+ 8 24.2424 Xorg Xorg miDestroyClip
+ 19 57.5758 Xorg Xorg miDestroyPicture
+9 0.0061 Xorg Xorg miRegionDestroy
+ 23 44.2308 Xorg Xorg Xfree
+ 11 21.1538 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 9 17.3077 Xorg Xorg miRegionDestroy [self]
+ 4 7.6923 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 4 7.6923 libc-2.5.so Xorg free
+ 1 1.9231 Xorg Xorg .plt
+-------------------------------------------------------------------------------
+9 0.0061 jbd.ko jbd journal_stop
+ 9 100.000 jbd.ko jbd journal_stop [self]
+-------------------------------------------------------------------------------
+9 0.0061 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 821 92.1437 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+ 49 5.4994 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 10 1.1223 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+ 9 1.0101 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid [self]
+ 1 0.1122 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 0.1122 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+-------------------------------------------------------------------------------
+9 0.0061 vmlinux vmlinux __brelse
+ 9 100.000 vmlinux vmlinux __brelse [self]
+-------------------------------------------------------------------------------
+9 0.0061 vmlinux vmlinux __page_set_anon_rmap
+ 9 100.000 vmlinux vmlinux __page_set_anon_rmap [self]
+-------------------------------------------------------------------------------
+9 0.0061 vmlinux vmlinux __switch_to
+ 9 100.000 vmlinux vmlinux __switch_to [self]
+-------------------------------------------------------------------------------
+9 0.0061 vmlinux vmlinux cache_alloc_refill
+ 9 100.000 vmlinux vmlinux cache_alloc_refill [self]
+-------------------------------------------------------------------------------
+9 0.0061 vmlinux vmlinux find_next_zero_bit
+ 9 100.000 vmlinux vmlinux find_next_zero_bit [self]
+-------------------------------------------------------------------------------
+9 0.0061 vmlinux vmlinux generic_permission
+ 9 100.000 vmlinux vmlinux generic_permission [self]
+-------------------------------------------------------------------------------
+9 0.0061 vmlinux vmlinux rw_verify_area
+ 9 100.000 vmlinux vmlinux rw_verify_area [self]
+-------------------------------------------------------------------------------
+ 1 4.1667 Xorg Xorg XaceCatchDispatchProc
+ 7 29.1667 Xorg Xorg ProcCreatePixmap
+ 16 66.6667 Xorg Xorg ProcRenderCreatePicture
+8 0.0054 Xorg Xorg AddResource
+ 14 58.3333 Xorg Xorg Xalloc
+ 8 33.3333 Xorg Xorg AddResource [self]
+ 1 4.1667 Xorg Xorg .plt
+ 1 4.1667 Xorg Xorg Hash
+-------------------------------------------------------------------------------
+ 35 100.000 Xorg Xorg CreatePicture
+8 0.0054 Xorg Xorg AllocatePicture
+ 26 72.2222 Xorg Xorg Xalloc
+ 8 22.2222 Xorg Xorg AllocatePicture [self]
+ 2 5.5556 Xorg Xorg .plt
+-------------------------------------------------------------------------------
+ 26089 100.000 Xorg Xorg CompositePicture
+8 0.0054 Xorg Xorg damageComposite
+ 25987 99.5976 libexa.so Xorg exaComposite
+ 78 0.2989 Xorg Xorg damageReportPostOp
+ 16 0.0613 Xorg Xorg damageDamageBox
+ 8 0.0307 Xorg Xorg damageComposite [self]
+ 2 0.0077 libexa.so Xorg ExaCheckComposite
+ 1 0.0038 Xorg Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 2 2.0408 Xorg Xorg miColorRects
+ 96 97.9592 Xorg Xorg ValidateGC
+8 0.0054 Xorg Xorg damageValidateGC
+ 88 89.7959 Xorg Xorg miBSCheapValidateGC
+ 8 8.1633 Xorg Xorg damageValidateGC [self]
+ 2 2.0408 libexa.so Xorg exaValidateGC
+-------------------------------------------------------------------------------
+ 1 1.8519 Xorg Xorg ValidateOnePicture
+ 8 14.8148 Xorg Xorg miColorRects
+ 17 31.4815 Xorg Xorg miRectsToRegion
+ 28 51.8519 Xorg Xorg miValidatePicture
+8 0.0054 Xorg Xorg miRegionCreate
+ 25 46.2963 Xorg Xorg Xalloc
+ 9 16.6667 Xorg Xorg miRegionInit
+ 8 14.8148 Xorg Xorg miRegionCreate [self]
+ 4 7.4074 Xorg Xorg .plt
+ 3 5.5556 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+ 2 3.7037 libpixman.so.0.0.0 Xorg pixman_region_init
+ 2 3.7037 libc-2.5.so Xorg malloc
+ 1 1.8519 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+8 0.0054 ext3.ko ext3 __ext3_get_inode_loc
+ 8 100.000 ext3.ko ext3 __ext3_get_inode_loc [self]
+-------------------------------------------------------------------------------
+ 6 17.6471 ld-2.5.so ld-2.5.so dl_open_worker
+ 28 82.3529 ld-2.5.so ld-2.5.so dl_main
+8 0.0054 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 26 76.4706 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 8 23.5294 ld-2.5.so ld-2.5.so _dl_relocate_object [self]
+-------------------------------------------------------------------------------
+8 0.0054 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+ 53 82.8125 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+ 8 12.5000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock [self]
+ 3 4.6875 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+8 0.0054 vmlinux vmlinux __find_get_block_slow
+ 8 100.000 vmlinux vmlinux __find_get_block_slow [self]
+-------------------------------------------------------------------------------
+8 0.0054 vmlinux vmlinux dput
+ 8 100.000 vmlinux vmlinux dput [self]
+-------------------------------------------------------------------------------
+8 0.0054 vmlinux vmlinux filemap_nopage
+ 8 100.000 vmlinux vmlinux filemap_nopage [self]
+-------------------------------------------------------------------------------
+8 0.0054 vmlinux vmlinux kmap_atomic
+ 8 100.000 vmlinux vmlinux kmap_atomic [self]
+-------------------------------------------------------------------------------
+8 0.0054 vmlinux vmlinux smp_apic_timer_interrupt
+ 8 100.000 vmlinux vmlinux smp_apic_timer_interrupt [self]
+-------------------------------------------------------------------------------
+8 0.0054 vmlinux vmlinux vfs_write
+ 8 100.000 vmlinux vmlinux vfs_write [self]
+-------------------------------------------------------------------------------
+ 25 100.000 Xorg Xorg damageDestroyPixmap
+7 0.0047 Xorg Xorg DamageDestroy
+ 17 68.0000 Xorg Xorg Xfree
+ 7 28.0000 Xorg Xorg DamageDestroy [self]
+ 1 4.0000 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg miCreateAlphaPicture
+ 2 66.6667 Xorg Xorg ProcCreatePixmap
+7 0.0047 Xorg Xorg DamageRegister
+ 7 87.5000 Xorg Xorg DamageRegister [self]
+ 1 12.5000 Xorg Xorg getDrawableDamageRef
+-------------------------------------------------------------------------------
+ 3 42.8571 Xorg Xorg Dispatch
+ 4 57.1429 Xorg Xorg XaceCatchExtProc
+7 0.0047 Xorg Xorg GetExtensionEntry
+ 7 100.000 Xorg Xorg GetExtensionEntry [self]
+-------------------------------------------------------------------------------
+ 3 0.3953 Xorg Xorg XaceCatchExtProc
+ 756 99.6047 Xorg Xorg ProcRenderDispatch
+7 0.0047 Xorg Xorg ProcRenderFillRectangles
+ 728 95.9157 Xorg Xorg CompositeRects
+ 16 2.1080 Xorg Xorg SecurityLookupIDByType
+ 7 0.9223 Xorg Xorg ProcRenderFillRectangles [self]
+ 2 0.2635 Xorg Xorg XaceHook
+ 2 0.2635 Xorg Xorg miCompositeRects
+ 2 0.2635 Xorg Xorg ValidatePicture
+ 1 0.1318 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.1318 Xorg Xorg PictOpValid
+-------------------------------------------------------------------------------
+ 6 12.2449 Xorg Xorg XaceCatchExtProc
+ 43 87.7551 Xorg Xorg ProcRenderDispatch
+7 0.0047 Xorg Xorg ProcRenderSetPictureFilter
+ 21 42.8571 Xorg Xorg SetPictureFilter
+ 16 32.6531 Xorg Xorg SecurityLookupIDByType
+ 7 14.2857 Xorg Xorg ProcRenderSetPictureFilter [self]
+ 3 6.1224 Xorg Xorg miChangePictureFilter
+ 1 2.0408 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 2.0408 Xorg Xorg Hash
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg Xorg ProcRenderDispatch
+ 6 85.7143 Xorg Xorg ProcRenderSetPictureTransform
+7 0.0047 Xorg Xorg SetPictureTransform
+ 7 100.000 Xorg Xorg SetPictureTransform [self]
+-------------------------------------------------------------------------------
+ 1 1.2658 Xorg Xorg miCreateAlphaPicture
+ 1 1.2658 Xorg Xorg damageGlyphs
+ 2 2.5316 Xorg Xorg ProcCopyArea
+ 3 3.7975 Xorg Xorg ProcPolyFillRectangle
+ 6 7.5949 Xorg Xorg miCompositeRects
+ 7 8.8608 Xorg Xorg ProcPolySegment
+ 59 74.6835 Xorg Xorg miColorRects
+7 0.0047 Xorg Xorg ValidateGC
+ 96 90.5660 Xorg Xorg damageValidateGC
+ 7 6.6038 Xorg Xorg ValidateGC [self]
+ 3 2.8302 Xorg Xorg miBSCheapValidateGC
+-------------------------------------------------------------------------------
+ 1 0.5882 Xorg Xorg miRectsToRegion
+ 1 0.5882 Xorg Xorg miValidatePicture
+ 1 0.5882 Xorg Xorg SetClipRects
+ 1 0.5882 Xorg Xorg AllocateGC
+ 2 1.1765 Xorg Xorg miRegionValidate
+ 14 8.2353 Xorg Xorg AddResource
+ 25 14.7059 Xorg Xorg miRegionCreate
+ 25 14.7059 Xorg Xorg DamageCreate
+ 26 15.2941 Xorg Xorg AllocatePicture
+ 74 43.5294 Xorg Xorg AllocatePixmap
+7 0.0047 Xorg Xorg Xalloc
+ 171 92.9348 libc-2.5.so Xorg malloc
+ 7 3.8043 Xorg Xorg Xalloc [self]
+ 4 2.1739 libc-2.5.so Xorg _int_malloc
+ 2 1.0870 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 5.1282 Xorg Xorg XaceCatchDispatchProc
+ 37 94.8718 Xorg Xorg ProcPolySegment
+7 0.0047 Xorg Xorg damagePolySegment
+ 31 79.4872 libexa.so Xorg exaPolySegment
+ 7 17.9487 Xorg Xorg damagePolySegment [self]
+ 1 2.5641 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3 3.2967 Xorg Xorg ValidateGC
+ 88 96.7033 Xorg Xorg damageValidateGC
+7 0.0047 Xorg Xorg miBSCheapValidateGC
+ 78 85.7143 libexa.so Xorg exaValidateGC
+ 7 7.6923 Xorg Xorg miBSCheapValidateGC [self]
+ 3 3.2967 libfb.so Xorg fbValidateGC
+ 2 2.1978 libexa.so Xorg .plt
+ 1 1.0989 libexa.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+7 0.0047 ext3.ko ext3 ext3_new_blocks
+ 7 100.000 ext3.ko ext3 ext3_new_blocks [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 6 85.7143 ld-2.5.so ld-2.5.so check_match.7793
+7 0.0047 ld-2.5.so ld-2.5.so strcmp
+ 7 100.000 ld-2.5.so ld-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+ 3 17.6471 libfb.so libfb.so fbComposite
+ 14 82.3529 libfb.so libfb.so fbRasterizeTrapezoid
+7 0.0047 libfb.so libfb.so image_from_pict
+ 7 38.8889 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 7 38.8889 libfb.so libfb.so image_from_pict [self]
+ 1 5.5556 libpixman.so.0.0.0 libfb.so .plt
+ 1 5.5556 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx
+ 1 5.5556 libpixman.so.0.0.0 libfb.so pixman_image_set_filter
+ 1 5.5556 libpixman.so.0.0.0 libfb.so reset_clip_region
+-------------------------------------------------------------------------------
+ 3 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+7 0.0047 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+ 7 100.000 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+7 0.0047 vmlinux vmlinux __getblk
+ 7 100.000 vmlinux vmlinux __getblk [self]
+-------------------------------------------------------------------------------
+7 0.0047 vmlinux vmlinux clocksource_get_next
+ 7 100.000 vmlinux vmlinux clocksource_get_next [self]
+-------------------------------------------------------------------------------
+7 0.0047 vmlinux vmlinux d_alloc
+ 7 100.000 vmlinux vmlinux d_alloc [self]
+-------------------------------------------------------------------------------
+7 0.0047 vmlinux vmlinux free_pages_and_swap_cache
+ 7 100.000 vmlinux vmlinux free_pages_and_swap_cache [self]
+-------------------------------------------------------------------------------
+7 0.0047 vmlinux vmlinux notifier_call_chain
+ 7 100.000 vmlinux vmlinux notifier_call_chain [self]
+-------------------------------------------------------------------------------
+ 1 0.0038 Xorg Xorg CompositeTrapezoids
+ 51 0.1954 Xorg Xorg miCompositeRects
+ 1615 6.1885 Xorg Xorg ProcRenderComposite
+ 24430 93.6123 Xorg Xorg miTrapezoids
+6 0.0041 Xorg Xorg CompositePicture
+ 26089 99.9540 Xorg Xorg damageComposite
+ 6 0.0230 Xorg Xorg CompositePicture [self]
+ 5 0.0192 Xorg Xorg ValidatePicture
+ 1 0.0038 Xorg Xorg damageDamageBox
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damageGlyphs
+6 0.0041 Xorg Xorg FreeScratchPixmapHeader
+ 6 100.000 Xorg Xorg FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 3 9.3750 Xorg Xorg XaceCatchExtProc
+ 29 90.6250 Xorg Xorg ProcRenderDispatch
+6 0.0041 Xorg Xorg ProcRenderChangePicture
+ 13 40.6250 Xorg Xorg ChangePicture
+ 8 25.0000 Xorg Xorg SecurityLookupIDByType
+ 6 18.7500 Xorg Xorg ProcRenderChangePicture [self]
+ 5 15.6250 Xorg Xorg Ones
+-------------------------------------------------------------------------------
+ 21 100.000 Xorg Xorg ProcRenderSetPictureFilter
+6 0.0041 Xorg Xorg SetPictureFilter
+ 14 66.6667 Xorg Xorg PictureFindFilter
+ 6 28.5714 Xorg Xorg SetPictureFilter [self]
+ 1 4.7619 Xorg Xorg PictureGetFilterId
+-------------------------------------------------------------------------------
+ 1 2.2727 Xorg Xorg ProcRenderCreatePicture
+ 43 97.7273 Xorg Xorg CreatePicture
+6 0.0041 Xorg Xorg SetPictureToDefaults
+ 21 47.7273 Xorg Xorg PictureGetFilterId
+ 13 29.5455 libc-2.5.so Xorg strlen
+ 6 13.6364 Xorg Xorg SetPictureToDefaults [self]
+ 3 6.8182 Xorg Xorg CompareISOLatin1Lowered
+ 1 2.2727 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 1.9608 Xorg Xorg CompositeTrapezoids
+ 1 1.9608 Xorg Xorg ProcRenderCompositeGlyphs
+ 2 3.9216 Xorg Xorg ProcRenderFillRectangles
+ 2 3.9216 Xorg Xorg damageGlyphs
+ 5 9.8039 Xorg Xorg CompositePicture
+ 17 33.3333 Xorg Xorg CompositeGlyphs
+ 23 45.0980 Xorg Xorg CompositeRects
+6 0.0041 Xorg Xorg ValidatePicture
+ 53 84.1270 Xorg Xorg ValidateOnePicture
+ 6 9.5238 Xorg Xorg ValidatePicture [self]
+ 3 4.7619 Xorg Xorg miValidatePicture
+ 1 1.5873 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 3.5714 Xorg Xorg dixChangeGC
+ 4 14.2857 Xorg Xorg miColorRects
+ 9 32.1429 Xorg Xorg SetClipRects
+ 14 50.0000 Xorg Xorg GetScratchGC
+6 0.0041 Xorg Xorg damageChangeClip
+ 22 78.5714 Xorg Xorg miBSCheapChangeClip
+ 6 21.4286 Xorg Xorg damageChangeClip [self]
+-------------------------------------------------------------------------------
+6 0.0041 jbd.ko jbd __journal_temp_unlink_buffer
+ 6 100.000 jbd.ko jbd __journal_temp_unlink_buffer [self]
+-------------------------------------------------------------------------------
+6 0.0041 jbd.ko jbd journal_write_metadata_buffer
+ 6 100.000 jbd.ko jbd journal_write_metadata_buffer [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libc-2.5.so libc-2.5.so vsscanf
+6 0.0041 libc-2.5.so libc-2.5.so _IO_vfscanf
+ 6 75.0000 libc-2.5.so libc-2.5.so _IO_vfscanf [self]
+ 1 12.5000 libc-2.5.so libc-2.5.so _IO_sputbackc
+ 1 12.5000 libc-2.5.so libc-2.5.so __strtoul_internal
+-------------------------------------------------------------------------------
+6 0.0041 libc-2.5.so libc-2.5.so __read_nocancel
+ 6 100.000 libc-2.5.so libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_expand_alias
+6 0.0041 libc-2.5.so libc-2.5.so strchr
+ 6 100.000 libc-2.5.so libc-2.5.so strchr [self]
+-------------------------------------------------------------------------------
+6 0.0041 libm-2.5.so libm-2.5.so cos
+ 6 100.000 libm-2.5.so libm-2.5.so cos [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 9 90.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+6 0.0041 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 6 60.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step [self]
+ 4 40.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+6 0.0041 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 6 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux __do_softirq
+ 6 100.000 vmlinux vmlinux __do_softirq [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux __wake_up_bit
+ 6 100.000 vmlinux vmlinux __wake_up_bit [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux account_user_time
+ 6 100.000 vmlinux vmlinux account_user_time [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux check_userspace
+ 6 100.000 vmlinux vmlinux check_userspace [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux do_notify_resume
+ 6 100.000 vmlinux vmlinux do_notify_resume [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux do_timer
+ 6 100.000 vmlinux vmlinux do_timer [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux link_path_walk
+ 6 100.000 vmlinux vmlinux link_path_walk [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux radix_tree_lookup
+ 6 100.000 vmlinux vmlinux radix_tree_lookup [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux raise_softirq
+ 6 100.000 vmlinux vmlinux raise_softirq [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux sched_clock
+ 6 100.000 vmlinux vmlinux sched_clock [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux unix_stream_recvmsg
+ 6 100.000 vmlinux vmlinux unix_stream_recvmsg [self]
+-------------------------------------------------------------------------------
+6 0.0041 vmlinux vmlinux unlock_buffer
+ 6 100.000 vmlinux vmlinux unlock_buffer [self]
+-------------------------------------------------------------------------------
+ 1 1.9608 Xorg Xorg CreateGC
+ 4 7.8431 Xorg Xorg miCompositeRects
+ 46 90.1961 Xorg Xorg miColorRects
+5 0.0034 Xorg Xorg ChangeGC
+ 43 84.3137 Xorg Xorg dixChangeGC
+ 5 9.8039 Xorg Xorg ChangeGC [self]
+ 3 5.8824 Xorg Xorg damageChangeGC
+-------------------------------------------------------------------------------
+ 2 0.0035 Xorg Xorg ProcRenderDispatch
+ 56825 99.9965 Xorg Xorg ProcRenderCompositeGlyphs
+5 0.0034 Xorg Xorg CompositeGlyphs
+ 56812 99.9578 Xorg Xorg damageGlyphs
+ 17 0.0299 Xorg Xorg ValidatePicture
+ 5 0.0088 Xorg Xorg CompositeGlyphs [self]
+ 1 0.0018 Xorg Xorg ValidateOnePicture
+ 1 0.0018 libexa.so Xorg exaGlyphs
+-------------------------------------------------------------------------------
+5 0.0034 Xorg Xorg DamageCreate
+ 25 80.6452 Xorg Xorg Xalloc
+ 5 16.1290 Xorg Xorg DamageCreate [self]
+ 1 3.2258 libc-2.5.so Xorg malloc
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg ProcCreatePixmap
+5 0.0034 Xorg Xorg DamageSetReportAfterOp
+ 5 100.000 Xorg Xorg DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg Xorg ProcFreePixmap
+ 4 80.0000 Xorg Xorg FreeResource
+5 0.0034 Xorg Xorg FlushClientCaches
+ 5 100.000 Xorg Xorg FlushClientCaches [self]
+-------------------------------------------------------------------------------
+ 14 100.000 Xorg Xorg SetPictureFilter
+5 0.0034 Xorg Xorg PictureFindFilter
+ 9 64.2857 Xorg Xorg PictureGetFilterId
+ 5 35.7143 Xorg Xorg PictureFindFilter [self]
+-------------------------------------------------------------------------------
+ 1 1.1111 Xorg Xorg Dispatch
+ 89 98.8889 Xorg Xorg XaceCatchDispatchProc
+5 0.0034 Xorg Xorg ProcFreePixmap
+ 69 76.6667 Xorg Xorg FreeResource
+ 12 13.3333 Xorg Xorg SecurityLookupIDByType
+ 5 5.5556 Xorg Xorg ProcFreePixmap [self]
+ 2 2.2222 Xorg Xorg dixDestroyPixmap
+ 1 1.1111 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.1111 Xorg Xorg FlushClientCaches
+-------------------------------------------------------------------------------
+ 1 1.7544 Xorg Xorg CompositeGlyphs
+ 3 5.2632 Xorg Xorg CompositeRects
+ 53 92.9825 Xorg Xorg ValidatePicture
+5 0.0034 Xorg Xorg ValidateOnePicture
+ 50 87.7193 Xorg Xorg miValidatePicture
+ 5 8.7719 Xorg Xorg ValidateOnePicture [self]
+ 1 1.7544 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.7544 Xorg Xorg miRegionCreate
+-------------------------------------------------------------------------------
+ 2 40.0000 Xorg Xorg damageChangeGC
+ 3 60.0000 Xorg Xorg dixChangeGC
+5 0.0034 Xorg Xorg miBSCheapChangeGC
+ 5 100.000 Xorg Xorg miBSCheapChangeGC [self]
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg Xorg miRectsToRegion
+5 0.0034 Xorg Xorg miRegionValidate
+ 5 45.4545 Xorg Xorg miRegionValidate [self]
+ 3 27.2727 Xorg Xorg Xfree
+ 2 18.1818 Xorg Xorg Xalloc
+ 1 9.0909 Xorg Xorg QuickSortRects
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg Xorg miValidatePicture
+ 3 37.5000 Xorg Xorg damagePolyFillRect
+ 4 50.0000 Xorg Xorg miComputeCompositeClip
+5 0.0034 Xorg Xorg miTranslateRegion
+ 10 62.5000 libpixman.so.0.0.0 Xorg pixman_region_translate
+ 5 31.2500 Xorg Xorg miTranslateRegion [self]
+ 1 6.2500 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+5 0.0034 ext3.ko ext3 ext3_get_group_desc
+ 5 100.000 ext3.ko ext3 ext3_get_group_desc [self]
+-------------------------------------------------------------------------------
+5 0.0034 ext3.ko ext3 ext3_reserve_inode_write
+ 5 100.000 ext3.ko ext3 ext3_reserve_inode_write [self]
+-------------------------------------------------------------------------------
+ 4 50.0000 libc-2.5.so libc-2.5.so vsprintf
+ 4 50.0000 libc-2.5.so libc-2.5.so vasprintf
+5 0.0034 libc-2.5.so libc-2.5.so vfprintf
+ 5 62.5000 libc-2.5.so libc-2.5.so vfprintf [self]
+ 3 37.5000 libc-2.5.so libc-2.5.so _IO_default_xsputn
+-------------------------------------------------------------------------------
+5 0.0034 libexa.so libexa.so exaValidateGC
+ 66 82.5000 libfb.so libexa.so fbValidateGC
+ 5 6.2500 libfb.so libexa.so fbGetGCPrivateIndex
+ 5 6.2500 libexa.so libexa.so exaValidateGC [self]
+ 1 1.2500 Xorg libexa.so miComputeCompositeClip
+ 1 1.2500 libfb.so libexa.so .plt
+ 1 1.2500 libfb.so libexa.so __i686.get_pc_thunk.cx
+ 1 1.2500 libfb.so libexa.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+5 0.0034 libm-2.5.so libm-2.5.so floorf
+ 5 100.000 libm-2.5.so libm-2.5.so floorf [self]
+-------------------------------------------------------------------------------
+5 0.0034 libm-2.5.so libm-2.5.so tan
+ 5 100.000 libm-2.5.so libm-2.5.so tan [self]
+-------------------------------------------------------------------------------
+5 0.0034 vmlinux vmlinux __first_cpu
+ 5 100.000 vmlinux vmlinux __first_cpu [self]
+-------------------------------------------------------------------------------
+5 0.0034 vmlinux vmlinux bit_waitqueue
+ 5 100.000 vmlinux vmlinux bit_waitqueue [self]
+-------------------------------------------------------------------------------
+5 0.0034 vmlinux vmlinux find_next_bit
+ 5 100.000 vmlinux vmlinux find_next_bit [self]
+-------------------------------------------------------------------------------
+5 0.0034 vmlinux vmlinux inotify_dentry_parent_queue_event
+ 5 100.000 vmlinux vmlinux inotify_dentry_parent_queue_event [self]
+-------------------------------------------------------------------------------
+5 0.0034 vmlinux vmlinux iret_exc
+ 5 100.000 vmlinux vmlinux iret_exc [self]
+-------------------------------------------------------------------------------
+5 0.0034 vmlinux vmlinux irq_exit
+ 5 100.000 vmlinux vmlinux irq_exit [self]
+-------------------------------------------------------------------------------
+5 0.0034 vmlinux vmlinux mntput_no_expire
+ 5 100.000 vmlinux vmlinux mntput_no_expire [self]
+-------------------------------------------------------------------------------
+ 2 9.5238 Xorg Xorg XaceCatchExtProc
+ 19 90.4762 Xorg Xorg ProcRenderDispatch
+4 0.0027 Xorg Xorg ProcRenderSetPictureTransform
+ 10 47.6190 Xorg Xorg SecurityLookupIDByType
+ 6 28.5714 Xorg Xorg SetPictureTransform
+ 4 19.0476 Xorg Xorg ProcRenderSetPictureTransform [self]
+ 1 4.7619 Xorg Xorg miChangePictureTransform
+-------------------------------------------------------------------------------
+ 3 42.8571 Xorg Xorg FreePicture
+ 4 57.1429 Xorg Xorg miChangePictureClip
+4 0.0027 Xorg Xorg miDestroyPictureClip
+ 4 57.1429 Xorg Xorg miDestroyPictureClip [self]
+ 2 28.5714 Xorg Xorg miRegionDestroy
+ 1 14.2857 Xorg Xorg Xfree
+-------------------------------------------------------------------------------
+ 2 18.1818 Xorg Xorg miRectsToRegion
+ 9 81.8182 Xorg Xorg miRegionCreate
+4 0.0027 Xorg Xorg miRegionInit
+ 4 36.3636 Xorg Xorg miRegionInit [self]
+ 3 27.2727 libpixman.so.0.0.0 Xorg pixman_region_init
+ 3 27.2727 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+ 1 9.0909 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 20.0000 Xorg Xorg miCompositeRects
+ 8 80.0000 Xorg Xorg miColorRects
+4 0.0027 Xorg Xorg miRenderColorToPixel
+ 6 60.0000 Xorg Xorg Ones
+ 4 40.0000 Xorg Xorg miRenderColorToPixel [self]
+-------------------------------------------------------------------------------
+4 0.0027 ehci-hcd.ko ehci_hcd ehci_hub_status_data
+ 4 100.000 ehci-hcd.ko ehci_hcd ehci_hub_status_data [self]
+-------------------------------------------------------------------------------
+4 0.0027 ext3.ko ext3 ext3_get_block
+ 4 100.000 ext3.ko ext3 ext3_get_block [self]
+-------------------------------------------------------------------------------
+4 0.0027 ext3.ko ext3 ext3_test_allocatable
+ 4 100.000 ext3.ko ext3 ext3_test_allocatable [self]
+-------------------------------------------------------------------------------
+4 0.0027 ext3.ko ext3 ext3_try_to_allocate_with_rsv
+ 4 100.000 ext3.ko ext3 ext3_try_to_allocate_with_rsv [self]
+-------------------------------------------------------------------------------
+4 0.0027 jbd.ko jbd journal_get_undo_access
+ 4 100.000 jbd.ko jbd journal_get_undo_access [self]
+-------------------------------------------------------------------------------
+4 0.0027 jbd.ko jbd start_this_handle
+ 4 100.000 jbd.ko jbd start_this_handle [self]
+-------------------------------------------------------------------------------
+ 10 100.000 ld-2.5.so ld-2.5.so do_lookup_x
+4 0.0027 ld-2.5.so ld-2.5.so check_match.7793
+ 6 60.0000 ld-2.5.so ld-2.5.so strcmp
+ 4 40.0000 ld-2.5.so ld-2.5.so check_match.7793 [self]
+-------------------------------------------------------------------------------
+4 0.0027 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx
+ 4 100.000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so mbrtowc
+4 0.0027 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check
+ 4 100.000 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check [self]
+-------------------------------------------------------------------------------
+4 0.0027 libfb.so libfb.so fbDestroyPixmap
+ 20 80.0000 Xorg libfb.so Xfree
+ 4 16.0000 libfb.so libfb.so fbDestroyPixmap [self]
+ 1 4.0000 Xorg libfb.so .plt
+-------------------------------------------------------------------------------
+4 0.0027 locale-archive locale-archive (no symbols)
+ 4 100.000 locale-archive locale-archive (no symbols) [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux __inc_zone_page_state
+ 4 100.000 vmlinux vmlinux __inc_zone_page_state [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux __insert_inode_hash
+ 4 100.000 vmlinux vmlinux __insert_inode_hash [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux __mark_inode_dirty
+ 4 100.000 vmlinux vmlinux __mark_inode_dirty [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux __next_cpu
+ 4 100.000 vmlinux vmlinux __next_cpu [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux __pagevec_free
+ 4 100.000 vmlinux vmlinux __pagevec_free [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux __sigqueue_alloc
+ 4 100.000 vmlinux vmlinux __sigqueue_alloc [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux alloc_inode
+ 4 100.000 vmlinux vmlinux alloc_inode [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux arch_get_unmapped_area_topdown
+ 4 100.000 vmlinux vmlinux arch_get_unmapped_area_topdown [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux copy_page_range
+ 4 100.000 vmlinux vmlinux copy_page_range [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux copy_process
+ 4 100.000 vmlinux vmlinux copy_process [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux do_mpage_readpage
+ 4 100.000 vmlinux vmlinux do_mpage_readpage [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux do_softirq
+ 4 100.000 vmlinux vmlinux do_softirq [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux do_sync_read
+ 4 100.000 vmlinux vmlinux do_sync_read [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux find_vma_prev
+ 4 100.000 vmlinux vmlinux find_vma_prev [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux flush_tlb_page
+ 4 100.000 vmlinux vmlinux flush_tlb_page [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux get_unused_fd
+ 4 100.000 vmlinux vmlinux get_unused_fd [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux handle_edge_irq
+ 4 100.000 vmlinux vmlinux handle_edge_irq [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux isolate_lru_pages
+ 4 100.000 vmlinux vmlinux isolate_lru_pages [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux math_state_restore
+ 4 100.000 vmlinux vmlinux math_state_restore [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux new_inode
+ 4 100.000 vmlinux vmlinux new_inode [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux page_add_file_rmap
+ 4 100.000 vmlinux vmlinux page_add_file_rmap [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux queue_delayed_work
+ 4 100.000 vmlinux vmlinux queue_delayed_work [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux scheduler_tick
+ 4 100.000 vmlinux vmlinux scheduler_tick [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux search_extable
+ 4 100.000 vmlinux vmlinux search_extable [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux sock_alloc_send_skb
+ 4 100.000 vmlinux vmlinux sock_alloc_send_skb [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux softlockup_tick
+ 4 100.000 vmlinux vmlinux softlockup_tick [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux sys_mkdirat
+ 4 100.000 vmlinux vmlinux sys_mkdirat [self]
+-------------------------------------------------------------------------------
+4 0.0027 vmlinux vmlinux sys_read
+ 4 100.000 vmlinux vmlinux sys_read [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg ProcRenderFillRectangles
+ 2 66.6667 Xorg Xorg ProcRenderDispatch
+3 0.0020 Xorg Xorg PictOpValid
+ 3 100.000 Xorg Xorg PictOpValid [self]
+-------------------------------------------------------------------------------
+ 1 0.0033 Xorg Xorg XaceCatchExtProc
+ 30723 99.9967 Xorg Xorg ProcRenderDispatch
+3 0.0020 Xorg Xorg ProcRenderTrapezoids
+ 30720 99.9805 Xorg Xorg CompositeTrapezoids
+ 3 0.0098 Xorg Xorg SecurityLookupIDByType
+ 3 0.0098 Xorg Xorg ProcRenderTrapezoids [self]
+-------------------------------------------------------------------------------
+ 2 4.7619 Xorg Xorg ProcFreePixmap
+ 40 95.2381 Xorg Xorg FreeResource
+3 0.0020 Xorg Xorg dixDestroyPixmap
+ 38 90.4762 libextmod.so Xorg XvDestroyPixmap
+ 3 7.1429 Xorg Xorg dixDestroyPixmap [self]
+ 1 2.3810 Xorg Xorg damageDestroyPixmap
+-------------------------------------------------------------------------------
+ 21 100.000 Xorg Xorg miBSCheapChangeClip
+3 0.0020 Xorg Xorg miChangeClip
+ 11 52.3810 Xorg Xorg miDestroyClip
+ 6 28.5714 Xorg Xorg miRectsToRegion
+ 3 14.2857 Xorg Xorg miChangeClip [self]
+ 1 4.7619 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg ProcRenderSetPictureFilter
+3 0.0020 Xorg Xorg miChangePictureFilter
+ 3 100.000 Xorg Xorg miChangePictureFilter [self]
+-------------------------------------------------------------------------------
+ 2 15.3846 Xorg Xorg miBSCheapDestroyClip
+ 11 84.6154 Xorg Xorg miChangeClip
+3 0.0020 Xorg Xorg miDestroyClip
+ 8 61.5385 Xorg Xorg miRegionDestroy
+ 3 23.0769 Xorg Xorg miDestroyClip [self]
+ 1 7.6923 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 7.6923 libpixman.so.0.0.0 Xorg pixman_region_fini
+-------------------------------------------------------------------------------
+ 30 100.000 Xorg Xorg miTrapezoids
+3 0.0020 Xorg Xorg miTrapezoidBounds
+ 25 83.3333 Xorg Xorg miLineFixedX
+ 3 10.0000 Xorg Xorg miTrapezoidBounds [self]
+ 2 6.6667 Xorg Xorg __divdi3
+-------------------------------------------------------------------------------
+3 0.0020 ext3.ko ext3 ext3_find_entry
+ 3 100.000 ext3.ko ext3 ext3_find_entry [self]
+-------------------------------------------------------------------------------
+3 0.0020 ext3.ko ext3 ext3_mkdir
+ 3 100.000 ext3.ko ext3 ext3_mkdir [self]
+-------------------------------------------------------------------------------
+3 0.0020 ext3.ko ext3 ext3_setattr
+ 3 100.000 ext3.ko ext3 ext3_setattr [self]
+-------------------------------------------------------------------------------
+3 0.0020 ext3.ko ext3 ext3_try_to_allocate
+ 3 100.000 ext3.ko ext3 ext3_try_to_allocate [self]
+-------------------------------------------------------------------------------
+3 0.0020 grep grep (no symbols)
+ 3 100.000 grep grep (no symbols) [self]
+-------------------------------------------------------------------------------
+3 0.0020 jbd.ko jbd journal_start
+ 3 100.000 jbd.ko jbd journal_start [self]
+-------------------------------------------------------------------------------
+ 5 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+3 0.0020 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+ 3 60.0000 ld-2.5.so ld-2.5.so _dl_load_cache_lookup [self]
+ 2 40.0000 ld-2.5.so ld-2.5.so _dl_cache_libcmp
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so vfprintf
+3 0.0020 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 3 100.000 libc-2.5.so libc-2.5.so _IO_default_xsputn [self]
+-------------------------------------------------------------------------------
+3 0.0020 libc-2.5.so libc-2.5.so __ctype_get_mb_cur_max
+ 3 100.000 libc-2.5.so libc-2.5.so __ctype_get_mb_cur_max [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __sigjmp_save
+3 0.0020 libc-2.5.so libc-2.5.so sigprocmask
+ 3 100.000 libc-2.5.so libc-2.5.so sigprocmask [self]
+-------------------------------------------------------------------------------
+3 0.0020 libc-2.5.so libc-2.5.so strcpy
+ 3 100.000 libc-2.5.so libc-2.5.so strcpy [self]
+-------------------------------------------------------------------------------
+3 0.0020 libfb.so libfb.so fbCreatePixmap
+ 108 93.1034 libfb.so libfb.so fbCreatePixmapBpp
+ 5 4.3103 Xorg libfb.so AllocatePixmap
+ 3 2.5862 libfb.so libfb.so fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+3 0.0020 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 3 75.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image [self]
+ 1 25.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 49 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+3 0.0020 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 42 85.7143 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 3 6.1224 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init [self]
+ 2 4.0816 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 1 2.0408 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 2.0408 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+-------------------------------------------------------------------------------
+3 0.0020 libpthread-2.5.so libpthread-2.5.so __errno_location
+ 3 100.000 libpthread-2.5.so libpthread-2.5.so __errno_location [self]
+-------------------------------------------------------------------------------
+3 0.0020 libpthread-2.5.so libpthread-2.5.so __write_nocancel
+ 3 75.0000 libpthread-2.5.so libpthread-2.5.so __write_nocancel [self]
+ 1 25.0000 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel
+-------------------------------------------------------------------------------
+3 0.0020 libpthread-2.5.so libpthread-2.5.so write
+ 3 100.000 libpthread-2.5.so libpthread-2.5.so write [self]
+-------------------------------------------------------------------------------
+3 0.0020 uhci-hcd.ko uhci_hcd uhci_get_current_frame_number
+ 3 100.000 uhci-hcd.ko uhci_hcd uhci_get_current_frame_number [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux __block_prepare_write
+ 3 100.000 vmlinux vmlinux __block_prepare_write [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux __rcu_pending
+ 3 100.000 vmlinux vmlinux __rcu_pending [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux __set_page_dirty_buffers
+ 3 100.000 vmlinux vmlinux __set_page_dirty_buffers [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux __wake_up_common
+ 3 100.000 vmlinux vmlinux __wake_up_common [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux alloc_sock_iocb
+ 3 100.000 vmlinux vmlinux alloc_sock_iocb [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux atomic_notifier_call_chain
+ 3 100.000 vmlinux vmlinux atomic_notifier_call_chain [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux block_read_full_page
+ 3 100.000 vmlinux vmlinux block_read_full_page [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux cond_resched_lock
+ 3 100.000 vmlinux vmlinux cond_resched_lock [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux cpu_idle
+ 3 100.000 vmlinux vmlinux cpu_idle [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux current_fs_time
+ 3 100.000 vmlinux vmlinux current_fs_time [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux d_rehash
+ 3 100.000 vmlinux vmlinux d_rehash [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux do_sys_poll
+ 3 100.000 vmlinux vmlinux do_sys_poll [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux drain_array
+ 3 100.000 vmlinux vmlinux drain_array [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux find_lock_page
+ 3 100.000 vmlinux vmlinux find_lock_page [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux find_vma_prepare
+ 3 100.000 vmlinux vmlinux find_vma_prepare [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux groups_search
+ 3 100.000 vmlinux vmlinux groups_search [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux internal_add_timer
+ 3 100.000 vmlinux vmlinux internal_add_timer [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux kfree
+ 3 100.000 vmlinux vmlinux kfree [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux kmem_cache_zalloc
+ 3 100.000 vmlinux vmlinux kmem_cache_zalloc [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux mark_page_accessed
+ 3 100.000 vmlinux vmlinux mark_page_accessed [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux memcpy
+ 3 100.000 vmlinux vmlinux memcpy [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux mutex_lock
+ 3 100.000 vmlinux vmlinux mutex_lock [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux nr_active
+ 3 100.000 vmlinux vmlinux nr_active [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux page_add_new_anon_rmap
+ 3 100.000 vmlinux vmlinux page_add_new_anon_rmap [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux radix_tree_insert
+ 3 100.000 vmlinux vmlinux radix_tree_insert [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux rcu_pending
+ 3 100.000 vmlinux vmlinux rcu_pending [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux restore_sigcontext
+ 3 100.000 vmlinux vmlinux restore_sigcontext [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux ret_from_exception
+ 3 100.000 vmlinux vmlinux ret_from_exception [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux shrink_inactive_list
+ 3 100.000 vmlinux vmlinux shrink_inactive_list [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux sig_ignored
+ 3 100.000 vmlinux vmlinux sig_ignored [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux smp_send_timer_broadcast_ipi
+ 3 100.000 vmlinux vmlinux smp_send_timer_broadcast_ipi [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux sock_aio_read
+ 3 100.000 vmlinux vmlinux sock_aio_read [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux submit_bh
+ 3 100.000 vmlinux vmlinux submit_bh [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux sys_close
+ 3 100.000 vmlinux vmlinux sys_close [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux task_rq_lock
+ 3 100.000 vmlinux vmlinux task_rq_lock [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux unlink_file_vma
+ 3 100.000 vmlinux vmlinux unlink_file_vma [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux vfs_permission
+ 3 100.000 vmlinux vmlinux vfs_permission [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux vmtruncate
+ 3 100.000 vmlinux vmlinux vmtruncate [self]
+-------------------------------------------------------------------------------
+3 0.0020 vmlinux vmlinux vsnprintf
+ 3 100.000 vmlinux vmlinux vsnprintf [self]
+-------------------------------------------------------------------------------
+ 1 0.1372 Xorg Xorg ProcRenderDispatch
+ 728 99.8628 Xorg Xorg ProcRenderFillRectangles
+2 0.0014 Xorg Xorg CompositeRects
+ 697 95.6104 Xorg Xorg miCompositeRects
+ 23 3.1550 Xorg Xorg ValidatePicture
+ 3 0.4115 Xorg Xorg ValidateOnePicture
+ 2 0.2743 Xorg Xorg FreeScratchGC
+ 2 0.2743 Xorg Xorg CompositeRects [self]
+ 1 0.1372 Xorg Xorg miColorRects
+ 1 0.1372 Xorg Xorg FreePicture
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg Xorg XaceCatchDispatchProc
+ 5 83.3333 Xorg Xorg ProcCreateGC
+2 0.0014 Xorg Xorg CreateGC
+ 2 33.3333 Xorg Xorg damageCreateGC
+ 2 33.3333 Xorg Xorg CreateGC [self]
+ 1 16.6667 Xorg Xorg ChangeGC
+ 1 16.6667 Xorg Xorg AllocateGC
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageGlyphs
+2 0.0014 Xorg Xorg GetScratchPixmapHeader
+ 5 71.4286 Xorg Xorg miModifyPixmapHeader
+ 2 28.5714 Xorg Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg Xorg Dispatch
+ 12 92.3077 Xorg Xorg XaceCatchDispatchProc
+2 0.0014 Xorg Xorg ProcPolyFillRectangle
+ 8 61.5385 Xorg Xorg damagePolyFillRect
+ 3 23.0769 Xorg Xorg ValidateGC
+ 2 15.3846 Xorg Xorg ProcPolyFillRectangle [self]
+-------------------------------------------------------------------------------
+ 16 100.000 Xorg Xorg XaceCatchDispatchProc
+2 0.0014 Xorg Xorg ProcSetClipRectangles
+ 11 68.7500 Xorg Xorg SetClipRects
+ 3 18.7500 Xorg Xorg dixLookupGC
+ 2 12.5000 Xorg Xorg ProcSetClipRectangles [self]
+-------------------------------------------------------------------------------
+ 1 7.1429 Xorg Xorg ProcRenderDispatch
+ 13 92.8571 Xorg Xorg ProcRenderSetPictureClipRectangles
+2 0.0014 Xorg Xorg SetPictureClipRects
+ 6 42.8571 Xorg Xorg miRectsToRegion
+ 6 42.8571 Xorg Xorg miChangePictureClip
+ 2 14.2857 Xorg Xorg SetPictureClipRects [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg ReadRequestFromClient
+2 0.0014 Xorg Xorg _XSERVTransSocketRead
+ 2 100.000 Xorg Xorg _XSERVTransSocketRead [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg XaceCatchExtProc
+2 0.0014 Xorg Xorg __i686.get_pc_thunk.cx
+ 2 100.000 Xorg Xorg __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg Xorg ProcChangeGC
+ 2 25.0000 Xorg Xorg XaceCatchDispatchProc
+ 2 25.0000 Xorg Xorg ProcPolySegment
+ 3 37.5000 Xorg Xorg ProcSetClipRectangles
+2 0.0014 Xorg Xorg dixLookupGC
+ 6 75.0000 Xorg Xorg SecurityLookupIDByType
+ 2 25.0000 Xorg Xorg dixLookupGC [self]
+-------------------------------------------------------------------------------
+ 1 4.3478 Xorg Xorg GetScratchGC
+ 22 95.6522 Xorg Xorg damageChangeClip
+2 0.0014 Xorg Xorg miBSCheapChangeClip
+ 21 91.3043 Xorg Xorg miChangeClip
+ 2 8.6957 Xorg Xorg miBSCheapChangeClip [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg SetPictureClipRects
+2 0.0014 Xorg Xorg miChangePictureClip
+ 4 66.6667 Xorg Xorg miDestroyPictureClip
+ 2 33.3333 Xorg Xorg miChangePictureClip [self]
+-------------------------------------------------------------------------------
+ 1 3.4483 Xorg Xorg miCompositeRects
+ 28 96.5517 Xorg Xorg FreePicture
+2 0.0014 Xorg Xorg miDestroyPicture
+ 19 63.3333 Xorg Xorg miRegionDestroy
+ 4 13.3333 Xorg Xorg Xfree
+ 4 13.3333 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 2 6.6667 Xorg Xorg miDestroyPicture [self]
+ 1 3.3333 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+2 0.0014 cat cat (no symbols)
+ 2 100.000 cat cat (no symbols) [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 add_dirent_to_buf
+ 2 100.000 ext3.ko ext3 add_dirent_to_buf [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_add_entry
+ 2 100.000 ext3.ko ext3 ext3_add_entry [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_block_to_path
+ 2 100.000 ext3.ko ext3 ext3_block_to_path [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_clear_blocks
+ 2 100.000 ext3.ko ext3 ext3_clear_blocks [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_init_acl
+ 2 100.000 ext3.ko ext3 ext3_init_acl [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_mark_inode_dirty
+ 2 100.000 ext3.ko ext3 ext3_mark_inode_dirty [self]
+-------------------------------------------------------------------------------
+2 0.0014 ext3.ko ext3 ext3_permission
+ 2 100.000 ext3.ko ext3 ext3_permission [self]
+-------------------------------------------------------------------------------
+2 0.0014 gawk gawk (no symbols)
+ 2 100.000 gawk gawk (no symbols) [self]
+-------------------------------------------------------------------------------
+2 0.0014 jbd.ko jbd journal_file_buffer
+ 2 100.000 jbd.ko jbd journal_file_buffer [self]
+-------------------------------------------------------------------------------
+2 0.0014 jbd.ko jbd journal_get_write_access
+ 2 100.000 jbd.ko jbd journal_get_write_access [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+2 0.0014 ld-2.5.so ld-2.5.so _dl_cache_libcmp
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_cache_libcmp [self]
+-------------------------------------------------------------------------------
+2 0.0014 ld-2.5.so ld-2.5.so _dl_fini
+ 2 40.0000 libdl-2.5.so ld-2.5.so .fini
+ 2 40.0000 ld-2.5.so ld-2.5.so _dl_fini [self]
+ 1 20.0000 libselinux.so.1 ld-2.5.so (no symbols)
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 2 66.6667 libc-2.5.so libc-2.5.so __fopen_internal
+2 0.0014 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 2 66.6667 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1 [self]
+ 1 33.3333 libc-2.5.so libc-2.5.so __open_nocancel
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so __fopen_internal
+ 1 50.0000 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+2 0.0014 libc-2.5.so libc-2.5.so _IO_file_init@@GLIBC_2.1
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_file_init@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+2 0.0014 libc-2.5.so libc-2.5.so _IO_un_link
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_un_link [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __strtoul_internal
+2 0.0014 libc-2.5.so libc-2.5.so ____strtoul_l_internal
+ 2 100.000 libc-2.5.so libc-2.5.so ____strtoul_l_internal [self]
+-------------------------------------------------------------------------------
+2 0.0014 libc-2.5.so libc-2.5.so __close_nocancel
+ 2 100.000 libc-2.5.so libc-2.5.so __close_nocancel [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so libc-2.5.so _nl_find_locale
+2 0.0014 libc-2.5.so libc-2.5.so __open_nocancel
+ 2 100.000 libc-2.5.so libc-2.5.so __open_nocancel [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so __rpc_thread_destroy
+ 1 50.0000 libc-2.5.so libc-2.5.so setutent_file
+2 0.0014 libc-2.5.so libc-2.5.so __rpc_thread_destroy
+ 2 66.6667 libc-2.5.so libc-2.5.so __rpc_thread_destroy [self]
+ 1 33.3333 libc-2.5.so libc-2.5.so __rpc_thread_destroy
+-------------------------------------------------------------------------------
+2 0.0014 libc-2.5.so libc-2.5.so __xstat
+ 2 66.6667 libc-2.5.so libc-2.5.so __xstat [self]
+ 1 33.3333 libc-2.5.so libc-2.5.so __xstat32_conv
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+2 0.0014 libc-2.5.so libc-2.5.so _nl_intern_locale_data
+ 2 100.000 libc-2.5.so libc-2.5.so _nl_intern_locale_data [self]
+-------------------------------------------------------------------------------
+2 0.0014 libc-2.5.so libc-2.5.so bsearch
+ 3 60.0000 libgtk-x11-2.0.so.0.1000.12 libc-2.5.so (no symbols)
+ 2 40.0000 libc-2.5.so libc-2.5.so bsearch [self]
+-------------------------------------------------------------------------------
+2 0.0014 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+ 2 50.0000 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1 [self]
+ 1 25.0000 libc-2.5.so libc-2.5.so _IO_un_link
+ 1 25.0000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+-------------------------------------------------------------------------------
+2 0.0014 libc-2.5.so libc-2.5.so ftruncate
+ 2 100.000 libc-2.5.so libc-2.5.so ftruncate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so msort_with_tmp
+2 0.0014 libc-2.5.so libc-2.5.so mempcpy
+ 2 100.000 libc-2.5.so libc-2.5.so mempcpy [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+2 0.0014 libc-2.5.so libc-2.5.so munmap
+ 2 100.000 libc-2.5.so libc-2.5.so munmap [self]
+-------------------------------------------------------------------------------
+2 0.0014 libc-2.5.so libc-2.5.so strcat
+ 2 100.000 libc-2.5.so libc-2.5.so strcat [self]
+-------------------------------------------------------------------------------
+ 2818 100.000 libexa.so libexa.so exaComposite
+2 0.0014 libexa.so libexa.so ExaCheckComposite
+ 2817 99.8936 libfb.so libexa.so fbComposite
+ 2 0.0709 libexa.so libexa.so ExaCheckComposite [self]
+ 1 0.0355 libexa.so libexa.so exaFinishAccess
+-------------------------------------------------------------------------------
+2 0.0014 libextmod.so libextmod.so __i686.get_pc_thunk.bx
+ 2 100.000 libextmod.so libextmod.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+2 0.0014 libfb.so libfb.so fbRasterizeTrapezoid
+ 891 97.9121 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid
+ 14 1.5385 libfb.so libfb.so image_from_pict
+ 2 0.2198 libpixman.so.0.0.0 libfb.so pixman_image_unref
+ 2 0.2198 libfb.so libfb.so fbRasterizeTrapezoid [self]
+ 1 0.1099 libpixman.so.0.0.0 libfb.so pixman_image_set_component_alpha
+-------------------------------------------------------------------------------
+2 0.0014 libm-2.5.so libm-2.5.so ceilf
+ 2 100.000 libm-2.5.so libm-2.5.so ceilf [self]
+-------------------------------------------------------------------------------
+2 0.0014 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+ 2 66.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref [self]
+ 1 33.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __write_nocancel
+2 0.0014 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel
+ 2 100.000 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel [self]
+-------------------------------------------------------------------------------
+2 0.0014 libpthread-2.5.so libpthread-2.5.so pthread_self
+ 2 100.000 libpthread-2.5.so libpthread-2.5.so pthread_self [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux __d_path
+ 2 100.000 vmlinux vmlinux __d_path [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux __dequeue_signal
+ 2 100.000 vmlinux vmlinux __dequeue_signal [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux __make_request
+ 2 100.000 vmlinux vmlinux __make_request [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux __vma_link
+ 2 100.000 vmlinux vmlinux __vma_link [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux add_to_page_cache
+ 2 100.000 vmlinux vmlinux add_to_page_cache [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux anon_vma_unlink
+ 2 100.000 vmlinux vmlinux anon_vma_unlink [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux bio_alloc_bioset
+ 2 100.000 vmlinux vmlinux bio_alloc_bioset [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux can_vma_merge_after
+ 2 100.000 vmlinux vmlinux can_vma_merge_after [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux device_not_available
+ 2 100.000 vmlinux vmlinux device_not_available [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux dnotify_parent
+ 2 100.000 vmlinux vmlinux dnotify_parent [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux dummy_file_permission
+ 2 100.000 vmlinux vmlinux dummy_file_permission [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux dummy_inode_permission
+ 2 100.000 vmlinux vmlinux dummy_inode_permission [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux effective_prio
+ 2 100.000 vmlinux vmlinux effective_prio [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux enqueue_task
+ 2 100.000 vmlinux vmlinux enqueue_task [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux fixup_exception
+ 2 100.000 vmlinux vmlinux fixup_exception [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux flush_tlb_mm
+ 2 100.000 vmlinux vmlinux flush_tlb_mm [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux get_empty_filp
+ 2 100.000 vmlinux vmlinux get_empty_filp [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux get_signal_to_deliver
+ 2 100.000 vmlinux vmlinux get_signal_to_deliver [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux get_vmalloc_info
+ 2 100.000 vmlinux vmlinux get_vmalloc_info [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux getname
+ 2 100.000 vmlinux vmlinux getname [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux handle_IRQ_event
+ 2 100.000 vmlinux vmlinux handle_IRQ_event [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux inode_init_once
+ 2 100.000 vmlinux vmlinux inode_init_once [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux mmput
+ 2 100.000 vmlinux vmlinux mmput [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux mutex_unlock
+ 2 100.000 vmlinux vmlinux mutex_unlock [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux percpu_counter_mod
+ 2 100.000 vmlinux vmlinux percpu_counter_mod [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux prio_tree_insert
+ 2 100.000 vmlinux vmlinux prio_tree_insert [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux radix_tree_preload
+ 2 100.000 vmlinux vmlinux radix_tree_preload [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux remove_mapping
+ 2 100.000 vmlinux vmlinux remove_mapping [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux resched_task
+ 2 100.000 vmlinux vmlinux resched_task [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux run_workqueue
+ 2 100.000 vmlinux vmlinux run_workqueue [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux save_i387
+ 2 100.000 vmlinux vmlinux save_i387 [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux shrink_active_list
+ 2 100.000 vmlinux vmlinux shrink_active_list [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux skb_dequeue
+ 2 100.000 vmlinux vmlinux skb_dequeue [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux skb_queue_head
+ 2 100.000 vmlinux vmlinux skb_queue_head [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux skb_queue_tail
+ 2 100.000 vmlinux vmlinux skb_queue_tail [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sock_aio_write
+ 2 100.000 vmlinux vmlinux sock_aio_write [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sock_def_readable
+ 2 100.000 vmlinux vmlinux sock_def_readable [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sock_wfree
+ 2 100.000 vmlinux vmlinux sock_wfree [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux split_vma
+ 2 100.000 vmlinux vmlinux split_vma [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux strnlen_user
+ 2 100.000 vmlinux vmlinux strnlen_user [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sys_ftruncate
+ 2 100.000 vmlinux vmlinux sys_ftruncate [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sys_sigreturn
+ 2 100.000 vmlinux vmlinux sys_sigreturn [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux sys_write
+ 2 100.000 vmlinux vmlinux sys_write [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux test_clear_page_dirty
+ 2 100.000 vmlinux vmlinux test_clear_page_dirty [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux unix_poll
+ 2 100.000 vmlinux vmlinux unix_poll [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux unix_write_space
+ 2 100.000 vmlinux vmlinux unix_write_space [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vfs_create
+ 2 100.000 vmlinux vmlinux vfs_create [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vfs_read
+ 2 100.000 vmlinux vmlinux vfs_read [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vma_adjust
+ 2 100.000 vmlinux vmlinux vma_adjust [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vma_link
+ 2 100.000 vmlinux vmlinux vma_link [self]
+-------------------------------------------------------------------------------
+2 0.0014 vmlinux vmlinux vma_prio_tree_insert
+ 2 100.000 vmlinux vmlinux vma_prio_tree_insert [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg WaitForSomething
+1 6.8e-04 Xorg Xorg BlockHandler
+ 2 50.0000 libdri.so Xorg DRIBlockHandler
+ 1 25.0000 mouse_drv.so Xorg MouseBlockHandler
+ 1 25.0000 Xorg Xorg BlockHandler [self]
+-------------------------------------------------------------------------------
+ 30720 100.000 Xorg Xorg ProcRenderTrapezoids
+1 6.8e-04 Xorg Xorg CompositeTrapezoids
+ 30717 99.9902 Xorg Xorg miTrapezoids
+ 1 0.0033 Xorg Xorg ValidatePicture
+ 1 0.0033 Xorg Xorg CompositePicture
+ 1 0.0033 Xorg Xorg CompositeTrapezoids [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg Xorg CoreProcessPointerEvent
+ 1 50.0000 Xorg Xorg ProcessOtherEvent
+1 6.8e-04 Xorg Xorg DeliverDeviceEvents
+ 1 50.0000 Xorg Xorg DeliverEventsToWindow
+ 1 50.0000 Xorg Xorg DeliverDeviceEvents [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg FlushAllOutput
+1 6.8e-04 Xorg Xorg FlushClient
+ 1 100.000 Xorg Xorg FlushClient [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg miCompositeRects
+1 6.8e-04 Xorg Xorg PictureMatchFormat
+ 1 100.000 Xorg Xorg PictureMatchFormat [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg XaceCatchDispatchProc
+1 6.8e-04 Xorg Xorg ProcChangeGC
+ 4 66.6667 Xorg Xorg dixChangeGC
+ 1 16.6667 Xorg Xorg dixLookupGC
+ 1 16.6667 Xorg Xorg ProcChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg Xorg Dispatch
+ 6 85.7143 Xorg Xorg XaceCatchDispatchProc
+1 6.8e-04 Xorg Xorg ProcCreateGC
+ 5 71.4286 Xorg Xorg CreateGC
+ 1 14.2857 Xorg Xorg dixLookupDrawable
+ 1 14.2857 Xorg Xorg ProcCreateGC [self]
+-------------------------------------------------------------------------------
+ 1619 100.000 Xorg Xorg ProcRenderDispatch
+1 6.8e-04 Xorg Xorg ProcRenderComposite
+ 1615 99.7529 Xorg Xorg CompositePicture
+ 3 0.1853 Xorg Xorg SecurityLookupIDByType
+ 1 0.0618 Xorg Xorg ProcRenderComposite [self]
+-------------------------------------------------------------------------------
+ 1 4.5455 Xorg Xorg XaceCatchExtProc
+ 21 95.4545 Xorg Xorg ProcRenderDispatch
+1 6.8e-04 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 13 59.0909 Xorg Xorg SetPictureClipRects
+ 7 31.8182 Xorg Xorg SecurityLookupIDByType
+ 1 4.5455 Xorg Xorg Hash
+ 1 4.5455 Xorg Xorg ProcRenderSetPictureClipRectangles [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg miRegionValidate
+1 6.8e-04 Xorg Xorg QuickSortRects
+ 1 100.000 Xorg Xorg QuickSortRects [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 Xorg Xorg SmartScheduleTimer
+ 1 100.000 Xorg Xorg SmartScheduleTimer [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg TryClientEvents
+1 6.8e-04 Xorg Xorg XkbFilterEvents
+ 1 100.000 Xorg Xorg XkbFilterEvents [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg Dispatch
+ 2 66.6667 Xorg Xorg ReadRequestFromClient
+1 6.8e-04 Xorg Xorg _XSERVTransRead
+ 2 66.6667 libc-2.5.so Xorg __read_nocancel
+ 1 33.3333 Xorg Xorg _XSERVTransRead [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg FreeResource
+1 6.8e-04 Xorg Xorg damageDestroyGC
+ 1 100.000 Xorg Xorg damageDestroyGC [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 Xorg Xorg damageInsertDamage
+ 1 100.000 Xorg Xorg damageInsertDamage [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 Xorg Xorg damageRemoveDamage
+ 1 100.000 Xorg Xorg damageRemoveDamage [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg FreeGC
+ 2 66.6667 Xorg Xorg damageDestroyClip
+1 6.8e-04 Xorg Xorg miBSCheapDestroyClip
+ 2 66.6667 Xorg Xorg miDestroyClip
+ 1 33.3333 Xorg Xorg miBSCheapDestroyClip [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damageCreateGC
+1 6.8e-04 Xorg Xorg miBSCreateGC
+ 1 50.0000 libexa.so Xorg exaCreateGC
+ 1 50.0000 Xorg Xorg miBSCreateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg CreatePicture
+1 6.8e-04 Xorg Xorg miChangePicture
+ 1 100.000 Xorg Xorg miChangePicture [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcRenderSetPictureTransform
+1 6.8e-04 Xorg Xorg miChangePictureTransform
+ 1 100.000 Xorg Xorg miChangePictureTransform [self]
+-------------------------------------------------------------------------------
+ 43 100.000 Xorg Xorg miTrapezoids
+1 6.8e-04 Xorg Xorg miCreateAlphaPicture
+ 34 79.0698 Xorg Xorg damagePolyFillRect
+ 4 9.3023 libexa.so Xorg exaCreatePixmap
+ 1 2.3256 Xorg Xorg ValidateGC
+ 1 2.3256 Xorg Xorg CreatePicture
+ 1 2.3256 Xorg Xorg DamageRegister
+ 1 2.3256 libextmod.so Xorg __i686.get_pc_thunk.bx
+ 1 2.3256 Xorg Xorg miCreateAlphaPicture [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg WakeupHandler
+1 6.8e-04 Xorg Xorg xf86VTSwitchPending
+ 1 100.000 Xorg Xorg xf86VTSwitchPending [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 e1000.ko e1000 e1000_clean
+ 1 100.000 e1000.ko e1000 e1000_clean [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 .text
+ 1 100.000 ext3.ko ext3 .text [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 __ext3_journal_stop
+ 1 100.000 ext3.ko ext3 __ext3_journal_stop [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 blocks_for_truncate
+ 1 100.000 ext3.ko ext3 blocks_for_truncate [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_check_dir_entry
+ 1 100.000 ext3.ko ext3 ext3_check_dir_entry [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_dirty_inode
+ 1 100.000 ext3.ko ext3 ext3_dirty_inode [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_free_blocks_sb
+ 1 100.000 ext3.ko ext3 ext3_free_blocks_sb [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_free_data
+ 1 100.000 ext3.ko ext3 ext3_free_data [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_get_branch
+ 1 100.000 ext3.ko ext3 ext3_get_branch [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_init_security
+ 1 100.000 ext3.ko ext3 ext3_init_security [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_invalidatepage
+ 1 100.000 ext3.ko ext3 ext3_invalidatepage [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_orphan_del
+ 1 100.000 ext3.ko ext3 ext3_orphan_del [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_rsv_window_add
+ 1 100.000 ext3.ko ext3 ext3_rsv_window_add [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_truncate
+ 1 100.000 ext3.ko ext3 ext3_truncate [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ext3.ko ext3 ext3_writepage_trans_blocks
+ 1 100.000 ext3.ko ext3 ext3_writepage_trans_blocks [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 intel_drv.so intel_drv.so I830EXACopy
+ 1 100.000 intel_drv.so intel_drv.so I830EXACopy [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 jbd.ko jbd journal_grab_journal_head
+ 1 100.000 jbd.ko jbd journal_grab_journal_head [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 jbd.ko jbd journal_invalidatepage
+ 1 100.000 jbd.ko jbd journal_invalidatepage [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 jbd.ko jbd journal_remove_journal_head
+ 1 100.000 jbd.ko jbd journal_remove_journal_head [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+1 6.8e-04 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx
+ 1 100.000 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 14 100.000 ld-2.5.so ld-2.5.so _dl_runtime_resolve
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_fixup
+ 13 92.8571 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 1 7.1429 ld-2.5.so ld-2.5.so _dl_fixup [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 ld-2.5.so ld-2.5.so dl_open_worker
+ 9 90.0000 ld-2.5.so ld-2.5.so openaux
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_map_object
+ 5 50.0000 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+ 2 20.0000 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+ 1 10.0000 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx
+ 1 10.0000 ld-2.5.so ld-2.5.so access
+ 1 10.0000 ld-2.5.so ld-2.5.so _dl_map_object [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+ 1 50.0000 ld-2.5.so ld-2.5.so memset
+ 1 50.0000 ld-2.5.so ld-2.5.so _dl_map_object_from_fd [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so do_lookup_x
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 1 50.0000 ld-2.5.so ld-2.5.so strcmp
+ 1 50.0000 ld-2.5.so ld-2.5.so _dl_name_match_p [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_sysdep_start
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_new_object
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_new_object [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_close_worker
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_sort_fini
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_sort_fini [self]
+-------------------------------------------------------------------------------
+ 42 100.000 ld-2.5.so ld-2.5.so _dl_start_user
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_start
+ 41 97.6190 ld-2.5.so ld-2.5.so _dl_sysdep_start
+ 1 2.3810 ld-2.5.so ld-2.5.so _dl_start [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 ld-2.5.so ld-2.5.so _start
+ 1 100.000 ld-2.5.so ld-2.5.so _start [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+1 6.8e-04 ld-2.5.so ld-2.5.so access
+ 1 100.000 ld-2.5.so ld-2.5.so access [self]
+-------------------------------------------------------------------------------
+ 39 100.000 ld-2.5.so ld-2.5.so _dl_sysdep_start
+1 6.8e-04 ld-2.5.so ld-2.5.so dl_main
+ 28 71.7949 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 9 23.0769 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 1 2.5641 ld-2.5.so ld-2.5.so init_tls
+ 1 2.5641 ld-2.5.so ld-2.5.so dl_main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so free_mem
+1 6.8e-04 ld-2.5.so ld-2.5.so free_mem
+ 1 50.0000 ld-2.5.so ld-2.5.so free_mem
+ 1 50.0000 ld-2.5.so ld-2.5.so free_mem [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so dl_main
+1 6.8e-04 ld-2.5.so ld-2.5.so init_tls
+ 1 100.000 ld-2.5.so ld-2.5.so init_tls [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+1 6.8e-04 ld-2.5.so ld-2.5.so memset
+ 1 100.000 ld-2.5.so ld-2.5.so memset [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so openaux
+1 6.8e-04 ld-2.5.so ld-2.5.so open_verify
+ 1 100.000 ld-2.5.so ld-2.5.so open_verify [self]
+-------------------------------------------------------------------------------
+ 1 9.0909 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 10 90.9091 ld-2.5.so ld-2.5.so _dl_catch_error
+1 6.8e-04 ld-2.5.so ld-2.5.so openaux
+ 9 81.8182 ld-2.5.so ld-2.5.so _dl_map_object
+ 1 9.0909 ld-2.5.so ld-2.5.so open_verify
+ 1 9.0909 ld-2.5.so ld-2.5.so openaux [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_sysdep_start
+1 6.8e-04 ld-2.5.so ld-2.5.so process_envvars
+ 1 100.000 ld-2.5.so ld-2.5.so process_envvars [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so libc-2.5.so fwrite
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_doallocbuf
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_doallocate
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_file_stat
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_stat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_default_uflow
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so fwrite
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so vsprintf
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_setb
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_setb [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_vfscanf
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_sputbackc
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_sputbackc [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __strtod_internal
+1 6.8e-04 libc-2.5.so libc-2.5.so ____strtod_l_internal
+ 1 100.000 libc-2.5.so libc-2.5.so ____strtod_l_internal [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so ___newselect_nocancel
+ 1 100.000 libc-2.5.so libc-2.5.so ___newselect_nocancel [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so __libc_enable_asynccancel
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_enable_asynccancel [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __cxa_atexit
+1 6.8e-04 libc-2.5.so libc-2.5.so __new_exitfn
+ 1 100.000 libc-2.5.so libc-2.5.so __new_exitfn [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so __sigjmp_save
+ 1 50.0000 libc-2.5.so libc-2.5.so sigprocmask
+ 1 50.0000 libc-2.5.so libc-2.5.so __sigjmp_save [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __xstat
+1 6.8e-04 libc-2.5.so libc-2.5.so __xstat32_conv
+ 1 100.000 libc-2.5.so libc-2.5.so __xstat32_conv [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getopt_long
+1 6.8e-04 libc-2.5.so libc-2.5.so _getopt_internal
+ 1 100.000 libc-2.5.so libc-2.5.so _getopt_internal [self]
+-------------------------------------------------------------------------------
+ 3 37.5000 libc-2.5.so libc-2.5.so _nl_find_domain
+ 5 62.5000 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+1 6.8e-04 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+ 5 62.5000 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+ 1 12.5000 libc-2.5.so libc-2.5.so strcmp
+ 1 12.5000 libc-2.5.so libc-2.5.so free
+ 1 12.5000 libc-2.5.so libc-2.5.so _nl_make_l10nflist [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+1 6.8e-04 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 12 92.3077 libc-2.5.so libc-2.5.so malloc
+ 1 7.6923 libc-2.5.so libc-2.5.so _nl_normalize_codeset [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so fgets
+ 1 100.000 libc-2.5.so libc-2.5.so fgets [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so fork
+ 1 100.000 libc-2.5.so libc-2.5.so fork [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nscd_get_map_ref
+1 6.8e-04 libc-2.5.so libc-2.5.so get_mapping
+ 1 100.000 libc-2.5.so libc-2.5.so get_mapping [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so getpid
+ 1 100.000 libc-2.5.so libc-2.5.so getpid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __res_iclose
+1 6.8e-04 libc-2.5.so libc-2.5.so inet_nsap_ntoa
+ 1 100.000 libc-2.5.so libc-2.5.so inet_nsap_ntoa [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_read_conf
+1 6.8e-04 libc-2.5.so libc-2.5.so mmap
+ 1 100.000 libc-2.5.so libc-2.5.so mmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so setlocale
+1 6.8e-04 libc-2.5.so libc-2.5.so new_composite_name
+ 1 100.000 libc-2.5.so libc-2.5.so new_composite_name [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so parse_reg_exp
+1 6.8e-04 libc-2.5.so libc-2.5.so parse_expression
+ 1 100.000 libc-2.5.so libc-2.5.so parse_expression [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_compile_internal
+1 6.8e-04 libc-2.5.so libc-2.5.so peek_token
+ 1 100.000 libc-2.5.so libc-2.5.so peek_token [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so pipe
+ 1 100.000 libc-2.5.so libc-2.5.so pipe [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so random_r
+ 1 100.000 libc-2.5.so libc-2.5.so random_r [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so sbrk
+ 1 100.000 libc-2.5.so libc-2.5.so sbrk [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so setlocale
+ 18 90.0000 libc-2.5.so libc-2.5.so _nl_find_locale
+ 1 5.0000 libc-2.5.so libc-2.5.so new_composite_name
+ 1 5.0000 libc-2.5.so libc-2.5.so setlocale [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so sigemptyset
+ 1 50.0000 libc-2.5.so libc-2.5.so memset
+ 1 50.0000 libc-2.5.so libc-2.5.so sigemptyset [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so sprintf
+ 5 83.3333 libc-2.5.so libc-2.5.so vsprintf
+ 1 16.6667 libc-2.5.so libc-2.5.so sprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so strcoll
+1 6.8e-04 libc-2.5.so libc-2.5.so strcoll_l
+ 1 100.000 libc-2.5.so libc-2.5.so strcoll_l [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+1 6.8e-04 libc-2.5.so libc-2.5.so strncmp
+ 1 100.000 libc-2.5.so libc-2.5.so strncmp [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so time
+ 1 100.000 libc-2.5.so libc-2.5.so time [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libc-2.5.so libc-2.5.so trans_compare
+ 1 100.000 libc-2.5.so libc-2.5.so trans_compare [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so wctob
+1 6.8e-04 libc-2.5.so libc-2.5.so wcsrtombs
+ 1 100.000 libc-2.5.so libc-2.5.so wcsrtombs [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libcrypto.so.0.9.8 libcrypto.so.0.9.8 (no symbols)
+ 1 100.000 libcrypto.so.0.9.8 libcrypto.so.0.9.8 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 libexa.so libexa.so exaDestroyPixmap
+ 7 87.5000 libexa.so libexa.so exaOffscreenFree
+1 6.8e-04 libexa.so libexa.so ExaOffscreenMerge
+ 7 87.5000 Xorg libexa.so Xfree
+ 1 12.5000 libexa.so libexa.so ExaOffscreenMerge [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libexa.so libexa.so exaPolySegment
+ 30 96.7742 libexa.so libexa.so exaPolyFillRect
+ 1 3.2258 libexa.so libexa.so exaPolySegment [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libexa.so libexa.so exaRasterizeTrapezoid
+ 5256 84.9661 libexa.so libexa.so exaDoMigration
+ 910 14.7106 libfb.so libexa.so fbRasterizeTrapezoid
+ 7 0.1132 libexa.so libexa.so exaPixmapDirty
+ 5 0.0808 libexa.so libexa.so exaPrepareAccess
+ 3 0.0485 libexa.so libexa.so exaFinishAccess
+ 2 0.0323 libexa.so libexa.so .plt
+ 1 0.0162 libexa.so libexa.so __i686.get_pc_thunk.bx
+ 1 0.0162 libfb.so libexa.so image_from_pict
+ 1 0.0162 libexa.so libexa.so exaRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libfb.so libfb.so fbComposite
+ 2810 99.7161 libpixman.so.0.0.0 libfb.so pixman_image_composite
+ 3 0.1065 libfb.so libfb.so image_from_pict
+ 2 0.0710 Xorg libfb.so miCompositeSourceValidate
+ 1 0.0355 libpixman.so.0.0.0 libfb.so pixman_image_unref
+ 1 0.0355 libfb.so libfb.so .plt
+ 1 0.0355 libfb.so libfb.so fbComposite [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libfb.so libfb.so fbCreateGC
+ 1 100.000 libfb.so libfb.so fbCreateGC [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libfb.so libfb.so fbFillRegionSolid
+ 19 90.4762 libfb.so libfb.so fbSolid
+ 1 4.7619 libpixman.so.0.0.0 libfb.so pixman_have_mmx
+ 1 4.7619 libfb.so libfb.so fbFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8 [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+ 4 57.1429 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 1 14.2857 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+ 1 14.2857 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect
+ 1 14.2857 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_component_alpha
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_component_alpha [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_filter
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_filter [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.cx
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libpthread-2.5.so libpthread-2.5.so pthread_cond_timedwait@@GLIBC_2.3.2
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so pthread_cond_timedwait@@GLIBC_2.3.2 [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libpthread-2.5.so libpthread-2.5.so pthread_equal
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so pthread_equal [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 libselinux.so.1 libselinux.so.1 (no symbols)
+ 1 100.000 libselinux.so.1 libselinux.so.1 (no symbols) [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 mkdir mkdir (no symbols)
+ 1 100.000 mkdir mkdir (no symbols) [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 mouse_drv.so mouse_drv.so .plt
+ 1 100.000 mouse_drv.so mouse_drv.so .plt [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 mouse_drv.so mouse_drv.so MouseBlockHandler
+ 1 100.000 mouse_drv.so mouse_drv.so MouseBlockHandler [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 mouse_drv.so mouse_drv.so MouseWakeupHandler
+ 1 100.000 mouse_drv.so mouse_drv.so MouseWakeupHandler [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 oprofile.ko oprofile process_task_mortuary
+ 1 100.000 oprofile.ko oprofile process_task_mortuary [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 oprofile.ko oprofile release_mm
+ 1 100.000 oprofile.ko oprofile release_mm [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 sshd sshd (no symbols)
+ 1 100.000 sshd sshd (no symbols) [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 sudo sudo (no symbols)
+ 1 100.000 sudo sudo (no symbols) [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 usbcore.ko usbcore usb_hcd_poll_rh_status
+ 1 100.000 usbcore.ko usbcore usb_hcd_poll_rh_status [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 usbhid.ko usbhid hidinput_hid_event
+ 1 100.000 usbhid.ko usbhid hidinput_hid_event [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __anon_vma_link
+ 1 100.000 vmlinux vmlinux __anon_vma_link [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __do_page_cache_readahead
+ 1 100.000 vmlinux vmlinux __do_page_cache_readahead [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __fput
+ 1 100.000 vmlinux vmlinux __fput [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __group_complete_signal
+ 1 100.000 vmlinux vmlinux __group_complete_signal [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __mutex_init
+ 1 100.000 vmlinux vmlinux __mutex_init [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __netif_rx_schedule
+ 1 100.000 vmlinux vmlinux __netif_rx_schedule [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __pagevec_release
+ 1 100.000 vmlinux vmlinux __pagevec_release [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __pagevec_release_nonlru
+ 1 100.000 vmlinux vmlinux __pagevec_release_nonlru [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __put_task_struct
+ 1 100.000 vmlinux vmlinux __put_task_struct [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __queue_work
+ 1 100.000 vmlinux vmlinux __queue_work [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __rb_rotate_left
+ 1 100.000 vmlinux vmlinux __rb_rotate_left [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __remove_shared_vm_struct
+ 1 100.000 vmlinux vmlinux __remove_shared_vm_struct [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __tasklet_schedule
+ 1 100.000 vmlinux vmlinux __tasklet_schedule [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __user_walk_fd
+ 1 100.000 vmlinux vmlinux __user_walk_fd [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __vma_link_rb
+ 1 100.000 vmlinux vmlinux __vma_link_rb [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux __wake_up
+ 1 100.000 vmlinux vmlinux __wake_up [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux _local_bh_enable
+ 1 100.000 vmlinux vmlinux _local_bh_enable [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux account_system_time
+ 1 100.000 vmlinux vmlinux account_system_time [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux activate_page
+ 1 100.000 vmlinux vmlinux activate_page [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux add_to_page_cache_lru
+ 1 100.000 vmlinux vmlinux add_to_page_cache_lru [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux alloc_page_buffers
+ 1 100.000 vmlinux vmlinux alloc_page_buffers [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux alloc_pid
+ 1 100.000 vmlinux vmlinux alloc_pid [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux ata_scsi_translate
+ 1 100.000 vmlinux vmlinux ata_scsi_translate [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux balance_dirty_pages_ratelimited_nr
+ 1 100.000 vmlinux vmlinux balance_dirty_pages_ratelimited_nr [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux balanced_irq
+ 1 100.000 vmlinux vmlinux balanced_irq [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux bio_put
+ 1 100.000 vmlinux vmlinux bio_put [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux cache_reap
+ 1 100.000 vmlinux vmlinux cache_reap [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux check_kill_permission
+ 1 100.000 vmlinux vmlinux check_kill_permission [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux copy_files
+ 1 100.000 vmlinux vmlinux copy_files [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux copy_from_user
+ 1 100.000 vmlinux vmlinux copy_from_user [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux copy_strings
+ 1 100.000 vmlinux vmlinux copy_strings [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux cp_new_stat64
+ 1 100.000 vmlinux vmlinux cp_new_stat64 [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux d_instantiate
+ 1 100.000 vmlinux vmlinux d_instantiate [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux d_path
+ 1 100.000 vmlinux vmlinux d_path [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux d_splice_alias
+ 1 100.000 vmlinux vmlinux d_splice_alias [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux dequeue_task
+ 1 100.000 vmlinux vmlinux dequeue_task [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux dnotify_flush
+ 1 100.000 vmlinux vmlinux dnotify_flush [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux do_IRQ
+ 1 100.000 vmlinux vmlinux do_IRQ [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux do_exit
+ 1 100.000 vmlinux vmlinux do_exit [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux do_readv_writev
+ 1 100.000 vmlinux vmlinux do_readv_writev [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux do_sigaction
+ 1 100.000 vmlinux vmlinux do_sigaction [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux do_sys_ftruncate
+ 1 100.000 vmlinux vmlinux do_sys_ftruncate [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux do_sys_open
+ 1 100.000 vmlinux vmlinux do_sys_open [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux do_truncate
+ 1 100.000 vmlinux vmlinux do_truncate [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux down_read
+ 1 100.000 vmlinux vmlinux down_read [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux down_write
+ 1 100.000 vmlinux vmlinux down_write [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux dup_fd
+ 1 100.000 vmlinux vmlinux dup_fd [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux exec_keys
+ 1 100.000 vmlinux vmlinux exec_keys [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux file_kill
+ 1 100.000 vmlinux vmlinux file_kill [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux find_inode_fast
+ 1 100.000 vmlinux vmlinux find_inode_fast [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux find_mergeable_anon_vma
+ 1 100.000 vmlinux vmlinux find_mergeable_anon_vma [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux find_or_create_page
+ 1 100.000 vmlinux vmlinux find_or_create_page [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux free_buffer_head
+ 1 100.000 vmlinux vmlinux free_buffer_head [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux free_pgd_range
+ 1 100.000 vmlinux vmlinux free_pgd_range [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux generic_commit_write
+ 1 100.000 vmlinux vmlinux generic_commit_write [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux generic_file_buffered_write
+ 1 100.000 vmlinux vmlinux generic_file_buffered_write [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux generic_file_mmap
+ 1 100.000 vmlinux vmlinux generic_file_mmap [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux generic_file_open
+ 1 100.000 vmlinux vmlinux generic_file_open [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux generic_fillattr
+ 1 100.000 vmlinux vmlinux generic_fillattr [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux generic_make_request
+ 1 100.000 vmlinux vmlinux generic_make_request [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux get_dcookie
+ 1 100.000 vmlinux vmlinux get_dcookie [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux get_index
+ 1 100.000 vmlinux vmlinux get_index [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux get_task_mm
+ 1 100.000 vmlinux vmlinux get_task_mm [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux get_write_access
+ 1 100.000 vmlinux vmlinux get_write_access [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux handle_stop_signal
+ 1 100.000 vmlinux vmlinux handle_stop_signal [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux hrtimer_forward
+ 1 100.000 vmlinux vmlinux hrtimer_forward [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux init_page_buffers
+ 1 100.000 vmlinux vmlinux init_page_buffers [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux init_request_from_bio
+ 1 100.000 vmlinux vmlinux init_request_from_bio [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux inode_change_ok
+ 1 100.000 vmlinux vmlinux inode_change_ok [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux input_event
+ 1 100.000 vmlinux vmlinux input_event [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux kernel_read
+ 1 100.000 vmlinux vmlinux kernel_read [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux kref_put
+ 1 100.000 vmlinux vmlinux kref_put [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux ll_back_merge_fn
+ 1 100.000 vmlinux vmlinux ll_back_merge_fn [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux ll_rw_block
+ 1 100.000 vmlinux vmlinux ll_rw_block [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux load_elf_binary
+ 1 100.000 vmlinux vmlinux load_elf_binary [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux lock_timer_base
+ 1 100.000 vmlinux vmlinux lock_timer_base [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux locks_remove_flock
+ 1 100.000 vmlinux vmlinux locks_remove_flock [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux locks_remove_posix
+ 1 100.000 vmlinux vmlinux locks_remove_posix [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux lookup_hash
+ 1 100.000 vmlinux vmlinux lookup_hash [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux lru_add_drain
+ 1 100.000 vmlinux vmlinux lru_add_drain [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux lru_cache_add
+ 1 100.000 vmlinux vmlinux lru_cache_add [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux may_expand_vm
+ 1 100.000 vmlinux vmlinux may_expand_vm [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux memcpy_fromiovec
+ 1 100.000 vmlinux vmlinux memcpy_fromiovec [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux memcpy_toiovec
+ 1 100.000 vmlinux vmlinux memcpy_toiovec [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux mod_timer
+ 1 100.000 vmlinux vmlinux mod_timer [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux mutex_trylock
+ 1 100.000 vmlinux vmlinux mutex_trylock [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux mwait_idle
+ 1 100.000 vmlinux vmlinux mwait_idle [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux note_interrupt
+ 1 100.000 vmlinux vmlinux note_interrupt [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux notify_change
+ 1 100.000 vmlinux vmlinux notify_change [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux open_namei
+ 1 100.000 vmlinux vmlinux open_namei [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux page_referenced
+ 1 100.000 vmlinux vmlinux page_referenced [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux page_waitqueue
+ 1 100.000 vmlinux vmlinux page_waitqueue [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux pipe_read
+ 1 100.000 vmlinux vmlinux pipe_read [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux prepare_binprm
+ 1 100.000 vmlinux vmlinux prepare_binprm [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux prio_tree_replace
+ 1 100.000 vmlinux vmlinux prio_tree_replace [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux proc_lookup
+ 1 100.000 vmlinux vmlinux proc_lookup [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux profile_hit
+ 1 100.000 vmlinux vmlinux profile_hit [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux prune_one_dentry
+ 1 100.000 vmlinux vmlinux prune_one_dentry [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux put_files_struct
+ 1 100.000 vmlinux vmlinux put_files_struct [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux put_page
+ 1 100.000 vmlinux vmlinux put_page [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux put_pid
+ 1 100.000 vmlinux vmlinux put_pid [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux radix_tree_tag_clear
+ 1 100.000 vmlinux vmlinux radix_tree_tag_clear [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux rb_insert_color
+ 1 100.000 vmlinux vmlinux rb_insert_color [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux rb_next
+ 1 100.000 vmlinux vmlinux rb_next [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux rcu_process_callbacks
+ 1 100.000 vmlinux vmlinux rcu_process_callbacks [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux recalc_task_prio
+ 1 100.000 vmlinux vmlinux recalc_task_prio [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux refresh_cpu_vm_stats
+ 1 100.000 vmlinux vmlinux refresh_cpu_vm_stats [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux remove_vma
+ 1 100.000 vmlinux vmlinux remove_vma [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux run_posix_cpu_timers
+ 1 100.000 vmlinux vmlinux run_posix_cpu_timers [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux schedule_timeout
+ 1 100.000 vmlinux vmlinux schedule_timeout [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux scsi_decide_disposition
+ 1 100.000 vmlinux vmlinux scsi_decide_disposition [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux second_overflow
+ 1 100.000 vmlinux vmlinux second_overflow [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux send_group_sig_info
+ 1 100.000 vmlinux vmlinux send_group_sig_info [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux seq_path
+ 1 100.000 vmlinux vmlinux seq_path [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux set_bh_page
+ 1 100.000 vmlinux vmlinux set_bh_page [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux show_vfsmnt
+ 1 100.000 vmlinux vmlinux show_vfsmnt [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux shrink_dcache_parent
+ 1 100.000 vmlinux vmlinux shrink_dcache_parent [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux sigprocmask
+ 1 100.000 vmlinux vmlinux sigprocmask [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux sys_fcntl64
+ 1 100.000 vmlinux vmlinux sys_fcntl64 [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux sys_fstat64
+ 1 100.000 vmlinux vmlinux sys_fstat64 [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux sys_mmap2
+ 1 100.000 vmlinux vmlinux sys_mmap2 [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux sys_munmap
+ 1 100.000 vmlinux vmlinux sys_munmap [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux sys_select
+ 1 100.000 vmlinux vmlinux sys_select [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux sys_writev
+ 1 100.000 vmlinux vmlinux sys_writev [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux tasklet_action
+ 1 100.000 vmlinux vmlinux tasklet_action [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux timespec_trunc
+ 1 100.000 vmlinux vmlinux timespec_trunc [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux try_to_wake_up
+ 1 100.000 vmlinux vmlinux try_to_wake_up [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux tsc_update_callback
+ 1 100.000 vmlinux vmlinux tsc_update_callback [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux unix_stream_connect
+ 1 100.000 vmlinux vmlinux unix_stream_connect [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux unmap_region
+ 1 100.000 vmlinux vmlinux unmap_region [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux up_write
+ 1 100.000 vmlinux vmlinux up_write [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux vfs_getattr
+ 1 100.000 vmlinux vmlinux vfs_getattr [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux vfs_llseek
+ 1 100.000 vmlinux vmlinux vfs_llseek [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux vfs_mkdir
+ 1 100.000 vmlinux vmlinux vfs_mkdir [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux vfs_stat_fd
+ 1 100.000 vmlinux vmlinux vfs_stat_fd [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux vfs_writev
+ 1 100.000 vmlinux vmlinux vfs_writev [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux vma_merge
+ 1 100.000 vmlinux vmlinux vma_merge [self]
+-------------------------------------------------------------------------------
+1 6.8e-04 vmlinux vmlinux wake_up_bit
+ 1 100.000 vmlinux vmlinux wake_up_bit [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg CreateGC
+0 0 Xorg Xorg AllocateGC
+ 1 100.000 Xorg Xorg Xalloc
+ 0 0 Xorg Xorg AllocateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcessPointerEvent
+0 0 Xorg Xorg CoreProcessPointerEvent
+ 1 100.000 Xorg Xorg DeliverDeviceEvents
+ 0 0 Xorg Xorg CoreProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg DeliverDeviceEvents
+0 0 Xorg Xorg DeliverEventsToWindow
+ 1 100.000 Xorg Xorg TryClientEvents
+ 0 0 Xorg Xorg DeliverEventsToWindow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg Dispatch
+0 0 Xorg Xorg FlushAllOutput
+ 1 100.000 Xorg Xorg FlushClient
+ 0 0 Xorg Xorg FlushAllOutput [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg FreeResource
+0 0 Xorg Xorg FreeGC
+ 2 33.3333 Xorg Xorg damageDestroyClip
+ 2 33.3333 libextmod.so Xorg XvDestroyPixmap
+ 1 16.6667 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 16.6667 Xorg Xorg miBSCheapDestroyClip
+ 0 0 Xorg Xorg FreeGC [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcCopyArea
+ 5 71.4286 Xorg Xorg damageCopyArea
+ 2 28.5714 Xorg Xorg ValidateGC
+ 0 0 Xorg Xorg ProcCopyArea [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcFreeGC
+ 8 100.000 Xorg Xorg FreeResource
+ 0 0 Xorg Xorg ProcFreeGC [self]
+-------------------------------------------------------------------------------
+ 49 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcPolySegment
+ 37 75.5102 Xorg Xorg damagePolySegment
+ 7 14.2857 Xorg Xorg ValidateGC
+ 3 6.1224 Xorg Xorg dixLookupDrawable
+ 2 4.0816 Xorg Xorg dixLookupGC
+ 0 0 Xorg Xorg ProcPolySegment [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg Dispatch
+0 0 Xorg Xorg ProcessInputEvents
+ 2 100.000 Xorg Xorg mieqProcessInputEvents
+ 0 0 Xorg Xorg ProcessInputEvents [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg mieqProcessInputEvents
+0 0 Xorg Xorg ProcessOtherEvent
+ 1 100.000 Xorg Xorg DeliverDeviceEvents
+ 0 0 Xorg Xorg ProcessOtherEvent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg mieqProcessInputEvents
+0 0 Xorg Xorg ProcessPointerEvent
+ 1 100.000 Xorg Xorg CoreProcessPointerEvent
+ 0 0 Xorg Xorg ProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 11 100.000 Xorg Xorg ProcSetClipRectangles
+0 0 Xorg Xorg SetClipRects
+ 9 81.8182 Xorg Xorg damageChangeClip
+ 1 9.0909 Xorg Xorg damageChangeGC
+ 1 9.0909 Xorg Xorg Xalloc
+ 0 0 Xorg Xorg SetClipRects [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg DeliverEventsToWindow
+0 0 Xorg Xorg TryClientEvents
+ 1 100.000 Xorg Xorg XkbFilterEvents
+ 0 0 Xorg Xorg TryClientEvents [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg Dispatch
+0 0 Xorg Xorg WaitForSomething
+ 4 66.6667 Xorg Xorg BlockHandler
+ 1 16.6667 Xorg Xorg WakeupHandler
+ 1 16.6667 mouse_drv.so Xorg MouseWakeupHandler
+ 0 0 Xorg Xorg WaitForSomething [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg WaitForSomething
+0 0 Xorg Xorg WakeupHandler
+ 1 100.000 Xorg Xorg xf86VTSwitchPending
+ 0 0 Xorg Xorg WakeupHandler [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg XisbRead
+ 1 50.0000 libc-2.5.so Xorg __read_nocancel
+ 1 50.0000 libc-2.5.so Xorg ___newselect_nocancel
+ 0 0 Xorg Xorg XisbRead [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg _start
+ 91197 100.000 libc-2.5.so Xorg __libc_start_main
+ 0 0 Xorg Xorg _start [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg ProcCopyArea
+0 0 Xorg Xorg damageCopyArea
+ 4 80.0000 libexa.so Xorg exaCopyArea
+ 1 20.0000 Xorg Xorg damageDamageBox
+ 0 0 Xorg Xorg damageCopyArea [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg CreateGC
+0 0 Xorg Xorg damageCreateGC
+ 2 100.000 Xorg Xorg miBSCreateGC
+ 0 0 Xorg Xorg damageCreateGC [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg FreeGC
+0 0 Xorg Xorg damageDestroyClip
+ 2 100.000 Xorg Xorg miBSCheapDestroyClip
+ 0 0 Xorg Xorg damageDestroyClip [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg main
+ 91200 99.9748 Xorg Xorg Dispatch
+ 10 0.0110 Xorg Xorg XaceHook
+ 9 0.0099 Xorg Xorg XaceCatchDispatchProc
+ 3 0.0033 Xorg Xorg ReadRequestFromClient
+ 1 0.0011 Xorg Xorg XaceCatchExtProc
+ 0 0 Xorg Xorg main [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg miColorRects
+0 0 Xorg Xorg miRegionCopy
+ 2 100.000 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 0 0 Xorg Xorg miRegionCopy [self]
+-------------------------------------------------------------------------------
+ 30717 100.000 Xorg Xorg CompositeTrapezoids
+0 0 Xorg Xorg miTrapezoids
+ 24430 79.5247 Xorg Xorg CompositePicture
+ 6185 20.1335 libexa.so Xorg exaRasterizeTrapezoid
+ 43 0.1400 Xorg Xorg miCreateAlphaPicture
+ 30 0.0977 Xorg Xorg miTrapezoidBounds
+ 30 0.0977 Xorg Xorg FreePicture
+ 1 0.0033 libextmod.so Xorg XvDestroyPixmap
+ 1 0.0033 libexa.so Xorg .plt
+ 0 0 Xorg Xorg miTrapezoids [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg ProcessInputEvents
+0 0 Xorg Xorg mieqProcessInputEvents
+ 1 50.0000 Xorg Xorg ProcessOtherEvent
+ 1 50.0000 Xorg Xorg ProcessPointerEvent
+ 0 0 Xorg Xorg mieqProcessInputEvents [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg xf86SIGIO
+ 3 100.000 Xorg Xorg xf86SigioReadInput
+ 0 0 Xorg Xorg xf86SIGIO [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg xf86SIGIO
+0 0 Xorg Xorg xf86SigioReadInput
+ 2 66.6667 mouse_drv.so Xorg MouseReadInput
+ 1 33.3333 mouse_drv.so Xorg .plt
+ 0 0 Xorg Xorg xf86SigioReadInput [self]
+-------------------------------------------------------------------------------
+ 49 100.000 intel_drv.so intel_drv.so I830WaitLpRing
+0 0 Xorg intel_drv.so .plt
+ 0 0 Xorg intel_drv.so .plt [self]
+-------------------------------------------------------------------------------
+ 127 10.1034 intel_drv.so intel_drv.so I830Sync
+ 1130 89.8966 intel_drv.so intel_drv.so I830WaitLpRing
+0 0 Xorg intel_drv.so GetTimeInMillis
+ 0 0 Xorg intel_drv.so GetTimeInMillis [self]
+-------------------------------------------------------------------------------
+ 62 100.000 intel_drv.so intel_drv.so I830WaitLpRing
+0 0 Xorg intel_drv.so __i686.get_pc_thunk.bx
+ 0 0 Xorg intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 91211 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 Xorg libc-2.5.so main
+ 0 0 Xorg libc-2.5.so main [self]
+-------------------------------------------------------------------------------
+ 1 0.8696 libexa.so libexa.so exaMoveInPixmap
+ 1 0.8696 libexa.so libexa.so exaOffscreenAlloc
+ 3 2.6087 libexa.so libexa.so exaCopyDirtyToSys
+ 9 7.8261 libexa.so libexa.so exaPixmapDirty
+ 101 87.8261 libexa.so libexa.so exaTryDriverComposite
+0 0 Xorg libexa.so .plt
+ 0 0 Xorg libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so AllocatePicture
+ 0 0 Xorg libexa.so AllocatePicture [self]
+-------------------------------------------------------------------------------
+ 39 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so CreatePicture
+ 0 0 Xorg libexa.so CreatePicture [self]
+-------------------------------------------------------------------------------
+ 1 3.2258 libexa.so libexa.so exaGlyphs
+ 30 96.7742 libexa.so libexa.so exaCreatePixmap
+0 0 Xorg libexa.so DamageCreate
+ 0 0 Xorg libexa.so DamageCreate [self]
+-------------------------------------------------------------------------------
+ 3 5.2632 libexa.so libexa.so exaMoveOutPixmap
+ 3 5.2632 libexa.so libexa.so exaDoMigration
+ 22 38.5965 libexa.so libexa.so exaMoveInPixmap
+ 29 50.8772 libexa.so libexa.so exaCopyDirtyToSys
+0 0 Xorg libexa.so DamageEmpty
+ 0 0 Xorg libexa.so DamageEmpty [self]
+-------------------------------------------------------------------------------
+ 1 2.8571 libexa.so libexa.so exaCopyNtoN
+ 1 2.8571 libexa.so libexa.so exaMoveInPixmap
+ 2 5.7143 libexa.so libexa.so exaComposite
+ 3 8.5714 libexa.so libexa.so exaCopyDirtyToSys
+ 3 8.5714 libexa.so libexa.so exaDoMigration
+ 4 11.4286 libexa.so libexa.so exaMoveOutPixmap
+ 9 25.7143 libexa.so libexa.so exaPixmapDirty
+ 12 34.2857 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so DamageRegion
+ 0 0 Xorg libexa.so DamageRegion [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libexa.so libexa.so exaCreatePixmap
+0 0 Xorg libexa.so DamageRegister
+ 0 0 Xorg libexa.so DamageRegister [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so DamageSetReportAfterOp
+ 0 0 Xorg libexa.so DamageSetReportAfterOp [self]
+-------------------------------------------------------------------------------
+ 54 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so FreePicture
+ 0 0 Xorg libexa.so FreePicture [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so FreeScratchGC
+ 0 0 Xorg libexa.so FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so FreeScratchPixmapHeader
+ 0 0 Xorg libexa.so FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so GetScratchGC
+ 0 0 Xorg libexa.so GetScratchGC [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so GetScratchPixmapHeader
+ 0 0 Xorg libexa.so GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 27 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so ValidateGC
+ 0 0 Xorg libexa.so ValidateGC [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so ValidatePicture
+ 0 0 Xorg libexa.so ValidatePicture [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libexa.so libexa.so exaOffscreenAlloc
+0 0 Xorg libexa.so Xalloc
+ 0 0 Xorg libexa.so Xalloc [self]
+-------------------------------------------------------------------------------
+ 1 7.1429 libexa.so libexa.so exaGlyphs
+ 2 14.2857 libexa.so libexa.so exaPolyFillRect
+ 4 28.5714 libexa.so libexa.so exaDestroyPixmap
+ 7 50.0000 libexa.so libexa.so ExaOffscreenMerge
+0 0 Xorg libexa.so Xfree
+ 0 0 Xorg libexa.so Xfree [self]
+-------------------------------------------------------------------------------
+ 1 1.9608 libexa.so libexa.so exaCreatePixmap
+ 3 5.8824 libexa.so libexa.so exaCopyDirtyToSys
+ 7 13.7255 libexa.so libexa.so exaMoveInPixmap
+ 7 13.7255 libexa.so libexa.so exaGlyphs
+ 15 29.4118 libexa.so libexa.so exaTryDriverComposite
+ 18 35.2941 libexa.so libexa.so exaPixmapDirty
+0 0 Xorg libexa.so __i686.get_pc_thunk.bx
+ 0 0 Xorg libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so damageInsertDamage
+ 0 0 Xorg libexa.so damageInsertDamage [self]
+-------------------------------------------------------------------------------
+ 20 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so damagePolyFillRect
+ 0 0 Xorg libexa.so damagePolyFillRect [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 Xorg libexa.so miCompositeSourceValidate
+ 0 0 Xorg libexa.so miCompositeSourceValidate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaValidateGC
+0 0 Xorg libexa.so miComputeCompositeClip
+ 0 0 Xorg libexa.so miComputeCompositeClip [self]
+-------------------------------------------------------------------------------
+ 28 1.6777 libexa.so libexa.so exaComposite
+ 1641 98.3223 libexa.so libexa.so exaTryDriverComposite
+0 0 Xorg libexa.so miComputeCompositeRegion
+ 0 0 Xorg libexa.so miComputeCompositeRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so miDestroyPicture
+ 0 0 Xorg libexa.so miDestroyPicture [self]
+-------------------------------------------------------------------------------
+ 11 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so miGlyphExtents
+ 0 0 Xorg libexa.so miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miIntersect
+ 0 0 Xorg libexa.so miIntersect [self]
+-------------------------------------------------------------------------------
+ 170 100.000 libexa.so libexa.so exaGlyphs
+0 0 Xorg libexa.so miModifyPixmapHeader
+ 0 0 Xorg libexa.so miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 30 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miRectsToRegion
+ 0 0 Xorg libexa.so miRectsToRegion [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miRegionDestroy
+ 0 0 Xorg libexa.so miRegionDestroy [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miRegionValidate
+ 0 0 Xorg libexa.so miRegionValidate [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so libexa.so exaCopyArea
+0 0 Xorg libexa.so miSpriteSourceValidate
+ 0 0 Xorg libexa.so miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 Xorg libexa.so miTranslateRegion
+ 0 0 Xorg libexa.so miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 2 0.0527 libexa.so libexa.so exaMoveOutPixmap
+ 2 0.0527 libexa.so libexa.so exaComposite
+ 3 0.0791 libexa.so libexa.so exaDoMigration
+ 4 0.1055 libexa.so libexa.so exaGlyphs
+ 13 0.3428 libexa.so libexa.so exaCopyNtoN
+ 43 1.1340 libexa.so libexa.so exaCopyDirtyToSys
+ 990 26.1076 libexa.so libexa.so exaMoveInPixmap
+ 2735 72.1255 libexa.so libexa.so exaPixmapDirty
+0 0 Xorg libexa.so miUnion
+ 0 0 Xorg libexa.so miUnion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 Xorg libextmod.so __i686.get_pc_thunk.bx
+ 0 0 Xorg libextmod.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 149 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 Xorg libextmod.so damageDestroyPixmap
+ 0 0 Xorg libextmod.so damageDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 Xorg libextmod.so damageRemoveDamage
+ 0 0 Xorg libextmod.so damageRemoveDamage [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbDestroyPixmap
+0 0 Xorg libfb.so .plt
+ 0 0 Xorg libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 5 5.3191 libfb.so libfb.so fbCreatePixmap
+ 89 94.6809 libfb.so libfb.so fbCreatePixmapBpp
+0 0 Xorg libfb.so AllocatePixmap
+ 0 0 Xorg libfb.so AllocatePixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbCreatePixmapBpp
+0 0 Xorg libfb.so Xalloc
+ 0 0 Xorg libfb.so Xalloc [self]
+-------------------------------------------------------------------------------
+ 20 100.000 libfb.so libfb.so fbDestroyPixmap
+0 0 Xorg libfb.so Xfree
+ 0 0 Xorg libfb.so Xfree [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libfb.so libfb.so fbDoCopy
+0 0 Xorg libfb.so __i686.get_pc_thunk.bx
+ 0 0 Xorg libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbComposite
+0 0 Xorg libfb.so miCompositeSourceValidate
+ 0 0 Xorg libfb.so miCompositeSourceValidate [self]
+-------------------------------------------------------------------------------
+ 26 100.000 libfb.so libfb.so fbValidateGC
+0 0 Xorg libfb.so miComputeCompositeClip
+ 0 0 Xorg libfb.so miComputeCompositeClip [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbValidateGC
+0 0 Xorg libfb.so miIntersect
+ 0 0 Xorg libfb.so miIntersect [self]
+-------------------------------------------------------------------------------
+ 53 100.000 libfb.so libfb.so fbDoCopy
+0 0 Xorg libfb.so miSpriteSourceValidate
+ 0 0 Xorg libfb.so miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbValidateGC
+0 0 Xorg libfb.so miTranslateRegion
+ 0 0 Xorg libfb.so miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 2 100.000 mouse_drv.so mouse_drv.so MouseReadInput
+0 0 Xorg mouse_drv.so XisbRead
+ 0 0 Xorg mouse_drv.so XisbRead [self]
+-------------------------------------------------------------------------------
+ 1 100.000 intel_drv.so intel_drv.so I830Sync
+0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) intel_drv.so (no symbols)
+ 0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) intel_drv.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libexa.so libexa.so exaMemcpyBox
+ 1 33.3333 libexa.so libexa.so exaTryDriverComposite
+ 1 33.3333 libexa.so libexa.so exaComposite
+0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) libexa.so (no symbols)
+ 0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) libexa.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) libpixman.so.0.0.0 (no symbols)
+ 0 0 anon (tgid:5961 range:0xb7f92000-0xb7f93000) libpixman.so.0.0.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 0.3906 libc-2.5.so libc-2.5.so _IO_wfile_seekoff
+ 255 99.6094 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 bash libc-2.5.so (no symbols)
+ 0 0 bash libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 cat libc-2.5.so (no symbols)
+ 0 0 cat libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 dirname libc-2.5.so (no symbols)
+ 0 0 dirname libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 expr libc-2.5.so (no symbols)
+ 0 0 expr libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 629 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 firefox-bin libc-2.5.so (no symbols)
+ 0 0 firefox-bin libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 gawk libc-2.5.so (no symbols)
+ 0 0 gawk libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 4.1667 libc-2.5.so libc-2.5.so exit
+ 23 95.8333 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 grep libc-2.5.so (no symbols)
+ 0 0 grep libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libdri.so libdri.so DRIDoBlockHandler
+0 0 intel_drv.so libdri.so __i686.get_pc_thunk.bx
+ 0 0 intel_drv.so libdri.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 0.8475 libexa.so libexa.so exaFillRegionSolid
+ 7 5.9322 libexa.so libexa.so exaWaitSync
+ 110 93.2203 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so .plt
+ 0 0 intel_drv.so libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaCopyNtoN
+0 0 intel_drv.so libexa.so I830EXACopy
+ 0 0 intel_drv.so libexa.so I830EXACopy [self]
+-------------------------------------------------------------------------------
+ 5 19.2308 libexa.so libexa.so exaPolyFillRect
+ 21 80.7692 libexa.so libexa.so exaFillRegionSolid
+0 0 intel_drv.so libexa.so I830EXAPrepareSolid
+ 0 0 intel_drv.so libexa.so I830EXAPrepareSolid [self]
+-------------------------------------------------------------------------------
+ 2 4.8780 libexa.so libexa.so exaPolyFillRect
+ 39 95.1220 libexa.so libexa.so exaFillRegionSolid
+0 0 intel_drv.so libexa.so I830EXASolid
+ 0 0 intel_drv.so libexa.so I830EXASolid [self]
+-------------------------------------------------------------------------------
+ 3 0.0136 libexa.so libexa.so exaPrepareAccess
+ 22008 99.9864 libexa.so libexa.so exaWaitSync
+0 0 intel_drv.so libexa.so I830EXASync
+ 0 0 intel_drv.so libexa.so I830EXASync [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libexa.so libexa.so exaWaitSync
+0 0 intel_drv.so libexa.so I830Sync
+ 0 0 intel_drv.so libexa.so I830Sync [self]
+-------------------------------------------------------------------------------
+ 14 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so IntelEmitInvarientState
+ 0 0 intel_drv.so libexa.so IntelEmitInvarientState [self]
+-------------------------------------------------------------------------------
+ 2 3.8462 libexa.so libexa.so exaFillRegionSolid
+ 6 11.5385 libexa.so libexa.so exaWaitSync
+ 9 17.3077 libexa.so libexa.so exaComposite
+ 35 67.3077 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so __i686.get_pc_thunk.bx
+ 0 0 intel_drv.so libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i830MarkSync
+ 0 0 intel_drv.so libexa.so i830MarkSync [self]
+-------------------------------------------------------------------------------
+ 25 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i830WaitSync
+ 0 0 intel_drv.so libexa.so i830WaitSync [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libexa.so libexa.so exaComposite
+0 0 intel_drv.so libexa.so i830_done_composite
+ 0 0 intel_drv.so libexa.so i830_done_composite [self]
+-------------------------------------------------------------------------------
+ 37 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i830_get_transformed_coordinates
+ 0 0 intel_drv.so libexa.so i830_get_transformed_coordinates [self]
+-------------------------------------------------------------------------------
+ 13 3.2099 libexa.so libexa.so exaGlyphs
+ 159 39.2593 libexa.so libexa.so exaComposite
+ 233 57.5309 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_check_composite
+ 0 0 intel_drv.so libexa.so i965_check_composite [self]
+-------------------------------------------------------------------------------
+ 15 39.4737 libexa.so libexa.so exaComposite
+ 23 60.5263 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_check_composite_texture
+ 0 0 intel_drv.so libexa.so i965_check_composite_texture [self]
+-------------------------------------------------------------------------------
+ 720 15.8068 libexa.so libexa.so exaComposite
+ 3835 84.1932 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_composite
+ 0 0 intel_drv.so libexa.so i965_composite [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_get_card_format
+ 0 0 intel_drv.so libexa.so i965_get_card_format [self]
+-------------------------------------------------------------------------------
+ 7 35.0000 libexa.so libexa.so exaComposite
+ 13 65.0000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_get_dest_format
+ 0 0 intel_drv.so libexa.so i965_get_dest_format [self]
+-------------------------------------------------------------------------------
+ 11 0.0407 libexa.so libexa.so exaComposite
+ 27000 99.9593 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so i965_prepare_composite
+ 0 0 intel_drv.so libexa.so i965_prepare_composite [self]
+-------------------------------------------------------------------------------
+ 21 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so intel_get_pixmap_offset
+ 0 0 intel_drv.so libexa.so intel_get_pixmap_offset [self]
+-------------------------------------------------------------------------------
+ 46 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 intel_drv.so libexa.so intel_get_pixmap_pitch
+ 0 0 intel_drv.so libexa.so intel_get_pixmap_pitch [self]
+-------------------------------------------------------------------------------
+ 10 50.0000 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 10 50.0000 ld-2.5.so ld-2.5.so _dl_open
+0 0 ld-2.5.so ld-2.5.so _dl_catch_error
+ 10 32.2581 ld-2.5.so ld-2.5.so openaux
+ 10 32.2581 ld-2.5.so ld-2.5.so dl_open_worker
+ 5 16.1290 libc-2.5.so ld-2.5.so do_dlopen
+ 5 16.1290 libdl-2.5.so ld-2.5.so dlopen_doit
+ 1 3.2258 libdl-2.5.so ld-2.5.so dlclose_doit
+ 0 0 ld-2.5.so ld-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_close
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_close_worker
+ 0 0 ld-2.5.so ld-2.5.so _dl_close [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_close
+0 0 ld-2.5.so ld-2.5.so _dl_close_worker
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_sort_fini
+ 0 0 ld-2.5.so ld-2.5.so _dl_close_worker [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 ld-2.5.so ld-2.5.so dl_open_worker
+ 8 88.8889 ld-2.5.so ld-2.5.so _dl_start_user
+0 0 ld-2.5.so ld-2.5.so _dl_init_internal
+ 9 100.000 ld-2.5.so ld-2.5.so call_init
+ 0 0 ld-2.5.so ld-2.5.so _dl_init_internal [self]
+-------------------------------------------------------------------------------
+ 2 18.1818 ld-2.5.so ld-2.5.so dl_open_worker
+ 9 81.8182 ld-2.5.so ld-2.5.so dl_main
+0 0 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 10 90.9091 ld-2.5.so ld-2.5.so _dl_catch_error
+ 1 9.0909 ld-2.5.so ld-2.5.so openaux
+ 0 0 ld-2.5.so ld-2.5.so _dl_map_object_deps [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_open
+ 10 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so ld-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_runtime_resolve
+ 14 100.000 ld-2.5.so ld-2.5.so _dl_fixup
+ 0 0 ld-2.5.so ld-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_start_user
+ 42 84.0000 ld-2.5.so ld-2.5.so _dl_start
+ 8 16.0000 ld-2.5.so ld-2.5.so _dl_init_internal
+ 0 0 ld-2.5.so ld-2.5.so _dl_start_user [self]
+-------------------------------------------------------------------------------
+ 41 100.000 ld-2.5.so ld-2.5.so _dl_start
+0 0 ld-2.5.so ld-2.5.so _dl_sysdep_start
+ 39 95.1220 ld-2.5.so ld-2.5.so dl_main
+ 1 2.4390 ld-2.5.so ld-2.5.so process_envvars
+ 1 2.4390 ld-2.5.so ld-2.5.so _dl_new_object
+ 0 0 ld-2.5.so ld-2.5.so _dl_sysdep_start [self]
+-------------------------------------------------------------------------------
+ 9 100.000 ld-2.5.so ld-2.5.so _dl_init_internal
+0 0 ld-2.5.so ld-2.5.so call_init
+ 9 100.000 libselinux.so.1 ld-2.5.so (no symbols)
+ 0 0 ld-2.5.so ld-2.5.so call_init [self]
+-------------------------------------------------------------------------------
+ 10 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 ld-2.5.so ld-2.5.so dl_open_worker
+ 6 60.0000 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 2 20.0000 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 1 10.0000 ld-2.5.so ld-2.5.so _dl_map_object
+ 1 10.0000 ld-2.5.so ld-2.5.so _dl_init_internal
+ 0 0 ld-2.5.so ld-2.5.so dl_open_worker [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so __libc_dlopen_mode
+0 0 ld-2.5.so libc-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so libc-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so exit
+0 0 ld-2.5.so libc-2.5.so _dl_fini
+ 0 0 ld-2.5.so libc-2.5.so _dl_fini [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so do_dlopen
+0 0 ld-2.5.so libc-2.5.so _dl_open
+ 0 0 ld-2.5.so libc-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libc-2.5.so libc-2.5.so re_compile_pattern
+ 4 80.0000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 ld-2.5.so libc-2.5.so _dl_runtime_resolve
+ 0 0 ld-2.5.so libc-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libdl-2.5.so libdl-2.5.so _dlerror_run
+0 0 ld-2.5.so libdl-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so libdl-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libdl-2.5.so libdl-2.5.so dlclose_doit
+0 0 ld-2.5.so libdl-2.5.so _dl_close
+ 0 0 ld-2.5.so libdl-2.5.so _dl_close [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libdl-2.5.so libdl-2.5.so dlopen_doit
+0 0 ld-2.5.so libdl-2.5.so _dl_open
+ 0 0 ld-2.5.so libdl-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libdl-2.5.so libdl-2.5.so .fini
+0 0 ld-2.5.so libdl-2.5.so _dl_runtime_resolve
+ 0 0 ld-2.5.so libdl-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg XisbRead
+0 0 libc-2.5.so Xorg ___newselect_nocancel
+ 0 0 libc-2.5.so Xorg ___newselect_nocancel [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 Xorg Xorg Xalloc
+ 3 60.0000 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 91197 100.000 Xorg Xorg _start
+0 0 libc-2.5.so Xorg __libc_start_main
+ 0 0 libc-2.5.so Xorg __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg XisbRead
+ 2 66.6667 Xorg Xorg _XSERVTransRead
+0 0 libc-2.5.so Xorg __read_nocancel
+ 0 0 libc-2.5.so Xorg __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg _int_free
+ 0 0 libc-2.5.so Xorg _int_free [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg Xalloc
+0 0 libc-2.5.so Xorg _int_malloc
+ 0 0 libc-2.5.so Xorg _int_malloc [self]
+-------------------------------------------------------------------------------
+ 4 4.3478 Xorg Xorg miRegionDestroy
+ 88 95.6522 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg free
+ 0 0 libc-2.5.so Xorg free [self]
+-------------------------------------------------------------------------------
+ 1 0.5714 Xorg Xorg AllocatePixmap
+ 1 0.5714 Xorg Xorg DamageCreate
+ 2 1.1429 Xorg Xorg miRegionCreate
+ 171 97.7143 Xorg Xorg Xalloc
+0 0 libc-2.5.so Xorg malloc
+ 0 0 libc-2.5.so Xorg malloc [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 Xorg Xorg Dispatch
+ 3 60.0000 Xorg Xorg ReadRequestFromClient
+0 0 libc-2.5.so Xorg memmove
+ 0 0 libc-2.5.so Xorg memmove [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg munmap
+ 0 0 libc-2.5.so Xorg munmap [self]
+-------------------------------------------------------------------------------
+ 13 100.000 Xorg Xorg SetPictureToDefaults
+0 0 libc-2.5.so Xorg strlen
+ 0 0 libc-2.5.so Xorg strlen [self]
+-------------------------------------------------------------------------------
+ 8254 100.000 intel_drv.so intel_drv.so I830WaitLpRing
+0 0 libc-2.5.so intel_drv.so gettimeofday
+ 0 0 libc-2.5.so intel_drv.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 4090 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+0 0 libc-2.5.so intel_drv.so memcpy
+ 0 0 libc-2.5.so intel_drv.so memcpy [self]
+-------------------------------------------------------------------------------
+ 5 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 libc-2.5.so ld-2.5.so do_dlopen
+ 0 0 libc-2.5.so ld-2.5.so do_dlopen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __uflow
+0 0 libc-2.5.so libc-2.5.so _IO_default_uflow
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so _IO_default_uflow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+0 0 libc-2.5.so libc-2.5.so _IO_doallocbuf
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_doallocate
+ 0 0 libc-2.5.so libc-2.5.so _IO_doallocbuf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+0 0 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so munmap
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_doallocbuf
+0 0 libc-2.5.so libc-2.5.so _IO_file_doallocate
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_stat
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_doallocate [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so fgets_unlocked
+0 0 libc-2.5.so libc-2.5.so _IO_getline
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_getline_info
+ 0 0 libc-2.5.so libc-2.5.so _IO_getline [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_getline
+0 0 libc-2.5.so libc-2.5.so _IO_getline_info
+ 1 50.0000 libc-2.5.so libc-2.5.so memcpy
+ 1 50.0000 libc-2.5.so libc-2.5.so __uflow
+ 0 0 libc-2.5.so libc-2.5.so _IO_getline_info [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so _IO_wfile_seekoff
+ 1 100.000 bash libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so _IO_wfile_seekoff [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so __cxa_atexit
+ 1 100.000 libc-2.5.so libc-2.5.so __new_exitfn
+ 0 0 libc-2.5.so libc-2.5.so __cxa_atexit [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so libc-2.5.so dcgettext
+0 0 libc-2.5.so libc-2.5.so __dcigettext
+ 7 100.000 libc-2.5.so libc-2.5.so _nl_find_domain
+ 0 0 libc-2.5.so libc-2.5.so __dcigettext [self]
+-------------------------------------------------------------------------------
+ 4 30.7692 libc-2.5.so libc-2.5.so fopen64
+ 9 69.2308 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+0 0 libc-2.5.so libc-2.5.so __fopen_internal
+ 8 61.5385 libc-2.5.so libc-2.5.so malloc
+ 2 15.3846 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 2 15.3846 libc-2.5.so libc-2.5.so strstr
+ 1 7.6923 libc-2.5.so libc-2.5.so _IO_file_init@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so __fopen_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __wcsmbs_load_conv
+0 0 libc-2.5.so libc-2.5.so __gconv_find_transform
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_read_conf
+ 0 0 libc-2.5.so libc-2.5.so __gconv_find_transform [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_find_transform
+0 0 libc-2.5.so libc-2.5.so __gconv_read_conf
+ 1 100.000 libc-2.5.so libc-2.5.so mmap
+ 0 0 libc-2.5.so libc-2.5.so __gconv_read_conf [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so __nss_lookup_function
+0 0 libc-2.5.so libc-2.5.so __libc_dlopen_mode
+ 5 100.000 ld-2.5.so libc-2.5.so _dl_catch_error
+ 0 0 libc-2.5.so libc-2.5.so __libc_dlopen_mode [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so __libc_start_main
+ 91211 91.8235 Xorg libc-2.5.so main
+ 7158 7.2061 oprofiled libc-2.5.so (no symbols)
+ 629 0.6332 firefox-bin libc-2.5.so (no symbols)
+ 255 0.2567 bash libc-2.5.so (no symbols)
+ 23 0.0232 grep libc-2.5.so (no symbols)
+ 16 0.0161 sudo libc-2.5.so (no symbols)
+ 7 0.0070 ls libc-2.5.so (no symbols)
+ 6 0.0060 gawk libc-2.5.so (no symbols)
+ 5 0.0050 cat libc-2.5.so (no symbols)
+ 5 0.0050 mkdir libc-2.5.so (no symbols)
+ 4 0.0040 ld-2.5.so libc-2.5.so _dl_runtime_resolve
+ 4 0.0040 ophelp libc-2.5.so (no symbols)
+ 3 0.0030 tr libc-2.5.so (no symbols)
+ 2 0.0020 expr libc-2.5.so (no symbols)
+ 2 0.0020 sshd libc-2.5.so (no symbols)
+ 1 0.0010 dirname libc-2.5.so (no symbols)
+ 1 0.0010 sleep libc-2.5.so (no symbols)
+ 1 0.0010 mktemp libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so nscd_getpw_r
+0 0 libc-2.5.so libc-2.5.so __nscd_get_map_ref
+ 1 100.000 libc-2.5.so libc-2.5.so get_mapping
+ 0 0 libc-2.5.so libc-2.5.so __nscd_get_map_ref [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+0 0 libc-2.5.so libc-2.5.so __nscd_getpwuid_r
+ 1 100.000 libc-2.5.so libc-2.5.so nscd_getpw_r
+ 0 0 libc-2.5.so libc-2.5.so __nscd_getpwuid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+0 0 libc-2.5.so libc-2.5.so __nss_database_lookup
+ 1 100.000 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so __nss_database_lookup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getprotoent_r@@GLIBC_2.1.2
+0 0 libc-2.5.so libc-2.5.so __nss_hostname_digits_dots
+ 1 100.000 libc-2.5.so libc-2.5.so __res_iclose
+ 0 0 libc-2.5.so libc-2.5.so __nss_hostname_digits_dots [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+0 0 libc-2.5.so libc-2.5.so __nss_hosts_lookup
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_lookup
+ 0 0 libc-2.5.so libc-2.5.so __nss_hosts_lookup [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libc-2.5.so libc-2.5.so __nss_hosts_lookup
+ 4 80.0000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+0 0 libc-2.5.so libc-2.5.so __nss_lookup
+ 4 80.0000 libc-2.5.so libc-2.5.so __nss_lookup_function
+ 1 20.0000 libc-2.5.so libc-2.5.so strlen
+ 0 0 libc-2.5.so libc-2.5.so __nss_lookup [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so __nss_lookup
+0 0 libc-2.5.so libc-2.5.so __nss_lookup_function
+ 5 100.000 libc-2.5.so libc-2.5.so __libc_dlopen_mode
+ 0 0 libc-2.5.so libc-2.5.so __nss_lookup_function [self]
+-------------------------------------------------------------------------------
+ 2 40.0000 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 3 60.0000 libc-2.5.so libc-2.5.so __nss_setent
+0 0 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+ 4 80.0000 libc-2.5.so libc-2.5.so __nss_lookup
+ 1 20.0000 libc-2.5.so libc-2.5.so __nss_database_lookup
+ 0 0 libc-2.5.so libc-2.5.so __nss_passwd_lookup [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so setpwent
+0 0 libc-2.5.so libc-2.5.so __nss_setent
+ 3 100.000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+ 0 0 libc-2.5.so libc-2.5.so __nss_setent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so iswdigit_l
+0 0 libc-2.5.so libc-2.5.so __printf_fp
+ 1 100.000 libc-2.5.so libc-2.5.so endspent
+ 0 0 libc-2.5.so libc-2.5.so __printf_fp [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_hostname_digits_dots
+0 0 libc-2.5.so libc-2.5.so __res_iclose
+ 1 100.000 libc-2.5.so libc-2.5.so inet_nsap_ntoa
+ 0 0 libc-2.5.so libc-2.5.so __res_iclose [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so __strtod_internal
+ 1 100.000 libc-2.5.so libc-2.5.so ____strtod_l_internal
+ 0 0 libc-2.5.so libc-2.5.so __strtod_internal [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_vfscanf
+ 1 50.0000 libc-2.5.so libc-2.5.so _nss_files_parse_pwent
+0 0 libc-2.5.so libc-2.5.so __strtoul_internal
+ 2 100.000 libc-2.5.so libc-2.5.so ____strtoul_l_internal
+ 0 0 libc-2.5.so libc-2.5.so __strtoul_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_getline_info
+0 0 libc-2.5.so libc-2.5.so __uflow
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_default_uflow
+ 0 0 libc-2.5.so libc-2.5.so __uflow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so mbrtowc
+0 0 libc-2.5.so libc-2.5.so __wcsmbs_load_conv
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_find_transform
+ 0 0 libc-2.5.so libc-2.5.so __wcsmbs_load_conv [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so _nl_find_domain
+0 0 libc-2.5.so libc-2.5.so _nl_expand_alias
+ 3 75.0000 libc-2.5.so libc-2.5.so read_alias_file
+ 1 25.0000 libc-2.5.so libc-2.5.so strchr
+ 0 0 libc-2.5.so libc-2.5.so _nl_expand_alias [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so libc-2.5.so __dcigettext
+0 0 libc-2.5.so libc-2.5.so _nl_find_domain
+ 4 57.1429 libc-2.5.so libc-2.5.so _nl_expand_alias
+ 3 42.8571 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+ 0 0 libc-2.5.so libc-2.5.so _nl_find_domain [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libc-2.5.so libc-2.5.so setlocale
+0 0 libc-2.5.so libc-2.5.so _nl_find_locale
+ 16 88.8889 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+ 1 5.5556 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 1 5.5556 libc-2.5.so libc-2.5.so __open_nocancel
+ 0 0 libc-2.5.so libc-2.5.so _nl_find_locale [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libc-2.5.so libc-2.5.so _nl_find_locale
+0 0 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+ 13 81.2500 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 2 12.5000 libc-2.5.so libc-2.5.so _nl_intern_locale_data
+ 1 6.2500 libc-2.5.so libc-2.5.so strncmp
+ 0 0 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so _nss_files_parse_pwent
+ 1 100.000 libc-2.5.so libc-2.5.so __strtoul_internal
+ 0 0 libc-2.5.so libc-2.5.so _nss_files_parse_pwent [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so asprintf
+ 4 100.000 libc-2.5.so libc-2.5.so vasprintf
+ 0 0 libc-2.5.so libc-2.5.so asprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so strerror_r
+0 0 libc-2.5.so libc-2.5.so dcgettext
+ 7 100.000 libc-2.5.so libc-2.5.so __dcigettext
+ 0 0 libc-2.5.so libc-2.5.so dcgettext [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so do_dlopen
+ 5 100.000 ld-2.5.so libc-2.5.so _dl_open
+ 0 0 libc-2.5.so libc-2.5.so do_dlopen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __printf_fp
+0 0 libc-2.5.so libc-2.5.so endspent
+ 1 100.000 libc-2.5.so libc-2.5.so wctob
+ 0 0 libc-2.5.so libc-2.5.so endspent [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so error
+ 1 100.000 libc-2.5.so libc-2.5.so error_tail
+ 0 0 libc-2.5.so libc-2.5.so error [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so error
+0 0 libc-2.5.so libc-2.5.so error_tail
+ 1 100.000 libc-2.5.so libc-2.5.so strerror_r
+ 0 0 libc-2.5.so libc-2.5.so error_tail [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so exit
+ 5 83.3333 ld-2.5.so libc-2.5.so _dl_fini
+ 1 16.6667 grep libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so exit [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so free_derivation
+0 0 libc-2.5.so libc-2.5.so fallback_frame_state_for
+ 1 100.000 libc-2.5.so libc-2.5.so pututline_file
+ 0 0 libc-2.5.so libc-2.5.so fallback_frame_state_for [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so read_alias_file
+0 0 libc-2.5.so libc-2.5.so fgets_unlocked
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_getline
+ 0 0 libc-2.5.so libc-2.5.so fgets_unlocked [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fopen64
+ 4 100.000 libc-2.5.so libc-2.5.so __fopen_internal
+ 0 0 libc-2.5.so libc-2.5.so fopen64 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_database_lookup
+0 0 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 9 81.8182 libc-2.5.so libc-2.5.so __fopen_internal
+ 1 9.0909 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 1 9.0909 libc-2.5.so libc-2.5.so _IO_file_init@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so free_derivation
+ 1 100.000 libc-2.5.so libc-2.5.so fallback_frame_state_for
+ 0 0 libc-2.5.so libc-2.5.so free_derivation [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fwrite
+ 2 66.6667 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so fwrite [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so gethostbyname
+ 2 100.000 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so libc-2.5.so gethostbyname [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so gethostbyname
+0 0 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 1 50.0000 libc-2.5.so libc-2.5.so __nss_hosts_lookup
+ 1 50.0000 libnss_files-2.5.so libc-2.5.so _nss_files_gethostbyname_r
+ 0 0 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so getopt_long
+ 1 100.000 libc-2.5.so libc-2.5.so _getopt_internal
+ 0 0 libc-2.5.so libc-2.5.so getopt_long [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so getprotoent_r@@GLIBC_2.1.2
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_hostname_digits_dots
+ 0 0 libc-2.5.so libc-2.5.so getprotoent_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so getpwuid
+ 5 100.000 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so libc-2.5.so getpwuid [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so getpwuid
+0 0 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 2 40.0000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+ 2 40.0000 libnss_compat-2.5.so libc-2.5.so _nss_compat_getpwuid_r
+ 1 20.0000 libc-2.5.so libc-2.5.so __nscd_getpwuid_r
+ 0 0 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so pututline_file
+0 0 libc-2.5.so libc-2.5.so internal_getut_r
+ 1 100.000 libc-2.5.so libc-2.5.so setutent_file
+ 0 0 libc-2.5.so libc-2.5.so internal_getut_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so iswprint_l
+0 0 libc-2.5.so libc-2.5.so iswdigit_l
+ 1 100.000 libc-2.5.so libc-2.5.so __printf_fp
+ 0 0 libc-2.5.so libc-2.5.so iswdigit_l [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so iswprint_l
+ 1 100.000 libc-2.5.so libc-2.5.so iswdigit_l
+ 0 0 libc-2.5.so libc-2.5.so iswprint_l [self]
+-------------------------------------------------------------------------------
+ 19 100.000 libc-2.5.so libc-2.5.so malloc
+0 0 libc-2.5.so libc-2.5.so malloc_hook_ini
+ 18 94.7368 libc-2.5.so libc-2.5.so ptmalloc_init
+ 1 5.2632 libc-2.5.so libc-2.5.so malloc
+ 0 0 libc-2.5.so libc-2.5.so malloc_hook_ini [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so mblen
+ 1 100.000 libc-2.5.so libc-2.5.so mbrtowc
+ 0 0 libc-2.5.so libc-2.5.so mblen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nscd_getpwuid_r
+0 0 libc-2.5.so libc-2.5.so nscd_getpw_r
+ 1 100.000 libc-2.5.so libc-2.5.so __nscd_get_map_ref
+ 0 0 libc-2.5.so libc-2.5.so nscd_getpw_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_compile_internal
+0 0 libc-2.5.so libc-2.5.so parse_reg_exp
+ 1 100.000 libc-2.5.so libc-2.5.so parse_expression
+ 0 0 libc-2.5.so libc-2.5.so parse_reg_exp [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libc-2.5.so libc-2.5.so malloc_hook_ini
+0 0 libc-2.5.so libc-2.5.so ptmalloc_init
+ 18 100.000 libc-2.5.so libc-2.5.so _dl_addr
+ 0 0 libc-2.5.so libc-2.5.so ptmalloc_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so fallback_frame_state_for
+0 0 libc-2.5.so libc-2.5.so pututline_file
+ 1 100.000 libc-2.5.so libc-2.5.so internal_getut_r
+ 0 0 libc-2.5.so libc-2.5.so pututline_file [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so re_compile_pattern
+0 0 libc-2.5.so libc-2.5.so re_compile_internal
+ 1 50.0000 libc-2.5.so libc-2.5.so peek_token
+ 1 50.0000 libc-2.5.so libc-2.5.so parse_reg_exp
+ 0 0 libc-2.5.so libc-2.5.so re_compile_internal [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so re_compile_pattern
+ 2 66.6667 libc-2.5.so libc-2.5.so re_compile_internal
+ 1 33.3333 ld-2.5.so libc-2.5.so _dl_runtime_resolve
+ 0 0 libc-2.5.so libc-2.5.so re_compile_pattern [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so _nl_expand_alias
+0 0 libc-2.5.so libc-2.5.so read_alias_file
+ 1 33.3333 libc-2.5.so libc-2.5.so qsort
+ 1 33.3333 libc-2.5.so libc-2.5.so memcpy
+ 1 33.3333 libc-2.5.so libc-2.5.so fgets_unlocked
+ 0 0 libc-2.5.so libc-2.5.so read_alias_file [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so setpwent
+ 3 100.000 libc-2.5.so libc-2.5.so __nss_setent
+ 0 0 libc-2.5.so libc-2.5.so setpwent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so internal_getut_r
+0 0 libc-2.5.so libc-2.5.so setutent_file
+ 1 100.000 libc-2.5.so libc-2.5.so __rpc_thread_destroy
+ 0 0 libc-2.5.so libc-2.5.so setutent_file [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so sscanf
+ 8 100.000 libc-2.5.so libc-2.5.so vsscanf
+ 0 0 libc-2.5.so libc-2.5.so sscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so msort_with_tmp
+0 0 libc-2.5.so libc-2.5.so strcoll
+ 1 100.000 libc-2.5.so libc-2.5.so strcoll_l
+ 0 0 libc-2.5.so libc-2.5.so strcoll [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so strdup
+ 1 100.000 libc-2.5.so libc-2.5.so malloc
+ 0 0 libc-2.5.so libc-2.5.so strdup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so error_tail
+0 0 libc-2.5.so libc-2.5.so strerror_r
+ 1 100.000 libc-2.5.so libc-2.5.so dcgettext
+ 0 0 libc-2.5.so libc-2.5.so strerror_r [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so asprintf
+0 0 libc-2.5.so libc-2.5.so vasprintf
+ 4 80.0000 libc-2.5.so libc-2.5.so vfprintf
+ 1 20.0000 libc-2.5.so libc-2.5.so malloc
+ 0 0 libc-2.5.so libc-2.5.so vasprintf [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so sprintf
+0 0 libc-2.5.so libc-2.5.so vsprintf
+ 4 80.0000 libc-2.5.so libc-2.5.so vfprintf
+ 1 20.0000 libc-2.5.so libc-2.5.so _IO_setb
+ 0 0 libc-2.5.so libc-2.5.so vsprintf [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libc-2.5.so libc-2.5.so sscanf
+0 0 libc-2.5.so libc-2.5.so vsscanf
+ 8 100.000 libc-2.5.so libc-2.5.so _IO_vfscanf
+ 0 0 libc-2.5.so libc-2.5.so vsscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so endspent
+0 0 libc-2.5.so libc-2.5.so wctob
+ 1 100.000 libc-2.5.so libc-2.5.so wcsrtombs
+ 0 0 libc-2.5.so libc-2.5.so wctob [self]
+-------------------------------------------------------------------------------
+ 1 0.0038 libexa.so libexa.so exaCopyDirtyToSys
+ 20 0.0763 libexa.so libexa.so exaTryDriverComposite
+ 61 0.2327 libexa.so libexa.so exaMoveInPixmap
+ 26134 99.6872 libexa.so libexa.so exaMemcpyBox
+0 0 libc-2.5.so libexa.so memcpy
+ 0 0 libc-2.5.so libexa.so memcpy [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+0 0 libc-2.5.so libnss_compat-2.5.so __nss_lookup_function
+ 0 0 libc-2.5.so libnss_compat-2.5.so __nss_lookup_function [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so internal_getpwuid_r
+0 0 libc-2.5.so libnss_compat-2.5.so _nss_files_parse_pwent
+ 0 0 libc-2.5.so libnss_compat-2.5.so _nss_files_parse_pwent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_files-2.5.so libnss_files-2.5.so internal_getent
+0 0 libc-2.5.so libnss_files-2.5.so fgets_unlocked
+ 0 0 libc-2.5.so libnss_files-2.5.so fgets_unlocked [self]
+-------------------------------------------------------------------------------
+ 4 21.0526 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 15 78.9474 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 10 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so libpixman.so.0.0.0 _int_free
+ 0 0 libc-2.5.so libpixman.so.0.0.0 _int_free [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so libpixman.so.0.0.0 _int_malloc
+ 0 0 libc-2.5.so libpixman.so.0.0.0 _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 0.5882 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+ 2 1.1765 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 12 7.0588 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 155 91.1765 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so libpixman.so.0.0.0 free
+ 0 0 libc-2.5.so libpixman.so.0.0.0 free [self]
+-------------------------------------------------------------------------------
+ 41 7.8394 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+ 482 92.1606 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+0 0 libc-2.5.so libpixman.so.0.0.0 malloc
+ 0 0 libc-2.5.so libpixman.so.0.0.0 malloc [self]
+-------------------------------------------------------------------------------
+ 8 7.2072 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 103 92.7928 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so libpixman.so.0.0.0 memmove
+ 0 0 libc-2.5.so libpixman.so.0.0.0 memmove [self]
+-------------------------------------------------------------------------------
+ 70 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+0 0 libc-2.5.so libpixman.so.0.0.0 memset
+ 0 0 libc-2.5.so libpixman.so.0.0.0 memset [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+ 8 88.8889 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+0 0 libc-2.5.so libpixman.so.0.0.0 realloc
+ 0 0 libc-2.5.so libpixman.so.0.0.0 realloc [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so msort_with_tmp
+0 0 libcairo.so.2.11.3 libc-2.5.so (no symbols)
+ 0 0 libcairo.so.2.11.3 libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 ld-2.5.so ld-2.5.so _dl_fini
+0 0 libdl-2.5.so ld-2.5.so .fini
+ 0 0 libdl-2.5.so ld-2.5.so .fini [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 libdl-2.5.so ld-2.5.so dlclose_doit
+ 0 0 libdl-2.5.so ld-2.5.so dlclose_doit [self]
+-------------------------------------------------------------------------------
+ 5 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 libdl-2.5.so ld-2.5.so dlopen_doit
+ 0 0 libdl-2.5.so ld-2.5.so dlopen_doit [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so .fini
+ 2 100.000 ld-2.5.so libdl-2.5.so _dl_runtime_resolve
+ 0 0 libdl-2.5.so libdl-2.5.so .fini [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 libdl-2.5.so libdl-2.5.so dlclose
+ 5 83.3333 libdl-2.5.so libdl-2.5.so dlopen@@GLIBC_2.1
+0 0 libdl-2.5.so libdl-2.5.so _dlerror_run
+ 6 100.000 ld-2.5.so libdl-2.5.so _dl_catch_error
+ 0 0 libdl-2.5.so libdl-2.5.so _dlerror_run [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlclose
+ 1 100.000 libdl-2.5.so libdl-2.5.so _dlerror_run
+ 0 0 libdl-2.5.so libdl-2.5.so dlclose [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlclose_doit
+ 1 100.000 ld-2.5.so libdl-2.5.so _dl_close
+ 0 0 libdl-2.5.so libdl-2.5.so dlclose_doit [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlopen@@GLIBC_2.1
+ 5 100.000 libdl-2.5.so libdl-2.5.so _dlerror_run
+ 0 0 libdl-2.5.so libdl-2.5.so dlopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlopen_doit
+ 5 100.000 ld-2.5.so libdl-2.5.so _dl_open
+ 0 0 libdl-2.5.so libdl-2.5.so dlopen_doit [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg BlockHandler
+0 0 libdri.so Xorg DRIBlockHandler
+ 0 0 libdri.so Xorg DRIBlockHandler [self]
+-------------------------------------------------------------------------------
+ 16 42.1053 intel_drv.so intel_drv.so IntelEmitInvarientState
+ 22 57.8947 intel_drv.so intel_drv.so i965_prepare_composite
+0 0 libdri.so intel_drv.so DRIGetContext
+ 0 0 libdri.so intel_drv.so DRIGetContext [self]
+-------------------------------------------------------------------------------
+ 7 17.0732 intel_drv.so intel_drv.so i965_prepare_composite
+ 34 82.9268 intel_drv.so intel_drv.so IntelEmitInvarientState
+0 0 libdri.so intel_drv.so DRIGetSAREAPrivate
+ 0 0 libdri.so intel_drv.so DRIGetSAREAPrivate [self]
+-------------------------------------------------------------------------------
+ 17 100.000 intel_drv.so intel_drv.so i965_prepare_composite
+0 0 libdri.so intel_drv.so __i686.get_pc_thunk.cx
+ 0 0 libdri.so intel_drv.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+0 0 libdri.so libdri.so DRIBlockHandler
+ 2 100.000 libdri.so libdri.so DRIDoBlockHandler
+ 0 0 libdri.so libdri.so DRIBlockHandler [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libdri.so libdri.so DRIBlockHandler
+0 0 libdri.so libdri.so DRIDoBlockHandler
+ 1 50.0000 intel_drv.so libdri.so __i686.get_pc_thunk.bx
+ 1 50.0000 libdri.so libdri.so __i686.get_pc_thunk.cx
+ 0 0 libdri.so libdri.so DRIDoBlockHandler [self]
+-------------------------------------------------------------------------------
+ 1 5.5556 Xorg Xorg damagePolyFillRect
+ 1 5.5556 Xorg Xorg miTrapezoids
+ 2 11.1111 Xorg Xorg miBSCheapValidateGC
+ 2 11.1111 Xorg Xorg damageDestroyPixmap
+ 12 66.6667 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg .plt
+ 0 0 libexa.so Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damageComposite
+0 0 libexa.so Xorg ExaCheckComposite
+ 0 0 libexa.so Xorg ExaCheckComposite [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 Xorg Xorg ProcCreatePixmap
+ 1 25.0000 Xorg Xorg miBSCheapValidateGC
+ 1 25.0000 Xorg Xorg damageDestroyPixmap
+ 1 25.0000 Xorg Xorg damagePolyFillRect
+0 0 libexa.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libexa.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 10 0.0385 Xorg Xorg damageGlyphs
+ 25987 99.9615 Xorg Xorg damageComposite
+0 0 libexa.so Xorg exaComposite
+ 0 0 libexa.so Xorg exaComposite [self]
+-------------------------------------------------------------------------------
+ 4 11.1111 Xorg Xorg damageCopyArea
+ 32 88.8889 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg exaCopyArea
+ 0 0 libexa.so Xorg exaCopyArea [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg miBSCreateGC
+0 0 libexa.so Xorg exaCreateGC
+ 0 0 libexa.so Xorg exaCreateGC [self]
+-------------------------------------------------------------------------------
+ 1 1.3158 Xorg Xorg damageGlyphs
+ 2 2.6316 Xorg Xorg miCompositeRects
+ 4 5.2632 Xorg Xorg miCreateAlphaPicture
+ 69 90.7895 Xorg Xorg ProcCreatePixmap
+0 0 libexa.so Xorg exaCreatePixmap
+ 0 0 libexa.so Xorg exaCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 88 100.000 Xorg Xorg damageDestroyPixmap
+0 0 libexa.so Xorg exaDestroyPixmap
+ 0 0 libexa.so Xorg exaDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damagePolyFillRect
+0 0 libexa.so Xorg exaFillRegionSolid
+ 0 0 libexa.so Xorg exaFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg Xorg damageGlyphs
+ 7 87.5000 Xorg Xorg damagePolyFillRect
+0 0 libexa.so Xorg exaGetDrawableDeltas
+ 0 0 libexa.so Xorg exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damagePolyFillRect
+0 0 libexa.so Xorg exaGetDrawablePixmap
+ 0 0 libexa.so Xorg exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 1 0.0018 Xorg Xorg CompositeGlyphs
+ 56465 99.9982 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg exaGlyphs
+ 0 0 libexa.so Xorg exaGlyphs [self]
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg damageDestroyPixmap
+0 0 libexa.so Xorg exaOffscreenFree
+ 0 0 libexa.so Xorg exaOffscreenFree [self]
+-------------------------------------------------------------------------------
+ 9 100.000 Xorg Xorg damageGlyphs
+0 0 libexa.so Xorg exaPixmapDirty
+ 0 0 libexa.so Xorg exaPixmapDirty [self]
+-------------------------------------------------------------------------------
+ 3 0.9317 Xorg Xorg miColorRects
+ 319 99.0683 Xorg Xorg damagePolyFillRect
+0 0 libexa.so Xorg exaPolyFillRect
+ 0 0 libexa.so Xorg exaPolyFillRect [self]
+-------------------------------------------------------------------------------
+ 31 100.000 Xorg Xorg damagePolySegment
+0 0 libexa.so Xorg exaPolySegment
+ 0 0 libexa.so Xorg exaPolySegment [self]
+-------------------------------------------------------------------------------
+ 6185 100.000 Xorg Xorg miTrapezoids
+0 0 libexa.so Xorg exaRasterizeTrapezoid
+ 0 0 libexa.so Xorg exaRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 2 2.5000 Xorg Xorg damageValidateGC
+ 78 97.5000 Xorg Xorg miBSCheapValidateGC
+0 0 libexa.so Xorg exaValidateGC
+ 0 0 libexa.so Xorg exaValidateGC [self]
+-------------------------------------------------------------------------------
+ 8 21.6216 intel_drv.so intel_drv.so i830MarkSync
+ 12 32.4324 intel_drv.so intel_drv.so i830WaitSync
+ 17 45.9459 intel_drv.so intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so intel_drv.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so intel_drv.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 2 2.2222 intel_drv.so intel_drv.so I830EXASolid
+ 3 3.3333 intel_drv.so intel_drv.so I830EXAPrepareSolid
+ 14 15.5556 intel_drv.so intel_drv.so i965_prepare_composite
+ 71 78.8889 intel_drv.so intel_drv.so intel_get_pixmap_offset
+0 0 libexa.so intel_drv.so exaGetPixmapOffset
+ 0 0 libexa.so intel_drv.so exaGetPixmapOffset [self]
+-------------------------------------------------------------------------------
+ 6 26.0870 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+ 17 73.9130 intel_drv.so intel_drv.so i965_prepare_composite
+0 0 libexa.so intel_drv.so exaGetPixmapPitch
+ 0 0 libexa.so intel_drv.so exaGetPixmapPitch [self]
+-------------------------------------------------------------------------------
+ 1 2.7778 intel_drv.so intel_drv.so i965_composite
+ 35 97.2222 intel_drv.so intel_drv.so i830MarkSync
+0 0 libexa.so intel_drv.so exaMarkSync
+ 0 0 libexa.so intel_drv.so exaMarkSync [self]
+-------------------------------------------------------------------------------
+ 5 0.0414 intel_drv.so intel_drv.so i965_composite
+ 8 0.0663 intel_drv.so intel_drv.so i965_prepare_composite
+ 12054 99.8923 intel_drv.so intel_drv.so i830WaitSync
+0 0 libexa.so intel_drv.so exaWaitSync
+ 0 0 libexa.so intel_drv.so exaWaitSync [self]
+-------------------------------------------------------------------------------
+0 0 libexa.so libexa.so exaCreateGC
+ 1 100.000 libfb.so libexa.so fbCreateGC
+ 0 0 libexa.so libexa.so exaCreateGC [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libextmod.so libextmod.so XvDestroyPixmap
+0 0 libexa.so libextmod.so exaDestroyPixmap
+ 0 0 libexa.so libextmod.so exaDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 51 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so .plt
+ 0 0 libexa.so libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so __i686.get_pc_thunk.bx
+ 0 0 libexa.so libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 2 0.0839 libfb.so libfb.so fbDoCopy
+ 2382 99.9161 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaCopyNtoN
+ 0 0 libexa.so libfb.so exaCopyNtoN [self]
+-------------------------------------------------------------------------------
+ 13 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaDoMigration
+ 0 0 libexa.so libfb.so exaDoMigration [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaFinishAccess
+ 0 0 libexa.so libfb.so exaFinishAccess [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaGetDrawableDeltas
+ 0 0 libexa.so libfb.so exaGetDrawableDeltas [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaGetDrawablePixmap
+ 0 0 libexa.so libfb.so exaGetDrawablePixmap [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaPixmapDirty
+ 0 0 libexa.so libfb.so exaPixmapDirty [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaPixmapIsOffscreen
+ 0 0 libexa.so libfb.so exaPixmapIsOffscreen [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libfb.so libfb.so fbCopyRegion
+0 0 libexa.so libfb.so exaPrepareAccess
+ 0 0 libexa.so libfb.so exaPrepareAccess [self]
+-------------------------------------------------------------------------------
+ 1 0.7463 Xorg Xorg miTrapezoids
+ 2 1.4925 Xorg Xorg FreeGC
+ 3 2.2388 Xorg Xorg FreeResource
+ 3 2.2388 Xorg Xorg miCompositeRects
+ 38 28.3582 Xorg Xorg dixDestroyPixmap
+ 87 64.9254 Xorg Xorg FreePicture
+0 0 libextmod.so Xorg XvDestroyPixmap
+ 0 0 libextmod.so Xorg XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 Xorg Xorg miCreateAlphaPicture
+ 1 50.0000 Xorg Xorg FreePicture
+0 0 libextmod.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libextmod.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 73 100.000 libexa.so libexa.so exaGlyphs
+0 0 libextmod.so libexa.so XvDestroyPixmap
+ 0 0 libextmod.so libexa.so XvDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcCreatePixmap
+0 0 libfb.so Xorg fbCreatePixmap
+ 0 0 libfb.so Xorg fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damageDestroyPixmap
+0 0 libfb.so Xorg fbDestroyPixmap
+ 0 0 libfb.so Xorg fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg miBSCheapValidateGC
+0 0 libfb.so Xorg fbValidateGC
+ 0 0 libfb.so Xorg fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 8.3333 libexa.so libexa.so exaCreatePixmap
+ 1 8.3333 libexa.so libexa.so exaValidateGC
+ 2 16.6667 libexa.so libexa.so exaDestroyPixmap
+ 3 25.0000 libexa.so libexa.so exaCopyArea
+ 5 41.6667 libexa.so libexa.so exaCopyNtoN
+0 0 libfb.so libexa.so .plt
+ 0 0 libfb.so libexa.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 libexa.so libexa.so exaValidateGC
+ 3 23.0769 libexa.so libexa.so exaDestroyPixmap
+ 4 30.7692 libexa.so libexa.so exaCopyArea
+ 5 38.4615 libexa.so libexa.so exaCopyNtoN
+0 0 libfb.so libexa.so __i686.get_pc_thunk.bx
+ 0 0 libfb.so libexa.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 3.8462 libexa.so libexa.so exaValidateGC
+ 25 96.1538 libexa.so libexa.so exaCopyNtoN
+0 0 libfb.so libexa.so __i686.get_pc_thunk.cx
+ 0 0 libfb.so libexa.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 0.0355 libexa.so libexa.so exaComposite
+ 2817 99.9645 libexa.so libexa.so ExaCheckComposite
+0 0 libfb.so libexa.so fbComposite
+ 0 0 libfb.so libexa.so fbComposite [self]
+-------------------------------------------------------------------------------
+ 985 100.000 libexa.so libexa.so exaCopyNtoN
+0 0 libfb.so libexa.so fbCopyNtoN
+ 0 0 libfb.so libexa.so fbCopyNtoN [self]
+-------------------------------------------------------------------------------
+ 38 100.000 libexa.so libexa.so exaCopyArea
+0 0 libfb.so libexa.so fbCopyRegion
+ 0 0 libfb.so libexa.so fbCopyRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaCreateGC
+0 0 libfb.so libexa.so fbCreateGC
+ 0 0 libfb.so libexa.so fbCreateGC [self]
+-------------------------------------------------------------------------------
+ 115 100.000 libexa.so libexa.so exaCreatePixmap
+0 0 libfb.so libexa.so fbCreatePixmap
+ 0 0 libfb.so libexa.so fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaCreatePixmap
+0 0 libfb.so libexa.so fbCreatePixmapBpp
+ 0 0 libfb.so libexa.so fbCreatePixmapBpp [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libexa.so libexa.so exaDestroyPixmap
+0 0 libfb.so libexa.so fbDestroyPixmap
+ 0 0 libfb.so libexa.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 20 0.6805 libexa.so libexa.so exaGlyphs
+ 2919 99.3195 libexa.so libexa.so exaCopyArea
+0 0 libfb.so libexa.so fbDoCopy
+ 0 0 libfb.so libexa.so fbDoCopy [self]
+-------------------------------------------------------------------------------
+ 1 4.7619 libexa.so libexa.so exaPolyFillRect
+ 20 95.2381 libexa.so libexa.so exaFillRegionSolid
+0 0 libfb.so libexa.so fbFillRegionSolid
+ 0 0 libfb.so libexa.so fbFillRegionSolid [self]
+-------------------------------------------------------------------------------
+ 5 21.7391 libexa.so libexa.so exaValidateGC
+ 18 78.2609 libexa.so libexa.so exaCopyNtoN
+0 0 libfb.so libexa.so fbGetGCPrivateIndex
+ 0 0 libfb.so libexa.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 910 100.000 libexa.so libexa.so exaRasterizeTrapezoid
+0 0 libfb.so libexa.so fbRasterizeTrapezoid
+ 0 0 libfb.so libexa.so fbRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 66 100.000 libexa.so libexa.so exaValidateGC
+0 0 libfb.so libexa.so fbValidateGC
+ 0 0 libfb.so libexa.so fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libexa.so libexa.so exaRasterizeTrapezoid
+0 0 libfb.so libexa.so image_from_pict
+ 0 0 libfb.so libexa.so image_from_pict [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so bsearch
+0 0 libgtk-x11-2.0.so.0.1000.12 libc-2.5.so (no symbols)
+ 0 0 libgtk-x11-2.0.so.0.1000.12 libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getpwuid_r
+ 0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getpwuid_r [self]
+-------------------------------------------------------------------------------
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r
+ 1 50.0000 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+ 1 50.0000 libnss_compat-2.5.so libnss_compat-2.5.so internal_getpwuid_r
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+ 1 100.000 libc-2.5.so libnss_compat-2.5.so __nss_lookup_function
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so internal_getpwuid_r
+ 1 100.000 libc-2.5.so libnss_compat-2.5.so _nss_files_parse_pwent
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so internal_getpwuid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+0 0 libnss_files-2.5.so libc-2.5.so _nss_files_gethostbyname_r
+ 0 0 libnss_files-2.5.so libc-2.5.so _nss_files_gethostbyname_r [self]
+-------------------------------------------------------------------------------
+0 0 libnss_files-2.5.so libnss_files-2.5.so _nss_files_gethostbyname_r
+ 1 100.000 libnss_files-2.5.so libnss_files-2.5.so internal_getent
+ 0 0 libnss_files-2.5.so libnss_files-2.5.so _nss_files_gethostbyname_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_files-2.5.so libnss_files-2.5.so _nss_files_gethostbyname_r
+0 0 libnss_files-2.5.so libnss_files-2.5.so internal_getent
+ 1 100.000 libc-2.5.so libnss_files-2.5.so fgets_unlocked
+ 0 0 libnss_files-2.5.so libnss_files-2.5.so internal_getent [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg .plt
+ 0 0 libpixman.so.0.0.0 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 3.3333 Xorg Xorg miTranslateRegion
+ 1 3.3333 Xorg Xorg miRegionInit
+ 1 3.3333 Xorg Xorg miComputeCompositeRegion
+ 4 13.3333 Xorg Xorg miRegionDestroy
+ 23 76.6667 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 11 100.000 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg pixman_op
+ 0 0 libpixman.so.0.0.0 Xorg pixman_op [self]
+-------------------------------------------------------------------------------
+ 2 9.0909 Xorg Xorg miRegionCopy
+ 3 13.6364 Xorg Xorg miColorRects
+ 17 77.2727 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 1 6.2500 Xorg Xorg miDestroyClip
+ 4 25.0000 Xorg Xorg miDestroyPicture
+ 11 68.7500 Xorg Xorg miRegionDestroy
+0 0 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 2 20.0000 Xorg Xorg miRegionCreate
+ 3 30.0000 Xorg Xorg miRegionInit
+ 5 50.0000 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_init
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 3 50.0000 Xorg Xorg miRegionInit
+ 3 50.0000 Xorg Xorg miRegionCreate
+0 0 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+ 4 14.2857 Xorg Xorg damageDamageRegion
+ 24 85.7143 Xorg Xorg miIntersect
+0 0 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 61 100.000 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 25 100.000 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 94 100.000 Xorg Xorg miComputeCompositeRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg Xorg miTranslateRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_translate
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 3906 100.000 Xorg Xorg miUnion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_union
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_union [self]
+-------------------------------------------------------------------------------
+ 26 100.000 libexa.so libexa.so exaCopyNtoN
+0 0 libpixman.so.0.0.0 libexa.so pixman_blt
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_blt [self]
+-------------------------------------------------------------------------------
+ 34 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_fini
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_init
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 45 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_n_rects
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 23 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_not_empty
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+ 100 100.000 libexa.so libexa.so exaTryDriverComposite
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libexa.so libexa.so exaPolyFillRect
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_translate
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 2 12.5000 libexa.so libexa.so exaMoveInPixmap
+ 3 18.7500 libexa.so libexa.so exaCopyDirtyToSys
+ 11 68.7500 libexa.so libexa.so exaPixmapDirty
+0 0 libpixman.so.0.0.0 libexa.so pixman_region_union
+ 0 0 libpixman.so.0.0.0 libexa.so pixman_region_union [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 libfb.so libfb.so image_from_pict
+ 5 83.3333 libfb.so libfb.so fbCopyNtoN
+0 0 libpixman.so.0.0.0 libfb.so .plt
+ 0 0 libpixman.so.0.0.0 libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 libfb.so libfb.so image_from_pict
+ 9 90.0000 libfb.so libfb.so fbCopyNtoN
+0 0 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 745 100.000 libfb.so libfb.so fbCopyNtoN
+0 0 libpixman.so.0.0.0 libfb.so pixman_blt
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_blt [self]
+-------------------------------------------------------------------------------
+ 39 100.000 libfb.so libfb.so fbCopyNtoN
+0 0 libpixman.so.0.0.0 libfb.so pixman_blt_mmx
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_blt_mmx [self]
+-------------------------------------------------------------------------------
+ 1 3.4483 libfb.so libfb.so fbFillRegionSolid
+ 28 96.5517 libfb.so libfb.so fbCopyNtoN
+0 0 libpixman.so.0.0.0 libfb.so pixman_have_mmx
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_have_mmx [self]
+-------------------------------------------------------------------------------
+ 2810 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_composite
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_composite [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_create_bits [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_component_alpha
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_component_alpha [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_filter
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_filter [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libfb.so libfb.so fbComposite
+ 2 66.6667 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_unref
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_unref [self]
+-------------------------------------------------------------------------------
+ 891 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so reset_clip_region
+ 0 0 libpixman.so.0.0.0 libfb.so reset_clip_region [self]
+-------------------------------------------------------------------------------
+0 0 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+ 2810 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 0 0 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite [self]
+-------------------------------------------------------------------------------
+ 2810 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+0 0 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 2805 99.8221 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+ 3 0.1068 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+ 2 0.0712 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+ 0 0 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 ld-2.5.so ld-2.5.so _dl_fini
+ 9 90.0000 ld-2.5.so ld-2.5.so call_init
+0 0 libselinux.so.1 ld-2.5.so (no symbols)
+ 0 0 libselinux.so.1 ld-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 2.1978 libc-2.5.so libc-2.5.so qsort
+ 89 97.8022 libc-2.5.so libc-2.5.so msort_with_tmp
+0 0 libxul.so libc-2.5.so (no symbols)
+ 0 0 libxul.so libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 ls libc-2.5.so (no symbols)
+ 0 0 ls libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 mkdir libc-2.5.so (no symbols)
+ 0 0 mkdir libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 mktemp libc-2.5.so (no symbols)
+ 0 0 mktemp libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg xf86SigioReadInput
+0 0 mouse_drv.so Xorg .plt
+ 0 0 mouse_drv.so Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg BlockHandler
+0 0 mouse_drv.so Xorg MouseBlockHandler
+ 0 0 mouse_drv.so Xorg MouseBlockHandler [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg xf86SigioReadInput
+0 0 mouse_drv.so Xorg MouseReadInput
+ 0 0 mouse_drv.so Xorg MouseReadInput [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg WaitForSomething
+0 0 mouse_drv.so Xorg MouseWakeupHandler
+ 0 0 mouse_drv.so Xorg MouseWakeupHandler [self]
+-------------------------------------------------------------------------------
+0 0 mouse_drv.so mouse_drv.so MouseReadInput
+ 2 100.000 Xorg mouse_drv.so XisbRead
+ 0 0 mouse_drv.so mouse_drv.so MouseReadInput [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 ophelp libc-2.5.so (no symbols)
+ 0 0 ophelp libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 7158 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 oprofiled libc-2.5.so (no symbols)
+ 0 0 oprofiled libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 sleep libc-2.5.so (no symbols)
+ 0 0 sleep libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 sshd libc-2.5.so (no symbols)
+ 0 0 sshd libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 sudo libc-2.5.so (no symbols)
+ 0 0 sudo libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 tr libc-2.5.so (no symbols)
+ 0 0 tr libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+CPU_CLK_UNHALT...|
+ samples| %|
+------------------
+ 43686 29.5343 libc-2.5.so
+ 28397 19.1981 intel_drv.so
+ 24115 16.3032 vmlinux
+ 15941 10.7771 libxul.so
+ 8909 6.0230 libexa.so
+ 8102 5.4774 libpixman.so.0.0.0
+ 7081 4.7872 oprofiled
+ 5242 3.5439 Xorg
+ 2123 1.4353 oprofile
+ 764 0.5165 libfb.so
+ 620 0.4192 libXrender.so.1.3.0
+ 309 0.2089 libgobject-2.0.so.0.1200.12
+ 282 0.1906 libgdk-x11-2.0.so.0.1000.12
+ 254 0.1717 libX11.so.6.2.0
+ 225 0.1521 libcairo.so.2.11.3
+ 195 0.1318 libm-2.5.so
+ 186 0.1257 libglib-2.0.so.0.1200.12
+ 178 0.1203 libpthread-2.5.so
+ 173 0.1170 libmozjs.so
+ 157 0.1061 libnspr4.so
+ 154 0.1041 ext3
+ 153 0.1034 bash
+ 153 0.1034 jbd
+ 97 0.0656 libdri.so
+ 95 0.0642 libgtk-x11-2.0.so.0.1000.12
+ 71 0.0480 libgcc_s.so.1
+ 70 0.0473 ld-2.5.so
+ 52 0.0352 libextmod.so
+ 42 0.0284 libstdc++.so.6.0.9
+ 34 0.0230 sysprof_module
+ 14 0.0095 libplds4.so
+ 13 0.0088 libgthread-2.0.so.0.1200.12
+ 4 0.0027 ehci_hcd
+ 4 0.0027 locale-archive
+ 3 0.0020 grep
+ 3 0.0020 mouse_drv.so
+ 3 0.0020 uhci_hcd
+ 2 0.0014 cat
+ 2 0.0014 gawk
+ 1 6.8e-04 mkdir
+ 1 6.8e-04 e1000
+ 1 6.8e-04 libselinux.so.1
+ 1 6.8e-04 usbcore
+ 1 6.8e-04 usbhid
+ 1 6.8e-04 sudo
+ 1 6.8e-04 libcrypto.so.0.9.8
+ 1 6.8e-04 sshd
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name app name symbol name
+31820 21.5122 libc-2.5.so libc-2.5.so memcpy
+15941 10.7771 libxul.so libxul.so (no symbols)
+11683 7.8984 intel_drv.so intel_drv.so I830WaitLpRing
+10181 6.8830 intel_drv.so intel_drv.so i965_prepare_composite
+9093 6.1474 vmlinux vmlinux system_call
+8255 5.5809 libc-2.5.so libc-2.5.so gettimeofday
+7081 4.7872 oprofiled oprofiled (no symbols)
+4128 2.7908 intel_drv.so intel_drv.so i965_composite
+3301 2.2317 vmlinux vmlinux do_gettimeofday
+2442 1.6509 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_op
+1657 1.1202 vmlinux vmlinux __copy_to_user_ll
+1591 1.0756 vmlinux vmlinux get_page_from_freelist
+1508 1.0195 vmlinux vmlinux read_tsc
+1442 0.9749 oprofile.ko oprofile sync_buffer
+1371 0.9269 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+1257 0.8498 Xorg Xorg GetTimeInMillis
+1077 0.7281 libexa.so libexa.so __i686.get_pc_thunk.bx
+1024 0.6923 libexa.so libexa.so ExaOffscreenMarkUsed
+1001 0.6767 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1
+898 0.6071 Xorg Xorg miComputeCompositeRegion
+895 0.6051 libexa.so libexa.so exaComposite
+879 0.5943 libc-2.5.so libc-2.5.so _int_malloc
+765 0.5172 vmlinux vmlinux page_fault
+751 0.5077 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+696 0.4705 vmlinux vmlinux find_vma
+691 0.4672 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt_mmx
+684 0.4624 libexa.so libexa.so exaTryDriverComposite
+674 0.4557 libexa.so libexa.so exaPixmapIsOffscreen
+668 0.4516 libc-2.5.so libc-2.5.so malloc
+640 0.4327 vmlinux vmlinux restore_nocheck
+620 0.4192 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols)
+570 0.3854 intel_drv.so intel_drv.so I830Sync
+554 0.3745 oprofile.ko oprofile add_event_entry
+542 0.3664 libexa.so libexa.so exaMoveInPixmap
+471 0.3184 libc-2.5.so libc-2.5.so free
+425 0.2873 vmlinux vmlinux kunmap_atomic
+424 0.2866 libexa.so libexa.so .plt
+409 0.2765 vmlinux vmlinux syscall_exit
+402 0.2718 libexa.so libexa.so exaGlyphs
+400 0.2704 libexa.so libexa.so exaDoMigration
+399 0.2697 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+382 0.2583 vmlinux vmlinux sys_gettimeofday
+360 0.2434 Xorg Xorg miSpriteSourceValidate
+356 0.2407 libc-2.5.so libc-2.5.so _int_free
+320 0.2163 libexa.so libexa.so exaGetDrawablePixmap
+318 0.2150 libfb.so libfb.so fbDoCopy
+309 0.2089 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols)
+301 0.2035 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_union
+291 0.1967 libexa.so libexa.so exaPixmapDirty
+282 0.1906 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols)
+260 0.1758 vmlinux vmlinux copy_to_user
+255 0.1724 Xorg Xorg miCompositeSourceValidate
+254 0.1717 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols)
+244 0.1650 vmlinux vmlinux restore_all
+233 0.1575 libexa.so libexa.so exaWaitSync
+230 0.1555 Xorg Xorg __i686.get_pc_thunk.bx
+225 0.1521 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols)
+225 0.1521 libexa.so libexa.so exaPixmapIsPinned
+224 0.1514 intel_drv.so intel_drv.so .plt
+219 0.1481 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_unionO
+216 0.1460 intel_drv.so intel_drv.so i830_get_transformed_coordinates
+211 0.1426 Xorg Xorg miModifyPixmapHeader
+211 0.1426 intel_drv.so intel_drv.so i965_check_composite
+211 0.1426 libexa.so libexa.so exaCopyNtoN
+211 0.1426 libexa.so libexa.so exaMemcpyBox
+208 0.1406 vmlinux vmlinux __d_lookup
+200 0.1352 vmlinux vmlinux cond_resched
+197 0.1332 libc-2.5.so libc-2.5.so memcmp
+194 0.1312 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles
+193 0.1305 intel_drv.so intel_drv.so __i686.get_pc_thunk.bx
+193 0.1305 intel_drv.so intel_drv.so i965_check_composite_texture
+186 0.1257 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols)
+183 0.1237 vmlinux vmlinux unmap_vmas
+176 0.1190 Xorg Xorg .plt
+173 0.1170 libmozjs.so libmozjs.so (no symbols)
+170 0.1149 intel_drv.so intel_drv.so i830WaitSync
+165 0.1115 libfb.so libfb.so fbCopyNtoN
+164 0.1109 intel_drv.so intel_drv.so intel_get_pixmap_pitch
+157 0.1061 libnspr4.so libnspr4.so (no symbols)
+153 0.1034 bash bash (no symbols)
+153 0.1034 libc-2.5.so libc-2.5.so msort_with_tmp
+151 0.1021 intel_drv.so intel_drv.so intel_get_pixmap_offset
+151 0.1021 libc-2.5.so libc-2.5.so malloc_consolidate
+149 0.1007 libc-2.5.so libc-2.5.so memmove
+146 0.0987 libexa.so libexa.so exaGetOffscreenPixmap
+143 0.0967 libm-2.5.so libm-2.5.so floor
+128 0.0865 libexa.so libexa.so exaMarkSync
+125 0.0845 oprofile.ko oprofile add_sample_entry
+117 0.0791 libexa.so libexa.so exaFinishAccess
+117 0.0791 vmlinux vmlinux __handle_mm_fault
+114 0.0771 libexa.so libexa.so exaGetDrawableDeltas
+111 0.0750 Xorg Xorg XaceHook
+111 0.0750 libexa.so libexa.so exaCopyDirtyToSys
+109 0.0737 libfb.so libfb.so fbCopyRegion
+106 0.0717 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects
+105 0.0710 Xorg Xorg FindGlyphRef
+105 0.0710 Xorg Xorg miUnion
+100 0.0676 libexa.so libexa.so exaMoveOutPixmap
+99 0.0669 libexa.so libexa.so exaPrepareAccess
+98 0.0663 vmlinux vmlinux __link_path_walk
+95 0.0642 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+94 0.0635 libexa.so libexa.so exaCopyArea
+92 0.0622 Xorg Xorg damageGlyphs
+90 0.0608 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+90 0.0608 libexa.so libexa.so exaGetPixmapOffset
+88 0.0595 vmlinux vmlinux __rmqueue
+88 0.0595 vmlinux vmlinux syscall_call
+85 0.0575 libc-2.5.so libc-2.5.so memset
+83 0.0561 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock
+82 0.0554 intel_drv.so intel_drv.so IntelEmitInvarientState
+80 0.0541 libexa.so libexa.so exaOffscreenAlloc
+79 0.0534 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt
+77 0.0521 Xorg Xorg ReadRequestFromClient
+77 0.0521 intel_drv.so intel_drv.so I830EXASync
+77 0.0521 vmlinux vmlinux release_pages
+73 0.0494 libc-2.5.so libc-2.5.so strstr
+72 0.0487 vmlinux vmlinux do_page_fault
+71 0.0480 libgcc_s.so.1 libgcc_s.so.1 (no symbols)
+71 0.0480 vmlinux vmlinux __pagevec_lru_add_active
+68 0.0460 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_have_mmx
+66 0.0446 vmlinux vmlinux page_address
+65 0.0439 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+63 0.0426 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+61 0.0412 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rect_alloc
+61 0.0412 vmlinux vmlinux free_hot_cold_page
+60 0.0406 Xorg Xorg FreeResource
+59 0.0399 vmlinux vmlinux timer_interrupt
+57 0.0385 Xorg Xorg DamageEmpty
+57 0.0385 vmlinux vmlinux page_remove_rmap
+56 0.0379 Xorg Xorg SecurityLookupIDByType
+56 0.0379 vmlinux vmlinux _atomic_dec_and_lock
+55 0.0372 vmlinux vmlinux __copy_from_user_ll
+55 0.0372 vmlinux vmlinux lru_cache_add_active
+53 0.0358 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal
+53 0.0358 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+51 0.0345 vmlinux vmlinux mwait_idle_with_hints
+50 0.0338 libextmod.so libextmod.so XvDestroyPixmap
+48 0.0325 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+48 0.0325 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty
+47 0.0318 libexa.so libexa.so __i686.get_pc_thunk.cx
+46 0.0311 Xorg Xorg Dispatch
+46 0.0311 libc-2.5.so libc-2.5.so strlen
+45 0.0304 libexa.so libexa.so exaOffscreenFree
+44 0.0297 libc-2.5.so libc-2.5.so mbrtowc
+42 0.0284 intel_drv.so intel_drv.so i965_get_dest_format
+42 0.0284 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols)
+41 0.0277 libdri.so libdri.so DRIGetSAREAPrivate
+40 0.0270 Xorg Xorg ProcRenderCompositeGlyphs
+40 0.0270 Xorg Xorg _CallCallbacks
+40 0.0270 libfb.so libfb.so fbValidateGC
+39 0.0264 Xorg Xorg CallCallbacks
+39 0.0264 Xorg Xorg dixChangeGC
+39 0.0264 intel_drv.so intel_drv.so I830EXASolid
+39 0.0264 vmlinux vmlinux down_read_trylock
+38 0.0257 libdri.so libdri.so DRIGetContext
+38 0.0257 vmlinux vmlinux error_code
+35 0.0237 Xorg Xorg DamageRegion
+34 0.0230 Xorg Xorg SecurityCheckResourceIDAccess
+34 0.0230 Xorg Xorg damageDamageRegion
+34 0.0230 sysprof_module sysprof_module (no symbols)
+34 0.0230 vmlinux vmlinux free_pages_bulk
+30 0.0203 ext3.ko ext3 ext3_getblk
+30 0.0203 vmlinux vmlinux no_singlestep
+29 0.0196 Xorg Xorg damageDestroyPixmap
+29 0.0196 vmlinux vmlinux __find_get_block
+28 0.0189 Xorg Xorg Hash
+28 0.0189 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect
+28 0.0189 vmlinux vmlinux __alloc_pages
+28 0.0189 vmlinux vmlinux find_get_page
+27 0.0183 vmlinux vmlinux do_wp_page
+27 0.0183 vmlinux vmlinux kmem_cache_alloc
+27 0.0183 vmlinux vmlinux prune_dcache
+27 0.0183 vmlinux vmlinux up_read
+26 0.0176 libexa.so libexa.so exaOpReadsDestination
+26 0.0176 libfb.so libfb.so __i686.get_pc_thunk.cx
+25 0.0169 vmlinux vmlinux __copy_from_user_ll_nozero
+24 0.0162 Xorg Xorg CompareISOLatin1Lowered
+24 0.0162 libexa.so libexa.so exaGetPixmapPitch
+24 0.0162 vmlinux vmlinux apic_timer_interrupt
+23 0.0155 intel_drv.so intel_drv.so I830EXAPrepareSolid
+23 0.0155 libfb.so libfb.so fbGetGCPrivateIndex
+22 0.0149 libexa.so libexa.so exaCreatePixmap
+21 0.0142 Xorg Xorg ChangePicture
+21 0.0142 Xorg Xorg FindGlyph
+21 0.0142 Xorg Xorg miValidatePicture
+21 0.0142 ext3.ko ext3 ext3_mark_iloc_dirty
+21 0.0142 jbd.ko jbd do_get_write_access
+21 0.0142 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+21 0.0142 vmlinux vmlinux do_path_lookup
+21 0.0142 vmlinux vmlinux memcmp
+20 0.0135 Xorg Xorg Xfree
+20 0.0135 libm-2.5.so libm-2.5.so sin
+20 0.0135 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+20 0.0135 vmlinux vmlinux __dec_zone_page_state
+20 0.0135 vmlinux vmlinux hrtimer_run_queues
+20 0.0135 vmlinux vmlinux schedule
+19 0.0128 Xorg Xorg AllocatePixmap
+19 0.0128 Xorg Xorg FreeScratchGC
+19 0.0128 intel_drv.so intel_drv.so i830MarkSync
+19 0.0128 libfb.so libfb.so fbCreatePixmapBpp
+19 0.0128 libfb.so libfb.so fbSolid
+19 0.0128 vmlinux vmlinux do_lookup
+18 0.0122 Xorg Xorg CreatePicture
+18 0.0122 Xorg Xorg FreePicture
+18 0.0122 libc-2.5.so libc-2.5.so _dl_addr
+18 0.0122 libc-2.5.so libc-2.5.so mkdir
+18 0.0122 libdri.so libdri.so __i686.get_pc_thunk.cx
+17 0.0115 Xorg Xorg ProcRenderCreatePicture
+17 0.0115 Xorg Xorg XaceCatchExtProc
+17 0.0115 Xorg Xorg getDrawableDamageRef
+17 0.0115 intel_drv.so intel_drv.so i965_get_card_format
+17 0.0115 libexa.so libexa.so exaPolyFillRect
+17 0.0115 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+17 0.0115 vmlinux vmlinux permission
+17 0.0115 vmlinux vmlinux strncpy_from_user
+17 0.0115 vmlinux vmlinux unix_stream_sendmsg
+16 0.0108 Xorg Xorg Ones
+16 0.0108 Xorg Xorg miComputeCompositeClip
+16 0.0108 jbd.ko jbd journal_add_journal_head
+16 0.0108 jbd.ko jbd journal_dirty_metadata
+16 0.0108 vmlinux vmlinux find_busiest_group
+16 0.0108 vmlinux vmlinux zone_watermark_ok
+15 0.0101 Xorg Xorg GetScratchGC
+15 0.0101 Xorg Xorg XaceCatchDispatchProc
+15 0.0101 Xorg Xorg __divdi3
+15 0.0101 Xorg Xorg damagePolyFillRect
+15 0.0101 Xorg Xorg dixLookupDrawable
+15 0.0101 Xorg Xorg miColorRects
+15 0.0101 ld-2.5.so ld-2.5.so do_lookup_x
+15 0.0101 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+15 0.0101 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+15 0.0101 vmlinux vmlinux __kmalloc
+14 0.0095 Xorg Xorg ProcRenderDispatch
+14 0.0095 Xorg Xorg miRectsToRegion
+14 0.0095 ext3.ko ext3 ext3_new_inode
+14 0.0095 jbd.ko jbd journal_cancel_revoke
+14 0.0095 jbd.ko jbd journal_put_journal_head
+14 0.0095 libc-2.5.so libc-2.5.so _int_realloc
+14 0.0095 libc-2.5.so libc-2.5.so qsort
+14 0.0095 libexa.so libexa.so exaDestroyPixmap
+14 0.0095 libm-2.5.so libm-2.5.so ceil
+14 0.0095 libplds4.so libplds4.so (no symbols)
+14 0.0095 vmlinux vmlinux __follow_mount
+13 0.0088 intel_drv.so intel_drv.so i830_done_composite
+13 0.0088 jbd.ko jbd journal_commit_transaction
+13 0.0088 libfb.so libfb.so .plt
+13 0.0088 libfb.so libfb.so __i686.get_pc_thunk.bx
+13 0.0088 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols)
+13 0.0088 vmlinux vmlinux rebalance_tick
+13 0.0088 vmlinux vmlinux resume_userspace
+12 0.0081 Xorg Xorg PictureGetFilterId
+12 0.0081 Xorg Xorg damageDamageBox
+12 0.0081 Xorg Xorg miLineFixedX
+12 0.0081 ext3.ko ext3 ext3_get_blocks_handle
+12 0.0081 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+12 0.0081 libc-2.5.so libc-2.5.so realloc
+12 0.0081 libc-2.5.so libc-2.5.so strcmp
+12 0.0081 libexa.so libexa.so exaFillRegionSolid
+12 0.0081 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate
+12 0.0081 vmlinux vmlinux __inc_zone_state
+12 0.0081 vmlinux vmlinux kmem_cache_free
+11 0.0074 Xorg Xorg ProcRenderFreePicture
+11 0.0074 Xorg Xorg SecurityLookupIDByClass
+11 0.0074 Xorg Xorg miCompositeRects
+11 0.0074 Xorg Xorg miGlyphExtents
+11 0.0074 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+11 0.0074 libpthread-2.5.so libpthread-2.5.so pthread_getspecific
+11 0.0074 vmlinux vmlinux __alloc_skb
+11 0.0074 vmlinux vmlinux anon_vma_prepare
+11 0.0074 vmlinux vmlinux fget_light
+11 0.0074 vmlinux vmlinux vm_normal_page
+10 0.0068 Xorg Xorg ProcCreatePixmap
+10 0.0068 Xorg Xorg SecurityCheckExtAccess
+10 0.0068 Xorg Xorg damageReportPostOp
+10 0.0068 Xorg Xorg miIntersect
+10 0.0068 jbd.ko jbd __journal_file_buffer
+10 0.0068 jbd.ko jbd journal_clean_one_cp_list
+10 0.0068 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+10 0.0068 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+10 0.0068 vmlinux vmlinux do_mmap_pgoff
+10 0.0068 vmlinux vmlinux free_block
+10 0.0068 vmlinux vmlinux irq_entries_start
+10 0.0068 vmlinux vmlinux profile_tick
+10 0.0068 vmlinux vmlinux run_timer_softirq
+9 0.0061 Xorg Xorg DamageReportDamage
+9 0.0061 Xorg Xorg LegalNewID
+9 0.0061 Xorg Xorg damageChangeGC
+9 0.0061 Xorg Xorg miRegionDestroy
+9 0.0061 jbd.ko jbd journal_stop
+9 0.0061 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+9 0.0061 vmlinux vmlinux __brelse
+9 0.0061 vmlinux vmlinux __page_set_anon_rmap
+9 0.0061 vmlinux vmlinux __switch_to
+9 0.0061 vmlinux vmlinux cache_alloc_refill
+9 0.0061 vmlinux vmlinux find_next_zero_bit
+9 0.0061 vmlinux vmlinux generic_permission
+9 0.0061 vmlinux vmlinux rw_verify_area
+8 0.0054 Xorg Xorg AddResource
+8 0.0054 Xorg Xorg AllocatePicture
+8 0.0054 Xorg Xorg damageComposite
+8 0.0054 Xorg Xorg damageValidateGC
+8 0.0054 Xorg Xorg miRegionCreate
+8 0.0054 ext3.ko ext3 __ext3_get_inode_loc
+8 0.0054 ld-2.5.so ld-2.5.so _dl_relocate_object
+8 0.0054 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+8 0.0054 vmlinux vmlinux __find_get_block_slow
+8 0.0054 vmlinux vmlinux dput
+8 0.0054 vmlinux vmlinux filemap_nopage
+8 0.0054 vmlinux vmlinux kmap_atomic
+8 0.0054 vmlinux vmlinux smp_apic_timer_interrupt
+8 0.0054 vmlinux vmlinux vfs_write
+7 0.0047 Xorg Xorg DamageDestroy
+7 0.0047 Xorg Xorg DamageRegister
+7 0.0047 Xorg Xorg GetExtensionEntry
+7 0.0047 Xorg Xorg ProcRenderFillRectangles
+7 0.0047 Xorg Xorg ProcRenderSetPictureFilter
+7 0.0047 Xorg Xorg SetPictureTransform
+7 0.0047 Xorg Xorg ValidateGC
+7 0.0047 Xorg Xorg Xalloc
+7 0.0047 Xorg Xorg damagePolySegment
+7 0.0047 Xorg Xorg miBSCheapValidateGC
+7 0.0047 ext3.ko ext3 ext3_new_blocks
+7 0.0047 ld-2.5.so ld-2.5.so strcmp
+7 0.0047 libfb.so libfb.so image_from_pict
+7 0.0047 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+7 0.0047 vmlinux vmlinux __getblk
+7 0.0047 vmlinux vmlinux clocksource_get_next
+7 0.0047 vmlinux vmlinux d_alloc
+7 0.0047 vmlinux vmlinux free_pages_and_swap_cache
+7 0.0047 vmlinux vmlinux notifier_call_chain
+6 0.0041 Xorg Xorg CompositePicture
+6 0.0041 Xorg Xorg FreeScratchPixmapHeader
+6 0.0041 Xorg Xorg ProcRenderChangePicture
+6 0.0041 Xorg Xorg SetPictureFilter
+6 0.0041 Xorg Xorg SetPictureToDefaults
+6 0.0041 Xorg Xorg ValidatePicture
+6 0.0041 Xorg Xorg damageChangeClip
+6 0.0041 jbd.ko jbd __journal_temp_unlink_buffer
+6 0.0041 jbd.ko jbd journal_write_metadata_buffer
+6 0.0041 libc-2.5.so libc-2.5.so _IO_vfscanf
+6 0.0041 libc-2.5.so libc-2.5.so __read_nocancel
+6 0.0041 libc-2.5.so libc-2.5.so strchr
+6 0.0041 libm-2.5.so libm-2.5.so cos
+6 0.0041 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+6 0.0041 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents
+6 0.0041 vmlinux vmlinux __do_softirq
+6 0.0041 vmlinux vmlinux __wake_up_bit
+6 0.0041 vmlinux vmlinux account_user_time
+6 0.0041 vmlinux vmlinux check_userspace
+6 0.0041 vmlinux vmlinux do_notify_resume
+6 0.0041 vmlinux vmlinux do_timer
+6 0.0041 vmlinux vmlinux link_path_walk
+6 0.0041 vmlinux vmlinux radix_tree_lookup
+6 0.0041 vmlinux vmlinux raise_softirq
+6 0.0041 vmlinux vmlinux sched_clock
+6 0.0041 vmlinux vmlinux unix_stream_recvmsg
+6 0.0041 vmlinux vmlinux unlock_buffer
+5 0.0034 Xorg Xorg ChangeGC
+5 0.0034 Xorg Xorg CompositeGlyphs
+5 0.0034 Xorg Xorg DamageCreate
+5 0.0034 Xorg Xorg DamageSetReportAfterOp
+5 0.0034 Xorg Xorg FlushClientCaches
+5 0.0034 Xorg Xorg PictureFindFilter
+5 0.0034 Xorg Xorg ProcFreePixmap
+5 0.0034 Xorg Xorg ValidateOnePicture
+5 0.0034 Xorg Xorg miBSCheapChangeGC
+5 0.0034 Xorg Xorg miRegionValidate
+5 0.0034 Xorg Xorg miTranslateRegion
+5 0.0034 ext3.ko ext3 ext3_get_group_desc
+5 0.0034 ext3.ko ext3 ext3_reserve_inode_write
+5 0.0034 libc-2.5.so libc-2.5.so vfprintf
+5 0.0034 libexa.so libexa.so exaValidateGC
+5 0.0034 libm-2.5.so libm-2.5.so floorf
+5 0.0034 libm-2.5.so libm-2.5.so tan
+5 0.0034 vmlinux vmlinux __first_cpu
+5 0.0034 vmlinux vmlinux bit_waitqueue
+5 0.0034 vmlinux vmlinux find_next_bit
+5 0.0034 vmlinux vmlinux inotify_dentry_parent_queue_event
+5 0.0034 vmlinux vmlinux iret_exc
+5 0.0034 vmlinux vmlinux irq_exit
+5 0.0034 vmlinux vmlinux mntput_no_expire
+4 0.0027 Xorg Xorg ProcRenderSetPictureTransform
+4 0.0027 Xorg Xorg miDestroyPictureClip
+4 0.0027 Xorg Xorg miRegionInit
+4 0.0027 Xorg Xorg miRenderColorToPixel
+4 0.0027 ehci-hcd.ko ehci_hcd ehci_hub_status_data
+4 0.0027 ext3.ko ext3 ext3_get_block
+4 0.0027 ext3.ko ext3 ext3_test_allocatable
+4 0.0027 ext3.ko ext3 ext3_try_to_allocate_with_rsv
+4 0.0027 jbd.ko jbd journal_get_undo_access
+4 0.0027 jbd.ko jbd start_this_handle
+4 0.0027 ld-2.5.so ld-2.5.so check_match.7793
+4 0.0027 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx
+4 0.0027 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check
+4 0.0027 libfb.so libfb.so fbDestroyPixmap
+4 0.0027 locale-archive locale-archive (no symbols)
+4 0.0027 vmlinux vmlinux __inc_zone_page_state
+4 0.0027 vmlinux vmlinux __insert_inode_hash
+4 0.0027 vmlinux vmlinux __mark_inode_dirty
+4 0.0027 vmlinux vmlinux __next_cpu
+4 0.0027 vmlinux vmlinux __pagevec_free
+4 0.0027 vmlinux vmlinux __sigqueue_alloc
+4 0.0027 vmlinux vmlinux alloc_inode
+4 0.0027 vmlinux vmlinux arch_get_unmapped_area_topdown
+4 0.0027 vmlinux vmlinux copy_page_range
+4 0.0027 vmlinux vmlinux copy_process
+4 0.0027 vmlinux vmlinux do_mpage_readpage
+4 0.0027 vmlinux vmlinux do_softirq
+4 0.0027 vmlinux vmlinux do_sync_read
+4 0.0027 vmlinux vmlinux find_vma_prev
+4 0.0027 vmlinux vmlinux flush_tlb_page
+4 0.0027 vmlinux vmlinux get_unused_fd
+4 0.0027 vmlinux vmlinux handle_edge_irq
+4 0.0027 vmlinux vmlinux isolate_lru_pages
+4 0.0027 vmlinux vmlinux math_state_restore
+4 0.0027 vmlinux vmlinux new_inode
+4 0.0027 vmlinux vmlinux page_add_file_rmap
+4 0.0027 vmlinux vmlinux queue_delayed_work
+4 0.0027 vmlinux vmlinux scheduler_tick
+4 0.0027 vmlinux vmlinux search_extable
+4 0.0027 vmlinux vmlinux sock_alloc_send_skb
+4 0.0027 vmlinux vmlinux softlockup_tick
+4 0.0027 vmlinux vmlinux sys_mkdirat
+4 0.0027 vmlinux vmlinux sys_read
+3 0.0020 Xorg Xorg PictOpValid
+3 0.0020 Xorg Xorg ProcRenderTrapezoids
+3 0.0020 Xorg Xorg dixDestroyPixmap
+3 0.0020 Xorg Xorg miChangeClip
+3 0.0020 Xorg Xorg miChangePictureFilter
+3 0.0020 Xorg Xorg miDestroyClip
+3 0.0020 Xorg Xorg miTrapezoidBounds
+3 0.0020 ext3.ko ext3 ext3_find_entry
+3 0.0020 ext3.ko ext3 ext3_mkdir
+3 0.0020 ext3.ko ext3 ext3_setattr
+3 0.0020 ext3.ko ext3 ext3_try_to_allocate
+3 0.0020 grep grep (no symbols)
+3 0.0020 jbd.ko jbd journal_start
+3 0.0020 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+3 0.0020 libc-2.5.so libc-2.5.so _IO_default_xsputn
+3 0.0020 libc-2.5.so libc-2.5.so __ctype_get_mb_cur_max
+3 0.0020 libc-2.5.so libc-2.5.so sigprocmask
+3 0.0020 libc-2.5.so libc-2.5.so strcpy
+3 0.0020 libfb.so libfb.so fbCreatePixmap
+3 0.0020 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+3 0.0020 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+3 0.0020 libpthread-2.5.so libpthread-2.5.so __errno_location
+3 0.0020 libpthread-2.5.so libpthread-2.5.so __write_nocancel
+3 0.0020 libpthread-2.5.so libpthread-2.5.so write
+3 0.0020 uhci-hcd.ko uhci_hcd uhci_get_current_frame_number
+3 0.0020 vmlinux vmlinux __block_prepare_write
+3 0.0020 vmlinux vmlinux __rcu_pending
+3 0.0020 vmlinux vmlinux __set_page_dirty_buffers
+3 0.0020 vmlinux vmlinux __wake_up_common
+3 0.0020 vmlinux vmlinux alloc_sock_iocb
+3 0.0020 vmlinux vmlinux atomic_notifier_call_chain
+3 0.0020 vmlinux vmlinux block_read_full_page
+3 0.0020 vmlinux vmlinux cond_resched_lock
+3 0.0020 vmlinux vmlinux cpu_idle
+3 0.0020 vmlinux vmlinux current_fs_time
+3 0.0020 vmlinux vmlinux d_rehash
+3 0.0020 vmlinux vmlinux do_sys_poll
+3 0.0020 vmlinux vmlinux drain_array
+3 0.0020 vmlinux vmlinux find_lock_page
+3 0.0020 vmlinux vmlinux find_vma_prepare
+3 0.0020 vmlinux vmlinux groups_search
+3 0.0020 vmlinux vmlinux internal_add_timer
+3 0.0020 vmlinux vmlinux kfree
+3 0.0020 vmlinux vmlinux kmem_cache_zalloc
+3 0.0020 vmlinux vmlinux mark_page_accessed
+3 0.0020 vmlinux vmlinux memcpy
+3 0.0020 vmlinux vmlinux mutex_lock
+3 0.0020 vmlinux vmlinux nr_active
+3 0.0020 vmlinux vmlinux page_add_new_anon_rmap
+3 0.0020 vmlinux vmlinux radix_tree_insert
+3 0.0020 vmlinux vmlinux rcu_pending
+3 0.0020 vmlinux vmlinux restore_sigcontext
+3 0.0020 vmlinux vmlinux ret_from_exception
+3 0.0020 vmlinux vmlinux shrink_inactive_list
+3 0.0020 vmlinux vmlinux sig_ignored
+3 0.0020 vmlinux vmlinux smp_send_timer_broadcast_ipi
+3 0.0020 vmlinux vmlinux sock_aio_read
+3 0.0020 vmlinux vmlinux submit_bh
+3 0.0020 vmlinux vmlinux sys_close
+3 0.0020 vmlinux vmlinux task_rq_lock
+3 0.0020 vmlinux vmlinux unlink_file_vma
+3 0.0020 vmlinux vmlinux vfs_permission
+3 0.0020 vmlinux vmlinux vmtruncate
+3 0.0020 vmlinux vmlinux vsnprintf
+2 0.0014 Xorg Xorg CompositeRects
+2 0.0014 Xorg Xorg CreateGC
+2 0.0014 Xorg Xorg GetScratchPixmapHeader
+2 0.0014 Xorg Xorg ProcPolyFillRectangle
+2 0.0014 Xorg Xorg ProcSetClipRectangles
+2 0.0014 Xorg Xorg SetPictureClipRects
+2 0.0014 Xorg Xorg _XSERVTransSocketRead
+2 0.0014 Xorg Xorg __i686.get_pc_thunk.cx
+2 0.0014 Xorg Xorg dixLookupGC
+2 0.0014 Xorg Xorg miBSCheapChangeClip
+2 0.0014 Xorg Xorg miChangePictureClip
+2 0.0014 Xorg Xorg miDestroyPicture
+2 0.0014 cat cat (no symbols)
+2 0.0014 ext3.ko ext3 add_dirent_to_buf
+2 0.0014 ext3.ko ext3 ext3_add_entry
+2 0.0014 ext3.ko ext3 ext3_block_to_path
+2 0.0014 ext3.ko ext3 ext3_clear_blocks
+2 0.0014 ext3.ko ext3 ext3_init_acl
+2 0.0014 ext3.ko ext3 ext3_mark_inode_dirty
+2 0.0014 ext3.ko ext3 ext3_permission
+2 0.0014 gawk gawk (no symbols)
+2 0.0014 jbd.ko jbd journal_file_buffer
+2 0.0014 jbd.ko jbd journal_get_write_access
+2 0.0014 ld-2.5.so ld-2.5.so _dl_cache_libcmp
+2 0.0014 ld-2.5.so ld-2.5.so _dl_fini
+2 0.0014 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+2 0.0014 libc-2.5.so libc-2.5.so _IO_file_init@@GLIBC_2.1
+2 0.0014 libc-2.5.so libc-2.5.so _IO_un_link
+2 0.0014 libc-2.5.so libc-2.5.so ____strtoul_l_internal
+2 0.0014 libc-2.5.so libc-2.5.so __close_nocancel
+2 0.0014 libc-2.5.so libc-2.5.so __open_nocancel
+2 0.0014 libc-2.5.so libc-2.5.so __rpc_thread_destroy
+2 0.0014 libc-2.5.so libc-2.5.so __xstat
+2 0.0014 libc-2.5.so libc-2.5.so _nl_intern_locale_data
+2 0.0014 libc-2.5.so libc-2.5.so bsearch
+2 0.0014 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+2 0.0014 libc-2.5.so libc-2.5.so ftruncate
+2 0.0014 libc-2.5.so libc-2.5.so mempcpy
+2 0.0014 libc-2.5.so libc-2.5.so munmap
+2 0.0014 libc-2.5.so libc-2.5.so strcat
+2 0.0014 libexa.so libexa.so ExaCheckComposite
+2 0.0014 libextmod.so libextmod.so __i686.get_pc_thunk.bx
+2 0.0014 libfb.so libfb.so fbRasterizeTrapezoid
+2 0.0014 libm-2.5.so libm-2.5.so ceilf
+2 0.0014 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+2 0.0014 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel
+2 0.0014 libpthread-2.5.so libpthread-2.5.so pthread_self
+2 0.0014 vmlinux vmlinux __d_path
+2 0.0014 vmlinux vmlinux __dequeue_signal
+2 0.0014 vmlinux vmlinux __make_request
+2 0.0014 vmlinux vmlinux __vma_link
+2 0.0014 vmlinux vmlinux add_to_page_cache
+2 0.0014 vmlinux vmlinux anon_vma_unlink
+2 0.0014 vmlinux vmlinux bio_alloc_bioset
+2 0.0014 vmlinux vmlinux can_vma_merge_after
+2 0.0014 vmlinux vmlinux device_not_available
+2 0.0014 vmlinux vmlinux dnotify_parent
+2 0.0014 vmlinux vmlinux dummy_file_permission
+2 0.0014 vmlinux vmlinux dummy_inode_permission
+2 0.0014 vmlinux vmlinux effective_prio
+2 0.0014 vmlinux vmlinux enqueue_task
+2 0.0014 vmlinux vmlinux fixup_exception
+2 0.0014 vmlinux vmlinux flush_tlb_mm
+2 0.0014 vmlinux vmlinux get_empty_filp
+2 0.0014 vmlinux vmlinux get_signal_to_deliver
+2 0.0014 vmlinux vmlinux get_vmalloc_info
+2 0.0014 vmlinux vmlinux getname
+2 0.0014 vmlinux vmlinux handle_IRQ_event
+2 0.0014 vmlinux vmlinux inode_init_once
+2 0.0014 vmlinux vmlinux mmput
+2 0.0014 vmlinux vmlinux mutex_unlock
+2 0.0014 vmlinux vmlinux percpu_counter_mod
+2 0.0014 vmlinux vmlinux prio_tree_insert
+2 0.0014 vmlinux vmlinux radix_tree_preload
+2 0.0014 vmlinux vmlinux remove_mapping
+2 0.0014 vmlinux vmlinux resched_task
+2 0.0014 vmlinux vmlinux run_workqueue
+2 0.0014 vmlinux vmlinux save_i387
+2 0.0014 vmlinux vmlinux shrink_active_list
+2 0.0014 vmlinux vmlinux skb_dequeue
+2 0.0014 vmlinux vmlinux skb_queue_head
+2 0.0014 vmlinux vmlinux skb_queue_tail
+2 0.0014 vmlinux vmlinux sock_aio_write
+2 0.0014 vmlinux vmlinux sock_def_readable
+2 0.0014 vmlinux vmlinux sock_wfree
+2 0.0014 vmlinux vmlinux split_vma
+2 0.0014 vmlinux vmlinux strnlen_user
+2 0.0014 vmlinux vmlinux sys_ftruncate
+2 0.0014 vmlinux vmlinux sys_sigreturn
+2 0.0014 vmlinux vmlinux sys_write
+2 0.0014 vmlinux vmlinux test_clear_page_dirty
+2 0.0014 vmlinux vmlinux unix_poll
+2 0.0014 vmlinux vmlinux unix_write_space
+2 0.0014 vmlinux vmlinux vfs_create
+2 0.0014 vmlinux vmlinux vfs_read
+2 0.0014 vmlinux vmlinux vma_adjust
+2 0.0014 vmlinux vmlinux vma_link
+2 0.0014 vmlinux vmlinux vma_prio_tree_insert
+1 6.8e-04 Xorg Xorg BlockHandler
+1 6.8e-04 Xorg Xorg CompositeTrapezoids
+1 6.8e-04 Xorg Xorg DeliverDeviceEvents
+1 6.8e-04 Xorg Xorg FlushClient
+1 6.8e-04 Xorg Xorg PictureMatchFormat
+1 6.8e-04 Xorg Xorg ProcChangeGC
+1 6.8e-04 Xorg Xorg ProcCreateGC
+1 6.8e-04 Xorg Xorg ProcRenderComposite
+1 6.8e-04 Xorg Xorg ProcRenderSetPictureClipRectangles
+1 6.8e-04 Xorg Xorg QuickSortRects
+1 6.8e-04 Xorg Xorg SmartScheduleTimer
+1 6.8e-04 Xorg Xorg XkbFilterEvents
+1 6.8e-04 Xorg Xorg _XSERVTransRead
+1 6.8e-04 Xorg Xorg damageDestroyGC
+1 6.8e-04 Xorg Xorg damageInsertDamage
+1 6.8e-04 Xorg Xorg damageRemoveDamage
+1 6.8e-04 Xorg Xorg miBSCheapDestroyClip
+1 6.8e-04 Xorg Xorg miBSCreateGC
+1 6.8e-04 Xorg Xorg miChangePicture
+1 6.8e-04 Xorg Xorg miChangePictureTransform
+1 6.8e-04 Xorg Xorg miCreateAlphaPicture
+1 6.8e-04 Xorg Xorg xf86VTSwitchPending
+1 6.8e-04 e1000.ko e1000 e1000_clean
+1 6.8e-04 ext3.ko ext3 .text
+1 6.8e-04 ext3.ko ext3 __ext3_journal_stop
+1 6.8e-04 ext3.ko ext3 blocks_for_truncate
+1 6.8e-04 ext3.ko ext3 ext3_check_dir_entry
+1 6.8e-04 ext3.ko ext3 ext3_dirty_inode
+1 6.8e-04 ext3.ko ext3 ext3_free_blocks_sb
+1 6.8e-04 ext3.ko ext3 ext3_free_data
+1 6.8e-04 ext3.ko ext3 ext3_get_branch
+1 6.8e-04 ext3.ko ext3 ext3_init_security
+1 6.8e-04 ext3.ko ext3 ext3_invalidatepage
+1 6.8e-04 ext3.ko ext3 ext3_orphan_del
+1 6.8e-04 ext3.ko ext3 ext3_rsv_window_add
+1 6.8e-04 ext3.ko ext3 ext3_truncate
+1 6.8e-04 ext3.ko ext3 ext3_writepage_trans_blocks
+1 6.8e-04 intel_drv.so intel_drv.so I830EXACopy
+1 6.8e-04 jbd.ko jbd journal_grab_journal_head
+1 6.8e-04 jbd.ko jbd journal_invalidatepage
+1 6.8e-04 jbd.ko jbd journal_remove_journal_head
+1 6.8e-04 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_fixup
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_map_object
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_name_match_p
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_new_object
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_sort_fini
+1 6.8e-04 ld-2.5.so ld-2.5.so _dl_start
+1 6.8e-04 ld-2.5.so ld-2.5.so _start
+1 6.8e-04 ld-2.5.so ld-2.5.so access
+1 6.8e-04 ld-2.5.so ld-2.5.so dl_main
+1 6.8e-04 ld-2.5.so ld-2.5.so free_mem
+1 6.8e-04 ld-2.5.so ld-2.5.so init_tls
+1 6.8e-04 ld-2.5.so ld-2.5.so memset
+1 6.8e-04 ld-2.5.so ld-2.5.so open_verify
+1 6.8e-04 ld-2.5.so ld-2.5.so openaux
+1 6.8e-04 ld-2.5.so ld-2.5.so process_envvars
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_file_overflow@@GLIBC_2.1
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_file_stat
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_setb
+1 6.8e-04 libc-2.5.so libc-2.5.so _IO_sputbackc
+1 6.8e-04 libc-2.5.so libc-2.5.so ____strtod_l_internal
+1 6.8e-04 libc-2.5.so libc-2.5.so ___newselect_nocancel
+1 6.8e-04 libc-2.5.so libc-2.5.so __libc_enable_asynccancel
+1 6.8e-04 libc-2.5.so libc-2.5.so __new_exitfn
+1 6.8e-04 libc-2.5.so libc-2.5.so __sigjmp_save
+1 6.8e-04 libc-2.5.so libc-2.5.so __xstat32_conv
+1 6.8e-04 libc-2.5.so libc-2.5.so _getopt_internal
+1 6.8e-04 libc-2.5.so libc-2.5.so _nl_make_l10nflist
+1 6.8e-04 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+1 6.8e-04 libc-2.5.so libc-2.5.so fgets
+1 6.8e-04 libc-2.5.so libc-2.5.so fork
+1 6.8e-04 libc-2.5.so libc-2.5.so get_mapping
+1 6.8e-04 libc-2.5.so libc-2.5.so getpid
+1 6.8e-04 libc-2.5.so libc-2.5.so inet_nsap_ntoa
+1 6.8e-04 libc-2.5.so libc-2.5.so mmap
+1 6.8e-04 libc-2.5.so libc-2.5.so new_composite_name
+1 6.8e-04 libc-2.5.so libc-2.5.so parse_expression
+1 6.8e-04 libc-2.5.so libc-2.5.so peek_token
+1 6.8e-04 libc-2.5.so libc-2.5.so pipe
+1 6.8e-04 libc-2.5.so libc-2.5.so random_r
+1 6.8e-04 libc-2.5.so libc-2.5.so sbrk
+1 6.8e-04 libc-2.5.so libc-2.5.so setlocale
+1 6.8e-04 libc-2.5.so libc-2.5.so sigemptyset
+1 6.8e-04 libc-2.5.so libc-2.5.so sprintf
+1 6.8e-04 libc-2.5.so libc-2.5.so strcoll_l
+1 6.8e-04 libc-2.5.so libc-2.5.so strncmp
+1 6.8e-04 libc-2.5.so libc-2.5.so time
+1 6.8e-04 libc-2.5.so libc-2.5.so trans_compare
+1 6.8e-04 libc-2.5.so libc-2.5.so wcsrtombs
+1 6.8e-04 libcrypto.so.0.9.8 libcrypto.so.0.9.8 (no symbols)
+1 6.8e-04 libexa.so libexa.so ExaOffscreenMerge
+1 6.8e-04 libexa.so libexa.so exaPolySegment
+1 6.8e-04 libexa.so libexa.so exaRasterizeTrapezoid
+1 6.8e-04 libfb.so libfb.so fbComposite
+1 6.8e-04 libfb.so libfb.so fbCreateGC
+1 6.8e-04 libfb.so libfb.so fbFillRegionSolid
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_component_alpha
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_filter
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+1 6.8e-04 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+1 6.8e-04 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.cx
+1 6.8e-04 libpthread-2.5.so libpthread-2.5.so pthread_cond_timedwait@@GLIBC_2.3.2
+1 6.8e-04 libpthread-2.5.so libpthread-2.5.so pthread_equal
+1 6.8e-04 libselinux.so.1 libselinux.so.1 (no symbols)
+1 6.8e-04 mkdir mkdir (no symbols)
+1 6.8e-04 mouse_drv.so mouse_drv.so .plt
+1 6.8e-04 mouse_drv.so mouse_drv.so MouseBlockHandler
+1 6.8e-04 mouse_drv.so mouse_drv.so MouseWakeupHandler
+1 6.8e-04 oprofile.ko oprofile process_task_mortuary
+1 6.8e-04 oprofile.ko oprofile release_mm
+1 6.8e-04 sshd sshd (no symbols)
+1 6.8e-04 sudo sudo (no symbols)
+1 6.8e-04 usbcore.ko usbcore usb_hcd_poll_rh_status
+1 6.8e-04 usbhid.ko usbhid hidinput_hid_event
+1 6.8e-04 vmlinux vmlinux __anon_vma_link
+1 6.8e-04 vmlinux vmlinux __do_page_cache_readahead
+1 6.8e-04 vmlinux vmlinux __fput
+1 6.8e-04 vmlinux vmlinux __group_complete_signal
+1 6.8e-04 vmlinux vmlinux __mutex_init
+1 6.8e-04 vmlinux vmlinux __netif_rx_schedule
+1 6.8e-04 vmlinux vmlinux __pagevec_release
+1 6.8e-04 vmlinux vmlinux __pagevec_release_nonlru
+1 6.8e-04 vmlinux vmlinux __put_task_struct
+1 6.8e-04 vmlinux vmlinux __queue_work
+1 6.8e-04 vmlinux vmlinux __rb_rotate_left
+1 6.8e-04 vmlinux vmlinux __remove_shared_vm_struct
+1 6.8e-04 vmlinux vmlinux __tasklet_schedule
+1 6.8e-04 vmlinux vmlinux __user_walk_fd
+1 6.8e-04 vmlinux vmlinux __vma_link_rb
+1 6.8e-04 vmlinux vmlinux __wake_up
+1 6.8e-04 vmlinux vmlinux _local_bh_enable
+1 6.8e-04 vmlinux vmlinux account_system_time
+1 6.8e-04 vmlinux vmlinux activate_page
+1 6.8e-04 vmlinux vmlinux add_to_page_cache_lru
+1 6.8e-04 vmlinux vmlinux alloc_page_buffers
+1 6.8e-04 vmlinux vmlinux alloc_pid
+1 6.8e-04 vmlinux vmlinux ata_scsi_translate
+1 6.8e-04 vmlinux vmlinux balance_dirty_pages_ratelimited_nr
+1 6.8e-04 vmlinux vmlinux balanced_irq
+1 6.8e-04 vmlinux vmlinux bio_put
+1 6.8e-04 vmlinux vmlinux cache_reap
+1 6.8e-04 vmlinux vmlinux check_kill_permission
+1 6.8e-04 vmlinux vmlinux copy_files
+1 6.8e-04 vmlinux vmlinux copy_from_user
+1 6.8e-04 vmlinux vmlinux copy_strings
+1 6.8e-04 vmlinux vmlinux cp_new_stat64
+1 6.8e-04 vmlinux vmlinux d_instantiate
+1 6.8e-04 vmlinux vmlinux d_path
+1 6.8e-04 vmlinux vmlinux d_splice_alias
+1 6.8e-04 vmlinux vmlinux dequeue_task
+1 6.8e-04 vmlinux vmlinux dnotify_flush
+1 6.8e-04 vmlinux vmlinux do_IRQ
+1 6.8e-04 vmlinux vmlinux do_exit
+1 6.8e-04 vmlinux vmlinux do_readv_writev
+1 6.8e-04 vmlinux vmlinux do_sigaction
+1 6.8e-04 vmlinux vmlinux do_sys_ftruncate
+1 6.8e-04 vmlinux vmlinux do_sys_open
+1 6.8e-04 vmlinux vmlinux do_truncate
+1 6.8e-04 vmlinux vmlinux down_read
+1 6.8e-04 vmlinux vmlinux down_write
+1 6.8e-04 vmlinux vmlinux dup_fd
+1 6.8e-04 vmlinux vmlinux exec_keys
+1 6.8e-04 vmlinux vmlinux file_kill
+1 6.8e-04 vmlinux vmlinux find_inode_fast
+1 6.8e-04 vmlinux vmlinux find_mergeable_anon_vma
+1 6.8e-04 vmlinux vmlinux find_or_create_page
+1 6.8e-04 vmlinux vmlinux free_buffer_head
+1 6.8e-04 vmlinux vmlinux free_pgd_range
+1 6.8e-04 vmlinux vmlinux generic_commit_write
+1 6.8e-04 vmlinux vmlinux generic_file_buffered_write
+1 6.8e-04 vmlinux vmlinux generic_file_mmap
+1 6.8e-04 vmlinux vmlinux generic_file_open
+1 6.8e-04 vmlinux vmlinux generic_fillattr
+1 6.8e-04 vmlinux vmlinux generic_make_request
+1 6.8e-04 vmlinux vmlinux get_dcookie
+1 6.8e-04 vmlinux vmlinux get_index
+1 6.8e-04 vmlinux vmlinux get_task_mm
+1 6.8e-04 vmlinux vmlinux get_write_access
+1 6.8e-04 vmlinux vmlinux handle_stop_signal
+1 6.8e-04 vmlinux vmlinux hrtimer_forward
+1 6.8e-04 vmlinux vmlinux init_page_buffers
+1 6.8e-04 vmlinux vmlinux init_request_from_bio
+1 6.8e-04 vmlinux vmlinux inode_change_ok
+1 6.8e-04 vmlinux vmlinux input_event
+1 6.8e-04 vmlinux vmlinux kernel_read
+1 6.8e-04 vmlinux vmlinux kref_put
+1 6.8e-04 vmlinux vmlinux ll_back_merge_fn
+1 6.8e-04 vmlinux vmlinux ll_rw_block
+1 6.8e-04 vmlinux vmlinux load_elf_binary
+1 6.8e-04 vmlinux vmlinux lock_timer_base
+1 6.8e-04 vmlinux vmlinux locks_remove_flock
+1 6.8e-04 vmlinux vmlinux locks_remove_posix
+1 6.8e-04 vmlinux vmlinux lookup_hash
+1 6.8e-04 vmlinux vmlinux lru_add_drain
+1 6.8e-04 vmlinux vmlinux lru_cache_add
+1 6.8e-04 vmlinux vmlinux may_expand_vm
+1 6.8e-04 vmlinux vmlinux memcpy_fromiovec
+1 6.8e-04 vmlinux vmlinux memcpy_toiovec
+1 6.8e-04 vmlinux vmlinux mod_timer
+1 6.8e-04 vmlinux vmlinux mutex_trylock
+1 6.8e-04 vmlinux vmlinux mwait_idle
+1 6.8e-04 vmlinux vmlinux note_interrupt
+1 6.8e-04 vmlinux vmlinux notify_change
+1 6.8e-04 vmlinux vmlinux open_namei
+1 6.8e-04 vmlinux vmlinux page_referenced
+1 6.8e-04 vmlinux vmlinux page_waitqueue
+1 6.8e-04 vmlinux vmlinux pipe_read
+1 6.8e-04 vmlinux vmlinux prepare_binprm
+1 6.8e-04 vmlinux vmlinux prio_tree_replace
+1 6.8e-04 vmlinux vmlinux proc_lookup
+1 6.8e-04 vmlinux vmlinux profile_hit
+1 6.8e-04 vmlinux vmlinux prune_one_dentry
+1 6.8e-04 vmlinux vmlinux put_files_struct
+1 6.8e-04 vmlinux vmlinux put_page
+1 6.8e-04 vmlinux vmlinux put_pid
+1 6.8e-04 vmlinux vmlinux radix_tree_tag_clear
+1 6.8e-04 vmlinux vmlinux rb_insert_color
+1 6.8e-04 vmlinux vmlinux rb_next
+1 6.8e-04 vmlinux vmlinux rcu_process_callbacks
+1 6.8e-04 vmlinux vmlinux recalc_task_prio
+1 6.8e-04 vmlinux vmlinux refresh_cpu_vm_stats
+1 6.8e-04 vmlinux vmlinux remove_vma
+1 6.8e-04 vmlinux vmlinux run_posix_cpu_timers
+1 6.8e-04 vmlinux vmlinux schedule_timeout
+1 6.8e-04 vmlinux vmlinux scsi_decide_disposition
+1 6.8e-04 vmlinux vmlinux second_overflow
+1 6.8e-04 vmlinux vmlinux send_group_sig_info
+1 6.8e-04 vmlinux vmlinux seq_path
+1 6.8e-04 vmlinux vmlinux set_bh_page
+1 6.8e-04 vmlinux vmlinux show_vfsmnt
+1 6.8e-04 vmlinux vmlinux shrink_dcache_parent
+1 6.8e-04 vmlinux vmlinux sigprocmask
+1 6.8e-04 vmlinux vmlinux sys_fcntl64
+1 6.8e-04 vmlinux vmlinux sys_fstat64
+1 6.8e-04 vmlinux vmlinux sys_mmap2
+1 6.8e-04 vmlinux vmlinux sys_munmap
+1 6.8e-04 vmlinux vmlinux sys_select
+1 6.8e-04 vmlinux vmlinux sys_writev
+1 6.8e-04 vmlinux vmlinux tasklet_action
+1 6.8e-04 vmlinux vmlinux timespec_trunc
+1 6.8e-04 vmlinux vmlinux try_to_wake_up
+1 6.8e-04 vmlinux vmlinux tsc_update_callback
+1 6.8e-04 vmlinux vmlinux unix_stream_connect
+1 6.8e-04 vmlinux vmlinux unmap_region
+1 6.8e-04 vmlinux vmlinux up_write
+1 6.8e-04 vmlinux vmlinux vfs_getattr
+1 6.8e-04 vmlinux vmlinux vfs_llseek
+1 6.8e-04 vmlinux vmlinux vfs_mkdir
+1 6.8e-04 vmlinux vmlinux vfs_stat_fd
+1 6.8e-04 vmlinux vmlinux vfs_writev
+1 6.8e-04 vmlinux vmlinux vma_merge
+1 6.8e-04 vmlinux vmlinux wake_up_bit
--- /dev/null
+Average: 77.439
+Raw: 4,4,4,206,5,4,193,118,5,4,213,5,4,194,5,198,5,4,217,5,4,217,5,4,192,4,195,4,4,216,4,4,215,5,4,212,4,4,188,127,4,4,213,5,4,194,4,199,4,5,216,5,4,217,4,5,192,5,194,4,4,216,5,4,216,4,5,211,4,4,188,128,4,4,213,4,5,193,5,199,4,4,217,4,4,217,5,4,192,5,194,5,4,216,5,4,216,4,5,211,4,5,187,127,5,4,212,4,4,194,4,199,4,4,217,4,5,216,5,4,193,4,194,4,4,217,4,4,217,4,5,211,4,4,188,127,4,4,213,4,4,194,4,199,5,4,217,5,4,216,5,4,193,4,194,5,4,216,4,4,217,4,4,213,4,4,187,128,5,4,212,4,5,194,4,199,4,4,218,4,4,218,5,4,192,5,194,5,4,216,5,4,216,4,5,211,5,4,188,127,4,5,213,4,4,194,4,200,4,4,217,4,4,217,4,5,192,5,194,5,4,216,5,4,217,4,5,211,4,5,188,127,4,4,213,4,5,193,5,199,5,4,217,4,4,217,4,5,192,5,195,4,4,216,5,4,217,4,5,212,4,4,188,127,4,5,217,5,4,199,4,218,4,5,228,4,4,229,5,4,217,4,214,5,3,232,4,4,219,4,4,224,4,4,191,128,4,4,219,4
+
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 1 0.7407 Xorg miTrapezoidBounds
+ 1 0.7407 Xorg ProcRenderSetPictureFilter
+ 1 0.7407 Xorg miDestroyPicture
+ 1 0.7407 Xorg ProcRenderSetPictureTransform
+ 1 0.7407 Xorg ProcRenderFillRectangles
+ 1 0.7407 Xorg ShmDestroyPixmap
+ 1 0.7407 Xorg miComputeCompositeClip
+ 1 0.7407 Xorg miBSCheapChangeClip
+ 1 0.7407 Xorg SetClipRects
+ 1 0.7407 Xorg dixLookupDrawable
+ 1 0.7407 Xorg damageChangeGC
+ 1 0.7407 Xorg damageGlyphs
+ 1 0.7407 Xorg ProcSetClipRectangles
+ 1 0.7407 Xorg ProcCreatePixmap
+ 1 0.7407 Xorg FreeResource
+ 1 0.7407 Xorg SetPictureClipRects
+ 2 1.4815 Xorg miRegionDestroy
+ 2 1.4815 Xorg miRegionCreate
+ 2 1.4815 Xorg ProcRenderCreatePicture
+ 2 1.4815 Xorg XaceCatchDispatchProc
+ 2 1.4815 Xorg miCompositeRects
+ 2 1.4815 Xorg CreatePicture
+ 3 2.2222 Xorg miValidatePicture
+ 4 2.9630 Xorg FreePicture
+ 4 2.9630 Xorg miColorRects
+ 5 3.7037 Xorg miCompositeSourceValidate
+ 5 3.7037 Xorg _CallCallbacks
+ 5 3.7037 Xorg CallCallbacks
+ 6 4.4444 Xorg ValidateOnePicture
+ 6 4.4444 Xorg ProcRenderCompositeGlyphs
+ 6 4.4444 Xorg XaceCatchExtProc
+ 6 4.4444 Xorg Dispatch
+ 6 4.4444 Xorg SecurityLookupIDByType
+ 7 5.1852 Xorg ProcRenderDispatch
+ 7 5.1852 Xorg damageComposite
+ 8 5.9259 Xorg ValidatePicture
+ 9 6.6667 Xorg CompositePicture
+ 9 6.6667 Xorg damageReportPostOp
+ 11 8.1481 Xorg miGlyphs
+143 5.6949 Xorg __i686.get_pc_thunk.bx
+ 143 100.000 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 10 0.1022 Xorg miGlyphs
+ 9778 99.8978 Xorg CompositePicture
+127 5.0577 Xorg damageComposite
+ 9538 97.4259 libfb.so fbComposite
+ 127 1.2972 Xorg damageComposite [self]
+ 40 0.4086 libfb.so .plt
+ 37 0.3779 Xorg damageReportPostOp
+ 14 0.1430 Xorg getDrawableDamageRef
+ 12 0.1226 libfb.so image_from_pict
+ 8 0.0817 libpixman.so.0.0.0 pixman_image_unref
+ 7 0.0715 Xorg __i686.get_pc_thunk.bx
+ 5 0.0511 Xorg miCompositeSourceValidate
+ 1 0.0102 libpixman.so.0.0.0 pixman_image_composite
+ 1 0.0102 libfb.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 1.7241 Xorg damageGlyphs
+ 114 98.2759 Xorg miGlyphs
+116 4.6197 Xorg miGlyphExtents
+ 116 100.000 Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 1 0.0173 Xorg CompositeGlyphs
+ 5773 99.9827 Xorg damageGlyphs
+116 4.6197 Xorg miGlyphs
+ 5052 87.4957 Xorg CompositePicture
+ 180 3.1174 Xorg damagePolyFillRect
+ 116 2.0090 Xorg miGlyphs [self]
+ 114 1.9744 Xorg miGlyphExtents
+ 67 1.1604 Xorg CreatePicture
+ 62 1.0738 Xorg miModifyPixmapHeader
+ 59 1.0218 Xorg FreePicture
+ 33 0.5715 libfb.so fbCreatePixmap
+ 25 0.4330 Xorg ShmDestroyPixmap
+ 18 0.3117 Xorg ValidateGC
+ 13 0.2251 Xorg ValidatePicture
+ 11 0.1905 Xorg __i686.get_pc_thunk.bx
+ 10 0.1732 Xorg damageComposite
+ 5 0.0866 Xorg GetScratchPixmapHeader
+ 4 0.0693 Xorg GetScratchGC
+ 2 0.0346 Xorg miDestroyPictureClip
+ 2 0.0346 Xorg SetPictureToDefaults
+ 1 0.0173 Xorg AllocatePicture
+-------------------------------------------------------------------------------
+ 4 0.0397 Xorg damageGlyphs
+ 25 0.2481 Xorg miCompositeRects
+ 338 3.3548 Xorg ProcRenderComposite
+ 4656 46.2134 Xorg miTrapezoids
+ 5052 50.1439 Xorg miGlyphs
+106 4.2214 Xorg CompositePicture
+ 9778 97.0521 Xorg damageComposite
+ 162 1.6079 Xorg ValidatePicture
+ 106 1.0521 Xorg CompositePicture [self]
+ 9 0.0893 Xorg __i686.get_pc_thunk.bx
+ 8 0.0794 Xorg ValidateOnePicture
+ 6 0.0596 Xorg getDrawableDamageRef
+ 4 0.0397 Xorg damageReportPostOp
+ 2 0.0199 libfb.so fbComposite
+-------------------------------------------------------------------------------
+ 7 6.6038 Xorg ProcRenderCompositeGlyphs
+ 99 93.3962 Xorg FindGlyph
+106 4.2214 Xorg FindGlyphRef
+ 106 100.000 Xorg FindGlyphRef [self]
+-------------------------------------------------------------------------------
+ 1 0.3774 Xorg ProcRenderCompositeGlyphs
+ 3 1.1321 Xorg dixLookupDrawable
+ 5 1.8868 Xorg XaceCatchDispatchProc
+ 9 3.3962 Xorg main
+ 16 6.0377 Xorg SecurityLookupIDByClass
+ 36 13.5849 Xorg Dispatch
+ 71 26.7925 Xorg XaceCatchExtProc
+ 124 46.7925 Xorg SecurityLookupIDByType
+101 4.0223 Xorg XaceHook
+ 141 53.2075 Xorg CallCallbacks
+ 101 38.1132 Xorg XaceHook [self]
+ 23 8.6792 Xorg _CallCallbacks
+-------------------------------------------------------------------------------
+ 4 2.2222 Xorg ProcFreeGC
+ 47 26.1111 Xorg ProcFreePixmap
+ 129 71.6667 Xorg ProcRenderFreePicture
+91 3.6241 Xorg FreeResource
+ 91 50.5556 Xorg FreeResource [self]
+ 51 28.3333 Xorg FreePicture
+ 13 7.2222 Xorg Xfree
+ 12 6.6667 Xorg dixDestroyPixmap
+ 5 2.7778 Xorg Hash
+ 3 1.6667 Xorg FreeGC
+ 2 1.1111 Xorg FlushClientCaches
+ 1 0.5556 Xorg __i686.get_pc_thunk.bx
+ 1 0.5556 Xorg miDestroyPicture
+ 1 0.5556 Xorg damageDestroyGC
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg damageComposite
+91 3.6241 Xorg miCompositeSourceValidate
+ 91 66.4234 Xorg miCompositeSourceValidate [self]
+ 41 29.9270 Xorg miSpriteSourceValidate
+ 5 3.6496 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 6 4.5455 Xorg ValidatePicture
+ 126 95.4545 Xorg ValidateOnePicture
+82 3.2656 Xorg miValidatePicture
+ 82 62.1212 Xorg miValidatePicture [self]
+ 42 31.8182 Xorg miRegionCreate
+ 3 2.2727 Xorg __i686.get_pc_thunk.bx
+ 2 1.5152 Xorg miTranslateRegion
+ 2 1.5152 Xorg miIntersect
+ 1 0.7576 Xorg miRegionInit
+-------------------------------------------------------------------------------
+ 2 2.4691 Xorg main
+ 79 97.5309 Xorg Dispatch
+76 3.0267 Xorg ReadRequestFromClient
+ 76 93.8272 Xorg ReadRequestFromClient [self]
+ 2 2.4691 Xorg _XSERVTransRead
+ 2 2.4691 libc-2.5.so memmove
+ 1 1.2346 Xorg _XSERVTransSocketRead
+-------------------------------------------------------------------------------
+ 23 19.1667 Xorg XaceHook
+ 97 80.8333 Xorg CallCallbacks
+71 2.8276 Xorg _CallCallbacks
+ 71 59.1667 Xorg _CallCallbacks [self]
+ 35 29.1667 Xorg SecurityCheckResourceIDAccess
+ 9 7.5000 Xorg SecurityCheckExtAccess
+ 5 4.1667 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3 4.2254 Xorg GetScratchPixmapHeader
+ 6 8.4507 Xorg damageGlyphs
+ 62 87.3239 Xorg miGlyphs
+71 2.8276 Xorg miModifyPixmapHeader
+ 71 100.000 Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 18337 100.000 Xorg main
+56 2.2302 Xorg Dispatch
+ 14820 80.8070 Xorg XaceCatchExtProc
+ 3319 18.0971 Xorg XaceCatchDispatchProc
+ 79 0.4308 Xorg ReadRequestFromClient
+ 56 0.3053 Xorg Dispatch [self]
+ 36 0.1963 Xorg XaceHook
+ 6 0.0327 Xorg __i686.get_pc_thunk.bx
+ 5 0.0273 Xorg CallCallbacks
+ 5 0.0273 Xorg GetExtensionEntry
+ 4 0.0218 Xorg ProcRenderDispatch
+ 3 0.0164 Xorg ProcessInputEvents
+ 2 0.0109 Xorg ProcFreePixmap
+ 1 0.0055 Xorg ProcCreatePixmap
+ 1 0.0055 Xorg ProcPolySegment
+ 1 0.0055 Xorg ProcChangeGC
+ 1 0.0055 Xorg miPointerUpdateSprite
+ 1 0.0055 anon (tgid:6252 range:0xb7f41000-0xb7f42000) (no symbols)
+-------------------------------------------------------------------------------
+ 1 0.5319 Xorg CompositeRects
+ 8 4.2553 Xorg CompositePicture
+ 179 95.2128 Xorg ValidatePicture
+55 2.1904 Xorg ValidateOnePicture
+ 126 67.0213 Xorg miValidatePicture
+ 55 29.2553 Xorg ValidateOnePicture [self]
+ 6 3.1915 Xorg __i686.get_pc_thunk.bx
+ 1 0.5319 Xorg miRegionCreate
+-------------------------------------------------------------------------------
+ 1 0.5155 Xorg ProcRenderSetPictureClipRectangles
+ 4 2.0619 Xorg ProcRenderTrapezoids
+ 6 3.0928 Xorg ProcRenderDispatch
+ 6 3.0928 Xorg ProcRenderComposite
+ 8 4.1237 Xorg ProcFreePixmap
+ 10 5.1546 Xorg dixLookupGC
+ 13 6.7010 Xorg ProcRenderSetPictureFilter
+ 15 7.7320 Xorg ProcRenderChangePicture
+ 19 9.7938 Xorg ProcRenderSetPictureTransform
+ 19 9.7938 Xorg ProcRenderCreatePicture
+ 21 10.8247 Xorg ProcRenderFillRectangles
+ 33 17.0103 Xorg ProcRenderFreePicture
+ 39 20.1031 Xorg ProcRenderCompositeGlyphs
+49 1.9514 Xorg SecurityLookupIDByType
+ 124 63.9175 Xorg XaceHook
+ 49 25.2577 Xorg SecurityLookupIDByType [self]
+ 11 5.6701 Xorg Hash
+ 6 3.0928 Xorg __i686.get_pc_thunk.bx
+ 4 2.0619 Xorg CallCallbacks
+-------------------------------------------------------------------------------
+ 41 100.000 Xorg miCompositeSourceValidate
+47 1.8718 Xorg miSpriteSourceValidate
+ 47 100.000 Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 8 18.6047 Xorg CallCallbacks
+ 35 81.3953 Xorg _CallCallbacks
+43 1.7125 Xorg SecurityCheckResourceIDAccess
+ 43 100.000 Xorg SecurityCheckResourceIDAccess [self]
+-------------------------------------------------------------------------------
+ 1 0.6410 Xorg XaceCatchDispatchProc
+ 4 2.5641 Xorg SecurityLookupIDByType
+ 5 3.2051 Xorg Dispatch
+ 5 3.2051 Xorg XaceCatchExtProc
+ 141 90.3846 Xorg XaceHook
+40 1.5930 Xorg CallCallbacks
+ 97 62.1795 Xorg _CallCallbacks
+ 40 25.6410 Xorg CallCallbacks [self]
+ 8 5.1282 Xorg SecurityCheckResourceIDAccess
+ 6 3.8462 Xorg SecurityCheckExtAccess
+ 5 3.2051 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 0.0332 Xorg XaceCatchExtProc
+ 6018 99.9668 Xorg ProcRenderDispatch
+39 1.5532 Xorg ProcRenderCompositeGlyphs
+ 5816 96.5952 Xorg CompositeGlyphs
+ 110 1.8269 Xorg FindGlyph
+ 39 0.6477 Xorg SecurityLookupIDByType
+ 39 0.6477 Xorg ProcRenderCompositeGlyphs [self]
+ 7 0.1163 Xorg FindGlyphRef
+ 6 0.0997 Xorg __i686.get_pc_thunk.bx
+ 3 0.0498 Xorg Hash
+ 1 0.0166 Xorg XaceHook
+-------------------------------------------------------------------------------
+ 1 2.5641 Xorg miColorRects
+ 3 7.6923 Xorg damagePolyFillRect
+ 6 15.3846 Xorg CompositePicture
+ 14 35.8974 Xorg damageComposite
+ 15 38.4615 Xorg damageReportPostOp
+39 1.5532 Xorg getDrawableDamageRef
+ 39 100.000 Xorg getDrawableDamageRef [self]
+-------------------------------------------------------------------------------
+ 1 3.0303 Xorg PictureFindFilter
+ 1 3.0303 Xorg SetPictureToDefaults
+ 31 93.9394 Xorg PictureGetFilterId
+33 1.3142 Xorg CompareISOLatin1Lowered
+ 33 100.000 Xorg CompareISOLatin1Lowered [self]
+-------------------------------------------------------------------------------
+ 1 2.4390 Xorg ProcChangeGC
+ 1 2.4390 Xorg miColorRects
+ 39 95.1220 Xorg ChangeGC
+33 1.3142 Xorg dixChangeGC
+ 33 80.4878 Xorg dixChangeGC [self]
+ 6 14.6341 Xorg damageChangeGC
+ 2 4.8780 Xorg miBSCheapChangeGC
+-------------------------------------------------------------------------------
+ 1 0.4464 Xorg ProcRenderFillRectangles
+ 2 0.8929 Xorg CompositeTrapezoids
+ 13 5.8036 Xorg miGlyphs
+ 14 6.2500 Xorg CompositeGlyphs
+ 32 14.2857 Xorg CompositeRects
+ 162 72.3214 Xorg CompositePicture
+31 1.2346 Xorg ValidatePicture
+ 179 79.9107 Xorg ValidateOnePicture
+ 31 13.8393 Xorg ValidatePicture [self]
+ 8 3.5714 Xorg __i686.get_pc_thunk.bx
+ 6 2.6786 Xorg miValidatePicture
+-------------------------------------------------------------------------------
+ 2 1.1976 Xorg ProcRenderDispatch
+ 3 1.7964 Xorg miCreateAlphaPicture
+ 5 2.9940 Xorg miCompositeRects
+ 67 40.1198 Xorg miGlyphs
+ 90 53.8922 Xorg ProcRenderCreatePicture
+29 1.1549 Xorg CreatePicture
+ 72 43.1138 Xorg AllocatePicture
+ 48 28.7425 Xorg SetPictureToDefaults
+ 29 17.3653 Xorg CreatePicture [self]
+ 8 4.7904 Xorg PictureGetFilterId
+ 5 2.9940 Xorg ChangePicture
+ 3 1.7964 Xorg miChangePicture
+ 2 1.1976 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 4.0000 Xorg ProcRenderDispatch
+ 2 8.0000 Xorg ProcRenderChangePicture
+ 7 28.0000 Xorg ProcRenderCreatePicture
+ 15 60.0000 Xorg miRenderColorToPixel
+25 0.9956 Xorg Ones
+ 25 100.000 Xorg Ones [self]
+-------------------------------------------------------------------------------
+ 1 2.0833 Xorg damagePolySegment
+ 2 4.1667 Xorg damagePolyFillRect
+ 2 4.1667 Xorg damageCopyArea
+ 2 4.1667 Xorg damageGlyphs
+ 4 8.3333 Xorg CompositePicture
+ 37 77.0833 Xorg damageComposite
+24 0.9558 Xorg damageReportPostOp
+ 24 50.0000 Xorg damageReportPostOp [self]
+ 15 31.2500 Xorg getDrawableDamageRef
+ 9 18.7500 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 6 27.2727 Xorg miTrapezoidBounds
+ 16 72.7273 Xorg miLineFixedX
+22 0.8761 Xorg __divdi3
+ 22 100.000 Xorg __divdi3 [self]
+-------------------------------------------------------------------------------
+ 4 0.0270 Xorg main
+ 14820 99.9730 Xorg Dispatch
+21 0.8363 Xorg XaceCatchExtProc
+ 14681 99.0220 Xorg ProcRenderDispatch
+ 71 0.4789 Xorg XaceHook
+ 21 0.1416 Xorg XaceCatchExtProc [self]
+ 8 0.0540 Xorg GetExtensionEntry
+ 6 0.0405 Xorg __i686.get_pc_thunk.bx
+ 6 0.0405 Xorg ProcRenderSetPictureFilter
+ 6 0.0405 Xorg ProcRenderFreePicture
+ 5 0.0337 Xorg CallCallbacks
+ 5 0.0337 Xorg ProcRenderSetPictureTransform
+ 4 0.0270 Xorg ProcRenderChangePicture
+ 3 0.0202 Xorg __i686.get_pc_thunk.cx
+ 3 0.0202 Xorg ProcRenderFillRectangles
+ 3 0.0202 Xorg ProcRenderSetPictureClipRectangles
+ 2 0.0135 Xorg ProcRenderCompositeGlyphs
+ 2 0.0135 Xorg ProcRenderCreatePicture
+-------------------------------------------------------------------------------
+ 1 1.9608 Xorg dixDestroyPixmap
+ 4 7.8431 Xorg FreePicture
+ 46 90.1961 Xorg ShmDestroyPixmap
+21 0.8363 Xorg damageDestroyPixmap
+ 29 56.8627 libfb.so fbDestroyPixmap
+ 21 41.1765 Xorg damageDestroyPixmap [self]
+ 1 1.9608 libfb.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 1.6260 Xorg miCompositeRects
+ 2 1.6260 Xorg damageGlyphs
+ 3 2.4390 Xorg ProcRenderFreePicture
+ 6 4.8780 Xorg miTrapezoids
+ 51 41.4634 Xorg FreeResource
+ 59 47.9675 Xorg miGlyphs
+19 0.7567 Xorg FreePicture
+ 30 24.3902 Xorg ShmDestroyPixmap
+ 30 24.3902 Xorg miDestroyPicture
+ 30 24.3902 Xorg Xfree
+ 19 15.4472 Xorg FreePicture [self]
+ 4 3.2520 Xorg __i686.get_pc_thunk.bx
+ 4 3.2520 Xorg damageDestroyPixmap
+ 3 2.4390 Xorg miDestroyPictureClip
+ 2 1.6260 Xorg miRegionDestroy
+ 1 0.8130 libc-2.5.so free
+-------------------------------------------------------------------------------
+ 3 15.7895 Xorg ProcRenderCompositeGlyphs
+ 5 26.3158 Xorg FreeResource
+ 11 57.8947 Xorg SecurityLookupIDByType
+19 0.7567 Xorg Hash
+ 19 100.000 Xorg Hash [self]
+-------------------------------------------------------------------------------
+ 4 12.9032 Xorg miGlyphs
+ 27 87.0968 Xorg miColorRects
+17 0.6770 Xorg GetScratchGC
+ 17 54.8387 Xorg GetScratchGC [self]
+ 13 41.9355 Xorg damageChangeClip
+ 1 3.2258 Xorg miBSCheapChangeClip
+-------------------------------------------------------------------------------
+ 1 1.4925 Xorg damageGlyphs
+ 11 16.4179 Xorg dixDestroyPixmap
+ 25 37.3134 Xorg miGlyphs
+ 30 44.7761 Xorg FreePicture
+17 0.6770 Xorg ShmDestroyPixmap
+ 46 68.6567 Xorg damageDestroyPixmap
+ 17 25.3731 Xorg ShmDestroyPixmap [self]
+ 3 4.4776 libfb.so fbDestroyPixmap
+ 1 1.4925 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 5 4.3478 Xorg ProcRenderDispatch
+ 110 95.6522 Xorg ProcRenderCompositeGlyphs
+16 0.6372 Xorg FindGlyph
+ 99 86.0870 Xorg FindGlyphRef
+ 16 13.9130 Xorg FindGlyph [self]
+-------------------------------------------------------------------------------
+ 8 17.0213 Xorg CreatePicture
+ 9 19.1489 Xorg PictureFindFilter
+ 30 63.8298 Xorg SetPictureToDefaults
+16 0.6372 Xorg PictureGetFilterId
+ 31 65.9574 Xorg CompareISOLatin1Lowered
+ 16 34.0426 Xorg PictureGetFilterId [self]
+-------------------------------------------------------------------------------
+ 6 11.3208 Xorg XaceCatchExtProc
+ 47 88.6792 Xorg ProcRenderDispatch
+16 0.6372 Xorg ProcRenderSetPictureFilter
+ 23 43.3962 Xorg SetPictureFilter
+ 16 30.1887 Xorg ProcRenderSetPictureFilter [self]
+ 13 24.5283 Xorg SecurityLookupIDByType
+ 1 1.8868 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+15 0.5974 Xorg AllocatePixmap
+ 32 66.6667 Xorg Xalloc
+ 15 31.2500 Xorg AllocatePixmap [self]
+ 1 2.0833 libc-2.5.so malloc
+-------------------------------------------------------------------------------
+ 6 40.0000 Xorg CallCallbacks
+ 9 60.0000 Xorg _CallCallbacks
+15 0.5974 Xorg SecurityCheckExtAccess
+ 15 100.000 Xorg SecurityCheckExtAccess [self]
+-------------------------------------------------------------------------------
+ 5 35.7143 Xorg CreatePicture
+ 9 64.2857 Xorg ProcRenderChangePicture
+14 0.5575 Xorg ChangePicture
+ 14 100.000 Xorg ChangePicture [self]
+-------------------------------------------------------------------------------
+14 0.5575 Xorg miComputeCompositeClip
+ 14 35.0000 Xorg miComputeCompositeClip [self]
+ 11 27.5000 Xorg miIntersect
+ 7 17.5000 Xorg miTranslateRegion
+ 6 15.0000 libpixman.so.0.0.0 pixman_region_intersect
+ 1 2.5000 Xorg __i686.get_pc_thunk.bx
+ 1 2.5000 Xorg miRegionCreate
+-------------------------------------------------------------------------------
+ 4 13.7931 Xorg miCompositeRects
+ 25 86.2069 Xorg miColorRects
+14 0.5575 Xorg miRenderColorToPixel
+ 15 51.7241 Xorg Ones
+ 14 48.2759 Xorg miRenderColorToPixel [self]
+-------------------------------------------------------------------------------
+ 5 38.4615 Xorg Dispatch
+ 8 61.5385 Xorg XaceCatchExtProc
+13 0.5177 Xorg GetExtensionEntry
+ 13 100.000 Xorg GetExtensionEntry [self]
+-------------------------------------------------------------------------------
+ 1 1.6667 Xorg Dispatch
+ 59 98.3333 Xorg XaceCatchDispatchProc
+13 0.5177 Xorg ProcCreatePixmap
+ 27 45.0000 libfb.so fbCreatePixmap
+ 13 21.6667 Xorg ProcCreatePixmap [self]
+ 8 13.3333 Xorg dixLookupDrawable
+ 6 10.0000 Xorg AddResource
+ 4 6.6667 Xorg LegalNewID
+ 1 1.6667 Xorg __i686.get_pc_thunk.bx
+ 1 1.6667 libfb.so fbCreatePixmapBpp
+-------------------------------------------------------------------------------
+ 2 3.7736 Xorg miGlyphs
+ 3 5.6604 Xorg ProcRenderCreatePicture
+ 48 90.5660 Xorg CreatePicture
+13 0.5177 Xorg SetPictureToDefaults
+ 30 56.6038 Xorg PictureGetFilterId
+ 13 24.5283 Xorg SetPictureToDefaults [self]
+ 8 15.0943 libc-2.5.so strlen
+ 1 1.8868 Xorg .plt
+ 1 1.8868 Xorg CompareISOLatin1Lowered
+-------------------------------------------------------------------------------
+ 1 1.3699 Xorg miGlyphs
+ 72 98.6301 Xorg CreatePicture
+12 0.4779 Xorg AllocatePicture
+ 60 82.1918 Xorg Xalloc
+ 12 16.4384 Xorg AllocatePicture [self]
+ 1 1.3699 Xorg .plt
+-------------------------------------------------------------------------------
+ 5 0.1504 Xorg main
+ 3319 99.8496 Xorg Dispatch
+12 0.4779 Xorg XaceCatchDispatchProc
+ 3039 91.4260 Xorg ProcCopyArea
+ 66 1.9856 Xorg ProcFreePixmap
+ 59 1.7750 Xorg ProcCreatePixmap
+ 45 1.3538 Xorg ProcPolyFillRectangle
+ 41 1.2335 Xorg ProcPolySegment
+ 20 0.6017 Xorg ProcSetClipRectangles
+ 12 0.3610 Xorg XaceCatchDispatchProc [self]
+ 10 0.3008 Xorg ProcChangeGC
+ 7 0.2106 Xorg ProcCreateGC
+ 5 0.1504 Xorg XaceHook
+ 4 0.1203 Xorg ProcFreeGC
+ 3 0.0903 Xorg LegalNewID
+ 3 0.0903 libfb.so fbCreatePixmap
+ 3 0.0903 Xorg dixLookupDrawable
+ 2 0.0602 Xorg damagePolySegment
+ 2 0.0602 Xorg __i686.get_pc_thunk.bx
+ 1 0.0301 Xorg damageCopyArea
+ 1 0.0301 Xorg dixLookupGC
+ 1 0.0301 Xorg CallCallbacks
+-------------------------------------------------------------------------------
+ 1 0.9615 Xorg miColorRects
+ 103 99.0385 Xorg ValidateGC
+12 0.4779 Xorg damageValidateGC
+ 89 85.5769 Xorg miBSCheapValidateGC
+ 12 11.5385 Xorg damageValidateGC [self]
+ 3 2.8846 libfb.so fbValidateGC
+-------------------------------------------------------------------------------
+ 3 27.2727 Xorg XaceCatchDispatchProc
+ 4 36.3636 Xorg ProcCreatePixmap
+ 4 36.3636 Xorg ProcRenderCreatePicture
+11 0.4381 Xorg LegalNewID
+ 11 100.000 Xorg LegalNewID [self]
+-------------------------------------------------------------------------------
+ 2 1.1429 Xorg XaceCatchExtProc
+ 173 98.8571 Xorg ProcRenderDispatch
+11 0.4381 Xorg ProcRenderCreatePicture
+ 90 51.4286 Xorg CreatePicture
+ 20 11.4286 Xorg dixLookupDrawable
+ 19 10.8571 Xorg SecurityLookupIDByType
+ 14 8.0000 Xorg AddResource
+ 11 6.2857 Xorg ProcRenderCreatePicture [self]
+ 7 4.0000 Xorg Ones
+ 4 2.2857 Xorg LegalNewID
+ 4 2.2857 Xorg miCreatePicture
+ 3 1.7143 Xorg SetPictureToDefaults
+ 2 1.1429 Xorg __i686.get_pc_thunk.bx
+ 1 0.5714 Xorg SecurityLookupIDByClass
+-------------------------------------------------------------------------------
+ 3 0.1553 Xorg XaceCatchExtProc
+ 1929 99.8447 Xorg ProcRenderDispatch
+11 0.4381 Xorg ProcRenderFillRectangles
+ 1897 98.1376 Xorg CompositeRects
+ 21 1.0864 Xorg SecurityLookupIDByType
+ 11 0.5691 Xorg ProcRenderFillRectangles [self]
+ 1 0.0517 Xorg __i686.get_pc_thunk.bx
+ 1 0.0517 Xorg miCompositeRects
+ 1 0.0517 Xorg ValidatePicture
+ 1 0.0517 Xorg PictOpValid
+-------------------------------------------------------------------------------
+ 2 8.0000 Xorg ProcRenderDispatch
+ 23 92.0000 Xorg ProcRenderSetPictureFilter
+11 0.4381 Xorg SetPictureFilter
+ 14 56.0000 Xorg PictureFindFilter
+ 11 44.0000 Xorg SetPictureFilter [self]
+-------------------------------------------------------------------------------
+ 3 2.0979 Xorg AllocateGC
+ 12 8.3916 Xorg AddResource
+ 32 22.3776 Xorg AllocatePixmap
+ 36 25.1748 Xorg miRegionCreate
+ 60 41.9580 Xorg AllocatePicture
+11 0.4381 Xorg Xalloc
+ 126 87.5000 libc-2.5.so malloc
+ 11 7.6389 Xorg Xalloc [self]
+ 6 4.1667 libc-2.5.so _int_malloc
+ 1 0.6944 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 3.0303 Xorg ProcPolySegment
+ 1 3.0303 Xorg ProcCreateGC
+ 3 9.0909 Xorg XaceCatchDispatchProc
+ 8 24.2424 Xorg ProcCreatePixmap
+ 20 60.6061 Xorg ProcRenderCreatePicture
+10 0.3982 Xorg dixLookupDrawable
+ 19 57.5758 Xorg SecurityLookupIDByClass
+ 10 30.3030 Xorg dixLookupDrawable [self]
+ 3 9.0909 Xorg XaceHook
+ 1 3.0303 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.0482 Xorg CompositeRects
+ 3 0.1446 Xorg miCompositeRects
+ 39 1.8795 Xorg ProcPolyFillRectangle
+ 180 8.6747 Xorg miGlyphs
+ 260 12.5301 Xorg miCreateAlphaPicture
+ 1592 76.7229 Xorg miColorRects
+9 0.3584 Xorg damagePolyFillRect
+ 2057 99.1325 libfb.so fbPolyFillRect
+ 9 0.4337 Xorg damagePolyFillRect [self]
+ 4 0.1928 libfb.so fbFill
+ 3 0.1446 Xorg getDrawableDamageRef
+ 2 0.0964 Xorg damageReportPostOp
+-------------------------------------------------------------------------------
+ 1 4.0000 Xorg miTrapezoids
+ 24 96.0000 Xorg miTrapezoidBounds
+9 0.3584 Xorg miLineFixedX
+ 16 64.0000 Xorg __divdi3
+ 9 36.0000 Xorg miLineFixedX [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg AddResource
+ 1 12.5000 Xorg miRegionDestroy
+ 1 12.5000 Xorg AllocatePicture
+ 1 12.5000 Xorg SetPictureToDefaults
+ 2 25.0000 Xorg miRegionCreate
+ 2 25.0000 Xorg miDestroyPicture
+8 0.3186 Xorg .plt
+ 8 100.000 Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 0.8929 Xorg damageGlyphs
+ 2 1.7857 Xorg ProcPolyFillRectangle
+ 2 1.7857 Xorg ProcCopyArea
+ 2 1.7857 Xorg miCreateAlphaPicture
+ 4 3.5714 Xorg miCompositeRects
+ 6 5.3571 Xorg ProcPolySegment
+ 18 16.0714 Xorg miGlyphs
+ 77 68.7500 Xorg miColorRects
+8 0.3186 Xorg ValidateGC
+ 103 91.9643 Xorg damageValidateGC
+ 8 7.1429 Xorg ValidateGC [self]
+ 1 0.8929 Xorg miBSCheapValidateGC
+-------------------------------------------------------------------------------
+ 2 6.2500 Xorg miCompositeRects
+ 6 18.7500 Xorg miColorRects
+ 11 34.3750 Xorg SetClipRects
+ 13 40.6250 Xorg GetScratchGC
+8 0.3186 Xorg damageChangeClip
+ 23 71.8750 Xorg miBSCheapChangeClip
+ 8 25.0000 Xorg damageChangeClip [self]
+ 1 3.1250 Xorg miChangeClip
+-------------------------------------------------------------------------------
+ 1 1.1111 Xorg ValidateGC
+ 89 98.8889 Xorg damageValidateGC
+8 0.3186 Xorg miBSCheapValidateGC
+ 71 78.8889 libfb.so fbValidateGC
+ 8 8.8889 libfb.so fbGetGCPrivateIndex
+ 8 8.8889 Xorg miBSCheapValidateGC [self]
+ 1 1.1111 libfb.so .plt
+ 1 1.1111 libfb.so __i686.get_pc_thunk.cx
+ 1 1.1111 libfb.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 6 30.0000 Xorg ProcCreatePixmap
+ 14 70.0000 Xorg ProcRenderCreatePicture
+7 0.2788 Xorg AddResource
+ 12 60.0000 Xorg Xalloc
+ 7 35.0000 Xorg AddResource [self]
+ 1 5.0000 Xorg .plt
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg miCreateAlphaPicture
+ 2 28.5714 Xorg miCompositeRects
+ 4 57.1429 Xorg miColorRects
+7 0.2788 Xorg FreeScratchGC
+ 7 100.000 Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 4 12.1212 Xorg XaceCatchExtProc
+ 29 87.8788 Xorg ProcRenderDispatch
+7 0.2788 Xorg ProcRenderChangePicture
+ 15 45.4545 Xorg SecurityLookupIDByType
+ 9 27.2727 Xorg ChangePicture
+ 7 21.2121 Xorg ProcRenderChangePicture [self]
+ 2 6.0606 Xorg Ones
+-------------------------------------------------------------------------------
+ 4 0.0272 Xorg Dispatch
+ 14681 99.9728 Xorg XaceCatchExtProc
+7 0.2788 Xorg ProcRenderDispatch
+ 6018 40.9694 Xorg ProcRenderCompositeGlyphs
+ 5907 40.2138 Xorg ProcRenderTrapezoids
+ 1929 13.1323 Xorg ProcRenderFillRectangles
+ 346 2.3555 Xorg ProcRenderComposite
+ 173 1.1778 Xorg ProcRenderCreatePicture
+ 165 1.1233 Xorg ProcRenderFreePicture
+ 47 0.3200 Xorg ProcRenderSetPictureFilter
+ 29 0.1974 Xorg ProcRenderChangePicture
+ 29 0.1974 Xorg ProcRenderSetPictureTransform
+ 13 0.0885 Xorg ProcRenderSetPictureClipRectangles
+ 7 0.0477 Xorg ProcRenderDispatch [self]
+ 7 0.0477 Xorg __i686.get_pc_thunk.bx
+ 6 0.0408 Xorg SecurityLookupIDByType
+ 5 0.0340 Xorg FindGlyph
+ 2 0.0136 Xorg PictOpValid
+ 2 0.0136 Xorg CreatePicture
+ 2 0.0136 Xorg SetPictureFilter
+ 1 0.0068 Xorg CompositeRects
+ 1 0.0068 Xorg Ones
+-------------------------------------------------------------------------------
+ 5 14.7059 Xorg XaceCatchExtProc
+ 29 85.2941 Xorg ProcRenderDispatch
+7 0.2788 Xorg ProcRenderSetPictureTransform
+ 19 55.8824 Xorg SecurityLookupIDByType
+ 7 20.5882 Xorg SetPictureTransform
+ 7 20.5882 Xorg ProcRenderSetPictureTransform [self]
+ 1 2.9412 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 0.1109 Xorg CompositeRects
+ 1802 99.8891 Xorg miCompositeRects
+7 0.2788 Xorg miColorRects
+ 1592 88.2483 Xorg damagePolyFillRect
+ 77 4.2683 Xorg ValidateGC
+ 41 2.2727 Xorg ChangeGC
+ 27 1.4967 Xorg GetScratchGC
+ 25 1.3858 Xorg miRenderColorToPixel
+ 11 0.6098 Xorg miRegionCreate
+ 7 0.3880 Xorg miColorRects [self]
+ 6 0.3326 Xorg damageChangeClip
+ 4 0.2217 Xorg __i686.get_pc_thunk.bx
+ 4 0.2217 Xorg FreeScratchGC
+ 4 0.2217 Xorg miRegionCopy
+ 3 0.1663 libfb.so fbPolyFillRect
+ 1 0.0554 Xorg dixChangeGC
+ 1 0.0554 Xorg getDrawableDamageRef
+ 1 0.0554 Xorg damageValidateGC
+-------------------------------------------------------------------------------
+ 1 1.4706 Xorg miComputeCompositeClip
+ 1 1.4706 Xorg ValidateOnePicture
+ 11 16.1765 Xorg miColorRects
+ 13 19.1176 Xorg miRectsToRegion
+ 42 61.7647 Xorg miValidatePicture
+7 0.2788 Xorg miRegionCreate
+ 36 52.9412 Xorg Xalloc
+ 14 20.5882 Xorg miRegionInit
+ 7 10.2941 Xorg miRegionCreate [self]
+ 3 4.4118 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 2 2.9412 Xorg .plt
+ 2 2.9412 Xorg __i686.get_pc_thunk.bx
+ 2 2.9412 libpixman.so.0.0.0 pixman_region_init
+ 2 2.9412 libc-2.5.so malloc
+-------------------------------------------------------------------------------
+ 2 2.9412 Xorg Dispatch
+ 66 97.0588 Xorg XaceCatchDispatchProc
+6 0.2389 Xorg ProcFreePixmap
+ 47 69.1176 Xorg FreeResource
+ 8 11.7647 Xorg SecurityLookupIDByType
+ 6 8.8235 Xorg ProcFreePixmap [self]
+ 5 7.3529 Xorg dixDestroyPixmap
+ 1 1.4706 Xorg FlushClientCaches
+ 1 1.4706 Xorg Xfree
+-------------------------------------------------------------------------------
+ 6 3.5088 Xorg XaceCatchExtProc
+ 165 96.4912 Xorg ProcRenderDispatch
+6 0.2389 Xorg ProcRenderFreePicture
+ 129 75.4386 Xorg FreeResource
+ 33 19.2982 Xorg SecurityLookupIDByType
+ 6 3.5088 Xorg ProcRenderFreePicture [self]
+ 3 1.7544 Xorg FreePicture
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg ProcRenderSetPictureTransform
+6 0.2389 Xorg SetPictureTransform
+ 6 85.7143 Xorg SetPictureTransform [self]
+ 1 14.2857 Xorg miChangePictureTransform
+-------------------------------------------------------------------------------
+ 1 1.5152 Xorg ProcFreePixmap
+ 2 3.0303 Xorg miChangeClip
+ 2 3.0303 Xorg miDestroyPicture
+ 13 19.6970 Xorg FreeResource
+ 18 27.2727 Xorg miRegionDestroy
+ 30 45.4545 Xorg FreePicture
+6 0.2389 Xorg Xfree
+ 79 85.8696 libc-2.5.so free
+ 6 6.5217 Xorg Xfree [self]
+ 4 4.3478 libc-2.5.so _int_free
+ 3 3.2609 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 5799 100.000 Xorg CompositeGlyphs
+6 0.2389 Xorg damageGlyphs
+ 5773 99.5345 Xorg miGlyphs
+ 6 0.1034 Xorg miModifyPixmapHeader
+ 6 0.1034 Xorg damageGlyphs [self]
+ 4 0.0690 Xorg CompositePicture
+ 2 0.0345 Xorg FreeScratchPixmapHeader
+ 2 0.0345 Xorg miGlyphExtents
+ 2 0.0345 Xorg FreePicture
+ 2 0.0345 Xorg damageReportPostOp
+ 1 0.0172 Xorg __i686.get_pc_thunk.bx
+ 1 0.0172 Xorg ValidateGC
+ 1 0.0172 Xorg ShmDestroyPixmap
+-------------------------------------------------------------------------------
+ 1 0.0538 Xorg ProcRenderFillRectangles
+ 1858 99.9462 Xorg CompositeRects
+6 0.2389 Xorg miCompositeRects
+ 1802 96.9338 Xorg miColorRects
+ 25 1.3448 Xorg CompositePicture
+ 6 0.3228 Xorg miCompositeRects [self]
+ 5 0.2690 Xorg CreatePicture
+ 4 0.2152 Xorg ValidateGC
+ 4 0.2152 Xorg miRenderColorToPixel
+ 3 0.1614 Xorg damagePolyFillRect
+ 2 0.1076 Xorg __i686.get_pc_thunk.bx
+ 2 0.1076 Xorg FreeScratchGC
+ 2 0.1076 Xorg FreePicture
+ 2 0.1076 Xorg damageChangeClip
+ 1 0.0538 Xorg ChangeGC
+ 1 0.0538 libfb.so fbCreatePixmap
+-------------------------------------------------------------------------------
+ 1 6.2500 Xorg miRectsToRegion
+ 1 6.2500 Xorg miValidatePicture
+ 14 87.5000 Xorg miRegionCreate
+6 0.2389 Xorg miRegionInit
+ 7 43.7500 libpixman.so.0.0.0 pixman_region_init
+ 6 37.5000 Xorg miRegionInit [self]
+ 3 18.7500 libpixman.so.0.0.0 pixman_region_init_with_extents
+-------------------------------------------------------------------------------
+ 2 22.2222 Xorg miValidatePicture
+ 7 77.7778 Xorg miComputeCompositeClip
+6 0.2389 Xorg miTranslateRegion
+ 6 50.0000 libpixman.so.0.0.0 pixman_region_translate
+ 6 50.0000 Xorg miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 5 29.4118 Xorg ProcFreePixmap
+ 12 70.5882 Xorg FreeResource
+5 0.1991 Xorg dixDestroyPixmap
+ 11 64.7059 Xorg ShmDestroyPixmap
+ 5 29.4118 Xorg dixDestroyPixmap [self]
+ 1 5.8824 Xorg damageDestroyPixmap
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg SetClipRects
+ 2 40.0000 Xorg dixChangeGC
+ 2 40.0000 Xorg damageChangeGC
+5 0.1991 Xorg miBSCheapChangeGC
+ 5 100.000 Xorg miBSCheapChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg damageChangeClip
+ 20 95.2381 Xorg miBSCheapChangeClip
+5 0.1991 Xorg miChangeClip
+ 7 33.3333 Xorg miDestroyClip
+ 7 33.3333 Xorg miRectsToRegion
+ 5 23.8095 Xorg miChangeClip [self]
+ 2 9.5238 Xorg Xfree
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg miChangePictureClip
+ 2 33.3333 Xorg miGlyphs
+ 3 50.0000 Xorg FreePicture
+5 0.1991 Xorg miDestroyPictureClip
+ 5 83.3333 Xorg miDestroyPictureClip [self]
+ 1 16.6667 Xorg miRegionDestroy
+-------------------------------------------------------------------------------
+ 5816 100.000 Xorg ProcRenderCompositeGlyphs
+4 0.1593 Xorg CompositeGlyphs
+ 5799 99.6734 Xorg damageGlyphs
+ 14 0.2406 Xorg ValidatePicture
+ 4 0.0688 Xorg CompositeGlyphs [self]
+ 1 0.0172 Xorg miGlyphs
+-------------------------------------------------------------------------------
+ 1 0.0527 Xorg ProcRenderDispatch
+ 1897 99.9473 Xorg ProcRenderFillRectangles
+4 0.1593 Xorg CompositeRects
+ 1858 97.8410 Xorg miCompositeRects
+ 32 1.6851 Xorg ValidatePicture
+ 4 0.2106 Xorg CompositeRects [self]
+ 2 0.1053 Xorg miColorRects
+ 1 0.0527 Xorg PictureMatchFormat
+ 1 0.0527 Xorg ValidateOnePicture
+ 1 0.0527 Xorg damagePolyFillRect
+-------------------------------------------------------------------------------
+ 14 100.000 Xorg SetPictureFilter
+4 0.1593 Xorg PictureFindFilter
+ 9 64.2857 Xorg PictureGetFilterId
+ 4 28.5714 Xorg PictureFindFilter [self]
+ 1 7.1429 Xorg CompareISOLatin1Lowered
+-------------------------------------------------------------------------------
+ 3 18.7500 Xorg XaceCatchExtProc
+ 13 81.2500 Xorg ProcRenderDispatch
+4 0.1593 Xorg ProcRenderSetPictureClipRectangles
+ 11 68.7500 Xorg SetPictureClipRects
+ 4 25.0000 Xorg ProcRenderSetPictureClipRectangles [self]
+ 1 6.2500 Xorg SecurityLookupIDByType
+-------------------------------------------------------------------------------
+ 1 5.0000 Xorg ProcRenderCreatePicture
+ 19 95.0000 Xorg dixLookupDrawable
+4 0.1593 Xorg SecurityLookupIDByClass
+ 16 80.0000 Xorg XaceHook
+ 4 20.0000 Xorg SecurityLookupIDByClass [self]
+-------------------------------------------------------------------------------
+ 1 7.1429 Xorg ProcPolyFillRectangle
+ 1 7.1429 Xorg XaceCatchDispatchProc
+ 2 14.2857 Xorg ProcSetClipRectangles
+ 3 21.4286 Xorg ProcPolySegment
+ 7 50.0000 Xorg ProcChangeGC
+4 0.1593 Xorg dixLookupGC
+ 10 71.4286 Xorg SecurityLookupIDByType
+ 4 28.5714 Xorg dixLookupGC [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg ProcRenderCreatePicture
+4 0.1593 Xorg miCreatePicture
+ 4 100.000 Xorg miCreatePicture [self]
+-------------------------------------------------------------------------------
+ 35 100.000 Xorg miTrapezoids
+4 0.1593 Xorg miTrapezoidBounds
+ 24 68.5714 Xorg miLineFixedX
+ 6 17.1429 Xorg __divdi3
+ 4 11.4286 Xorg miTrapezoidBounds [self]
+ 1 2.8571 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 2.3810 Xorg miCompositeRects
+ 41 97.6190 Xorg miColorRects
+3 0.1195 Xorg ChangeGC
+ 39 92.8571 Xorg dixChangeGC
+ 3 7.1429 Xorg ChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg ProcFreePixmap
+ 2 66.6667 Xorg FreeResource
+3 0.1195 Xorg FlushClientCaches
+ 3 100.000 Xorg FlushClientCaches [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg ProcRenderFillRectangles
+ 2 66.6667 Xorg ProcRenderDispatch
+3 0.1195 Xorg PictOpValid
+ 3 100.000 Xorg PictOpValid [self]
+-------------------------------------------------------------------------------
+ 1 9.0909 Xorg Dispatch
+ 10 90.9091 Xorg XaceCatchDispatchProc
+3 0.1195 Xorg ProcChangeGC
+ 7 63.6364 Xorg dixLookupGC
+ 3 27.2727 Xorg ProcChangeGC [self]
+ 1 9.0909 Xorg dixChangeGC
+-------------------------------------------------------------------------------
+ 45 100.000 Xorg XaceCatchDispatchProc
+3 0.1195 Xorg ProcPolyFillRectangle
+ 39 86.6667 Xorg damagePolyFillRect
+ 3 6.6667 Xorg ProcPolyFillRectangle [self]
+ 2 4.4444 Xorg ValidateGC
+ 1 2.2222 Xorg dixLookupGC
+-------------------------------------------------------------------------------
+ 16 100.000 Xorg ProcSetClipRectangles
+3 0.1195 Xorg SetClipRects
+ 11 68.7500 Xorg damageChangeClip
+ 3 18.7500 Xorg SetClipRects [self]
+ 1 6.2500 Xorg __i686.get_pc_thunk.bx
+ 1 6.2500 Xorg miBSCheapChangeGC
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg XaceCatchExtProc
+3 0.1195 Xorg __i686.get_pc_thunk.cx
+ 3 100.000 Xorg __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg dixChangeGC
+3 0.1195 Xorg damageChangeGC
+ 3 50.0000 Xorg damageChangeGC [self]
+ 2 33.3333 Xorg miBSCheapChangeGC
+ 1 16.6667 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 6.2500 Xorg XaceCatchDispatchProc
+ 30 93.7500 Xorg ProcPolySegment
+3 0.1195 Xorg damagePolySegment
+ 28 87.5000 libfb.so fbPolySegment
+ 3 9.3750 Xorg damagePolySegment [self]
+ 1 3.1250 Xorg damageReportPostOp
+-------------------------------------------------------------------------------
+ 1 4.1667 Xorg GetScratchGC
+ 23 95.8333 Xorg damageChangeClip
+3 0.1195 Xorg miBSCheapChangeClip
+ 20 83.3333 Xorg miChangeClip
+ 3 12.5000 Xorg miBSCheapChangeClip [self]
+ 1 4.1667 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg CreatePicture
+3 0.1195 Xorg miChangePicture
+ 3 100.000 Xorg miChangePicture [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 Xorg miBSCheapDestroyClip
+ 2 20.0000 Xorg damageDestroyClip
+ 7 70.0000 Xorg miChangeClip
+3 0.1195 Xorg miDestroyClip
+ 6 60.0000 Xorg miRegionDestroy
+ 3 30.0000 Xorg miDestroyClip [self]
+ 1 10.0000 libpixman.so.0.0.0 pixman_region_fini
+-------------------------------------------------------------------------------
+ 1 3.3333 Xorg miDestroyPictureClip
+ 2 6.6667 Xorg FreePicture
+ 6 20.0000 Xorg miDestroyClip
+ 21 70.0000 Xorg miDestroyPicture
+3 0.1195 Xorg miRegionDestroy
+ 18 60.0000 Xorg Xfree
+ 3 10.0000 Xorg miRegionDestroy [self]
+ 2 6.6667 Xorg __i686.get_pc_thunk.bx
+ 2 6.6667 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 2 6.6667 libpixman.so.0.0.0 pixman_region_fini
+ 2 6.6667 libc-2.5.so free
+ 1 3.3333 Xorg .plt
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damageGlyphs
+2 0.0796 Xorg FreeScratchPixmapHeader
+ 2 100.000 Xorg FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg xf86PostMotionEventP
+2 0.0796 Xorg GetPointerEvents
+ 2 66.6667 Xorg GetPointerEvents [self]
+ 1 33.3333 Xorg getValuatorEvents
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg miGlyphs
+2 0.0796 Xorg GetScratchPixmapHeader
+ 3 60.0000 Xorg miModifyPixmapHeader
+ 2 40.0000 Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 3039 100.000 Xorg XaceCatchDispatchProc
+2 0.0796 Xorg ProcCopyArea
+ 3035 99.8684 Xorg damageCopyArea
+ 2 0.0658 Xorg ValidateGC
+ 2 0.0658 Xorg ProcCopyArea [self]
+-------------------------------------------------------------------------------
+ 346 100.000 Xorg ProcRenderDispatch
+2 0.0796 Xorg ProcRenderComposite
+ 338 97.6879 Xorg CompositePicture
+ 6 1.7341 Xorg SecurityLookupIDByType
+ 2 0.5780 Xorg ProcRenderComposite [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg xf86SigioReadInput
+2 0.0796 Xorg XisbRead
+ 2 100.000 Xorg XisbRead [self]
+-------------------------------------------------------------------------------
+ 1 0.0329 Xorg XaceCatchDispatchProc
+ 3035 99.9671 Xorg ProcCopyArea
+2 0.0796 Xorg damageCopyArea
+ 3030 99.8024 libfb.so fbCopyArea
+ 2 0.0659 Xorg damageReportPostOp
+ 2 0.0659 libfb.so fbDoCopy
+ 2 0.0659 Xorg damageCopyArea [self]
+-------------------------------------------------------------------------------
+ 1 3.2258 Xorg FreeResource
+ 30 96.7742 Xorg FreePicture
+2 0.0796 Xorg miDestroyPicture
+ 21 67.7419 Xorg miRegionDestroy
+ 3 9.6774 libpixman.so.0.0.0 pixman_region_fini
+ 2 6.4516 Xorg .plt
+ 2 6.4516 Xorg Xfree
+ 2 6.4516 Xorg miDestroyPicture [self]
+ 1 3.2258 Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 5900 100.000 Xorg CompositeTrapezoids
+2 0.0796 Xorg miTrapezoids
+ 4656 78.9019 Xorg CompositePicture
+ 932 15.7939 libfb.so fbRasterizeTrapezoid
+ 267 4.5247 Xorg miCreateAlphaPicture
+ 35 0.5931 Xorg miTrapezoidBounds
+ 6 0.1017 Xorg FreePicture
+ 2 0.0339 Xorg miTrapezoids [self]
+ 1 0.0169 Xorg miLineFixedX
+ 1 0.0169 libpixman.so.0.0.0 pixman_image_unref
+ 1 0.0169 libfb.so image_from_pict
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg CreateGC
+1 0.0398 Xorg AllocateGC
+ 3 75.0000 Xorg Xalloc
+ 1 25.0000 Xorg AllocateGC [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg ProcCreateGC
+1 0.0398 Xorg CreateGC
+ 4 66.6667 Xorg AllocateGC
+ 1 16.6667 Xorg damageCreateGC
+ 1 16.6667 Xorg CreateGC [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg DeliverDeviceEvents
+1 0.0398 Xorg DeliverEventsToWindow
+ 1 50.0000 Xorg TryClientEvents
+ 1 50.0000 Xorg DeliverEventsToWindow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg CompositeRects
+1 0.0398 Xorg PictureMatchFormat
+ 1 100.000 Xorg PictureMatchFormat [self]
+-------------------------------------------------------------------------------
+ 1 2.3810 Xorg Dispatch
+ 41 97.6190 Xorg XaceCatchDispatchProc
+1 0.0398 Xorg ProcPolySegment
+ 30 71.4286 Xorg damagePolySegment
+ 6 14.2857 Xorg ValidateGC
+ 3 7.1429 Xorg dixLookupGC
+ 1 2.3810 Xorg dixLookupDrawable
+ 1 2.3810 libfb.so fbPolySegment
+ 1 2.3810 Xorg ProcPolySegment [self]
+-------------------------------------------------------------------------------
+ 5907 100.000 Xorg ProcRenderDispatch
+1 0.0398 Xorg ProcRenderTrapezoids
+ 5903 99.9154 Xorg CompositeTrapezoids
+ 4 0.0677 Xorg SecurityLookupIDByType
+ 1 0.0169 Xorg ProcRenderTrapezoids [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg mieqProcessInputEvents
+1 0.0398 Xorg ProcessOtherEvent
+ 1 100.000 Xorg ProcessOtherEvent [self]
+-------------------------------------------------------------------------------
+1 0.0398 Xorg SmartScheduleTimer
+ 1 100.000 Xorg SmartScheduleTimer [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg WriteEventsToClient
+1 0.0398 Xorg WriteToClient
+ 1 100.000 Xorg WriteToClient [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ReadRequestFromClient
+1 0.0398 Xorg _XSERVTransSocketRead
+ 1 100.000 Xorg _XSERVTransSocketRead [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg CreateGC
+1 0.0398 Xorg damageCreateGC
+ 1 100.000 Xorg damageCreateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg FreeResource
+1 0.0398 Xorg damageDestroyGC
+ 1 100.000 Xorg damageDestroyGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg GetPointerEvents
+1 0.0398 Xorg getValuatorEvents
+ 1 100.000 Xorg getValuatorEvents [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg SetPictureClipRects
+1 0.0398 Xorg miChangePictureClip
+ 1 50.0000 Xorg miDestroyPictureClip
+ 1 50.0000 Xorg miChangePictureClip [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg SetPictureTransform
+1 0.0398 Xorg miChangePictureTransform
+ 1 100.000 Xorg miChangePictureTransform [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Dispatch
+1 0.0398 Xorg miPointerUpdateSprite
+ 1 100.000 Xorg miPointerUpdateSprite [self]
+-------------------------------------------------------------------------------
+ 7 46.6667 Xorg miChangeClip
+ 8 53.3333 Xorg SetPictureClipRects
+1 0.0398 Xorg miRectsToRegion
+ 13 86.6667 Xorg miRegionCreate
+ 1 6.6667 Xorg miRegionInit
+ 1 6.6667 Xorg miRectsToRegion [self]
+-------------------------------------------------------------------------------
+1 0.0398 Xorg xf86PostMotionEvent
+ 3 75.0000 Xorg xf86PostMotionEventP
+ 1 25.0000 Xorg xf86PostMotionEvent [self]
+-------------------------------------------------------------------------------
+1 0.0398 Xorg xf86SIGIO
+ 10 90.9091 Xorg xf86SigioReadInput
+ 1 9.0909 Xorg xf86SIGIO [self]
+-------------------------------------------------------------------------------
+ 5903 100.000 Xorg ProcRenderTrapezoids
+0 0 Xorg CompositeTrapezoids
+ 5900 99.9322 Xorg miTrapezoids
+ 2 0.0339 Xorg ValidatePicture
+ 2 0.0339 libfb.so fbRasterizeTrapezoid
+ 0 0 Xorg CompositeTrapezoids [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg ProcessPointerEvent
+0 0 Xorg CoreProcessPointerEvent
+ 2 100.000 Xorg DeliverDeviceEvents
+ 0 0 Xorg CoreProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg CoreProcessPointerEvent
+0 0 Xorg DeliverDeviceEvents
+ 2 100.000 Xorg DeliverEventsToWindow
+ 0 0 Xorg DeliverDeviceEvents [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg FreeResource
+0 0 Xorg FreeGC
+ 3 100.000 Xorg damageDestroyClip
+ 0 0 Xorg FreeGC [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcCreateGC
+ 6 85.7143 Xorg CreateGC
+ 1 14.2857 Xorg dixLookupDrawable
+ 0 0 Xorg ProcCreateGC [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcFreeGC
+ 4 100.000 Xorg FreeResource
+ 0 0 Xorg ProcFreeGC [self]
+-------------------------------------------------------------------------------
+ 20 100.000 Xorg XaceCatchDispatchProc
+0 0 Xorg ProcSetClipRectangles
+ 16 80.0000 Xorg SetClipRects
+ 2 10.0000 Xorg dixLookupGC
+ 1 5.0000 Xorg __i686.get_pc_thunk.bx
+ 1 5.0000 libc-2.5.so memmove
+ 0 0 Xorg ProcSetClipRectangles [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Dispatch
+0 0 Xorg ProcessInputEvents
+ 3 100.000 Xorg mieqProcessInputEvents
+ 0 0 Xorg ProcessInputEvents [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg mieqProcessInputEvents
+0 0 Xorg ProcessPointerEvent
+ 2 100.000 Xorg CoreProcessPointerEvent
+ 0 0 Xorg ProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 11 100.000 Xorg ProcRenderSetPictureClipRectangles
+0 0 Xorg SetPictureClipRects
+ 8 72.7273 Xorg miRectsToRegion
+ 2 18.1818 Xorg miChangePictureClip
+ 1 9.0909 Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg SetPictureClipRects [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg DeliverEventsToWindow
+0 0 Xorg TryClientEvents
+ 1 100.000 Xorg WriteEventsToClient
+ 0 0 Xorg TryClientEvents [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg TryClientEvents
+0 0 Xorg WriteEventsToClient
+ 1 100.000 Xorg WriteToClient
+ 0 0 Xorg WriteEventsToClient [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg ReadRequestFromClient
+0 0 Xorg _XSERVTransRead
+ 1 50.0000 libc-2.5.so read
+ 1 50.0000 libc-2.5.so __read_nocancel
+ 0 0 Xorg _XSERVTransRead [self]
+-------------------------------------------------------------------------------
+0 0 Xorg _start
+ 18353 100.000 libc-2.5.so __libc_start_main
+ 0 0 Xorg _start [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg FreeGC
+0 0 Xorg damageDestroyClip
+ 2 66.6667 Xorg miDestroyClip
+ 1 33.3333 Xorg miBSCheapDestroyClip
+ 0 0 Xorg damageDestroyClip [self]
+-------------------------------------------------------------------------------
+0 0 Xorg main
+ 18337 99.8910 Xorg Dispatch
+ 9 0.0490 Xorg XaceHook
+ 5 0.0272 Xorg XaceCatchDispatchProc
+ 4 0.0218 Xorg XaceCatchExtProc
+ 2 0.0109 Xorg ReadRequestFromClient
+ 0 0 Xorg main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageDestroyClip
+0 0 Xorg miBSCheapDestroyClip
+ 1 100.000 Xorg miDestroyClip
+ 0 0 Xorg miBSCheapDestroyClip [self]
+-------------------------------------------------------------------------------
+ 267 100.000 Xorg miTrapezoids
+0 0 Xorg miCreateAlphaPicture
+ 260 97.3783 Xorg damagePolyFillRect
+ 3 1.1236 Xorg CreatePicture
+ 2 0.7491 Xorg ValidateGC
+ 1 0.3745 Xorg FreeScratchGC
+ 1 0.3745 libfb.so fbCreatePixmap
+ 0 0 Xorg miCreateAlphaPicture [self]
+-------------------------------------------------------------------------------
+ 2 15.3846 Xorg miValidatePicture
+ 11 84.6154 Xorg miComputeCompositeClip
+0 0 Xorg miIntersect
+ 13 100.000 libpixman.so.0.0.0 pixman_region_intersect
+ 0 0 Xorg miIntersect [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg miColorRects
+0 0 Xorg miRegionCopy
+ 4 100.000 libpixman.so.0.0.0 pixman_region_copy
+ 0 0 Xorg miRegionCopy [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg ProcessInputEvents
+0 0 Xorg mieqProcessInputEvents
+ 2 66.6667 Xorg ProcessPointerEvent
+ 1 33.3333 Xorg ProcessOtherEvent
+ 0 0 Xorg mieqProcessInputEvents [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg xf86SigioReadInput
+0 0 Xorg xf86BlockSIGIO
+ 1 100.000 libc-2.5.so sigismember
+ 0 0 Xorg xf86BlockSIGIO [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg xf86PostMotionEvent
+0 0 Xorg xf86PostMotionEventP
+ 3 100.000 Xorg GetPointerEvents
+ 0 0 Xorg xf86PostMotionEventP [self]
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg xf86SIGIO
+0 0 Xorg xf86SigioReadInput
+ 7 70.0000 mouse_drv.so MouseReadInput
+ 1 10.0000 Xorg XisbRead
+ 1 10.0000 Xorg xf86BlockSIGIO
+ 1 10.0000 mouse_drv.so MousePostEvent
+ 0 0 Xorg xf86SigioReadInput [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Dispatch
+0 0 anon (tgid:6252 range:0xb7f41000-0xb7f42000) (no symbols)
+ 0 0 anon (tgid:6252 range:0xb7f41000-0xb7f42000) (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 Xorg Xalloc
+ 3 75.0000 Xorg Xfree
+0 0 libc-2.5.so __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 18353 100.000 Xorg _start
+0 0 libc-2.5.so __libc_start_main
+ 0 0 libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg _XSERVTransRead
+0 0 libc-2.5.so __read_nocancel
+ 0 0 libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xfree
+0 0 libc-2.5.so _int_free
+ 0 0 libc-2.5.so _int_free [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xalloc
+0 0 libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 1.2195 Xorg FreePicture
+ 2 2.4390 Xorg miRegionDestroy
+ 79 96.3415 Xorg Xfree
+0 0 libc-2.5.so free
+ 0 0 libc-2.5.so free [self]
+-------------------------------------------------------------------------------
+ 1 0.7752 Xorg AllocatePixmap
+ 2 1.5504 Xorg miRegionCreate
+ 126 97.6744 Xorg Xalloc
+0 0 libc-2.5.so malloc
+ 0 0 libc-2.5.so malloc [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg ProcSetClipRectangles
+ 2 66.6667 Xorg ReadRequestFromClient
+0 0 libc-2.5.so memmove
+ 0 0 libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg _XSERVTransRead
+0 0 libc-2.5.so read
+ 0 0 libc-2.5.so read [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg xf86BlockSIGIO
+0 0 libc-2.5.so sigismember
+ 0 0 libc-2.5.so sigismember [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg SetPictureToDefaults
+0 0 libc-2.5.so strlen
+ 0 0 libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+ 1 2.4390 Xorg miBSCheapValidateGC
+ 40 97.5610 Xorg damageComposite
+0 0 libfb.so .plt
+ 0 0 libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg miBSCheapValidateGC
+ 1 33.3333 Xorg damageDestroyPixmap
+ 1 33.3333 Xorg damageComposite
+0 0 libfb.so __i686.get_pc_thunk.bx
+ 0 0 libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg miBSCheapValidateGC
+0 0 libfb.so __i686.get_pc_thunk.cx
+ 0 0 libfb.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 2 0.0210 Xorg CompositePicture
+ 9538 99.9790 Xorg damageComposite
+0 0 libfb.so fbComposite
+ 0 0 libfb.so fbComposite [self]
+-------------------------------------------------------------------------------
+ 3030 100.000 Xorg damageCopyArea
+0 0 libfb.so fbCopyArea
+ 0 0 libfb.so fbCopyArea [self]
+-------------------------------------------------------------------------------
+ 1 1.5385 Xorg miCompositeRects
+ 1 1.5385 Xorg miCreateAlphaPicture
+ 3 4.6154 Xorg XaceCatchDispatchProc
+ 27 41.5385 Xorg ProcCreatePixmap
+ 33 50.7692 Xorg miGlyphs
+0 0 libfb.so fbCreatePixmap
+ 0 0 libfb.so fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg ProcCreatePixmap
+0 0 libfb.so fbCreatePixmapBpp
+ 0 0 libfb.so fbCreatePixmapBpp [self]
+-------------------------------------------------------------------------------
+ 3 9.3750 Xorg ShmDestroyPixmap
+ 29 90.6250 Xorg damageDestroyPixmap
+0 0 libfb.so fbDestroyPixmap
+ 0 0 libfb.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg damageCopyArea
+0 0 libfb.so fbDoCopy
+ 0 0 libfb.so fbDoCopy [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg damagePolyFillRect
+0 0 libfb.so fbFill
+ 0 0 libfb.so fbFill [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg miBSCheapValidateGC
+0 0 libfb.so fbGetGCPrivateIndex
+ 0 0 libfb.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 3 0.1456 Xorg miColorRects
+ 2057 99.8544 Xorg damagePolyFillRect
+0 0 libfb.so fbPolyFillRect
+ 0 0 libfb.so fbPolyFillRect [self]
+-------------------------------------------------------------------------------
+ 1 3.4483 Xorg ProcPolySegment
+ 28 96.5517 Xorg damagePolySegment
+0 0 libfb.so fbPolySegment
+ 0 0 libfb.so fbPolySegment [self]
+-------------------------------------------------------------------------------
+ 2 0.2141 Xorg CompositeTrapezoids
+ 932 99.7859 Xorg miTrapezoids
+0 0 libfb.so fbRasterizeTrapezoid
+ 0 0 libfb.so fbRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 3 4.0541 Xorg damageValidateGC
+ 71 95.9459 Xorg miBSCheapValidateGC
+0 0 libfb.so fbValidateGC
+ 0 0 libfb.so fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg miTrapezoids
+ 12 92.3077 Xorg damageComposite
+0 0 libfb.so image_from_pict
+ 0 0 libfb.so image_from_pict [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg miRegionDestroy
+0 0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg damageComposite
+0 0 libpixman.so.0.0.0 pixman_image_composite
+ 0 0 libpixman.so.0.0.0 pixman_image_composite [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg miTrapezoids
+ 8 88.8889 Xorg damageComposite
+0 0 libpixman.so.0.0.0 pixman_image_unref
+ 0 0 libpixman.so.0.0.0 pixman_image_unref [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg miRegionCopy
+0 0 libpixman.so.0.0.0 pixman_region_copy
+ 0 0 libpixman.so.0.0.0 pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg miDestroyClip
+ 2 33.3333 Xorg miRegionDestroy
+ 3 50.0000 Xorg miDestroyPicture
+0 0 libpixman.so.0.0.0 pixman_region_fini
+ 0 0 libpixman.so.0.0.0 pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 2 22.2222 Xorg miRegionCreate
+ 7 77.7778 Xorg miRegionInit
+0 0 libpixman.so.0.0.0 pixman_region_init
+ 0 0 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 3 50.0000 Xorg miRegionInit
+ 3 50.0000 Xorg miRegionCreate
+0 0 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 0 0 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+ 6 31.5789 Xorg miComputeCompositeClip
+ 13 68.4211 Xorg miIntersect
+0 0 libpixman.so.0.0.0 pixman_region_intersect
+ 0 0 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg miTranslateRegion
+0 0 libpixman.so.0.0.0 pixman_region_translate
+ 0 0 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg xf86SigioReadInput
+0 0 mouse_drv.so MousePostEvent
+ 0 0 mouse_drv.so MousePostEvent [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg xf86SigioReadInput
+0 0 mouse_drv.so MouseReadInput
+ 0 0 mouse_drv.so MouseReadInput [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+143 5.6949 __i686.get_pc_thunk.bx
+127 5.0577 damageComposite
+116 4.6197 miGlyphExtents
+116 4.6197 miGlyphs
+106 4.2214 CompositePicture
+106 4.2214 FindGlyphRef
+101 4.0223 XaceHook
+91 3.6241 FreeResource
+91 3.6241 miCompositeSourceValidate
+82 3.2656 miValidatePicture
+76 3.0267 ReadRequestFromClient
+71 2.8276 _CallCallbacks
+71 2.8276 miModifyPixmapHeader
+56 2.2302 Dispatch
+55 2.1904 ValidateOnePicture
+49 1.9514 SecurityLookupIDByType
+47 1.8718 miSpriteSourceValidate
+43 1.7125 SecurityCheckResourceIDAccess
+40 1.5930 CallCallbacks
+39 1.5532 ProcRenderCompositeGlyphs
+39 1.5532 getDrawableDamageRef
+33 1.3142 CompareISOLatin1Lowered
+33 1.3142 dixChangeGC
+31 1.2346 ValidatePicture
+29 1.1549 CreatePicture
+25 0.9956 Ones
+24 0.9558 damageReportPostOp
+22 0.8761 __divdi3
+21 0.8363 XaceCatchExtProc
+21 0.8363 damageDestroyPixmap
+19 0.7567 FreePicture
+19 0.7567 Hash
+17 0.6770 GetScratchGC
+17 0.6770 ShmDestroyPixmap
+16 0.6372 FindGlyph
+16 0.6372 PictureGetFilterId
+16 0.6372 ProcRenderSetPictureFilter
+15 0.5974 AllocatePixmap
+15 0.5974 SecurityCheckExtAccess
+14 0.5575 ChangePicture
+14 0.5575 miComputeCompositeClip
+14 0.5575 miRenderColorToPixel
+13 0.5177 GetExtensionEntry
+13 0.5177 ProcCreatePixmap
+13 0.5177 SetPictureToDefaults
+12 0.4779 AllocatePicture
+12 0.4779 XaceCatchDispatchProc
+12 0.4779 damageValidateGC
+11 0.4381 LegalNewID
+11 0.4381 ProcRenderCreatePicture
+11 0.4381 ProcRenderFillRectangles
+11 0.4381 SetPictureFilter
+11 0.4381 Xalloc
+10 0.3982 dixLookupDrawable
+9 0.3584 damagePolyFillRect
+9 0.3584 miLineFixedX
+8 0.3186 .plt
+8 0.3186 ValidateGC
+8 0.3186 damageChangeClip
+8 0.3186 miBSCheapValidateGC
+7 0.2788 AddResource
+7 0.2788 FreeScratchGC
+7 0.2788 ProcRenderChangePicture
+7 0.2788 ProcRenderDispatch
+7 0.2788 ProcRenderSetPictureTransform
+7 0.2788 miColorRects
+7 0.2788 miRegionCreate
+6 0.2389 ProcFreePixmap
+6 0.2389 ProcRenderFreePicture
+6 0.2389 SetPictureTransform
+6 0.2389 Xfree
+6 0.2389 damageGlyphs
+6 0.2389 miCompositeRects
+6 0.2389 miRegionInit
+6 0.2389 miTranslateRegion
+5 0.1991 dixDestroyPixmap
+5 0.1991 miBSCheapChangeGC
+5 0.1991 miChangeClip
+5 0.1991 miDestroyPictureClip
+4 0.1593 CompositeGlyphs
+4 0.1593 CompositeRects
+4 0.1593 PictureFindFilter
+4 0.1593 ProcRenderSetPictureClipRectangles
+4 0.1593 SecurityLookupIDByClass
+4 0.1593 dixLookupGC
+4 0.1593 miCreatePicture
+4 0.1593 miTrapezoidBounds
+3 0.1195 ChangeGC
+3 0.1195 FlushClientCaches
+3 0.1195 PictOpValid
+3 0.1195 ProcChangeGC
+3 0.1195 ProcPolyFillRectangle
+3 0.1195 SetClipRects
+3 0.1195 __i686.get_pc_thunk.cx
+3 0.1195 damageChangeGC
+3 0.1195 damagePolySegment
+3 0.1195 miBSCheapChangeClip
+3 0.1195 miChangePicture
+3 0.1195 miDestroyClip
+3 0.1195 miRegionDestroy
+2 0.0796 FreeScratchPixmapHeader
+2 0.0796 GetPointerEvents
+2 0.0796 GetScratchPixmapHeader
+2 0.0796 ProcCopyArea
+2 0.0796 ProcRenderComposite
+2 0.0796 XisbRead
+2 0.0796 damageCopyArea
+2 0.0796 miDestroyPicture
+2 0.0796 miTrapezoids
+1 0.0398 AllocateGC
+1 0.0398 CreateGC
+1 0.0398 DeliverEventsToWindow
+1 0.0398 PictureMatchFormat
+1 0.0398 ProcPolySegment
+1 0.0398 ProcRenderTrapezoids
+1 0.0398 ProcessOtherEvent
+1 0.0398 SmartScheduleTimer
+1 0.0398 WriteToClient
+1 0.0398 _XSERVTransSocketRead
+1 0.0398 damageCreateGC
+1 0.0398 damageDestroyGC
+1 0.0398 getValuatorEvents
+1 0.0398 miChangePictureClip
+1 0.0398 miChangePictureTransform
+1 0.0398 miPointerUpdateSprite
+1 0.0398 miRectsToRegion
+1 0.0398 xf86PostMotionEvent
+1 0.0398 xf86SIGIO
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 3 6.9767 libc-2.5.so _int_realloc
+ 40 93.0233 libc-2.5.so msort_with_tmp
+532 29.1667 libc-2.5.so memcpy
+ 532 100.000 libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 1 0.3650 libc-2.5.so calloc
+ 11 4.0146 libc-2.5.so _int_realloc
+ 262 95.6204 libc-2.5.so malloc
+249 13.6513 libc-2.5.so _int_malloc
+ 249 88.6121 libc-2.5.so _int_malloc [self]
+ 31 11.0320 libc-2.5.so malloc_consolidate
+ 1 0.3559 libc-2.5.so __default_morecore
+-------------------------------------------------------------------------------
+ 1 5.0000 libc-2.5.so malloc_hook_ini
+ 2 10.0000 libc-2.5.so realloc
+ 2 10.0000 libc-2.5.so strdup
+ 3 15.0000 libc-2.5.so __fopen_internal
+ 12 60.0000 libc-2.5.so _nl_normalize_codeset
+195 10.6908 libc-2.5.so malloc
+ 262 54.5833 libc-2.5.so _int_malloc
+ 195 40.6250 libc-2.5.so malloc [self]
+ 17 3.5417 libc-2.5.so malloc_hook_ini
+ 5 1.0417 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.2083 libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+136 7.4561 libc-2.5.so free
+ 136 51.7110 libc-2.5.so free [self]
+ 119 45.2471 libc-2.5.so _int_free
+ 8 3.0418 libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.8197 libc-2.5.so do_release_shlib
+ 2 1.6393 libc-2.5.so _int_realloc
+ 119 97.5410 libc-2.5.so free
+119 6.5241 libc-2.5.so _int_free
+ 119 90.1515 libc-2.5.so _int_free [self]
+ 12 9.0909 libc-2.5.so malloc_consolidate
+ 1 0.7576 libc-2.5.so .plt
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so sigemptyset
+91 4.9890 libc-2.5.so memset
+ 91 100.000 libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+67 3.6732 libc-2.5.so memcmp
+ 67 100.000 libc-2.5.so memcmp [self]
+-------------------------------------------------------------------------------
+ 60 100.000 libc-2.5.so mbrtowc
+60 3.2895 libc-2.5.so __gconv_transform_utf8_internal
+ 60 100.000 libc-2.5.so __gconv_transform_utf8_internal [self]
+-------------------------------------------------------------------------------
+ 125 26.2055 libc-2.5.so qsort
+ 352 73.7945 libc-2.5.so msort_with_tmp
+46 2.5219 libc-2.5.so msort_with_tmp
+ 352 73.7945 libc-2.5.so msort_with_tmp
+ 46 9.6436 libc-2.5.so msort_with_tmp [self]
+ 40 8.3857 libc-2.5.so memcpy
+ 33 6.9182 libxul.so (no symbols)
+ 2 0.4193 libc-2.5.so __i686.get_pc_thunk.bx
+ 2 0.4193 libc-2.5.so alias_compare
+ 1 0.2096 libc-2.5.so strcmp
+ 1 0.2096 libc-2.5.so mempcpy
+-------------------------------------------------------------------------------
+ 1 2.2727 libc-2.5.so malloc
+ 12 27.2727 libc-2.5.so _int_free
+ 31 70.4545 libc-2.5.so _int_malloc
+44 2.4123 libc-2.5.so malloc_consolidate
+ 44 100.000 libc-2.5.so malloc_consolidate [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so mblen
+ 1 50.0000 libc-2.5.so build_wcs_buffer
+42 2.3026 libc-2.5.so mbrtowc
+ 60 55.5556 libc-2.5.so __gconv_transform_utf8_internal
+ 42 38.8889 libc-2.5.so mbrtowc [self]
+ 3 2.7778 libc-2.5.so _dl_mcount_wrapper_check
+ 2 1.8519 libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.9259 libc-2.5.so __wcsmbs_load_conv
+-------------------------------------------------------------------------------
+ 1 5.5556 libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 2 11.1111 libc-2.5.so msort_with_tmp
+ 2 11.1111 libc-2.5.so mbrtowc
+ 5 27.7778 libc-2.5.so malloc
+ 8 44.4444 libc-2.5.so free
+35 1.9189 libc-2.5.so __i686.get_pc_thunk.bx
+ 35 100.000 libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _nl_find_locale
+31 1.6996 libc-2.5.so strlen
+ 31 100.000 libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+22 1.2061 libc-2.5.so memmove
+ 22 100.000 libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+17 0.9320 libc-2.5.so strstr
+ 17 100.000 libc-2.5.so strstr [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libc-2.5.so ptmalloc_init
+16 0.8772 libc-2.5.so _dl_addr
+ 16 100.000 libc-2.5.so _dl_addr [self]
+-------------------------------------------------------------------------------
+11 0.6031 libc-2.5.so mkdir
+ 11 100.000 libc-2.5.so mkdir [self]
+-------------------------------------------------------------------------------
+6 0.3289 libc-2.5.so strchr
+ 6 100.000 libc-2.5.so strchr [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so mbrtowc
+5 0.2741 libc-2.5.so _dl_mcount_wrapper_check
+ 5 100.000 libc-2.5.so _dl_mcount_wrapper_check [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so _nl_load_locale_from_archive
+ 2 66.6667 libc-2.5.so read_alias_file
+5 0.2741 libc-2.5.so qsort
+ 125 93.9850 libc-2.5.so msort_with_tmp
+ 5 3.7594 libc-2.5.so qsort [self]
+ 2 1.5038 libxul.so (no symbols)
+ 1 0.7519 libc-2.5.so sysconf
+-------------------------------------------------------------------------------
+5 0.2741 libc-2.5.so realloc
+ 20 74.0741 libc-2.5.so _int_realloc
+ 5 18.5185 libc-2.5.so realloc [self]
+ 2 7.4074 libc-2.5.so malloc
+-------------------------------------------------------------------------------
+ 20 100.000 libc-2.5.so realloc
+4 0.2193 libc-2.5.so _int_realloc
+ 11 55.0000 libc-2.5.so _int_malloc
+ 4 20.0000 libc-2.5.so _int_realloc [self]
+ 3 15.0000 libc-2.5.so memcpy
+ 2 10.0000 libc-2.5.so _int_free
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so msort_with_tmp
+ 1 50.0000 libc-2.5.so __nss_passwd_lookup
+4 0.2193 libc-2.5.so strcmp
+ 4 100.000 libc-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+4 0.2193 libc-2.5.so strcpy
+ 4 100.000 libc-2.5.so strcpy [self]
+-------------------------------------------------------------------------------
+3 0.1645 libc-2.5.so __xstat
+ 3 100.000 libc-2.5.so __xstat [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so _nl_load_locale_from_archive
+3 0.1645 libc-2.5.so _nl_intern_locale_data
+ 3 100.000 libc-2.5.so _nl_intern_locale_data [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so _IO_getline
+3 0.1645 libc-2.5.so memchr
+ 3 100.000 libc-2.5.so memchr [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __sigjmp_save
+3 0.1645 libc-2.5.so sigprocmask
+ 3 100.000 libc-2.5.so sigprocmask [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so vfprintf
+ 1 50.0000 libc-2.5.so _IO_padn
+2 0.1096 libc-2.5.so _IO_default_xsputn
+ 2 100.000 libc-2.5.so _IO_default_xsputn [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so _IO_default_uflow
+ 2 66.6667 libc-2.5.so __uflow
+2 0.1096 libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 2 66.6667 libc-2.5.so _IO_file_underflow@@GLIBC_2.1 [self]
+ 1 33.3333 libc-2.5.so __read_nocancel
+-------------------------------------------------------------------------------
+2 0.1096 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 2 100.000 libc-2.5.so _IO_file_xsputn@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so sprintf
+ 1 50.0000 libc-2.5.so vsnprintf
+2 0.1096 libc-2.5.so _IO_str_init_static_internal
+ 2 100.000 libc-2.5.so _IO_str_init_static_internal [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so vsscanf
+2 0.1096 libc-2.5.so _IO_vfscanf
+ 2 66.6667 libc-2.5.so _IO_vfscanf [self]
+ 1 33.3333 libc-2.5.so _IO_sputbackc
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+2 0.1096 libc-2.5.so __read_nocancel
+ 2 100.000 libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so sbrk
+2 0.1096 libc-2.5.so brk
+ 2 100.000 libc-2.5.so brk [self]
+-------------------------------------------------------------------------------
+2 0.1096 libc-2.5.so bsearch
+ 2 100.000 libc-2.5.so bsearch [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so _nl_find_locale
+2 0.1096 libc-2.5.so getenv
+ 2 100.000 libc-2.5.so getenv [self]
+-------------------------------------------------------------------------------
+2 0.1096 libc-2.5.so strcat
+ 2 100.000 libc-2.5.so strcat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so asprintf
+2 0.1096 libc-2.5.so vasprintf
+ 2 100.000 libc-2.5.so vasprintf [self]
+-------------------------------------------------------------------------------
+2 0.1096 libc-2.5.so writev
+ 2 100.000 libc-2.5.so writev [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so fclose@@GLIBC_2.1
+1 0.0548 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 100.000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so fopen@@GLIBC_2.1
+1 0.0548 libc-2.5.so _IO_no_init
+ 1 100.000 libc-2.5.so _IO_no_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _IO_vfscanf
+1 0.0548 libc-2.5.so _IO_sputbackc
+ 1 100.000 libc-2.5.so _IO_sputbackc [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so __errno_location
+ 1 100.000 libc-2.5.so __errno_location [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so __fxstat
+ 1 100.000 libc-2.5.so __fxstat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __wcsmbs_load_conv
+1 0.0548 libc-2.5.so __gconv_lookup_cache
+ 1 100.000 libc-2.5.so __gconv_lookup_cache [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so __gconv_transform_internal_ucs2reverse
+ 1 50.0000 libc-2.5.so strnlen
+ 1 50.0000 libc-2.5.so __gconv_transform_internal_ucs2reverse [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so __i686.get_pc_thunk.cx
+ 1 100.000 libc-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so __xstat64@@GLIBC_2.2
+ 1 100.000 libc-2.5.so __xstat64@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so _exit
+ 1 100.000 libc-2.5.so _exit [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libc-2.5.so _nl_find_locale
+1 0.0548 libc-2.5.so _nl_load_locale_from_archive
+ 12 66.6667 libc-2.5.so _nl_normalize_codeset
+ 3 16.6667 libc-2.5.so _nl_intern_locale_data
+ 1 5.5556 libc-2.5.so qsort
+ 1 5.5556 libc-2.5.so strdup
+ 1 5.5556 libc-2.5.so _nl_load_locale_from_archive [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so msort_with_tmp
+1 0.0548 libc-2.5.so alias_compare
+ 1 50.0000 libc-2.5.so strcasecmp
+ 1 50.0000 libc-2.5.so alias_compare [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so xdr_rmtcall_args
+1 0.0548 libc-2.5.so clnt_broadcast
+ 1 100.000 libc-2.5.so clnt_broadcast [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so decide_maybe_mmap
+ 1 100.000 libc-2.5.so decide_maybe_mmap [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so fclose@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so fclose@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so fgetpos@@GLIBC_2.2
+ 1 100.000 libc-2.5.so fgetpos@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __nss_database_lookup
+1 0.0548 libc-2.5.so fopen@@GLIBC_2.1
+ 1 25.0000 libc-2.5.so _IO_no_init
+ 1 25.0000 libc-2.5.so __fopen_internal
+ 1 25.0000 ld-2.5.so _dl_runtime_resolve
+ 1 25.0000 libc-2.5.so fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so fork
+ 1 100.000 libc-2.5.so fork [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so ftruncate
+ 1 100.000 libc-2.5.so ftruncate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+1 0.0548 libc-2.5.so geteuid
+ 1 100.000 libc-2.5.so geteuid [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so getpwuid
+1 0.0548 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 3 75.0000 libnss_compat-2.5.so _nss_compat_getpwuid_r
+ 1 25.0000 libc-2.5.so getpwuid_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so gettimeofday
+ 1 100.000 libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 1 5.5556 libc-2.5.so __fopen_internal
+ 17 94.4444 libc-2.5.so malloc
+1 0.0548 libc-2.5.so malloc_hook_ini
+ 16 88.8889 libc-2.5.so ptmalloc_init
+ 1 5.5556 libc-2.5.so malloc
+ 1 5.5556 libc-2.5.so malloc_hook_ini [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so mblen
+ 1 50.0000 libc-2.5.so mbrtowc
+ 1 50.0000 libc-2.5.so mblen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so msort_with_tmp
+1 0.0548 libc-2.5.so mempcpy
+ 1 100.000 libc-2.5.so mempcpy [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so mremap
+ 1 100.000 libc-2.5.so mremap [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so pipe
+ 1 100.000 libc-2.5.so pipe [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so vsscanf
+1 0.0548 libc-2.5.so rawmemchr
+ 1 100.000 libc-2.5.so rawmemchr [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_search_stub
+1 0.0548 libc-2.5.so re_search_internal
+ 1 50.0000 libc-2.5.so re_string_reconstruct
+ 1 50.0000 libc-2.5.so re_search_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_search_internal
+1 0.0548 libc-2.5.so re_string_reconstruct
+ 1 100.000 libc-2.5.so re_string_reconstruct [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so read
+ 1 100.000 libc-2.5.so read [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so select
+ 1 100.000 libc-2.5.so select [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so setlocale
+ 22 95.6522 libc-2.5.so _nl_find_locale
+ 1 4.3478 libc-2.5.so setlocale [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so sigaction
+ 1 100.000 libc-2.5.so sigaction [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so sigemptyset
+ 1 50.0000 libc-2.5.so memset
+ 1 50.0000 libc-2.5.so sigemptyset [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so sigismember
+ 1 100.000 libc-2.5.so sigismember [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so sprintf
+ 2 50.0000 libc-2.5.so vsprintf
+ 1 25.0000 libc-2.5.so _IO_str_init_static_internal
+ 1 25.0000 libc-2.5.so sprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so alias_compare
+1 0.0548 libc-2.5.so strcasecmp
+ 1 100.000 libc-2.5.so strcasecmp [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _nl_find_locale
+1 0.0548 libc-2.5.so strchrnul
+ 1 100.000 libc-2.5.so strchrnul [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libc-2.5.so vsprintf
+ 1 25.0000 libc-2.5.so glob64@@GLIBC_2.2
+ 2 50.0000 libc-2.5.so vsnprintf
+1 0.0548 libc-2.5.so vfprintf
+ 2 50.0000 libc-2.5.so _IO_padn
+ 1 25.0000 libc-2.5.so _IO_default_xsputn
+ 1 25.0000 libc-2.5.so vfprintf [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so sprintf
+1 0.0548 libc-2.5.so vsprintf
+ 1 50.0000 libc-2.5.so vfprintf
+ 1 50.0000 libc-2.5.so vsprintf [self]
+-------------------------------------------------------------------------------
+1 0.0548 libc-2.5.so write
+ 1 100.000 libc-2.5.so write [self]
+-------------------------------------------------------------------------------
+ 18355 100.000 libc-2.5.so __libc_start_main
+0 0 Xorg main
+ 0 0 Xorg main [self]
+-------------------------------------------------------------------------------
+ 1 0.3846 libc-2.5.so getcwd
+ 259 99.6154 libc-2.5.so __libc_start_main
+0 0 bash (no symbols)
+ 0 0 bash (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so __libc_start_main
+0 0 cat (no symbols)
+ 0 0 cat (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 dirname (no symbols)
+ 0 0 dirname (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 expr (no symbols)
+ 0 0 expr (no symbols) [self]
+-------------------------------------------------------------------------------
+ 502 100.000 libc-2.5.so __libc_start_main
+0 0 firefox-bin (no symbols)
+ 0 0 firefox-bin (no symbols) [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so __libc_start_main
+0 0 gawk (no symbols)
+ 0 0 gawk (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 6.2500 libc-2.5.so exit
+ 15 93.7500 libc-2.5.so __libc_start_main
+0 0 grep (no symbols)
+ 0 0 grep (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 id (no symbols)
+ 0 0 id (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so __libc_dlopen_mode
+0 0 ld-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so exit
+0 0 ld-2.5.so _dl_fini
+ 0 0 ld-2.5.so _dl_fini [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so do_dlopen
+0 0 ld-2.5.so _dl_open
+ 0 0 ld-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so fopen@@GLIBC_2.1
+ 2 66.6667 libc-2.5.so __libc_start_main
+0 0 ld-2.5.so _dl_runtime_resolve
+ 0 0 ld-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _int_free
+0 0 libc-2.5.so .plt
+ 0 0 libc-2.5.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __uflow
+0 0 libc-2.5.so _IO_default_uflow
+ 1 100.000 libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 0 0 libc-2.5.so _IO_default_uflow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __fopen_internal
+0 0 libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 1 100.000 libc-2.5.so __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so _IO_file_fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 33.3333 libc-2.5.so fgets_unlocked
+ 4 66.6667 libc-2.5.so fgets
+0 0 libc-2.5.so _IO_getline
+ 3 50.0000 libc-2.5.so memchr
+ 3 50.0000 libc-2.5.so _IO_getline_info
+ 0 0 libc-2.5.so _IO_getline [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so _IO_getline
+0 0 libc-2.5.so _IO_getline_info
+ 3 100.000 libc-2.5.so __uflow
+ 0 0 libc-2.5.so _IO_getline_info [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so vfprintf
+0 0 libc-2.5.so _IO_padn
+ 1 100.000 libc-2.5.so _IO_default_xsputn
+ 0 0 libc-2.5.so _IO_padn [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so dcgettext
+0 0 libc-2.5.so __dcigettext
+ 2 100.000 libc-2.5.so _nl_find_domain
+ 0 0 libc-2.5.so __dcigettext [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _int_malloc
+0 0 libc-2.5.so __default_morecore
+ 1 100.000 libc-2.5.so sbrk
+ 0 0 libc-2.5.so __default_morecore [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libc-2.5.so fopen@@GLIBC_2.1
+ 4 80.0000 libc-2.5.so fopen64
+0 0 libc-2.5.so __fopen_internal
+ 3 60.0000 libc-2.5.so malloc
+ 1 20.0000 libc-2.5.so malloc_hook_ini
+ 1 20.0000 libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 0 0 libc-2.5.so __fopen_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __gconv_transform_internal_ucs2
+0 0 libc-2.5.so __gconv_transform_internal_ucs2
+ 1 50.0000 libc-2.5.so __gconv_transform_internal_ucs2
+ 1 50.0000 libc-2.5.so tr_reallochook
+ 0 0 libc-2.5.so __gconv_transform_internal_ucs2 [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so __nss_lookup_function
+0 0 libc-2.5.so __libc_dlopen_mode
+ 3 100.000 ld-2.5.so _dl_catch_error
+ 0 0 libc-2.5.so __libc_dlopen_mode [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so __libc_start_main
+ 18355 88.0251 Xorg main
+ 1661 7.9657 oprofiled (no symbols)
+ 502 2.4074 firefox-bin (no symbols)
+ 259 1.2421 bash (no symbols)
+ 21 0.1007 sudo (no symbols)
+ 15 0.0719 grep (no symbols)
+ 7 0.0336 ls (no symbols)
+ 4 0.0192 sleep (no symbols)
+ 4 0.0192 gawk (no symbols)
+ 3 0.0144 tr (no symbols)
+ 3 0.0144 cat (no symbols)
+ 2 0.0096 mkdir (no symbols)
+ 2 0.0096 mktemp (no symbols)
+ 2 0.0096 ld-2.5.so _dl_runtime_resolve
+ 2 0.0096 dirname (no symbols)
+ 2 0.0096 expr (no symbols)
+ 2 0.0096 id (no symbols)
+ 2 0.0096 ophelp (no symbols)
+ 2 0.0096 sshd (no symbols)
+ 1 0.0048 rm (no symbols)
+ 1 0.0048 libc-2.5.so geteuid
+ 0 0 libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __nss_passwd_lookup
+0 0 libc-2.5.so __nss_database_lookup
+ 2 100.000 libc-2.5.so fopen@@GLIBC_2.1
+ 0 0 libc-2.5.so __nss_database_lookup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nss_passwd_lookup
+0 0 libc-2.5.so __nss_lookup
+ 1 100.000 libc-2.5.so __nss_lookup_function
+ 0 0 libc-2.5.so __nss_lookup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nss_lookup
+0 0 libc-2.5.so __nss_lookup_function
+ 3 100.000 libc-2.5.so __libc_dlopen_mode
+ 0 0 libc-2.5.so __nss_lookup_function [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so __nss_setent
+0 0 libc-2.5.so __nss_passwd_lookup
+ 2 50.0000 libc-2.5.so __nss_database_lookup
+ 1 25.0000 libc-2.5.so strcmp
+ 1 25.0000 libc-2.5.so __nss_lookup
+ 0 0 libc-2.5.so __nss_passwd_lookup [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so setpwent
+0 0 libc-2.5.so __nss_setent
+ 4 80.0000 libc-2.5.so __nss_passwd_lookup
+ 1 20.0000 libnss_compat-2.5.so _nss_compat_setpwent
+ 0 0 libc-2.5.so __nss_setent [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so __sigjmp_save
+ 2 100.000 libc-2.5.so sigprocmask
+ 0 0 libc-2.5.so __sigjmp_save [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so _IO_getline_info
+0 0 libc-2.5.so __uflow
+ 2 66.6667 libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so _IO_default_uflow
+ 0 0 libc-2.5.so __uflow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so mbrtowc
+0 0 libc-2.5.so __wcsmbs_load_conv
+ 1 100.000 libc-2.5.so __gconv_lookup_cache
+ 0 0 libc-2.5.so __wcsmbs_load_conv [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so _nl_find_domain
+0 0 libc-2.5.so _nl_expand_alias
+ 2 100.000 libc-2.5.so read_alias_file
+ 0 0 libc-2.5.so _nl_expand_alias [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __dcigettext
+0 0 libc-2.5.so _nl_find_domain
+ 2 100.000 libc-2.5.so _nl_expand_alias
+ 0 0 libc-2.5.so _nl_find_domain [self]
+-------------------------------------------------------------------------------
+ 22 100.000 libc-2.5.so setlocale
+0 0 libc-2.5.so _nl_find_locale
+ 18 81.8182 libc-2.5.so _nl_load_locale_from_archive
+ 2 9.0909 libc-2.5.so getenv
+ 1 4.5455 libc-2.5.so strlen
+ 1 4.5455 libc-2.5.so strchrnul
+ 0 0 libc-2.5.so _nl_find_locale [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libc-2.5.so _nl_load_locale_from_archive
+0 0 libc-2.5.so _nl_normalize_codeset
+ 12 100.000 libc-2.5.so malloc
+ 0 0 libc-2.5.so _nl_normalize_codeset [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so iswupper_l
+0 0 libc-2.5.so _nss_files_parse_spent
+ 1 100.000 locale-archive (no symbols)
+ 0 0 libc-2.5.so _nss_files_parse_spent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so strnlen
+0 0 libc-2.5.so _obstack_begin
+ 1 100.000 libc-2.5.so tr_reallochook
+ 0 0 libc-2.5.so _obstack_begin [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+0 0 libc-2.5.so _res_hconf_init
+ 1 100.000 libc-2.5.so do_init
+ 0 0 libc-2.5.so _res_hconf_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so ctime
+0 0 libc-2.5.so asctime
+ 1 100.000 libc-2.5.so snprintf
+ 0 0 libc-2.5.so asctime [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so asprintf
+ 1 100.000 libc-2.5.so vasprintf
+ 0 0 libc-2.5.so asprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_compile_internal
+0 0 libc-2.5.so build_wcs_buffer
+ 1 100.000 libc-2.5.so mbrtowc
+ 0 0 libc-2.5.so build_wcs_buffer [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so calloc
+ 1 100.000 libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so calloc [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so clone
+ 1 100.000 libpthread-2.5.so start_thread
+ 0 0 libc-2.5.so clone [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so ctime
+ 1 100.000 libc-2.5.so asctime
+ 0 0 libc-2.5.so ctime [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so dcgettext
+ 2 100.000 libc-2.5.so __dcigettext
+ 0 0 libc-2.5.so dcgettext [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so do_dlopen
+ 3 100.000 ld-2.5.so _dl_open
+ 0 0 libc-2.5.so do_dlopen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _res_hconf_init
+0 0 libc-2.5.so do_init
+ 1 100.000 libc-2.5.so fgets_unlocked
+ 0 0 libc-2.5.so do_init [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so do_release_shlib
+ 1 100.000 libc-2.5.so _int_free
+ 0 0 libc-2.5.so do_release_shlib [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so exit
+ 4 66.6667 ld-2.5.so _dl_fini
+ 1 16.6667 grep (no symbols)
+ 1 16.6667 sleep (no symbols)
+ 0 0 libc-2.5.so exit [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fgets
+ 4 100.000 libc-2.5.so _IO_getline
+ 0 0 libc-2.5.so fgets [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so do_init
+0 0 libc-2.5.so fgets_unlocked
+ 2 100.000 libc-2.5.so _IO_getline
+ 0 0 libc-2.5.so fgets_unlocked [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so fopen64
+ 4 100.000 libc-2.5.so __fopen_internal
+ 0 0 libc-2.5.so fopen64 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so getcwd
+ 1 100.000 bash (no symbols)
+ 0 0 libc-2.5.so getcwd [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so getgrgid
+ 1 100.000 libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so getgrgid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getgrgid
+0 0 libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+ 1 100.000 libnss_compat-2.5.so _nss_compat_getgrgid_r
+ 0 0 libc-2.5.so getgrgid_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so gethostbyname
+ 1 100.000 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so gethostbyname [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so gethostbyname
+0 0 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 1 100.000 libc-2.5.so _res_hconf_init
+ 0 0 libc-2.5.so gethostbyname_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so getpwuid
+ 4 100.000 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so getpwuid [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so getspnam
+ 1 100.000 libc-2.5.so getspnam_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so getspnam [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getspnam
+0 0 libc-2.5.so getspnam_r@@GLIBC_2.1.2
+ 1 100.000 libnss_compat-2.5.so _nss_compat_getspnam_r
+ 0 0 libc-2.5.so getspnam_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so glob64@@GLIBC_2.2
+ 1 100.000 libc-2.5.so vfprintf
+ 0 0 libc-2.5.so glob64@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so xdrrec_eof
+0 0 libc-2.5.so handle_i486
+ 1 100.000 libc-2.5.so pmap_rmtcall
+ 0 0 libc-2.5.so handle_i486 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so tr_reallochook
+0 0 libc-2.5.so intel_check_word
+ 1 100.000 libc-2.5.so xdrrec_eof
+ 0 0 libc-2.5.so intel_check_word [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so iswupper_l
+ 1 100.000 libc-2.5.so _nss_files_parse_spent
+ 0 0 libc-2.5.so iswupper_l [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so sysconf
+0 0 libc-2.5.so phys_pages_info
+ 1 100.000 libc-2.5.so sscanf
+ 0 0 libc-2.5.so phys_pages_info [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so handle_i486
+0 0 libc-2.5.so pmap_rmtcall
+ 1 100.000 libc-2.5.so xdr_rmtcall_args
+ 0 0 libc-2.5.so pmap_rmtcall [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libc-2.5.so malloc_hook_ini
+0 0 libc-2.5.so ptmalloc_init
+ 16 100.000 libc-2.5.so _dl_addr
+ 0 0 libc-2.5.so ptmalloc_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_compile_pattern
+0 0 libc-2.5.so re_compile_internal
+ 1 100.000 libc-2.5.so build_wcs_buffer
+ 0 0 libc-2.5.so re_compile_internal [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so re_compile_pattern
+ 1 100.000 libc-2.5.so re_compile_internal
+ 0 0 libc-2.5.so re_compile_pattern [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so re_search
+ 1 100.000 libc-2.5.so re_search_stub
+ 0 0 libc-2.5.so re_search [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so re_search
+0 0 libc-2.5.so re_search_stub
+ 1 100.000 libc-2.5.so re_search_internal
+ 0 0 libc-2.5.so re_search_stub [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so _nl_expand_alias
+0 0 libc-2.5.so read_alias_file
+ 2 100.000 libc-2.5.so qsort
+ 0 0 libc-2.5.so read_alias_file [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __default_morecore
+0 0 libc-2.5.so sbrk
+ 2 100.000 libc-2.5.so brk
+ 0 0 libc-2.5.so sbrk [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so setpwent
+ 5 100.000 libc-2.5.so __nss_setent
+ 0 0 libc-2.5.so setpwent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so asctime
+0 0 libc-2.5.so snprintf
+ 2 100.000 libc-2.5.so vsnprintf
+ 0 0 libc-2.5.so snprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so phys_pages_info
+0 0 libc-2.5.so sscanf
+ 3 100.000 libc-2.5.so vsscanf
+ 0 0 libc-2.5.so sscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so _nl_load_locale_from_archive
+0 0 libc-2.5.so strdup
+ 2 100.000 libc-2.5.so malloc
+ 0 0 libc-2.5.so strdup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __gconv_transform_internal_ucs2reverse
+0 0 libc-2.5.so strnlen
+ 1 100.000 libc-2.5.so _obstack_begin
+ 0 0 libc-2.5.so strnlen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so qsort
+0 0 libc-2.5.so sysconf
+ 1 100.000 libc-2.5.so phys_pages_info
+ 0 0 libc-2.5.so sysconf [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so __gconv_transform_internal_ucs2
+ 1 50.0000 libc-2.5.so _obstack_begin
+0 0 libc-2.5.so tr_reallochook
+ 1 50.0000 libc-2.5.so vswprintf
+ 1 50.0000 libc-2.5.so intel_check_word
+ 0 0 libc-2.5.so tr_reallochook [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so snprintf
+0 0 libc-2.5.so vsnprintf
+ 2 66.6667 libc-2.5.so vfprintf
+ 1 33.3333 libc-2.5.so _IO_str_init_static_internal
+ 0 0 libc-2.5.so vsnprintf [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so sscanf
+0 0 libc-2.5.so vsscanf
+ 2 66.6667 libc-2.5.so _IO_vfscanf
+ 1 33.3333 libc-2.5.so rawmemchr
+ 0 0 libc-2.5.so vsscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so tr_reallochook
+0 0 libc-2.5.so vswprintf
+ 1 100.000 locale-archive (no symbols)
+ 0 0 libc-2.5.so vswprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so pmap_rmtcall
+0 0 libc-2.5.so xdr_rmtcall_args
+ 1 100.000 libc-2.5.so clnt_broadcast
+ 0 0 libc-2.5.so xdr_rmtcall_args [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so intel_check_word
+0 0 libc-2.5.so xdrrec_eof
+ 1 100.000 libc-2.5.so handle_i486
+ 0 0 libc-2.5.so xdrrec_eof [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so _nss_compat_getgrgid_r
+ 0 0 libnss_compat-2.5.so _nss_compat_getgrgid_r [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so _nss_compat_getpwuid_r
+ 0 0 libnss_compat-2.5.so _nss_compat_getpwuid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so getspnam_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so _nss_compat_getspnam_r
+ 0 0 libnss_compat-2.5.so _nss_compat_getspnam_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __nss_setent
+0 0 libnss_compat-2.5.so _nss_compat_setpwent
+ 0 0 libnss_compat-2.5.so _nss_compat_setpwent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so clone
+0 0 libpthread-2.5.so start_thread
+ 0 0 libpthread-2.5.so start_thread [self]
+-------------------------------------------------------------------------------
+ 2 5.7143 libc-2.5.so qsort
+ 33 94.2857 libc-2.5.so msort_with_tmp
+0 0 libxul.so (no symbols)
+ 0 0 libxul.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so vswprintf
+ 1 50.0000 libc-2.5.so _nss_files_parse_spent
+0 0 locale-archive (no symbols)
+ 0 0 locale-archive (no symbols) [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so __libc_start_main
+0 0 ls (no symbols)
+ 0 0 ls (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 mkdir (no symbols)
+ 0 0 mkdir (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 mktemp (no symbols)
+ 0 0 mktemp (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 ophelp (no symbols)
+ 0 0 ophelp (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1661 100.000 libc-2.5.so __libc_start_main
+0 0 oprofiled (no symbols)
+ 0 0 oprofiled (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so __libc_start_main
+0 0 rm (no symbols)
+ 0 0 rm (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libc-2.5.so exit
+ 4 80.0000 libc-2.5.so __libc_start_main
+0 0 sleep (no symbols)
+ 0 0 sleep (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so __libc_start_main
+0 0 sshd (no symbols)
+ 0 0 sshd (no symbols) [self]
+-------------------------------------------------------------------------------
+ 21 100.000 libc-2.5.so __libc_start_main
+0 0 sudo (no symbols)
+ 0 0 sudo (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so __libc_start_main
+0 0 tr (no symbols)
+ 0 0 tr (no symbols) [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+532 29.1667 memcpy
+249 13.6513 _int_malloc
+195 10.6908 malloc
+136 7.4561 free
+119 6.5241 _int_free
+91 4.9890 memset
+67 3.6732 memcmp
+60 3.2895 __gconv_transform_utf8_internal
+46 2.5219 msort_with_tmp
+44 2.4123 malloc_consolidate
+42 2.3026 mbrtowc
+35 1.9189 __i686.get_pc_thunk.bx
+31 1.6996 strlen
+22 1.2061 memmove
+17 0.9320 strstr
+16 0.8772 _dl_addr
+11 0.6031 mkdir
+6 0.3289 strchr
+5 0.2741 _dl_mcount_wrapper_check
+5 0.2741 qsort
+5 0.2741 realloc
+4 0.2193 _int_realloc
+4 0.2193 strcmp
+4 0.2193 strcpy
+3 0.1645 __xstat
+3 0.1645 _nl_intern_locale_data
+3 0.1645 memchr
+3 0.1645 sigprocmask
+2 0.1096 _IO_default_xsputn
+2 0.1096 _IO_file_underflow@@GLIBC_2.1
+2 0.1096 _IO_file_xsputn@@GLIBC_2.1
+2 0.1096 _IO_str_init_static_internal
+2 0.1096 _IO_vfscanf
+2 0.1096 __read_nocancel
+2 0.1096 brk
+2 0.1096 bsearch
+2 0.1096 getenv
+2 0.1096 strcat
+2 0.1096 vasprintf
+2 0.1096 writev
+1 0.0548 _IO_file_close_it@@GLIBC_2.1
+1 0.0548 _IO_no_init
+1 0.0548 _IO_sputbackc
+1 0.0548 __errno_location
+1 0.0548 __fxstat
+1 0.0548 __gconv_lookup_cache
+1 0.0548 __gconv_transform_internal_ucs2reverse
+1 0.0548 __i686.get_pc_thunk.cx
+1 0.0548 __xstat64@@GLIBC_2.2
+1 0.0548 _exit
+1 0.0548 _nl_load_locale_from_archive
+1 0.0548 alias_compare
+1 0.0548 clnt_broadcast
+1 0.0548 decide_maybe_mmap
+1 0.0548 fclose@@GLIBC_2.1
+1 0.0548 fgetpos@@GLIBC_2.2
+1 0.0548 fopen@@GLIBC_2.1
+1 0.0548 fork
+1 0.0548 ftruncate
+1 0.0548 geteuid
+1 0.0548 getpwuid_r@@GLIBC_2.1.2
+1 0.0548 gettimeofday
+1 0.0548 malloc_hook_ini
+1 0.0548 mblen
+1 0.0548 mempcpy
+1 0.0548 mremap
+1 0.0548 pipe
+1 0.0548 rawmemchr
+1 0.0548 re_search_internal
+1 0.0548 re_string_reconstruct
+1 0.0548 read
+1 0.0548 select
+1 0.0548 setlocale
+1 0.0548 sigaction
+1 0.0548 sigemptyset
+1 0.0548 sigismember
+1 0.0548 sprintf
+1 0.0548 strcasecmp
+1 0.0548 strchrnul
+1 0.0548 vfprintf
+1 0.0548 vsprintf
+1 0.0548 write
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name symbol name
+-------------------------------------------------------------------------------
+ 3022 100.000 libpixman.so.0.0.0 pixman_blt
+3022 20.3447 libpixman.so.0.0.0 pixman_blt_mmx
+ 3022 100.000 libpixman.so.0.0.0 pixman_blt_mmx [self]
+-------------------------------------------------------------------------------
+ 1825 100.000 libpixman.so.0.0.0 pixman_image_composite
+1826 12.2930 libpixman.so.0.0.0 fbCompositeSolidMask_nx8888x8888Cmmx
+ 1826 100.000 libpixman.so.0.0.0 fbCompositeSolidMask_nx8888x8888Cmmx [self]
+-------------------------------------------------------------------------------
+ 1726 100.000 libpixman.so.0.0.0 pixman_fill
+1734 11.6736 libpixman.so.0.0.0 pixman_fill_mmx
+ 1734 100.000 libpixman.so.0.0.0 pixman_fill_mmx [self]
+-------------------------------------------------------------------------------
+ 3 0.1868 libpixman.so.0.0.0 pixman_image_composite_rect
+ 1603 99.8132 libpixman.so.0.0.0 pixman_composite_rect_general
+1606 10.8119 libpixman.so.0.0.0 fbCombineInU
+ 1606 100.000 libpixman.so.0.0.0 fbCombineInU [self]
+-------------------------------------------------------------------------------
+ 1364 100.000 libpixman.so.0.0.0 pixman_image_composite
+1364 9.1827 libpixman.so.0.0.0 fbCompositeSolidMask_nx8x8888mmx
+ 1364 100.000 libpixman.so.0.0.0 fbCompositeSolidMask_nx8x8888mmx [self]
+-------------------------------------------------------------------------------
+ 1 0.0863 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1158 99.9137 libpixman.so.0.0.0 fbFetch
+1159 7.8026 libpixman.so.0.0.0 fbFetch_a1
+ 1159 100.000 libpixman.so.0.0.0 fbFetch_a1 [self]
+-------------------------------------------------------------------------------
+ 848 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+769 5.1771 libpixman.so.0.0.0 pixman_rasterize_edges
+ 769 90.5771 libpixman.so.0.0.0 pixman_rasterize_edges [self]
+ 80 9.4229 libc-2.5.so memset
+-------------------------------------------------------------------------------
+ 2 0.4184 libpixman.so.0.0.0 pixman_image_composite_rect
+ 476 99.5816 libpixman.so.0.0.0 pixman_composite_rect_general
+478 3.2180 libpixman.so.0.0.0 mmxCombineOverU
+ 478 100.000 libpixman.so.0.0.0 mmxCombineOverU [self]
+-------------------------------------------------------------------------------
+ 465 100.000 libpixman.so.0.0.0 pixman_image_composite
+471 3.1709 libpixman.so.0.0.0 fbCompositeSrcAdd_8888x8888mmx
+ 471 100.000 libpixman.so.0.0.0 fbCompositeSrcAdd_8888x8888mmx [self]
+-------------------------------------------------------------------------------
+315 2.1206 libpixman.so.0.0.0 pixman_image_composite
+ 3281 41.3693 libpixman.so.0.0.0 pixman_image_composite_rect
+ 1825 23.0110 libpixman.so.0.0.0 fbCompositeSolidMask_nx8888x8888Cmmx
+ 1364 17.1983 libpixman.so.0.0.0 fbCompositeSolidMask_nx8x8888mmx
+ 465 5.8631 libpixman.so.0.0.0 fbCompositeSrcAdd_8888x8888mmx
+ 315 3.9718 libpixman.so.0.0.0 pixman_image_composite [self]
+ 277 3.4926 libpixman.so.0.0.0 fbCompositeSrc_8888x8888mmx
+ 263 3.3161 libpixman.so.0.0.0 pixman_compute_composite_region
+ 33 0.4161 libpixman.so.0.0.0 .plt
+ 25 0.3152 libpixman.so.0.0.0 pixman_region_rectangles
+ 20 0.2522 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 19 0.2396 libpixman.so.0.0.0 pixman_region_init
+ 13 0.1639 libpixman.so.0.0.0 pixman_have_mmx
+ 11 0.1387 libpixman.so.0.0.0 pixman_region_n_rects
+ 9 0.1135 libpixman.so.0.0.0 pixman_region_fini
+ 8 0.1009 libpixman.so.0.0.0 pixman_region_not_empty
+ 1 0.0126 libpixman.so.0.0.0 can_get_solid
+ 1 0.0126 anon (tgid:6252 range:0xb7f41000-0xb7f42000) (no symbols)
+ 1 0.0126 Xorg xf86SIGIO
+-------------------------------------------------------------------------------
+ 277 100.000 libpixman.so.0.0.0 pixman_image_composite
+278 1.8715 libpixman.so.0.0.0 fbCompositeSrc_8888x8888mmx
+ 278 100.000 libpixman.so.0.0.0 fbCompositeSrc_8888x8888mmx [self]
+-------------------------------------------------------------------------------
+246 1.6561 libpixman.so.0.0.0 pixman_fill
+ 1726 87.3482 libpixman.so.0.0.0 pixman_fill_mmx
+ 246 12.4494 libpixman.so.0.0.0 pixman_fill [self]
+ 3 0.1518 libpixman.so.0.0.0 pixman_have_mmx
+ 1 0.0506 anon (tgid:6252 range:0xb7f41000-0xb7f42000) (no symbols)
+-------------------------------------------------------------------------------
+ 263 100.000 libpixman.so.0.0.0 pixman_image_composite
+192 1.2926 libpixman.so.0.0.0 pixman_compute_composite_region
+ 192 70.5882 libpixman.so.0.0.0 pixman_compute_composite_region [self]
+ 48 17.6471 libpixman.so.0.0.0 pixman_region_rectangles
+ 16 5.8824 libpixman.so.0.0.0 pixman_region_n_rects
+ 10 3.6765 libpixman.so.0.0.0 pixman_region_init
+ 5 1.8382 libpixman.so.0.0.0 pixman_region_not_empty
+ 1 0.3676 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.8264 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1 0.8264 libpixman.so.0.0.0 pixman_compute_composite_region
+ 3 2.4793 libpixman.so.0.0.0 pixman_edge_init
+ 13 10.7438 libpixman.so.0.0.0 pixman_image_set_clip_region
+ 14 11.5702 libpixman.so.0.0.0 reset_clip_region
+ 18 14.8760 libpixman.so.0.0.0 pixman_image_unref
+ 18 14.8760 libpixman.so.0.0.0 allocate_image
+ 20 16.5289 libpixman.so.0.0.0 pixman_image_composite
+ 33 27.2727 libpixman.so.0.0.0 pixman_image_create_bits
+158 1.0637 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 158 100.000 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 9 7.8947 libpixman.so.0.0.0 pixman_image_composite
+ 30 26.3158 libpixman.so.0.0.0 reset_clip_region
+ 31 27.1930 libpixman.so.0.0.0 pixman_image_unref
+ 44 38.5965 libpixman.so.0.0.0 pixman_image_create_bits
+146 0.9829 libpixman.so.0.0.0 pixman_region_fini
+ 146 100.000 libpixman.so.0.0.0 pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 10 7.6336 libpixman.so.0.0.0 pixman_image_create_bits
+ 10 7.6336 libpixman.so.0.0.0 pixman_compute_composite_region
+ 19 14.5038 libpixman.so.0.0.0 pixman_image_composite
+ 92 70.2290 libpixman.so.0.0.0 allocate_image
+145 0.9762 libpixman.so.0.0.0 pixman_region_init
+ 145 100.000 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 32 49.2308 libpixman.so.0.0.0 pixman_image_create_bits
+ 33 50.7692 libpixman.so.0.0.0 pixman_image_composite
+138 0.9290 libpixman.so.0.0.0 .plt
+ 138 100.000 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+ 233 100.000 libpixman.so.0.0.0 pixman_image_create_bits
+133 0.8954 libpixman.so.0.0.0 allocate_image
+ 133 54.7325 libpixman.so.0.0.0 allocate_image [self]
+ 92 37.8601 libpixman.so.0.0.0 pixman_region_init
+ 18 7.4074 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+98 0.6598 libpixman.so.0.0.0 pixman_image_unref
+ 98 66.6667 libpixman.so.0.0.0 pixman_image_unref [self]
+ 31 21.0884 libpixman.so.0.0.0 pixman_region_fini
+ 18 12.2449 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+94 0.6328 libpixman.so.0.0.0 pixman_image_create_bits
+ 233 40.8056 libpixman.so.0.0.0 allocate_image
+ 95 16.6375 libpixman.so.0.0.0 reset_clip_region
+ 94 16.4623 libpixman.so.0.0.0 pixman_image_create_bits [self]
+ 44 7.7058 libpixman.so.0.0.0 pixman_region_fini
+ 33 5.7793 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 32 5.6042 libpixman.so.0.0.0 .plt
+ 30 5.2539 libpixman.so.0.0.0 pixman_region_init_rect
+ 10 1.7513 libpixman.so.0.0.0 pixman_region_init
+-------------------------------------------------------------------------------
+ 25 34.2466 libpixman.so.0.0.0 pixman_image_composite
+ 48 65.7534 libpixman.so.0.0.0 pixman_compute_composite_region
+75 0.5049 libpixman.so.0.0.0 pixman_region_rectangles
+ 75 100.000 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 18 37.5000 libpixman.so.0.0.0 reset_clip_region
+ 30 62.5000 libpixman.so.0.0.0 pixman_image_create_bits
+57 0.3837 libpixman.so.0.0.0 pixman_region_init_rect
+ 57 100.000 libpixman.so.0.0.0 pixman_region_init_rect [self]
+-------------------------------------------------------------------------------
+ 31 100.000 libpixman.so.0.0.0 pixman_image_set_clip_region
+47 0.3164 libpixman.so.0.0.0 pixman_region_copy
+ 47 100.000 libpixman.so.0.0.0 pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 95 100.000 libpixman.so.0.0.0 pixman_image_create_bits
+38 0.2558 libpixman.so.0.0.0 reset_clip_region
+ 38 38.0000 libpixman.so.0.0.0 reset_clip_region [self]
+ 30 30.0000 libpixman.so.0.0.0 pixman_region_fini
+ 18 18.0000 libpixman.so.0.0.0 pixman_region_init_rect
+ 14 14.0000 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+33 0.2222 libpixman.so.0.0.0 pixman_image_set_clip_region
+ 33 42.8571 libpixman.so.0.0.0 pixman_image_set_clip_region [self]
+ 31 40.2597 libpixman.so.0.0.0 pixman_region_copy
+ 13 16.8831 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 11 40.7407 libpixman.so.0.0.0 pixman_image_composite
+ 16 59.2593 libpixman.so.0.0.0 pixman_compute_composite_region
+27 0.1818 libpixman.so.0.0.0 pixman_region_n_rects
+ 27 100.000 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+26 0.1750 libpixman.so.0.0.0 pixman_image_set_filter
+ 26 100.000 libpixman.so.0.0.0 pixman_image_set_filter [self]
+-------------------------------------------------------------------------------
+ 3 18.7500 libpixman.so.0.0.0 pixman_fill
+ 13 81.2500 libpixman.so.0.0.0 pixman_image_composite
+22 0.1481 libpixman.so.0.0.0 pixman_have_mmx
+ 22 100.000 libpixman.so.0.0.0 pixman_have_mmx [self]
+-------------------------------------------------------------------------------
+ 3271 100.000 libpixman.so.0.0.0 pixman_image_composite_rect
+21 0.1414 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1603 49.0064 libpixman.so.0.0.0 fbCombineInU
+ 1166 35.6466 libpixman.so.0.0.0 fbFetch
+ 476 14.5521 libpixman.so.0.0.0 mmxCombineOverU
+ 21 0.6420 libpixman.so.0.0.0 pixman_composite_rect_general [self]
+ 1 0.0306 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 0.0306 libpixman.so.0.0.0 __i686.get_pc_thunk.cx
+ 1 0.0306 libpixman.so.0.0.0 fbFetch_a1
+ 1 0.0306 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8
+ 1 0.0306 libpixman.so.0.0.0 fbFetchSolid
+-------------------------------------------------------------------------------
+19 0.1279 libpixman.so.0.0.0 pixman_region_intersect
+ 19 100.000 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 1 6.2500 libpixman.so.0.0.0 pixman_edge_init
+ 5 31.2500 libpixman.so.0.0.0 pixman_edge_step
+ 10 62.5000 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+16 0.1077 libpixman.so.0.0.0 __divdi3
+ 16 100.000 libpixman.so.0.0.0 __divdi3 [self]
+-------------------------------------------------------------------------------
+13 0.0875 libpixman.so.0.0.0 pixman_image_set_component_alpha
+ 13 100.000 libpixman.so.0.0.0 pixman_image_set_component_alpha [self]
+-------------------------------------------------------------------------------
+ 5 38.4615 libpixman.so.0.0.0 pixman_compute_composite_region
+ 8 61.5385 libpixman.so.0.0.0 pixman_image_composite
+13 0.0875 libpixman.so.0.0.0 pixman_region_not_empty
+ 13 100.000 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+11 0.0741 libpixman.so.0.0.0 pixman_image_set_repeat
+ 11 100.000 libpixman.so.0.0.0 pixman_image_set_repeat [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+9 0.0606 libpixman.so.0.0.0 pixman_sample_floor_y
+ 9 100.000 libpixman.so.0.0.0 pixman_sample_floor_y [self]
+-------------------------------------------------------------------------------
+ 2 0.1712 libpixman.so.0.0.0 pixman_image_composite_rect
+ 1166 99.8288 libpixman.so.0.0.0 pixman_composite_rect_general
+8 0.0539 libpixman.so.0.0.0 fbFetch
+ 1158 99.1438 libpixman.so.0.0.0 fbFetch_a1
+ 8 0.6849 libpixman.so.0.0.0 fbFetch [self]
+ 2 0.1712 anon (tgid:6252 range:0xb7f41000-0xb7f42000) (no symbols)
+-------------------------------------------------------------------------------
+ 6 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+8 0.0539 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 8 100.000 libpixman.so.0.0.0 pixman_sample_ceil_y [self]
+-------------------------------------------------------------------------------
+6 0.0404 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 6 100.000 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+6 0.0404 libpixman.so.0.0.0 pixman_region_translate
+ 6 100.000 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 15 100.000 libpixman.so.0.0.0 pixman_edge_init
+5 0.0337 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 10 66.6667 libpixman.so.0.0.0 __divdi3
+ 5 33.3333 libpixman.so.0.0.0 _pixman_edge_tMultiInit [self]
+-------------------------------------------------------------------------------
+ 30 100.000 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+4 0.0269 libpixman.so.0.0.0 pixman_edge_init
+ 15 50.0000 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 7 23.3333 libpixman.so.0.0.0 pixman_edge_step
+ 4 13.3333 libpixman.so.0.0.0 pixman_edge_init [self]
+ 3 10.0000 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 3.3333 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+ 1 12.5000 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 7 87.5000 libpixman.so.0.0.0 pixman_edge_init
+3 0.0202 libpixman.so.0.0.0 pixman_edge_step
+ 5 62.5000 libpixman.so.0.0.0 __divdi3
+ 3 37.5000 libpixman.so.0.0.0 pixman_edge_step [self]
+-------------------------------------------------------------------------------
+ 33 100.000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+3 0.0202 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 30 88.2353 libpixman.so.0.0.0 pixman_edge_init
+ 3 8.8235 libpixman.so.0.0.0 pixman_line_fixed_edge_init [self]
+ 1 2.9412 libpixman.so.0.0.0 pixman_edge_step
+-------------------------------------------------------------------------------
+3 0.0202 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 848 94.1176 libpixman.so.0.0.0 pixman_rasterize_edges
+ 33 3.6626 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 9 0.9989 libpixman.so.0.0.0 pixman_sample_floor_y
+ 6 0.6659 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 3 0.3330 libpixman.so.0.0.0 pixman_rasterize_trapezoid [self]
+ 1 0.1110 anon (tgid:6252 range:0xb7f41000-0xb7f42000) (no symbols)
+ 1 0.1110 libc-2.5.so memset
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_image_composite
+2 0.0135 libpixman.so.0.0.0 can_get_solid
+ 2 100.000 libpixman.so.0.0.0 can_get_solid [self]
+-------------------------------------------------------------------------------
+ 3281 100.000 libpixman.so.0.0.0 pixman_image_composite
+2 0.0135 libpixman.so.0.0.0 pixman_image_composite_rect
+ 3271 99.6952 libpixman.so.0.0.0 pixman_composite_rect_general
+ 3 0.0914 libpixman.so.0.0.0 fbCombineInU
+ 2 0.0610 libpixman.so.0.0.0 fbFetch
+ 2 0.0610 libpixman.so.0.0.0 mmxCombineOverU
+ 2 0.0610 libpixman.so.0.0.0 pixman_image_composite_rect [self]
+ 1 0.0305 libpixman.so.0.0.0 mmxCombineAddU
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_composite_rect_general
+1 0.0067 libpixman.so.0.0.0 __i686.get_pc_thunk.cx
+ 1 100.000 libpixman.so.0.0.0 __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_composite_rect_general
+1 0.0067 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8
+ 1 100.000 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_composite_rect_general
+1 0.0067 libpixman.so.0.0.0 fbFetchSolid
+ 1 100.000 libpixman.so.0.0.0 fbFetchSolid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_image_composite_rect
+1 0.0067 libpixman.so.0.0.0 mmxCombineAddU
+ 1 100.000 libpixman.so.0.0.0 mmxCombineAddU [self]
+-------------------------------------------------------------------------------
+1 0.0067 libpixman.so.0.0.0 pixman_image_set_has_client_clip
+ 1 100.000 libpixman.so.0.0.0 pixman_image_set_has_client_clip [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_blt
+0 0 Xorg SmartScheduleTimer
+ 0 0 Xorg SmartScheduleTimer [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 pixman_image_composite
+0 0 Xorg xf86SIGIO
+ 0 0 Xorg xf86SIGIO [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 libpixman.so.0.0.0 pixman_image_composite
+ 1 12.5000 libpixman.so.0.0.0 pixman_fill
+ 1 12.5000 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 2 25.0000 libpixman.so.0.0.0 fbFetch
+ 3 37.5000 libpixman.so.0.0.0 pixman_blt
+0 0 anon (tgid:6252 range:0xb7f41000-0xb7f42000) (no symbols)
+ 0 0 anon (tgid:6252 range:0xb7f41000-0xb7f42000) (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 1.2346 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 80 98.7654 libpixman.so.0.0.0 pixman_rasterize_edges
+0 0 libc-2.5.so memset
+ 0 0 libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+0 0 libpixman.so.0.0.0 pixman_blt
+ 3022 99.8678 libpixman.so.0.0.0 pixman_blt_mmx
+ 3 0.0991 anon (tgid:6252 range:0xb7f41000-0xb7f42000) (no symbols)
+ 1 0.0330 Xorg SmartScheduleTimer
+ 0 0 libpixman.so.0.0.0 pixman_blt [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % symbol name
+3022 20.3447 pixman_blt_mmx
+1826 12.2930 fbCompositeSolidMask_nx8888x8888Cmmx
+1734 11.6736 pixman_fill_mmx
+1606 10.8119 fbCombineInU
+1364 9.1827 fbCompositeSolidMask_nx8x8888mmx
+1159 7.8026 fbFetch_a1
+769 5.1771 pixman_rasterize_edges
+478 3.2180 mmxCombineOverU
+471 3.1709 fbCompositeSrcAdd_8888x8888mmx
+315 2.1206 pixman_image_composite
+278 1.8715 fbCompositeSrc_8888x8888mmx
+246 1.6561 pixman_fill
+192 1.2926 pixman_compute_composite_region
+158 1.0637 __i686.get_pc_thunk.bx
+146 0.9829 pixman_region_fini
+145 0.9762 pixman_region_init
+138 0.9290 .plt
+133 0.8954 allocate_image
+98 0.6598 pixman_image_unref
+94 0.6328 pixman_image_create_bits
+75 0.5049 pixman_region_rectangles
+57 0.3837 pixman_region_init_rect
+47 0.3164 pixman_region_copy
+38 0.2558 reset_clip_region
+33 0.2222 pixman_image_set_clip_region
+27 0.1818 pixman_region_n_rects
+26 0.1750 pixman_image_set_filter
+22 0.1481 pixman_have_mmx
+21 0.1414 pixman_composite_rect_general
+19 0.1279 pixman_region_intersect
+16 0.1077 __divdi3
+13 0.0875 pixman_image_set_component_alpha
+13 0.0875 pixman_region_not_empty
+11 0.0741 pixman_image_set_repeat
+9 0.0606 pixman_sample_floor_y
+8 0.0539 fbFetch
+8 0.0539 pixman_sample_ceil_y
+6 0.0404 pixman_region_init_with_extents
+6 0.0404 pixman_region_translate
+5 0.0337 _pixman_edge_tMultiInit
+4 0.0269 pixman_edge_init
+3 0.0202 pixman_edge_step
+3 0.0202 pixman_line_fixed_edge_init
+3 0.0202 pixman_rasterize_trapezoid
+2 0.0135 can_get_solid
+2 0.0135 pixman_image_composite_rect
+1 0.0067 __i686.get_pc_thunk.cx
+1 0.0067 fbFetchPixel_a8r8g8b8
+1 0.0067 fbFetchSolid
+1 0.0067 mmxCombineAddU
+1 0.0067 pixman_image_set_has_client_clip
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name app name symbol name
+-------------------------------------------------------------------------------
+5882 16.7345 libxul.so libxul.so (no symbols)
+ 5882 100.000 libxul.so libxul.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3022 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt
+3022 8.5977 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt_mmx
+ 3022 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt_mmx [self]
+-------------------------------------------------------------------------------
+ 1825 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+1826 5.1950 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSolidMask_nx8888x8888Cmmx
+ 1826 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSolidMask_nx8888x8888Cmmx [self]
+-------------------------------------------------------------------------------
+ 1726 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_fill
+1734 4.9333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_fill_mmx
+ 1734 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_fill_mmx [self]
+-------------------------------------------------------------------------------
+1660 4.7228 vmlinux vmlinux get_page_from_freelist
+ 1660 100.000 vmlinux vmlinux get_page_from_freelist [self]
+-------------------------------------------------------------------------------
+1618 4.6033 oprofiled oprofiled (no symbols)
+ 1618 100.000 oprofiled oprofiled (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 0.1868 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 1603 99.8132 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+1606 4.5691 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+ 1606 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU [self]
+-------------------------------------------------------------------------------
+ 1364 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+1364 3.8806 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSolidMask_nx8x8888mmx
+ 1364 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSolidMask_nx8x8888mmx [self]
+-------------------------------------------------------------------------------
+ 1 0.0863 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1158 99.9137 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+1159 3.2974 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1
+ 1159 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1 [self]
+-------------------------------------------------------------------------------
+ 848 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+769 2.1878 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+ 769 90.5771 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges [self]
+ 80 9.4229 libc-2.5.so libpixman.so.0.0.0 memset
+-------------------------------------------------------------------------------
+604 1.7184 vmlinux vmlinux page_fault
+ 604 100.000 vmlinux vmlinux page_fault [self]
+-------------------------------------------------------------------------------
+ 3 6.9767 libc-2.5.so libc-2.5.so _int_realloc
+ 40 93.0233 libc-2.5.so libc-2.5.so msort_with_tmp
+532 1.5136 libc-2.5.so libc-2.5.so memcpy
+ 532 100.000 libc-2.5.so libc-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 2 0.4184 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 476 99.5816 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+478 1.3599 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+ 478 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU [self]
+-------------------------------------------------------------------------------
+ 465 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+471 1.3400 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSrcAdd_8888x8888mmx
+ 471 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSrcAdd_8888x8888mmx [self]
+-------------------------------------------------------------------------------
+444 1.2632 vmlinux vmlinux kunmap_atomic
+ 444 100.000 vmlinux vmlinux kunmap_atomic [self]
+-------------------------------------------------------------------------------
+315 0.8962 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+ 3281 41.3693 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 1825 23.0110 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSolidMask_nx8888x8888Cmmx
+ 1364 17.1983 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSolidMask_nx8x8888mmx
+ 465 5.8631 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSrcAdd_8888x8888mmx
+ 315 3.9718 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite [self]
+ 277 3.4926 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSrc_8888x8888mmx
+ 263 3.3161 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+ 33 0.4161 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 25 0.3152 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles
+ 20 0.2522 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 19 0.2396 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+ 13 0.1639 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_have_mmx
+ 11 0.1387 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects
+ 9 0.1135 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 8 0.1009 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty
+ 1 0.0126 libpixman.so.0.0.0 libpixman.so.0.0.0 can_get_solid
+ 1 0.0126 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libpixman.so.0.0.0 (no symbols)
+ 1 0.0126 Xorg libpixman.so.0.0.0 xf86SIGIO
+-------------------------------------------------------------------------------
+313 0.8905 oprofile.ko oprofile sync_buffer
+ 313 100.000 oprofile.ko oprofile sync_buffer [self]
+-------------------------------------------------------------------------------
+283 0.8051 libmozjs.so libmozjs.so (no symbols)
+ 283 100.000 libmozjs.so libmozjs.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 277 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+278 0.7909 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSrc_8888x8888mmx
+ 278 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSrc_8888x8888mmx [self]
+-------------------------------------------------------------------------------
+ 1 0.3650 libc-2.5.so libc-2.5.so calloc
+ 11 4.0146 libc-2.5.so libc-2.5.so _int_realloc
+ 262 95.6204 libc-2.5.so libc-2.5.so malloc
+249 0.7084 libc-2.5.so libc-2.5.so _int_malloc
+ 249 88.6121 libc-2.5.so libc-2.5.so _int_malloc [self]
+ 31 11.0320 libc-2.5.so libc-2.5.so malloc_consolidate
+ 1 0.3559 libc-2.5.so libc-2.5.so __default_morecore
+-------------------------------------------------------------------------------
+246 0.6999 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_fill
+ 1726 87.3482 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_fill_mmx
+ 246 12.4494 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_fill [self]
+ 3 0.1518 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_have_mmx
+ 1 0.0506 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libpixman.so.0.0.0 (no symbols)
+-------------------------------------------------------------------------------
+ 18 1.8219 libfb.so libfb.so fbRasterizeTrapezoid
+ 970 98.1781 libfb.so libfb.so fbComposite
+245 0.6970 libfb.so libfb.so image_from_pict
+ 559 55.8442 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 245 24.4755 libfb.so libfb.so image_from_pict [self]
+ 66 6.5934 libpixman.so.0.0.0 libfb.so pixman_image_set_clip_region
+ 29 2.8971 libpixman.so.0.0.0 libfb.so .plt
+ 22 2.1978 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx
+ 22 2.1978 libpixman.so.0.0.0 libfb.so pixman_image_set_filter
+ 12 1.1988 libpixman.so.0.0.0 libfb.so pixman_region_copy
+ 10 0.9990 libpixman.so.0.0.0 libfb.so pixman_image_set_component_alpha
+ 10 0.9990 libpixman.so.0.0.0 libfb.so allocate_image
+ 9 0.8991 libpixman.so.0.0.0 libfb.so pixman_region_init_rect
+ 8 0.7992 libpixman.so.0.0.0 libfb.so pixman_region_fini
+ 5 0.4995 libpixman.so.0.0.0 libfb.so reset_clip_region
+ 4 0.3996 libpixman.so.0.0.0 libfb.so pixman_image_set_repeat
+-------------------------------------------------------------------------------
+215 0.6117 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols)
+ 215 100.000 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 5.0000 libc-2.5.so libc-2.5.so malloc_hook_ini
+ 2 10.0000 libc-2.5.so libc-2.5.so realloc
+ 2 10.0000 libc-2.5.so libc-2.5.so strdup
+ 3 15.0000 libc-2.5.so libc-2.5.so __fopen_internal
+ 12 60.0000 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+195 0.5548 libc-2.5.so libc-2.5.so malloc
+ 262 54.5833 libc-2.5.so libc-2.5.so _int_malloc
+ 195 40.6250 libc-2.5.so libc-2.5.so malloc [self]
+ 17 3.5417 libc-2.5.so libc-2.5.so malloc_hook_ini
+ 5 1.0417 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.2083 libc-2.5.so libc-2.5.so malloc_consolidate
+-------------------------------------------------------------------------------
+ 263 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+192 0.5462 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+ 192 70.5882 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region [self]
+ 48 17.6471 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles
+ 16 5.8824 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects
+ 10 3.6765 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+ 5 1.8382 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty
+ 1 0.3676 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+186 0.5292 vmlinux vmlinux unmap_vmas
+ 186 100.000 vmlinux vmlinux unmap_vmas [self]
+-------------------------------------------------------------------------------
+177 0.5036 vmlinux vmlinux find_vma
+ 177 100.000 vmlinux vmlinux find_vma [self]
+-------------------------------------------------------------------------------
+175 0.4979 vmlinux vmlinux __handle_mm_fault
+ 175 100.000 vmlinux vmlinux __handle_mm_fault [self]
+-------------------------------------------------------------------------------
+173 0.4922 vmlinux vmlinux __d_lookup
+ 173 100.000 vmlinux vmlinux __d_lookup [self]
+-------------------------------------------------------------------------------
+163 0.4637 libfb.so libfb.so fbComposite
+ 7930 83.1150 libpixman.so.0.0.0 libfb.so pixman_image_composite
+ 970 10.1666 libfb.so libfb.so image_from_pict
+ 163 1.7084 libfb.so libfb.so fbComposite [self]
+ 134 1.4045 libpixman.so.0.0.0 libfb.so pixman_image_unref
+ 132 1.3835 Xorg libfb.so miCompositeSourceValidate
+ 46 0.4821 libfb.so libfb.so .plt
+ 44 0.4612 libpixman.so.0.0.0 libfb.so .plt
+ 19 0.1991 libfb.so libfb.so __i686.get_pc_thunk.bx
+ 17 0.1782 libpixman.so.0.0.0 libfb.so pixman_region_fini
+ 11 0.1153 libpixman.so.0.0.0 libfb.so pixman_image_set_clip_region
+ 11 0.1153 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx
+ 10 0.1048 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 9 0.0943 libpixman.so.0.0.0 libfb.so pixman_compute_composite_region
+ 7 0.0734 libpixman.so.0.0.0 libfb.so pixman_image_set_repeat
+ 6 0.0629 Xorg libfb.so __i686.get_pc_thunk.bx
+ 6 0.0629 Xorg libfb.so miSpriteSourceValidate
+ 6 0.0629 libpixman.so.0.0.0 libfb.so fbCompositeSrcAdd_8888x8888mmx
+ 5 0.0524 libpixman.so.0.0.0 libfb.so pixman_region_init
+ 4 0.0419 libpixman.so.0.0.0 libfb.so pixman_image_set_filter
+ 3 0.0314 libpixman.so.0.0.0 libfb.so pixman_image_set_component_alpha
+ 2 0.0210 libpixman.so.0.0.0 libfb.so pixman_region_rectangles
+ 1 0.0105 libpixman.so.0.0.0 libfb.so pixman_have_mmx
+ 1 0.0105 libpixman.so.0.0.0 libfb.so can_get_solid
+ 1 0.0105 libpixman.so.0.0.0 libfb.so fbCompositeSrc_8888x8888mmx
+ 1 0.0105 libpixman.so.0.0.0 libfb.so fbCompositeSolidMask_nx8888x8888Cmmx
+ 1 0.0105 libpixman.so.0.0.0 libfb.so pixman_image_set_has_client_clip
+ 1 0.0105 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libfb.so (no symbols)
+-------------------------------------------------------------------------------
+ 1 0.8264 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1 0.8264 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+ 3 2.4793 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 13 10.7438 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_clip_region
+ 14 11.5702 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+ 18 14.8760 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+ 18 14.8760 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 20 16.5289 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+ 33 27.2727 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+158 0.4495 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 158 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+149 0.4239 vmlinux vmlinux __copy_to_user_ll
+ 149 100.000 vmlinux vmlinux __copy_to_user_ll [self]
+-------------------------------------------------------------------------------
+148 0.4211 bash bash (no symbols)
+ 148 100.000 bash bash (no symbols) [self]
+-------------------------------------------------------------------------------
+147 0.4182 oprofile.ko oprofile add_event_entry
+ 147 100.000 oprofile.ko oprofile add_event_entry [self]
+-------------------------------------------------------------------------------
+ 9 7.8947 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+ 30 26.3158 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+ 31 27.1930 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+ 44 38.5965 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+146 0.4154 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 146 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 10 7.6336 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+ 10 7.6336 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+ 19 14.5038 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+ 92 70.2290 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+145 0.4125 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+ 145 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 1 0.7407 Xorg Xorg miTrapezoidBounds
+ 1 0.7407 Xorg Xorg ProcRenderSetPictureFilter
+ 1 0.7407 Xorg Xorg miDestroyPicture
+ 1 0.7407 Xorg Xorg ProcRenderSetPictureTransform
+ 1 0.7407 Xorg Xorg ProcRenderFillRectangles
+ 1 0.7407 Xorg Xorg ShmDestroyPixmap
+ 1 0.7407 Xorg Xorg miComputeCompositeClip
+ 1 0.7407 Xorg Xorg miBSCheapChangeClip
+ 1 0.7407 Xorg Xorg SetClipRects
+ 1 0.7407 Xorg Xorg dixLookupDrawable
+ 1 0.7407 Xorg Xorg damageChangeGC
+ 1 0.7407 Xorg Xorg damageGlyphs
+ 1 0.7407 Xorg Xorg ProcSetClipRectangles
+ 1 0.7407 Xorg Xorg ProcCreatePixmap
+ 1 0.7407 Xorg Xorg FreeResource
+ 1 0.7407 Xorg Xorg SetPictureClipRects
+ 2 1.4815 Xorg Xorg miRegionDestroy
+ 2 1.4815 Xorg Xorg miRegionCreate
+ 2 1.4815 Xorg Xorg ProcRenderCreatePicture
+ 2 1.4815 Xorg Xorg XaceCatchDispatchProc
+ 2 1.4815 Xorg Xorg miCompositeRects
+ 2 1.4815 Xorg Xorg CreatePicture
+ 3 2.2222 Xorg Xorg miValidatePicture
+ 4 2.9630 Xorg Xorg FreePicture
+ 4 2.9630 Xorg Xorg miColorRects
+ 5 3.7037 Xorg Xorg miCompositeSourceValidate
+ 5 3.7037 Xorg Xorg _CallCallbacks
+ 5 3.7037 Xorg Xorg CallCallbacks
+ 6 4.4444 Xorg Xorg ValidateOnePicture
+ 6 4.4444 Xorg Xorg ProcRenderCompositeGlyphs
+ 6 4.4444 Xorg Xorg XaceCatchExtProc
+ 6 4.4444 Xorg Xorg Dispatch
+ 6 4.4444 Xorg Xorg SecurityLookupIDByType
+ 7 5.1852 Xorg Xorg ProcRenderDispatch
+ 7 5.1852 Xorg Xorg damageComposite
+ 8 5.9259 Xorg Xorg ValidatePicture
+ 9 6.6667 Xorg Xorg CompositePicture
+ 9 6.6667 Xorg Xorg damageReportPostOp
+ 11 8.1481 Xorg Xorg miGlyphs
+143 0.4068 Xorg Xorg __i686.get_pc_thunk.bx
+ 143 100.000 Xorg Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 32 49.2308 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+ 33 50.7692 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+138 0.3926 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 138 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt [self]
+-------------------------------------------------------------------------------
+136 0.3869 libc-2.5.so libc-2.5.so free
+ 136 51.7110 libc-2.5.so libc-2.5.so free [self]
+ 119 45.2471 libc-2.5.so libc-2.5.so _int_free
+ 8 3.0418 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 233 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+133 0.3784 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 133 54.7325 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image [self]
+ 92 37.8601 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+ 18 7.4074 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+132 0.3755 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols)
+ 132 100.000 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 10 0.1022 Xorg Xorg miGlyphs
+ 9778 99.8978 Xorg Xorg CompositePicture
+127 0.3613 Xorg Xorg damageComposite
+ 9538 97.4259 libfb.so Xorg fbComposite
+ 127 1.2972 Xorg Xorg damageComposite [self]
+ 40 0.4086 libfb.so Xorg .plt
+ 37 0.3779 Xorg Xorg damageReportPostOp
+ 14 0.1430 Xorg Xorg getDrawableDamageRef
+ 12 0.1226 libfb.so Xorg image_from_pict
+ 8 0.0817 libpixman.so.0.0.0 Xorg pixman_image_unref
+ 7 0.0715 Xorg Xorg __i686.get_pc_thunk.bx
+ 5 0.0511 Xorg Xorg miCompositeSourceValidate
+ 1 0.0102 libpixman.so.0.0.0 Xorg pixman_image_composite
+ 1 0.0102 libfb.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.8197 libc-2.5.so libc-2.5.so do_release_shlib
+ 2 1.6393 libc-2.5.so libc-2.5.so _int_realloc
+ 119 97.5410 libc-2.5.so libc-2.5.so free
+119 0.3386 libc-2.5.so libc-2.5.so _int_free
+ 119 90.1515 libc-2.5.so libc-2.5.so _int_free [self]
+ 12 9.0909 libc-2.5.so libc-2.5.so malloc_consolidate
+ 1 0.7576 libc-2.5.so libc-2.5.so .plt
+-------------------------------------------------------------------------------
+ 2 1.7241 Xorg Xorg damageGlyphs
+ 114 98.2759 Xorg Xorg miGlyphs
+116 0.3300 Xorg Xorg miGlyphExtents
+ 116 100.000 Xorg Xorg miGlyphExtents [self]
+-------------------------------------------------------------------------------
+ 1 0.0173 Xorg Xorg CompositeGlyphs
+ 5773 99.9827 Xorg Xorg damageGlyphs
+116 0.3300 Xorg Xorg miGlyphs
+ 5052 87.4957 Xorg Xorg CompositePicture
+ 180 3.1174 Xorg Xorg damagePolyFillRect
+ 116 2.0090 Xorg Xorg miGlyphs [self]
+ 114 1.9744 Xorg Xorg miGlyphExtents
+ 67 1.1604 Xorg Xorg CreatePicture
+ 62 1.0738 Xorg Xorg miModifyPixmapHeader
+ 59 1.0218 Xorg Xorg FreePicture
+ 33 0.5715 libfb.so Xorg fbCreatePixmap
+ 25 0.4330 Xorg Xorg ShmDestroyPixmap
+ 18 0.3117 Xorg Xorg ValidateGC
+ 13 0.2251 Xorg Xorg ValidatePicture
+ 11 0.1905 Xorg Xorg __i686.get_pc_thunk.bx
+ 10 0.1732 Xorg Xorg damageComposite
+ 5 0.0866 Xorg Xorg GetScratchPixmapHeader
+ 4 0.0693 Xorg Xorg GetScratchGC
+ 2 0.0346 Xorg Xorg miDestroyPictureClip
+ 2 0.0346 Xorg Xorg SetPictureToDefaults
+ 1 0.0173 Xorg Xorg AllocatePicture
+-------------------------------------------------------------------------------
+113 0.3215 vmlinux vmlinux __rmqueue
+ 113 100.000 vmlinux vmlinux __rmqueue [self]
+-------------------------------------------------------------------------------
+ 4 0.0397 Xorg Xorg damageGlyphs
+ 25 0.2481 Xorg Xorg miCompositeRects
+ 338 3.3548 Xorg Xorg ProcRenderComposite
+ 4656 46.2134 Xorg Xorg miTrapezoids
+ 5052 50.1439 Xorg Xorg miGlyphs
+106 0.3016 Xorg Xorg CompositePicture
+ 9778 97.0521 Xorg Xorg damageComposite
+ 162 1.6079 Xorg Xorg ValidatePicture
+ 106 1.0521 Xorg Xorg CompositePicture [self]
+ 9 0.0893 Xorg Xorg __i686.get_pc_thunk.bx
+ 8 0.0794 Xorg Xorg ValidateOnePicture
+ 6 0.0596 Xorg Xorg getDrawableDamageRef
+ 4 0.0397 Xorg Xorg damageReportPostOp
+ 2 0.0199 libfb.so Xorg fbComposite
+-------------------------------------------------------------------------------
+ 7 6.6038 Xorg Xorg ProcRenderCompositeGlyphs
+ 99 93.3962 Xorg Xorg FindGlyph
+106 0.3016 Xorg Xorg FindGlyphRef
+ 106 100.000 Xorg Xorg FindGlyphRef [self]
+-------------------------------------------------------------------------------
+105 0.2987 vmlinux vmlinux do_page_fault
+ 105 100.000 vmlinux vmlinux do_page_fault [self]
+-------------------------------------------------------------------------------
+102 0.2902 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols)
+ 102 100.000 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 0.3774 Xorg Xorg ProcRenderCompositeGlyphs
+ 3 1.1321 Xorg Xorg dixLookupDrawable
+ 5 1.8868 Xorg Xorg XaceCatchDispatchProc
+ 9 3.3962 Xorg Xorg main
+ 16 6.0377 Xorg Xorg SecurityLookupIDByClass
+ 36 13.5849 Xorg Xorg Dispatch
+ 71 26.7925 Xorg Xorg XaceCatchExtProc
+ 124 46.7925 Xorg Xorg SecurityLookupIDByType
+101 0.2873 Xorg Xorg XaceHook
+ 141 53.2075 Xorg Xorg CallCallbacks
+ 101 38.1132 Xorg Xorg XaceHook [self]
+ 23 8.6792 Xorg Xorg _CallCallbacks
+-------------------------------------------------------------------------------
+99 0.2817 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols)
+ 99 100.000 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols) [self]
+-------------------------------------------------------------------------------
+99 0.2817 vmlinux vmlinux release_pages
+ 99 100.000 vmlinux vmlinux release_pages [self]
+-------------------------------------------------------------------------------
+98 0.2788 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+ 98 66.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref [self]
+ 31 21.0884 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 18 12.2449 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+95 0.2703 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols)
+ 95 100.000 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+94 0.2674 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+ 233 40.8056 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+ 95 16.6375 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+ 94 16.4623 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits [self]
+ 44 7.7058 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 33 5.7793 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 32 5.6042 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+ 30 5.2539 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect
+ 10 1.7513 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+-------------------------------------------------------------------------------
+ 4 2.2222 Xorg Xorg ProcFreeGC
+ 47 26.1111 Xorg Xorg ProcFreePixmap
+ 129 71.6667 Xorg Xorg ProcRenderFreePicture
+91 0.2589 Xorg Xorg FreeResource
+ 91 50.5556 Xorg Xorg FreeResource [self]
+ 51 28.3333 Xorg Xorg FreePicture
+ 13 7.2222 Xorg Xorg Xfree
+ 12 6.6667 Xorg Xorg dixDestroyPixmap
+ 5 2.7778 Xorg Xorg Hash
+ 3 1.6667 Xorg Xorg FreeGC
+ 2 1.1111 Xorg Xorg FlushClientCaches
+ 1 0.5556 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.5556 Xorg Xorg miDestroyPicture
+ 1 0.5556 Xorg Xorg damageDestroyGC
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg damageComposite
+91 0.2589 Xorg Xorg miCompositeSourceValidate
+ 91 66.4234 Xorg Xorg miCompositeSourceValidate [self]
+ 41 29.9270 Xorg Xorg miSpriteSourceValidate
+ 5 3.6496 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so sigemptyset
+91 0.2589 libc-2.5.so libc-2.5.so memset
+ 91 100.000 libc-2.5.so libc-2.5.so memset [self]
+-------------------------------------------------------------------------------
+ 1 2.0000 libfb.so libfb.so fbRasterizeTrapezoid
+ 3 6.0000 libfb.so libfb.so fbPolyFillRect
+ 46 92.0000 libfb.so libfb.so fbComposite
+91 0.2589 libfb.so libfb.so .plt
+ 91 100.000 libfb.so libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 6 4.5455 Xorg Xorg ValidatePicture
+ 126 95.4545 Xorg Xorg ValidateOnePicture
+82 0.2333 Xorg Xorg miValidatePicture
+ 82 62.1212 Xorg Xorg miValidatePicture [self]
+ 42 31.8182 Xorg Xorg miRegionCreate
+ 3 2.2727 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 1.5152 Xorg Xorg miTranslateRegion
+ 2 1.5152 Xorg Xorg miIntersect
+ 1 0.7576 Xorg Xorg miRegionInit
+-------------------------------------------------------------------------------
+ 2 2.4691 Xorg Xorg main
+ 79 97.5309 Xorg Xorg Dispatch
+76 0.2162 Xorg Xorg ReadRequestFromClient
+ 76 93.8272 Xorg Xorg ReadRequestFromClient [self]
+ 2 2.4691 Xorg Xorg _XSERVTransRead
+ 2 2.4691 libc-2.5.so Xorg memmove
+ 1 1.2346 Xorg Xorg _XSERVTransSocketRead
+-------------------------------------------------------------------------------
+ 25 34.2466 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+ 48 65.7534 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+75 0.2134 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles
+ 75 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 23 19.1667 Xorg Xorg XaceHook
+ 97 80.8333 Xorg Xorg CallCallbacks
+71 0.2020 Xorg Xorg _CallCallbacks
+ 71 59.1667 Xorg Xorg _CallCallbacks [self]
+ 35 29.1667 Xorg Xorg SecurityCheckResourceIDAccess
+ 9 7.5000 Xorg Xorg SecurityCheckExtAccess
+ 5 4.1667 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3 4.2254 Xorg Xorg GetScratchPixmapHeader
+ 6 8.4507 Xorg Xorg damageGlyphs
+ 62 87.3239 Xorg Xorg miGlyphs
+71 0.2020 Xorg Xorg miModifyPixmapHeader
+ 71 100.000 Xorg Xorg miModifyPixmapHeader [self]
+-------------------------------------------------------------------------------
+67 0.1906 libc-2.5.so libc-2.5.so memcmp
+ 67 100.000 libc-2.5.so libc-2.5.so memcmp [self]
+-------------------------------------------------------------------------------
+64 0.1821 vmlinux vmlinux __link_path_walk
+ 64 100.000 vmlinux vmlinux __link_path_walk [self]
+-------------------------------------------------------------------------------
+63 0.1792 vmlinux vmlinux __pagevec_lru_add_active
+ 63 100.000 vmlinux vmlinux __pagevec_lru_add_active [self]
+-------------------------------------------------------------------------------
+62 0.1764 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols)
+ 62 100.000 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+62 0.1764 libm-2.5.so libm-2.5.so floor
+ 62 100.000 libm-2.5.so libm-2.5.so floor [self]
+-------------------------------------------------------------------------------
+ 60 100.000 libc-2.5.so libc-2.5.so mbrtowc
+60 0.1707 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal
+ 60 100.000 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal [self]
+-------------------------------------------------------------------------------
+60 0.1707 vmlinux vmlinux mwait_idle_with_hints
+ 60 100.000 vmlinux vmlinux mwait_idle_with_hints [self]
+-------------------------------------------------------------------------------
+57 0.1622 libnspr4.so libnspr4.so (no symbols)
+ 57 100.000 libnspr4.so libnspr4.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 18 37.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+ 30 62.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+57 0.1622 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect
+ 57 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect [self]
+-------------------------------------------------------------------------------
+57 0.1622 vmlinux vmlinux free_hot_cold_page
+ 57 100.000 vmlinux vmlinux free_hot_cold_page [self]
+-------------------------------------------------------------------------------
+ 18337 100.000 Xorg Xorg main
+56 0.1593 Xorg Xorg Dispatch
+ 14820 80.8070 Xorg Xorg XaceCatchExtProc
+ 3319 18.0971 Xorg Xorg XaceCatchDispatchProc
+ 79 0.4308 Xorg Xorg ReadRequestFromClient
+ 56 0.3053 Xorg Xorg Dispatch [self]
+ 36 0.1963 Xorg Xorg XaceHook
+ 6 0.0327 Xorg Xorg __i686.get_pc_thunk.bx
+ 5 0.0273 Xorg Xorg CallCallbacks
+ 5 0.0273 Xorg Xorg GetExtensionEntry
+ 4 0.0218 Xorg Xorg ProcRenderDispatch
+ 3 0.0164 Xorg Xorg ProcessInputEvents
+ 2 0.0109 Xorg Xorg ProcFreePixmap
+ 1 0.0055 Xorg Xorg ProcCreatePixmap
+ 1 0.0055 Xorg Xorg ProcPolySegment
+ 1 0.0055 Xorg Xorg ProcChangeGC
+ 1 0.0055 Xorg Xorg miPointerUpdateSprite
+ 1 0.0055 anon (tgid:6252 range:0xb7f41000-0xb7f42000) Xorg (no symbols)
+-------------------------------------------------------------------------------
+ 1 0.5319 Xorg Xorg CompositeRects
+ 8 4.2553 Xorg Xorg CompositePicture
+ 179 95.2128 Xorg Xorg ValidatePicture
+55 0.1565 Xorg Xorg ValidateOnePicture
+ 126 67.0213 Xorg Xorg miValidatePicture
+ 55 29.2553 Xorg Xorg ValidateOnePicture [self]
+ 6 3.1915 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.5319 Xorg Xorg miRegionCreate
+-------------------------------------------------------------------------------
+51 0.1451 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+ 51 100.000 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 0.5155 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 4 2.0619 Xorg Xorg ProcRenderTrapezoids
+ 6 3.0928 Xorg Xorg ProcRenderDispatch
+ 6 3.0928 Xorg Xorg ProcRenderComposite
+ 8 4.1237 Xorg Xorg ProcFreePixmap
+ 10 5.1546 Xorg Xorg dixLookupGC
+ 13 6.7010 Xorg Xorg ProcRenderSetPictureFilter
+ 15 7.7320 Xorg Xorg ProcRenderChangePicture
+ 19 9.7938 Xorg Xorg ProcRenderSetPictureTransform
+ 19 9.7938 Xorg Xorg ProcRenderCreatePicture
+ 21 10.8247 Xorg Xorg ProcRenderFillRectangles
+ 33 17.0103 Xorg Xorg ProcRenderFreePicture
+ 39 20.1031 Xorg Xorg ProcRenderCompositeGlyphs
+49 0.1394 Xorg Xorg SecurityLookupIDByType
+ 124 63.9175 Xorg Xorg XaceHook
+ 49 25.2577 Xorg Xorg SecurityLookupIDByType [self]
+ 11 5.6701 Xorg Xorg Hash
+ 6 3.0928 Xorg Xorg __i686.get_pc_thunk.bx
+ 4 2.0619 Xorg Xorg CallCallbacks
+-------------------------------------------------------------------------------
+48 0.1366 vmlinux vmlinux page_address
+ 48 100.000 vmlinux vmlinux page_address [self]
+-------------------------------------------------------------------------------
+ 41 100.000 Xorg Xorg miCompositeSourceValidate
+47 0.1337 Xorg Xorg miSpriteSourceValidate
+ 47 100.000 Xorg Xorg miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 31 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_clip_region
+47 0.1337 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+ 47 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 125 26.2055 libc-2.5.so libc-2.5.so qsort
+ 352 73.7945 libc-2.5.so libc-2.5.so msort_with_tmp
+46 0.1309 libc-2.5.so libc-2.5.so msort_with_tmp
+ 352 73.7945 libc-2.5.so libc-2.5.so msort_with_tmp
+ 46 9.6436 libc-2.5.so libc-2.5.so msort_with_tmp [self]
+ 40 8.3857 libc-2.5.so libc-2.5.so memcpy
+ 33 6.9182 libxul.so libc-2.5.so (no symbols)
+ 2 0.4193 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 2 0.4193 libc-2.5.so libc-2.5.so alias_compare
+ 1 0.2096 libc-2.5.so libc-2.5.so strcmp
+ 1 0.2096 libc-2.5.so libc-2.5.so mempcpy
+-------------------------------------------------------------------------------
+46 0.1309 vmlinux vmlinux lru_cache_add_active
+ 46 100.000 vmlinux vmlinux lru_cache_add_active [self]
+-------------------------------------------------------------------------------
+ 1 2.2727 libc-2.5.so libc-2.5.so malloc
+ 12 27.2727 libc-2.5.so libc-2.5.so _int_free
+ 31 70.4545 libc-2.5.so libc-2.5.so _int_malloc
+44 0.1252 libc-2.5.so libc-2.5.so malloc_consolidate
+ 44 100.000 libc-2.5.so libc-2.5.so malloc_consolidate [self]
+-------------------------------------------------------------------------------
+44 0.1252 vmlinux vmlinux page_remove_rmap
+ 44 100.000 vmlinux vmlinux page_remove_rmap [self]
+-------------------------------------------------------------------------------
+ 8 18.6047 Xorg Xorg CallCallbacks
+ 35 81.3953 Xorg Xorg _CallCallbacks
+43 0.1223 Xorg Xorg SecurityCheckResourceIDAccess
+ 43 100.000 Xorg Xorg SecurityCheckResourceIDAccess [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so mblen
+ 1 50.0000 libc-2.5.so libc-2.5.so build_wcs_buffer
+42 0.1195 libc-2.5.so libc-2.5.so mbrtowc
+ 60 55.5556 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal
+ 42 38.8889 libc-2.5.so libc-2.5.so mbrtowc [self]
+ 3 2.7778 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check
+ 2 1.8519 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 1 0.9259 libc-2.5.so libc-2.5.so __wcsmbs_load_conv
+-------------------------------------------------------------------------------
+ 1 0.6410 Xorg Xorg XaceCatchDispatchProc
+ 4 2.5641 Xorg Xorg SecurityLookupIDByType
+ 5 3.2051 Xorg Xorg Dispatch
+ 5 3.2051 Xorg Xorg XaceCatchExtProc
+ 141 90.3846 Xorg Xorg XaceHook
+40 0.1138 Xorg Xorg CallCallbacks
+ 97 62.1795 Xorg Xorg _CallCallbacks
+ 40 25.6410 Xorg Xorg CallCallbacks [self]
+ 8 5.1282 Xorg Xorg SecurityCheckResourceIDAccess
+ 6 3.8462 Xorg Xorg SecurityCheckExtAccess
+ 5 3.2051 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 0.0332 Xorg Xorg XaceCatchExtProc
+ 6018 99.9668 Xorg Xorg ProcRenderDispatch
+39 0.1110 Xorg Xorg ProcRenderCompositeGlyphs
+ 5816 96.5952 Xorg Xorg CompositeGlyphs
+ 110 1.8269 Xorg Xorg FindGlyph
+ 39 0.6477 Xorg Xorg SecurityLookupIDByType
+ 39 0.6477 Xorg Xorg ProcRenderCompositeGlyphs [self]
+ 7 0.1163 Xorg Xorg FindGlyphRef
+ 6 0.0997 Xorg Xorg __i686.get_pc_thunk.bx
+ 3 0.0498 Xorg Xorg Hash
+ 1 0.0166 Xorg Xorg XaceHook
+-------------------------------------------------------------------------------
+ 1 2.5641 Xorg Xorg miColorRects
+ 3 7.6923 Xorg Xorg damagePolyFillRect
+ 6 15.3846 Xorg Xorg CompositePicture
+ 14 35.8974 Xorg Xorg damageComposite
+ 15 38.4615 Xorg Xorg damageReportPostOp
+39 0.1110 Xorg Xorg getDrawableDamageRef
+ 39 100.000 Xorg Xorg getDrawableDamageRef [self]
+-------------------------------------------------------------------------------
+39 0.1110 vmlinux vmlinux __copy_from_user_ll
+ 39 100.000 vmlinux vmlinux __copy_from_user_ll [self]
+-------------------------------------------------------------------------------
+ 95 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+38 0.1081 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+ 38 38.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region [self]
+ 30 30.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+ 18 18.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect
+ 14 14.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+37 0.1053 vmlinux vmlinux down_read_trylock
+ 37 100.000 vmlinux vmlinux down_read_trylock [self]
+-------------------------------------------------------------------------------
+36 0.1024 vmlinux vmlinux timer_interrupt
+ 36 100.000 vmlinux vmlinux timer_interrupt [self]
+-------------------------------------------------------------------------------
+ 1 5.5556 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 2 11.1111 libc-2.5.so libc-2.5.so msort_with_tmp
+ 2 11.1111 libc-2.5.so libc-2.5.so mbrtowc
+ 5 27.7778 libc-2.5.so libc-2.5.so malloc
+ 8 44.4444 libc-2.5.so libc-2.5.so free
+35 0.0996 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 35 100.000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+35 0.0996 oprofile.ko oprofile add_sample_entry
+ 35 100.000 oprofile.ko oprofile add_sample_entry [self]
+-------------------------------------------------------------------------------
+34 0.0967 vmlinux vmlinux error_code
+ 34 100.000 vmlinux vmlinux error_code [self]
+-------------------------------------------------------------------------------
+ 1 3.0303 Xorg Xorg PictureFindFilter
+ 1 3.0303 Xorg Xorg SetPictureToDefaults
+ 31 93.9394 Xorg Xorg PictureGetFilterId
+33 0.0939 Xorg Xorg CompareISOLatin1Lowered
+ 33 100.000 Xorg Xorg CompareISOLatin1Lowered [self]
+-------------------------------------------------------------------------------
+ 1 2.4390 Xorg Xorg ProcChangeGC
+ 1 2.4390 Xorg Xorg miColorRects
+ 39 95.1220 Xorg Xorg ChangeGC
+33 0.0939 Xorg Xorg dixChangeGC
+ 33 80.4878 Xorg Xorg dixChangeGC [self]
+ 6 14.6341 Xorg Xorg damageChangeGC
+ 2 4.8780 Xorg Xorg miBSCheapChangeGC
+-------------------------------------------------------------------------------
+33 0.0939 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_clip_region
+ 33 42.8571 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_clip_region [self]
+ 31 40.2597 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+ 13 16.8831 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 0.4464 Xorg Xorg ProcRenderFillRectangles
+ 2 0.8929 Xorg Xorg CompositeTrapezoids
+ 13 5.8036 Xorg Xorg miGlyphs
+ 14 6.2500 Xorg Xorg CompositeGlyphs
+ 32 14.2857 Xorg Xorg CompositeRects
+ 162 72.3214 Xorg Xorg CompositePicture
+31 0.0882 Xorg Xorg ValidatePicture
+ 179 79.9107 Xorg Xorg ValidateOnePicture
+ 31 13.8393 Xorg Xorg ValidatePicture [self]
+ 8 3.5714 Xorg Xorg __i686.get_pc_thunk.bx
+ 6 2.6786 Xorg Xorg miValidatePicture
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_find_locale
+31 0.0882 libc-2.5.so libc-2.5.so strlen
+ 31 100.000 libc-2.5.so libc-2.5.so strlen [self]
+-------------------------------------------------------------------------------
+30 0.0854 libfb.so libfb.so fbValidateGC
+ 40 54.0541 Xorg libfb.so miComputeCompositeClip
+ 30 40.5405 libfb.so libfb.so fbValidateGC [self]
+ 3 4.0541 Xorg libfb.so miTranslateRegion
+ 1 1.3514 Xorg libfb.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+30 0.0854 vmlinux vmlinux system_call
+ 30 100.000 vmlinux vmlinux system_call [self]
+-------------------------------------------------------------------------------
+ 2 1.1976 Xorg Xorg ProcRenderDispatch
+ 3 1.7964 Xorg Xorg miCreateAlphaPicture
+ 5 2.9940 Xorg Xorg miCompositeRects
+ 67 40.1198 Xorg Xorg miGlyphs
+ 90 53.8922 Xorg Xorg ProcRenderCreatePicture
+29 0.0825 Xorg Xorg CreatePicture
+ 72 43.1138 Xorg Xorg AllocatePicture
+ 48 28.7425 Xorg Xorg SetPictureToDefaults
+ 29 17.3653 Xorg Xorg CreatePicture [self]
+ 8 4.7904 Xorg Xorg PictureGetFilterId
+ 5 2.9940 Xorg Xorg ChangePicture
+ 3 1.7964 Xorg Xorg miChangePicture
+ 2 1.1976 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+29 0.0825 libgcc_s.so.1 libgcc_s.so.1 (no symbols)
+ 29 100.000 libgcc_s.so.1 libgcc_s.so.1 (no symbols) [self]
+-------------------------------------------------------------------------------
+28 0.0797 vmlinux vmlinux __alloc_pages
+ 28 100.000 vmlinux vmlinux __alloc_pages [self]
+-------------------------------------------------------------------------------
+ 27 100.000 libfb.so libfb.so fbPolySegment
+27 0.0768 libfb.so libfb.so fbPolySegment32
+ 27 100.000 libfb.so libfb.so fbPolySegment32 [self]
+-------------------------------------------------------------------------------
+ 11 40.7407 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+ 16 59.2593 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+27 0.0768 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects
+ 27 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects [self]
+-------------------------------------------------------------------------------
+ 26 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+27 0.0768 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+ 27 100.000 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt [self]
+-------------------------------------------------------------------------------
+27 0.0768 vmlinux vmlinux _atomic_dec_and_lock
+ 27 100.000 vmlinux vmlinux _atomic_dec_and_lock [self]
+-------------------------------------------------------------------------------
+27 0.0768 vmlinux vmlinux restore_nocheck
+ 27 100.000 vmlinux vmlinux restore_nocheck [self]
+-------------------------------------------------------------------------------
+26 0.0740 libfb.so libfb.so fbPolyFillRect
+ 2028 98.4466 libfb.so libfb.so fbFill
+ 26 1.2621 libfb.so libfb.so fbPolyFillRect [self]
+ 3 0.1456 libfb.so libfb.so .plt
+ 1 0.0485 libpixman.so.0.0.0 libfb.so pixman_fill
+ 1 0.0485 libfb.so libfb.so __i686.get_pc_thunk.bx
+ 1 0.0485 libfb.so libfb.so fbSolid
+-------------------------------------------------------------------------------
+26 0.0740 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_filter
+ 26 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_filter [self]
+-------------------------------------------------------------------------------
+ 1 4.0000 Xorg Xorg ProcRenderDispatch
+ 2 8.0000 Xorg Xorg ProcRenderChangePicture
+ 7 28.0000 Xorg Xorg ProcRenderCreatePicture
+ 15 60.0000 Xorg Xorg miRenderColorToPixel
+25 0.0711 Xorg Xorg Ones
+ 25 100.000 Xorg Xorg Ones [self]
+-------------------------------------------------------------------------------
+25 0.0711 vmlinux vmlinux find_get_page
+ 25 100.000 vmlinux vmlinux find_get_page [self]
+-------------------------------------------------------------------------------
+ 1 2.0833 Xorg Xorg damagePolySegment
+ 2 4.1667 Xorg Xorg damagePolyFillRect
+ 2 4.1667 Xorg Xorg damageCopyArea
+ 2 4.1667 Xorg Xorg damageGlyphs
+ 4 8.3333 Xorg Xorg CompositePicture
+ 37 77.0833 Xorg Xorg damageComposite
+24 0.0683 Xorg Xorg damageReportPostOp
+ 24 50.0000 Xorg Xorg damageReportPostOp [self]
+ 15 31.2500 Xorg Xorg getDrawableDamageRef
+ 9 18.7500 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 1 4.7619 libfb.so libfb.so fbPolyFillRect
+ 1 4.7619 libfb.so libfb.so fbPolySegment
+ 19 90.4762 libfb.so libfb.so fbComposite
+24 0.0683 libfb.so libfb.so __i686.get_pc_thunk.bx
+ 24 100.000 libfb.so libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+24 0.0683 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock
+ 24 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock [self]
+-------------------------------------------------------------------------------
+24 0.0683 vmlinux vmlinux kmem_cache_free
+ 24 100.000 vmlinux vmlinux kmem_cache_free [self]
+-------------------------------------------------------------------------------
+24 0.0683 vmlinux vmlinux up_read
+ 24 100.000 vmlinux vmlinux up_read [self]
+-------------------------------------------------------------------------------
+ 2028 100.000 libfb.so libfb.so fbPolyFillRect
+23 0.0654 libfb.so libfb.so fbFill
+ 1975 97.1949 libpixman.so.0.0.0 libfb.so pixman_fill
+ 23 1.1319 libfb.so libfb.so fbFill [self]
+ 18 0.8858 libfb.so libfb.so fbSolid
+ 8 0.3937 libpixman.so.0.0.0 libfb.so pixman_fill_mmx
+ 5 0.2461 libpixman.so.0.0.0 libfb.so pixman_have_mmx
+ 2 0.0984 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx
+ 1 0.0492 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libfb.so (no symbols)
+-------------------------------------------------------------------------------
+23 0.0654 vmlinux vmlinux __find_get_block
+ 23 100.000 vmlinux vmlinux __find_get_block [self]
+-------------------------------------------------------------------------------
+23 0.0654 vmlinux vmlinux do_wp_page
+ 23 100.000 vmlinux vmlinux do_wp_page [self]
+-------------------------------------------------------------------------------
+23 0.0654 vmlinux vmlinux free_pages_bulk
+ 23 100.000 vmlinux vmlinux free_pages_bulk [self]
+-------------------------------------------------------------------------------
+23 0.0654 vmlinux vmlinux zone_watermark_ok
+ 23 100.000 vmlinux vmlinux zone_watermark_ok [self]
+-------------------------------------------------------------------------------
+ 6 27.2727 Xorg Xorg miTrapezoidBounds
+ 16 72.7273 Xorg Xorg miLineFixedX
+22 0.0626 Xorg Xorg __divdi3
+ 22 100.000 Xorg Xorg __divdi3 [self]
+-------------------------------------------------------------------------------
+22 0.0626 jbd.ko jbd journal_add_journal_head
+ 22 100.000 jbd.ko jbd journal_add_journal_head [self]
+-------------------------------------------------------------------------------
+22 0.0626 libc-2.5.so libc-2.5.so memmove
+ 22 100.000 libc-2.5.so libc-2.5.so memmove [self]
+-------------------------------------------------------------------------------
+ 3 18.7500 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_fill
+ 13 81.2500 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+22 0.0626 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_have_mmx
+ 22 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_have_mmx [self]
+-------------------------------------------------------------------------------
+ 4 0.0270 Xorg Xorg main
+ 14820 99.9730 Xorg Xorg Dispatch
+21 0.0597 Xorg Xorg XaceCatchExtProc
+ 14681 99.0220 Xorg Xorg ProcRenderDispatch
+ 71 0.4789 Xorg Xorg XaceHook
+ 21 0.1416 Xorg Xorg XaceCatchExtProc [self]
+ 8 0.0540 Xorg Xorg GetExtensionEntry
+ 6 0.0405 Xorg Xorg __i686.get_pc_thunk.bx
+ 6 0.0405 Xorg Xorg ProcRenderSetPictureFilter
+ 6 0.0405 Xorg Xorg ProcRenderFreePicture
+ 5 0.0337 Xorg Xorg CallCallbacks
+ 5 0.0337 Xorg Xorg ProcRenderSetPictureTransform
+ 4 0.0270 Xorg Xorg ProcRenderChangePicture
+ 3 0.0202 Xorg Xorg __i686.get_pc_thunk.cx
+ 3 0.0202 Xorg Xorg ProcRenderFillRectangles
+ 3 0.0202 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 2 0.0135 Xorg Xorg ProcRenderCompositeGlyphs
+ 2 0.0135 Xorg Xorg ProcRenderCreatePicture
+-------------------------------------------------------------------------------
+ 1 1.9608 Xorg Xorg dixDestroyPixmap
+ 4 7.8431 Xorg Xorg FreePicture
+ 46 90.1961 Xorg Xorg ShmDestroyPixmap
+21 0.0597 Xorg Xorg damageDestroyPixmap
+ 29 56.8627 libfb.so Xorg fbDestroyPixmap
+ 21 41.1765 Xorg Xorg damageDestroyPixmap [self]
+ 1 1.9608 libfb.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3271 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+21 0.0597 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+ 1603 49.0064 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+ 1166 35.6466 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+ 476 14.5521 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+ 21 0.6420 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general [self]
+ 1 0.0306 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.cx
+ 1 0.0306 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 0.0306 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1
+ 1 0.0306 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8
+ 1 0.0306 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchSolid
+-------------------------------------------------------------------------------
+20 0.0569 ext3.ko ext3 ext3_mark_iloc_dirty
+ 20 100.000 ext3.ko ext3 ext3_mark_iloc_dirty [self]
+-------------------------------------------------------------------------------
+ 2 1.6260 Xorg Xorg miCompositeRects
+ 2 1.6260 Xorg Xorg damageGlyphs
+ 3 2.4390 Xorg Xorg ProcRenderFreePicture
+ 6 4.8780 Xorg Xorg miTrapezoids
+ 51 41.4634 Xorg Xorg FreeResource
+ 59 47.9675 Xorg Xorg miGlyphs
+19 0.0541 Xorg Xorg FreePicture
+ 30 24.3902 Xorg Xorg ShmDestroyPixmap
+ 30 24.3902 Xorg Xorg miDestroyPicture
+ 30 24.3902 Xorg Xorg Xfree
+ 19 15.4472 Xorg Xorg FreePicture [self]
+ 4 3.2520 Xorg Xorg __i686.get_pc_thunk.bx
+ 4 3.2520 Xorg Xorg damageDestroyPixmap
+ 3 2.4390 Xorg Xorg miDestroyPictureClip
+ 2 1.6260 Xorg Xorg miRegionDestroy
+ 1 0.8130 libc-2.5.so Xorg free
+-------------------------------------------------------------------------------
+ 3 15.7895 Xorg Xorg ProcRenderCompositeGlyphs
+ 5 26.3158 Xorg Xorg FreeResource
+ 11 57.8947 Xorg Xorg SecurityLookupIDByType
+19 0.0541 Xorg Xorg Hash
+ 19 100.000 Xorg Xorg Hash [self]
+-------------------------------------------------------------------------------
+ 1 5.2632 libfb.so libfb.so fbPolyFillRect
+ 18 94.7368 libfb.so libfb.so fbFill
+19 0.0541 libfb.so libfb.so fbSolid
+ 19 100.000 libfb.so libfb.so fbSolid [self]
+-------------------------------------------------------------------------------
+19 0.0541 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect
+ 19 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+19 0.0541 vmlinux vmlinux memcmp
+ 19 100.000 vmlinux vmlinux memcmp [self]
+-------------------------------------------------------------------------------
+18 0.0512 jbd.ko jbd do_get_write_access
+ 18 100.000 jbd.ko jbd do_get_write_access [self]
+-------------------------------------------------------------------------------
+18 0.0512 jbd.ko jbd journal_dirty_metadata
+ 18 100.000 jbd.ko jbd journal_dirty_metadata [self]
+-------------------------------------------------------------------------------
+ 1 3.5714 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 27 96.4286 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+18 0.0512 ld-2.5.so ld-2.5.so do_lookup_x
+ 18 64.2857 ld-2.5.so ld-2.5.so do_lookup_x [self]
+ 8 28.5714 ld-2.5.so ld-2.5.so check_match.7793
+ 1 3.5714 ld-2.5.so ld-2.5.so strcmp
+ 1 3.5714 ld-2.5.so ld-2.5.so _dl_name_match_p
+-------------------------------------------------------------------------------
+ 4 12.9032 Xorg Xorg miGlyphs
+ 27 87.0968 Xorg Xorg miColorRects
+17 0.0484 Xorg Xorg GetScratchGC
+ 17 54.8387 Xorg Xorg GetScratchGC [self]
+ 13 41.9355 Xorg Xorg damageChangeClip
+ 1 3.2258 Xorg Xorg miBSCheapChangeClip
+-------------------------------------------------------------------------------
+ 1 1.4925 Xorg Xorg damageGlyphs
+ 11 16.4179 Xorg Xorg dixDestroyPixmap
+ 25 37.3134 Xorg Xorg miGlyphs
+ 30 44.7761 Xorg Xorg FreePicture
+17 0.0484 Xorg Xorg ShmDestroyPixmap
+ 46 68.6567 Xorg Xorg damageDestroyPixmap
+ 17 25.3731 Xorg Xorg ShmDestroyPixmap [self]
+ 3 4.4776 libfb.so Xorg fbDestroyPixmap
+ 1 1.4925 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+17 0.0484 libc-2.5.so libc-2.5.so strstr
+ 17 100.000 libc-2.5.so libc-2.5.so strstr [self]
+-------------------------------------------------------------------------------
+ 5 4.3478 Xorg Xorg ProcRenderDispatch
+ 110 95.6522 Xorg Xorg ProcRenderCompositeGlyphs
+16 0.0455 Xorg Xorg FindGlyph
+ 99 86.0870 Xorg Xorg FindGlyphRef
+ 16 13.9130 Xorg Xorg FindGlyph [self]
+-------------------------------------------------------------------------------
+ 8 17.0213 Xorg Xorg CreatePicture
+ 9 19.1489 Xorg Xorg PictureFindFilter
+ 30 63.8298 Xorg Xorg SetPictureToDefaults
+16 0.0455 Xorg Xorg PictureGetFilterId
+ 31 65.9574 Xorg Xorg CompareISOLatin1Lowered
+ 16 34.0426 Xorg Xorg PictureGetFilterId [self]
+-------------------------------------------------------------------------------
+ 6 11.3208 Xorg Xorg XaceCatchExtProc
+ 47 88.6792 Xorg Xorg ProcRenderDispatch
+16 0.0455 Xorg Xorg ProcRenderSetPictureFilter
+ 23 43.3962 Xorg Xorg SetPictureFilter
+ 16 30.1887 Xorg Xorg ProcRenderSetPictureFilter [self]
+ 13 24.5283 Xorg Xorg SecurityLookupIDByType
+ 1 1.8868 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 16 100.000 libc-2.5.so libc-2.5.so ptmalloc_init
+16 0.0455 libc-2.5.so libc-2.5.so _dl_addr
+ 16 100.000 libc-2.5.so libc-2.5.so _dl_addr [self]
+-------------------------------------------------------------------------------
+ 1 6.2500 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 5 31.2500 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 10 62.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+16 0.0455 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+ 16 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3 [self]
+-------------------------------------------------------------------------------
+16 0.0455 vmlinux vmlinux __dec_zone_page_state
+ 16 100.000 vmlinux vmlinux __dec_zone_page_state [self]
+-------------------------------------------------------------------------------
+15 0.0427 Xorg Xorg AllocatePixmap
+ 32 66.6667 Xorg Xorg Xalloc
+ 15 31.2500 Xorg Xorg AllocatePixmap [self]
+ 1 2.0833 libc-2.5.so Xorg malloc
+-------------------------------------------------------------------------------
+ 6 40.0000 Xorg Xorg CallCallbacks
+ 9 60.0000 Xorg Xorg _CallCallbacks
+15 0.0427 Xorg Xorg SecurityCheckExtAccess
+ 15 100.000 Xorg Xorg SecurityCheckExtAccess [self]
+-------------------------------------------------------------------------------
+15 0.0427 vmlinux vmlinux __copy_from_user_ll_nozero
+ 15 100.000 vmlinux vmlinux __copy_from_user_ll_nozero [self]
+-------------------------------------------------------------------------------
+15 0.0427 vmlinux vmlinux do_path_lookup
+ 15 100.000 vmlinux vmlinux do_path_lookup [self]
+-------------------------------------------------------------------------------
+15 0.0427 vmlinux vmlinux kmem_cache_alloc
+ 15 100.000 vmlinux vmlinux kmem_cache_alloc [self]
+-------------------------------------------------------------------------------
+15 0.0427 vmlinux vmlinux resume_userspace
+ 15 100.000 vmlinux vmlinux resume_userspace [self]
+-------------------------------------------------------------------------------
+ 5 35.7143 Xorg Xorg CreatePicture
+ 9 64.2857 Xorg Xorg ProcRenderChangePicture
+14 0.0398 Xorg Xorg ChangePicture
+ 14 100.000 Xorg Xorg ChangePicture [self]
+-------------------------------------------------------------------------------
+14 0.0398 Xorg Xorg miComputeCompositeClip
+ 14 35.0000 Xorg Xorg miComputeCompositeClip [self]
+ 11 27.5000 Xorg Xorg miIntersect
+ 7 17.5000 Xorg Xorg miTranslateRegion
+ 6 15.0000 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 1 2.5000 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 2.5000 Xorg Xorg miRegionCreate
+-------------------------------------------------------------------------------
+ 4 13.7931 Xorg Xorg miCompositeRects
+ 25 86.2069 Xorg Xorg miColorRects
+14 0.0398 Xorg Xorg miRenderColorToPixel
+ 15 51.7241 Xorg Xorg Ones
+ 14 48.2759 Xorg Xorg miRenderColorToPixel [self]
+-------------------------------------------------------------------------------
+14 0.0398 vmlinux vmlinux __inc_zone_state
+ 14 100.000 vmlinux vmlinux __inc_zone_state [self]
+-------------------------------------------------------------------------------
+14 0.0398 vmlinux vmlinux cond_resched
+ 14 100.000 vmlinux vmlinux cond_resched [self]
+-------------------------------------------------------------------------------
+ 5 38.4615 Xorg Xorg Dispatch
+ 8 61.5385 Xorg Xorg XaceCatchExtProc
+13 0.0370 Xorg Xorg GetExtensionEntry
+ 13 100.000 Xorg Xorg GetExtensionEntry [self]
+-------------------------------------------------------------------------------
+ 1 1.6667 Xorg Xorg Dispatch
+ 59 98.3333 Xorg Xorg XaceCatchDispatchProc
+13 0.0370 Xorg Xorg ProcCreatePixmap
+ 27 45.0000 libfb.so Xorg fbCreatePixmap
+ 13 21.6667 Xorg Xorg ProcCreatePixmap [self]
+ 8 13.3333 Xorg Xorg dixLookupDrawable
+ 6 10.0000 Xorg Xorg AddResource
+ 4 6.6667 Xorg Xorg LegalNewID
+ 1 1.6667 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 1.6667 libfb.so Xorg fbCreatePixmapBpp
+-------------------------------------------------------------------------------
+ 2 3.7736 Xorg Xorg miGlyphs
+ 3 5.6604 Xorg Xorg ProcRenderCreatePicture
+ 48 90.5660 Xorg Xorg CreatePicture
+13 0.0370 Xorg Xorg SetPictureToDefaults
+ 30 56.6038 Xorg Xorg PictureGetFilterId
+ 13 24.5283 Xorg Xorg SetPictureToDefaults [self]
+ 8 15.0943 libc-2.5.so Xorg strlen
+ 1 1.8868 Xorg Xorg .plt
+ 1 1.8868 Xorg Xorg CompareISOLatin1Lowered
+-------------------------------------------------------------------------------
+13 0.0370 jbd.ko jbd journal_cancel_revoke
+ 13 100.000 jbd.ko jbd journal_cancel_revoke [self]
+-------------------------------------------------------------------------------
+13 0.0370 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_component_alpha
+ 13 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_component_alpha [self]
+-------------------------------------------------------------------------------
+ 5 38.4615 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+ 8 61.5385 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+13 0.0370 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty
+ 13 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty [self]
+-------------------------------------------------------------------------------
+13 0.0370 sysprof_module sysprof_module (no symbols)
+ 13 100.000 sysprof_module sysprof_module (no symbols) [self]
+-------------------------------------------------------------------------------
+13 0.0370 vmlinux vmlinux __page_set_anon_rmap
+ 13 100.000 vmlinux vmlinux __page_set_anon_rmap [self]
+-------------------------------------------------------------------------------
+13 0.0370 vmlinux vmlinux block_read_full_page
+ 13 100.000 vmlinux vmlinux block_read_full_page [self]
+-------------------------------------------------------------------------------
+13 0.0370 vmlinux vmlinux strncpy_from_user
+ 13 100.000 vmlinux vmlinux strncpy_from_user [self]
+-------------------------------------------------------------------------------
+13 0.0370 vmlinux vmlinux unlock_buffer
+ 13 100.000 vmlinux vmlinux unlock_buffer [self]
+-------------------------------------------------------------------------------
+ 1 1.3699 Xorg Xorg miGlyphs
+ 72 98.6301 Xorg Xorg CreatePicture
+12 0.0341 Xorg Xorg AllocatePicture
+ 60 82.1918 Xorg Xorg Xalloc
+ 12 16.4384 Xorg Xorg AllocatePicture [self]
+ 1 1.3699 Xorg Xorg .plt
+-------------------------------------------------------------------------------
+ 5 0.1504 Xorg Xorg main
+ 3319 99.8496 Xorg Xorg Dispatch
+12 0.0341 Xorg Xorg XaceCatchDispatchProc
+ 3039 91.4260 Xorg Xorg ProcCopyArea
+ 66 1.9856 Xorg Xorg ProcFreePixmap
+ 59 1.7750 Xorg Xorg ProcCreatePixmap
+ 45 1.3538 Xorg Xorg ProcPolyFillRectangle
+ 41 1.2335 Xorg Xorg ProcPolySegment
+ 20 0.6017 Xorg Xorg ProcSetClipRectangles
+ 12 0.3610 Xorg Xorg XaceCatchDispatchProc [self]
+ 10 0.3008 Xorg Xorg ProcChangeGC
+ 7 0.2106 Xorg Xorg ProcCreateGC
+ 5 0.1504 Xorg Xorg XaceHook
+ 4 0.1203 Xorg Xorg ProcFreeGC
+ 3 0.0903 Xorg Xorg LegalNewID
+ 3 0.0903 libfb.so Xorg fbCreatePixmap
+ 3 0.0903 Xorg Xorg dixLookupDrawable
+ 2 0.0602 Xorg Xorg damagePolySegment
+ 2 0.0602 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.0301 Xorg Xorg damageCopyArea
+ 1 0.0301 Xorg Xorg dixLookupGC
+ 1 0.0301 Xorg Xorg CallCallbacks
+-------------------------------------------------------------------------------
+ 1 0.9615 Xorg Xorg miColorRects
+ 103 99.0385 Xorg Xorg ValidateGC
+12 0.0341 Xorg Xorg damageValidateGC
+ 89 85.5769 Xorg Xorg miBSCheapValidateGC
+ 12 11.5385 Xorg Xorg damageValidateGC [self]
+ 3 2.8846 libfb.so Xorg fbValidateGC
+-------------------------------------------------------------------------------
+12 0.0341 ext3.ko ext3 ext3_new_inode
+ 12 100.000 ext3.ko ext3 ext3_new_inode [self]
+-------------------------------------------------------------------------------
+12 0.0341 vmlinux vmlinux notifier_call_chain
+ 12 100.000 vmlinux vmlinux notifier_call_chain [self]
+-------------------------------------------------------------------------------
+12 0.0341 vmlinux vmlinux unix_stream_recvmsg
+ 12 100.000 vmlinux vmlinux unix_stream_recvmsg [self]
+-------------------------------------------------------------------------------
+ 3 27.2727 Xorg Xorg XaceCatchDispatchProc
+ 4 36.3636 Xorg Xorg ProcCreatePixmap
+ 4 36.3636 Xorg Xorg ProcRenderCreatePicture
+11 0.0313 Xorg Xorg LegalNewID
+ 11 100.000 Xorg Xorg LegalNewID [self]
+-------------------------------------------------------------------------------
+ 2 1.1429 Xorg Xorg XaceCatchExtProc
+ 173 98.8571 Xorg Xorg ProcRenderDispatch
+11 0.0313 Xorg Xorg ProcRenderCreatePicture
+ 90 51.4286 Xorg Xorg CreatePicture
+ 20 11.4286 Xorg Xorg dixLookupDrawable
+ 19 10.8571 Xorg Xorg SecurityLookupIDByType
+ 14 8.0000 Xorg Xorg AddResource
+ 11 6.2857 Xorg Xorg ProcRenderCreatePicture [self]
+ 7 4.0000 Xorg Xorg Ones
+ 4 2.2857 Xorg Xorg LegalNewID
+ 4 2.2857 Xorg Xorg miCreatePicture
+ 3 1.7143 Xorg Xorg SetPictureToDefaults
+ 2 1.1429 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.5714 Xorg Xorg SecurityLookupIDByClass
+-------------------------------------------------------------------------------
+ 3 0.1553 Xorg Xorg XaceCatchExtProc
+ 1929 99.8447 Xorg Xorg ProcRenderDispatch
+11 0.0313 Xorg Xorg ProcRenderFillRectangles
+ 1897 98.1376 Xorg Xorg CompositeRects
+ 21 1.0864 Xorg Xorg SecurityLookupIDByType
+ 11 0.5691 Xorg Xorg ProcRenderFillRectangles [self]
+ 1 0.0517 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.0517 Xorg Xorg miCompositeRects
+ 1 0.0517 Xorg Xorg ValidatePicture
+ 1 0.0517 Xorg Xorg PictOpValid
+-------------------------------------------------------------------------------
+ 2 8.0000 Xorg Xorg ProcRenderDispatch
+ 23 92.0000 Xorg Xorg ProcRenderSetPictureFilter
+11 0.0313 Xorg Xorg SetPictureFilter
+ 14 56.0000 Xorg Xorg PictureFindFilter
+ 11 44.0000 Xorg Xorg SetPictureFilter [self]
+-------------------------------------------------------------------------------
+ 3 2.0979 Xorg Xorg AllocateGC
+ 12 8.3916 Xorg Xorg AddResource
+ 32 22.3776 Xorg Xorg AllocatePixmap
+ 36 25.1748 Xorg Xorg miRegionCreate
+ 60 41.9580 Xorg Xorg AllocatePicture
+11 0.0313 Xorg Xorg Xalloc
+ 126 87.5000 libc-2.5.so Xorg malloc
+ 11 7.6389 Xorg Xorg Xalloc [self]
+ 6 4.1667 libc-2.5.so Xorg _int_malloc
+ 1 0.6944 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+11 0.0313 jbd.ko jbd journal_put_journal_head
+ 11 100.000 jbd.ko jbd journal_put_journal_head [self]
+-------------------------------------------------------------------------------
+ 5 12.8205 ld-2.5.so ld-2.5.so dl_open_worker
+ 34 87.1795 ld-2.5.so ld-2.5.so dl_main
+11 0.0313 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 27 69.2308 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 11 28.2051 ld-2.5.so ld-2.5.so _dl_relocate_object [self]
+ 1 2.5641 ld-2.5.so ld-2.5.so do_lookup_x
+-------------------------------------------------------------------------------
+11 0.0313 libc-2.5.so libc-2.5.so mkdir
+ 11 100.000 libc-2.5.so libc-2.5.so mkdir [self]
+-------------------------------------------------------------------------------
+11 0.0313 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_repeat
+ 11 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_repeat [self]
+-------------------------------------------------------------------------------
+11 0.0313 vmlinux vmlinux apic_timer_interrupt
+ 11 100.000 vmlinux vmlinux apic_timer_interrupt [self]
+-------------------------------------------------------------------------------
+11 0.0313 vmlinux vmlinux fget_light
+ 11 100.000 vmlinux vmlinux fget_light [self]
+-------------------------------------------------------------------------------
+ 1 3.0303 Xorg Xorg ProcPolySegment
+ 1 3.0303 Xorg Xorg ProcCreateGC
+ 3 9.0909 Xorg Xorg XaceCatchDispatchProc
+ 8 24.2424 Xorg Xorg ProcCreatePixmap
+ 20 60.6061 Xorg Xorg ProcRenderCreatePicture
+10 0.0285 Xorg Xorg dixLookupDrawable
+ 19 57.5758 Xorg Xorg SecurityLookupIDByClass
+ 10 30.3030 Xorg Xorg dixLookupDrawable [self]
+ 3 9.0909 Xorg Xorg XaceHook
+ 1 3.0303 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+10 0.0285 jbd.ko jbd __journal_file_buffer
+ 10 100.000 jbd.ko jbd __journal_file_buffer [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 ld-2.5.so ld-2.5.so do_lookup_x
+ 4 40.0000 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 5 50.0000 ld-2.5.so ld-2.5.so check_match.7793
+10 0.0285 ld-2.5.so ld-2.5.so strcmp
+ 10 100.000 ld-2.5.so ld-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+10 0.0285 vmlinux vmlinux __follow_mount
+ 10 100.000 vmlinux vmlinux __follow_mount [self]
+-------------------------------------------------------------------------------
+10 0.0285 vmlinux vmlinux do_lookup
+ 10 100.000 vmlinux vmlinux do_lookup [self]
+-------------------------------------------------------------------------------
+10 0.0285 vmlinux vmlinux ret_from_exception
+ 10 100.000 vmlinux vmlinux ret_from_exception [self]
+-------------------------------------------------------------------------------
+10 0.0285 vmlinux vmlinux vm_normal_page
+ 10 100.000 vmlinux vmlinux vm_normal_page [self]
+-------------------------------------------------------------------------------
+ 1 0.0482 Xorg Xorg CompositeRects
+ 3 0.1446 Xorg Xorg miCompositeRects
+ 39 1.8795 Xorg Xorg ProcPolyFillRectangle
+ 180 8.6747 Xorg Xorg miGlyphs
+ 260 12.5301 Xorg Xorg miCreateAlphaPicture
+ 1592 76.7229 Xorg Xorg miColorRects
+9 0.0256 Xorg Xorg damagePolyFillRect
+ 2057 99.1325 libfb.so Xorg fbPolyFillRect
+ 9 0.4337 Xorg Xorg damagePolyFillRect [self]
+ 4 0.1928 libfb.so Xorg fbFill
+ 3 0.1446 Xorg Xorg getDrawableDamageRef
+ 2 0.0964 Xorg Xorg damageReportPostOp
+-------------------------------------------------------------------------------
+ 1 4.0000 Xorg Xorg miTrapezoids
+ 24 96.0000 Xorg Xorg miTrapezoidBounds
+9 0.0256 Xorg Xorg miLineFixedX
+ 16 64.0000 Xorg Xorg __divdi3
+ 9 36.0000 Xorg Xorg miLineFixedX [self]
+-------------------------------------------------------------------------------
+ 10 27.0270 ld-2.5.so ld-2.5.so _dl_fixup
+ 27 72.9730 ld-2.5.so ld-2.5.so _dl_relocate_object
+9 0.0256 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 27 72.9730 ld-2.5.so ld-2.5.so do_lookup_x
+ 9 24.3243 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x [self]
+ 1 2.7027 ld-2.5.so ld-2.5.so check_match.7793
+-------------------------------------------------------------------------------
+ 55 100.000 libfb.so libfb.so fbCreatePixmap
+9 0.0256 libfb.so libfb.so fbCreatePixmapBpp
+ 45 80.3571 Xorg libfb.so AllocatePixmap
+ 9 16.0714 libfb.so libfb.so fbCreatePixmapBpp [self]
+ 1 1.7857 Xorg libfb.so __i686.get_pc_thunk.bx
+ 1 1.7857 Xorg libfb.so Xalloc
+-------------------------------------------------------------------------------
+ 9 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+9 0.0256 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+ 9 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y [self]
+-------------------------------------------------------------------------------
+9 0.0256 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols)
+ 9 100.000 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols) [self]
+-------------------------------------------------------------------------------
+9 0.0256 vmlinux vmlinux dput
+ 9 100.000 vmlinux vmlinux dput [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 Xorg Xorg AddResource
+ 1 12.5000 Xorg Xorg miRegionDestroy
+ 1 12.5000 Xorg Xorg AllocatePicture
+ 1 12.5000 Xorg Xorg SetPictureToDefaults
+ 2 25.0000 Xorg Xorg miRegionCreate
+ 2 25.0000 Xorg Xorg miDestroyPicture
+8 0.0228 Xorg Xorg .plt
+ 8 100.000 Xorg Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 0.8929 Xorg Xorg damageGlyphs
+ 2 1.7857 Xorg Xorg ProcPolyFillRectangle
+ 2 1.7857 Xorg Xorg ProcCopyArea
+ 2 1.7857 Xorg Xorg miCreateAlphaPicture
+ 4 3.5714 Xorg Xorg miCompositeRects
+ 6 5.3571 Xorg Xorg ProcPolySegment
+ 18 16.0714 Xorg Xorg miGlyphs
+ 77 68.7500 Xorg Xorg miColorRects
+8 0.0228 Xorg Xorg ValidateGC
+ 103 91.9643 Xorg Xorg damageValidateGC
+ 8 7.1429 Xorg Xorg ValidateGC [self]
+ 1 0.8929 Xorg Xorg miBSCheapValidateGC
+-------------------------------------------------------------------------------
+ 2 6.2500 Xorg Xorg miCompositeRects
+ 6 18.7500 Xorg Xorg miColorRects
+ 11 34.3750 Xorg Xorg SetClipRects
+ 13 40.6250 Xorg Xorg GetScratchGC
+8 0.0228 Xorg Xorg damageChangeClip
+ 23 71.8750 Xorg Xorg miBSCheapChangeClip
+ 8 25.0000 Xorg Xorg damageChangeClip [self]
+ 1 3.1250 Xorg Xorg miChangeClip
+-------------------------------------------------------------------------------
+ 1 1.1111 Xorg Xorg ValidateGC
+ 89 98.8889 Xorg Xorg damageValidateGC
+8 0.0228 Xorg Xorg miBSCheapValidateGC
+ 71 78.8889 libfb.so Xorg fbValidateGC
+ 8 8.8889 libfb.so Xorg fbGetGCPrivateIndex
+ 8 8.8889 Xorg Xorg miBSCheapValidateGC [self]
+ 1 1.1111 libfb.so Xorg .plt
+ 1 1.1111 libfb.so Xorg __i686.get_pc_thunk.cx
+ 1 1.1111 libfb.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+8 0.0228 ext3.ko ext3 ext3_get_blocks_handle
+ 8 100.000 ext3.ko ext3 ext3_get_blocks_handle [self]
+-------------------------------------------------------------------------------
+8 0.0228 libfb.so libfb.so fbGetGCPrivateIndex
+ 8 100.000 libfb.so libfb.so fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 2 0.1712 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 1166 99.8288 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+8 0.0228 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+ 1158 99.1438 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1
+ 8 0.6849 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch [self]
+ 2 0.1712 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libpixman.so.0.0.0 (no symbols)
+-------------------------------------------------------------------------------
+ 6 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+8 0.0228 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 8 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y [self]
+-------------------------------------------------------------------------------
+8 0.0228 vmlinux vmlinux cache_alloc_refill
+ 8 100.000 vmlinux vmlinux cache_alloc_refill [self]
+-------------------------------------------------------------------------------
+8 0.0228 vmlinux vmlinux free_pages_and_swap_cache
+ 8 100.000 vmlinux vmlinux free_pages_and_swap_cache [self]
+-------------------------------------------------------------------------------
+8 0.0228 vmlinux vmlinux permission
+ 8 100.000 vmlinux vmlinux permission [self]
+-------------------------------------------------------------------------------
+8 0.0228 vmlinux vmlinux radix_tree_lookup
+ 8 100.000 vmlinux vmlinux radix_tree_lookup [self]
+-------------------------------------------------------------------------------
+ 6 30.0000 Xorg Xorg ProcCreatePixmap
+ 14 70.0000 Xorg Xorg ProcRenderCreatePicture
+7 0.0199 Xorg Xorg AddResource
+ 12 60.0000 Xorg Xorg Xalloc
+ 7 35.0000 Xorg Xorg AddResource [self]
+ 1 5.0000 Xorg Xorg .plt
+-------------------------------------------------------------------------------
+ 1 14.2857 Xorg Xorg miCreateAlphaPicture
+ 2 28.5714 Xorg Xorg miCompositeRects
+ 4 57.1429 Xorg Xorg miColorRects
+7 0.0199 Xorg Xorg FreeScratchGC
+ 7 100.000 Xorg Xorg FreeScratchGC [self]
+-------------------------------------------------------------------------------
+ 4 12.1212 Xorg Xorg XaceCatchExtProc
+ 29 87.8788 Xorg Xorg ProcRenderDispatch
+7 0.0199 Xorg Xorg ProcRenderChangePicture
+ 15 45.4545 Xorg Xorg SecurityLookupIDByType
+ 9 27.2727 Xorg Xorg ChangePicture
+ 7 21.2121 Xorg Xorg ProcRenderChangePicture [self]
+ 2 6.0606 Xorg Xorg Ones
+-------------------------------------------------------------------------------
+ 4 0.0272 Xorg Xorg Dispatch
+ 14681 99.9728 Xorg Xorg XaceCatchExtProc
+7 0.0199 Xorg Xorg ProcRenderDispatch
+ 6018 40.9694 Xorg Xorg ProcRenderCompositeGlyphs
+ 5907 40.2138 Xorg Xorg ProcRenderTrapezoids
+ 1929 13.1323 Xorg Xorg ProcRenderFillRectangles
+ 346 2.3555 Xorg Xorg ProcRenderComposite
+ 173 1.1778 Xorg Xorg ProcRenderCreatePicture
+ 165 1.1233 Xorg Xorg ProcRenderFreePicture
+ 47 0.3200 Xorg Xorg ProcRenderSetPictureFilter
+ 29 0.1974 Xorg Xorg ProcRenderChangePicture
+ 29 0.1974 Xorg Xorg ProcRenderSetPictureTransform
+ 13 0.0885 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 7 0.0477 Xorg Xorg ProcRenderDispatch [self]
+ 7 0.0477 Xorg Xorg __i686.get_pc_thunk.bx
+ 6 0.0408 Xorg Xorg SecurityLookupIDByType
+ 5 0.0340 Xorg Xorg FindGlyph
+ 2 0.0136 Xorg Xorg PictOpValid
+ 2 0.0136 Xorg Xorg CreatePicture
+ 2 0.0136 Xorg Xorg SetPictureFilter
+ 1 0.0068 Xorg Xorg CompositeRects
+ 1 0.0068 Xorg Xorg Ones
+-------------------------------------------------------------------------------
+ 5 14.7059 Xorg Xorg XaceCatchExtProc
+ 29 85.2941 Xorg Xorg ProcRenderDispatch
+7 0.0199 Xorg Xorg ProcRenderSetPictureTransform
+ 19 55.8824 Xorg Xorg SecurityLookupIDByType
+ 7 20.5882 Xorg Xorg SetPictureTransform
+ 7 20.5882 Xorg Xorg ProcRenderSetPictureTransform [self]
+ 1 2.9412 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 0.1109 Xorg Xorg CompositeRects
+ 1802 99.8891 Xorg Xorg miCompositeRects
+7 0.0199 Xorg Xorg miColorRects
+ 1592 88.2483 Xorg Xorg damagePolyFillRect
+ 77 4.2683 Xorg Xorg ValidateGC
+ 41 2.2727 Xorg Xorg ChangeGC
+ 27 1.4967 Xorg Xorg GetScratchGC
+ 25 1.3858 Xorg Xorg miRenderColorToPixel
+ 11 0.6098 Xorg Xorg miRegionCreate
+ 7 0.3880 Xorg Xorg miColorRects [self]
+ 6 0.3326 Xorg Xorg damageChangeClip
+ 4 0.2217 Xorg Xorg __i686.get_pc_thunk.bx
+ 4 0.2217 Xorg Xorg FreeScratchGC
+ 4 0.2217 Xorg Xorg miRegionCopy
+ 3 0.1663 libfb.so Xorg fbPolyFillRect
+ 1 0.0554 Xorg Xorg dixChangeGC
+ 1 0.0554 Xorg Xorg getDrawableDamageRef
+ 1 0.0554 Xorg Xorg damageValidateGC
+-------------------------------------------------------------------------------
+ 1 1.4706 Xorg Xorg miComputeCompositeClip
+ 1 1.4706 Xorg Xorg ValidateOnePicture
+ 11 16.1765 Xorg Xorg miColorRects
+ 13 19.1176 Xorg Xorg miRectsToRegion
+ 42 61.7647 Xorg Xorg miValidatePicture
+7 0.0199 Xorg Xorg miRegionCreate
+ 36 52.9412 Xorg Xorg Xalloc
+ 14 20.5882 Xorg Xorg miRegionInit
+ 7 10.2941 Xorg Xorg miRegionCreate [self]
+ 3 4.4118 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+ 2 2.9412 Xorg Xorg .plt
+ 2 2.9412 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 2.9412 libpixman.so.0.0.0 Xorg pixman_region_init
+ 2 2.9412 libc-2.5.so Xorg malloc
+-------------------------------------------------------------------------------
+7 0.0199 jbd.ko jbd __journal_temp_unlink_buffer
+ 7 100.000 jbd.ko jbd __journal_temp_unlink_buffer [self]
+-------------------------------------------------------------------------------
+7 0.0199 libfb.so libfb.so fbCreatePixmap
+ 55 84.6154 libfb.so libfb.so fbCreatePixmapBpp
+ 7 10.7692 libfb.so libfb.so fbCreatePixmap [self]
+ 3 4.6154 Xorg libfb.so AllocatePixmap
+-------------------------------------------------------------------------------
+7 0.0199 vmlinux vmlinux __brelse
+ 7 100.000 vmlinux vmlinux __brelse [self]
+-------------------------------------------------------------------------------
+7 0.0199 vmlinux vmlinux __mark_inode_dirty
+ 7 100.000 vmlinux vmlinux __mark_inode_dirty [self]
+-------------------------------------------------------------------------------
+7 0.0199 vmlinux vmlinux bit_waitqueue
+ 7 100.000 vmlinux vmlinux bit_waitqueue [self]
+-------------------------------------------------------------------------------
+7 0.0199 vmlinux vmlinux handle_edge_irq
+ 7 100.000 vmlinux vmlinux handle_edge_irq [self]
+-------------------------------------------------------------------------------
+7 0.0199 vmlinux vmlinux kmap_atomic
+ 7 100.000 vmlinux vmlinux kmap_atomic [self]
+-------------------------------------------------------------------------------
+7 0.0199 vmlinux vmlinux schedule
+ 7 100.000 vmlinux vmlinux schedule [self]
+-------------------------------------------------------------------------------
+7 0.0199 vmlinux vmlinux search_extable
+ 7 100.000 vmlinux vmlinux search_extable [self]
+-------------------------------------------------------------------------------
+ 2 2.9412 Xorg Xorg Dispatch
+ 66 97.0588 Xorg Xorg XaceCatchDispatchProc
+6 0.0171 Xorg Xorg ProcFreePixmap
+ 47 69.1176 Xorg Xorg FreeResource
+ 8 11.7647 Xorg Xorg SecurityLookupIDByType
+ 6 8.8235 Xorg Xorg ProcFreePixmap [self]
+ 5 7.3529 Xorg Xorg dixDestroyPixmap
+ 1 1.4706 Xorg Xorg FlushClientCaches
+ 1 1.4706 Xorg Xorg Xfree
+-------------------------------------------------------------------------------
+ 6 3.5088 Xorg Xorg XaceCatchExtProc
+ 165 96.4912 Xorg Xorg ProcRenderDispatch
+6 0.0171 Xorg Xorg ProcRenderFreePicture
+ 129 75.4386 Xorg Xorg FreeResource
+ 33 19.2982 Xorg Xorg SecurityLookupIDByType
+ 6 3.5088 Xorg Xorg ProcRenderFreePicture [self]
+ 3 1.7544 Xorg Xorg FreePicture
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg Xorg ProcRenderSetPictureTransform
+6 0.0171 Xorg Xorg SetPictureTransform
+ 6 85.7143 Xorg Xorg SetPictureTransform [self]
+ 1 14.2857 Xorg Xorg miChangePictureTransform
+-------------------------------------------------------------------------------
+ 1 1.5152 Xorg Xorg ProcFreePixmap
+ 2 3.0303 Xorg Xorg miChangeClip
+ 2 3.0303 Xorg Xorg miDestroyPicture
+ 13 19.6970 Xorg Xorg FreeResource
+ 18 27.2727 Xorg Xorg miRegionDestroy
+ 30 45.4545 Xorg Xorg FreePicture
+6 0.0171 Xorg Xorg Xfree
+ 79 85.8696 libc-2.5.so Xorg free
+ 6 6.5217 Xorg Xorg Xfree [self]
+ 4 4.3478 libc-2.5.so Xorg _int_free
+ 3 3.2609 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 5799 100.000 Xorg Xorg CompositeGlyphs
+6 0.0171 Xorg Xorg damageGlyphs
+ 5773 99.5345 Xorg Xorg miGlyphs
+ 6 0.1034 Xorg Xorg miModifyPixmapHeader
+ 6 0.1034 Xorg Xorg damageGlyphs [self]
+ 4 0.0690 Xorg Xorg CompositePicture
+ 2 0.0345 Xorg Xorg FreeScratchPixmapHeader
+ 2 0.0345 Xorg Xorg miGlyphExtents
+ 2 0.0345 Xorg Xorg FreePicture
+ 2 0.0345 Xorg Xorg damageReportPostOp
+ 1 0.0172 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 0.0172 Xorg Xorg ValidateGC
+ 1 0.0172 Xorg Xorg ShmDestroyPixmap
+-------------------------------------------------------------------------------
+ 1 0.0538 Xorg Xorg ProcRenderFillRectangles
+ 1858 99.9462 Xorg Xorg CompositeRects
+6 0.0171 Xorg Xorg miCompositeRects
+ 1802 96.9338 Xorg Xorg miColorRects
+ 25 1.3448 Xorg Xorg CompositePicture
+ 6 0.3228 Xorg Xorg miCompositeRects [self]
+ 5 0.2690 Xorg Xorg CreatePicture
+ 4 0.2152 Xorg Xorg ValidateGC
+ 4 0.2152 Xorg Xorg miRenderColorToPixel
+ 3 0.1614 Xorg Xorg damagePolyFillRect
+ 2 0.1076 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 0.1076 Xorg Xorg FreeScratchGC
+ 2 0.1076 Xorg Xorg FreePicture
+ 2 0.1076 Xorg Xorg damageChangeClip
+ 1 0.0538 Xorg Xorg ChangeGC
+ 1 0.0538 libfb.so Xorg fbCreatePixmap
+-------------------------------------------------------------------------------
+ 1 6.2500 Xorg Xorg miRectsToRegion
+ 1 6.2500 Xorg Xorg miValidatePicture
+ 14 87.5000 Xorg Xorg miRegionCreate
+6 0.0171 Xorg Xorg miRegionInit
+ 7 43.7500 libpixman.so.0.0.0 Xorg pixman_region_init
+ 6 37.5000 Xorg Xorg miRegionInit [self]
+ 3 18.7500 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+-------------------------------------------------------------------------------
+ 2 22.2222 Xorg Xorg miValidatePicture
+ 7 77.7778 Xorg Xorg miComputeCompositeClip
+6 0.0171 Xorg Xorg miTranslateRegion
+ 6 50.0000 libpixman.so.0.0.0 Xorg pixman_region_translate
+ 6 50.0000 Xorg Xorg miTranslateRegion [self]
+-------------------------------------------------------------------------------
+6 0.0171 jbd.ko jbd journal_commit_transaction
+ 6 100.000 jbd.ko jbd journal_commit_transaction [self]
+-------------------------------------------------------------------------------
+6 0.0171 libc-2.5.so libc-2.5.so strchr
+ 6 100.000 libc-2.5.so libc-2.5.so strchr [self]
+-------------------------------------------------------------------------------
+6 0.0171 libfb.so libfb.so fbDestroyPixmap
+ 26 81.2500 Xorg libfb.so Xfree
+ 6 18.7500 libfb.so libfb.so fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+6 0.0171 libm-2.5.so libm-2.5.so ceil
+ 6 100.000 libm-2.5.so libm-2.5.so ceil [self]
+-------------------------------------------------------------------------------
+6 0.0171 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents
+ 6 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+6 0.0171 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate
+ 6 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate [self]
+-------------------------------------------------------------------------------
+6 0.0171 libplds4.so libplds4.so (no symbols)
+ 6 100.000 libplds4.so libplds4.so (no symbols) [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux __insert_inode_hash
+ 6 100.000 vmlinux vmlinux __insert_inode_hash [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux __switch_to
+ 6 100.000 vmlinux vmlinux __switch_to [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux anon_vma_prepare
+ 6 100.000 vmlinux vmlinux anon_vma_prepare [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux clocksource_get_next
+ 6 100.000 vmlinux vmlinux clocksource_get_next [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux copy_page_range
+ 6 100.000 vmlinux vmlinux copy_page_range [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux d_alloc
+ 6 100.000 vmlinux vmlinux d_alloc [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux find_busiest_group
+ 6 100.000 vmlinux vmlinux find_busiest_group [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux flush_tlb_page
+ 6 100.000 vmlinux vmlinux flush_tlb_page [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux link_path_walk
+ 6 100.000 vmlinux vmlinux link_path_walk [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux mutex_lock
+ 6 100.000 vmlinux vmlinux mutex_lock [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux mutex_unlock
+ 6 100.000 vmlinux vmlinux mutex_unlock [self]
+-------------------------------------------------------------------------------
+6 0.0171 vmlinux vmlinux run_timer_softirq
+ 6 100.000 vmlinux vmlinux run_timer_softirq [self]
+-------------------------------------------------------------------------------
+ 5 29.4118 Xorg Xorg ProcFreePixmap
+ 12 70.5882 Xorg Xorg FreeResource
+5 0.0142 Xorg Xorg dixDestroyPixmap
+ 11 64.7059 Xorg Xorg ShmDestroyPixmap
+ 5 29.4118 Xorg Xorg dixDestroyPixmap [self]
+ 1 5.8824 Xorg Xorg damageDestroyPixmap
+-------------------------------------------------------------------------------
+ 1 20.0000 Xorg Xorg SetClipRects
+ 2 40.0000 Xorg Xorg dixChangeGC
+ 2 40.0000 Xorg Xorg damageChangeGC
+5 0.0142 Xorg Xorg miBSCheapChangeGC
+ 5 100.000 Xorg Xorg miBSCheapChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 4.7619 Xorg Xorg damageChangeClip
+ 20 95.2381 Xorg Xorg miBSCheapChangeClip
+5 0.0142 Xorg Xorg miChangeClip
+ 7 33.3333 Xorg Xorg miDestroyClip
+ 7 33.3333 Xorg Xorg miRectsToRegion
+ 5 23.8095 Xorg Xorg miChangeClip [self]
+ 2 9.5238 Xorg Xorg Xfree
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg Xorg miChangePictureClip
+ 2 33.3333 Xorg Xorg miGlyphs
+ 3 50.0000 Xorg Xorg FreePicture
+5 0.0142 Xorg Xorg miDestroyPictureClip
+ 5 83.3333 Xorg Xorg miDestroyPictureClip [self]
+ 1 16.6667 Xorg Xorg miRegionDestroy
+-------------------------------------------------------------------------------
+5 0.0142 ext3.ko ext3 __ext3_get_inode_loc
+ 5 100.000 ext3.ko ext3 __ext3_get_inode_loc [self]
+-------------------------------------------------------------------------------
+5 0.0142 ext3.ko ext3 ext3_try_to_allocate
+ 5 100.000 ext3.ko ext3 ext3_try_to_allocate [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so mbrtowc
+5 0.0142 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check
+ 5 100.000 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+ 2 66.6667 libc-2.5.so libc-2.5.so read_alias_file
+5 0.0142 libc-2.5.so libc-2.5.so qsort
+ 125 93.9850 libc-2.5.so libc-2.5.so msort_with_tmp
+ 5 3.7594 libc-2.5.so libc-2.5.so qsort [self]
+ 2 1.5038 libxul.so libc-2.5.so (no symbols)
+ 1 0.7519 libc-2.5.so libc-2.5.so sysconf
+-------------------------------------------------------------------------------
+5 0.0142 libc-2.5.so libc-2.5.so realloc
+ 20 74.0741 libc-2.5.so libc-2.5.so _int_realloc
+ 5 18.5185 libc-2.5.so libc-2.5.so realloc [self]
+ 2 7.4074 libc-2.5.so libc-2.5.so malloc
+-------------------------------------------------------------------------------
+ 15 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+5 0.0142 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 10 66.6667 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+ 5 33.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit [self]
+-------------------------------------------------------------------------------
+5 0.0142 vmlinux vmlinux __do_softirq
+ 5 100.000 vmlinux vmlinux __do_softirq [self]
+-------------------------------------------------------------------------------
+5 0.0142 vmlinux vmlinux __kmalloc
+ 5 100.000 vmlinux vmlinux __kmalloc [self]
+-------------------------------------------------------------------------------
+5 0.0142 vmlinux vmlinux __wake_up_bit
+ 5 100.000 vmlinux vmlinux __wake_up_bit [self]
+-------------------------------------------------------------------------------
+5 0.0142 vmlinux vmlinux check_userspace
+ 5 100.000 vmlinux vmlinux check_userspace [self]
+-------------------------------------------------------------------------------
+5 0.0142 vmlinux vmlinux do_timer
+ 5 100.000 vmlinux vmlinux do_timer [self]
+-------------------------------------------------------------------------------
+5 0.0142 vmlinux vmlinux hrtimer_run_queues
+ 5 100.000 vmlinux vmlinux hrtimer_run_queues [self]
+-------------------------------------------------------------------------------
+5 0.0142 vmlinux vmlinux scheduler_tick
+ 5 100.000 vmlinux vmlinux scheduler_tick [self]
+-------------------------------------------------------------------------------
+5 0.0142 vmlinux vmlinux skb_dequeue
+ 5 100.000 vmlinux vmlinux skb_dequeue [self]
+-------------------------------------------------------------------------------
+ 5816 100.000 Xorg Xorg ProcRenderCompositeGlyphs
+4 0.0114 Xorg Xorg CompositeGlyphs
+ 5799 99.6734 Xorg Xorg damageGlyphs
+ 14 0.2406 Xorg Xorg ValidatePicture
+ 4 0.0688 Xorg Xorg CompositeGlyphs [self]
+ 1 0.0172 Xorg Xorg miGlyphs
+-------------------------------------------------------------------------------
+ 1 0.0527 Xorg Xorg ProcRenderDispatch
+ 1897 99.9473 Xorg Xorg ProcRenderFillRectangles
+4 0.0114 Xorg Xorg CompositeRects
+ 1858 97.8410 Xorg Xorg miCompositeRects
+ 32 1.6851 Xorg Xorg ValidatePicture
+ 4 0.2106 Xorg Xorg CompositeRects [self]
+ 2 0.1053 Xorg Xorg miColorRects
+ 1 0.0527 Xorg Xorg PictureMatchFormat
+ 1 0.0527 Xorg Xorg ValidateOnePicture
+ 1 0.0527 Xorg Xorg damagePolyFillRect
+-------------------------------------------------------------------------------
+ 14 100.000 Xorg Xorg SetPictureFilter
+4 0.0114 Xorg Xorg PictureFindFilter
+ 9 64.2857 Xorg Xorg PictureGetFilterId
+ 4 28.5714 Xorg Xorg PictureFindFilter [self]
+ 1 7.1429 Xorg Xorg CompareISOLatin1Lowered
+-------------------------------------------------------------------------------
+ 3 18.7500 Xorg Xorg XaceCatchExtProc
+ 13 81.2500 Xorg Xorg ProcRenderDispatch
+4 0.0114 Xorg Xorg ProcRenderSetPictureClipRectangles
+ 11 68.7500 Xorg Xorg SetPictureClipRects
+ 4 25.0000 Xorg Xorg ProcRenderSetPictureClipRectangles [self]
+ 1 6.2500 Xorg Xorg SecurityLookupIDByType
+-------------------------------------------------------------------------------
+ 1 5.0000 Xorg Xorg ProcRenderCreatePicture
+ 19 95.0000 Xorg Xorg dixLookupDrawable
+4 0.0114 Xorg Xorg SecurityLookupIDByClass
+ 16 80.0000 Xorg Xorg XaceHook
+ 4 20.0000 Xorg Xorg SecurityLookupIDByClass [self]
+-------------------------------------------------------------------------------
+ 1 7.1429 Xorg Xorg ProcPolyFillRectangle
+ 1 7.1429 Xorg Xorg XaceCatchDispatchProc
+ 2 14.2857 Xorg Xorg ProcSetClipRectangles
+ 3 21.4286 Xorg Xorg ProcPolySegment
+ 7 50.0000 Xorg Xorg ProcChangeGC
+4 0.0114 Xorg Xorg dixLookupGC
+ 10 71.4286 Xorg Xorg SecurityLookupIDByType
+ 4 28.5714 Xorg Xorg dixLookupGC [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg ProcRenderCreatePicture
+4 0.0114 Xorg Xorg miCreatePicture
+ 4 100.000 Xorg Xorg miCreatePicture [self]
+-------------------------------------------------------------------------------
+ 35 100.000 Xorg Xorg miTrapezoids
+4 0.0114 Xorg Xorg miTrapezoidBounds
+ 24 68.5714 Xorg Xorg miLineFixedX
+ 6 17.1429 Xorg Xorg __divdi3
+ 4 11.4286 Xorg Xorg miTrapezoidBounds [self]
+ 1 2.8571 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+4 0.0114 ext3.ko ext3 ext3_new_blocks
+ 4 100.000 ext3.ko ext3 ext3_new_blocks [self]
+-------------------------------------------------------------------------------
+4 0.0114 jbd.ko jbd journal_write_metadata_buffer
+ 4 100.000 jbd.ko jbd journal_write_metadata_buffer [self]
+-------------------------------------------------------------------------------
+4 0.0114 jbd.ko jbd start_this_handle
+ 4 100.000 jbd.ko jbd start_this_handle [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 8 88.8889 ld-2.5.so ld-2.5.so do_lookup_x
+4 0.0114 ld-2.5.so ld-2.5.so check_match.7793
+ 5 55.5556 ld-2.5.so ld-2.5.so strcmp
+ 4 44.4444 ld-2.5.so ld-2.5.so check_match.7793 [self]
+-------------------------------------------------------------------------------
+ 20 100.000 libc-2.5.so libc-2.5.so realloc
+4 0.0114 libc-2.5.so libc-2.5.so _int_realloc
+ 11 55.0000 libc-2.5.so libc-2.5.so _int_malloc
+ 4 20.0000 libc-2.5.so libc-2.5.so _int_realloc [self]
+ 3 15.0000 libc-2.5.so libc-2.5.so memcpy
+ 2 10.0000 libc-2.5.so libc-2.5.so _int_free
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so msort_with_tmp
+ 1 50.0000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+4 0.0114 libc-2.5.so libc-2.5.so strcmp
+ 4 100.000 libc-2.5.so libc-2.5.so strcmp [self]
+-------------------------------------------------------------------------------
+4 0.0114 libc-2.5.so libc-2.5.so strcpy
+ 4 100.000 libc-2.5.so libc-2.5.so strcpy [self]
+-------------------------------------------------------------------------------
+ 30 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+4 0.0114 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 15 50.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+ 7 23.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 4 13.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init [self]
+ 3 10.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+ 1 3.3333 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux __alloc_skb
+ 4 100.000 vmlinux vmlinux __alloc_skb [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux __block_write_full_page
+ 4 100.000 vmlinux vmlinux __block_write_full_page [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux __find_get_block_slow
+ 4 100.000 vmlinux vmlinux __find_get_block_slow [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux __inc_zone_page_state
+ 4 100.000 vmlinux vmlinux __inc_zone_page_state [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux d_rehash
+ 4 100.000 vmlinux vmlinux d_rehash [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux dnotify_parent
+ 4 100.000 vmlinux vmlinux dnotify_parent [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux do_mmap_pgoff
+ 4 100.000 vmlinux vmlinux do_mmap_pgoff [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux do_softirq
+ 4 100.000 vmlinux vmlinux do_softirq [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux free_block
+ 4 100.000 vmlinux vmlinux free_block [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux rebalance_tick
+ 4 100.000 vmlinux vmlinux rebalance_tick [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux restore_all
+ 4 100.000 vmlinux vmlinux restore_all [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux sys_mkdirat
+ 4 100.000 vmlinux vmlinux sys_mkdirat [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux syscall_exit
+ 4 100.000 vmlinux vmlinux syscall_exit [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux vfs_read
+ 4 100.000 vmlinux vmlinux vfs_read [self]
+-------------------------------------------------------------------------------
+4 0.0114 vmlinux vmlinux vsnprintf
+ 4 100.000 vmlinux vmlinux vsnprintf [self]
+-------------------------------------------------------------------------------
+ 1 2.3810 Xorg Xorg miCompositeRects
+ 41 97.6190 Xorg Xorg miColorRects
+3 0.0085 Xorg Xorg ChangeGC
+ 39 92.8571 Xorg Xorg dixChangeGC
+ 3 7.1429 Xorg Xorg ChangeGC [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg ProcFreePixmap
+ 2 66.6667 Xorg Xorg FreeResource
+3 0.0085 Xorg Xorg FlushClientCaches
+ 3 100.000 Xorg Xorg FlushClientCaches [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg ProcRenderFillRectangles
+ 2 66.6667 Xorg Xorg ProcRenderDispatch
+3 0.0085 Xorg Xorg PictOpValid
+ 3 100.000 Xorg Xorg PictOpValid [self]
+-------------------------------------------------------------------------------
+ 1 9.0909 Xorg Xorg Dispatch
+ 10 90.9091 Xorg Xorg XaceCatchDispatchProc
+3 0.0085 Xorg Xorg ProcChangeGC
+ 7 63.6364 Xorg Xorg dixLookupGC
+ 3 27.2727 Xorg Xorg ProcChangeGC [self]
+ 1 9.0909 Xorg Xorg dixChangeGC
+-------------------------------------------------------------------------------
+ 45 100.000 Xorg Xorg XaceCatchDispatchProc
+3 0.0085 Xorg Xorg ProcPolyFillRectangle
+ 39 86.6667 Xorg Xorg damagePolyFillRect
+ 3 6.6667 Xorg Xorg ProcPolyFillRectangle [self]
+ 2 4.4444 Xorg Xorg ValidateGC
+ 1 2.2222 Xorg Xorg dixLookupGC
+-------------------------------------------------------------------------------
+ 16 100.000 Xorg Xorg ProcSetClipRectangles
+3 0.0085 Xorg Xorg SetClipRects
+ 11 68.7500 Xorg Xorg damageChangeClip
+ 3 18.7500 Xorg Xorg SetClipRects [self]
+ 1 6.2500 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 6.2500 Xorg Xorg miBSCheapChangeGC
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg XaceCatchExtProc
+3 0.0085 Xorg Xorg __i686.get_pc_thunk.cx
+ 3 100.000 Xorg Xorg __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg dixChangeGC
+3 0.0085 Xorg Xorg damageChangeGC
+ 3 50.0000 Xorg Xorg damageChangeGC [self]
+ 2 33.3333 Xorg Xorg miBSCheapChangeGC
+ 1 16.6667 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 2 6.2500 Xorg Xorg XaceCatchDispatchProc
+ 30 93.7500 Xorg Xorg ProcPolySegment
+3 0.0085 Xorg Xorg damagePolySegment
+ 28 87.5000 libfb.so Xorg fbPolySegment
+ 3 9.3750 Xorg Xorg damagePolySegment [self]
+ 1 3.1250 Xorg Xorg damageReportPostOp
+-------------------------------------------------------------------------------
+ 1 4.1667 Xorg Xorg GetScratchGC
+ 23 95.8333 Xorg Xorg damageChangeClip
+3 0.0085 Xorg Xorg miBSCheapChangeClip
+ 20 83.3333 Xorg Xorg miChangeClip
+ 3 12.5000 Xorg Xorg miBSCheapChangeClip [self]
+ 1 4.1667 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg CreatePicture
+3 0.0085 Xorg Xorg miChangePicture
+ 3 100.000 Xorg Xorg miChangePicture [self]
+-------------------------------------------------------------------------------
+ 1 10.0000 Xorg Xorg miBSCheapDestroyClip
+ 2 20.0000 Xorg Xorg damageDestroyClip
+ 7 70.0000 Xorg Xorg miChangeClip
+3 0.0085 Xorg Xorg miDestroyClip
+ 6 60.0000 Xorg Xorg miRegionDestroy
+ 3 30.0000 Xorg Xorg miDestroyClip [self]
+ 1 10.0000 libpixman.so.0.0.0 Xorg pixman_region_fini
+-------------------------------------------------------------------------------
+ 1 3.3333 Xorg Xorg miDestroyPictureClip
+ 2 6.6667 Xorg Xorg FreePicture
+ 6 20.0000 Xorg Xorg miDestroyClip
+ 21 70.0000 Xorg Xorg miDestroyPicture
+3 0.0085 Xorg Xorg miRegionDestroy
+ 18 60.0000 Xorg Xorg Xfree
+ 3 10.0000 Xorg Xorg miRegionDestroy [self]
+ 2 6.6667 Xorg Xorg __i686.get_pc_thunk.bx
+ 2 6.6667 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 2 6.6667 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 2 6.6667 libc-2.5.so Xorg free
+ 1 3.3333 Xorg Xorg .plt
+-------------------------------------------------------------------------------
+3 0.0085 ext3.ko ext3 add_dirent_to_buf
+ 3 100.000 ext3.ko ext3 add_dirent_to_buf [self]
+-------------------------------------------------------------------------------
+3 0.0085 ext3.ko ext3 ext3_find_entry
+ 3 100.000 ext3.ko ext3 ext3_find_entry [self]
+-------------------------------------------------------------------------------
+3 0.0085 ext3.ko ext3 ext3_permission
+ 3 100.000 ext3.ko ext3 ext3_permission [self]
+-------------------------------------------------------------------------------
+3 0.0085 ext3.ko ext3 ext3_test_allocatable
+ 3 100.000 ext3.ko ext3 ext3_test_allocatable [self]
+-------------------------------------------------------------------------------
+3 0.0085 jbd.ko jbd journal_start
+ 3 100.000 jbd.ko jbd journal_start [self]
+-------------------------------------------------------------------------------
+3 0.0085 jbd.ko jbd journal_stop
+ 3 100.000 jbd.ko jbd journal_stop [self]
+-------------------------------------------------------------------------------
+ 13 100.000 ld-2.5.so ld-2.5.so _dl_runtime_resolve
+3 0.0085 ld-2.5.so ld-2.5.so _dl_fixup
+ 10 76.9231 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+ 3 23.0769 ld-2.5.so ld-2.5.so _dl_fixup [self]
+-------------------------------------------------------------------------------
+3 0.0085 libc-2.5.so libc-2.5.so __xstat
+ 3 100.000 libc-2.5.so libc-2.5.so __xstat [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+3 0.0085 libc-2.5.so libc-2.5.so _nl_intern_locale_data
+ 3 100.000 libc-2.5.so libc-2.5.so _nl_intern_locale_data [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so _IO_getline
+3 0.0085 libc-2.5.so libc-2.5.so memchr
+ 3 100.000 libc-2.5.so libc-2.5.so memchr [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __sigjmp_save
+3 0.0085 libc-2.5.so libc-2.5.so sigprocmask
+ 3 100.000 libc-2.5.so libc-2.5.so sigprocmask [self]
+-------------------------------------------------------------------------------
+3 0.0085 libfb.so libfb.so fbRasterizeTrapezoid
+ 901 96.4668 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid
+ 18 1.9272 libfb.so libfb.so image_from_pict
+ 4 0.4283 libpixman.so.0.0.0 libfb.so pixman_image_unref
+ 3 0.3212 libfb.so libfb.so fbRasterizeTrapezoid [self]
+ 2 0.2141 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 2 0.2141 libpixman.so.0.0.0 libfb.so pixman_sample_ceil_y
+ 1 0.1071 libpixman.so.0.0.0 libfb.so pixman_region_fini
+ 1 0.1071 libpixman.so.0.0.0 libfb.so pixman_line_fixed_edge_init
+ 1 0.1071 libpixman.so.0.0.0 libfb.so pixman_rasterize_edges
+ 1 0.1071 libfb.so libfb.so .plt
+-------------------------------------------------------------------------------
+3 0.0085 libm-2.5.so libm-2.5.so tan
+ 3 100.000 libm-2.5.so libm-2.5.so tan [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 7 87.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+3 0.0085 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+ 5 62.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+ 3 37.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step [self]
+-------------------------------------------------------------------------------
+ 33 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+3 0.0085 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 30 88.2353 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+ 3 8.8235 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init [self]
+ 1 2.9412 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+-------------------------------------------------------------------------------
+3 0.0085 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 848 94.1176 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+ 33 3.6626 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+ 9 0.9989 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+ 6 0.6659 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+ 3 0.3330 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid [self]
+ 1 0.1110 libc-2.5.so libpixman.so.0.0.0 memset
+ 1 0.1110 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libpixman.so.0.0.0 (no symbols)
+-------------------------------------------------------------------------------
+ 2 100.000 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+3 0.0085 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+ 3 100.000 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+3 0.0085 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+ 26 83.8710 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+ 3 9.6774 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock [self]
+ 2 6.4516 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 6 100.000 mouse_drv.so mouse_drv.so MouseReadInput
+3 0.0085 mouse_drv.so mouse_drv.so MousePostEvent
+ 3 42.8571 mouse_drv.so mouse_drv.so MouseDoPostEvent
+ 3 42.8571 mouse_drv.so mouse_drv.so MousePostEvent [self]
+ 1 14.2857 Xorg mouse_drv.so xf86PostMotionEvent
+-------------------------------------------------------------------------------
+3 0.0085 sudo sudo (no symbols)
+ 3 100.000 sudo sudo (no symbols) [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux alloc_inode
+ 3 100.000 vmlinux vmlinux alloc_inode [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux atomic_notifier_call_chain
+ 3 100.000 vmlinux vmlinux atomic_notifier_call_chain [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux dec_zone_page_state
+ 3 100.000 vmlinux vmlinux dec_zone_page_state [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux do_IRQ
+ 3 100.000 vmlinux vmlinux do_IRQ [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux do_gettimeofday
+ 3 100.000 vmlinux vmlinux do_gettimeofday [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux filemap_nopage
+ 3 100.000 vmlinux vmlinux filemap_nopage [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux find_get_pages_tag
+ 3 100.000 vmlinux vmlinux find_get_pages_tag [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux find_next_bit
+ 3 100.000 vmlinux vmlinux find_next_bit [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux find_next_zero_bit
+ 3 100.000 vmlinux vmlinux find_next_zero_bit [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux generic_permission
+ 3 100.000 vmlinux vmlinux generic_permission [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux get_empty_filp
+ 3 100.000 vmlinux vmlinux get_empty_filp [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux get_unmapped_area
+ 3 100.000 vmlinux vmlinux get_unmapped_area [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux irq_entries_start
+ 3 100.000 vmlinux vmlinux irq_entries_start [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux irq_exit
+ 3 100.000 vmlinux vmlinux irq_exit [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux kfree
+ 3 100.000 vmlinux vmlinux kfree [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux note_interrupt
+ 3 100.000 vmlinux vmlinux note_interrupt [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux number
+ 3 100.000 vmlinux vmlinux number [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux page_add_new_anon_rmap
+ 3 100.000 vmlinux vmlinux page_add_new_anon_rmap [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux radix_tree_tag_clear
+ 3 100.000 vmlinux vmlinux radix_tree_tag_clear [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux rb_insert_color
+ 3 100.000 vmlinux vmlinux rb_insert_color [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux sched_clock
+ 3 100.000 vmlinux vmlinux sched_clock [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux skb_queue_tail
+ 3 100.000 vmlinux vmlinux skb_queue_tail [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux sock_aio_read
+ 3 100.000 vmlinux vmlinux sock_aio_read [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux sock_def_readable
+ 3 100.000 vmlinux vmlinux sock_def_readable [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux softlockup_tick
+ 3 100.000 vmlinux vmlinux softlockup_tick [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux sys_read
+ 3 100.000 vmlinux vmlinux sys_read [self]
+-------------------------------------------------------------------------------
+3 0.0085 vmlinux vmlinux vfs_permission
+ 3 100.000 vmlinux vmlinux vfs_permission [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damageGlyphs
+2 0.0057 Xorg Xorg FreeScratchPixmapHeader
+ 2 100.000 Xorg Xorg FreeScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg xf86PostMotionEventP
+2 0.0057 Xorg Xorg GetPointerEvents
+ 2 66.6667 Xorg Xorg GetPointerEvents [self]
+ 1 33.3333 Xorg Xorg getValuatorEvents
+-------------------------------------------------------------------------------
+ 5 100.000 Xorg Xorg miGlyphs
+2 0.0057 Xorg Xorg GetScratchPixmapHeader
+ 3 60.0000 Xorg Xorg miModifyPixmapHeader
+ 2 40.0000 Xorg Xorg GetScratchPixmapHeader [self]
+-------------------------------------------------------------------------------
+ 3039 100.000 Xorg Xorg XaceCatchDispatchProc
+2 0.0057 Xorg Xorg ProcCopyArea
+ 3035 99.8684 Xorg Xorg damageCopyArea
+ 2 0.0658 Xorg Xorg ValidateGC
+ 2 0.0658 Xorg Xorg ProcCopyArea [self]
+-------------------------------------------------------------------------------
+ 346 100.000 Xorg Xorg ProcRenderDispatch
+2 0.0057 Xorg Xorg ProcRenderComposite
+ 338 97.6879 Xorg Xorg CompositePicture
+ 6 1.7341 Xorg Xorg SecurityLookupIDByType
+ 2 0.5780 Xorg Xorg ProcRenderComposite [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg xf86SigioReadInput
+2 0.0057 Xorg Xorg XisbRead
+ 2 100.000 Xorg Xorg XisbRead [self]
+-------------------------------------------------------------------------------
+ 1 0.0329 Xorg Xorg XaceCatchDispatchProc
+ 3035 99.9671 Xorg Xorg ProcCopyArea
+2 0.0057 Xorg Xorg damageCopyArea
+ 3030 99.8024 libfb.so Xorg fbCopyArea
+ 2 0.0659 Xorg Xorg damageReportPostOp
+ 2 0.0659 libfb.so Xorg fbDoCopy
+ 2 0.0659 Xorg Xorg damageCopyArea [self]
+-------------------------------------------------------------------------------
+ 1 3.2258 Xorg Xorg FreeResource
+ 30 96.7742 Xorg Xorg FreePicture
+2 0.0057 Xorg Xorg miDestroyPicture
+ 21 67.7419 Xorg Xorg miRegionDestroy
+ 3 9.6774 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 2 6.4516 Xorg Xorg .plt
+ 2 6.4516 Xorg Xorg Xfree
+ 2 6.4516 Xorg Xorg miDestroyPicture [self]
+ 1 3.2258 Xorg Xorg __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+ 5900 100.000 Xorg Xorg CompositeTrapezoids
+2 0.0057 Xorg Xorg miTrapezoids
+ 4656 78.9019 Xorg Xorg CompositePicture
+ 932 15.7939 libfb.so Xorg fbRasterizeTrapezoid
+ 267 4.5247 Xorg Xorg miCreateAlphaPicture
+ 35 0.5931 Xorg Xorg miTrapezoidBounds
+ 6 0.1017 Xorg Xorg FreePicture
+ 2 0.0339 Xorg Xorg miTrapezoids [self]
+ 1 0.0169 Xorg Xorg miLineFixedX
+ 1 0.0169 libpixman.so.0.0.0 Xorg pixman_image_unref
+ 1 0.0169 libfb.so Xorg image_from_pict
+-------------------------------------------------------------------------------
+2 0.0057 e1000.ko e1000 e1000_update_stats
+ 2 100.000 e1000.ko e1000 e1000_update_stats [self]
+-------------------------------------------------------------------------------
+2 0.0057 ext3.ko ext3 ext3_add_entry
+ 2 100.000 ext3.ko ext3 ext3_add_entry [self]
+-------------------------------------------------------------------------------
+2 0.0057 ext3.ko ext3 ext3_block_to_path
+ 2 100.000 ext3.ko ext3 ext3_block_to_path [self]
+-------------------------------------------------------------------------------
+2 0.0057 ext3.ko ext3 ext3_check_dir_entry
+ 2 100.000 ext3.ko ext3 ext3_check_dir_entry [self]
+-------------------------------------------------------------------------------
+2 0.0057 ext3.ko ext3 ext3_get_branch
+ 2 100.000 ext3.ko ext3 ext3_get_branch [self]
+-------------------------------------------------------------------------------
+2 0.0057 ext3.ko ext3 ext3_journal_start_sb
+ 2 100.000 ext3.ko ext3 ext3_journal_start_sb [self]
+-------------------------------------------------------------------------------
+2 0.0057 ext3.ko ext3 ext3_mark_inode_dirty
+ 2 100.000 ext3.ko ext3 ext3_mark_inode_dirty [self]
+-------------------------------------------------------------------------------
+2 0.0057 ext3.ko ext3 ext3_orphan_add
+ 2 100.000 ext3.ko ext3 ext3_orphan_add [self]
+-------------------------------------------------------------------------------
+2 0.0057 ext3.ko ext3 ext3_try_to_allocate_with_rsv
+ 2 100.000 ext3.ko ext3 ext3_try_to_allocate_with_rsv [self]
+-------------------------------------------------------------------------------
+2 0.0057 jbd.ko jbd journal_clean_one_cp_list
+ 2 100.000 jbd.ko jbd journal_clean_one_cp_list [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 ld-2.5.so ld-2.5.so _dl_runtime_resolve
+ 1 50.0000 ld-2.5.so ld-2.5.so _dl_map_object
+2 0.0057 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx
+ 2 100.000 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 3 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+2 0.0057 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+ 2 66.6667 ld-2.5.so ld-2.5.so _dl_map_object_from_fd [self]
+ 1 33.3333 ld-2.5.so ld-2.5.so _dl_new_object
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so vfprintf
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_padn
+2 0.0057 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_default_xsputn [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so _IO_default_uflow
+ 2 66.6667 libc-2.5.so libc-2.5.so __uflow
+2 0.0057 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 2 66.6667 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1 [self]
+ 1 33.3333 libc-2.5.so libc-2.5.so __read_nocancel
+-------------------------------------------------------------------------------
+2 0.0057 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so sprintf
+ 1 50.0000 libc-2.5.so libc-2.5.so vsnprintf
+2 0.0057 libc-2.5.so libc-2.5.so _IO_str_init_static_internal
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_str_init_static_internal [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so vsscanf
+2 0.0057 libc-2.5.so libc-2.5.so _IO_vfscanf
+ 2 66.6667 libc-2.5.so libc-2.5.so _IO_vfscanf [self]
+ 1 33.3333 libc-2.5.so libc-2.5.so _IO_sputbackc
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+2 0.0057 libc-2.5.so libc-2.5.so __read_nocancel
+ 2 100.000 libc-2.5.so libc-2.5.so __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so sbrk
+2 0.0057 libc-2.5.so libc-2.5.so brk
+ 2 100.000 libc-2.5.so libc-2.5.so brk [self]
+-------------------------------------------------------------------------------
+2 0.0057 libc-2.5.so libc-2.5.so bsearch
+ 2 100.000 libc-2.5.so libc-2.5.so bsearch [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so _nl_find_locale
+2 0.0057 libc-2.5.so libc-2.5.so getenv
+ 2 100.000 libc-2.5.so libc-2.5.so getenv [self]
+-------------------------------------------------------------------------------
+2 0.0057 libc-2.5.so libc-2.5.so strcat
+ 2 100.000 libc-2.5.so libc-2.5.so strcat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so asprintf
+2 0.0057 libc-2.5.so libc-2.5.so vasprintf
+ 2 100.000 libc-2.5.so libc-2.5.so vasprintf [self]
+-------------------------------------------------------------------------------
+2 0.0057 libc-2.5.so libc-2.5.so writev
+ 2 100.000 libc-2.5.so libc-2.5.so writev [self]
+-------------------------------------------------------------------------------
+ 3028 100.000 libfb.so libfb.so fbCopyRegion
+2 0.0057 libfb.so libfb.so fbCopyNtoN
+ 3026 99.9339 libpixman.so.0.0.0 libfb.so pixman_blt
+ 2 0.0661 libfb.so libfb.so fbCopyNtoN [self]
+-------------------------------------------------------------------------------
+ 2 0.0660 libfb.so libfb.so fbCopyArea
+ 3028 99.9340 libfb.so libfb.so fbDoCopy
+2 0.0057 libfb.so libfb.so fbCopyRegion
+ 3028 99.9340 libfb.so libfb.so fbCopyNtoN
+ 2 0.0660 libfb.so libfb.so fbCopyRegion [self]
+-------------------------------------------------------------------------------
+ 3028 100.000 libfb.so libfb.so fbCopyArea
+2 0.0057 libfb.so libfb.so fbDoCopy
+ 3028 99.9340 libfb.so libfb.so fbCopyRegion
+ 2 0.0660 libfb.so libfb.so fbDoCopy [self]
+-------------------------------------------------------------------------------
+2 0.0057 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols)
+ 2 100.000 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols) [self]
+-------------------------------------------------------------------------------
+2 0.0057 libm-2.5.so libm-2.5.so cos
+ 2 100.000 libm-2.5.so libm-2.5.so cos [self]
+-------------------------------------------------------------------------------
+2 0.0057 libm-2.5.so libm-2.5.so floorf
+ 2 100.000 libm-2.5.so libm-2.5.so floorf [self]
+-------------------------------------------------------------------------------
+2 0.0057 libm-2.5.so libm-2.5.so sin
+ 2 100.000 libm-2.5.so libm-2.5.so sin [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+2 0.0057 libpixman.so.0.0.0 libpixman.so.0.0.0 can_get_solid
+ 2 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 can_get_solid [self]
+-------------------------------------------------------------------------------
+ 3281 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+2 0.0057 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+ 3271 99.6952 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+ 3 0.0914 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+ 2 0.0610 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+ 2 0.0610 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+ 2 0.0610 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect [self]
+ 1 0.0305 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineAddU
+-------------------------------------------------------------------------------
+2 0.0057 libpthread-2.5.so libpthread-2.5.so __errno_location
+ 2 100.000 libpthread-2.5.so libpthread-2.5.so __errno_location [self]
+-------------------------------------------------------------------------------
+2 0.0057 libpthread-2.5.so libpthread-2.5.so __write_nocancel
+ 2 66.6667 libpthread-2.5.so libpthread-2.5.so __write_nocancel [self]
+ 1 33.3333 libpthread-2.5.so libpthread-2.5.so __pthread_disable_asynccancel
+-------------------------------------------------------------------------------
+2 0.0057 locale-archive locale-archive (no symbols)
+ 2 100.000 locale-archive locale-archive (no symbols) [self]
+-------------------------------------------------------------------------------
+2 0.0057 uhci-hcd.ko uhci_hcd uhci_scan_schedule
+ 2 100.000 uhci-hcd.ko uhci_hcd uhci_scan_schedule [self]
+-------------------------------------------------------------------------------
+2 0.0057 usbcore.ko usbcore urb_unlink
+ 2 100.000 usbcore.ko usbcore urb_unlink [self]
+-------------------------------------------------------------------------------
+2 0.0057 usbcore.ko usbcore usb_hcd_poll_rh_status
+ 2 100.000 usbcore.ko usbcore usb_hcd_poll_rh_status [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux __pagevec_free
+ 2 100.000 vmlinux vmlinux __pagevec_free [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux __path_lookup_intent_open
+ 2 100.000 vmlinux vmlinux __path_lookup_intent_open [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux __set_page_dirty_nobuffers
+ 2 100.000 vmlinux vmlinux __set_page_dirty_nobuffers [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux _local_bh_enable
+ 2 100.000 vmlinux vmlinux _local_bh_enable [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux account_user_time
+ 2 100.000 vmlinux vmlinux account_user_time [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux ack_ioapic_irq
+ 2 100.000 vmlinux vmlinux ack_ioapic_irq [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux ahci_interrupt
+ 2 100.000 vmlinux vmlinux ahci_interrupt [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux ahci_qc_issue
+ 2 100.000 vmlinux vmlinux ahci_qc_issue [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux bio_alloc_bioset
+ 2 100.000 vmlinux vmlinux bio_alloc_bioset [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux blk_recount_segments
+ 2 100.000 vmlinux vmlinux blk_recount_segments [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux cap_vm_enough_memory
+ 2 100.000 vmlinux vmlinux cap_vm_enough_memory [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux clear_user
+ 2 100.000 vmlinux vmlinux clear_user [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux copy_strings
+ 2 100.000 vmlinux vmlinux copy_strings [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux d_instantiate
+ 2 100.000 vmlinux vmlinux d_instantiate [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux d_splice_alias
+ 2 100.000 vmlinux vmlinux d_splice_alias [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux do_generic_mapping_read
+ 2 100.000 vmlinux vmlinux do_generic_mapping_read [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux do_munmap
+ 2 100.000 vmlinux vmlinux do_munmap [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux do_notify_resume
+ 2 100.000 vmlinux vmlinux do_notify_resume [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux do_select
+ 2 100.000 vmlinux vmlinux do_select [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux do_sigaction
+ 2 100.000 vmlinux vmlinux do_sigaction [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux do_sync_read
+ 2 100.000 vmlinux vmlinux do_sync_read [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux do_sync_write
+ 2 100.000 vmlinux vmlinux do_sync_write [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux down_read
+ 2 100.000 vmlinux vmlinux down_read [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux drain_array
+ 2 100.000 vmlinux vmlinux drain_array [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux elv_merge
+ 2 100.000 vmlinux vmlinux elv_merge [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux exec_keys
+ 2 100.000 vmlinux vmlinux exec_keys [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux find_vma_prepare
+ 2 100.000 vmlinux vmlinux find_vma_prepare [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux find_vma_prev
+ 2 100.000 vmlinux vmlinux find_vma_prev [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux inode_add_bytes
+ 2 100.000 vmlinux vmlinux inode_add_bytes [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux inotify_inode_queue_event
+ 2 100.000 vmlinux vmlinux inotify_inode_queue_event [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux ioprio_best
+ 2 100.000 vmlinux vmlinux ioprio_best [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux load_elf_binary
+ 2 100.000 vmlinux vmlinux load_elf_binary [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux lru_add_drain
+ 2 100.000 vmlinux vmlinux lru_add_drain [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux memcpy
+ 2 100.000 vmlinux vmlinux memcpy [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux mempool_free
+ 2 100.000 vmlinux vmlinux mempool_free [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux mntput_no_expire
+ 2 100.000 vmlinux vmlinux mntput_no_expire [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux page_add_file_rmap
+ 2 100.000 vmlinux vmlinux page_add_file_rmap [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux rb_erase
+ 2 100.000 vmlinux vmlinux rb_erase [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux resched_task
+ 2 100.000 vmlinux vmlinux resched_task [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux rw_verify_area
+ 2 100.000 vmlinux vmlinux rw_verify_area [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux smp_apic_timer_interrupt
+ 2 100.000 vmlinux vmlinux smp_apic_timer_interrupt [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux strnlen_user
+ 2 100.000 vmlinux vmlinux strnlen_user [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux submit_bh
+ 2 100.000 vmlinux vmlinux submit_bh [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux sys_munmap
+ 2 100.000 vmlinux vmlinux sys_munmap [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux sys_stat64
+ 2 100.000 vmlinux vmlinux sys_stat64 [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux try_to_wake_up
+ 2 100.000 vmlinux vmlinux try_to_wake_up [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux unix_stream_sendmsg
+ 2 100.000 vmlinux vmlinux unix_stream_sendmsg [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux unmap_region
+ 2 100.000 vmlinux vmlinux unmap_region [self]
+-------------------------------------------------------------------------------
+2 0.0057 vmlinux vmlinux vfs_write
+ 2 100.000 vmlinux vmlinux vfs_write [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg CreateGC
+1 0.0028 Xorg Xorg AllocateGC
+ 3 75.0000 Xorg Xorg Xalloc
+ 1 25.0000 Xorg Xorg AllocateGC [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg ProcCreateGC
+1 0.0028 Xorg Xorg CreateGC
+ 4 66.6667 Xorg Xorg AllocateGC
+ 1 16.6667 Xorg Xorg damageCreateGC
+ 1 16.6667 Xorg Xorg CreateGC [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg DeliverDeviceEvents
+1 0.0028 Xorg Xorg DeliverEventsToWindow
+ 1 50.0000 Xorg Xorg TryClientEvents
+ 1 50.0000 Xorg Xorg DeliverEventsToWindow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg CompositeRects
+1 0.0028 Xorg Xorg PictureMatchFormat
+ 1 100.000 Xorg Xorg PictureMatchFormat [self]
+-------------------------------------------------------------------------------
+ 1 2.3810 Xorg Xorg Dispatch
+ 41 97.6190 Xorg Xorg XaceCatchDispatchProc
+1 0.0028 Xorg Xorg ProcPolySegment
+ 30 71.4286 Xorg Xorg damagePolySegment
+ 6 14.2857 Xorg Xorg ValidateGC
+ 3 7.1429 Xorg Xorg dixLookupGC
+ 1 2.3810 Xorg Xorg dixLookupDrawable
+ 1 2.3810 libfb.so Xorg fbPolySegment
+ 1 2.3810 Xorg Xorg ProcPolySegment [self]
+-------------------------------------------------------------------------------
+ 5907 100.000 Xorg Xorg ProcRenderDispatch
+1 0.0028 Xorg Xorg ProcRenderTrapezoids
+ 5903 99.9154 Xorg Xorg CompositeTrapezoids
+ 4 0.0677 Xorg Xorg SecurityLookupIDByType
+ 1 0.0169 Xorg Xorg ProcRenderTrapezoids [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg mieqProcessInputEvents
+1 0.0028 Xorg Xorg ProcessOtherEvent
+ 1 100.000 Xorg Xorg ProcessOtherEvent [self]
+-------------------------------------------------------------------------------
+1 0.0028 Xorg Xorg SmartScheduleTimer
+ 1 100.000 Xorg Xorg SmartScheduleTimer [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg WriteEventsToClient
+1 0.0028 Xorg Xorg WriteToClient
+ 1 100.000 Xorg Xorg WriteToClient [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ReadRequestFromClient
+1 0.0028 Xorg Xorg _XSERVTransSocketRead
+ 1 100.000 Xorg Xorg _XSERVTransSocketRead [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg CreateGC
+1 0.0028 Xorg Xorg damageCreateGC
+ 1 100.000 Xorg Xorg damageCreateGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg FreeResource
+1 0.0028 Xorg Xorg damageDestroyGC
+ 1 100.000 Xorg Xorg damageDestroyGC [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg GetPointerEvents
+1 0.0028 Xorg Xorg getValuatorEvents
+ 1 100.000 Xorg Xorg getValuatorEvents [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg SetPictureClipRects
+1 0.0028 Xorg Xorg miChangePictureClip
+ 1 50.0000 Xorg Xorg miDestroyPictureClip
+ 1 50.0000 Xorg Xorg miChangePictureClip [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg SetPictureTransform
+1 0.0028 Xorg Xorg miChangePictureTransform
+ 1 100.000 Xorg Xorg miChangePictureTransform [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg Dispatch
+1 0.0028 Xorg Xorg miPointerUpdateSprite
+ 1 100.000 Xorg Xorg miPointerUpdateSprite [self]
+-------------------------------------------------------------------------------
+ 7 46.6667 Xorg Xorg miChangeClip
+ 8 53.3333 Xorg Xorg SetPictureClipRects
+1 0.0028 Xorg Xorg miRectsToRegion
+ 13 86.6667 Xorg Xorg miRegionCreate
+ 1 6.6667 Xorg Xorg miRegionInit
+ 1 6.6667 Xorg Xorg miRectsToRegion [self]
+-------------------------------------------------------------------------------
+1 0.0028 Xorg Xorg xf86PostMotionEvent
+ 3 75.0000 Xorg Xorg xf86PostMotionEventP
+ 1 25.0000 Xorg Xorg xf86PostMotionEvent [self]
+-------------------------------------------------------------------------------
+1 0.0028 Xorg Xorg xf86SIGIO
+ 10 90.9091 Xorg Xorg xf86SigioReadInput
+ 1 9.0909 Xorg Xorg xf86SIGIO [self]
+-------------------------------------------------------------------------------
+1 0.0028 ehci-hcd.ko ehci_hcd ehci_hub_status_data
+ 1 100.000 ehci-hcd.ko ehci_hcd ehci_hub_status_data [self]
+-------------------------------------------------------------------------------
+1 0.0028 expr expr (no symbols)
+ 1 100.000 expr expr (no symbols) [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 __ext3_journal_stop
+ 1 100.000 ext3.ko ext3 __ext3_journal_stop [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 blocks_for_truncate
+ 1 100.000 ext3.ko ext3 blocks_for_truncate [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 ext3_dirty_inode
+ 1 100.000 ext3.ko ext3 ext3_dirty_inode [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 ext3_discard_reservation
+ 1 100.000 ext3.ko ext3 ext3_discard_reservation [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 ext3_get_group_desc
+ 1 100.000 ext3.ko ext3 ext3_get_group_desc [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 ext3_get_inode_loc
+ 1 100.000 ext3.ko ext3 ext3_get_inode_loc [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 ext3_mkdir
+ 1 100.000 ext3.ko ext3 ext3_mkdir [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 ext3_orphan_del
+ 1 100.000 ext3.ko ext3 ext3_orphan_del [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 ext3_reserve_inode_write
+ 1 100.000 ext3.ko ext3 ext3_reserve_inode_write [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 ext3_setattr
+ 1 100.000 ext3.ko ext3 ext3_setattr [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 ext3_truncate
+ 1 100.000 ext3.ko ext3 ext3_truncate [self]
+-------------------------------------------------------------------------------
+1 0.0028 ext3.ko ext3 read_inode_bitmap
+ 1 100.000 ext3.ko ext3 read_inode_bitmap [self]
+-------------------------------------------------------------------------------
+1 0.0028 gawk gawk (no symbols)
+ 1 100.000 gawk gawk (no symbols) [self]
+-------------------------------------------------------------------------------
+1 0.0028 jbd.ko jbd find_revoke_record
+ 1 100.000 jbd.ko jbd find_revoke_record [self]
+-------------------------------------------------------------------------------
+1 0.0028 jbd.ko jbd journal_file_buffer
+ 1 100.000 jbd.ko jbd journal_file_buffer [self]
+-------------------------------------------------------------------------------
+1 0.0028 jbd.ko jbd journal_get_create_access
+ 1 100.000 jbd.ko jbd journal_get_create_access [self]
+-------------------------------------------------------------------------------
+1 0.0028 jbd.ko jbd journal_get_write_access
+ 1 100.000 jbd.ko jbd journal_get_write_access [self]
+-------------------------------------------------------------------------------
+1 0.0028 jbd.ko jbd journal_next_log_block
+ 1 100.000 jbd.ko jbd journal_next_log_block [self]
+-------------------------------------------------------------------------------
+1 0.0028 jbd.ko jbd journal_unfile_buffer
+ 1 100.000 jbd.ko jbd journal_unfile_buffer [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 ld-2.5.so ld-2.5.so dl_open_worker
+ 3 75.0000 ld-2.5.so ld-2.5.so _dl_check_all_versions
+1 0.0028 ld-2.5.so ld-2.5.so _dl_check_map_versions
+ 3 75.0000 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 1 25.0000 ld-2.5.so ld-2.5.so _dl_check_map_versions [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_close
+1 0.0028 ld-2.5.so ld-2.5.so _dl_close_worker
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_close_worker [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 ld-2.5.so ld-2.5.so dl_open_worker
+ 7 87.5000 ld-2.5.so ld-2.5.so _dl_start_user
+1 0.0028 ld-2.5.so ld-2.5.so _dl_init_internal
+ 7 87.5000 ld-2.5.so ld-2.5.so call_init
+ 1 12.5000 ld-2.5.so ld-2.5.so _dl_init_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so process_envvars
+1 0.0028 ld-2.5.so ld-2.5.so _dl_next_ld_env_entry
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_next_ld_env_entry [self]
+-------------------------------------------------------------------------------
+1 0.0028 ld-2.5.so ld-2.5.so _dl_runtime_resolve
+ 13 86.6667 ld-2.5.so ld-2.5.so _dl_fixup
+ 1 6.6667 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx
+ 1 6.6667 ld-2.5.so ld-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_fini
+1 0.0028 ld-2.5.so ld-2.5.so _dl_sort_fini
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_sort_fini [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+1 0.0028 ld-2.5.so ld-2.5.so _dl_sysdep_read_whole_file
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_sysdep_read_whole_file [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+1 0.0028 ld-2.5.so ld-2.5.so close
+ 1 100.000 ld-2.5.so ld-2.5.so close [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so dl_main
+1 0.0028 ld-2.5.so ld-2.5.so index
+ 1 100.000 ld-2.5.so ld-2.5.so index [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object_deps
+1 0.0028 ld-2.5.so ld-2.5.so memcpy
+ 1 100.000 ld-2.5.so ld-2.5.so memcpy [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_allocate_tls_init
+1 0.0028 ld-2.5.so ld-2.5.so mempcpy
+ 1 100.000 ld-2.5.so ld-2.5.so mempcpy [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+1 0.0028 ld-2.5.so ld-2.5.so open
+ 1 100.000 ld-2.5.so ld-2.5.so open [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 ld-2.5.so ld-2.5.so _dl_sysdep_start
+ 1 50.0000 ld-2.5.so ld-2.5.so dl_main
+1 0.0028 ld-2.5.so ld-2.5.so process_envvars
+ 1 50.0000 ld-2.5.so ld-2.5.so _dl_next_ld_env_entry
+ 1 50.0000 ld-2.5.so ld-2.5.so process_envvars [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_fini
+1 0.0028 ld-2.5.so ld-2.5.so rtld_lock_default_lock_recursive
+ 1 100.000 ld-2.5.so ld-2.5.so rtld_lock_default_lock_recursive [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_fini
+1 0.0028 ld-2.5.so ld-2.5.so rtld_lock_default_unlock_recursive
+ 1 100.000 ld-2.5.so ld-2.5.so rtld_lock_default_unlock_recursive [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+1 0.0028 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+1 0.0028 libc-2.5.so libc-2.5.so _IO_no_init
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_no_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_vfscanf
+1 0.0028 libc-2.5.so libc-2.5.so _IO_sputbackc
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_sputbackc [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so __errno_location
+ 1 100.000 libc-2.5.so libc-2.5.so __errno_location [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so __fxstat
+ 1 100.000 libc-2.5.so libc-2.5.so __fxstat [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __wcsmbs_load_conv
+1 0.0028 libc-2.5.so libc-2.5.so __gconv_lookup_cache
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_lookup_cache [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so __gconv_transform_internal_ucs2reverse
+ 1 50.0000 libc-2.5.so libc-2.5.so strnlen
+ 1 50.0000 libc-2.5.so libc-2.5.so __gconv_transform_internal_ucs2reverse [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx
+ 1 100.000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so __xstat64@@GLIBC_2.2
+ 1 100.000 libc-2.5.so libc-2.5.so __xstat64@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so _exit
+ 1 100.000 libc-2.5.so libc-2.5.so _exit [self]
+-------------------------------------------------------------------------------
+ 18 100.000 libc-2.5.so libc-2.5.so _nl_find_locale
+1 0.0028 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+ 12 66.6667 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 3 16.6667 libc-2.5.so libc-2.5.so _nl_intern_locale_data
+ 1 5.5556 libc-2.5.so libc-2.5.so qsort
+ 1 5.5556 libc-2.5.so libc-2.5.so strdup
+ 1 5.5556 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so msort_with_tmp
+1 0.0028 libc-2.5.so libc-2.5.so alias_compare
+ 1 50.0000 libc-2.5.so libc-2.5.so strcasecmp
+ 1 50.0000 libc-2.5.so libc-2.5.so alias_compare [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so xdr_rmtcall_args
+1 0.0028 libc-2.5.so libc-2.5.so clnt_broadcast
+ 1 100.000 libc-2.5.so libc-2.5.so clnt_broadcast [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so decide_maybe_mmap
+ 1 100.000 libc-2.5.so libc-2.5.so decide_maybe_mmap [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+ 1 50.0000 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so fgetpos@@GLIBC_2.2
+ 1 100.000 libc-2.5.so libc-2.5.so fgetpos@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __nss_database_lookup
+1 0.0028 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 1 25.0000 ld-2.5.so libc-2.5.so _dl_runtime_resolve
+ 1 25.0000 libc-2.5.so libc-2.5.so _IO_no_init
+ 1 25.0000 libc-2.5.so libc-2.5.so __fopen_internal
+ 1 25.0000 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so fork
+ 1 100.000 libc-2.5.so libc-2.5.so fork [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so ftruncate
+ 1 100.000 libc-2.5.so libc-2.5.so ftruncate [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+1 0.0028 libc-2.5.so libc-2.5.so geteuid
+ 1 100.000 libc-2.5.so libc-2.5.so geteuid [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so getpwuid
+1 0.0028 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 3 75.0000 libnss_compat-2.5.so libc-2.5.so _nss_compat_getpwuid_r
+ 1 25.0000 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so gettimeofday
+ 1 100.000 libc-2.5.so libc-2.5.so gettimeofday [self]
+-------------------------------------------------------------------------------
+ 1 5.5556 libc-2.5.so libc-2.5.so __fopen_internal
+ 17 94.4444 libc-2.5.so libc-2.5.so malloc
+1 0.0028 libc-2.5.so libc-2.5.so malloc_hook_ini
+ 16 88.8889 libc-2.5.so libc-2.5.so ptmalloc_init
+ 1 5.5556 libc-2.5.so libc-2.5.so malloc
+ 1 5.5556 libc-2.5.so libc-2.5.so malloc_hook_ini [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so mblen
+ 1 50.0000 libc-2.5.so libc-2.5.so mbrtowc
+ 1 50.0000 libc-2.5.so libc-2.5.so mblen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so msort_with_tmp
+1 0.0028 libc-2.5.so libc-2.5.so mempcpy
+ 1 100.000 libc-2.5.so libc-2.5.so mempcpy [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so mremap
+ 1 100.000 libc-2.5.so libc-2.5.so mremap [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so pipe
+ 1 100.000 libc-2.5.so libc-2.5.so pipe [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so vsscanf
+1 0.0028 libc-2.5.so libc-2.5.so rawmemchr
+ 1 100.000 libc-2.5.so libc-2.5.so rawmemchr [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_search_stub
+1 0.0028 libc-2.5.so libc-2.5.so re_search_internal
+ 1 50.0000 libc-2.5.so libc-2.5.so re_string_reconstruct
+ 1 50.0000 libc-2.5.so libc-2.5.so re_search_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_search_internal
+1 0.0028 libc-2.5.so libc-2.5.so re_string_reconstruct
+ 1 100.000 libc-2.5.so libc-2.5.so re_string_reconstruct [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so read
+ 1 100.000 libc-2.5.so libc-2.5.so read [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so select
+ 1 100.000 libc-2.5.so libc-2.5.so select [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so setlocale
+ 22 95.6522 libc-2.5.so libc-2.5.so _nl_find_locale
+ 1 4.3478 libc-2.5.so libc-2.5.so setlocale [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so sigaction
+ 1 100.000 libc-2.5.so libc-2.5.so sigaction [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so sigemptyset
+ 1 50.0000 libc-2.5.so libc-2.5.so memset
+ 1 50.0000 libc-2.5.so libc-2.5.so sigemptyset [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so sigismember
+ 1 100.000 libc-2.5.so libc-2.5.so sigismember [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so sprintf
+ 2 50.0000 libc-2.5.so libc-2.5.so vsprintf
+ 1 25.0000 libc-2.5.so libc-2.5.so _IO_str_init_static_internal
+ 1 25.0000 libc-2.5.so libc-2.5.so sprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so alias_compare
+1 0.0028 libc-2.5.so libc-2.5.so strcasecmp
+ 1 100.000 libc-2.5.so libc-2.5.so strcasecmp [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_find_locale
+1 0.0028 libc-2.5.so libc-2.5.so strchrnul
+ 1 100.000 libc-2.5.so libc-2.5.so strchrnul [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 libc-2.5.so libc-2.5.so vsprintf
+ 1 25.0000 libc-2.5.so libc-2.5.so glob64@@GLIBC_2.2
+ 2 50.0000 libc-2.5.so libc-2.5.so vsnprintf
+1 0.0028 libc-2.5.so libc-2.5.so vfprintf
+ 2 50.0000 libc-2.5.so libc-2.5.so _IO_padn
+ 1 25.0000 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 1 25.0000 libc-2.5.so libc-2.5.so vfprintf [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so sprintf
+1 0.0028 libc-2.5.so libc-2.5.so vsprintf
+ 1 50.0000 libc-2.5.so libc-2.5.so vfprintf
+ 1 50.0000 libc-2.5.so libc-2.5.so vsprintf [self]
+-------------------------------------------------------------------------------
+1 0.0028 libc-2.5.so libc-2.5.so write
+ 1 100.000 libc-2.5.so libc-2.5.so write [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libdl-2.5.so libdl-2.5.so .fini
+1 0.0028 libdl-2.5.so libdl-2.5.so __i686.get_pc_thunk.bx
+ 1 100.000 libdl-2.5.so libdl-2.5.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+1 0.0028 libfb.so libfb.so __i686.get_pc_thunk.cx
+ 1 100.000 libfb.so libfb.so __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+1 0.0028 libfb.so libfb.so fbPolySegment
+ 27 93.1034 libfb.so libfb.so fbPolySegment32
+ 1 3.4483 libfb.so libfb.so __i686.get_pc_thunk.bx
+ 1 3.4483 libfb.so libfb.so fbPolySegment [self]
+-------------------------------------------------------------------------------
+1 0.0028 libpam.so.0.79 libpam.so.0.79 (no symbols)
+ 1 100.000 libpam.so.0.79 libpam.so.0.79 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+1 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.cx
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+1 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+1 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchSolid
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchSolid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+1 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineAddU
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineAddU [self]
+-------------------------------------------------------------------------------
+1 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_has_client_clip
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_has_client_clip [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __write_nocancel
+1 0.0028 libpthread-2.5.so libpthread-2.5.so __pthread_disable_asynccancel
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __pthread_disable_asynccancel [self]
+-------------------------------------------------------------------------------
+1 0.0028 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel [self]
+-------------------------------------------------------------------------------
+1 0.0028 libpthread-2.5.so libpthread-2.5.so pthread_cond_signal@@GLIBC_2.3.2
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so pthread_cond_signal@@GLIBC_2.3.2 [self]
+-------------------------------------------------------------------------------
+1 0.0028 libpthread-2.5.so libpthread-2.5.so pthread_getspecific
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so pthread_getspecific [self]
+-------------------------------------------------------------------------------
+1 0.0028 libpthread-2.5.so libpthread-2.5.so pthread_self
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so pthread_self [self]
+-------------------------------------------------------------------------------
+1 0.0028 libpthread-2.5.so libpthread-2.5.so write
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so write [self]
+-------------------------------------------------------------------------------
+1 0.0028 libselinux.so.1 libselinux.so.1 (no symbols)
+ 1 100.000 libselinux.so.1 libselinux.so.1 (no symbols) [self]
+-------------------------------------------------------------------------------
+1 0.0028 uhci-hcd.ko uhci_hcd uhci_check_ports
+ 1 100.000 uhci-hcd.ko uhci_hcd uhci_check_ports [self]
+-------------------------------------------------------------------------------
+1 0.0028 uhci-hcd.ko uhci_hcd uhci_get_current_frame_number
+ 1 100.000 uhci-hcd.ko uhci_hcd uhci_get_current_frame_number [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __ata_qc_complete
+ 1 100.000 vmlinux vmlinux __ata_qc_complete [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __d_path
+ 1 100.000 vmlinux vmlinux __d_path [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __dequeue_signal
+ 1 100.000 vmlinux vmlinux __dequeue_signal [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __do_page_cache_readahead
+ 1 100.000 vmlinux vmlinux __do_page_cache_readahead [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __first_cpu
+ 1 100.000 vmlinux vmlinux __first_cpu [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __getblk
+ 1 100.000 vmlinux vmlinux __getblk [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __next_cpu
+ 1 100.000 vmlinux vmlinux __next_cpu [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __pollwait
+ 1 100.000 vmlinux vmlinux __pollwait [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __rcu_pending
+ 1 100.000 vmlinux vmlinux __rcu_pending [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __rcu_process_callbacks
+ 1 100.000 vmlinux vmlinux __rcu_process_callbacks [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __remove_shared_vm_struct
+ 1 100.000 vmlinux vmlinux __remove_shared_vm_struct [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __sigqueue_alloc
+ 1 100.000 vmlinux vmlinux __sigqueue_alloc [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __vm_enough_memory
+ 1 100.000 vmlinux vmlinux __vm_enough_memory [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __vma_link_rb
+ 1 100.000 vmlinux vmlinux __vma_link_rb [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux __wake_up
+ 1 100.000 vmlinux vmlinux __wake_up [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux account_system_time
+ 1 100.000 vmlinux vmlinux account_system_time [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux add_input_randomness
+ 1 100.000 vmlinux vmlinux add_input_randomness [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux ahci_scr_read
+ 1 100.000 vmlinux vmlinux ahci_scr_read [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux arch_unmap_area_topdown
+ 1 100.000 vmlinux vmlinux arch_unmap_area_topdown [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux as_move_to_dispatch
+ 1 100.000 vmlinux vmlinux as_move_to_dispatch [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux ata_port_abort
+ 1 100.000 vmlinux vmlinux ata_port_abort [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux ata_qc_new_init
+ 1 100.000 vmlinux vmlinux ata_qc_new_init [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux ata_scsi_queuecmd
+ 1 100.000 vmlinux vmlinux ata_scsi_queuecmd [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux bio_alloc
+ 1 100.000 vmlinux vmlinux bio_alloc [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux blk_rq_map_sg
+ 1 100.000 vmlinux vmlinux blk_rq_map_sg [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux bmap
+ 1 100.000 vmlinux vmlinux bmap [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux call_rcu
+ 1 100.000 vmlinux vmlinux call_rcu [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux common_interrupt
+ 1 100.000 vmlinux vmlinux common_interrupt [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux convert_fxsr_from_user
+ 1 100.000 vmlinux vmlinux convert_fxsr_from_user [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux copy_process
+ 1 100.000 vmlinux vmlinux copy_process [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux current_fs_time
+ 1 100.000 vmlinux vmlinux current_fs_time [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux d_lookup
+ 1 100.000 vmlinux vmlinux d_lookup [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux default_llseek
+ 1 100.000 vmlinux vmlinux default_llseek [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux device_not_available
+ 1 100.000 vmlinux vmlinux device_not_available [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux do_mpage_readpage
+ 1 100.000 vmlinux vmlinux do_mpage_readpage [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux do_mremap
+ 1 100.000 vmlinux vmlinux do_mremap [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux do_readv_writev
+ 1 100.000 vmlinux vmlinux do_readv_writev [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux do_sys_open
+ 1 100.000 vmlinux vmlinux do_sys_open [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux do_truncate
+ 1 100.000 vmlinux vmlinux do_truncate [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux do_wait
+ 1 100.000 vmlinux vmlinux do_wait [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux dummy_file_mmap
+ 1 100.000 vmlinux vmlinux dummy_file_mmap [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux dummy_socket_recvmsg
+ 1 100.000 vmlinux vmlinux dummy_socket_recvmsg [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux elv_queue_empty
+ 1 100.000 vmlinux vmlinux elv_queue_empty [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux end_buffer_async_write
+ 1 100.000 vmlinux vmlinux end_buffer_async_write [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux enqueue_task
+ 1 100.000 vmlinux vmlinux enqueue_task [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux file_move
+ 1 100.000 vmlinux vmlinux file_move [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux find_get_pages
+ 1 100.000 vmlinux vmlinux find_get_pages [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux find_mergeable_anon_vma
+ 1 100.000 vmlinux vmlinux find_mergeable_anon_vma [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux flush_old_exec
+ 1 100.000 vmlinux vmlinux flush_old_exec [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux flush_tlb_others
+ 1 100.000 vmlinux vmlinux flush_tlb_others [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux generic_file_aio_read
+ 1 100.000 vmlinux vmlinux generic_file_aio_read [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux generic_fillattr
+ 1 100.000 vmlinux vmlinux generic_fillattr [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux get_signal_to_deliver
+ 1 100.000 vmlinux vmlinux get_signal_to_deliver [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux get_task_mm
+ 1 100.000 vmlinux vmlinux get_task_mm [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux get_unused_fd
+ 1 100.000 vmlinux vmlinux get_unused_fd [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux get_write_access
+ 1 100.000 vmlinux vmlinux get_write_access [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux getname
+ 1 100.000 vmlinux vmlinux getname [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux handle_IRQ_event
+ 1 100.000 vmlinux vmlinux handle_IRQ_event [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux handle_stop_signal
+ 1 100.000 vmlinux vmlinux handle_stop_signal [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux init_buffer
+ 1 100.000 vmlinux vmlinux init_buffer [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux init_request_from_bio
+ 1 100.000 vmlinux vmlinux init_request_from_bio [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux inotify_dentry_parent_queue_event
+ 1 100.000 vmlinux vmlinux inotify_dentry_parent_queue_event [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux kobj_lookup
+ 1 100.000 vmlinux vmlinux kobj_lookup [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux kref_get
+ 1 100.000 vmlinux vmlinux kref_get [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux lookup_hash
+ 1 100.000 vmlinux vmlinux lookup_hash [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux mark_page_accessed
+ 1 100.000 vmlinux vmlinux mark_page_accessed [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux math_state_restore
+ 1 100.000 vmlinux vmlinux math_state_restore [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux may_expand_vm
+ 1 100.000 vmlinux vmlinux may_expand_vm [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux may_open
+ 1 100.000 vmlinux vmlinux may_open [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux move_page_tables
+ 1 100.000 vmlinux vmlinux move_page_tables [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux n_tty_receive_buf
+ 1 100.000 vmlinux vmlinux n_tty_receive_buf [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux no_singlestep
+ 1 100.000 vmlinux vmlinux no_singlestep [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux nr_active
+ 1 100.000 vmlinux vmlinux nr_active [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux open_namei
+ 1 100.000 vmlinux vmlinux open_namei [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux page_cache_readahead
+ 1 100.000 vmlinux vmlinux page_cache_readahead [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux pdflush
+ 1 100.000 vmlinux vmlinux pdflush [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux percpu_counter_mod
+ 1 100.000 vmlinux vmlinux percpu_counter_mod [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux prio_tree_remove
+ 1 100.000 vmlinux vmlinux prio_tree_remove [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux profile_hit
+ 1 100.000 vmlinux vmlinux profile_hit [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux profile_tick
+ 1 100.000 vmlinux vmlinux profile_tick [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux pte_alloc_one
+ 1 100.000 vmlinux vmlinux pte_alloc_one [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux put_page
+ 1 100.000 vmlinux vmlinux put_page [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux radix_tree_gang_lookup_tag
+ 1 100.000 vmlinux vmlinux radix_tree_gang_lookup_tag [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux radix_tree_preload
+ 1 100.000 vmlinux vmlinux radix_tree_preload [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux radix_tree_tag_set
+ 1 100.000 vmlinux vmlinux radix_tree_tag_set [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux raise_softirq
+ 1 100.000 vmlinux vmlinux raise_softirq [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux read_tsc
+ 1 100.000 vmlinux vmlinux read_tsc [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux recalc_task_prio
+ 1 100.000 vmlinux vmlinux recalc_task_prio [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux remove_vma
+ 1 100.000 vmlinux vmlinux remove_vma [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux reschedule_interrupt
+ 1 100.000 vmlinux vmlinux reschedule_interrupt [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux rq_init
+ 1 100.000 vmlinux vmlinux rq_init [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux run_posix_cpu_timers
+ 1 100.000 vmlinux vmlinux run_posix_cpu_timers [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux save_i387
+ 1 100.000 vmlinux vmlinux save_i387 [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux scsi_dispatch_cmd
+ 1 100.000 vmlinux vmlinux scsi_dispatch_cmd [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux scsi_get_command
+ 1 100.000 vmlinux vmlinux scsi_get_command [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux scsi_next_command
+ 1 100.000 vmlinux vmlinux scsi_next_command [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux send_group_sig_info
+ 1 100.000 vmlinux vmlinux send_group_sig_info [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux send_sigio
+ 1 100.000 vmlinux vmlinux send_sigio [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux show_vfsmnt
+ 1 100.000 vmlinux vmlinux show_vfsmnt [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sig_ignored
+ 1 100.000 vmlinux vmlinux sig_ignored [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sigprocmask
+ 1 100.000 vmlinux vmlinux sigprocmask [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux skb_queue_head
+ 1 100.000 vmlinux vmlinux skb_queue_head [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sock_alloc
+ 1 100.000 vmlinux vmlinux sock_alloc [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sock_alloc_send_skb
+ 1 100.000 vmlinux vmlinux sock_alloc_send_skb [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sr_block_open
+ 1 100.000 vmlinux vmlinux sr_block_open [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sys_execve
+ 1 100.000 vmlinux vmlinux sys_execve [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sys_gettimeofday
+ 1 100.000 vmlinux vmlinux sys_gettimeofday [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sys_mmap2
+ 1 100.000 vmlinux vmlinux sys_mmap2 [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sys_readlinkat
+ 1 100.000 vmlinux vmlinux sys_readlinkat [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sys_rt_sigprocmask
+ 1 100.000 vmlinux vmlinux sys_rt_sigprocmask [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sys_write
+ 1 100.000 vmlinux vmlinux sys_write [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux sys_writev
+ 1 100.000 vmlinux vmlinux sys_writev [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux task_rq_lock
+ 1 100.000 vmlinux vmlinux task_rq_lock [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux tcp_ack
+ 1 100.000 vmlinux vmlinux tcp_ack [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux touch_atime
+ 1 100.000 vmlinux vmlinux touch_atime [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux unlink_file_vma
+ 1 100.000 vmlinux vmlinux unlink_file_vma [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux update_process_times
+ 1 100.000 vmlinux vmlinux update_process_times [self]
+-------------------------------------------------------------------------------
+1 0.0028 vmlinux vmlinux worker_thread
+ 1 100.000 vmlinux vmlinux worker_thread [self]
+-------------------------------------------------------------------------------
+ 5903 100.000 Xorg Xorg ProcRenderTrapezoids
+0 0 Xorg Xorg CompositeTrapezoids
+ 5900 99.9322 Xorg Xorg miTrapezoids
+ 2 0.0339 Xorg Xorg ValidatePicture
+ 2 0.0339 libfb.so Xorg fbRasterizeTrapezoid
+ 0 0 Xorg Xorg CompositeTrapezoids [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg ProcessPointerEvent
+0 0 Xorg Xorg CoreProcessPointerEvent
+ 2 100.000 Xorg Xorg DeliverDeviceEvents
+ 0 0 Xorg Xorg CoreProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg CoreProcessPointerEvent
+0 0 Xorg Xorg DeliverDeviceEvents
+ 2 100.000 Xorg Xorg DeliverEventsToWindow
+ 0 0 Xorg Xorg DeliverDeviceEvents [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg FreeResource
+0 0 Xorg Xorg FreeGC
+ 3 100.000 Xorg Xorg damageDestroyClip
+ 0 0 Xorg Xorg FreeGC [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcCreateGC
+ 6 85.7143 Xorg Xorg CreateGC
+ 1 14.2857 Xorg Xorg dixLookupDrawable
+ 0 0 Xorg Xorg ProcCreateGC [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcFreeGC
+ 4 100.000 Xorg Xorg FreeResource
+ 0 0 Xorg Xorg ProcFreeGC [self]
+-------------------------------------------------------------------------------
+ 20 100.000 Xorg Xorg XaceCatchDispatchProc
+0 0 Xorg Xorg ProcSetClipRectangles
+ 16 80.0000 Xorg Xorg SetClipRects
+ 2 10.0000 Xorg Xorg dixLookupGC
+ 1 5.0000 Xorg Xorg __i686.get_pc_thunk.bx
+ 1 5.0000 libc-2.5.so Xorg memmove
+ 0 0 Xorg Xorg ProcSetClipRectangles [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg Dispatch
+0 0 Xorg Xorg ProcessInputEvents
+ 3 100.000 Xorg Xorg mieqProcessInputEvents
+ 0 0 Xorg Xorg ProcessInputEvents [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg mieqProcessInputEvents
+0 0 Xorg Xorg ProcessPointerEvent
+ 2 100.000 Xorg Xorg CoreProcessPointerEvent
+ 0 0 Xorg Xorg ProcessPointerEvent [self]
+-------------------------------------------------------------------------------
+ 11 100.000 Xorg Xorg ProcRenderSetPictureClipRectangles
+0 0 Xorg Xorg SetPictureClipRects
+ 8 72.7273 Xorg Xorg miRectsToRegion
+ 2 18.1818 Xorg Xorg miChangePictureClip
+ 1 9.0909 Xorg Xorg __i686.get_pc_thunk.bx
+ 0 0 Xorg Xorg SetPictureClipRects [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg DeliverEventsToWindow
+0 0 Xorg Xorg TryClientEvents
+ 1 100.000 Xorg Xorg WriteEventsToClient
+ 0 0 Xorg Xorg TryClientEvents [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg TryClientEvents
+0 0 Xorg Xorg WriteEventsToClient
+ 1 100.000 Xorg Xorg WriteToClient
+ 0 0 Xorg Xorg WriteEventsToClient [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg ReadRequestFromClient
+0 0 Xorg Xorg _XSERVTransRead
+ 1 50.0000 libc-2.5.so Xorg read
+ 1 50.0000 libc-2.5.so Xorg __read_nocancel
+ 0 0 Xorg Xorg _XSERVTransRead [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg _start
+ 18353 100.000 libc-2.5.so Xorg __libc_start_main
+ 0 0 Xorg Xorg _start [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg FreeGC
+0 0 Xorg Xorg damageDestroyClip
+ 2 66.6667 Xorg Xorg miDestroyClip
+ 1 33.3333 Xorg Xorg miBSCheapDestroyClip
+ 0 0 Xorg Xorg damageDestroyClip [self]
+-------------------------------------------------------------------------------
+0 0 Xorg Xorg main
+ 18337 99.8910 Xorg Xorg Dispatch
+ 9 0.0490 Xorg Xorg XaceHook
+ 5 0.0272 Xorg Xorg XaceCatchDispatchProc
+ 4 0.0218 Xorg Xorg XaceCatchExtProc
+ 2 0.0109 Xorg Xorg ReadRequestFromClient
+ 0 0 Xorg Xorg main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageDestroyClip
+0 0 Xorg Xorg miBSCheapDestroyClip
+ 1 100.000 Xorg Xorg miDestroyClip
+ 0 0 Xorg Xorg miBSCheapDestroyClip [self]
+-------------------------------------------------------------------------------
+ 267 100.000 Xorg Xorg miTrapezoids
+0 0 Xorg Xorg miCreateAlphaPicture
+ 260 97.3783 Xorg Xorg damagePolyFillRect
+ 3 1.1236 Xorg Xorg CreatePicture
+ 2 0.7491 Xorg Xorg ValidateGC
+ 1 0.3745 Xorg Xorg FreeScratchGC
+ 1 0.3745 libfb.so Xorg fbCreatePixmap
+ 0 0 Xorg Xorg miCreateAlphaPicture [self]
+-------------------------------------------------------------------------------
+ 2 15.3846 Xorg Xorg miValidatePicture
+ 11 84.6154 Xorg Xorg miComputeCompositeClip
+0 0 Xorg Xorg miIntersect
+ 13 100.000 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 0 0 Xorg Xorg miIntersect [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg miColorRects
+0 0 Xorg Xorg miRegionCopy
+ 4 100.000 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 0 0 Xorg Xorg miRegionCopy [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg ProcessInputEvents
+0 0 Xorg Xorg mieqProcessInputEvents
+ 2 66.6667 Xorg Xorg ProcessPointerEvent
+ 1 33.3333 Xorg Xorg ProcessOtherEvent
+ 0 0 Xorg Xorg mieqProcessInputEvents [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg xf86SigioReadInput
+0 0 Xorg Xorg xf86BlockSIGIO
+ 1 100.000 libc-2.5.so Xorg sigismember
+ 0 0 Xorg Xorg xf86BlockSIGIO [self]
+-------------------------------------------------------------------------------
+ 3 100.000 Xorg Xorg xf86PostMotionEvent
+0 0 Xorg Xorg xf86PostMotionEventP
+ 3 100.000 Xorg Xorg GetPointerEvents
+ 0 0 Xorg Xorg xf86PostMotionEventP [self]
+-------------------------------------------------------------------------------
+ 10 100.000 Xorg Xorg xf86SIGIO
+0 0 Xorg Xorg xf86SigioReadInput
+ 7 70.0000 mouse_drv.so Xorg MouseReadInput
+ 1 10.0000 Xorg Xorg XisbRead
+ 1 10.0000 Xorg Xorg xf86BlockSIGIO
+ 1 10.0000 mouse_drv.so Xorg MousePostEvent
+ 0 0 Xorg Xorg xf86SigioReadInput [self]
+-------------------------------------------------------------------------------
+ 18355 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 Xorg libc-2.5.so main
+ 0 0 Xorg libc-2.5.so main [self]
+-------------------------------------------------------------------------------
+ 3 6.2500 libfb.so libfb.so fbCreatePixmap
+ 45 93.7500 libfb.so libfb.so fbCreatePixmapBpp
+0 0 Xorg libfb.so AllocatePixmap
+ 0 0 Xorg libfb.so AllocatePixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbCreatePixmapBpp
+0 0 Xorg libfb.so Xalloc
+ 0 0 Xorg libfb.so Xalloc [self]
+-------------------------------------------------------------------------------
+ 26 100.000 libfb.so libfb.so fbDestroyPixmap
+0 0 Xorg libfb.so Xfree
+ 0 0 Xorg libfb.so Xfree [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 libfb.so libfb.so fbValidateGC
+ 1 12.5000 libfb.so libfb.so fbCreatePixmapBpp
+ 6 75.0000 libfb.so libfb.so fbComposite
+0 0 Xorg libfb.so __i686.get_pc_thunk.bx
+ 0 0 Xorg libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 132 100.000 libfb.so libfb.so fbComposite
+0 0 Xorg libfb.so miCompositeSourceValidate
+ 0 0 Xorg libfb.so miCompositeSourceValidate [self]
+-------------------------------------------------------------------------------
+ 40 100.000 libfb.so libfb.so fbValidateGC
+0 0 Xorg libfb.so miComputeCompositeClip
+ 0 0 Xorg libfb.so miComputeCompositeClip [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libfb.so libfb.so fbComposite
+0 0 Xorg libfb.so miSpriteSourceValidate
+ 0 0 Xorg libfb.so miSpriteSourceValidate [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libfb.so libfb.so fbValidateGC
+0 0 Xorg libfb.so miTranslateRegion
+ 0 0 Xorg libfb.so miTranslateRegion [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt
+0 0 Xorg libpixman.so.0.0.0 SmartScheduleTimer
+ 0 0 Xorg libpixman.so.0.0.0 SmartScheduleTimer [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+0 0 Xorg libpixman.so.0.0.0 xf86SIGIO
+ 0 0 Xorg libpixman.so.0.0.0 xf86SIGIO [self]
+-------------------------------------------------------------------------------
+ 1 100.000 mouse_drv.so mouse_drv.so MouseReadInput
+0 0 Xorg mouse_drv.so XisbRead
+ 0 0 Xorg mouse_drv.so XisbRead [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 mouse_drv.so mouse_drv.so MousePostEvent
+ 3 75.0000 mouse_drv.so mouse_drv.so MouseDoPostEvent
+0 0 Xorg mouse_drv.so xf86PostMotionEvent
+ 0 0 Xorg mouse_drv.so xf86PostMotionEvent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg Dispatch
+0 0 anon (tgid:6252 range:0xb7f41000-0xb7f42000) Xorg (no symbols)
+ 0 0 anon (tgid:6252 range:0xb7f41000-0xb7f42000) Xorg (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libfb.so libfb.so fbFill
+ 1 50.0000 libfb.so libfb.so fbComposite
+0 0 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libfb.so (no symbols)
+ 0 0 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libfb.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 12.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+ 1 12.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_fill
+ 1 12.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 2 25.0000 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+ 3 37.5000 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt
+0 0 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libpixman.so.0.0.0 (no symbols)
+ 0 0 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libpixman.so.0.0.0 (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 0.3846 libc-2.5.so libc-2.5.so getcwd
+ 259 99.6154 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 bash libc-2.5.so (no symbols)
+ 0 0 bash libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 cat libc-2.5.so (no symbols)
+ 0 0 cat libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 dirname libc-2.5.so (no symbols)
+ 0 0 dirname libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 expr libc-2.5.so (no symbols)
+ 0 0 expr libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 502 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 firefox-bin libc-2.5.so (no symbols)
+ 0 0 firefox-bin libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 gawk libc-2.5.so (no symbols)
+ 0 0 gawk libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 6.2500 libc-2.5.so libc-2.5.so exit
+ 15 93.7500 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 grep libc-2.5.so (no symbols)
+ 0 0 grep libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 id libc-2.5.so (no symbols)
+ 0 0 id libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so dl_main
+0 0 ld-2.5.so ld-2.5.so _dl_allocate_tls_init
+ 1 100.000 ld-2.5.so ld-2.5.so mempcpy
+ 0 0 ld-2.5.so ld-2.5.so _dl_allocate_tls_init [self]
+-------------------------------------------------------------------------------
+ 6 40.0000 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 9 60.0000 ld-2.5.so ld-2.5.so _dl_open
+0 0 ld-2.5.so ld-2.5.so _dl_catch_error
+ 9 36.0000 ld-2.5.so ld-2.5.so dl_open_worker
+ 6 24.0000 ld-2.5.so ld-2.5.so openaux
+ 6 24.0000 libdl-2.5.so ld-2.5.so dlopen_doit
+ 3 12.0000 libc-2.5.so ld-2.5.so do_dlopen
+ 1 4.0000 libdl-2.5.so ld-2.5.so dlclose_doit
+ 0 0 ld-2.5.so ld-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 3 100.000 ld-2.5.so ld-2.5.so version_check_doit
+0 0 ld-2.5.so ld-2.5.so _dl_check_all_versions
+ 3 100.000 ld-2.5.so ld-2.5.so _dl_check_map_versions
+ 0 0 ld-2.5.so ld-2.5.so _dl_check_all_versions [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_close
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_close_worker
+ 0 0 ld-2.5.so ld-2.5.so _dl_close [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_fini
+ 1 25.0000 ld-2.5.so ld-2.5.so rtld_lock_default_lock_recursive
+ 1 25.0000 ld-2.5.so ld-2.5.so rtld_lock_default_unlock_recursive
+ 1 25.0000 ld-2.5.so ld-2.5.so _dl_sort_fini
+ 1 25.0000 libdl-2.5.so ld-2.5.so .fini
+ 0 0 ld-2.5.so ld-2.5.so _dl_fini [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+0 0 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+ 1 100.000 ld-2.5.so ld-2.5.so open
+ 0 0 ld-2.5.so ld-2.5.so _dl_load_cache_lookup [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 ld-2.5.so ld-2.5.so dl_open_worker
+ 6 85.7143 ld-2.5.so ld-2.5.so openaux
+0 0 ld-2.5.so ld-2.5.so _dl_map_object
+ 3 42.8571 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+ 1 14.2857 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx
+ 1 14.2857 ld-2.5.so ld-2.5.so _dl_sysdep_read_whole_file
+ 1 14.2857 ld-2.5.so ld-2.5.so close
+ 1 14.2857 ld-2.5.so ld-2.5.so _dl_load_cache_lookup
+ 0 0 ld-2.5.so ld-2.5.so _dl_map_object [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 ld-2.5.so ld-2.5.so dl_open_worker
+ 6 85.7143 ld-2.5.so ld-2.5.so dl_main
+0 0 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 6 85.7143 ld-2.5.so ld-2.5.so _dl_catch_error
+ 1 14.2857 ld-2.5.so ld-2.5.so memcpy
+ 0 0 ld-2.5.so ld-2.5.so _dl_map_object_deps [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 ld-2.5.so ld-2.5.so do_lookup_x
+ 3 75.0000 ld-2.5.so ld-2.5.so _dl_check_map_versions
+0 0 ld-2.5.so ld-2.5.so _dl_name_match_p
+ 4 100.000 ld-2.5.so ld-2.5.so strcmp
+ 0 0 ld-2.5.so ld-2.5.so _dl_name_match_p [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+0 0 ld-2.5.so ld-2.5.so _dl_new_object
+ 1 100.000 libc-2.5.so ld-2.5.so memset
+ 0 0 ld-2.5.so ld-2.5.so _dl_new_object [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_open
+ 9 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so ld-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 3 100.000 ld-2.5.so ld-2.5.so dl_main
+0 0 ld-2.5.so ld-2.5.so _dl_receive_error
+ 3 100.000 ld-2.5.so ld-2.5.so version_check_doit
+ 0 0 ld-2.5.so ld-2.5.so _dl_receive_error [self]
+-------------------------------------------------------------------------------
+ 47 100.000 ld-2.5.so ld-2.5.so _dl_start_user
+0 0 ld-2.5.so ld-2.5.so _dl_start
+ 47 100.000 ld-2.5.so ld-2.5.so _dl_sysdep_start
+ 0 0 ld-2.5.so ld-2.5.so _dl_start [self]
+-------------------------------------------------------------------------------
+0 0 ld-2.5.so ld-2.5.so _dl_start_user
+ 47 87.0370 ld-2.5.so ld-2.5.so _dl_start
+ 7 12.9630 ld-2.5.so ld-2.5.so _dl_init_internal
+ 0 0 ld-2.5.so ld-2.5.so _dl_start_user [self]
+-------------------------------------------------------------------------------
+ 47 100.000 ld-2.5.so ld-2.5.so _dl_start
+0 0 ld-2.5.so ld-2.5.so _dl_sysdep_start
+ 46 97.8723 ld-2.5.so ld-2.5.so dl_main
+ 1 2.1277 ld-2.5.so ld-2.5.so process_envvars
+ 0 0 ld-2.5.so ld-2.5.so _dl_sysdep_start [self]
+-------------------------------------------------------------------------------
+ 7 100.000 ld-2.5.so ld-2.5.so _dl_init_internal
+0 0 ld-2.5.so ld-2.5.so call_init
+ 6 85.7143 libselinux.so.1 ld-2.5.so (no symbols)
+ 1 14.2857 libpthread-2.5.so ld-2.5.so .init
+ 0 0 ld-2.5.so ld-2.5.so call_init [self]
+-------------------------------------------------------------------------------
+ 46 100.000 ld-2.5.so ld-2.5.so _dl_sysdep_start
+0 0 ld-2.5.so ld-2.5.so dl_main
+ 34 73.9130 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 6 13.0435 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 3 6.5217 ld-2.5.so ld-2.5.so _dl_receive_error
+ 1 2.1739 ld-2.5.so ld-2.5.so process_envvars
+ 1 2.1739 ld-2.5.so ld-2.5.so index
+ 1 2.1739 ld-2.5.so ld-2.5.so _dl_allocate_tls_init
+ 0 0 ld-2.5.so ld-2.5.so dl_main [self]
+-------------------------------------------------------------------------------
+ 9 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 ld-2.5.so ld-2.5.so dl_open_worker
+ 5 55.5556 ld-2.5.so ld-2.5.so _dl_relocate_object
+ 1 11.1111 ld-2.5.so ld-2.5.so _dl_init_internal
+ 1 11.1111 ld-2.5.so ld-2.5.so _dl_check_map_versions
+ 1 11.1111 ld-2.5.so ld-2.5.so _dl_map_object_deps
+ 1 11.1111 ld-2.5.so ld-2.5.so _dl_map_object
+ 0 0 ld-2.5.so ld-2.5.so dl_open_worker [self]
+-------------------------------------------------------------------------------
+ 6 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 ld-2.5.so ld-2.5.so openaux
+ 6 100.000 ld-2.5.so ld-2.5.so _dl_map_object
+ 0 0 ld-2.5.so ld-2.5.so openaux [self]
+-------------------------------------------------------------------------------
+ 3 100.000 ld-2.5.so ld-2.5.so _dl_receive_error
+0 0 ld-2.5.so ld-2.5.so version_check_doit
+ 3 100.000 ld-2.5.so ld-2.5.so _dl_check_all_versions
+ 0 0 ld-2.5.so ld-2.5.so version_check_doit [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so __libc_dlopen_mode
+0 0 ld-2.5.so libc-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so libc-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so exit
+0 0 ld-2.5.so libc-2.5.so _dl_fini
+ 0 0 ld-2.5.so libc-2.5.so _dl_fini [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so do_dlopen
+0 0 ld-2.5.so libc-2.5.so _dl_open
+ 0 0 ld-2.5.so libc-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 2 66.6667 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 ld-2.5.so libc-2.5.so _dl_runtime_resolve
+ 0 0 ld-2.5.so libc-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libdl-2.5.so libdl-2.5.so _dlerror_run
+0 0 ld-2.5.so libdl-2.5.so _dl_catch_error
+ 0 0 ld-2.5.so libdl-2.5.so _dl_catch_error [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libdl-2.5.so libdl-2.5.so dlclose_doit
+0 0 ld-2.5.so libdl-2.5.so _dl_close
+ 0 0 ld-2.5.so libdl-2.5.so _dl_close [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libdl-2.5.so libdl-2.5.so dlopen_doit
+0 0 ld-2.5.so libdl-2.5.so _dl_open
+ 0 0 ld-2.5.so libdl-2.5.so _dl_open [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r
+ 1 50.0000 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_setpwent
+0 0 ld-2.5.so libnss_compat-2.5.so _dl_runtime_resolve
+ 0 0 ld-2.5.so libnss_compat-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so call_initialize_minimal
+0 0 ld-2.5.so libpthread-2.5.so _dl_runtime_resolve
+ 0 0 ld-2.5.so libpthread-2.5.so _dl_runtime_resolve [self]
+-------------------------------------------------------------------------------
+ 1 25.0000 Xorg Xorg Xalloc
+ 3 75.0000 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 18353 100.000 Xorg Xorg _start
+0 0 libc-2.5.so Xorg __libc_start_main
+ 0 0 libc-2.5.so Xorg __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg _XSERVTransRead
+0 0 libc-2.5.so Xorg __read_nocancel
+ 0 0 libc-2.5.so Xorg __read_nocancel [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg _int_free
+ 0 0 libc-2.5.so Xorg _int_free [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg Xalloc
+0 0 libc-2.5.so Xorg _int_malloc
+ 0 0 libc-2.5.so Xorg _int_malloc [self]
+-------------------------------------------------------------------------------
+ 1 1.2195 Xorg Xorg FreePicture
+ 2 2.4390 Xorg Xorg miRegionDestroy
+ 79 96.3415 Xorg Xorg Xfree
+0 0 libc-2.5.so Xorg free
+ 0 0 libc-2.5.so Xorg free [self]
+-------------------------------------------------------------------------------
+ 1 0.7752 Xorg Xorg AllocatePixmap
+ 2 1.5504 Xorg Xorg miRegionCreate
+ 126 97.6744 Xorg Xorg Xalloc
+0 0 libc-2.5.so Xorg malloc
+ 0 0 libc-2.5.so Xorg malloc [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg ProcSetClipRectangles
+ 2 66.6667 Xorg Xorg ReadRequestFromClient
+0 0 libc-2.5.so Xorg memmove
+ 0 0 libc-2.5.so Xorg memmove [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg _XSERVTransRead
+0 0 libc-2.5.so Xorg read
+ 0 0 libc-2.5.so Xorg read [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg xf86BlockSIGIO
+0 0 libc-2.5.so Xorg sigismember
+ 0 0 libc-2.5.so Xorg sigismember [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg Xorg SetPictureToDefaults
+0 0 libc-2.5.so Xorg strlen
+ 0 0 libc-2.5.so Xorg strlen [self]
+-------------------------------------------------------------------------------
+ 3 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 libc-2.5.so ld-2.5.so do_dlopen
+ 0 0 libc-2.5.so ld-2.5.so do_dlopen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_new_object
+0 0 libc-2.5.so ld-2.5.so memset
+ 0 0 libc-2.5.so ld-2.5.so memset [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _int_free
+0 0 libc-2.5.so libc-2.5.so .plt
+ 0 0 libc-2.5.so libc-2.5.so .plt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __uflow
+0 0 libc-2.5.so libc-2.5.so _IO_default_uflow
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so _IO_default_uflow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __fopen_internal
+0 0 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 1 100.000 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+ 0 0 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+ 2 33.3333 libc-2.5.so libc-2.5.so fgets_unlocked
+ 4 66.6667 libc-2.5.so libc-2.5.so fgets
+0 0 libc-2.5.so libc-2.5.so _IO_getline
+ 3 50.0000 libc-2.5.so libc-2.5.so memchr
+ 3 50.0000 libc-2.5.so libc-2.5.so _IO_getline_info
+ 0 0 libc-2.5.so libc-2.5.so _IO_getline [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so _IO_getline
+0 0 libc-2.5.so libc-2.5.so _IO_getline_info
+ 3 100.000 libc-2.5.so libc-2.5.so __uflow
+ 0 0 libc-2.5.so libc-2.5.so _IO_getline_info [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so vfprintf
+0 0 libc-2.5.so libc-2.5.so _IO_padn
+ 1 100.000 libc-2.5.so libc-2.5.so _IO_default_xsputn
+ 0 0 libc-2.5.so libc-2.5.so _IO_padn [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so dcgettext
+0 0 libc-2.5.so libc-2.5.so __dcigettext
+ 2 100.000 libc-2.5.so libc-2.5.so _nl_find_domain
+ 0 0 libc-2.5.so libc-2.5.so __dcigettext [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _int_malloc
+0 0 libc-2.5.so libc-2.5.so __default_morecore
+ 1 100.000 libc-2.5.so libc-2.5.so sbrk
+ 0 0 libc-2.5.so libc-2.5.so __default_morecore [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 4 80.0000 libc-2.5.so libc-2.5.so fopen64
+0 0 libc-2.5.so libc-2.5.so __fopen_internal
+ 3 60.0000 libc-2.5.so libc-2.5.so malloc
+ 1 20.0000 libc-2.5.so libc-2.5.so malloc_hook_ini
+ 1 20.0000 libc-2.5.so libc-2.5.so _IO_file_fopen@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so __fopen_internal [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_transform_internal_ucs2
+0 0 libc-2.5.so libc-2.5.so __gconv_transform_internal_ucs2
+ 1 50.0000 libc-2.5.so libc-2.5.so __gconv_transform_internal_ucs2
+ 1 50.0000 libc-2.5.so libc-2.5.so tr_reallochook
+ 0 0 libc-2.5.so libc-2.5.so __gconv_transform_internal_ucs2 [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so __nss_lookup_function
+0 0 libc-2.5.so libc-2.5.so __libc_dlopen_mode
+ 3 100.000 ld-2.5.so libc-2.5.so _dl_catch_error
+ 0 0 libc-2.5.so libc-2.5.so __libc_dlopen_mode [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so __libc_start_main
+ 18355 88.0251 Xorg libc-2.5.so main
+ 1661 7.9657 oprofiled libc-2.5.so (no symbols)
+ 502 2.4074 firefox-bin libc-2.5.so (no symbols)
+ 259 1.2421 bash libc-2.5.so (no symbols)
+ 21 0.1007 sudo libc-2.5.so (no symbols)
+ 15 0.0719 grep libc-2.5.so (no symbols)
+ 7 0.0336 ls libc-2.5.so (no symbols)
+ 4 0.0192 gawk libc-2.5.so (no symbols)
+ 4 0.0192 sleep libc-2.5.so (no symbols)
+ 3 0.0144 tr libc-2.5.so (no symbols)
+ 3 0.0144 cat libc-2.5.so (no symbols)
+ 2 0.0096 sshd libc-2.5.so (no symbols)
+ 2 0.0096 ophelp libc-2.5.so (no symbols)
+ 2 0.0096 id libc-2.5.so (no symbols)
+ 2 0.0096 dirname libc-2.5.so (no symbols)
+ 2 0.0096 mktemp libc-2.5.so (no symbols)
+ 2 0.0096 mkdir libc-2.5.so (no symbols)
+ 2 0.0096 expr libc-2.5.so (no symbols)
+ 2 0.0096 ld-2.5.so libc-2.5.so _dl_runtime_resolve
+ 1 0.0048 rm libc-2.5.so (no symbols)
+ 1 0.0048 libc-2.5.so libc-2.5.so geteuid
+ 0 0 libc-2.5.so libc-2.5.so __libc_start_main [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+0 0 libc-2.5.so libc-2.5.so __nss_database_lookup
+ 2 100.000 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+ 0 0 libc-2.5.so libc-2.5.so __nss_database_lookup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+0 0 libc-2.5.so libc-2.5.so __nss_lookup
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_lookup_function
+ 0 0 libc-2.5.so libc-2.5.so __nss_lookup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_lookup
+0 0 libc-2.5.so libc-2.5.so __nss_lookup_function
+ 3 100.000 libc-2.5.so libc-2.5.so __libc_dlopen_mode
+ 0 0 libc-2.5.so libc-2.5.so __nss_lookup_function [self]
+-------------------------------------------------------------------------------
+ 4 100.000 libc-2.5.so libc-2.5.so __nss_setent
+0 0 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+ 2 50.0000 libc-2.5.so libc-2.5.so __nss_database_lookup
+ 1 25.0000 libc-2.5.so libc-2.5.so strcmp
+ 1 25.0000 libc-2.5.so libc-2.5.so __nss_lookup
+ 0 0 libc-2.5.so libc-2.5.so __nss_passwd_lookup [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libc-2.5.so libc-2.5.so setpwent
+0 0 libc-2.5.so libc-2.5.so __nss_setent
+ 4 80.0000 libc-2.5.so libc-2.5.so __nss_passwd_lookup
+ 1 20.0000 libnss_compat-2.5.so libc-2.5.so _nss_compat_setpwent
+ 0 0 libc-2.5.so libc-2.5.so __nss_setent [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so __sigjmp_save
+ 2 100.000 libc-2.5.so libc-2.5.so sigprocmask
+ 0 0 libc-2.5.so libc-2.5.so __sigjmp_save [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so _IO_getline_info
+0 0 libc-2.5.so libc-2.5.so __uflow
+ 2 66.6667 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+ 1 33.3333 libc-2.5.so libc-2.5.so _IO_default_uflow
+ 0 0 libc-2.5.so libc-2.5.so __uflow [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so mbrtowc
+0 0 libc-2.5.so libc-2.5.so __wcsmbs_load_conv
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_lookup_cache
+ 0 0 libc-2.5.so libc-2.5.so __wcsmbs_load_conv [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so _nl_find_domain
+0 0 libc-2.5.so libc-2.5.so _nl_expand_alias
+ 2 100.000 libc-2.5.so libc-2.5.so read_alias_file
+ 0 0 libc-2.5.so libc-2.5.so _nl_expand_alias [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __dcigettext
+0 0 libc-2.5.so libc-2.5.so _nl_find_domain
+ 2 100.000 libc-2.5.so libc-2.5.so _nl_expand_alias
+ 0 0 libc-2.5.so libc-2.5.so _nl_find_domain [self]
+-------------------------------------------------------------------------------
+ 22 100.000 libc-2.5.so libc-2.5.so setlocale
+0 0 libc-2.5.so libc-2.5.so _nl_find_locale
+ 18 81.8182 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+ 2 9.0909 libc-2.5.so libc-2.5.so getenv
+ 1 4.5455 libc-2.5.so libc-2.5.so strlen
+ 1 4.5455 libc-2.5.so libc-2.5.so strchrnul
+ 0 0 libc-2.5.so libc-2.5.so _nl_find_locale [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+0 0 libc-2.5.so libc-2.5.so _nl_normalize_codeset
+ 12 100.000 libc-2.5.so libc-2.5.so malloc
+ 0 0 libc-2.5.so libc-2.5.so _nl_normalize_codeset [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so iswupper_l
+0 0 libc-2.5.so libc-2.5.so _nss_files_parse_spent
+ 1 100.000 locale-archive libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so _nss_files_parse_spent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so strnlen
+0 0 libc-2.5.so libc-2.5.so _obstack_begin
+ 1 100.000 libc-2.5.so libc-2.5.so tr_reallochook
+ 0 0 libc-2.5.so libc-2.5.so _obstack_begin [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+0 0 libc-2.5.so libc-2.5.so _res_hconf_init
+ 1 100.000 libc-2.5.so libc-2.5.so do_init
+ 0 0 libc-2.5.so libc-2.5.so _res_hconf_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so ctime
+0 0 libc-2.5.so libc-2.5.so asctime
+ 1 100.000 libc-2.5.so libc-2.5.so snprintf
+ 0 0 libc-2.5.so libc-2.5.so asctime [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so asprintf
+ 1 100.000 libc-2.5.so libc-2.5.so vasprintf
+ 0 0 libc-2.5.so libc-2.5.so asprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_compile_internal
+0 0 libc-2.5.so libc-2.5.so build_wcs_buffer
+ 1 100.000 libc-2.5.so libc-2.5.so mbrtowc
+ 0 0 libc-2.5.so libc-2.5.so build_wcs_buffer [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so calloc
+ 1 100.000 libc-2.5.so libc-2.5.so _int_malloc
+ 0 0 libc-2.5.so libc-2.5.so calloc [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so clone
+ 1 100.000 libpthread-2.5.so libc-2.5.so start_thread
+ 0 0 libc-2.5.so libc-2.5.so clone [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so ctime
+ 1 100.000 libc-2.5.so libc-2.5.so asctime
+ 0 0 libc-2.5.so libc-2.5.so ctime [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so dcgettext
+ 2 100.000 libc-2.5.so libc-2.5.so __dcigettext
+ 0 0 libc-2.5.so libc-2.5.so dcgettext [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so do_dlopen
+ 3 100.000 ld-2.5.so libc-2.5.so _dl_open
+ 0 0 libc-2.5.so libc-2.5.so do_dlopen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _res_hconf_init
+0 0 libc-2.5.so libc-2.5.so do_init
+ 1 100.000 libc-2.5.so libc-2.5.so fgets_unlocked
+ 0 0 libc-2.5.so libc-2.5.so do_init [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so do_release_shlib
+ 1 100.000 libc-2.5.so libc-2.5.so _int_free
+ 0 0 libc-2.5.so libc-2.5.so do_release_shlib [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so exit
+ 4 66.6667 ld-2.5.so libc-2.5.so _dl_fini
+ 1 16.6667 grep libc-2.5.so (no symbols)
+ 1 16.6667 sleep libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so exit [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fgets
+ 4 100.000 libc-2.5.so libc-2.5.so _IO_getline
+ 0 0 libc-2.5.so libc-2.5.so fgets [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so do_init
+0 0 libc-2.5.so libc-2.5.so fgets_unlocked
+ 2 100.000 libc-2.5.so libc-2.5.so _IO_getline
+ 0 0 libc-2.5.so libc-2.5.so fgets_unlocked [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so fopen64
+ 4 100.000 libc-2.5.so libc-2.5.so __fopen_internal
+ 0 0 libc-2.5.so libc-2.5.so fopen64 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so getcwd
+ 1 100.000 bash libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so getcwd [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so getgrgid
+ 1 100.000 libc-2.5.so libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so libc-2.5.so getgrgid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getgrgid
+0 0 libc-2.5.so libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+ 1 100.000 libnss_compat-2.5.so libc-2.5.so _nss_compat_getgrgid_r
+ 0 0 libc-2.5.so libc-2.5.so getgrgid_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so gethostbyname
+ 1 100.000 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so libc-2.5.so gethostbyname [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so gethostbyname
+0 0 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2
+ 1 100.000 libc-2.5.so libc-2.5.so _res_hconf_init
+ 0 0 libc-2.5.so libc-2.5.so gethostbyname_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so getpwuid
+ 4 100.000 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so libc-2.5.so getpwuid [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so getspnam
+ 1 100.000 libc-2.5.so libc-2.5.so getspnam_r@@GLIBC_2.1.2
+ 0 0 libc-2.5.so libc-2.5.so getspnam [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getspnam
+0 0 libc-2.5.so libc-2.5.so getspnam_r@@GLIBC_2.1.2
+ 1 100.000 libnss_compat-2.5.so libc-2.5.so _nss_compat_getspnam_r
+ 0 0 libc-2.5.so libc-2.5.so getspnam_r@@GLIBC_2.1.2 [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so glob64@@GLIBC_2.2
+ 1 100.000 libc-2.5.so libc-2.5.so vfprintf
+ 0 0 libc-2.5.so libc-2.5.so glob64@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so xdrrec_eof
+0 0 libc-2.5.so libc-2.5.so handle_i486
+ 1 100.000 libc-2.5.so libc-2.5.so pmap_rmtcall
+ 0 0 libc-2.5.so libc-2.5.so handle_i486 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so tr_reallochook
+0 0 libc-2.5.so libc-2.5.so intel_check_word
+ 1 100.000 libc-2.5.so libc-2.5.so xdrrec_eof
+ 0 0 libc-2.5.so libc-2.5.so intel_check_word [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so iswupper_l
+ 1 100.000 libc-2.5.so libc-2.5.so _nss_files_parse_spent
+ 0 0 libc-2.5.so libc-2.5.so iswupper_l [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so sysconf
+0 0 libc-2.5.so libc-2.5.so phys_pages_info
+ 1 100.000 libc-2.5.so libc-2.5.so sscanf
+ 0 0 libc-2.5.so libc-2.5.so phys_pages_info [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so handle_i486
+0 0 libc-2.5.so libc-2.5.so pmap_rmtcall
+ 1 100.000 libc-2.5.so libc-2.5.so xdr_rmtcall_args
+ 0 0 libc-2.5.so libc-2.5.so pmap_rmtcall [self]
+-------------------------------------------------------------------------------
+ 16 100.000 libc-2.5.so libc-2.5.so malloc_hook_ini
+0 0 libc-2.5.so libc-2.5.so ptmalloc_init
+ 16 100.000 libc-2.5.so libc-2.5.so _dl_addr
+ 0 0 libc-2.5.so libc-2.5.so ptmalloc_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_compile_pattern
+0 0 libc-2.5.so libc-2.5.so re_compile_internal
+ 1 100.000 libc-2.5.so libc-2.5.so build_wcs_buffer
+ 0 0 libc-2.5.so libc-2.5.so re_compile_internal [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so re_compile_pattern
+ 1 100.000 libc-2.5.so libc-2.5.so re_compile_internal
+ 0 0 libc-2.5.so libc-2.5.so re_compile_pattern [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so re_search
+ 1 100.000 libc-2.5.so libc-2.5.so re_search_stub
+ 0 0 libc-2.5.so libc-2.5.so re_search [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so re_search
+0 0 libc-2.5.so libc-2.5.so re_search_stub
+ 1 100.000 libc-2.5.so libc-2.5.so re_search_internal
+ 0 0 libc-2.5.so libc-2.5.so re_search_stub [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so _nl_expand_alias
+0 0 libc-2.5.so libc-2.5.so read_alias_file
+ 2 100.000 libc-2.5.so libc-2.5.so qsort
+ 0 0 libc-2.5.so libc-2.5.so read_alias_file [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __default_morecore
+0 0 libc-2.5.so libc-2.5.so sbrk
+ 2 100.000 libc-2.5.so libc-2.5.so brk
+ 0 0 libc-2.5.so libc-2.5.so sbrk [self]
+-------------------------------------------------------------------------------
+0 0 libc-2.5.so libc-2.5.so setpwent
+ 5 100.000 libc-2.5.so libc-2.5.so __nss_setent
+ 0 0 libc-2.5.so libc-2.5.so setpwent [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so asctime
+0 0 libc-2.5.so libc-2.5.so snprintf
+ 2 100.000 libc-2.5.so libc-2.5.so vsnprintf
+ 0 0 libc-2.5.so libc-2.5.so snprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so phys_pages_info
+0 0 libc-2.5.so libc-2.5.so sscanf
+ 3 100.000 libc-2.5.so libc-2.5.so vsscanf
+ 0 0 libc-2.5.so libc-2.5.so sscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+0 0 libc-2.5.so libc-2.5.so strdup
+ 2 100.000 libc-2.5.so libc-2.5.so malloc
+ 0 0 libc-2.5.so libc-2.5.so strdup [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __gconv_transform_internal_ucs2reverse
+0 0 libc-2.5.so libc-2.5.so strnlen
+ 1 100.000 libc-2.5.so libc-2.5.so _obstack_begin
+ 0 0 libc-2.5.so libc-2.5.so strnlen [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so qsort
+0 0 libc-2.5.so libc-2.5.so sysconf
+ 1 100.000 libc-2.5.so libc-2.5.so phys_pages_info
+ 0 0 libc-2.5.so libc-2.5.so sysconf [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so __gconv_transform_internal_ucs2
+ 1 50.0000 libc-2.5.so libc-2.5.so _obstack_begin
+0 0 libc-2.5.so libc-2.5.so tr_reallochook
+ 1 50.0000 libc-2.5.so libc-2.5.so vswprintf
+ 1 50.0000 libc-2.5.so libc-2.5.so intel_check_word
+ 0 0 libc-2.5.so libc-2.5.so tr_reallochook [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so snprintf
+0 0 libc-2.5.so libc-2.5.so vsnprintf
+ 2 66.6667 libc-2.5.so libc-2.5.so vfprintf
+ 1 33.3333 libc-2.5.so libc-2.5.so _IO_str_init_static_internal
+ 0 0 libc-2.5.so libc-2.5.so vsnprintf [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so sscanf
+0 0 libc-2.5.so libc-2.5.so vsscanf
+ 2 66.6667 libc-2.5.so libc-2.5.so _IO_vfscanf
+ 1 33.3333 libc-2.5.so libc-2.5.so rawmemchr
+ 0 0 libc-2.5.so libc-2.5.so vsscanf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so tr_reallochook
+0 0 libc-2.5.so libc-2.5.so vswprintf
+ 1 100.000 locale-archive libc-2.5.so (no symbols)
+ 0 0 libc-2.5.so libc-2.5.so vswprintf [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so pmap_rmtcall
+0 0 libc-2.5.so libc-2.5.so xdr_rmtcall_args
+ 1 100.000 libc-2.5.so libc-2.5.so clnt_broadcast
+ 0 0 libc-2.5.so libc-2.5.so xdr_rmtcall_args [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so intel_check_word
+0 0 libc-2.5.so libc-2.5.so xdrrec_eof
+ 1 100.000 libc-2.5.so libc-2.5.so handle_i486
+ 0 0 libc-2.5.so libc-2.5.so xdrrec_eof [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+0 0 libc-2.5.so libnss_compat-2.5.so __nss_lookup_function
+ 0 0 libc-2.5.so libnss_compat-2.5.so __nss_lookup_function [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getspnam_r
+0 0 libc-2.5.so libnss_compat-2.5.so fgetpos@@GLIBC_2.2
+ 0 0 libc-2.5.so libnss_compat-2.5.so fgetpos@@GLIBC_2.2 [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so internal_getgrgid_r
+0 0 libc-2.5.so libnss_compat-2.5.so fgets_unlocked
+ 0 0 libc-2.5.so libnss_compat-2.5.so fgets_unlocked [self]
+-------------------------------------------------------------------------------
+ 1 1.2346 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+ 80 98.7654 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+0 0 libc-2.5.so libpixman.so.0.0.0 memset
+ 0 0 libc-2.5.so libpixman.so.0.0.0 memset [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_fini
+0 0 libdl-2.5.so ld-2.5.so .fini
+ 0 0 libdl-2.5.so ld-2.5.so .fini [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 libdl-2.5.so ld-2.5.so dlclose_doit
+ 0 0 libdl-2.5.so ld-2.5.so dlclose_doit [self]
+-------------------------------------------------------------------------------
+ 6 100.000 ld-2.5.so ld-2.5.so _dl_catch_error
+0 0 libdl-2.5.so ld-2.5.so dlopen_doit
+ 0 0 libdl-2.5.so ld-2.5.so dlopen_doit [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so .fini
+ 1 100.000 libdl-2.5.so libdl-2.5.so __i686.get_pc_thunk.bx
+ 0 0 libdl-2.5.so libdl-2.5.so .fini [self]
+-------------------------------------------------------------------------------
+ 1 14.2857 libdl-2.5.so libdl-2.5.so dlclose
+ 6 85.7143 libdl-2.5.so libdl-2.5.so dlopen@@GLIBC_2.1
+0 0 libdl-2.5.so libdl-2.5.so _dlerror_run
+ 7 100.000 ld-2.5.so libdl-2.5.so _dl_catch_error
+ 0 0 libdl-2.5.so libdl-2.5.so _dlerror_run [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlclose
+ 1 100.000 libdl-2.5.so libdl-2.5.so _dlerror_run
+ 0 0 libdl-2.5.so libdl-2.5.so dlclose [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlclose_doit
+ 1 100.000 ld-2.5.so libdl-2.5.so _dl_close
+ 0 0 libdl-2.5.so libdl-2.5.so dlclose_doit [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlopen@@GLIBC_2.1
+ 6 100.000 libdl-2.5.so libdl-2.5.so _dlerror_run
+ 0 0 libdl-2.5.so libdl-2.5.so dlopen@@GLIBC_2.1 [self]
+-------------------------------------------------------------------------------
+0 0 libdl-2.5.so libdl-2.5.so dlopen_doit
+ 6 100.000 ld-2.5.so libdl-2.5.so _dl_open
+ 0 0 libdl-2.5.so libdl-2.5.so dlopen_doit [self]
+-------------------------------------------------------------------------------
+ 1 2.4390 Xorg Xorg miBSCheapValidateGC
+ 40 97.5610 Xorg Xorg damageComposite
+0 0 libfb.so Xorg .plt
+ 0 0 libfb.so Xorg .plt [self]
+-------------------------------------------------------------------------------
+ 1 33.3333 Xorg Xorg miBSCheapValidateGC
+ 1 33.3333 Xorg Xorg damageDestroyPixmap
+ 1 33.3333 Xorg Xorg damageComposite
+0 0 libfb.so Xorg __i686.get_pc_thunk.bx
+ 0 0 libfb.so Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg miBSCheapValidateGC
+0 0 libfb.so Xorg __i686.get_pc_thunk.cx
+ 0 0 libfb.so Xorg __i686.get_pc_thunk.cx [self]
+-------------------------------------------------------------------------------
+ 2 0.0210 Xorg Xorg CompositePicture
+ 9538 99.9790 Xorg Xorg damageComposite
+0 0 libfb.so Xorg fbComposite
+ 0 0 libfb.so Xorg fbComposite [self]
+-------------------------------------------------------------------------------
+ 3030 100.000 Xorg Xorg damageCopyArea
+0 0 libfb.so Xorg fbCopyArea
+ 0 0 libfb.so Xorg fbCopyArea [self]
+-------------------------------------------------------------------------------
+ 1 1.5385 Xorg Xorg miCompositeRects
+ 1 1.5385 Xorg Xorg miCreateAlphaPicture
+ 3 4.6154 Xorg Xorg XaceCatchDispatchProc
+ 27 41.5385 Xorg Xorg ProcCreatePixmap
+ 33 50.7692 Xorg Xorg miGlyphs
+0 0 libfb.so Xorg fbCreatePixmap
+ 0 0 libfb.so Xorg fbCreatePixmap [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg ProcCreatePixmap
+0 0 libfb.so Xorg fbCreatePixmapBpp
+ 0 0 libfb.so Xorg fbCreatePixmapBpp [self]
+-------------------------------------------------------------------------------
+ 3 9.3750 Xorg Xorg ShmDestroyPixmap
+ 29 90.6250 Xorg Xorg damageDestroyPixmap
+0 0 libfb.so Xorg fbDestroyPixmap
+ 0 0 libfb.so Xorg fbDestroyPixmap [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg damageCopyArea
+0 0 libfb.so Xorg fbDoCopy
+ 0 0 libfb.so Xorg fbDoCopy [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg damagePolyFillRect
+0 0 libfb.so Xorg fbFill
+ 0 0 libfb.so Xorg fbFill [self]
+-------------------------------------------------------------------------------
+ 8 100.000 Xorg Xorg miBSCheapValidateGC
+0 0 libfb.so Xorg fbGetGCPrivateIndex
+ 0 0 libfb.so Xorg fbGetGCPrivateIndex [self]
+-------------------------------------------------------------------------------
+ 3 0.1456 Xorg Xorg miColorRects
+ 2057 99.8544 Xorg Xorg damagePolyFillRect
+0 0 libfb.so Xorg fbPolyFillRect
+ 0 0 libfb.so Xorg fbPolyFillRect [self]
+-------------------------------------------------------------------------------
+ 1 3.4483 Xorg Xorg ProcPolySegment
+ 28 96.5517 Xorg Xorg damagePolySegment
+0 0 libfb.so Xorg fbPolySegment
+ 0 0 libfb.so Xorg fbPolySegment [self]
+-------------------------------------------------------------------------------
+ 2 0.2141 Xorg Xorg CompositeTrapezoids
+ 932 99.7859 Xorg Xorg miTrapezoids
+0 0 libfb.so Xorg fbRasterizeTrapezoid
+ 0 0 libfb.so Xorg fbRasterizeTrapezoid [self]
+-------------------------------------------------------------------------------
+ 3 4.0541 Xorg Xorg damageValidateGC
+ 71 95.9459 Xorg Xorg miBSCheapValidateGC
+0 0 libfb.so Xorg fbValidateGC
+ 0 0 libfb.so Xorg fbValidateGC [self]
+-------------------------------------------------------------------------------
+ 1 7.6923 Xorg Xorg miTrapezoids
+ 12 92.3077 Xorg Xorg damageComposite
+0 0 libfb.so Xorg image_from_pict
+ 0 0 libfb.so Xorg image_from_pict [self]
+-------------------------------------------------------------------------------
+0 0 libfb.so libfb.so fbCopyArea
+ 3028 99.9340 libfb.so libfb.so fbDoCopy
+ 2 0.0660 libfb.so libfb.so fbCopyRegion
+ 0 0 libfb.so libfb.so fbCopyArea [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so start_thread
+0 0 libnspr4.so libpthread-2.5.so (no symbols)
+ 0 0 libnspr4.so libpthread-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getgrgid_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getgrgid_r
+ 0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getgrgid_r [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getpwuid_r
+ 0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getpwuid_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so getspnam_r@@GLIBC_2.1.2
+0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getspnam_r
+ 0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_getspnam_r [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __nss_setent
+0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_setpwent
+ 0 0 libnss_compat-2.5.so libc-2.5.so _nss_compat_setpwent [self]
+-------------------------------------------------------------------------------
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getgrgid_r
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so internal_getgrgid_r
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getgrgid_r [self]
+-------------------------------------------------------------------------------
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r
+ 2 66.6667 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+ 1 33.3333 ld-2.5.so libnss_compat-2.5.so _dl_runtime_resolve
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r [self]
+-------------------------------------------------------------------------------
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getspnam_r
+ 1 100.000 libc-2.5.so libnss_compat-2.5.so fgetpos@@GLIBC_2.2
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getspnam_r [self]
+-------------------------------------------------------------------------------
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_setpwent
+ 1 100.000 ld-2.5.so libnss_compat-2.5.so _dl_runtime_resolve
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_setpwent [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getpwuid_r
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface
+ 2 100.000 libc-2.5.so libnss_compat-2.5.so __nss_lookup_function
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so init_nss_interface [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libnss_compat-2.5.so libnss_compat-2.5.so _nss_compat_getgrgid_r
+0 0 libnss_compat-2.5.so libnss_compat-2.5.so internal_getgrgid_r
+ 1 100.000 libc-2.5.so libnss_compat-2.5.so fgets_unlocked
+ 0 0 libnss_compat-2.5.so libnss_compat-2.5.so internal_getgrgid_r [self]
+-------------------------------------------------------------------------------
+ 2 100.000 Xorg Xorg miRegionDestroy
+0 0 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 Xorg __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg damageComposite
+0 0 libpixman.so.0.0.0 Xorg pixman_image_composite
+ 0 0 libpixman.so.0.0.0 Xorg pixman_image_composite [self]
+-------------------------------------------------------------------------------
+ 1 11.1111 Xorg Xorg miTrapezoids
+ 8 88.8889 Xorg Xorg damageComposite
+0 0 libpixman.so.0.0.0 Xorg pixman_image_unref
+ 0 0 libpixman.so.0.0.0 Xorg pixman_image_unref [self]
+-------------------------------------------------------------------------------
+ 4 100.000 Xorg Xorg miRegionCopy
+0 0 libpixman.so.0.0.0 Xorg pixman_region_copy
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 Xorg Xorg miDestroyClip
+ 2 33.3333 Xorg Xorg miRegionDestroy
+ 3 50.0000 Xorg Xorg miDestroyPicture
+0 0 libpixman.so.0.0.0 Xorg pixman_region_fini
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 2 22.2222 Xorg Xorg miRegionCreate
+ 7 77.7778 Xorg Xorg miRegionInit
+0 0 libpixman.so.0.0.0 Xorg pixman_region_init
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 3 50.0000 Xorg Xorg miRegionInit
+ 3 50.0000 Xorg Xorg miRegionCreate
+0 0 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_init_with_extents [self]
+-------------------------------------------------------------------------------
+ 6 31.5789 Xorg Xorg miComputeCompositeClip
+ 13 68.4211 Xorg Xorg miIntersect
+0 0 libpixman.so.0.0.0 Xorg pixman_region_intersect
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_intersect [self]
+-------------------------------------------------------------------------------
+ 6 100.000 Xorg Xorg miTranslateRegion
+0 0 libpixman.so.0.0.0 Xorg pixman_region_translate
+ 0 0 libpixman.so.0.0.0 Xorg pixman_region_translate [self]
+-------------------------------------------------------------------------------
+ 29 39.7260 libfb.so libfb.so image_from_pict
+ 44 60.2740 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so .plt
+ 0 0 libpixman.so.0.0.0 libfb.so .plt [self]
+-------------------------------------------------------------------------------
+ 2 5.7143 libfb.so libfb.so fbFill
+ 11 31.4286 libfb.so libfb.so fbComposite
+ 22 62.8571 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx
+ 0 0 libpixman.so.0.0.0 libfb.so __i686.get_pc_thunk.bx [self]
+-------------------------------------------------------------------------------
+ 10 100.000 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so allocate_image
+ 0 0 libpixman.so.0.0.0 libfb.so allocate_image [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so can_get_solid
+ 0 0 libpixman.so.0.0.0 libfb.so can_get_solid [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so fbCompositeSolidMask_nx8888x8888Cmmx
+ 0 0 libpixman.so.0.0.0 libfb.so fbCompositeSolidMask_nx8888x8888Cmmx [self]
+-------------------------------------------------------------------------------
+ 6 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so fbCompositeSrcAdd_8888x8888mmx
+ 0 0 libpixman.so.0.0.0 libfb.so fbCompositeSrcAdd_8888x8888mmx [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so fbCompositeSrc_8888x8888mmx
+ 0 0 libpixman.so.0.0.0 libfb.so fbCompositeSrc_8888x8888mmx [self]
+-------------------------------------------------------------------------------
+ 3026 100.000 libfb.so libfb.so fbCopyNtoN
+0 0 libpixman.so.0.0.0 libfb.so pixman_blt
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_blt [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_compute_composite_region
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_compute_composite_region [self]
+-------------------------------------------------------------------------------
+ 1 0.0506 libfb.so libfb.so fbPolyFillRect
+ 1975 99.9494 libfb.so libfb.so fbFill
+0 0 libpixman.so.0.0.0 libfb.so pixman_fill
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_fill [self]
+-------------------------------------------------------------------------------
+ 8 100.000 libfb.so libfb.so fbFill
+0 0 libpixman.so.0.0.0 libfb.so pixman_fill_mmx
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_fill_mmx [self]
+-------------------------------------------------------------------------------
+ 1 16.6667 libfb.so libfb.so fbComposite
+ 5 83.3333 libfb.so libfb.so fbFill
+0 0 libpixman.so.0.0.0 libfb.so pixman_have_mmx
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_have_mmx [self]
+-------------------------------------------------------------------------------
+ 7930 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_composite
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_composite [self]
+-------------------------------------------------------------------------------
+ 2 0.3503 libfb.so libfb.so fbRasterizeTrapezoid
+ 10 1.7513 libfb.so libfb.so fbComposite
+ 559 97.8984 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_create_bits
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_create_bits [self]
+-------------------------------------------------------------------------------
+ 11 14.2857 libfb.so libfb.so fbComposite
+ 66 85.7143 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_clip_region
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_clip_region [self]
+-------------------------------------------------------------------------------
+ 3 23.0769 libfb.so libfb.so fbComposite
+ 10 76.9231 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_component_alpha
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_component_alpha [self]
+-------------------------------------------------------------------------------
+ 4 15.3846 libfb.so libfb.so fbComposite
+ 22 84.6154 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_filter
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_filter [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_has_client_clip
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_has_client_clip [self]
+-------------------------------------------------------------------------------
+ 4 36.3636 libfb.so libfb.so image_from_pict
+ 7 63.6364 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_repeat
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_set_repeat [self]
+-------------------------------------------------------------------------------
+ 4 2.8986 libfb.so libfb.so fbRasterizeTrapezoid
+ 134 97.1014 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_image_unref
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_image_unref [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_line_fixed_edge_init
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_line_fixed_edge_init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_edges
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_edges [self]
+-------------------------------------------------------------------------------
+ 901 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_rasterize_trapezoid [self]
+-------------------------------------------------------------------------------
+ 12 100.000 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_region_copy
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_region_copy [self]
+-------------------------------------------------------------------------------
+ 1 3.8462 libfb.so libfb.so fbRasterizeTrapezoid
+ 8 30.7692 libfb.so libfb.so image_from_pict
+ 17 65.3846 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_region_fini
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_region_fini [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_region_init
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_region_init [self]
+-------------------------------------------------------------------------------
+ 9 100.000 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so pixman_region_init_rect
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_region_init_rect [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbComposite
+0 0 libpixman.so.0.0.0 libfb.so pixman_region_rectangles
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_region_rectangles [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libfb.so libfb.so fbRasterizeTrapezoid
+0 0 libpixman.so.0.0.0 libfb.so pixman_sample_ceil_y
+ 0 0 libpixman.so.0.0.0 libfb.so pixman_sample_ceil_y [self]
+-------------------------------------------------------------------------------
+ 5 100.000 libfb.so libfb.so image_from_pict
+0 0 libpixman.so.0.0.0 libfb.so reset_clip_region
+ 0 0 libpixman.so.0.0.0 libfb.so reset_clip_region [self]
+-------------------------------------------------------------------------------
+0 0 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt
+ 3022 99.8678 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt_mmx
+ 3 0.0991 anon (tgid:6252 range:0xb7f41000-0xb7f42000) libpixman.so.0.0.0 (no symbols)
+ 1 0.0330 Xorg libpixman.so.0.0.0 SmartScheduleTimer
+ 0 0 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt [self]
+-------------------------------------------------------------------------------
+ 1 100.000 ld-2.5.so ld-2.5.so call_init
+0 0 libpthread-2.5.so ld-2.5.so .init
+ 0 0 libpthread-2.5.so ld-2.5.so .init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so clone
+0 0 libpthread-2.5.so libc-2.5.so start_thread
+ 0 0 libpthread-2.5.so libc-2.5.so start_thread [self]
+-------------------------------------------------------------------------------
+0 0 libpthread-2.5.so libpthread-2.5.so .init
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so call_initialize_minimal
+ 0 0 libpthread-2.5.so libpthread-2.5.so .init [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libpthread-2.5.so libpthread-2.5.so .init
+0 0 libpthread-2.5.so libpthread-2.5.so call_initialize_minimal
+ 1 100.000 ld-2.5.so libpthread-2.5.so _dl_runtime_resolve
+ 0 0 libpthread-2.5.so libpthread-2.5.so call_initialize_minimal [self]
+-------------------------------------------------------------------------------
+0 0 libpthread-2.5.so libpthread-2.5.so start_thread
+ 1 100.000 libnspr4.so libpthread-2.5.so (no symbols)
+ 0 0 libpthread-2.5.so libpthread-2.5.so start_thread [self]
+-------------------------------------------------------------------------------
+ 6 100.000 ld-2.5.so ld-2.5.so call_init
+0 0 libselinux.so.1 ld-2.5.so (no symbols)
+ 0 0 libselinux.so.1 ld-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 5.7143 libc-2.5.so libc-2.5.so qsort
+ 33 94.2857 libc-2.5.so libc-2.5.so msort_with_tmp
+0 0 libxul.so libc-2.5.so (no symbols)
+ 0 0 libxul.so libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 50.0000 libc-2.5.so libc-2.5.so vswprintf
+ 1 50.0000 libc-2.5.so libc-2.5.so _nss_files_parse_spent
+0 0 locale-archive libc-2.5.so (no symbols)
+ 0 0 locale-archive libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 7 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 ls libc-2.5.so (no symbols)
+ 0 0 ls libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 mkdir libc-2.5.so (no symbols)
+ 0 0 mkdir libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 mktemp libc-2.5.so (no symbols)
+ 0 0 mktemp libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 Xorg Xorg xf86SigioReadInput
+0 0 mouse_drv.so Xorg MousePostEvent
+ 0 0 mouse_drv.so Xorg MousePostEvent [self]
+-------------------------------------------------------------------------------
+ 7 100.000 Xorg Xorg xf86SigioReadInput
+0 0 mouse_drv.so Xorg MouseReadInput
+ 0 0 mouse_drv.so Xorg MouseReadInput [self]
+-------------------------------------------------------------------------------
+ 3 100.000 mouse_drv.so mouse_drv.so MousePostEvent
+0 0 mouse_drv.so mouse_drv.so MouseDoPostEvent
+ 3 100.000 Xorg mouse_drv.so xf86PostMotionEvent
+ 0 0 mouse_drv.so mouse_drv.so MouseDoPostEvent [self]
+-------------------------------------------------------------------------------
+0 0 mouse_drv.so mouse_drv.so MouseReadInput
+ 6 85.7143 mouse_drv.so mouse_drv.so MousePostEvent
+ 1 14.2857 Xorg mouse_drv.so XisbRead
+ 0 0 mouse_drv.so mouse_drv.so MouseReadInput [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 ophelp libc-2.5.so (no symbols)
+ 0 0 ophelp libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1661 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 oprofiled libc-2.5.so (no symbols)
+ 0 0 oprofiled libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 rm libc-2.5.so (no symbols)
+ 0 0 rm libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 1 20.0000 libc-2.5.so libc-2.5.so exit
+ 4 80.0000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 sleep libc-2.5.so (no symbols)
+ 0 0 sleep libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 2 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 sshd libc-2.5.so (no symbols)
+ 0 0 sshd libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 21 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 sudo libc-2.5.so (no symbols)
+ 0 0 sudo libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
+ 3 100.000 libc-2.5.so libc-2.5.so __libc_start_main
+0 0 tr libc-2.5.so (no symbols)
+ 0 0 tr libc-2.5.so (no symbols) [self]
+-------------------------------------------------------------------------------
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+CPU_CLK_UNHALT...|
+ samples| %|
+------------------
+ 14854 42.2577 libpixman.so.0.0.0
+ 5882 16.7335 libxul.so
+ 5510 15.6752 vmlinux
+ 2511 7.1435 Xorg
+ 1826 5.1947 libc-2.5.so
+ 1618 4.6030 oprofiled
+ 689 1.9601 libfb.so
+ 495 1.4082 oprofile
+ 283 0.8051 libmozjs.so
+ 215 0.6116 libXrender.so.1.3.0
+ 148 0.4210 bash
+ 132 0.3755 libgobject-2.0.so.0.1200.12
+ 127 0.3613 jbd
+ 102 0.2902 libgdk-x11-2.0.so.0.1000.12
+ 99 0.2816 libcairo.so.2.11.3
+ 95 0.2703 libX11.so.6.2.0
+ 94 0.2674 ext3
+ 77 0.2191 libm-2.5.so
+ 74 0.2105 ld-2.5.so
+ 67 0.1906 libpthread-2.5.so
+ 62 0.1764 libglib-2.0.so.0.1200.12
+ 57 0.1622 libnspr4.so
+ 51 0.1451 libgtk-x11-2.0.so.0.1000.12
+ 29 0.0825 libgcc_s.so.1
+ 13 0.0370 sysprof_module
+ 9 0.0256 libstdc++.so.6.0.9
+ 6 0.0171 libplds4.so
+ 4 0.0114 uhci_hcd
+ 4 0.0114 usbcore
+ 3 0.0085 mouse_drv.so
+ 3 0.0085 sudo
+ 2 0.0057 e1000
+ 2 0.0057 libgthread-2.0.so.0.1200.12
+ 2 0.0057 locale-archive
+ 1 0.0028 ehci_hcd
+ 1 0.0028 libdl-2.5.so
+ 1 0.0028 libpam.so.0.79
+ 1 0.0028 libselinux.so.1
+ 1 0.0028 expr
+ 1 0.0028 gawk
--- /dev/null
+CPU: Core 2, speed 2133.49 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples % image name app name symbol name
+5882 16.7345 libxul.so libxul.so (no symbols)
+3022 8.5977 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_blt_mmx
+1826 5.1950 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSolidMask_nx8888x8888Cmmx
+1734 4.9333 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_fill_mmx
+1660 4.7228 vmlinux vmlinux get_page_from_freelist
+1618 4.6033 oprofiled oprofiled (no symbols)
+1606 4.5691 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCombineInU
+1364 3.8806 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSolidMask_nx8x8888mmx
+1159 3.2974 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch_a1
+769 2.1878 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_edges
+604 1.7184 vmlinux vmlinux page_fault
+532 1.5136 libc-2.5.so libc-2.5.so memcpy
+478 1.3599 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineOverU
+471 1.3400 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSrcAdd_8888x8888mmx
+444 1.2632 vmlinux vmlinux kunmap_atomic
+315 0.8962 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite
+313 0.8905 oprofile.ko oprofile sync_buffer
+283 0.8051 libmozjs.so libmozjs.so (no symbols)
+278 0.7909 libpixman.so.0.0.0 libpixman.so.0.0.0 fbCompositeSrc_8888x8888mmx
+249 0.7084 libc-2.5.so libc-2.5.so _int_malloc
+246 0.6999 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_fill
+245 0.6970 libfb.so libfb.so image_from_pict
+215 0.6117 libXrender.so.1.3.0 libXrender.so.1.3.0 (no symbols)
+195 0.5548 libc-2.5.so libc-2.5.so malloc
+192 0.5462 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_compute_composite_region
+186 0.5292 vmlinux vmlinux unmap_vmas
+177 0.5036 vmlinux vmlinux find_vma
+175 0.4979 vmlinux vmlinux __handle_mm_fault
+173 0.4922 vmlinux vmlinux __d_lookup
+163 0.4637 libfb.so libfb.so fbComposite
+158 0.4495 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.bx
+149 0.4239 vmlinux vmlinux __copy_to_user_ll
+148 0.4211 bash bash (no symbols)
+147 0.4182 oprofile.ko oprofile add_event_entry
+146 0.4154 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_fini
+145 0.4125 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init
+143 0.4068 Xorg Xorg __i686.get_pc_thunk.bx
+138 0.3926 libpixman.so.0.0.0 libpixman.so.0.0.0 .plt
+136 0.3869 libc-2.5.so libc-2.5.so free
+133 0.3784 libpixman.so.0.0.0 libpixman.so.0.0.0 allocate_image
+132 0.3755 libgobject-2.0.so.0.1200.12 libgobject-2.0.so.0.1200.12 (no symbols)
+127 0.3613 Xorg Xorg damageComposite
+119 0.3386 libc-2.5.so libc-2.5.so _int_free
+116 0.3300 Xorg Xorg miGlyphExtents
+116 0.3300 Xorg Xorg miGlyphs
+113 0.3215 vmlinux vmlinux __rmqueue
+106 0.3016 Xorg Xorg CompositePicture
+106 0.3016 Xorg Xorg FindGlyphRef
+105 0.2987 vmlinux vmlinux do_page_fault
+102 0.2902 libgdk-x11-2.0.so.0.1000.12 libgdk-x11-2.0.so.0.1000.12 (no symbols)
+101 0.2873 Xorg Xorg XaceHook
+99 0.2817 libcairo.so.2.11.3 libcairo.so.2.11.3 (no symbols)
+99 0.2817 vmlinux vmlinux release_pages
+98 0.2788 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_unref
+95 0.2703 libX11.so.6.2.0 libX11.so.6.2.0 (no symbols)
+94 0.2674 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_create_bits
+91 0.2589 Xorg Xorg FreeResource
+91 0.2589 Xorg Xorg miCompositeSourceValidate
+91 0.2589 libc-2.5.so libc-2.5.so memset
+91 0.2589 libfb.so libfb.so .plt
+82 0.2333 Xorg Xorg miValidatePicture
+76 0.2162 Xorg Xorg ReadRequestFromClient
+75 0.2134 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_rectangles
+71 0.2020 Xorg Xorg _CallCallbacks
+71 0.2020 Xorg Xorg miModifyPixmapHeader
+67 0.1906 libc-2.5.so libc-2.5.so memcmp
+64 0.1821 vmlinux vmlinux __link_path_walk
+63 0.1792 vmlinux vmlinux __pagevec_lru_add_active
+62 0.1764 libglib-2.0.so.0.1200.12 libglib-2.0.so.0.1200.12 (no symbols)
+62 0.1764 libm-2.5.so libm-2.5.so floor
+60 0.1707 libc-2.5.so libc-2.5.so __gconv_transform_utf8_internal
+60 0.1707 vmlinux vmlinux mwait_idle_with_hints
+57 0.1622 libnspr4.so libnspr4.so (no symbols)
+57 0.1622 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_rect
+57 0.1622 vmlinux vmlinux free_hot_cold_page
+56 0.1593 Xorg Xorg Dispatch
+55 0.1565 Xorg Xorg ValidateOnePicture
+51 0.1451 libgtk-x11-2.0.so.0.1000.12 libgtk-x11-2.0.so.0.1000.12 (no symbols)
+49 0.1394 Xorg Xorg SecurityLookupIDByType
+48 0.1366 vmlinux vmlinux page_address
+47 0.1337 Xorg Xorg miSpriteSourceValidate
+47 0.1337 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_copy
+46 0.1309 libc-2.5.so libc-2.5.so msort_with_tmp
+46 0.1309 vmlinux vmlinux lru_cache_add_active
+44 0.1252 libc-2.5.so libc-2.5.so malloc_consolidate
+44 0.1252 vmlinux vmlinux page_remove_rmap
+43 0.1223 Xorg Xorg SecurityCheckResourceIDAccess
+42 0.1195 libc-2.5.so libc-2.5.so mbrtowc
+40 0.1138 Xorg Xorg CallCallbacks
+39 0.1110 Xorg Xorg ProcRenderCompositeGlyphs
+39 0.1110 Xorg Xorg getDrawableDamageRef
+39 0.1110 vmlinux vmlinux __copy_from_user_ll
+38 0.1081 libpixman.so.0.0.0 libpixman.so.0.0.0 reset_clip_region
+37 0.1053 vmlinux vmlinux down_read_trylock
+36 0.1024 vmlinux vmlinux timer_interrupt
+35 0.0996 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.bx
+35 0.0996 oprofile.ko oprofile add_sample_entry
+34 0.0967 vmlinux vmlinux error_code
+33 0.0939 Xorg Xorg CompareISOLatin1Lowered
+33 0.0939 Xorg Xorg dixChangeGC
+33 0.0939 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_clip_region
+31 0.0882 Xorg Xorg ValidatePicture
+31 0.0882 libc-2.5.so libc-2.5.so strlen
+30 0.0854 libfb.so libfb.so fbValidateGC
+30 0.0854 vmlinux vmlinux system_call
+29 0.0825 Xorg Xorg CreatePicture
+29 0.0825 libgcc_s.so.1 libgcc_s.so.1 (no symbols)
+28 0.0797 vmlinux vmlinux __alloc_pages
+27 0.0768 libfb.so libfb.so fbPolySegment32
+27 0.0768 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_n_rects
+27 0.0768 libpthread-2.5.so libpthread-2.5.so __pthread_mutex_unlock_usercnt
+27 0.0768 vmlinux vmlinux _atomic_dec_and_lock
+27 0.0768 vmlinux vmlinux restore_nocheck
+26 0.0740 libfb.so libfb.so fbPolyFillRect
+26 0.0740 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_filter
+25 0.0711 Xorg Xorg Ones
+25 0.0711 vmlinux vmlinux find_get_page
+24 0.0683 Xorg Xorg damageReportPostOp
+24 0.0683 libfb.so libfb.so __i686.get_pc_thunk.bx
+24 0.0683 libpthread-2.5.so libpthread-2.5.so pthread_mutex_lock
+24 0.0683 vmlinux vmlinux kmem_cache_free
+24 0.0683 vmlinux vmlinux up_read
+23 0.0654 libfb.so libfb.so fbFill
+23 0.0654 vmlinux vmlinux __find_get_block
+23 0.0654 vmlinux vmlinux do_wp_page
+23 0.0654 vmlinux vmlinux free_pages_bulk
+23 0.0654 vmlinux vmlinux zone_watermark_ok
+22 0.0626 Xorg Xorg __divdi3
+22 0.0626 jbd.ko jbd journal_add_journal_head
+22 0.0626 libc-2.5.so libc-2.5.so memmove
+22 0.0626 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_have_mmx
+21 0.0597 Xorg Xorg XaceCatchExtProc
+21 0.0597 Xorg Xorg damageDestroyPixmap
+21 0.0597 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_composite_rect_general
+20 0.0569 ext3.ko ext3 ext3_mark_iloc_dirty
+19 0.0541 Xorg Xorg FreePicture
+19 0.0541 Xorg Xorg Hash
+19 0.0541 libfb.so libfb.so fbSolid
+19 0.0541 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_intersect
+19 0.0541 vmlinux vmlinux memcmp
+18 0.0512 jbd.ko jbd do_get_write_access
+18 0.0512 jbd.ko jbd journal_dirty_metadata
+18 0.0512 ld-2.5.so ld-2.5.so do_lookup_x
+17 0.0484 Xorg Xorg GetScratchGC
+17 0.0484 Xorg Xorg ShmDestroyPixmap
+17 0.0484 libc-2.5.so libc-2.5.so strstr
+16 0.0455 Xorg Xorg FindGlyph
+16 0.0455 Xorg Xorg PictureGetFilterId
+16 0.0455 Xorg Xorg ProcRenderSetPictureFilter
+16 0.0455 libc-2.5.so libc-2.5.so _dl_addr
+16 0.0455 libpixman.so.0.0.0 libpixman.so.0.0.0 __divdi3
+16 0.0455 vmlinux vmlinux __dec_zone_page_state
+15 0.0427 Xorg Xorg AllocatePixmap
+15 0.0427 Xorg Xorg SecurityCheckExtAccess
+15 0.0427 vmlinux vmlinux __copy_from_user_ll_nozero
+15 0.0427 vmlinux vmlinux do_path_lookup
+15 0.0427 vmlinux vmlinux kmem_cache_alloc
+15 0.0427 vmlinux vmlinux resume_userspace
+14 0.0398 Xorg Xorg ChangePicture
+14 0.0398 Xorg Xorg miComputeCompositeClip
+14 0.0398 Xorg Xorg miRenderColorToPixel
+14 0.0398 vmlinux vmlinux __inc_zone_state
+14 0.0398 vmlinux vmlinux cond_resched
+13 0.0370 Xorg Xorg GetExtensionEntry
+13 0.0370 Xorg Xorg ProcCreatePixmap
+13 0.0370 Xorg Xorg SetPictureToDefaults
+13 0.0370 jbd.ko jbd journal_cancel_revoke
+13 0.0370 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_component_alpha
+13 0.0370 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_not_empty
+13 0.0370 sysprof_module sysprof_module (no symbols)
+13 0.0370 vmlinux vmlinux __page_set_anon_rmap
+13 0.0370 vmlinux vmlinux block_read_full_page
+13 0.0370 vmlinux vmlinux strncpy_from_user
+13 0.0370 vmlinux vmlinux unlock_buffer
+12 0.0341 Xorg Xorg AllocatePicture
+12 0.0341 Xorg Xorg XaceCatchDispatchProc
+12 0.0341 Xorg Xorg damageValidateGC
+12 0.0341 ext3.ko ext3 ext3_new_inode
+12 0.0341 vmlinux vmlinux notifier_call_chain
+12 0.0341 vmlinux vmlinux unix_stream_recvmsg
+11 0.0313 Xorg Xorg LegalNewID
+11 0.0313 Xorg Xorg ProcRenderCreatePicture
+11 0.0313 Xorg Xorg ProcRenderFillRectangles
+11 0.0313 Xorg Xorg SetPictureFilter
+11 0.0313 Xorg Xorg Xalloc
+11 0.0313 jbd.ko jbd journal_put_journal_head
+11 0.0313 ld-2.5.so ld-2.5.so _dl_relocate_object
+11 0.0313 libc-2.5.so libc-2.5.so mkdir
+11 0.0313 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_repeat
+11 0.0313 vmlinux vmlinux apic_timer_interrupt
+11 0.0313 vmlinux vmlinux fget_light
+10 0.0285 Xorg Xorg dixLookupDrawable
+10 0.0285 jbd.ko jbd __journal_file_buffer
+10 0.0285 ld-2.5.so ld-2.5.so strcmp
+10 0.0285 vmlinux vmlinux __follow_mount
+10 0.0285 vmlinux vmlinux do_lookup
+10 0.0285 vmlinux vmlinux ret_from_exception
+10 0.0285 vmlinux vmlinux vm_normal_page
+9 0.0256 Xorg Xorg damagePolyFillRect
+9 0.0256 Xorg Xorg miLineFixedX
+9 0.0256 ld-2.5.so ld-2.5.so _dl_lookup_symbol_x
+9 0.0256 libfb.so libfb.so fbCreatePixmapBpp
+9 0.0256 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_floor_y
+9 0.0256 libstdc++.so.6.0.9 libstdc++.so.6.0.9 (no symbols)
+9 0.0256 vmlinux vmlinux dput
+8 0.0228 Xorg Xorg .plt
+8 0.0228 Xorg Xorg ValidateGC
+8 0.0228 Xorg Xorg damageChangeClip
+8 0.0228 Xorg Xorg miBSCheapValidateGC
+8 0.0228 ext3.ko ext3 ext3_get_blocks_handle
+8 0.0228 libfb.so libfb.so fbGetGCPrivateIndex
+8 0.0228 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetch
+8 0.0228 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_sample_ceil_y
+8 0.0228 vmlinux vmlinux cache_alloc_refill
+8 0.0228 vmlinux vmlinux free_pages_and_swap_cache
+8 0.0228 vmlinux vmlinux permission
+8 0.0228 vmlinux vmlinux radix_tree_lookup
+7 0.0199 Xorg Xorg AddResource
+7 0.0199 Xorg Xorg FreeScratchGC
+7 0.0199 Xorg Xorg ProcRenderChangePicture
+7 0.0199 Xorg Xorg ProcRenderDispatch
+7 0.0199 Xorg Xorg ProcRenderSetPictureTransform
+7 0.0199 Xorg Xorg miColorRects
+7 0.0199 Xorg Xorg miRegionCreate
+7 0.0199 jbd.ko jbd __journal_temp_unlink_buffer
+7 0.0199 libfb.so libfb.so fbCreatePixmap
+7 0.0199 vmlinux vmlinux __brelse
+7 0.0199 vmlinux vmlinux __mark_inode_dirty
+7 0.0199 vmlinux vmlinux bit_waitqueue
+7 0.0199 vmlinux vmlinux handle_edge_irq
+7 0.0199 vmlinux vmlinux kmap_atomic
+7 0.0199 vmlinux vmlinux schedule
+7 0.0199 vmlinux vmlinux search_extable
+6 0.0171 Xorg Xorg ProcFreePixmap
+6 0.0171 Xorg Xorg ProcRenderFreePicture
+6 0.0171 Xorg Xorg SetPictureTransform
+6 0.0171 Xorg Xorg Xfree
+6 0.0171 Xorg Xorg damageGlyphs
+6 0.0171 Xorg Xorg miCompositeRects
+6 0.0171 Xorg Xorg miRegionInit
+6 0.0171 Xorg Xorg miTranslateRegion
+6 0.0171 jbd.ko jbd journal_commit_transaction
+6 0.0171 libc-2.5.so libc-2.5.so strchr
+6 0.0171 libfb.so libfb.so fbDestroyPixmap
+6 0.0171 libm-2.5.so libm-2.5.so ceil
+6 0.0171 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_init_with_extents
+6 0.0171 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_region_translate
+6 0.0171 libplds4.so libplds4.so (no symbols)
+6 0.0171 vmlinux vmlinux __insert_inode_hash
+6 0.0171 vmlinux vmlinux __switch_to
+6 0.0171 vmlinux vmlinux anon_vma_prepare
+6 0.0171 vmlinux vmlinux clocksource_get_next
+6 0.0171 vmlinux vmlinux copy_page_range
+6 0.0171 vmlinux vmlinux d_alloc
+6 0.0171 vmlinux vmlinux find_busiest_group
+6 0.0171 vmlinux vmlinux flush_tlb_page
+6 0.0171 vmlinux vmlinux link_path_walk
+6 0.0171 vmlinux vmlinux mutex_lock
+6 0.0171 vmlinux vmlinux mutex_unlock
+6 0.0171 vmlinux vmlinux run_timer_softirq
+5 0.0142 Xorg Xorg dixDestroyPixmap
+5 0.0142 Xorg Xorg miBSCheapChangeGC
+5 0.0142 Xorg Xorg miChangeClip
+5 0.0142 Xorg Xorg miDestroyPictureClip
+5 0.0142 ext3.ko ext3 __ext3_get_inode_loc
+5 0.0142 ext3.ko ext3 ext3_try_to_allocate
+5 0.0142 libc-2.5.so libc-2.5.so _dl_mcount_wrapper_check
+5 0.0142 libc-2.5.so libc-2.5.so qsort
+5 0.0142 libc-2.5.so libc-2.5.so realloc
+5 0.0142 libpixman.so.0.0.0 libpixman.so.0.0.0 _pixman_edge_tMultiInit
+5 0.0142 vmlinux vmlinux __do_softirq
+5 0.0142 vmlinux vmlinux __kmalloc
+5 0.0142 vmlinux vmlinux __wake_up_bit
+5 0.0142 vmlinux vmlinux check_userspace
+5 0.0142 vmlinux vmlinux do_timer
+5 0.0142 vmlinux vmlinux hrtimer_run_queues
+5 0.0142 vmlinux vmlinux scheduler_tick
+5 0.0142 vmlinux vmlinux skb_dequeue
+4 0.0114 Xorg Xorg CompositeGlyphs
+4 0.0114 Xorg Xorg CompositeRects
+4 0.0114 Xorg Xorg PictureFindFilter
+4 0.0114 Xorg Xorg ProcRenderSetPictureClipRectangles
+4 0.0114 Xorg Xorg SecurityLookupIDByClass
+4 0.0114 Xorg Xorg dixLookupGC
+4 0.0114 Xorg Xorg miCreatePicture
+4 0.0114 Xorg Xorg miTrapezoidBounds
+4 0.0114 ext3.ko ext3 ext3_new_blocks
+4 0.0114 jbd.ko jbd journal_write_metadata_buffer
+4 0.0114 jbd.ko jbd start_this_handle
+4 0.0114 ld-2.5.so ld-2.5.so check_match.7793
+4 0.0114 libc-2.5.so libc-2.5.so _int_realloc
+4 0.0114 libc-2.5.so libc-2.5.so strcmp
+4 0.0114 libc-2.5.so libc-2.5.so strcpy
+4 0.0114 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_init
+4 0.0114 vmlinux vmlinux __alloc_skb
+4 0.0114 vmlinux vmlinux __block_write_full_page
+4 0.0114 vmlinux vmlinux __find_get_block_slow
+4 0.0114 vmlinux vmlinux __inc_zone_page_state
+4 0.0114 vmlinux vmlinux d_rehash
+4 0.0114 vmlinux vmlinux dnotify_parent
+4 0.0114 vmlinux vmlinux do_mmap_pgoff
+4 0.0114 vmlinux vmlinux do_softirq
+4 0.0114 vmlinux vmlinux free_block
+4 0.0114 vmlinux vmlinux rebalance_tick
+4 0.0114 vmlinux vmlinux restore_all
+4 0.0114 vmlinux vmlinux sys_mkdirat
+4 0.0114 vmlinux vmlinux syscall_exit
+4 0.0114 vmlinux vmlinux vfs_read
+4 0.0114 vmlinux vmlinux vsnprintf
+3 0.0085 Xorg Xorg ChangeGC
+3 0.0085 Xorg Xorg FlushClientCaches
+3 0.0085 Xorg Xorg PictOpValid
+3 0.0085 Xorg Xorg ProcChangeGC
+3 0.0085 Xorg Xorg ProcPolyFillRectangle
+3 0.0085 Xorg Xorg SetClipRects
+3 0.0085 Xorg Xorg __i686.get_pc_thunk.cx
+3 0.0085 Xorg Xorg damageChangeGC
+3 0.0085 Xorg Xorg damagePolySegment
+3 0.0085 Xorg Xorg miBSCheapChangeClip
+3 0.0085 Xorg Xorg miChangePicture
+3 0.0085 Xorg Xorg miDestroyClip
+3 0.0085 Xorg Xorg miRegionDestroy
+3 0.0085 ext3.ko ext3 add_dirent_to_buf
+3 0.0085 ext3.ko ext3 ext3_find_entry
+3 0.0085 ext3.ko ext3 ext3_permission
+3 0.0085 ext3.ko ext3 ext3_test_allocatable
+3 0.0085 jbd.ko jbd journal_start
+3 0.0085 jbd.ko jbd journal_stop
+3 0.0085 ld-2.5.so ld-2.5.so _dl_fixup
+3 0.0085 libc-2.5.so libc-2.5.so __xstat
+3 0.0085 libc-2.5.so libc-2.5.so _nl_intern_locale_data
+3 0.0085 libc-2.5.so libc-2.5.so memchr
+3 0.0085 libc-2.5.so libc-2.5.so sigprocmask
+3 0.0085 libfb.so libfb.so fbRasterizeTrapezoid
+3 0.0085 libm-2.5.so libm-2.5.so tan
+3 0.0085 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_edge_step
+3 0.0085 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_line_fixed_edge_init
+3 0.0085 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_rasterize_trapezoid
+3 0.0085 libpthread-2.5.so libpthread-2.5.so __i686.get_pc_thunk.bx
+3 0.0085 libpthread-2.5.so libpthread-2.5.so pthread_mutex_unlock
+3 0.0085 mouse_drv.so mouse_drv.so MousePostEvent
+3 0.0085 sudo sudo (no symbols)
+3 0.0085 vmlinux vmlinux alloc_inode
+3 0.0085 vmlinux vmlinux atomic_notifier_call_chain
+3 0.0085 vmlinux vmlinux dec_zone_page_state
+3 0.0085 vmlinux vmlinux do_IRQ
+3 0.0085 vmlinux vmlinux do_gettimeofday
+3 0.0085 vmlinux vmlinux filemap_nopage
+3 0.0085 vmlinux vmlinux find_get_pages_tag
+3 0.0085 vmlinux vmlinux find_next_bit
+3 0.0085 vmlinux vmlinux find_next_zero_bit
+3 0.0085 vmlinux vmlinux generic_permission
+3 0.0085 vmlinux vmlinux get_empty_filp
+3 0.0085 vmlinux vmlinux get_unmapped_area
+3 0.0085 vmlinux vmlinux irq_entries_start
+3 0.0085 vmlinux vmlinux irq_exit
+3 0.0085 vmlinux vmlinux kfree
+3 0.0085 vmlinux vmlinux note_interrupt
+3 0.0085 vmlinux vmlinux number
+3 0.0085 vmlinux vmlinux page_add_new_anon_rmap
+3 0.0085 vmlinux vmlinux radix_tree_tag_clear
+3 0.0085 vmlinux vmlinux rb_insert_color
+3 0.0085 vmlinux vmlinux sched_clock
+3 0.0085 vmlinux vmlinux skb_queue_tail
+3 0.0085 vmlinux vmlinux sock_aio_read
+3 0.0085 vmlinux vmlinux sock_def_readable
+3 0.0085 vmlinux vmlinux softlockup_tick
+3 0.0085 vmlinux vmlinux sys_read
+3 0.0085 vmlinux vmlinux vfs_permission
+2 0.0057 Xorg Xorg FreeScratchPixmapHeader
+2 0.0057 Xorg Xorg GetPointerEvents
+2 0.0057 Xorg Xorg GetScratchPixmapHeader
+2 0.0057 Xorg Xorg ProcCopyArea
+2 0.0057 Xorg Xorg ProcRenderComposite
+2 0.0057 Xorg Xorg XisbRead
+2 0.0057 Xorg Xorg damageCopyArea
+2 0.0057 Xorg Xorg miDestroyPicture
+2 0.0057 Xorg Xorg miTrapezoids
+2 0.0057 e1000.ko e1000 e1000_update_stats
+2 0.0057 ext3.ko ext3 ext3_add_entry
+2 0.0057 ext3.ko ext3 ext3_block_to_path
+2 0.0057 ext3.ko ext3 ext3_check_dir_entry
+2 0.0057 ext3.ko ext3 ext3_get_branch
+2 0.0057 ext3.ko ext3 ext3_journal_start_sb
+2 0.0057 ext3.ko ext3 ext3_mark_inode_dirty
+2 0.0057 ext3.ko ext3 ext3_orphan_add
+2 0.0057 ext3.ko ext3 ext3_try_to_allocate_with_rsv
+2 0.0057 jbd.ko jbd journal_clean_one_cp_list
+2 0.0057 ld-2.5.so ld-2.5.so __i686.get_pc_thunk.bx
+2 0.0057 ld-2.5.so ld-2.5.so _dl_map_object_from_fd
+2 0.0057 libc-2.5.so libc-2.5.so _IO_default_xsputn
+2 0.0057 libc-2.5.so libc-2.5.so _IO_file_underflow@@GLIBC_2.1
+2 0.0057 libc-2.5.so libc-2.5.so _IO_file_xsputn@@GLIBC_2.1
+2 0.0057 libc-2.5.so libc-2.5.so _IO_str_init_static_internal
+2 0.0057 libc-2.5.so libc-2.5.so _IO_vfscanf
+2 0.0057 libc-2.5.so libc-2.5.so __read_nocancel
+2 0.0057 libc-2.5.so libc-2.5.so brk
+2 0.0057 libc-2.5.so libc-2.5.so bsearch
+2 0.0057 libc-2.5.so libc-2.5.so getenv
+2 0.0057 libc-2.5.so libc-2.5.so strcat
+2 0.0057 libc-2.5.so libc-2.5.so vasprintf
+2 0.0057 libc-2.5.so libc-2.5.so writev
+2 0.0057 libfb.so libfb.so fbCopyNtoN
+2 0.0057 libfb.so libfb.so fbCopyRegion
+2 0.0057 libfb.so libfb.so fbDoCopy
+2 0.0057 libgthread-2.0.so.0.1200.12 libgthread-2.0.so.0.1200.12 (no symbols)
+2 0.0057 libm-2.5.so libm-2.5.so cos
+2 0.0057 libm-2.5.so libm-2.5.so floorf
+2 0.0057 libm-2.5.so libm-2.5.so sin
+2 0.0057 libpixman.so.0.0.0 libpixman.so.0.0.0 can_get_solid
+2 0.0057 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_composite_rect
+2 0.0057 libpthread-2.5.so libpthread-2.5.so __errno_location
+2 0.0057 libpthread-2.5.so libpthread-2.5.so __write_nocancel
+2 0.0057 locale-archive locale-archive (no symbols)
+2 0.0057 uhci-hcd.ko uhci_hcd uhci_scan_schedule
+2 0.0057 usbcore.ko usbcore urb_unlink
+2 0.0057 usbcore.ko usbcore usb_hcd_poll_rh_status
+2 0.0057 vmlinux vmlinux __pagevec_free
+2 0.0057 vmlinux vmlinux __path_lookup_intent_open
+2 0.0057 vmlinux vmlinux __set_page_dirty_nobuffers
+2 0.0057 vmlinux vmlinux _local_bh_enable
+2 0.0057 vmlinux vmlinux account_user_time
+2 0.0057 vmlinux vmlinux ack_ioapic_irq
+2 0.0057 vmlinux vmlinux ahci_interrupt
+2 0.0057 vmlinux vmlinux ahci_qc_issue
+2 0.0057 vmlinux vmlinux bio_alloc_bioset
+2 0.0057 vmlinux vmlinux blk_recount_segments
+2 0.0057 vmlinux vmlinux cap_vm_enough_memory
+2 0.0057 vmlinux vmlinux clear_user
+2 0.0057 vmlinux vmlinux copy_strings
+2 0.0057 vmlinux vmlinux d_instantiate
+2 0.0057 vmlinux vmlinux d_splice_alias
+2 0.0057 vmlinux vmlinux do_generic_mapping_read
+2 0.0057 vmlinux vmlinux do_munmap
+2 0.0057 vmlinux vmlinux do_notify_resume
+2 0.0057 vmlinux vmlinux do_select
+2 0.0057 vmlinux vmlinux do_sigaction
+2 0.0057 vmlinux vmlinux do_sync_read
+2 0.0057 vmlinux vmlinux do_sync_write
+2 0.0057 vmlinux vmlinux down_read
+2 0.0057 vmlinux vmlinux drain_array
+2 0.0057 vmlinux vmlinux elv_merge
+2 0.0057 vmlinux vmlinux exec_keys
+2 0.0057 vmlinux vmlinux find_vma_prepare
+2 0.0057 vmlinux vmlinux find_vma_prev
+2 0.0057 vmlinux vmlinux inode_add_bytes
+2 0.0057 vmlinux vmlinux inotify_inode_queue_event
+2 0.0057 vmlinux vmlinux ioprio_best
+2 0.0057 vmlinux vmlinux load_elf_binary
+2 0.0057 vmlinux vmlinux lru_add_drain
+2 0.0057 vmlinux vmlinux memcpy
+2 0.0057 vmlinux vmlinux mempool_free
+2 0.0057 vmlinux vmlinux mntput_no_expire
+2 0.0057 vmlinux vmlinux page_add_file_rmap
+2 0.0057 vmlinux vmlinux rb_erase
+2 0.0057 vmlinux vmlinux resched_task
+2 0.0057 vmlinux vmlinux rw_verify_area
+2 0.0057 vmlinux vmlinux smp_apic_timer_interrupt
+2 0.0057 vmlinux vmlinux strnlen_user
+2 0.0057 vmlinux vmlinux submit_bh
+2 0.0057 vmlinux vmlinux sys_munmap
+2 0.0057 vmlinux vmlinux sys_stat64
+2 0.0057 vmlinux vmlinux try_to_wake_up
+2 0.0057 vmlinux vmlinux unix_stream_sendmsg
+2 0.0057 vmlinux vmlinux unmap_region
+2 0.0057 vmlinux vmlinux vfs_write
+1 0.0028 Xorg Xorg AllocateGC
+1 0.0028 Xorg Xorg CreateGC
+1 0.0028 Xorg Xorg DeliverEventsToWindow
+1 0.0028 Xorg Xorg PictureMatchFormat
+1 0.0028 Xorg Xorg ProcPolySegment
+1 0.0028 Xorg Xorg ProcRenderTrapezoids
+1 0.0028 Xorg Xorg ProcessOtherEvent
+1 0.0028 Xorg Xorg SmartScheduleTimer
+1 0.0028 Xorg Xorg WriteToClient
+1 0.0028 Xorg Xorg _XSERVTransSocketRead
+1 0.0028 Xorg Xorg damageCreateGC
+1 0.0028 Xorg Xorg damageDestroyGC
+1 0.0028 Xorg Xorg getValuatorEvents
+1 0.0028 Xorg Xorg miChangePictureClip
+1 0.0028 Xorg Xorg miChangePictureTransform
+1 0.0028 Xorg Xorg miPointerUpdateSprite
+1 0.0028 Xorg Xorg miRectsToRegion
+1 0.0028 Xorg Xorg xf86PostMotionEvent
+1 0.0028 Xorg Xorg xf86SIGIO
+1 0.0028 ehci-hcd.ko ehci_hcd ehci_hub_status_data
+1 0.0028 expr expr (no symbols)
+1 0.0028 ext3.ko ext3 __ext3_journal_stop
+1 0.0028 ext3.ko ext3 blocks_for_truncate
+1 0.0028 ext3.ko ext3 ext3_dirty_inode
+1 0.0028 ext3.ko ext3 ext3_discard_reservation
+1 0.0028 ext3.ko ext3 ext3_get_group_desc
+1 0.0028 ext3.ko ext3 ext3_get_inode_loc
+1 0.0028 ext3.ko ext3 ext3_mkdir
+1 0.0028 ext3.ko ext3 ext3_orphan_del
+1 0.0028 ext3.ko ext3 ext3_reserve_inode_write
+1 0.0028 ext3.ko ext3 ext3_setattr
+1 0.0028 ext3.ko ext3 ext3_truncate
+1 0.0028 ext3.ko ext3 read_inode_bitmap
+1 0.0028 gawk gawk (no symbols)
+1 0.0028 jbd.ko jbd find_revoke_record
+1 0.0028 jbd.ko jbd journal_file_buffer
+1 0.0028 jbd.ko jbd journal_get_create_access
+1 0.0028 jbd.ko jbd journal_get_write_access
+1 0.0028 jbd.ko jbd journal_next_log_block
+1 0.0028 jbd.ko jbd journal_unfile_buffer
+1 0.0028 ld-2.5.so ld-2.5.so _dl_check_map_versions
+1 0.0028 ld-2.5.so ld-2.5.so _dl_close_worker
+1 0.0028 ld-2.5.so ld-2.5.so _dl_init_internal
+1 0.0028 ld-2.5.so ld-2.5.so _dl_next_ld_env_entry
+1 0.0028 ld-2.5.so ld-2.5.so _dl_runtime_resolve
+1 0.0028 ld-2.5.so ld-2.5.so _dl_sort_fini
+1 0.0028 ld-2.5.so ld-2.5.so _dl_sysdep_read_whole_file
+1 0.0028 ld-2.5.so ld-2.5.so close
+1 0.0028 ld-2.5.so ld-2.5.so index
+1 0.0028 ld-2.5.so ld-2.5.so memcpy
+1 0.0028 ld-2.5.so ld-2.5.so mempcpy
+1 0.0028 ld-2.5.so ld-2.5.so open
+1 0.0028 ld-2.5.so ld-2.5.so process_envvars
+1 0.0028 ld-2.5.so ld-2.5.so rtld_lock_default_lock_recursive
+1 0.0028 ld-2.5.so ld-2.5.so rtld_lock_default_unlock_recursive
+1 0.0028 libc-2.5.so libc-2.5.so _IO_file_close_it@@GLIBC_2.1
+1 0.0028 libc-2.5.so libc-2.5.so _IO_no_init
+1 0.0028 libc-2.5.so libc-2.5.so _IO_sputbackc
+1 0.0028 libc-2.5.so libc-2.5.so __errno_location
+1 0.0028 libc-2.5.so libc-2.5.so __fxstat
+1 0.0028 libc-2.5.so libc-2.5.so __gconv_lookup_cache
+1 0.0028 libc-2.5.so libc-2.5.so __gconv_transform_internal_ucs2reverse
+1 0.0028 libc-2.5.so libc-2.5.so __i686.get_pc_thunk.cx
+1 0.0028 libc-2.5.so libc-2.5.so __xstat64@@GLIBC_2.2
+1 0.0028 libc-2.5.so libc-2.5.so _exit
+1 0.0028 libc-2.5.so libc-2.5.so _nl_load_locale_from_archive
+1 0.0028 libc-2.5.so libc-2.5.so alias_compare
+1 0.0028 libc-2.5.so libc-2.5.so clnt_broadcast
+1 0.0028 libc-2.5.so libc-2.5.so decide_maybe_mmap
+1 0.0028 libc-2.5.so libc-2.5.so fclose@@GLIBC_2.1
+1 0.0028 libc-2.5.so libc-2.5.so fgetpos@@GLIBC_2.2
+1 0.0028 libc-2.5.so libc-2.5.so fopen@@GLIBC_2.1
+1 0.0028 libc-2.5.so libc-2.5.so fork
+1 0.0028 libc-2.5.so libc-2.5.so ftruncate
+1 0.0028 libc-2.5.so libc-2.5.so geteuid
+1 0.0028 libc-2.5.so libc-2.5.so getpwuid_r@@GLIBC_2.1.2
+1 0.0028 libc-2.5.so libc-2.5.so gettimeofday
+1 0.0028 libc-2.5.so libc-2.5.so malloc_hook_ini
+1 0.0028 libc-2.5.so libc-2.5.so mblen
+1 0.0028 libc-2.5.so libc-2.5.so mempcpy
+1 0.0028 libc-2.5.so libc-2.5.so mremap
+1 0.0028 libc-2.5.so libc-2.5.so pipe
+1 0.0028 libc-2.5.so libc-2.5.so rawmemchr
+1 0.0028 libc-2.5.so libc-2.5.so re_search_internal
+1 0.0028 libc-2.5.so libc-2.5.so re_string_reconstruct
+1 0.0028 libc-2.5.so libc-2.5.so read
+1 0.0028 libc-2.5.so libc-2.5.so select
+1 0.0028 libc-2.5.so libc-2.5.so setlocale
+1 0.0028 libc-2.5.so libc-2.5.so sigaction
+1 0.0028 libc-2.5.so libc-2.5.so sigemptyset
+1 0.0028 libc-2.5.so libc-2.5.so sigismember
+1 0.0028 libc-2.5.so libc-2.5.so sprintf
+1 0.0028 libc-2.5.so libc-2.5.so strcasecmp
+1 0.0028 libc-2.5.so libc-2.5.so strchrnul
+1 0.0028 libc-2.5.so libc-2.5.so vfprintf
+1 0.0028 libc-2.5.so libc-2.5.so vsprintf
+1 0.0028 libc-2.5.so libc-2.5.so write
+1 0.0028 libdl-2.5.so libdl-2.5.so __i686.get_pc_thunk.bx
+1 0.0028 libfb.so libfb.so __i686.get_pc_thunk.cx
+1 0.0028 libfb.so libfb.so fbPolySegment
+1 0.0028 libpam.so.0.79 libpam.so.0.79 (no symbols)
+1 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 __i686.get_pc_thunk.cx
+1 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchPixel_a8r8g8b8
+1 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 fbFetchSolid
+1 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 mmxCombineAddU
+1 0.0028 libpixman.so.0.0.0 libpixman.so.0.0.0 pixman_image_set_has_client_clip
+1 0.0028 libpthread-2.5.so libpthread-2.5.so __pthread_disable_asynccancel
+1 0.0028 libpthread-2.5.so libpthread-2.5.so __pthread_enable_asynccancel
+1 0.0028 libpthread-2.5.so libpthread-2.5.so pthread_cond_signal@@GLIBC_2.3.2
+1 0.0028 libpthread-2.5.so libpthread-2.5.so pthread_getspecific
+1 0.0028 libpthread-2.5.so libpthread-2.5.so pthread_self
+1 0.0028 libpthread-2.5.so libpthread-2.5.so write
+1 0.0028 libselinux.so.1 libselinux.so.1 (no symbols)
+1 0.0028 uhci-hcd.ko uhci_hcd uhci_check_ports
+1 0.0028 uhci-hcd.ko uhci_hcd uhci_get_current_frame_number
+1 0.0028 vmlinux vmlinux __ata_qc_complete
+1 0.0028 vmlinux vmlinux __d_path
+1 0.0028 vmlinux vmlinux __dequeue_signal
+1 0.0028 vmlinux vmlinux __do_page_cache_readahead
+1 0.0028 vmlinux vmlinux __first_cpu
+1 0.0028 vmlinux vmlinux __getblk
+1 0.0028 vmlinux vmlinux __next_cpu
+1 0.0028 vmlinux vmlinux __pollwait
+1 0.0028 vmlinux vmlinux __rcu_pending
+1 0.0028 vmlinux vmlinux __rcu_process_callbacks
+1 0.0028 vmlinux vmlinux __remove_shared_vm_struct
+1 0.0028 vmlinux vmlinux __sigqueue_alloc
+1 0.0028 vmlinux vmlinux __vm_enough_memory
+1 0.0028 vmlinux vmlinux __vma_link_rb
+1 0.0028 vmlinux vmlinux __wake_up
+1 0.0028 vmlinux vmlinux account_system_time
+1 0.0028 vmlinux vmlinux add_input_randomness
+1 0.0028 vmlinux vmlinux ahci_scr_read
+1 0.0028 vmlinux vmlinux arch_unmap_area_topdown
+1 0.0028 vmlinux vmlinux as_move_to_dispatch
+1 0.0028 vmlinux vmlinux ata_port_abort
+1 0.0028 vmlinux vmlinux ata_qc_new_init
+1 0.0028 vmlinux vmlinux ata_scsi_queuecmd
+1 0.0028 vmlinux vmlinux bio_alloc
+1 0.0028 vmlinux vmlinux blk_rq_map_sg
+1 0.0028 vmlinux vmlinux bmap
+1 0.0028 vmlinux vmlinux call_rcu
+1 0.0028 vmlinux vmlinux common_interrupt
+1 0.0028 vmlinux vmlinux convert_fxsr_from_user
+1 0.0028 vmlinux vmlinux copy_process
+1 0.0028 vmlinux vmlinux current_fs_time
+1 0.0028 vmlinux vmlinux d_lookup
+1 0.0028 vmlinux vmlinux default_llseek
+1 0.0028 vmlinux vmlinux device_not_available
+1 0.0028 vmlinux vmlinux do_mpage_readpage
+1 0.0028 vmlinux vmlinux do_mremap
+1 0.0028 vmlinux vmlinux do_readv_writev
+1 0.0028 vmlinux vmlinux do_sys_open
+1 0.0028 vmlinux vmlinux do_truncate
+1 0.0028 vmlinux vmlinux do_wait
+1 0.0028 vmlinux vmlinux dummy_file_mmap
+1 0.0028 vmlinux vmlinux dummy_socket_recvmsg
+1 0.0028 vmlinux vmlinux elv_queue_empty
+1 0.0028 vmlinux vmlinux end_buffer_async_write
+1 0.0028 vmlinux vmlinux enqueue_task
+1 0.0028 vmlinux vmlinux file_move
+1 0.0028 vmlinux vmlinux find_get_pages
+1 0.0028 vmlinux vmlinux find_mergeable_anon_vma
+1 0.0028 vmlinux vmlinux flush_old_exec
+1 0.0028 vmlinux vmlinux flush_tlb_others
+1 0.0028 vmlinux vmlinux generic_file_aio_read
+1 0.0028 vmlinux vmlinux generic_fillattr
+1 0.0028 vmlinux vmlinux get_signal_to_deliver
+1 0.0028 vmlinux vmlinux get_task_mm
+1 0.0028 vmlinux vmlinux get_unused_fd
+1 0.0028 vmlinux vmlinux get_write_access
+1 0.0028 vmlinux vmlinux getname
+1 0.0028 vmlinux vmlinux handle_IRQ_event
+1 0.0028 vmlinux vmlinux handle_stop_signal
+1 0.0028 vmlinux vmlinux init_buffer
+1 0.0028 vmlinux vmlinux init_request_from_bio
+1 0.0028 vmlinux vmlinux inotify_dentry_parent_queue_event
+1 0.0028 vmlinux vmlinux kobj_lookup
+1 0.0028 vmlinux vmlinux kref_get
+1 0.0028 vmlinux vmlinux lookup_hash
+1 0.0028 vmlinux vmlinux mark_page_accessed
+1 0.0028 vmlinux vmlinux math_state_restore
+1 0.0028 vmlinux vmlinux may_expand_vm
+1 0.0028 vmlinux vmlinux may_open
+1 0.0028 vmlinux vmlinux move_page_tables
+1 0.0028 vmlinux vmlinux n_tty_receive_buf
+1 0.0028 vmlinux vmlinux no_singlestep
+1 0.0028 vmlinux vmlinux nr_active
+1 0.0028 vmlinux vmlinux open_namei
+1 0.0028 vmlinux vmlinux page_cache_readahead
+1 0.0028 vmlinux vmlinux pdflush
+1 0.0028 vmlinux vmlinux percpu_counter_mod
+1 0.0028 vmlinux vmlinux prio_tree_remove
+1 0.0028 vmlinux vmlinux profile_hit
+1 0.0028 vmlinux vmlinux profile_tick
+1 0.0028 vmlinux vmlinux pte_alloc_one
+1 0.0028 vmlinux vmlinux put_page
+1 0.0028 vmlinux vmlinux radix_tree_gang_lookup_tag
+1 0.0028 vmlinux vmlinux radix_tree_preload
+1 0.0028 vmlinux vmlinux radix_tree_tag_set
+1 0.0028 vmlinux vmlinux raise_softirq
+1 0.0028 vmlinux vmlinux read_tsc
+1 0.0028 vmlinux vmlinux recalc_task_prio
+1 0.0028 vmlinux vmlinux remove_vma
+1 0.0028 vmlinux vmlinux reschedule_interrupt
+1 0.0028 vmlinux vmlinux rq_init
+1 0.0028 vmlinux vmlinux run_posix_cpu_timers
+1 0.0028 vmlinux vmlinux save_i387
+1 0.0028 vmlinux vmlinux scsi_dispatch_cmd
+1 0.0028 vmlinux vmlinux scsi_get_command
+1 0.0028 vmlinux vmlinux scsi_next_command
+1 0.0028 vmlinux vmlinux send_group_sig_info
+1 0.0028 vmlinux vmlinux send_sigio
+1 0.0028 vmlinux vmlinux show_vfsmnt
+1 0.0028 vmlinux vmlinux sig_ignored
+1 0.0028 vmlinux vmlinux sigprocmask
+1 0.0028 vmlinux vmlinux skb_queue_head
+1 0.0028 vmlinux vmlinux sock_alloc
+1 0.0028 vmlinux vmlinux sock_alloc_send_skb
+1 0.0028 vmlinux vmlinux sr_block_open
+1 0.0028 vmlinux vmlinux sys_execve
+1 0.0028 vmlinux vmlinux sys_gettimeofday
+1 0.0028 vmlinux vmlinux sys_mmap2
+1 0.0028 vmlinux vmlinux sys_readlinkat
+1 0.0028 vmlinux vmlinux sys_rt_sigprocmask
+1 0.0028 vmlinux vmlinux sys_write
+1 0.0028 vmlinux vmlinux sys_writev
+1 0.0028 vmlinux vmlinux task_rq_lock
+1 0.0028 vmlinux vmlinux tcp_ack
+1 0.0028 vmlinux vmlinux touch_atime
+1 0.0028 vmlinux vmlinux unlink_file_vma
+1 0.0028 vmlinux vmlinux update_process_times
+1 0.0028 vmlinux vmlinux worker_thread
--- /dev/null
+Average: 13.628
+Raw: 4,5,4,5,37,5,4,36,4,4,5,36,5,4,4,38,4,5,35,5,4,5,39,4,5,4,39,4,5,37,4,5,4,37,5,4,45,4,4,43,4,38,4,5,5,36,5,4,5,38,5,5,35,5,21,5,4,6,39,4,5,35,5,4,4,37,5,5,5,42,4,5,5,35,5,4,5,37,5,4,39,4,5,5,34,5,27,5,5,5,37,5,4,35,4,5,5,36,5,5,5,37,10,4,5,36,5,5,4,38,5,5,37,5,4,5,35,4,28,5,4,5,37,5,5,36,5,5,5,35,4,5,5,38,5,4,36,4,5,4,39,5,5,5,39,4,5,4,36,5,26,5,4,5,38,5,4,37,4,5,5,35,4,5,5,38,5,4,36,4,5,5,40,5,5,4,39,5,4,5,35,5,27,4,5,5,38,5,4,35,5,4,5,36,5,5,5,37,4,5,35,5,5,5,40,4,5,5,38,5,5,5,35,4,26,5,4,5,39,5,4,35,5,5,4,37,5,5,5,37,5,4,36,5,5,5,39,4,5,5,40,4,5,5,34,5,27,4,5,5,38,5,4,35,4,5,5,37,5,4,5,42,4,5,5,36,5,4,4,37,5,4,39,4,5,5,34,5,27,5,4,5,38,5,4,36,5,4,14,4,34,5,4,5,40,5,5,35,5,4