Search in sources :

Example 1 with Type

use of org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel.Type in project tracecompass by tracecompass.

the class ResourcesStatusDataProvider method getRowModel.

@Override
public TimeGraphModel getRowModel(ITmfStateSystem ss, @NonNull Map<@NonNull String, @NonNull Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
    TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(), Comparator.comparing(ITmfStateInterval::getStartTime));
    SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(parameters);
    if (filter == null) {
        return null;
    }
    Map<@NonNull Long, @NonNull Integer> idsToQuark = getSelectedEntries(filter);
    /* Add the mapping for twin entries as they are not in the parent class BiMap */
    addTwinIrqIds(filter, idsToQuark);
    Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime());
    /* Do the actual query */
    Collection<@NonNull Integer> quarks = addThreadStatus(ss, idsToQuark.values());
    for (ITmfStateInterval interval : ss.query2D(quarks, times)) {
        if (monitor != null && monitor.isCanceled()) {
            return null;
        }
        intervals.put(interval.getAttribute(), interval);
    }
    Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates = new HashMap<>();
    Multimap<@NonNull Integer, @NonNull String> regexesMap = DataProviderParameterUtils.extractRegexFilter(parameters);
    if (regexesMap != null) {
        predicates.putAll(computeRegexPredicate(regexesMap));
    }
    @NonNull List<@NonNull ITimeGraphRowModel> rows = new ArrayList<>();
    for (Map.Entry<Long, Integer> idToQuark : idsToQuark.entrySet()) {
        if (monitor != null && monitor.isCanceled()) {
            return null;
        }
        Long key = Objects.requireNonNull(idToQuark.getKey());
        List<ITimeGraphState> eventList = new ArrayList<>();
        for (ITmfStateInterval interval : intervals.get(idToQuark.getValue())) {
            long startTime = interval.getStartTime();
            long duration = interval.getEndTime() - startTime + 1;
            Object status = interval.getValue();
            Type type = fEntryModelTypes.get(interval.getAttribute());
            if (status instanceof Integer) {
                int s = (int) status;
                int currentThreadQuark = ss.optQuarkRelative(interval.getAttribute(), Attributes.CURRENT_THREAD);
                if (type == Type.CPU && s == StateValues.CPU_STATUS_RUN_SYSCALL) {
                    // add events for all the sampled current threads.
                    List<@NonNull ITimeGraphState> syscalls = getSyscalls(ss, interval, intervals.get(currentThreadQuark));
                    syscalls.forEach(timeGraphState -> applyFilterAndAddState(eventList, timeGraphState, key, predicates, monitor));
                } else if (type == Type.CPU && s == StateValues.CPU_STATUS_RUN_USERMODE) {
                    // add events for all the sampled current threads.
                    List<@NonNull TimeGraphState> currentThreads = getCurrentThreads(ss, interval, intervals.get(currentThreadQuark));
                    currentThreads.forEach(timeGraphState -> applyFilterAndAddState(eventList, timeGraphState, key, predicates, monitor));
                } else if (type == Type.CURRENT_THREAD && s != 0) {
                    String execName = null;
                    synchronized (fExecNamesCache) {
                        if (fExecNamesCache.containsEntry(status, interval)) {
                            NavigableSet<ITmfStateInterval> intervalSet = fExecNamesCache.get(s);
                            ITmfStateInterval execNameInterval = intervalSet.ceiling(interval);
                            if (execNameInterval != null && CACHE_COMPARATOR.compare(execNameInterval, interval) == 0) {
                                execName = (String) execNameInterval.getValue();
                            }
                        } else {
                            int quark = ss.optQuarkAbsolute(Attributes.THREADS, Integer.toString(s), Attributes.EXEC_NAME);
                            if (quark != ITmfStateSystem.INVALID_ATTRIBUTE) {
                                ITmfStateInterval namedInterval = ss.querySingleState(interval.getEndTime(), quark);
                                fExecNamesCache.put(s, namedInterval);
                                execName = (String) namedInterval.getValue();
                            }
                        }
                    }
                    TimeGraphState timeGraphState = new TimeGraphState(startTime, duration, execName != null ? execName + ' ' + '(' + String.valueOf(s) + ')' : String.valueOf(s), getSpecificStyleForTid(s));
                    applyFilterAndAddState(eventList, timeGraphState, key, predicates, monitor);
                } else if (type == Type.CURRENT_THREAD) {
                    // add null state when current thread is 0
                    ITimeGraphState timeGraphState = new TimeGraphState(startTime, duration, Integer.MIN_VALUE);
                    applyFilterAndAddState(eventList, timeGraphState, key, predicates, monitor);
                } else {
                    TimeGraphState timeGraphState = new TimeGraphState(startTime, duration, null, getElementStyle(type, s));
                    applyFilterAndAddState(eventList, timeGraphState, key, predicates, monitor);
                }
            } else if ((status instanceof Long) && (type == Type.FREQUENCY)) {
                long s = (long) status;
                // The value needs to fit in an integer (relative to max frequency)
                Long maxFrequency = fFreqMap.get(interval.getAttribute());
                TimeGraphState timeGraphState = new TimeGraphState(startTime, duration, String.valueOf(FREQUENCY_FORMATTER.format(s)), getSpecificStyleForFrequency((int) (s / FREQUENCY_MULTIPLIER), key, maxFrequency));
                applyFilterAndAddState(eventList, timeGraphState, key, predicates, monitor);
            } else {
                ITimeGraphState timeGraphState = new TimeGraphState(startTime, duration, Integer.MIN_VALUE);
                applyFilterAndAddState(eventList, timeGraphState, key, predicates, monitor);
            }
        }
        rows.add(new TimeGraphRowModel(idToQuark.getKey(), eventList));
    }
    synchronized (fExecNamesCache) {
        fExecNamesCache.clear();
    }
    return new TimeGraphModel(rows);
}
Also used : Arrays(java.util.Arrays) ITmfCallsite(org.eclipse.tracecompass.tmf.core.event.lookup.ITmfCallsite) Format(java.text.Format) OsStrings(org.eclipse.tracecompass.analysis.os.linux.core.model.OsStrings) IOutputAnnotationProvider(org.eclipse.tracecompass.internal.provisional.tmf.core.model.annotations.IOutputAnnotationProvider) ITmfEventAspect(org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect) Attributes(org.eclipse.tracecompass.internal.analysis.os.linux.core.kernel.Attributes) AbstractTimeGraphDataProvider(org.eclipse.tracecompass.internal.tmf.core.model.timegraph.AbstractTimeGraphDataProvider) HashMultimap(com.google.common.collect.HashMultimap) FieldPosition(java.text.FieldPosition) Nullable(org.eclipse.jdt.annotation.Nullable) TreeMultimap(com.google.common.collect.TreeMultimap) KernelAnalysisModule(org.eclipse.tracecompass.analysis.os.linux.core.kernel.KernelAnalysisModule) ITmfStateSystem(org.eclipse.tracecompass.statesystem.core.ITmfStateSystem) Map(java.util.Map) DecimalUnitFormat(org.eclipse.tracecompass.common.core.format.DecimalUnitFormat) ITmfCallsiteResolver(org.eclipse.tracecompass.tmf.core.analysis.callsite.ITmfCallsiteResolver) TmfStrings(org.eclipse.tracecompass.tmf.core.TmfStrings) LinuxStyle(org.eclipse.tracecompass.internal.analysis.os.linux.core.registry.LinuxStyle) TmfDeviceAspect(org.eclipse.tracecompass.tmf.core.event.aspect.TmfDeviceAspect) RGBAColor(org.eclipse.tracecompass.tmf.core.presentation.RGBAColor) OutputElementStyle(org.eclipse.tracecompass.tmf.core.model.OutputElementStyle) BiMap(com.google.common.collect.BiMap) ITmfTrace(org.eclipse.tracecompass.tmf.core.trace.ITmfTrace) TmfCpuAspect(org.eclipse.tracecompass.tmf.core.event.aspect.TmfCpuAspect) NLS(org.eclipse.osgi.util.NLS) ImmutableMap(com.google.common.collect.ImmutableMap) Predicate(java.util.function.Predicate) Collection(java.util.Collection) FetchParametersUtils(org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils) IOutputStyleProvider(org.eclipse.tracecompass.tmf.core.model.IOutputStyleProvider) Set(java.util.Set) NavigableSet(java.util.NavigableSet) OutputStyleModel(org.eclipse.tracecompass.tmf.core.model.OutputStyleModel) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) SelectionTimeQueryFilter(org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter) Objects(java.util.Objects) List(java.util.List) Entry(java.util.Map.Entry) X11ColorUtils(org.eclipse.tracecompass.tmf.core.dataprovider.X11ColorUtils) CallsiteAnalysis(org.eclipse.tracecompass.internal.tmf.core.analysis.callsite.CallsiteAnalysis) AnnotationModel(org.eclipse.tracecompass.internal.provisional.tmf.core.model.annotations.AnnotationModel) NonNull(org.eclipse.jdt.annotation.NonNull) AnnotationCategoriesModel(org.eclipse.tracecompass.internal.provisional.tmf.core.model.annotations.AnnotationCategoriesModel) Type(org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel.Type) ITmfStateInterval(org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval) Iterables(com.google.common.collect.Iterables) CommonStatusMessage(org.eclipse.tracecompass.tmf.core.model.CommonStatusMessage) ITimeGraphRowModel(org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel) TmfTreeModel(org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel) HashMap(java.util.HashMap) TimeGraphModel(org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel) Multimap(com.google.common.collect.Multimap) Function(java.util.function.Function) ArrayList(java.util.ArrayList) EventAnnotationProvider(org.eclipse.tracecompass.internal.provisional.tmf.core.model.annotations.EventAnnotationProvider) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) TimeGraphRowModel(org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel) ImmutableList(com.google.common.collect.ImmutableList) TmfModelResponse(org.eclipse.tracecompass.tmf.core.response.TmfModelResponse) RotatingPaletteProvider(org.eclipse.tracecompass.tmf.core.presentation.RotatingPaletteProvider) ITimeGraphArrow(org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow) StateSystemDisposedException(org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException) StyleProperties(org.eclipse.tracecompass.tmf.core.model.StyleProperties) ITmfResponse(org.eclipse.tracecompass.tmf.core.response.ITmfResponse) ITimeGraphState(org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState) StateValues(org.eclipse.tracecompass.analysis.os.linux.core.kernel.StateValues) TimeGraphState(org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState) DataProviderParameterUtils(org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils) IKernelTrace(org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelTrace) Ints(com.google.common.primitives.Ints) HashBiMap(com.google.common.collect.HashBiMap) TmfTraceUtils(org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils) Comparator(java.util.Comparator) Collections(java.util.Collections) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ITmfStateInterval(org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval) ArrayList(java.util.ArrayList) ITimeGraphRowModel(org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel) TimeGraphRowModel(org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel) Predicate(java.util.function.Predicate) ITimeGraphRowModel(org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel) SelectionTimeQueryFilter(org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter) NonNull(org.eclipse.jdt.annotation.NonNull) List(java.util.List) ArrayList(java.util.ArrayList) ImmutableList(com.google.common.collect.ImmutableList) TimeGraphModel(org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel) ITimeGraphState(org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState) Type(org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel.Type) ITimeGraphState(org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState) TimeGraphState(org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState) Map(java.util.Map) BiMap(com.google.common.collect.BiMap) ImmutableMap(com.google.common.collect.ImmutableMap) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) HashBiMap(com.google.common.collect.HashBiMap)

