/******************************************************************************* * Copyright (c) 2016 Ericsson * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.resources; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem; import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeEvent; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeEvent; /** * Internal entry of the aggregate kind, it is one without a state system value, * it uses other entries and aggregates their values. * * @author Matthew Khouzam */ class AggregateResourcesEntry extends ResourcesEntry { private final @NonNull List<ITimeGraphEntry> fContributors = new ArrayList<>(); private static final Comparator<ITimeEvent> COMPARATOR = new Comparator<ITimeEvent>() { @Override public int compare(ITimeEvent o1, ITimeEvent o2) { // largest value return Integer.compare(getValue(o2), getValue(o1)); } private int getValue(ITimeEvent element) { return (element instanceof TimeEvent) ? ((TimeEvent) element).getValue() : Integer.MIN_VALUE; } }; /** * AggregateResourcesEntry Constructor * * @param trace * the parent trace * @param startTime * the start time * @param endTime * the end time * @param type * the type * @param id * the id */ public AggregateResourcesEntry(@NonNull ITmfTrace trace, long startTime, long endTime, Type type, int id) { super(ITmfStateSystem.INVALID_ATTRIBUTE, trace, startTime, endTime, type, id); } /** * Constructor * * @param trace * The trace on which we are working * @param name * The exec_name of this entry * @param startTime * The start time of this entry lifetime * @param endTime * The end time of this entry * @param type * The type of this entry * @param id * The id of this entry */ public AggregateResourcesEntry(@NonNull ITmfTrace trace, String name, long startTime, long endTime, Type type, int id) { super(ITmfStateSystem.INVALID_ATTRIBUTE, trace, name, startTime, endTime, type, id); } @Override public void addEvent(ITimeEvent event) { } @Override public void addZoomedEvent(ITimeEvent event) { } @Override public Iterator<@NonNull ITimeEvent> getTimeEventsIterator() { return new AggregateEventIterator(fContributors, COMPARATOR); } @Override public Iterator<@NonNull ITimeEvent> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) { return new AggregateEventIterator(fContributors, startTime, stopTime, visibleDuration, COMPARATOR); } public void addContributor(ITimeGraphEntry entry) { fContributors.add(entry); } }