fix stream row calculation
This commit is contained in:
parent
a42f086339
commit
bca94ceb9d
|
@ -40,10 +40,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
|
||||||
TreeMap<Long, IEvent[]> events = new TreeMap<>();
|
TreeMap<Long, IEvent[]> events = new TreeMap<>();
|
||||||
|
|
||||||
/** The max concurrency. */
|
/** The max concurrency. */
|
||||||
private int maxConcurrency = 0;
|
private int rowCount = -1;
|
||||||
|
|
||||||
/** The concurrency calculated. */
|
|
||||||
boolean concurrencyCalculated = false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new abstract tx stream.
|
* Instantiates a new abstract tx stream.
|
||||||
|
@ -137,21 +134,21 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int getRowCount() {
|
public int getRowCount() {
|
||||||
if (!concurrencyCalculated)
|
if (rowCount<0)
|
||||||
calculateConcurrency();
|
calculateConcurrency();
|
||||||
return maxConcurrency;
|
return rowCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate concurrency.
|
* Calculate concurrency.
|
||||||
*/
|
*/
|
||||||
public void calculateConcurrency() {
|
void calculateConcurrency() {
|
||||||
if (concurrencyCalculated)
|
if (rowCount>=0)
|
||||||
return;
|
return;
|
||||||
ArrayList<Long> rowEndTime = new ArrayList<>();
|
ArrayList<Long> rowEndTime = new ArrayList<>();
|
||||||
HashMap<Long, Integer> rowByTxId = new HashMap<>();
|
HashMap<Long, Integer> rowByTxId = new HashMap<>();
|
||||||
events.entrySet().stream().forEach(entry -> {
|
for(Entry<Long, IEvent[]> entry: events.entrySet()) {
|
||||||
Arrays.asList(entry.getValue()).stream().forEach(evt -> {
|
for(IEvent evt:entry.getValue()) {
|
||||||
TxEvent txEvt = (TxEvent) evt;
|
TxEvent txEvt = (TxEvent) evt;
|
||||||
ITx tx = txEvt.getTransaction();
|
ITx tx = txEvt.getTransaction();
|
||||||
int rowIdx = 0;
|
int rowIdx = 0;
|
||||||
|
@ -162,7 +159,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
|
||||||
rowByTxId.remove(txId);
|
rowByTxId.remove(txId);
|
||||||
break;
|
break;
|
||||||
case SINGLE:
|
case SINGLE:
|
||||||
for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx) > tx.getBeginTime(); rowIdx++);
|
for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++);
|
||||||
if (rowEndTime.size() <= rowIdx)
|
if (rowEndTime.size() <= rowIdx)
|
||||||
rowEndTime.add(tx.getEndTime());
|
rowEndTime.add(tx.getEndTime());
|
||||||
else
|
else
|
||||||
|
@ -170,7 +167,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
|
||||||
((TxEvent) evt).setConcurrencyIndex(rowIdx);
|
((TxEvent) evt).setConcurrencyIndex(rowIdx);
|
||||||
break;
|
break;
|
||||||
case BEGIN:
|
case BEGIN:
|
||||||
for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx) > tx.getBeginTime(); rowIdx++);
|
for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++);
|
||||||
if (rowEndTime.size() <= rowIdx)
|
if (rowEndTime.size() <= rowIdx)
|
||||||
rowEndTime.add(tx.getEndTime());
|
rowEndTime.add(tx.getEndTime());
|
||||||
else
|
else
|
||||||
|
@ -179,10 +176,9 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
|
||||||
rowByTxId.put(tx.getId(), rowIdx);
|
rowByTxId.put(tx.getId(), rowIdx);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
});
|
}
|
||||||
maxConcurrency=rowEndTime.size();
|
rowCount=rowEndTime.size()>0?rowEndTime.size():1;
|
||||||
concurrencyCalculated = true;
|
|
||||||
getChildNodes().parallelStream().forEach(c -> ((TxGenerator)c).calculateConcurrency());
|
getChildNodes().parallelStream().forEach(c -> ((TxGenerator)c).calculateConcurrency());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -420,16 +420,13 @@ public class TextDbLoader implements IWaveformDbLoader {
|
||||||
TxGenerator gen = loader.txGenerators.get(scvTx.generatorId);
|
TxGenerator gen = loader.txGenerators.get(scvTx.generatorId);
|
||||||
TxStream stream = loader.txStreams.get(gen.stream.getId());
|
TxStream stream = loader.txStreams.get(gen.stream.getId());
|
||||||
if (scvTx.beginTime == scvTx.endTime) {
|
if (scvTx.beginTime == scvTx.endTime) {
|
||||||
TxEvent evt = new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime);
|
stream.addEvent(new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime));
|
||||||
stream.addEvent(evt);
|
gen.addEvent(new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime));
|
||||||
gen.addEvent(evt);
|
|
||||||
} else {
|
} else {
|
||||||
TxEvent begEvt = new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime);
|
stream.addEvent(new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime));
|
||||||
stream.addEvent(begEvt);
|
gen.addEvent(new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime));
|
||||||
gen.addEvent(begEvt);
|
stream.addEvent(new TxEvent(loader, EventKind.END, id, scvTx.endTime));
|
||||||
TxEvent endEvt = new TxEvent(loader, EventKind.END, id, scvTx.endTime);
|
gen.addEvent(new TxEvent(loader, EventKind.END, id, scvTx.endTime));
|
||||||
stream.addEvent(endEvt);
|
|
||||||
gen.addEvent(endEvt);
|
|
||||||
}
|
}
|
||||||
if (nextLine != null && nextLine.charAt(0) == 'a') {
|
if (nextLine != null && nextLine.charAt(0) == 'a') {
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
|
@ -83,13 +83,4 @@ class TxGenerator extends AbstractTxStream {
|
||||||
return stream.getKind();
|
return stream.getKind();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the width.
|
|
||||||
*
|
|
||||||
* @return the width
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int getRowCount() {
|
|
||||||
return stream.getRowCount();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,8 +118,4 @@ public class VCDSignal<T extends IEvent> extends HierNode implements IWaveform {
|
||||||
return "signal";
|
return "signal";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void calculateConcurrency() {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,8 +79,4 @@ public interface IWaveform extends IHierNode {
|
||||||
*/
|
*/
|
||||||
public int getRowCount();
|
public int getRowCount();
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate the concurrency (th enumber of parallel ongoing events) of the waveform.
|
|
||||||
*/
|
|
||||||
public void calculateConcurrency();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,18 +19,18 @@
|
||||||
<booleanAttribute key="includeOptional" value="true"/>
|
<booleanAttribute key="includeOptional" value="true"/>
|
||||||
<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
|
<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
<listEntry value="/com.minres.scviewer.database.test"/>
|
<listEntry value="/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
<listEntry value="4"/>
|
<listEntry value="1"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=com.minres.scviewer.database.test"/>
|
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
|
||||||
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
|
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
|
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
|
||||||
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
|
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
|
||||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.minres.scviewer.database.test.DatabaseServicesTest"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.minres.scviewer.database.test"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.minres.scviewer.database.test"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
|
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
|
||||||
|
|
Loading…
Reference in New Issue