Commit ccaf332c authored by Eric Anholt's avatar Eric Anholt
Browse files

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.
parent 14b2db63
...@@ -51,12 +51,11 @@ int kaaPixmapPrivateIndex; ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment