/* sort_form - sort fields on form(per page) */ static void sort_form(FORM *f) { FIELD **field; FIELD *p; int i, page, pmin, pmax; field = f->field; for (page = 0; page < f->maxpage; ++page) { /* for each page */ p = (FIELD *) 0; pmin = Pmin(f, page); pmax = Pmax(f, page); for (i = pmin; i <= pmax; ++i) { /* for each field */ field[i]->index = i; field[i]->page = page; p = insert(field[i], p); } Smin(f, page) = p->index; /* set sorted min */ Smax(f, page) = p->sprev->index; /* set sorted max */ } }
bool need_compaction_next_gc() { if (heap.working_set_size == 0 || !gc_adaptive) { TRACE2("gc.adaptive", "static Smin analysis"); return heap.allocation_region_end() - heap.pos < heap.size * 0.7f; } else { float smin = Smin(heap.roots_start - heap.base - RESERVED_FOR_HEAP_NULL - heap.working_set_size, heap.Tcompact, heap.Tcopy, heap.dS_copy); float free = (float) (heap.allocation_region_end() - heap.old_objects.pos); INFO2("gc.smin", "smin = " << mb((size_t)smin) << " (working set " << mb((size_t)heap.working_set_size) << " Tfast " << (int)(heap.Tcopy / 1000.) << " Tslow " << (int)(heap.Tcompact / 1000.) << " dS " << mb((size_t)heap.dS_copy) << "), free = " << mb((int)free)); //INFO2("gc.logic", "Smin = " << (int) mb((int)smin) << "mb, free = " << mb((int)free) << " mb"); return free < smin; } }