import java.util.List;
import java.util.Map;
+import org.simantics.databoard.Bindings;
import org.simantics.databoard.util.IdentityHashSet;
+import org.simantics.db.DevelopmentKeys;
import org.simantics.db.common.exception.DebugException;
-import org.simantics.db.impl.DebugPolicy;
import org.simantics.db.impl.query.QueryProcessor.QueryCollectorSupport;
import org.simantics.utils.Development;
this.support = support;
}
- private boolean findCollectables(CacheEntry entry, Map<CacheEntry, Boolean> collectables, ArrayList<CacheEntry> result) {
+ private boolean findCollectables(CacheEntry<?> entry, Map<CacheEntry, Boolean> collectables, ArrayList<CacheEntry> result) {
if (entry.isDiscarded()) {
- if(DebugPolicy.COLLECT && DebugPolicy.VERBOSE)
- System.out.println("GC: discarded entry " + entry);
+ if (Development.DEVELOPMENT) {
+ if(Development.<Boolean>getProperty(DevelopmentKeys.QUERYCOLLECTOR, Bindings.BOOLEAN)) {
+ System.err.println("GC: discarded entry " + entry);
+ }
+ }
return true;
}
if (entry.isPending()) {
- if(DebugPolicy.COLLECT && DebugPolicy.VERBOSE)
- System.out.println("GC: pending entry " + entry + " was not collected.");
+ if (Development.DEVELOPMENT) {
+ if(Development.<Boolean>getProperty(DevelopmentKeys.QUERYCOLLECTOR, Bindings.BOOLEAN)) {
+ System.err.println("GC: pending entry " + entry + " was not collected.");
+ }
+ }
collectables.remove(entry);
return false;
}
if (this.queryProcessor.hasListenerAfterDisposing(entry)) {
- if (DebugPolicy.COLLECT && DebugPolicy.VERBOSE) {
- System.out.println("GC: listened entry " + entry + " was not collected. Entry=" + entry);
+ if (Development.DEVELOPMENT) {
+ if(Development.<Boolean>getProperty(DevelopmentKeys.QUERYCOLLECTOR, Bindings.BOOLEAN)) {
+ System.err.println("GC: listened entry " + entry + " was not collected. Entry=" + entry);
+ }
}
collectables.remove(entry);
return false;
}
if(!parentIsCollectable) {
- if(DebugPolicy.COLLECT && DebugPolicy.VERBOSE)
- System.out.println("GC: due to bound parent " + parent + " the entry + " + entry + " was not collected.");
+ if (Development.DEVELOPMENT) {
+ if(Development.<Boolean>getProperty(DevelopmentKeys.QUERYCOLLECTOR, Bindings.BOOLEAN)) {
+ System.err.println("GC: due to bound parent " + parent + " the entry + " + entry + " was not collected.");
+ }
+ }
collectables.remove(entry);
return false;
}
// Compute amount of free queries
int freeCount = collectables.size();
- if(DebugPolicy.COLLECT)
- System.out.println("collector found " + freeCount + " free queries.");
+ if (Development.DEVELOPMENT) {
+ if(Development.<Boolean>getProperty(DevelopmentKeys.QUERYCOLLECTOR, Bindings.BOOLEAN)) {
+ System.err.println("collector found " + freeCount + " free queries.");
+ }
+ }
lastKnownFixedSize = currentSize - freeCount;
int target = freeCount - maxNumberOfCollectableQueries/2;
- if(DebugPolicy.COLLECT)
- System.out.println("collector removes " + target + " free queries.");
+
+ if (Development.DEVELOPMENT) {
+ if(Development.<Boolean>getProperty(DevelopmentKeys.QUERYCOLLECTOR, Bindings.BOOLEAN)) {
+ System.err.println("collector found " + freeCount + " free queries.");
+ System.err.println("collector removes " + target + " free queries.");
+ }
+ }
for(CacheEntry entry : collectables) {
if(queryProcessor.removeQuery(entry))
// Prune discarded parents
ArrayList<CacheEntry> removals = new ArrayList<CacheEntry>();
- for (CacheEntry entry : support.allCaches().toCollection()) {
+ for (CacheEntry<?> entry : support.allCaches().toCollection()) {
for(CacheEntry p : entry.getParents(queryProcessor)) {
if(p.isDiscarded()) removals.add(p);
}
removals.clear();
}
- if(DebugPolicy.COLLECT) {
- System.out.println("collect found " + freeCount + " collectable entries.");
+
+ if (Development.DEVELOPMENT) {
+ if(Development.<Boolean>getProperty(DevelopmentKeys.QUERYCOLLECTOR, Bindings.BOOLEAN)) {
+ System.err.println("collect found " + freeCount + " collectable entries.");
+ }
}
return;
try {
- int current = support.calculateCurrentSize();
- if(DebugPolicy.COLLECT)
- new DebugException("checking the need for collecting queries (current=" + current + " , lastKnownFixedSize=" + lastKnownFixedSize + " max free=" + 0 + ")").printStackTrace();
+ int current = support.calculateCurrentSize();
- QueryProcessor.collecting = true;
+ if (Development.DEVELOPMENT) {
+ if(Development.<Boolean>getProperty(DevelopmentKeys.QUERYCOLLECTOR, Bindings.BOOLEAN)) {
+ new DebugException("checking the need for collecting queries (current=" + current + " , lastKnownFixedSize=" + lastKnownFixedSize + " max free=" + 0 + ")").printStackTrace();
+ }
+ }
+
+ queryProcessor.cache.collecting = true;
long start = System.nanoTime();
doCollect(current, 0);
- if(DebugPolicy.COLLECT)
- System.out.println("collect finished with " + support.calculateCurrentSize() + " entries (lastKnownFixedSize=" + lastKnownFixedSize + ").");
+ if (Development.DEVELOPMENT) {
+ if(Development.<Boolean>getProperty(DevelopmentKeys.QUERYCOLLECTOR, Bindings.BOOLEAN)) {
+ System.err.println("collect finished with " + support.calculateCurrentSize() + " entries (lastKnownFixedSize=" + lastKnownFixedSize + ").");
+ }
+ }
long duration = System.nanoTime() - start;
- if(DebugPolicy.COLLECT)
- System.err.println("Collect took " + 1e-9*duration + "s.");
+ if (Development.DEVELOPMENT) {
+ if(Development.<Boolean>getProperty(DevelopmentKeys.QUERYCOLLECTOR, Bindings.BOOLEAN)) {
+ System.err.println("Collect took " + 1e-9*duration + "s.");
+ }
+ }
} catch (Throwable t) {
t.printStackTrace();
}
- QueryProcessor.collecting = false;
-
+ queryProcessor.cache.collecting = false;
}