From 382a50b3aa2fc58cbeaa1a9974939b67d1ccd5f1 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Tue, 10 Jul 2007 18:09:29 -0700 Subject: [PATCH] Add synchronous composite blog entry --- src/bin/profile | 28 + src/exa/i965/synchronous_composite.mdwn | 199 + ...ofday-as-a-hotspot-in-I830WaitLpRing.patch | 77 + .../EXA-no-fallbacks/X.callgraph | 1721 + .../EXA-no-fallbacks/X.oprofile | 149 + .../EXA-no-fallbacks/intel_drv.callgraph | 229 + .../EXA-no-fallbacks/intel_drv.oprofile | 28 + .../EXA-no-fallbacks/libc.callgraph | 1038 + .../EXA-no-fallbacks/libc.oprofile | 98 + .../EXA-no-fallbacks/libexa.callgraph | 744 + .../EXA-no-fallbacks/libexa.oprofile | 36 + .../EXA-no-fallbacks/pixman.callgraph | 243 + .../EXA-no-fallbacks/pixman.oprofile | 42 + .../EXA-no-fallbacks/system.callgraph | 6203 ++ .../EXA-no-fallbacks/system.oprofile | 58 + .../EXA-no-fallbacks/system.symbols | 921 + .../EXA-no-fallbacks/timing | 2 + .../EXA-no-gettimeofday/X.callgraph | 1346 + .../EXA-no-gettimeofday/X.oprofile | 136 + .../EXA-no-gettimeofday/intel_drv.callgraph | 187 + .../EXA-no-gettimeofday/intel_drv.oprofile | 23 + .../EXA-no-gettimeofday/libc.callgraph | 397 + .../EXA-no-gettimeofday/libc.oprofile | 56 + .../EXA-no-gettimeofday/libexa.callgraph | 692 + .../EXA-no-gettimeofday/libexa.oprofile | 37 + .../EXA-no-gettimeofday/opannotate.source | 58298 ++++++++++++++++ .../EXA-no-gettimeofday/pixman.callgraph | 181 + .../EXA-no-gettimeofday/pixman.oprofile | 32 + .../EXA-no-gettimeofday/system.callgraph | 4230 ++ .../EXA-no-gettimeofday/system.oprofile | 46 + .../EXA-no-gettimeofday/system.symbols | 677 + .../EXA-no-gettimeofday/timing | 1 + .../synchronous_composite/EXA/X.callgraph | 1614 + .../i965/synchronous_composite/EXA/X.oprofile | 143 + .../EXA/intel_drv.callgraph | 209 + .../EXA/intel_drv.oprofile | 24 + .../synchronous_composite/EXA/libc.callgraph | 883 + .../synchronous_composite/EXA/libc.oprofile | 85 + .../EXA/libexa.callgraph | 889 + .../synchronous_composite/EXA/libexa.oprofile | 41 + .../EXA/pixman.callgraph | 275 + .../synchronous_composite/EXA/pixman.oprofile | 43 + .../EXA/system.callgraph | 5875 ++ .../synchronous_composite/EXA/system.oprofile | 52 + .../synchronous_composite/EXA/system.symbols | 848 + src/exa/i965/synchronous_composite/EXA/timing | 3 + .../synchronous_composite/NoAccel/X.callgraph | 1437 + .../synchronous_composite/NoAccel/X.oprofile | 131 + .../NoAccel/libc.callgraph | 886 + .../NoAccel/libc.oprofile | 85 + .../NoAccel/pixman.callgraph | 320 + .../NoAccel/pixman.oprofile | 54 + .../NoAccel/system.callgraph | 4548 ++ .../NoAccel/system.oprofile | 45 + .../NoAccel/system.symbols | 702 + .../i965/synchronous_composite/NoAccel/timing | 2 + 56 files changed, 97349 insertions(+) create mode 100644 src/bin/profile create mode 100644 src/exa/i965/synchronous_composite.mdwn create mode 100644 src/exa/i965/synchronous_composite/0001-Elminate-gettimeofday-as-a-hotspot-in-I830WaitLpRing.patch create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/X.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/X.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/intel_drv.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/intel_drv.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/libc.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/libc.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/libexa.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/libexa.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/pixman.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/pixman.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.symbols create mode 100644 src/exa/i965/synchronous_composite/EXA-no-fallbacks/timing create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/X.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/X.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/intel_drv.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/intel_drv.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libc.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libc.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libexa.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libexa.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/opannotate.source create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/pixman.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/pixman.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.symbols create mode 100644 src/exa/i965/synchronous_composite/EXA-no-gettimeofday/timing create mode 100644 src/exa/i965/synchronous_composite/EXA/X.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA/X.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA/intel_drv.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA/intel_drv.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA/libc.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA/libc.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA/libexa.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA/libexa.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA/pixman.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA/pixman.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA/system.callgraph create mode 100644 src/exa/i965/synchronous_composite/EXA/system.oprofile create mode 100644 src/exa/i965/synchronous_composite/EXA/system.symbols create mode 100644 src/exa/i965/synchronous_composite/EXA/timing create mode 100644 src/exa/i965/synchronous_composite/NoAccel/X.callgraph create mode 100644 src/exa/i965/synchronous_composite/NoAccel/X.oprofile create mode 100644 src/exa/i965/synchronous_composite/NoAccel/libc.callgraph create mode 100644 src/exa/i965/synchronous_composite/NoAccel/libc.oprofile create mode 100644 src/exa/i965/synchronous_composite/NoAccel/pixman.callgraph create mode 100644 src/exa/i965/synchronous_composite/NoAccel/pixman.oprofile create mode 100644 src/exa/i965/synchronous_composite/NoAccel/system.callgraph create mode 100644 src/exa/i965/synchronous_composite/NoAccel/system.oprofile create mode 100644 src/exa/i965/synchronous_composite/NoAccel/system.symbols create mode 100644 src/exa/i965/synchronous_composite/NoAccel/timing diff --git a/src/bin/profile b/src/bin/profile new file mode 100644 index 0000000..8f27eff --- /dev/null +++ b/src/bin/profile @@ -0,0 +1,28 @@ +#!/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" diff --git a/src/exa/i965/synchronous_composite.mdwn b/src/exa/i965/synchronous_composite.mdwn new file mode 100644 index 0000000..6f26840 --- /dev/null +++ b/src/exa/i965/synchronous_composite.mdwn @@ -0,0 +1,199 @@ +[[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. + +
+
NoAccel (14 ms.) system profile symbols profile
+
+
    +
  • pixman 42%
  • +
  • libxul 16%
  • +
  • vmlinux 16%
  • +
  • Xorg 7%
  • +
  • libc 5%
  • +
  • other 14%
  • +
