private final TmfEventsTable fTable;
private ITmfFilter fFilter;
private final List<Integer> fFilterIndex = new ArrayList<>(); // contains the event rank at each 'cache size' filtered events
+ private boolean fCollapseFilterEnabled = false;
/**
* Constructor for the event cache
*
* @param filter
* The ITmfFilter to apply.
+ * @param collapseFilterEnabled
+ * true if the collapse filter is enabled
+ * @since 2.0
*/
- public void applyFilter(ITmfFilter filter) {
+ public void applyFilter(ITmfFilter filter, boolean collapseFilterEnabled) {
fFilter = filter;
+ fCollapseFilterEnabled = collapseFilterEnabled;
clear();
}
*/
public void clearFilter() {
fFilter = null;
+ fCollapseFilterEnabled = false;
clear();
}
class DataRequest extends TmfEventRequest {
ITmfFilter requestFilter;
+ TmfCollapseFilter requestCollapsedFilter;
int requestRank;
int requestIndex;
requestFilter = reqFilter;
requestRank = start;
requestIndex = index;
+ requestCollapsedFilter = fCollapseFilterEnabled ? new TmfCollapseFilter() : null;
}
@Override
}
requestRank++;
if (requestFilter.matches(event)) {
- requestIndex++;
+ if (requestCollapsedFilter == null || requestCollapsedFilter.matches(event)) {
+ requestIndex++;
+ }
}
}
TmfEventRequest.ExecutionType.FOREGROUND) {
private int count = 0;
private long rank = startIndex;
+ private TmfCollapseFilter collapseFilter = fCollapseFilterEnabled ? new TmfCollapseFilter() : null;
@Override
public void handleData(ITmfEvent event) {
// If the job is canceled, cancel the request so waitForCompletion() will unlock
return;
}
super.handleData(event);
- if (((fFilter == null) || fFilter.matches(event)) && (skipCount-- <= 0)) {
- synchronized (TmfEventsCache.this) {
- if (monitor.isCanceled()) {
- return;
+ if ((fFilter == null) || fFilter.matches(event)) {
+ if (collapseFilter == null || collapseFilter.matches(event)) {
+ if (skipCount-- <= 0) {
+ synchronized (TmfEventsCache.this) {
+ if (monitor.isCanceled()) {
+ return;
+ }
+ fCache[count] = new CachedEvent(event, rank);
+ count++;
+ fCacheEndIndex++;
+ }
+ if (fFilter != null) {
+ fTable.cacheUpdated(false);
+ }
}
- fCache[count] = new CachedEvent(event, rank);
- count++;
- fCacheEndIndex++;
- }
- if (fFilter != null) {
- fTable.cacheUpdated(false);
- }
- } else if (((fFilter != null) && !fFilter.matches(event)) && (skipCount <= 0)) { // TODO fix duplicated call to matches()
- if ((count > 0) && (fFilter instanceof TmfCollapseFilter)) {
+ } else if ((count > 0) && (skipCount <= 0)) {
fCache[count - 1].repeatCount++;
}
}