blob: b79e7b59a0e9632feef90301b501295ef7ba9f65 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2012, 2015 Ericsson
*
* 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
*
* Contributors:
* Bernd Hufmann - Initial API and implementation
* Simon Delisle - Updated for support of LTTng Tools 2.2
**********************************************************************/
package org.eclipse.tracecompass.internal.lttng2.control.core.model.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IChannelInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IEventInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceChannelOutputType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEnablement;
/**
* Implementation of the trace channel interface (IChannelInfo) to store channel
* related data.
*
* @author Bernd Hufmann
*/
public class ChannelInfo extends TraceInfo implements IChannelInfo {
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/**
* The overwrite mode of the channel.
*/
private boolean fOverwriteMode;
/**
* The sub-buffer size of the channel.
*/
private long fSubBufferSize;
/**
* The number of sub-buffers of the channel.
*/
private int fNumberOfSubBuffers;
/**
* The switch timer interval of the channel.
*/
private long fSwitchTimer;
/**
* The read timer interval of the channel.
*/
private long fReadTimer;
/**
* The Output type of the channel.
*/
private TraceChannelOutputType fOutputType = TraceChannelOutputType.UNKNOWN;
/**
* The channel enable state.
*/
private TraceEnablement fState = TraceEnablement.DISABLED;
/**
* The events information of the channel.
*/
private final List<IEventInfo> fEvents = new ArrayList<>();
/**
* The maximum size of trace files
*/
private long fMaxSizeTraceFiles;
/**
* The maximum number of trace files
*/
private int fMaxNumberTraceFiles;
/**
* The value of buffer type
*/
private BufferType fBufferType = BufferType.BUFFER_TYPE_UNKNOWN;
/**
* The number of discarded events
*/
private long fNumberOfDiscardedEvents;
/**
* The number of lost packets
*/
private long fNumberOfLostPackets;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor
*
* @param name
* - name channel
*/
public ChannelInfo(String name) {
super(name);
}
/**
* Copy constructor
*
* @param other
* - the instance to copy
*/
public ChannelInfo(ChannelInfo other) {
super(other);
fOverwriteMode = other.fOverwriteMode;
fSubBufferSize = other.fSubBufferSize;
fNumberOfSubBuffers = other.fNumberOfSubBuffers;
fSwitchTimer = other.fSwitchTimer;
fReadTimer = other.fReadTimer;
fMaxSizeTraceFiles = other.fMaxSizeTraceFiles;
fMaxNumberTraceFiles = other.fMaxNumberTraceFiles;
fBufferType = other.fBufferType;
fOutputType = (other.fOutputType == null ? null : other.fOutputType);
fState = other.fState;
fNumberOfDiscardedEvents = other.fNumberOfDiscardedEvents;
fNumberOfLostPackets = other.fNumberOfLostPackets;
for (Iterator<IEventInfo> iterator = other.fEvents.iterator(); iterator.hasNext();) {
IEventInfo event = iterator.next();
if (event instanceof EventInfo) {
fEvents.add(new EventInfo((EventInfo) event));
} else {
fEvents.add(event);
}
}
}
// ------------------------------------------------------------------------
// Accessors
// ------------------------------------------------------------------------
@Override
public boolean isOverwriteMode() {
return fOverwriteMode;
}
@Override
public void setOverwriteMode(boolean mode) {
fOverwriteMode = mode;
}
@Override
public long getSubBufferSize() {
return fSubBufferSize;
}
@Override
public void setSubBufferSize(long bufferSize) {
fSubBufferSize = bufferSize;
}
@Override
public int getNumberOfSubBuffers() {
return fNumberOfSubBuffers;
}
@Override
public void setNumberOfSubBuffers(int numberOfSubBuffers) {
fNumberOfSubBuffers = numberOfSubBuffers;
}
@Override
public long getSwitchTimer() {
return fSwitchTimer;
}
@Override
public void setSwitchTimer(long timer) {
fSwitchTimer = timer;
}
@Override
public long getReadTimer() {
return fReadTimer;
}
@Override
public void setReadTimer(long timer) {
fReadTimer = timer;
}
@Override
public TraceChannelOutputType getOutputType() {
return fOutputType;
}
@Override
public void setOutputType(String type) {
fOutputType = TraceChannelOutputType.valueOfString(type);
}
@Override
public void setOutputType(TraceChannelOutputType type) {
fOutputType = type;
}
@Override
public TraceEnablement getState() {
return fState;
}
@Override
public void setState(TraceEnablement state) {
fState = state;
}
@Override
public void setState(String stateName) {
fState = TraceEnablement.valueOfString(stateName);
}
@Override
public IEventInfo[] getEvents() {
return fEvents.toArray(new IEventInfo[fEvents.size()]);
}
@Override
public void setEvents(List<IEventInfo> events) {
fEvents.clear();
for (Iterator<IEventInfo> iterator = events.iterator(); iterator.hasNext();) {
IEventInfo eventInfo = iterator.next();
fEvents.add(eventInfo);
}
}
@Override
public void addEvent(IEventInfo channel) {
fEvents.add(channel);
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + fEvents.hashCode();
result = prime * result + fNumberOfSubBuffers;
result = prime * result + ((fOutputType == null) ? 0 : fOutputType.hashCode());
result = prime * result + (fOverwriteMode ? 1231 : 1237);
result = prime * result + (int) (fReadTimer ^ (fReadTimer >>> 32));
result = prime * result + ((fState == null) ? 0 : (fState.ordinal() + 1));
result = prime * result + (int) (fSubBufferSize ^ (fSubBufferSize >>> 32));
result = prime * result + (int) (fSwitchTimer ^ (fSwitchTimer >>> 32));
result = prime * result + ((fBufferType == null) ? 0 : (fBufferType.ordinal() + 1));
result = prime * result + (int) (fNumberOfDiscardedEvents ^ (fNumberOfDiscardedEvents >>> 32));
result = prime * result + (int) (fNumberOfLostPackets ^ (fNumberOfLostPackets >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!super.equals(obj)) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
ChannelInfo other = (ChannelInfo) obj;
if (!fEvents.equals(other.fEvents)) {
return false;
}
if (fNumberOfSubBuffers != other.fNumberOfSubBuffers) {
return false;
}
if (fOutputType == null) {
if (other.fOutputType != null) {
return false;
}
} else if (!fOutputType.equals(other.fOutputType)) {
return false;
}
if (fOverwriteMode != other.fOverwriteMode) {
return false;
}
if (fReadTimer != other.fReadTimer) {
return false;
}
if (fState != other.fState) {
return false;
}
if (fSubBufferSize != other.fSubBufferSize) {
return false;
}
if (fSwitchTimer != other.fSwitchTimer) {
return false;
}
if (fBufferType != other.fBufferType) {
return false;
}
if (fNumberOfDiscardedEvents != other.fNumberOfDiscardedEvents) {
return false;
}
return (fNumberOfLostPackets == other.fNumberOfLostPackets);
}
@SuppressWarnings("nls")
@Override
public String toString() {
StringBuffer output = new StringBuffer();
output.append("[ChannelInfo(");
output.append(super.toString());
output.append(",State=");
output.append(fState);
output.append(",OverwriteMode=");
output.append(fOverwriteMode);
output.append(",SubBuffersSize=");
output.append(fSubBufferSize);
output.append(",NumberOfSubBuffers=");
output.append(fNumberOfSubBuffers);
output.append(",SwitchTimer=");
output.append(fSwitchTimer);
output.append(",ReadTimer=");
output.append(fReadTimer);
output.append(",output=");
output.append(fOutputType.getInName());
output.append(",NumberOfDiscardedEvents=");
output.append(fNumberOfDiscardedEvents);
output.append(",NumberOfLostPackets=");
output.append(fNumberOfLostPackets);
if ((fBufferType != null) && !fBufferType.equals(BufferType.BUFFER_TYPE_UNKNOWN) && !fBufferType.equals(BufferType.BUFFER_SHARED)) {
output.append(",BufferType=");
output.append(fBufferType);
}
output.append(",Events=");
if (fEvents.isEmpty()) {
output.append("None");
} else {
for (Iterator<IEventInfo> iterator = fEvents.iterator(); iterator.hasNext();) {
IEventInfo event = iterator.next();
output.append(event.toString());
}
}
output.append(")]");
return output.toString();
}
@Override
public void setMaxSizeTraceFiles(long maxSizeTraceFiles) {
fMaxSizeTraceFiles = maxSizeTraceFiles;
}
@Override
public void setMaxNumberTraceFiles(int maxNumberTraceFiles) {
fMaxNumberTraceFiles = maxNumberTraceFiles;
}
@Override
public long getMaxSizeTraceFiles() {
return fMaxSizeTraceFiles;
}
@Override
public int getMaxNumberTraceFiles() {
return fMaxNumberTraceFiles;
}
@Override
public void setBufferType(BufferType bufferType) {
fBufferType = bufferType;
}
@Override
public BufferType getBufferType() {
return fBufferType;
}
@Override
public void setNumberOfDiscardedEvents(long numberOfDiscardedEvents) {
fNumberOfDiscardedEvents = numberOfDiscardedEvents;
}
@Override
public long getNumberOfDiscardedEvents() {
return fNumberOfDiscardedEvents;
}
@Override
public void setNumberOfLostPackets(long numberOflostPackets) {
fNumberOfLostPackets = numberOflostPackets;
}
@Override
public long getNumberOfLostPackets() {
return fNumberOfLostPackets;
}
}