| /******************************************************************************* |
| * Copyright (c) 2018, 2019 Ericsson, École Polytechnique de Montréal |
| * |
| * All rights reserved. This program and the accompanying materials are |
| * made available under the terms of the Eclipse Public License 2.0 which |
| * accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| *******************************************************************************/ |
| |
| package org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus; |
| |
| import java.util.List; |
| |
| import org.eclipse.jdt.annotation.NonNull; |
| import org.eclipse.tracecompass.tmf.core.TmfStrings; |
| import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel; |
| |
| import com.google.common.collect.ImmutableMultimap; |
| import com.google.common.collect.Multimap; |
| |
| /** |
| * {@link TimeGraphEntryModel} for the Resources Status data provider. |
| * |
| * @author Loic Prieur-Drevon |
| */ |
| public class ResourcesEntryModel extends TimeGraphEntryModel { |
| |
| /** Type of entry */ |
| public enum Type { |
| /** Group entries (trace, separators) */ |
| GROUP, |
| /** Entries for CPUs */ |
| CPU, |
| /** Entries for Current Thread */ |
| CURRENT_THREAD, |
| /** Entries for CPU frequencies */ |
| FREQUENCY, |
| /** Entries for IRQs */ |
| IRQ, |
| /** Entries for Soft IRQ */ |
| SOFT_IRQ |
| } |
| |
| private final int fResourceId; |
| private final Type fType; |
| |
| private final @NonNull Multimap<@NonNull String, @NonNull Object> fAspects; |
| |
| /** |
| * Constructor |
| * |
| * @param id |
| * unique Entry ID |
| * @param parentId |
| * parent ID |
| * @param labels |
| * entry labels |
| * @param startTime |
| * start time for this entry |
| * @param endTime |
| * end time for this entry |
| * @param resourceId |
| * resource ID (IRQ or CPU number) |
| * @param type |
| * type of entry (GROUP / CPU / CURRENT_THREAD / IRQ / SOFT_IRQ) |
| */ |
| public ResourcesEntryModel(long id, long parentId, @NonNull List<@NonNull String> labels, long startTime, long endTime, int resourceId, Type type) { |
| super(id, parentId, labels, startTime, endTime, type != Type.GROUP); |
| fResourceId = resourceId; |
| fType = type; |
| switch (type) { |
| case CPU: // resourceID is CPU, fall-through |
| case CURRENT_THREAD: // resourceID is CPU, fall-through |
| case FREQUENCY: // resourceID is CPU, fall-through |
| fAspects = ImmutableMultimap.of(TmfStrings.cpu(), resourceId); |
| break; |
| case IRQ: |
| case SOFT_IRQ: // Fall-through |
| case GROUP: // Fall-through |
| default: |
| fAspects = ImmutableMultimap.of(); |
| break; |
| |
| } |
| } |
| |
| /** |
| * Get this entry's resource ID (IRQ or CPU number) |
| * |
| * @return the resource ID. |
| */ |
| public int getResourceId() { |
| return fResourceId; |
| } |
| |
| /** |
| * Get this entry's type (TRACE / CPU / IRQ / SOFT_IRQ) |
| * |
| * @return the type of entry |
| */ |
| public Type getType() { |
| return fType; |
| } |
| |
| @Override |
| public @NonNull Multimap<@NonNull String, @NonNull Object> getMetadata() { |
| return fAspects; |
| } |
| |
| } |