ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/holofile.c
(Generate patch)

Comparing ray/src/hd/holofile.c (file contents):
Revision 3.28 by gwlarson, Mon Nov 9 17:10:53 1998 UTC vs.
Revision 3.31 by gwlarson, Wed Dec 30 11:30:04 1998 UTC

# Line 21 | Line 21 | static char SCCSid[] = "$SunId$ SGI";
21   #ifndef PCTFREE
22   #define PCTFREE         15      /* maximum fraction to free (%) */
23   #endif
24 < #ifndef MAXFRAG
25 < #define MAXFRAG         32767   /* maximum fragments/file to track (0==inf) */
24 > #ifndef MAXFRAGB
25 > #define MAXFRAGB        16      /* fragment blocks/file to track (0==inf) */
26   #endif
27 + #ifndef MINDIRSEL
28 +                                /* minimum directory seek length */
29 + #define MINDIRSEL       (4*BUFSIZ/sizeof(BEAMI))
30 + #endif
31  
32   #ifndef BSD
33   #define write   writebuf        /* safe i/o routines */
34   #define read    readbuf
35   #endif
36  
37 < #define FRAGBLK         256     /* number of fragments to allocate at a time */
37 > #define FRAGBLK         512     /* number of fragments to allocate at a time */
38  
39   unsigned        hdcachesize = CACHESIZE*1024*1024;      /* target cache size */
40   unsigned long   hdclock;        /* clock value */
# Line 204 | Line 208 | int    i;
208                  }
209                  copystruct(hp->dirseg+j, hp->dirseg+(j-1));
210          }
211 <        mindist = nbeams(hp);                   /* find closest neighbors */
212 <        for (j = hp->dirty; --j; )
213 <                if (hp->dirseg[j].s - (hp->dirseg[j-1].s + hp->dirseg[j-1].n)
214 <                                < mindist) {
215 <                        mindist = hp->dirseg[j].s -
211 >        do {                            /* check neighbors */
212 >                mindist = nbeams(hp);           /* find closest */
213 >                for (j = hp->dirty; --j; )
214 >                        if (hp->dirseg[j].s -
215 >                                        (hp->dirseg[j-1].s + hp->dirseg[j-1].n)
216 >                                        < mindist) {
217 >                                minpos = j;
218 >                                mindist = hp->dirseg[j].s -
219                                          (hp->dirseg[j-1].s + hp->dirseg[j-1].n);
220 <                        minpos = j;
221 <                }
222 <        if (hp->dirty > MAXDIRSE || mindist <= BUFSIZ/sizeof(BEAMI)) {
220 >                        }
221 >                                                /* good enough? */
222 >                if (hp->dirty <= MAXDIRSE && mindist > MINDIRSEL)
223 >                        break;
224                  j = minpos - 1;                 /* coalesce neighbors */
225                  if (hp->dirseg[j].s + hp->dirseg[j].n <
226 <                                hp->dirseg[minpos].s + hp->dirseg[minpos].n) {
226 >                                hp->dirseg[minpos].s + hp->dirseg[minpos].n)
227                          hp->dirseg[j].n = hp->dirseg[minpos].s +
228                                          hp->dirseg[minpos].n - hp->dirseg[j].s;
229 <                }
230 <                hp->dirty--;                    /* close the gap */
223 <                for (j = minpos; j < hp->dirty; j++)
229 >                hp->dirty--;
230 >                while (++j < hp->dirty)         /* close the gap */
231                          copystruct(hp->dirseg+j, hp->dirseg+(j+1));
232 <        }
232 >        } while (mindist <= MINDIRSEL);
233   }
234  
235  
# Line 494 | Line 501 | register BEAMI *bi;
501                  f->nfrags = j;
502          }
503          j = f->nfrags++;                /* allocate a slot in free list */
504 < #if MAXFRAG
505 <        if (j >= MAXFRAG-1)
506 <                f->nfrags--;
504 > #if MAXFRAGB
505 >        if (j >= MAXFRAGB*FRAGBLK) {
506 >                f->nfrags = j--;        /* stop list growth */
507 >                if (bi->nrd <= f->fi[j].nrd)
508 >                        return;         /* new one no better than discard */
509 >        }
510   #endif
511          if (j % FRAGBLK == 0) {         /* more free list space */
512                  register BEAMI  *newp;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines