Lines Matching refs:area

46     ExaOffscreenArea *prev = 0, *area;  in ExaOffscreenValidate()  local
50 for (area = pExaScr->info->offScreenAreas; area; area = area->next) { in ExaOffscreenValidate()
51 assert(area->offset >= area->base_offset && in ExaOffscreenValidate()
52 area->offset < (area->base_offset + area->size)); in ExaOffscreenValidate()
54 assert(prev->base_offset + prev->size == area->base_offset); in ExaOffscreenValidate()
55 prev = area; in ExaOffscreenValidate()
64 ExaOffscreenKickOut(ScreenPtr pScreen, ExaOffscreenArea * area) in ExaOffscreenKickOut() argument
66 if (area->save) in ExaOffscreenKickOut()
67 (*area->save) (pScreen, area); in ExaOffscreenKickOut()
68 return exaOffscreenFree(pScreen, area); in ExaOffscreenKickOut()
72 exaUpdateEvictionCost(ExaOffscreenArea * area, unsigned offScreenCounter) in exaUpdateEvictionCost() argument
76 if (area->state == ExaOffscreenAvail) in exaUpdateEvictionCost()
79 age = offScreenCounter - area->last_use; in exaUpdateEvictionCost()
84 area->last_use = offScreenCounter - age; in exaUpdateEvictionCost()
87 area->eviction_cost = area->size / age; in exaUpdateEvictionCost()
165 ExaOffscreenArea *area; in exaOffscreenAlloc() local
195 for (area = pExaScr->info->offScreenAreas; area; area = area->next) { in exaOffscreenAlloc()
197 if (area->state != ExaOffscreenAvail) in exaOffscreenAlloc()
201 real_size = size + (area->base_offset + area->size - size) % align; in exaOffscreenAlloc()
204 if (real_size <= area->size) in exaOffscreenAlloc()
207 if (area->size > largest_avail) in exaOffscreenAlloc()
208 largest_avail = area->size; in exaOffscreenAlloc()
211 if (!area) { in exaOffscreenAlloc()
212 area = exaFindAreaToEvict(pExaScr, size, align); in exaOffscreenAlloc()
214 if (!area) { in exaOffscreenAlloc()
222 real_size = size + (area->base_offset + area->size - size) % align; in exaOffscreenAlloc()
227 if (area->state != ExaOffscreenAvail) in exaOffscreenAlloc()
228 area = ExaOffscreenKickOut(pScreen, area); in exaOffscreenAlloc()
232 while (area->size < real_size) { in exaOffscreenAlloc()
233 assert(area->next && area->next->state == ExaOffscreenRemovable); in exaOffscreenAlloc()
234 (void) ExaOffscreenKickOut(pScreen, area->next); in exaOffscreenAlloc()
239 if (real_size < area->size) { in exaOffscreenAlloc()
244 new_area->base_offset = area->base_offset; in exaOffscreenAlloc()
248 new_area->size = area->size - real_size; in exaOffscreenAlloc()
253 new_area->next = area; in exaOffscreenAlloc()
254 new_area->prev = area->prev; in exaOffscreenAlloc()
255 if (area->prev->next) in exaOffscreenAlloc()
256 area->prev->next = new_area; in exaOffscreenAlloc()
259 area->prev = new_area; in exaOffscreenAlloc()
260 area->base_offset = new_area->base_offset + new_area->size; in exaOffscreenAlloc()
261 area->size = real_size; in exaOffscreenAlloc()
270 area->state = ExaOffscreenLocked; in exaOffscreenAlloc()
272 area->state = ExaOffscreenRemovable; in exaOffscreenAlloc()
273 area->privData = privData; in exaOffscreenAlloc()
274 area->save = save; in exaOffscreenAlloc()
275 area->last_use = pExaScr->offScreenCounter++; in exaOffscreenAlloc()
276 area->offset = (area->base_offset + align - 1); in exaOffscreenAlloc()
277 area->offset -= area->offset % align; in exaOffscreenAlloc()
278 area->align = align; in exaOffscreenAlloc()
283 area->base_offset, area->offset)); in exaOffscreenAlloc()
284 return area; in exaOffscreenAlloc()
298 ExaOffscreenArea *area = pExaScr->info->offScreenAreas; in ExaOffscreenSwapOut() local
300 if (!area) in ExaOffscreenSwapOut()
302 if (area->state == ExaOffscreenAvail) { in ExaOffscreenSwapOut()
303 area = area->next; in ExaOffscreenSwapOut()
304 if (!area) in ExaOffscreenSwapOut()
307 assert(area->state != ExaOffscreenAvail); in ExaOffscreenSwapOut()
308 (void) ExaOffscreenKickOut(pScreen, area); in ExaOffscreenSwapOut()
324 ExaOffscreenArea *area; in ExaOffscreenEjectPixmaps() local
326 for (area = pExaScr->info->offScreenAreas; area != NULL; in ExaOffscreenEjectPixmaps()
327 area = area->next) { in ExaOffscreenEjectPixmaps()
328 if (area->state == ExaOffscreenRemovable && in ExaOffscreenEjectPixmaps()
329 area->save == exaPixmapSave) { in ExaOffscreenEjectPixmaps()
330 (void) ExaOffscreenKickOut(pScreen, area); in ExaOffscreenEjectPixmaps()
335 if (area == NULL) in ExaOffscreenEjectPixmaps()
387 ExaOffscreenMerge(ExaScreenPrivPtr pExaScr, ExaOffscreenArea * area) in ExaOffscreenMerge() argument
389 ExaOffscreenArea *next = area->next; in ExaOffscreenMerge()
392 area->size += next->size; in ExaOffscreenMerge()
394 area->next = next->next; in ExaOffscreenMerge()
395 if (area->next) in ExaOffscreenMerge()
396 area->next->prev = area; in ExaOffscreenMerge()
398 pExaScr->info->offScreenAreas->prev = area; in ExaOffscreenMerge()
418 exaOffscreenFree(ScreenPtr pScreen, ExaOffscreenArea * area) in exaOffscreenFree() argument
421 ExaOffscreenArea *next = area->next; in exaOffscreenFree()
424 DBG_OFFSCREEN(("Free 0x%x -> 0x%x (0x%x)\n", area->size, in exaOffscreenFree()
425 area->base_offset, area->offset)); in exaOffscreenFree()
428 area->state = ExaOffscreenAvail; in exaOffscreenFree()
429 area->save = NULL; in exaOffscreenFree()
430 area->last_use = 0; in exaOffscreenFree()
431 area->eviction_cost = 0; in exaOffscreenFree()
435 if (area == pExaScr->info->offScreenAreas) in exaOffscreenFree()
438 prev = area->prev; in exaOffscreenFree()
444 ExaOffscreenMerge(pExaScr, area); in exaOffscreenFree()
448 area = prev; in exaOffscreenFree()
449 ExaOffscreenMerge(pExaScr, area); in exaOffscreenFree()
454 return area; in exaOffscreenFree()
463 if (!pExaPixmap || !pExaPixmap->area) in ExaOffscreenMarkUsed()
466 pExaPixmap->area->last_use = pExaScr->offScreenCounter++; in ExaOffscreenMarkUsed()
478 ExaOffscreenArea *area, *largest_available = NULL; in ExaOffscreenDefragment() local
491 for (area = pExaScr->info->offScreenAreas->prev; in ExaOffscreenDefragment()
492 area != pExaScr->info->offScreenAreas;) { in ExaOffscreenDefragment()
493 ExaOffscreenArea *prev = area->prev; in ExaOffscreenDefragment()
499 if (area->state != ExaOffscreenAvail || in ExaOffscreenDefragment()
503 area = prev; in ExaOffscreenDefragment()
508 if (area == largest_available) { in ExaOffscreenDefragment()
512 area = prev; in ExaOffscreenDefragment()
513 ExaOffscreenMerge(pExaScr, area); in ExaOffscreenDefragment()
517 if (area->size > largest_size) { in ExaOffscreenDefragment()
518 largest_available = area; in ExaOffscreenDefragment()
519 largest_size = area->size; in ExaOffscreenDefragment()
526 area->base_offset + area->size - prev->size + prev->base_offset - in ExaOffscreenDefragment()
531 area = prev; in ExaOffscreenDefragment()
537 area = prev; in ExaOffscreenDefragment()
556 area = prev; in ExaOffscreenDefragment()
565 …, prev->offset, prev->base_offset + prev->size, area->base_offset, area->offset, area->base_offset… in ExaOffscreenDefragment()
568 area->base_offset = prev->base_offset; in ExaOffscreenDefragment()
569 area->offset = area->base_offset; in ExaOffscreenDefragment()
574 if (area->next) in ExaOffscreenDefragment()
575 prev->size = area->next->base_offset - prev->base_offset; in ExaOffscreenDefragment()
578 area->size = prev->base_offset - area->base_offset; in ExaOffscreenDefragment()
580 …08x-0x%08x-0x%08x prev=0x%08x-0x%08x-0x%08x\n", area->base_offset, area->offset, area->base_offset… in ExaOffscreenDefragment()
583 if (area->next) in ExaOffscreenDefragment()
584 area->next->prev = prev; in ExaOffscreenDefragment()
588 prev->prev->next = area; in ExaOffscreenDefragment()
590 pExaScr->info->offScreenAreas = area; in ExaOffscreenDefragment()
591 prev->next = area->next; in ExaOffscreenDefragment()
592 area->next = prev; in ExaOffscreenDefragment()
593 area->prev = prev->prev; in ExaOffscreenDefragment()
594 prev->prev = area; in ExaOffscreenDefragment()
595 if (!area->prev->next) in ExaOffscreenDefragment()
596 pExaScr->info->offScreenAreas = area; in ExaOffscreenDefragment()
602 if (area->prev == area || area->next == area) in ExaOffscreenDefragment()
618 if (area->state == ExaOffscreenAvail && area->size > largest_size) in ExaOffscreenDefragment()
619 return area; in ExaOffscreenDefragment()
636 ExaOffscreenArea *area; in exaOffscreenInit() local
639 area = malloc(sizeof(ExaOffscreenArea)); in exaOffscreenInit()
641 if (!area) in exaOffscreenInit()
644 area->state = ExaOffscreenAvail; in exaOffscreenInit()
645 area->base_offset = pExaScr->info->offScreenBase; in exaOffscreenInit()
646 area->offset = area->base_offset; in exaOffscreenInit()
647 area->align = 0; in exaOffscreenInit()
648 area->size = pExaScr->info->memorySize - area->base_offset; in exaOffscreenInit()
649 area->save = NULL; in exaOffscreenInit()
650 area->next = NULL; in exaOffscreenInit()
651 area->prev = area; in exaOffscreenInit()
652 area->last_use = 0; in exaOffscreenInit()
653 area->eviction_cost = 0; in exaOffscreenInit()
656 pExaScr->info->offScreenAreas = area; in exaOffscreenInit()
669 ExaOffscreenArea *area; in ExaOffscreenFini() local
672 while ((area = pExaScr->info->offScreenAreas)) { in ExaOffscreenFini()
673 pExaScr->info->offScreenAreas = area->next; in ExaOffscreenFini()
674 free(area); in ExaOffscreenFini()