blob: 630f9d59172dac8eb400bf9a641d84d6b43a318b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2014 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
* Francois Chouinard - Moved from LTTng to TMF
******************************************************************************/
package org.eclipse.tracecompass.tmf.ui.views.distribution.model;
/**
* Class with basic distribution data used for distribution models.
*
* It stores number of events (with timestamp) in buckets with a start time and a
* certain duration. The duration is the same across all buckets.
* Note that Timestamps are stored as long values.
*
* @version 1.0
* @author Bernd Hufmann
*/
public class BaseDistributionData {
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
/**
* Constant indication that bucket is not filled.
*/
public static final int OUT_OF_RANGE_BUCKET = -1;
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/**
* Number of buckets
*/
protected final int fNbBuckets;
/**
* Duration of each bucket
*/
protected long fBucketDuration;
/**
* Bucket index of last event time
*/
protected int fLastBucket;
/**
* Timestamp of the first bucket. (could be negative when analyzing events with descending time!!!)
*/
protected long fFirstBucketTime;
/**
* Timestamp of the first event
*/
protected long fFirstEventTime;
/**
* Timestamp of the last event
*/
protected long fLastEventTime;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructs a base distribution data object.
* @param nbBuckets A total number of buckets
*/
public BaseDistributionData(int nbBuckets) {
fNbBuckets = nbBuckets;
clear();
}
// ------------------------------------------------------------------------
// Accessors
// ------------------------------------------------------------------------
/**
* Returns the total number of buckets.
*
* @return the number of buckets.
*/
public int getNbBuckets() {
return fNbBuckets;
}
/**
* Returns the duration of buckets.
*
* @return bucket duration
*/
public long getBucketDuration() {
return fBucketDuration;
}
/**
* Set the bucket duration.
*
* @param bucketDuration The duration to set.
*/
public void setBucketDuration(long bucketDuration) {
fBucketDuration = bucketDuration;
}
/**
* Returns the index of the last used bucket.
*
* @return last bucket index.
*/
public int getLastBucket() {
return fLastBucket;
}
/**
* Sets the index of the last bucket used.
*
* @param lastBucket The last bucket index to set.
*/
public void setLastBucket(int lastBucket) {
fLastBucket = lastBucket;
}
/**
* Returns the start time of the first bucket.
*
* @return first bucket time.
*/
public long getFirstBucketTime() {
return fFirstBucketTime;
}
/**
* Sets the start time of the first bucket.
*
* @param firstBucketTime The bucket time to ser.
*/
public void setFirstBucketTime(long firstBucketTime) {
fFirstBucketTime = firstBucketTime;
}
/**
* Returns the start time of the last bucket used.
*
* @return the start time of the last bucket.
*/
public long getLastBucketTime() {
return getBucketStartTime(fLastBucket);
}
/**
* Returns the time of the event with the lowest timestamp.
*
* @return first event time.
*/
public long getFirstEventTime() {
return fFirstEventTime;
}
/**
* Sets the time of the event with the lowest timestamp.
*
* @param firstEventTime The first event time to set.
*/
public void setFirstEventTime(long firstEventTime) {
fFirstEventTime = firstEventTime;
}
/**
* Returns the time of the event with the biggest timestamp.
*
* @return the last event time.
*/
public long getLastEventTime() {
return fLastEventTime;
}
/**
* Sets the time of the event with the biggest timestamp.
*
* @param lastEventTime The last event time to set.
*/
public void setLastEventTime(long lastEventTime) {
fLastEventTime = lastEventTime;
}
/**
* Returns the bucket start time of a given bucket index.
*
* @param index The bucket index.
* @return the bucket start time of a given bucket index.
*/
public long getBucketStartTime(int index) {
return fFirstBucketTime + index * fBucketDuration;
}
/**
* Returns the bucket end time of a given bucket index.
*
* @param index The bucket index.
* @return the bucket start time of a given bucket index.
*/
public long getBucketEndTime(int index) {
return getBucketStartTime(index) + fBucketDuration;
}
/**
* Returns the bucket index of the bucket containing a given time.
*
* @param time The timestamp to check.
* @return the bucket index of the bucket containing the given time.
*/
public int getIndex(long time) {
return (int)((time - fFirstBucketTime) / fBucketDuration);
}
/**
* Check if an index is valid.
*
* @param index
* The index to check
* @return If it's valid, true or false.
*/
public boolean isIndexValid(int index) {
return ((index >= 0) && (index <= fNbBuckets - 1));
}
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
/**
* Clears the data model to default values.
*/
public void clear() {
fFirstBucketTime = 0;
fFirstEventTime = 0;
fLastEventTime = 0;
fLastBucket = 0;
fBucketDuration = 1;
}
}