70a63381600c33bf1d140d823f1043a5765fe2b9 hiram Wed Oct 6 11:59:00 2010 -0700 trying a cache of loadTrackDb result diff --git src/hg/lib/hdb.c src/hg/lib/hdb.c index 8f632b3..2a807e1 100644 --- src/hg/lib/hdb.c +++ src/hg/lib/hdb.c @@ -3378,7 +3378,7 @@ return tdbList; } -static void addTrackIfDataAccessible(char *database, struct trackDb *tdb, char *chrom, +static void addTrackIfDataAccessible(char *database, struct trackDb *tdb, boolean privateHost, struct trackDb **tdbRetList) /* check if a trackDb entry should be included in display, and if so * add it to the list, otherwise free it */ @@ -3489,7 +3489,7 @@ static struct trackDb *pruneEmpties(struct trackDb *tdbList, char *db, - char *chrom, boolean privateHost, int level) + boolean privateHost, int level) /* Remove tracks without data. For parent tracks data in any child is sufficient to keep * them alive. */ { @@ -3499,7 +3499,7 @@ next = tdb->next; if (tdb->subtracks != NULL) { - tdb->subtracks = pruneEmpties(tdb->subtracks, db, chrom, privateHost, level+1); + tdb->subtracks = pruneEmpties(tdb->subtracks, db, privateHost, level+1); } if (tdb->subtracks != NULL) { @@ -3507,7 +3507,7 @@ } else { - addTrackIfDataAccessible(db, tdb, chrom, privateHost, &newList); + addTrackIfDataAccessible(db, tdb, privateHost, &newList); } } slReverse(&newList); @@ -3561,12 +3561,19 @@ * incompatible with the returned list). * Returns list sorted by priority */ { -struct trackDb *tdbList = loadTrackDb(db, NULL); +static char *existingDb = NULL; +static struct trackDb *tdbList = NULL; +if (differentStringNullOk(existingDb, db)) + { + tdbList = loadTrackDb(db, NULL); tdbList = trackDbLinkUpGenerations(tdbList); -tdbList = pruneEmpties(tdbList, db, chrom, hIsPrivateHost(), 0); + freeMem(existingDb); + existingDb = cloneString(db); + tdbList = pruneEmpties(tdbList, db, hIsPrivateHost(), 0); trackDbContainerMarkup(NULL, tdbList); rInheritFields(tdbList); slSort(&tdbList, trackDbCmp); + } return tdbList; }