/*******************************************************************************
* Copyright (C) 2014, 2015 Google Inc and others.
* 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
*
* Contributors:
* Marcus Eng (Google) - initial API and implementation
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.ui.monitoring;
import java.lang.management.ThreadInfo;
/**
* A sample of the stack that contains the stack traces and the time stamp.
*
* @noextend This class is not intended to be subclassed by clients.
* @since 1.0
*/
public class StackSample {
private final long timestamp;
private final ThreadInfo[] traces;
/**
* Creates a StackSample.
*
* @param timestamp time in milliseconds since January 1, 1970 UTC when the thread stacks
* were sampled
* @param traces thread information for either all threads or just the display thread,
* depending on the value of the {@link PreferenceConstants#DUMP_ALL_THREADS} preference
*/
public StackSample(long timestamp, ThreadInfo[] traces) {
this.timestamp = timestamp;
this.traces = traces;
}
/**
* Returns the time stamp in milliseconds since January 1, 1970 UTC for this
* {@code StackSample}.
*/
public final long getTimestamp() {
return timestamp;
}
/**
* Returns an array of {@code ThreadInfo}s for this {@code StackSample}. The display thread is
* always the first in the array.
*/
public final ThreadInfo[] getStackTraces() {
return traces;
}
/** For debugging only. */
@Override
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append("At "); //$NON-NLS-1$
buf.append(timestamp);
if (traces.length != 0) {
buf.append(" threads:\n"); //$NON-NLS-1$
for (ThreadInfo threadInfo : traces) {
buf.append(threadInfo.toString());
}
}
return buf.toString();
}
}