fBot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "0", 0, 2));
tableBot.header("Duration").click();
// FIXME: Should be 999,999, but sorting on disk does not work well yet
- fBot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "818,799", 0, 2));
+ fBot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "818,399", 0, 2));
} finally {
Files.delete(segmentFile);
}
package org.eclipse.tracecompass.segmentstore.core.tests.perf;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.nio.file.Files;
populate(size, fuzz, fSegStore, 0, getSegmentStoreSize());
pMinsertion.stop();
+ if (i == 0) {
+ /**
+ * Assert that the segments are returned in the correct order,
+ * the benchmark will be irrelevant if the contract is not
+ * respected.
+ */
+ assertOrder(fSegStore, SegmentComparators.INTERVAL_START_COMPARATOR);
+ assertOrder(fSegStore, SegmentComparators.INTERVAL_END_COMPARATOR);
+ assertOrder(fSegStore, SegmentComparators.INTERVAL_LENGTH_COMPARATOR);
+ }
+
pMiterateStart.start();
int count = sortedIterate(fSegStore, SegmentComparators.INTERVAL_START_COMPARATOR);
pMiterateStart.stop();
return iterate(iterable);
}
+ private static void assertOrder(ISegmentStore<@NonNull BasicSegment> store, Comparator<@NonNull ISegment> order) {
+ Iterable<@NonNull BasicSegment> iterable = store.iterator(order);
+ BasicSegment prev = null;
+ long count = 0L;
+ for (BasicSegment segment : iterable) {
+ if (prev != null) {
+ assertTrue("Incorrect iteration order at: " + count + ", prev: " + prev + ", current: " + segment, order.compare(prev, segment) <= 0);
+ }
+ prev = segment;
+ count++;
+ }
+ }
+
private static void populate(int size, int[] fuzz, ISegmentStore<@NonNull BasicSegment> store, long low, long high) {
for (long i = low; i < high; i++) {
long start = i + fuzz[(int) (i % size)];
public static Iterable<Object[]> getParameters() {
return Arrays.asList(new Object[][] {
{ "Segment tree core node",
- HTNode.COMMON_HEADER_SIZE + Integer.BYTES + Integer.BYTES * NB_CHILDREN + 6 * Long.BYTES * NB_CHILDREN,
+ HTNode.COMMON_HEADER_SIZE + Integer.BYTES + Integer.BYTES * NB_CHILDREN + 6 * Long.BYTES * NB_CHILDREN + 4 * Long.BYTES,
SegmentTreeNodeStub.NODE_FACTORY,
BasicSegment.BASIC_SEGMENT_READ_FACTORY,
BASE_SEGMENT_FACTORY },
// Verify the default values
assertEquals(start, stub.getMaxStart());
- assertEquals(Long.MAX_VALUE, stub.getMinEnd());
+ assertEquals(start, stub.getMinEnd());
assertEquals(Long.MAX_VALUE, stub.getShortest());
assertEquals(0, stub.getLongest());
// Verify the default values
assertEquals(start, parentStub.getMaxStart(0));
- assertEquals(Long.MAX_VALUE, parentStub.getMinEnd(0));
+ assertEquals(start, parentStub.getMinEnd(0));
assertEquals(Long.MAX_VALUE, parentStub.getShortest(0));
assertEquals(0, parentStub.getLongest(0));
// ... but not the parent's own data
assertEquals(start, parentStub.getMaxStart());
- assertEquals(Long.MAX_VALUE, parentStub.getMinEnd());
+ assertEquals(start, parentStub.getMinEnd());
assertEquals(Long.MAX_VALUE, parentStub.getShortest());
assertEquals(0, parentStub.getLongest());
}
public static Iterable<Object[]> getParameters() {
return Arrays.asList(new Object[][] {
{ "Segment tree node",
- HTNode.COMMON_HEADER_SIZE,
+ HTNode.COMMON_HEADER_SIZE + 4 * Long.BYTES,
SegmentTreeNodeStub.NODE_FACTORY,
BasicSegment.BASIC_SEGMENT_READ_FACTORY,
BASE_SEGMENT_FACTORY
* @return the earliest end time of this node's intervals
*/
public long getMinEnd() {
- return fMinEnd;
+ return fMinEnd != Long.MAX_VALUE ? fMinEnd : getNodeStart();
}
/**
return fLongest;
}
+ @Override
+ protected void readSpecificHeader(@NonNull ByteBuffer buffer) {
+ super.readSpecificHeader(buffer);
+ fMaxStart = buffer.getLong();
+ fMinEnd = buffer.getLong();
+ fShortest = buffer.getLong();
+ fLongest = buffer.getLong();
+ }
+
+ @Override
+ protected void writeSpecificHeader(@NonNull ByteBuffer buffer) {
+ super.writeSpecificHeader(buffer);
+ buffer.putLong(fMaxStart);
+ buffer.putLong(fMinEnd);
+ buffer.putLong(fShortest);
+ buffer.putLong(fLongest);
+ }
+
+ @Override
+ protected int getSpecificHeaderSize() {
+ return super.getSpecificHeaderSize() + 4 * Long.BYTES;
+ }
+
/**
* Get the children intersecting the given time range, and return the least
* element for each child wrt to the comparator