aea31ed3dfad99bed299624e281260966d808792 kate Wed Aug 28 14:23:24 2019 -0700 Minor optimization. refs #22422 diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index 79d91567..45c4a7f 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -528,43 +528,44 @@ } } // do spaceSaver layout struct spaceSaver *ss; ss = spaceSaverNew(0, fullInsideWidth, maxCount); ss->vis = vis; for(w=windows,tg=tgSave; w; w=w->next,tg=tg->nextWindow) { // save these values so we can detect vis and window changes tg->ss->vis = vis; tg->ss->window = w; char *chrom = w->chromName; // int winOffset = w->insideX - fullInsideX; // no longer needed double scale = (double)w->insideWidth/(w->winEnd - w->winStart); + boolean useTypeItemNameAsKey = isTypeUseItemNameAsKey(tg); for (item = tg->items; item != NULL; item = item->next) { // TODO match items from different windows by using item start end and name in hash? int baseStart = tg->itemStart(tg, item); int baseEnd = tg->itemEnd(tg, item); if (baseStart < w->winEnd && baseEnd > w->winStart) { // it intersects the window char *mapItemName = tg->mapItemName(tg, item); char key[1024]; // TODO see key caveats above // For now, this should be good enough to illustrate the basic behavior we want to see. - if (isTypeUseItemNameAsKey(tg)) + if (useTypeItemNameAsKey) safef(key, sizeof key, "%s", tg->itemName(tg, item)); else safef(key, sizeof key, "%s:%d-%d %s", chrom, baseStart, baseEnd, mapItemName); struct hashEl *hel = hashLookup(sameItem, key); if (!hel) { if (tg->networkErrMsg) // probably timed-out before thread finished adding more items. break; errAbort("unexpected error: lookup of key [%s] in sameItem hash failed.", key); } struct sameItemNode *sin = (struct sameItemNode *)hel->val; if (!sin) errAbort("sin empty (hel->val)!"); if (!sin->done) { // still needs to be done