+ if(!acceptThread(threadId)) continue;
+ if((endTime-beginTime) > DISCARD_LIMIT) {
+ tasks.add(new Task(taskName, threadId, beginTime, endTime));
+ Task t = compositeTasks.remove(threadId);
+ if(t != null) {
+ if((t.endTime-t.beginTime) > DISCARD_LIMIT) {
+ tasks.add(new Task(t.combined + " small tasks", t.threadId, t.beginTime, t.endTime));
+ }
+ }
+ } else {
+ Task t = compositeTasks.get(threadId);
+ if(t == null) {
+ t = new Task("", threadId, beginTime, endTime);
+ compositeTasks.put(threadId, t);
+ }
+ if(beginTime - t.endTime > DISCARD_LIMIT) {
+ tasks.add(new Task(t.combined + " small tasks", t.threadId, t.beginTime, t.endTime));
+ t = new Task("", threadId, beginTime, endTime);
+ compositeTasks.put(threadId, t);
+ }
+ t.endTime = endTime;
+ t.combined++;
+ if((t.endTime-t.beginTime) > DISCARD_LIMIT) {
+ tasks.add(new Task(t.combined + " small tasks", t.threadId, t.beginTime, t.endTime));
+ compositeTasks.remove(threadId);
+ }
+ }