blob: 5721985f0864b9466b07ac7188f6c9693be61acb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 É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.lttng2.ust.core.analysis.memory;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.datastore.core.interval.IHTIntervalReader;
import org.eclipse.tracecompass.datastore.core.serialization.ISafeByteBufferWriter;
import org.eclipse.tracecompass.segmentstore.core.BasicSegment;
import org.eclipse.tracecompass.segmentstore.core.ISegment;
import org.eclipse.tracecompass.segmentstore.core.segment.interfaces.INamedSegment;
/**
* A segment representing an allocated memory pointer that was not deallocated
* during the trace time. The start time would be the time of allocation and the
* end time is typically the end time of the trace.
*
* @author Geneviève Bastien
*/
public class PotentialLeakSegment extends BasicSegment implements INamedSegment {
/**
* The factory to read this segment from a buffer
*/
public static final @NonNull IHTIntervalReader<@NonNull ISegment> MEMORY_SEGMENT_READ_FACTORY = buffer -> {
return new PotentialLeakSegment(buffer.getLong(), buffer.getLong(), buffer.getLong());
};
/**
* Generated serial ID
*/
private static final long serialVersionUID = 4906743387056014569L;
private final Long fTid;
/**
* Constructor
*
* @param start
* The start time of the segment
* @param end
* The end time
* @param tid
* The ID of the thread doing the allocation
*/
public PotentialLeakSegment(long start, long end, Long tid) {
super(start, end);
fTid = tid;
}
@Override
public int getSizeOnDisk() {
return Long.BYTES * 3;
}
@Override
public void writeSegment(@NonNull ISafeByteBufferWriter buffer) {
buffer.putLong(getStart());
buffer.putLong(getEnd());
buffer.putLong(fTid);
}
/**
* Get the tid of this segment
*
* @return The thread ID
*/
public @NonNull Integer getTid() {
return fTid.intValue();
}
@Override
public @NonNull String getName() {
return String.valueOf(getTid());
}
}