+
+
EXA (77 ms.) system profile symbols profile
+
+ +
+
+ +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: + +
+
EXA-no-fallbacks (58 ms.) system profile symbols profile
+
+ +
+
+ +
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: + +
+
EXA-no-gettimeofday (54 ms.) system profile symbols profile
+
+ +
+
+ +
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. diff --git a/src/exa/i965/synchronous_composite/0001-Elminate-gettimeofday-as-a-hotspot-in-I830WaitLpRing.patch b/src/exa/i965/synchronous_composite/0001-Elminate-gettimeofday-as-a-hotspot-in-I830WaitLpRing.patch new file mode 100644 index 0000000..98d4dec --- /dev/null +++ b/src/exa/i965/synchronous_composite/0001-Elminate-gettimeofday-as-a-hotspot-in-I830WaitLpRing.patch @@ -0,0 +1,77 @@ +From e8c946cb56a9789ce707888a8198a8dd092cca85 Mon Sep 17 00:00:00 2001 +From: Carl Worth +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 + diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/X.callgraph b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/X.callgraph new file mode 100644 index 0000000..64db60f --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/X.callgraph @@ -0,0 +1,1721 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/X.oprofile b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/X.oprofile new file mode 100644 index 0000000..22f7781 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/X.oprofile @@ -0,0 +1,149 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/intel_drv.callgraph b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/intel_drv.callgraph new file mode 100644 index 0000000..dfc7b2e --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/intel_drv.callgraph @@ -0,0 +1,229 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/intel_drv.oprofile b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/intel_drv.oprofile new file mode 100644 index 0000000..16517df --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/intel_drv.oprofile @@ -0,0 +1,28 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libc.callgraph b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libc.callgraph new file mode 100644 index 0000000..4891265 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libc.callgraph @@ -0,0 +1,1038 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libc.oprofile b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libc.oprofile new file mode 100644 index 0000000..adccaf4 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libc.oprofile @@ -0,0 +1,98 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libexa.callgraph b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libexa.callgraph new file mode 100644 index 0000000..d460466 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libexa.callgraph @@ -0,0 +1,744 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libexa.oprofile b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libexa.oprofile new file mode 100644 index 0000000..3a1e418 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/libexa.oprofile @@ -0,0 +1,36 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/pixman.callgraph b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/pixman.callgraph new file mode 100644 index 0000000..001bdd5 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/pixman.callgraph @@ -0,0 +1,243 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/pixman.oprofile b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/pixman.oprofile new file mode 100644 index 0000000..cf24c9d --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/pixman.oprofile @@ -0,0 +1,42 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.callgraph b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.callgraph new file mode 100644 index 0000000..d3f0ea6 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.callgraph @@ -0,0 +1,6203 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.oprofile b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.oprofile new file mode 100644 index 0000000..d51dff7 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.oprofile @@ -0,0 +1,58 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.symbols b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.symbols new file mode 100644 index 0000000..e53630f --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/system.symbols @@ -0,0 +1,921 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-fallbacks/timing b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/timing new file mode 100644 index 0000000..ae3962e --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-fallbacks/timing @@ -0,0 +1,2 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/X.callgraph b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/X.callgraph new file mode 100644 index 0000000..827d4b9 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/X.callgraph @@ -0,0 +1,1346 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/X.oprofile b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/X.oprofile new file mode 100644 index 0000000..c8ef4fc --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/X.oprofile @@ -0,0 +1,136 @@ +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) diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/intel_drv.callgraph b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/intel_drv.callgraph new file mode 100644 index 0000000..59dd34b --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/intel_drv.callgraph @@ -0,0 +1,187 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/intel_drv.oprofile b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/intel_drv.oprofile new file mode 100644 index 0000000..f7638ca --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/intel_drv.oprofile @@ -0,0 +1,23 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libc.callgraph b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libc.callgraph new file mode 100644 index 0000000..d0bbb26 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libc.callgraph @@ -0,0 +1,397 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libc.oprofile b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libc.oprofile new file mode 100644 index 0000000..c6421e6 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libc.oprofile @@ -0,0 +1,56 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libexa.callgraph b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libexa.callgraph new file mode 100644 index 0000000..fcb8d12 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libexa.callgraph @@ -0,0 +1,692 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libexa.oprofile b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libexa.oprofile new file mode 100644 index 0000000..c433a3b --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/libexa.oprofile @@ -0,0 +1,37 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/opannotate.source b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/opannotate.source new file mode 100644 index 0000000..aaaa264 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/opannotate.source @@ -0,0 +1,58298 @@ +/* + * 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 characters expanded at 8-column intervals. + : */ + : + :/* + : * Authors: + : * Keith Whitwell + : * + : */ + : + :#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 + : * Eric Anholt + : * + : */ + : + :#ifdef HAVE_CONFIG_H + :#include "config.h" + :#endif + : + :#include + :#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 + :#endif + : + :#ifdef MITSHM + :#include "shmint.h" + :#endif + : + :#include + : + :#include "exa_priv.h" + :#include + :#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 + :#endif + : + :#include + : + :#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 + */ + + 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 + */ + + 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 + :#include + :#include + : + :#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 + :#include + :#include + :#include + :#include + : + :#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(y1x2 <= 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(x1x1); + : 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(x1x2); + : 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 + : * Michel Dänzer + : * + : */ + : + :#ifdef HAVE_DIX_CONFIG_H + :#include + :#endif + : + :#include + : + :#include "exa_priv.h" + :#include + :#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 + :#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 + : 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 + : + :#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 + :#endif + : + :#include + : + :#include + :#include "scrnintstr.h" + :#include "windowstr.h" + :#include + :#include "dixfontstr.h" + :#include + :#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 characters expanded at 8-column intervals. + : */ + : + :/* + : * Authors: Jeff Hartmann + : * Abraham van der Merwe + : * David Dawes + : * Alan Hourihane + : */ + : + :/* + : * Mode handling is based on the VESA driver written by: + : * Paulo César Pereira de Andrade + : */ + : + :/* + : * Changes: + : * + : * 23/08/2001 Abraham van der Merwe + : * - 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 + : * - 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 + :#include + :#include + :#include + :#include + :#include + : + :#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 + :#include "fb.h" + :#include "miscstruct.h" + :#include "dixstruct.h" + :#include "xf86xv.h" + :#include + :#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 + :#include + :#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 + :#endif + : + :# include + :# include + :# include "misc.h" + :# include "pixmapstr.h" + :# include "input.h" + :# include "mi.h" + :# include "cursorstr.h" + :# include + :# include "scrnintstr.h" + :# include "colormapst.h" + :# include "windowstr.h" + :# include "gcstruct.h" + :# include "mipointer.h" + :# include "mispritest.h" + :# include "dixfontstr.h" + :# include + : + :#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 + :#endif + : + :#include + : + :#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 + */ + + 125 0.1362 : + /* msort_with_tmp total: 125 0.1362 */ +/* + * Total samples for file : "i810_hwmc.c" + * + * 119 0.1296 + */ + + 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 + :#endif + : + :#include + :#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 + : + :#ifdef XSERVER_DTRACE + :#include + :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>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 + */ + + 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 + : * Michel Dänzer + : * + : */ + : + :#ifdef HAVE_DIX_CONFIG_H + :#include + :#endif + :#include "exa_priv.h" + :#include + :#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 + :#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 + : + :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 + :#endif + : + :#include + :#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; ireqType; + : + 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 + :#endif + : + :#include + :#include + :#include "misc.h" + :#include "windowstr.h" + :#include "dixstruct.h" + :#include "pixmapstr.h" + :#include "scrnintstr.h" + :#define XK_LATIN1 + :#include + :#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 + :#endif + : + :#include + :#include + :#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 + :#include + :#include "picturestr.h" + :#include "glyphstr.h" + :#include + :#include "cursorstr.h" + : + :#if HAVE_STDINT_H + :#include + :#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 + :#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 + :#endif + : + :#include + :#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 + :#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 + :#endif + : + :#include "regionstr.h" + :#include + :#include + :#include "gc.h" + :#include "mi.h" + :#include "mispans.h" + :#include + : + :#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 + */ + + 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 + :#endif + : + :#if 0 + :#define DEBUG_COMMUNICATION + :#endif + :#ifdef WIN32 + :#include + :#endif + :#include + :#define XSERV_t + :#define TRANS_SERVER + :#define TRANS_REOPEN + :#include + :#include + :#include + :#if !defined(WIN32) + :#ifndef Lynx + :#include + :#else + :#include + :#endif + :#endif + :#include + :#define NEED_REPLIES + :#include + :#include "os.h" + :#include "osdep.h" + :#include + :#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 + : + :#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 + :#endif + : + :#ifdef PANORAMIX_DEBUG + :#include + :int ProcInitialConnection(); + :#endif + : + :#include "windowstr.h" + :#include + :#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 + :#endif + : + :#ifdef XSERVER_DTRACE + :#include + :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; ilastDrawableID == 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; ipScreen->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; icloseDownMode == 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; icloseDownMode = 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; icurrentInputMask = 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 + : + :/* 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 + :#endif + : + :#include + :#include + :#include + :#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 + : + :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; inumInDashList; 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; inumDepths; 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 + :#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 + :#include + :#include + :#ifdef XAPPGROUP + :#include "appgroup.h" + :#endif + :#include /* for file reading operations */ + :#include /* for XA_STRING */ + : + :#ifndef DEFAULTPOLICYFILE + :# define DEFAULTPOLICYFILE NULL + :#endif + :#if defined(WIN32) || defined(__CYGWIN__) + :#include + :#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; iid)) + : 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 + :#include + :#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 + : * Rickard E. (Rik) Faith + : * + : */ + : + :#ifdef HAVE_XORG_CONFIG_H + :#include + :#endif + : + :#include "xf86.h" + :#include + :#include + :#include + :#include + :#include + :#include + : + :#define NEED_REPLIES + :#define NEED_EVENTS + :#include + :#include + :#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 + :#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 + :#endif + : + :#include + : + :#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 + */ + + 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 + :#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 + :#endif + : + :#include + : + :#include + :#include + :#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 + :#include + :#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 + :#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 + :#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 + :#endif + : + :#ifdef __CYGWIN__ + :#include + :#include + :#endif + : + :#if defined(WIN32) && !defined(__CYGWIN__) + :#include + :#endif + :#include + :#include + :#include + :#if !defined(WIN32) || !defined(__MINGW32__) + :#include + :#include + :#endif + :#include "misc.h" + :#include + :#define XSERV_t + :#define TRANS_SERVER + :#define TRANS_REOPEN + :#include + :#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 + :#undef _POSIX_C_SOURCE + :#else + :#if defined(X_NOT_POSIX) || defined(_POSIX_SOURCE) + :#include + :#else + :#define _POSIX_SOURCE + :#include + :#undef _POSIX_SOURCE + :#endif + :#endif + :#ifndef WIN32 + :#include + :#endif + :#if !defined(SYSV) && !defined(WIN32) && !defined(Lynx) && !defined(QNX4) + :#include + :#endif + :#include + :#include /* for isspace */ + :#include + : + :#if defined(DGUX) + :#include + :#include + :#endif + : + :#include /* for malloc() */ + : + :#if defined(TCPCONN) || defined(STREAMSCONN) + :# ifndef WIN32 + :# include + :# endif + :#endif + : + :#include "opaque.h" + : + :#ifdef SMART_SCHEDULE + :#include "dixstruct.h" + :#endif + : + :#ifdef XKB + :#include + :#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 + : + :#include + : + :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 /* 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 + :#include + :#endif + : + :#ifndef PATH_MAX + :#ifndef Lynx + :#include + :#else + :#include + :#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 [:] [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 + :#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 + :#include + :#include + :#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 + : + :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 + :#endif + : + :#include + : + :#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 + :#else + :#include + :#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 + :#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 + :#endif + : + :#include + :#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 + */ + + 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 + :#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 + : + :#include + :#include + :#include + : + :#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 + :#endif + : + :#include + :#include + :#include + :#include "misc.h" + :#include "regionstr.h" + :#include "scrnintstr.h" + :#include "gcstruct.h" + :#include "windowstr.h" + :#include "pixmapstr.h" + :#include + :#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 pairs is then + : * formed where the indicates the area to be copied and the + : * 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 + :#endif + : + :#include + :#include "misc.h" + :#include "resource.h" + :#define NEED_EVENTS + :#define NEED_REPLIES + :#include + :#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 + :#endif + :#include "xace.h" + : + :#include "dispatch.h" + :#include "swaprep.h" + :#include "dixevents.h" + : + :#include + :#include + :#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; iaxisVal[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; ictrl.symbols_supported+i) = *symbols++; + : for (i=0; ictrl.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; iclientState == 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 + */ + + 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 + :#endif + : + :#include + :#define NEED_EVENTS + :#define NEED_REPLIES + :#include + :#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; iname) == 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; iname) + 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; iname); + : 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; ibase; + : + : 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 + :#include + :#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 + */ + + 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 + :#endif + : + :#include + : + :#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 + : * Eric Anholt + : * + : */ + : + :#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<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 + :#include + :#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 + :#endif + : + :#ifdef WIN32 + :#include + :#endif + :#include /* for strings, fcntl, time */ + :#include + :#include + :#include + :#include "misc.h" + : + :#include "osdep.h" + :#include + :#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 + :#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; ipriority; + : 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; inext) { + : 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 + :#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 + :#ifdef XTHREADS + :#include + :#endif + : + :#ifndef WIN32 + : + :#if defined(TCPCONN) || defined(UNIXCONN) + :#include + :#include + :#include + :#endif + : + :#if defined(TCPCONN) || defined(UNIXCONN) + :#define X_INCLUDE_NETDB_H + :#define XOS_USE_NO_LOCKING + :#include + :#endif + : + :#ifdef UNIXCONN + :#ifndef X_NO_SYS_UN + :#ifndef Lynx + :#include + :#else + :#include + :#endif + :#endif + :#include + :#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 + :#endif /* osf */ + :#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) + :#include + :#include + :#endif /* __NetBSD__ || __OpenBSD__ || __FreeBSD__ || __DragonFly__ */ + :#include + :#endif /* !NO_TCP_H */ + : + :#include + :#if defined(SVR4) && !defined(DGUX) && !defined(_SEQUENT_) + :#include + :#endif + : + :#if (defined(i386) && defined(SYSV)) && !defined(SCO325) && !defined(sun) + :#include + :#endif + : + :#if (defined(i386) && defined(SYSV)) && (!defined(ISC) || !defined(I_NREAD) || defined(SCO325)) || defined(_SEQUENT_) + :#include + :#endif + : + :#else /* !WIN32 */ + : + :#include + :#include + :#include + :#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 + :#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 */ + : + : + : + :#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 + :#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 + : + :/* + : * 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 + : + : + : + :/* + : * 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 */ + : + : + : + :/* + : * 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; + :} + : + : + :/* + : * 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 */ + : + : + : + :/* + : * 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 + :#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; + :} diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/pixman.callgraph b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/pixman.callgraph new file mode 100644 index 0000000..d9d6c95 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/pixman.callgraph @@ -0,0 +1,181 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/pixman.oprofile b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/pixman.oprofile new file mode 100644 index 0000000..26fb688 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/pixman.oprofile @@ -0,0 +1,32 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.callgraph b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.callgraph new file mode 100644 index 0000000..2193881 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.callgraph @@ -0,0 +1,4230 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.oprofile b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.oprofile new file mode 100644 index 0000000..2c01e10 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.oprofile @@ -0,0 +1,46 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.symbols b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.symbols new file mode 100644 index 0000000..520fb01 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/system.symbols @@ -0,0 +1,677 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/timing b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/timing new file mode 100644 index 0000000..a16df1e --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA-no-gettimeofday/timing @@ -0,0 +1 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA/X.callgraph b/src/exa/i965/synchronous_composite/EXA/X.callgraph new file mode 100644 index 0000000..f7189d6 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/X.callgraph @@ -0,0 +1,1614 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA/X.oprofile b/src/exa/i965/synchronous_composite/EXA/X.oprofile new file mode 100644 index 0000000..3163767 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/X.oprofile @@ -0,0 +1,143 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA/intel_drv.callgraph b/src/exa/i965/synchronous_composite/EXA/intel_drv.callgraph new file mode 100644 index 0000000..c17af15 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/intel_drv.callgraph @@ -0,0 +1,209 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA/intel_drv.oprofile b/src/exa/i965/synchronous_composite/EXA/intel_drv.oprofile new file mode 100644 index 0000000..7b763fe --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/intel_drv.oprofile @@ -0,0 +1,24 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA/libc.callgraph b/src/exa/i965/synchronous_composite/EXA/libc.callgraph new file mode 100644 index 0000000..7bcd88a --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/libc.callgraph @@ -0,0 +1,883 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA/libc.oprofile b/src/exa/i965/synchronous_composite/EXA/libc.oprofile new file mode 100644 index 0000000..4fbb571 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/libc.oprofile @@ -0,0 +1,85 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA/libexa.callgraph b/src/exa/i965/synchronous_composite/EXA/libexa.callgraph new file mode 100644 index 0000000..b3797a4 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/libexa.callgraph @@ -0,0 +1,889 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA/libexa.oprofile b/src/exa/i965/synchronous_composite/EXA/libexa.oprofile new file mode 100644 index 0000000..0017775 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/libexa.oprofile @@ -0,0 +1,41 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA/pixman.callgraph b/src/exa/i965/synchronous_composite/EXA/pixman.callgraph new file mode 100644 index 0000000..fc79b0c --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/pixman.callgraph @@ -0,0 +1,275 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA/pixman.oprofile b/src/exa/i965/synchronous_composite/EXA/pixman.oprofile new file mode 100644 index 0000000..4b3c6a3 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/pixman.oprofile @@ -0,0 +1,43 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA/system.callgraph b/src/exa/i965/synchronous_composite/EXA/system.callgraph new file mode 100644 index 0000000..d850715 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/system.callgraph @@ -0,0 +1,5875 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/EXA/system.oprofile b/src/exa/i965/synchronous_composite/EXA/system.oprofile new file mode 100644 index 0000000..cfdba6b --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/system.oprofile @@ -0,0 +1,52 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA/system.symbols b/src/exa/i965/synchronous_composite/EXA/system.symbols new file mode 100644 index 0000000..2c3798c --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/system.symbols @@ -0,0 +1,848 @@ +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 diff --git a/src/exa/i965/synchronous_composite/EXA/timing b/src/exa/i965/synchronous_composite/EXA/timing new file mode 100644 index 0000000..73bfe17 --- /dev/null +++ b/src/exa/i965/synchronous_composite/EXA/timing @@ -0,0 +1,3 @@ +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 + diff --git a/src/exa/i965/synchronous_composite/NoAccel/X.callgraph b/src/exa/i965/synchronous_composite/NoAccel/X.callgraph new file mode 100644 index 0000000..991670b --- /dev/null +++ b/src/exa/i965/synchronous_composite/NoAccel/X.callgraph @@ -0,0 +1,1437 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/NoAccel/X.oprofile b/src/exa/i965/synchronous_composite/NoAccel/X.oprofile new file mode 100644 index 0000000..c18f5d8 --- /dev/null +++ b/src/exa/i965/synchronous_composite/NoAccel/X.oprofile @@ -0,0 +1,131 @@ +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 diff --git a/src/exa/i965/synchronous_composite/NoAccel/libc.callgraph b/src/exa/i965/synchronous_composite/NoAccel/libc.callgraph new file mode 100644 index 0000000..7b35218 --- /dev/null +++ b/src/exa/i965/synchronous_composite/NoAccel/libc.callgraph @@ -0,0 +1,886 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/NoAccel/libc.oprofile b/src/exa/i965/synchronous_composite/NoAccel/libc.oprofile new file mode 100644 index 0000000..1509c92 --- /dev/null +++ b/src/exa/i965/synchronous_composite/NoAccel/libc.oprofile @@ -0,0 +1,85 @@ +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 diff --git a/src/exa/i965/synchronous_composite/NoAccel/pixman.callgraph b/src/exa/i965/synchronous_composite/NoAccel/pixman.callgraph new file mode 100644 index 0000000..14d8664 --- /dev/null +++ b/src/exa/i965/synchronous_composite/NoAccel/pixman.callgraph @@ -0,0 +1,320 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/NoAccel/pixman.oprofile b/src/exa/i965/synchronous_composite/NoAccel/pixman.oprofile new file mode 100644 index 0000000..477e102 --- /dev/null +++ b/src/exa/i965/synchronous_composite/NoAccel/pixman.oprofile @@ -0,0 +1,54 @@ +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 diff --git a/src/exa/i965/synchronous_composite/NoAccel/system.callgraph b/src/exa/i965/synchronous_composite/NoAccel/system.callgraph new file mode 100644 index 0000000..4a1a372 --- /dev/null +++ b/src/exa/i965/synchronous_composite/NoAccel/system.callgraph @@ -0,0 +1,4548 @@ +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] +------------------------------------------------------------------------------- diff --git a/src/exa/i965/synchronous_composite/NoAccel/system.oprofile b/src/exa/i965/synchronous_composite/NoAccel/system.oprofile new file mode 100644 index 0000000..b96454b --- /dev/null +++ b/src/exa/i965/synchronous_composite/NoAccel/system.oprofile @@ -0,0 +1,45 @@ +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 diff --git a/src/exa/i965/synchronous_composite/NoAccel/system.symbols b/src/exa/i965/synchronous_composite/NoAccel/system.symbols new file mode 100644 index 0000000..1865f49 --- /dev/null +++ b/src/exa/i965/synchronous_composite/NoAccel/system.symbols @@ -0,0 +1,702 @@ +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 diff --git a/src/exa/i965/synchronous_composite/NoAccel/timing b/src/exa/i965/synchronous_composite/NoAccel/timing new file mode 100644 index 0000000..d196cc7 --- /dev/null +++ b/src/exa/i965/synchronous_composite/NoAccel/timing @@ -0,0 +1,2 @@ +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 -- 2.43.0