Example 2 with Type

use of org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel.Type in project tracecompass by tracecompass.

the class ResourcesPresentationProvider method getEventState.

private static StateItem getEventState(TimeEvent event) {
    if (event instanceof NullTimeEvent) {
        return null;
    }
    ITimeGraphEntry entry = event.getEntry();
    if (entry instanceof TimeGraphEntry && ((TimeGraphEntry) entry).getEntryModel() instanceof ResourcesEntryModel) {
        int value = event.getValue();
        ResourcesEntryModel resourcesModel = (ResourcesEntryModel) ((TimeGraphEntry) entry).getEntryModel();
        Type type = resourcesModel.getType();
        switch(type) {
            case CPU:
                return STATE_MAP.get(value);
            case IRQ:
                return STATE_MAP.get(StateValues.CPU_STATUS_IRQ);
            case SOFT_IRQ:
                if (value == StateValues.CPU_STATUS_SOFT_IRQ_RAISED) {
                    return STATE_MAP.get(StateValues.CPU_STATUS_SOFT_IRQ_RAISED);
                }
                return STATE_MAP.get(StateValues.CPU_STATUS_SOFTIRQ);
            case GROUP:
                return null;
            case CURRENT_THREAD:
            case FREQUENCY:
                if (!event.hasValue()) {
                    return null;
                }
                return STATE_MAP.get(StateValues.CPU_STATUS_RUN_USERMODE);
            default:
                return null;
        }
    }
    return null;
}
Also used : NullTimeEvent(org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.NullTimeEvent) Type(org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel.Type) ITimeGraphEntry(org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry) ResourcesEntryModel(org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel) TimeGraphEntry(org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeGraphEntry) ITimeGraphEntry(org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry)

