Rather than initially place pixmaps in framebuffer based on a size
heuristic, delay the decision until the first kaaPixmapUse{Screen|Memory}, and put it in framebuffer if UseScreen was called. Provides a significant improvement in cairo speeds (100% speedup in cairogears here) and is likely to improve text performance as well.
This commit is contained in:
parent
14b2db63e7
commit
ccaf332ce3
|
@ -51,12 +51,11 @@ int kaaPixmapPrivateIndex;
|
||||||
|
|
||||||
#define KAA_PIXMAP_SCORE_MOVE_IN 10
|
#define KAA_PIXMAP_SCORE_MOVE_IN 10
|
||||||
#define KAA_PIXMAP_SCORE_MAX 20
|
#define KAA_PIXMAP_SCORE_MAX 20
|
||||||
#define KAA_PIXMAP_SCORE_INIT 0
|
|
||||||
#define KAA_PIXMAP_SCORE_MOVE_OUT -10
|
#define KAA_PIXMAP_SCORE_MOVE_OUT -10
|
||||||
#define KAA_PIXMAP_SCORE_MIN -20
|
#define KAA_PIXMAP_SCORE_MIN -20
|
||||||
#define KAA_PIXMAP_SCORE_PINNED 1000
|
#define KAA_PIXMAP_SCORE_PINNED 1000
|
||||||
|
#define KAA_PIXMAP_SCORE_INIT 1001
|
||||||
|
|
||||||
#define MIN_OFFPIX_SIZE (4096)
|
|
||||||
void
|
void
|
||||||
kaaDrawableDirty (DrawablePtr pDrawable)
|
kaaDrawableDirty (DrawablePtr pDrawable)
|
||||||
{
|
{
|
||||||
|
@ -240,6 +239,11 @@ kaaPixmapUseScreen (PixmapPtr pPixmap)
|
||||||
if (pKaaPixmap->score == KAA_PIXMAP_SCORE_PINNED)
|
if (pKaaPixmap->score == KAA_PIXMAP_SCORE_PINNED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (pKaaPixmap->score == KAA_PIXMAP_SCORE_INIT) {
|
||||||
|
kaaMoveInPixmap(pPixmap);
|
||||||
|
pKaaPixmap->score = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (pKaaPixmap->score < KAA_PIXMAP_SCORE_MAX)
|
if (pKaaPixmap->score < KAA_PIXMAP_SCORE_MAX)
|
||||||
{
|
{
|
||||||
pKaaPixmap->score++;
|
pKaaPixmap->score++;
|
||||||
|
@ -258,6 +262,9 @@ kaaPixmapUseMemory (PixmapPtr pPixmap)
|
||||||
if (pKaaPixmap->score == KAA_PIXMAP_SCORE_PINNED)
|
if (pKaaPixmap->score == KAA_PIXMAP_SCORE_PINNED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (pKaaPixmap->score == KAA_PIXMAP_SCORE_INIT)
|
||||||
|
pKaaPixmap->score = 0;
|
||||||
|
|
||||||
if (pKaaPixmap->score > KAA_PIXMAP_SCORE_MIN)
|
if (pKaaPixmap->score > KAA_PIXMAP_SCORE_MIN)
|
||||||
{
|
{
|
||||||
pKaaPixmap->score--;
|
pKaaPixmap->score--;
|
||||||
|
@ -320,10 +327,6 @@ kaaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth)
|
||||||
pKaaPixmap->score = KAA_PIXMAP_SCORE_INIT;
|
pKaaPixmap->score = KAA_PIXMAP_SCORE_INIT;
|
||||||
|
|
||||||
pKaaPixmap->area = NULL;
|
pKaaPixmap->area = NULL;
|
||||||
|
|
||||||
if (pKaaPixmap->score != KAA_PIXMAP_SCORE_PINNED &&
|
|
||||||
(pPixmap->devKind * h) >= MIN_OFFPIX_SIZE)
|
|
||||||
kaaPixmapAllocArea (pPixmap);
|
|
||||||
pKaaPixmap->dirty = FALSE;
|
pKaaPixmap->dirty = FALSE;
|
||||||
|
|
||||||
return pPixmap;
|
return pPixmap;
|
||||||
|
|
Loading…
Reference in New Issue