Example 3 with Type

use of org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel.Type in project tracecompass by tracecompass.

the class ResourcesView method fillTimeGraphEntryContextMenu.

/**
 * @since 2.0
 */
@Override
protected void fillTimeGraphEntryContextMenu(@NonNull IMenuManager menuManager) {
    ISelection selection = getSite().getSelectionProvider().getSelection();
    if (selection instanceof IStructuredSelection) {
        IStructuredSelection sSel = (IStructuredSelection) selection;
        if (sSel.getFirstElement() instanceof TimeGraphEntry) {
            TimeGraphEntry resourcesEntry = (TimeGraphEntry) sSel.getFirstElement();
            ITmfTreeDataModel model = resourcesEntry.getEntryModel();
            if (model instanceof ResourcesEntryModel) {
                ResourcesEntryModel resourcesModel = (ResourcesEntryModel) model;
                Type type = resourcesModel.getType();
                if (type == Type.CPU || type == Type.CURRENT_THREAD) {
                    ITmfTrace trace = getTrace(resourcesEntry);
                    TmfTraceContext ctx = TmfTraceManager.getInstance().getTraceContext(trace);
                    Integer data = (Integer) ctx.getData(RESOURCES_FOLLOW_CPU);
                    int cpu = data != null ? data.intValue() : -1;
                    if (cpu >= 0) {
                        menuManager.add(new UnfollowCpuAction(ResourcesView.this, resourcesModel.getResourceId(), trace));
                    } else {
                        menuManager.add(new FollowCpuAction(ResourcesView.this, resourcesModel.getResourceId(), trace));
                    }
                }
            }
        }
    }
}
Also used : ITmfTrace(org.eclipse.tracecompass.tmf.core.trace.ITmfTrace) ITmfTreeDataModel(org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataModel) Type(org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel.Type) TmfTraceContext(org.eclipse.tracecompass.tmf.core.trace.TmfTraceContext) FollowCpuAction(org.eclipse.tracecompass.internal.analysis.os.linux.ui.actions.FollowCpuAction) ISelection(org.eclipse.jface.viewers.ISelection) ResourcesEntryModel(org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) TimeGraphEntry(org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeGraphEntry) ITimeGraphEntry(org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry) UnfollowCpuAction(org.eclipse.tracecompass.internal.analysis.os.linux.ui.actions.UnfollowCpuAction)

Aggregations

Type (org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel.Type)3 ResourcesEntryModel (org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus.ResourcesEntryModel)2 ITimeGraphEntry (org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry)2 TimeGraphEntry (org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeGraphEntry)2 BiMap (com.google.common.collect.BiMap)1 HashBiMap (com.google.common.collect.HashBiMap)1 HashMultimap (com.google.common.collect.HashMultimap)1 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 Iterables (com.google.common.collect.Iterables)1 Multimap (com.google.common.collect.Multimap)1 TreeMultimap (com.google.common.collect.TreeMultimap)1 Ints (com.google.common.primitives.Ints)1 FieldPosition (java.text.FieldPosition)1 Format (java.text.Format)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 Comparator (java.util.Comparator)1