From efd042dd222a2e05c493ace426544be5d6fa7bd6 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Tue, 12 Jan 2021 20:28:51 +0100 Subject: [PATCH 01/12] fix duplicate version numbers --- plugins/com.minres.scviewer.e4.application/pom.xml | 1 - releng/com.minres.scviewer.updateSite/pom.xml | 1 - 2 files changed, 2 deletions(-) diff --git a/plugins/com.minres.scviewer.e4.application/pom.xml b/plugins/com.minres.scviewer.e4.application/pom.xml index abc9a75..54ca93a 100644 --- a/plugins/com.minres.scviewer.e4.application/pom.xml +++ b/plugins/com.minres.scviewer.e4.application/pom.xml @@ -3,7 +3,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.minres.scviewer.e4.application - 2.11.2-SNAPSHOT com.minres.scviewer com.minres.scviewer.parent diff --git a/releng/com.minres.scviewer.updateSite/pom.xml b/releng/com.minres.scviewer.updateSite/pom.xml index dc470fa..12a5253 100644 --- a/releng/com.minres.scviewer.updateSite/pom.xml +++ b/releng/com.minres.scviewer.updateSite/pom.xml @@ -3,7 +3,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.minres.scviewer.updateSite - 2.11.2-SNAPSHOT eclipse-repository com.minres.scviewer From 26e8ea8a515781579d126f9628ffe9546b436ebe Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Thu, 14 Jan 2021 21:57:27 +0100 Subject: [PATCH 02/12] change design browser icons --- .../icons/lightbulb_off.png | Bin 0 -> 700 bytes .../icons/stream.png | Bin 444 -> 536 bytes .../icons/stream_hier.png | Bin 0 -> 688 bytes .../provider/TxDbLabelProvider.java | 17 +++++++++++++---- 4 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 plugins/com.minres.scviewer.e4.application/icons/lightbulb_off.png mode change 100755 => 100644 plugins/com.minres.scviewer.e4.application/icons/stream.png create mode 100755 plugins/com.minres.scviewer.e4.application/icons/stream_hier.png diff --git a/plugins/com.minres.scviewer.e4.application/icons/lightbulb_off.png b/plugins/com.minres.scviewer.e4.application/icons/lightbulb_off.png new file mode 100644 index 0000000000000000000000000000000000000000..e95b8c5b1244a41c9dfacd733ec652a532052a45 GIT binary patch literal 700 zcmV;t0z>_YP)!y2hX0`01t+}>V>!L2Ii?(iJ%bC$d(ON6}*wnOwG9V2N zOG`{7!B5mwL_|_S2m}#C`CdG|@7W+M+U(-lIXipb-}9Vv-Vy*Mg_?2)&x|dud>nH6 z+Pg4Y7{H$F@$4DL`b~nbIs5knvB+k zHj8ub763Kx9CrFf76K8`6xv9LChyt?+yu)3H}{cgBtWFDjV( zT46G1p#RVaN{MFkER1%KNN}rd=ywA89=YD?5^*~T(5|_U4sv3(jyQy?qF#!I-YIcK zeuGD!Ck%N2HSJIh+U=tYeo@e&trgAm(x7tzP$_D_zeF>F>u*g-I^VNp4(M<9KQ~%~ z3}FWb=nBN{ra3RFTFeCC z!$l`CCu*vADm$NUP}Jde?Il#nFW_p845!NWW$Et^{&SQIRV}^fRyMzZQmIB=eG~3I zc!HA^Wx-;#MFG+)=LYmWJqQGXuvo_MLh%Zf$0hUI2Iy7tvy~@~#>&eNWlKvX*<(i} i@%N3@m$wc0AN>MB3Mf9{XhoL*0000^0rAb6VR5;7clC5r)K@f(Yoo{w$=bW|>NN6hP1rR`i zsQ|~HLSR7R(cA(gI3yO!9nc0vFklD{)sUc&ko4^Cw}|g>IDbtMIGE(kjMzLo@4E~C zy2AIHcY2sPGRuf(BpbmJAu0g!c2Z>_dUp z=%uaztu|^a9DkJ~M1&y>v{q5BU7yyC@wk-}fRWlN7k4g9Hlk6+g4XvR{wnRUjl6jE z9CO2GMxJMUo(TYF_uh8#f#8a`Aag-IvN0DB38Gj?cgTmw|7t#kfNA}w#3^xHyC0n-7Cf!aEY zx(;ZaH!lyTFKqCqK(}1j$^)COY`8GD!2eM{0Z~+iwhE|(Y5)KL07*qoM6N<$g4T}X AEC2ui delta 418 zcmV;T0bTx>1iS-~B!2{FK}|sb0I$e51&Zka000?uMObuGZ)S9NVRB^vL1b@YWgtmy zVP|DhWnpA_ami&o0003_Nkl`yTJE?1ErIGzxq>v8$ny|FSR~0W2u4ic`k5mcbEIiLksz4Y z#KyE{9LLn}_oq&%6$}Oga?Zh83$3-^U4V1$eaMkz85m>bTh*c{3ch%tltQ=L4Q7$u z>-Ff*JP6K)r+;Lfh4u2Cf3G?>rHYe>Ly|^9NaaHyK7K6gTNmr3q=wN3aD;}j2A$>s z_7?Y{eO^Imfp&8Tt>qSSDeJoOm$|vJhV9i2Kada_TTC~e%%aFEC=<0zFAY zK~y-)t&>ZLj&T&mfB)Az6Y{YUF-DOXm&AmHrm4wTXw1USmMz&x7FM#elH3+kiWSn7 z!Nfw6lte?yrLa(p%P`+J@Atm{+xZ`hK?<|s)aleY&v|-IJqP|V%v8gZw+k(Oq_CcP zX*srY@o)HSDuU8Qx);Khww&>z{39lxil9+Bsw&4?pEA;X4j3~xahFXW1Z#t&Otg)bmLthh6qW?2pRc|c|?iy zwrywYqCSE|l7EK{mhQG5x)yg)IY;?wAKrS_tyn|n>b0b#u^gKj ziq;ybmZ`Qts)5c$#Q`48CacK=u~yY5_tS}L-O<-)c5FiF#Za5_^%O97JxR~=zv3Hx Wvv~0S{K`E50000 Date: Thu, 14 Jan 2021 23:13:11 +0100 Subject: [PATCH 03/12] minor database API change --- .../database/sqlite/AbstractTxStream.java | 11 +- .../database/sqlite/SQLiteDbLoader.java | 1 - .../minres/scviewer/database/sqlite/Tx.java | 3 +- .../scviewer/database/sqlite/TxEvent.java | 6 + .../database/text/AbstractTxStream.java | 69 +++++--- .../scviewer/database/text/TextDbLoader.java | 155 +++++++++--------- .../com/minres/scviewer/database/text/Tx.java | 48 ++---- .../scviewer/database/text/TxEvent.java | 10 ++ .../scviewer/database/text/TxGenerator.java | 4 +- .../scviewer/database/text/TxStream.java | 36 ---- .../scviewer/database/vcd/VCDDbLoader.java | 2 +- .../scviewer/database/vcd/VCDSignal.java | 6 +- .../minres/scviewer/database/IWaveform.java | 5 +- .../database/internal/WaveformDb.java | 34 ++-- .../com/minres/scviewer/database/tx/ITx.java | 7 - .../minres/scviewer/database/tx/ITxEvent.java | 8 + 16 files changed, 206 insertions(+), 199 deletions(-) diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java index cf8ab93..f7cc35b 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java @@ -11,6 +11,8 @@ package com.minres.scviewer.database.sqlite; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -46,7 +48,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { } @Override - public int getWidth() { + public int getRowCount() { if(maxConcurrency==null){ StringBuilder sb = new StringBuilder(); sb.append("SELECT MAX(concurrencyLevel) as concurrencyLevel FROM ScvTx where stream="); @@ -126,4 +128,11 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { return WaveformType.TRANSACTION; } + /** + * Calculate concurrency. + */ + public void calculateConcurrency() { + } + + } diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java index e9e9a21..b7bb167 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java @@ -99,7 +99,6 @@ public class SQLiteDbLoader implements IWaveformDbLoader { @Override public void load(IWaveformDb db, File file) throws InputFormatException { - dispose(); database=new SQLiteDatabase(file.getAbsolutePath(), db); database.setData("TIMERESOLUTION", 1L); SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler<>(ScvSimProps.class, database); diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java index cd16751..184a1fa 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java @@ -65,8 +65,7 @@ public class Tx implements ITx { return trGenerator; } - @Override - public int getConcurrencyIndex() { + int getConcurrencyIndex() { return scvTx.getConcurrencyLevel(); } diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java index c78d9b8..b52bc41 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java @@ -56,4 +56,10 @@ public class TxEvent implements ITxEvent { public WaveformType getType() { return WaveformType.TRANSACTION; } + + @Override + public int getRowIndex() { + return ((Tx)tx).getConcurrencyIndex(); + } + } diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java index 425e607..1264e3e 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java @@ -13,6 +13,7 @@ package com.minres.scviewer.database.text; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.Map.Entry; import java.util.NavigableMap; import java.util.TreeMap; @@ -22,6 +23,7 @@ import com.minres.scviewer.database.HierNode; import com.minres.scviewer.database.IEvent; import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.database.WaveformType; +import com.minres.scviewer.database.tx.ITx; import com.minres.scviewer.database.tx.ITxEvent; /** @@ -38,6 +40,9 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { /** The events. */ TreeMap events = new TreeMap<>(); + /** The max concurrency. */ + private int maxConcurrency = 0; + /** The concurrency calculated. */ boolean concurrencyCalculated = false; @@ -48,7 +53,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { * @param id the id * @param name the name */ - public AbstractTxStream(TextDbLoader loader, Long id, String name) { + protected AbstractTxStream(TextDbLoader loader, Long id, String name) { super(name); this.loader = loader; this.id = id; @@ -77,8 +82,6 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { */ @Override public NavigableMap getEvents() { - if (!concurrencyCalculated) - calculateConcurrency(); return events; } @@ -90,8 +93,6 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { */ @Override public IEvent[] getEventsAtTime(Long time) { - if (!concurrencyCalculated) - calculateConcurrency(); return events.get(time); } @@ -103,8 +104,6 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { */ @Override public IEvent[] getEventsBeforeTime(Long time) { - if (!concurrencyCalculated) - calculateConcurrency(); Entry e = events.floorEntry(time); if (e == null) return new IEvent[] {}; @@ -132,28 +131,60 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { return id; } + /** + * Gets the width. + * + * @return the width + */ + @Override + public int getRowCount() { + if (!concurrencyCalculated) + calculateConcurrency(); + return maxConcurrency; + } + /** * Calculate concurrency. */ - synchronized void calculateConcurrency() { + public void calculateConcurrency() { if (concurrencyCalculated) return; - ArrayList rowendtime = new ArrayList<>(); + ArrayList rowEndTime = new ArrayList<>(); + HashMap rowByTxId = new HashMap<>(); events.entrySet().stream().forEach(entry -> { - IEvent[] values = entry.getValue(); - Arrays.asList(values).stream().filter(e -> e.getKind() == EventKind.BEGIN).forEach(evt -> { - Tx tx = (Tx) ((TxEvent) evt).getTransaction(); + Arrays.asList(entry.getValue()).stream().forEach(evt -> { + TxEvent txEvt = (TxEvent) evt; + ITx tx = txEvt.getTransaction(); int rowIdx = 0; - for (; rowIdx < rowendtime.size() && rowendtime.get(rowIdx) > tx.getBeginTime(); rowIdx++) - ; - if (rowendtime.size() <= rowIdx) - rowendtime.add(tx.getEndTime()); - else - rowendtime.set(rowIdx, tx.getEndTime()); - tx.setConcurrencyIndex(rowIdx); + switch(evt.getKind()) { + case END: + Long txId = txEvt.getTransaction().getId(); + txEvt.setConcurrencyIndex(rowByTxId.get(txId)); + rowByTxId.remove(txId); + break; + case SINGLE: + for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx) > tx.getBeginTime(); rowIdx++); + if (rowEndTime.size() <= rowIdx) + rowEndTime.add(tx.getEndTime()); + else + rowEndTime.set(rowIdx, tx.getEndTime()); + ((TxEvent) evt).setConcurrencyIndex(rowIdx); + break; + case BEGIN: + for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx) > tx.getBeginTime(); rowIdx++); + if (rowEndTime.size() <= rowIdx) + rowEndTime.add(tx.getEndTime()); + else + rowEndTime.set(rowIdx, tx.getEndTime()); + ((TxEvent) evt).setConcurrencyIndex(rowIdx); + rowByTxId.put(tx.getId(), rowIdx); + break; + } }); }); + maxConcurrency=rowEndTime.size(); concurrencyCalculated = true; + getChildNodes().parallelStream().forEach(c -> ((TxGenerator)c).calculateConcurrency()); } } diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java index 63621df..b5bda0f 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java @@ -28,14 +28,15 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; import org.eclipse.collections.impl.map.mutable.UnifiedMap; import org.mapdb.DB; -import org.mapdb.DB.HashMapMaker; -import org.mapdb.DB.TreeMapSink; import org.mapdb.DBMaker; import org.mapdb.HTreeMap; import org.mapdb.Serializer; @@ -106,6 +107,26 @@ public class TextDbLoader implements IWaveformDbLoader { /** The Constant x. */ static final byte[] x = "scv_tr_stream".getBytes(); + /** + * Adds the property change listener. + * + * @param l the l + */ + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + /** + * Removes the property change listener. + * + * @param l the l + */ + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + /** * Gets the max time. * @@ -116,8 +137,30 @@ public class TextDbLoader implements IWaveformDbLoader { return maxTime; } + /** + * Gets the transaction. + * + * @param txId the tx id + * @return the transaction + */ + public ITx getTransaction(long txId) { + if (txCache.containsKey(txId)) + return txCache.get(txId); + if(transactions.containsKey(txId)) { + Tx tx = new Tx(this, txId); + txCache.put(txId, tx); + return tx; + } else { + Set keys = new TreeSet<>(transactions.keySet()); + throw new IllegalArgumentException(); + } + } + public ScvTx getScvTx(long id) { - return transactions.get(id); + if(transactions.containsKey(id)) + return transactions.get(id); + else + throw new IllegalArgumentException(); } /** @@ -130,6 +173,15 @@ public class TextDbLoader implements IWaveformDbLoader { return new ArrayList<>(txStreams.values()); } + /** + * Gets the all relation types. + * + * @return the all relation types + */ + public Collection getAllRelationTypes() { + return relationTypes.values(); + } + /** * Can load. * @@ -156,6 +208,22 @@ public class TextDbLoader implements IWaveformDbLoader { return false; } + /** + * Checks if is gzipped. + * + * @param f the f + * @return true, if is gzipped + */ + private static boolean isGzipped(File f) { + try (InputStream is = new FileInputStream(f)) { + byte[] signature = new byte[2]; + int nread = is.read(signature); // read the gzip signature + return nread == 2 && signature[0] == (byte) 0x1f && signature[1] == (byte) 0x8b; + } catch (IOException e) { + return false; + } + } + /** * Load. * @@ -197,19 +265,7 @@ public class TextDbLoader implements IWaveformDbLoader { } catch (Exception e) { throw new InputFormatException(e.toString()); } - for (TxStream stream : txStreams.values()) { - Thread t = new Thread() { - @Override - public void run() { - try { - stream.calculateConcurrency(); - } catch (Exception e) { - /* don't let exceptions bubble up */ } - } - }; - threads.add(t); - t.start(); - } + txStreams.values().parallelStream().forEach(TxStream::calculateConcurrency); } /** @@ -231,31 +287,6 @@ public class TextDbLoader implements IWaveformDbLoader { } } - /** - * Checks if is gzipped. - * - * @param f the f - * @return true, if is gzipped - */ - private static boolean isGzipped(File f) { - try (InputStream is = new FileInputStream(f)) { - byte[] signature = new byte[2]; - int nread = is.read(signature); // read the gzip signature - return nread == 2 && signature[0] == (byte) 0x1f && signature[1] == (byte) 0x8b; - } catch (IOException e) { - return false; - } - } - - /** - * Gets the all relation types. - * - * @return the all relation types - */ - public Collection getAllRelationTypes() { - return relationTypes.values(); - } - /** * The Class TextDbParser. */ @@ -321,6 +352,11 @@ public class TextDbLoader implements IWaveformDbLoader { } if (curLine != null) parseLine(curLine, nextLine); + for(Entry e: transactionById.entrySet()) { + ScvTx scvTx = e.getValue(); + scvTx.endTime=loader.maxTime; + txSink.put(e.getKey(), scvTx); + } } /** @@ -368,8 +404,6 @@ public class TextDbLoader implements IWaveformDbLoader { ScvTx scvTx = new ScvTx(id, gen.stream.getId(), genId, Long.parseLong(tokens[3]) * stringToScale(tokens[4])); loader.maxTime = loader.maxTime > scvTx.beginTime ? loader.maxTime : scvTx.beginTime; - TxStream stream = loader.txStreams.get(gen.stream.getId()); - stream.setConcurrency(stream.getConcurrency() + 1); if (nextLine != null && nextLine.charAt(0) == 'a') { int idx = 0; while (nextLine != null && nextLine.charAt(0) == 'a') { @@ -402,7 +436,6 @@ public class TextDbLoader implements IWaveformDbLoader { stream.addEvent(endEvt); gen.addEvent(endEvt); } - stream.setConcurrency(stream.getConcurrency() - 1); if (nextLine != null && nextLine.charAt(0) == 'a') { int idx = 0; while (nextLine != null && nextLine.charAt(0) == 'a') { @@ -521,38 +554,4 @@ public class TextDbLoader implements IWaveformDbLoader { } - /** - * Gets the transaction. - * - * @param txId the tx id - * @return the transaction - */ - public ITx getTransaction(long txId) { - if (txCache.containsKey(txId)) - return txCache.get(txId); - Tx tx = new Tx(this, txId); - txCache.put(txId, tx); - return tx; - } - - /** - * Adds the property change listener. - * - * @param l the l - */ - @Override - public void addPropertyChangeListener(PropertyChangeListener l) { - pcs.addPropertyChangeListener(l); - } - - /** - * Removes the property change listener. - * - * @param l the l - */ - @Override - public void removePropertyChangeListener(PropertyChangeListener l) { - pcs.removePropertyChangeListener(l); - } - } diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java index 10af42a..eba4511 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java @@ -31,7 +31,7 @@ class Tx implements ITx { private final TextDbLoader loader; /** The id. */ - private long id; + private final long id; /** The begin time. */ long beginTime = -1; @@ -39,9 +39,6 @@ class Tx implements ITx { /** The end time. */ long endTime = -1; - /** The concurrency index. */ - private int concurrencyIndex; - /** * Instantiates a new tx. * @@ -51,6 +48,8 @@ class Tx implements ITx { public Tx(TextDbLoader loader, ScvTx scvTx) { this.loader = loader; id = scvTx.id; + beginTime=scvTx.beginTime; + endTime=scvTx.endTime; } /** @@ -113,7 +112,7 @@ class Tx implements ITx { return true; if (obj == null || getClass() != obj.getClass()) return false; - return this.loader.getScvTx(id).equals(((Tx) obj).loader.getScvTx(id)); + return this.getScvTx().equals(((Tx) obj).getScvTx()); } /** @@ -123,7 +122,7 @@ class Tx implements ITx { */ @Override public int hashCode() { - return loader.getScvTx(id).hashCode(); + return getScvTx().hashCode(); } /** @@ -143,7 +142,7 @@ class Tx implements ITx { */ @Override public Long getId() { - return loader.getScvTx(id).id; + return getScvTx().id; } /** @@ -153,7 +152,7 @@ class Tx implements ITx { */ @Override public IWaveform getStream() { - return loader.txStreams.get(loader.getScvTx(id).streamId); + return loader.txStreams.get(getScvTx().streamId); } /** @@ -163,7 +162,7 @@ class Tx implements ITx { */ @Override public ITxGenerator getGenerator() { - return loader.txGenerators.get(loader.getScvTx(id).generatorId); + return loader.txGenerators.get(getScvTx().generatorId); } /** @@ -174,7 +173,7 @@ class Tx implements ITx { @Override public Long getBeginTime() { if (beginTime < 0) - beginTime = loader.getScvTx(id).beginTime; + beginTime = getScvTx().beginTime; return beginTime; } @@ -186,7 +185,7 @@ class Tx implements ITx { @Override public Long getEndTime() { if (endTime < 0) - endTime = loader.getScvTx(id).endTime; + endTime = getScvTx().endTime; return endTime; } @@ -196,26 +195,7 @@ class Tx implements ITx { * @param time the new end time */ void setEndTime(Long time) { - loader.getScvTx(id).endTime = time; - } - - /** - * Gets the concurrency index. - * - * @return the concurrency index - */ - @Override - public int getConcurrencyIndex() { - return concurrencyIndex; - } - - /** - * Sets the concurrency index. - * - * @param idx the new concurrency index - */ - void setConcurrencyIndex(int idx) { - concurrencyIndex = idx; + getScvTx().endTime = time; } /** @@ -225,7 +205,11 @@ class Tx implements ITx { */ @Override public List getAttributes() { - return loader.getScvTx(id).attributes; + return getScvTx().attributes; } + private ScvTx getScvTx() { + ScvTx scvTx=loader.getScvTx(id); + return scvTx; + } } diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java index df76234..5758e8e 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java @@ -32,6 +32,7 @@ class TxEvent implements ITxEvent { /** The time. */ final long time; + private int concurrencyIdx=-1; /** * Instantiates a new tx event. * @@ -107,4 +108,13 @@ class TxEvent implements ITxEvent { public ITx getTransaction() { return loader.getTransaction(transaction); } + + @Override + public int getRowIndex() { + return concurrencyIdx; + } + + public void setConcurrencyIndex(int idx) { + concurrencyIdx=idx; + } } diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java index d62feb1..d4a14ac 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java @@ -100,7 +100,7 @@ class TxGenerator extends AbstractTxStream implements ITxGenerator { * @return the width */ @Override - public int getWidth() { - return stream.getWidth(); + public int getRowCount() { + return stream.getRowCount(); } } diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java index 4a346cd..47e8112 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java @@ -55,40 +55,4 @@ class TxStream extends AbstractTxStream { return kind; } - /** The max concurrency. */ - private int maxConcurrency = 0; - - /** The concurrency. */ - private int concurrency = 0; - - /** - * Sets the concurrency. - * - * @param concurrency the new concurrency - */ - void setConcurrency(int concurrency) { - this.concurrency = concurrency; - if (concurrency > maxConcurrency) - maxConcurrency = concurrency; - } - - /** - * Gets the concurrency. - * - * @return the concurrency - */ - int getConcurrency() { - return this.concurrency; - } - - /** - * Gets the width. - * - * @return the width - */ - @Override - public int getWidth() { - return maxConcurrency; - } - } diff --git a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java index c92e032..0481975 100644 --- a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java +++ b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java @@ -204,7 +204,7 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder { @Override public int getNetWidth(int intValue) { VCDSignal signal = (VCDSignal) signals.get(intValue); - return signal.getWidth(); + return signal.getRowCount(); } /* (non-Javadoc) diff --git a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java index 05f27d4..cd7716c 100644 --- a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java +++ b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java @@ -109,7 +109,7 @@ public class VCDSignal extends HierNode implements IWaveform { } @Override - public int getWidth() { + public int getRowCount() { return width; } @@ -118,4 +118,8 @@ public class VCDSignal extends HierNode implements IWaveform { return "signal"; } + @Override + public void calculateConcurrency() { + } + } diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java index 73d551e..25c6887 100644 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java +++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java @@ -76,6 +76,7 @@ public interface IWaveform extends IHierNode { * * @return the width */ - public int getWidth(); - + public int getRowCount(); + + public void calculateConcurrency(); } diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java index 91f91e9..d74db46 100644 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java +++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java @@ -123,31 +123,31 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL */ @Override public boolean load(File inp) { + boolean retval = true; for (IWaveformDbLoader loader : loaders) { if (loader.canLoad(inp)) { + loader.addPropertyChangeListener(this); try { - loader.addPropertyChangeListener(this); loader.load(this, inp); - loader.removePropertyChangeListener(this); - for (IWaveform w : loader.getAllWaves()) { - waveforms.put(w.getFullName(), w); - } - if (loader.getMaxTime() > maxTime) { - maxTime = loader.getMaxTime(); - } - if (name == null) - name = getFileBasename(inp.getName()); - buildHierarchyNodes(); - relationTypes.addAll(loader.getAllRelationTypes()); - pcs.firePropertyChange(IHierNode.LOADING_FINISHED, null, null); - loaded = true; - return true; } catch (Exception e) { - return false; + retval=false; } + loader.removePropertyChangeListener(this); + for (IWaveform w : loader.getAllWaves()) { + waveforms.put(w.getFullName(), w); + } + if (loader.getMaxTime() > maxTime) { + maxTime = loader.getMaxTime(); + } + if (name == null) + name = getFileBasename(inp.getName()); + buildHierarchyNodes(); + relationTypes.addAll(loader.getAllRelationTypes()); } } - return false; + pcs.firePropertyChange(IHierNode.LOADING_FINISHED, null, null); + loaded = true; + return retval; } /** diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java index afed810..dc6efe7 100644 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java +++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java @@ -55,13 +55,6 @@ public interface ITx extends Comparable { */ public Long getEndTime(); - /** - * Gets the concurrency index. - * - * @return the concurrency index - */ - public int getConcurrencyIndex(); - /** * Gets the attributes. * diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java index e2de304..9f417a9 100644 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java +++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java @@ -30,4 +30,12 @@ public interface ITxEvent extends IEvent { * @return the transaction */ public ITx getTransaction(); + + /** + * Gets the concurrency index. + * + * @return the concurrency index + */ + public int getRowIndex(); + } From 6530362b89d9027bf853c72a67a59f3ea96d1c85 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Thu, 14 Jan 2021 23:14:05 +0100 Subject: [PATCH 04/12] refactor tests --- .../OSGI-INF/component.xml | 2 +- .../database/test/DatabaseServicesTest.java | 24 +++++------------- .../database/test/TestWaveformDbFactory.java | 25 +++++++++++++++++++ 3 files changed, 32 insertions(+), 19 deletions(-) create mode 100644 tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/TestWaveformDbFactory.java diff --git a/tests/com.minres.scviewer.database.test/OSGI-INF/component.xml b/tests/com.minres.scviewer.database.test/OSGI-INF/component.xml index 7ebc679..2254edc 100644 --- a/tests/com.minres.scviewer.database.test/OSGI-INF/component.xml +++ b/tests/com.minres.scviewer.database.test/OSGI-INF/component.xml @@ -1,5 +1,5 @@ - + diff --git a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java index d76068a..d7488ff 100644 --- a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java +++ b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java @@ -25,28 +25,15 @@ import org.junit.Test; import com.minres.scviewer.database.IEvent; import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.database.IWaveformDb; -import com.minres.scviewer.database.IWaveformDbFactory; public class DatabaseServicesTest { - private static IWaveformDbFactory waveformDbFactory; - private IWaveformDb waveformDb; - - public synchronized void setFactory(IWaveformDbFactory service) { - waveformDbFactory = service; - } - - public synchronized void unsetFactory(IWaveformDbFactory service) { - if (waveformDbFactory == service) { - waveformDbFactory = null; - } - } - + @Before public void setUp() throws Exception { - waveformDb=waveformDbFactory.getDatabase(); + waveformDb=TestWaveformDbFactory.getDatabase(); } @After @@ -91,11 +78,11 @@ public class DatabaseServicesTest { assertEquals(1, waveformDb.getChildNodes().size()); for(IWaveform w:waveforms) { if(w.getId().equals(1l)) { - assertEquals(2, w.getWidth()); + assertEquals(2, w.getRowCount()); } else if(w.getId().equals(2l)) { - assertEquals(1, w.getWidth()); + assertEquals(1, w.getRowCount()); } else if(w.getId().equals(3l)) { - assertEquals(1, w.getWidth()); + assertEquals(1, w.getRowCount()); } } } @@ -108,6 +95,7 @@ public class DatabaseServicesTest { assertNotNull(waveformDb); assertEquals(3, waveformDb.getAllWaves().size()); assertEquals(1, waveformDb.getChildNodes().size()); + while(!waveformDb.isLoaded()) Thread.sleep(10); } @Test diff --git a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/TestWaveformDbFactory.java b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/TestWaveformDbFactory.java new file mode 100644 index 0000000..29b0fe5 --- /dev/null +++ b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/TestWaveformDbFactory.java @@ -0,0 +1,25 @@ +package com.minres.scviewer.database.test; + +import com.minres.scviewer.database.IWaveformDb; +import com.minres.scviewer.database.IWaveformDbFactory; + +public class TestWaveformDbFactory { + private static IWaveformDbFactory waveformDbFactory; + + + public synchronized void setFactory(IWaveformDbFactory service) { + waveformDbFactory = service; + } + + public synchronized void unsetFactory(IWaveformDbFactory service) { + if (waveformDbFactory == service) { + waveformDbFactory = null; + } + } + + public static IWaveformDb getDatabase() throws Exception { + return waveformDbFactory.getDatabase(); + } + + +} From 16de83616adc6498a1a96cc774f481f531dbab6c Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Thu, 14 Jan 2021 23:14:22 +0100 Subject: [PATCH 05/12] adapt ui to database API --- .../ui/swt/internal/ArrowPainter.java | 61 ++++++++++--- .../ui/swt/internal/StreamPainter.java | 79 ++++++++-------- .../ui/swt/internal/WaveformCanvas.java | 22 +++-- .../ui/swt/internal/WaveformView.java | 23 ++--- .../internal/status/HeapStatus.java | 1 + .../e4/application/parts/DesignBrowser.java | 4 +- .../e4/application/parts/TransactionList.java | 89 +++++++++---------- .../provider/TxDbLabelProvider.java | 2 + .../views/provider/TxDbTreeLabelProvider.java | 2 +- releng/com.minres.scviewer.updateSite/pom.xml | 2 +- 10 files changed, 163 insertions(+), 122 deletions(-) diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java index dfeeb16..b6bca54 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java @@ -10,9 +10,11 @@ *******************************************************************************/ package com.minres.scviewer.database.ui.swt.internal; +import java.util.Arrays; import java.util.Collection; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; @@ -21,8 +23,14 @@ import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Display; +import com.minres.scviewer.database.EventKind; +import com.minres.scviewer.database.IEvent; +import com.minres.scviewer.database.IHierNode; +import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.database.RelationType; import com.minres.scviewer.database.tx.ITx; +import com.minres.scviewer.database.tx.ITxEvent; +import com.minres.scviewer.database.tx.ITxGenerator; import com.minres.scviewer.database.tx.ITxRelation; import com.minres.scviewer.database.ui.WaveformColors; @@ -78,6 +86,12 @@ public class ArrowPainter implements IPainter { } } + private int getConcurrencyIndex(ITx tx) { + IEvent[] eventList = tx.getStream().getEvents().floorEntry(tx.getBeginTime()).getValue(); + Optional res = Arrays.stream(eventList).map(e -> ((ITxEvent)e).getRowIndex()).findFirst(); + return res.isPresent()? res.get():0; + } + protected void calculateGeometries() { deferUpdate = false; iRect.clear(); @@ -88,9 +102,9 @@ public class ArrowPainter implements IPainter { deferUpdate = true; return; } - int laneHeight = painter.getHeight() / tx.getStream().getWidth(); + int laneHeight = painter.getHeight() / tx.getStream().getRowCount(); txRectangle = new Rectangle((int) (tx.getBeginTime() / scaleFactor), - waveCanvas.rulerHeight + painter.getVerticalOffset() + laneHeight * tx.getConcurrencyIndex(), + waveCanvas.rulerHeight + painter.getVerticalOffset() + laneHeight * getConcurrencyIndex(tx), (int) ((tx.getEndTime() - tx.getBeginTime()) / scaleFactor), laneHeight); deriveGeom(tx.getIncomingRelations(), iRect, false); deriveGeom(tx.getOutgoingRelations(), oRect, true); @@ -99,19 +113,46 @@ public class ArrowPainter implements IPainter { protected void deriveGeom(Collection relations, List res, boolean useTarget) { for (ITxRelation iTxRelation : relations) { ITx otherTx = useTarget ? iTxRelation.getTarget() : iTxRelation.getSource(); - if (waveCanvas.wave2painterMap.containsKey(otherTx.getStream())) { - IWaveformPainter painter = waveCanvas.wave2painterMap.get(otherTx.getStream()); - int height = waveCanvas.styleProvider.getTrackHeight(); - Rectangle bb = new Rectangle( - (int) (otherTx.getBeginTime() / scaleFactor), - waveCanvas.rulerHeight + painter.getVerticalOffset() + height * otherTx.getConcurrencyIndex(), - (int) ((otherTx.getEndTime() - otherTx.getBeginTime()) / scaleFactor), - height); + Rectangle bb = createLinkEntry(otherTx, otherTx.getStream()); + if(bb!=null){ res.add(new LinkEntry(bb, iTxRelation.getRelationType())); + return; + } else { + for(IHierNode gen:otherTx.getStream().getChildNodes()) { + if(gen instanceof ITxGenerator) { + bb = createLinkEntry(otherTx, (IWaveform) gen); + if(bb!=null){ + res.add(new LinkEntry(bb, iTxRelation.getRelationType())); + return; + } + } + } } } } + private Rectangle createLinkEntry(ITx otherTx, IWaveform iWaveform) { + if (waveCanvas.wave2painterMap.containsKey(iWaveform)) { + IWaveformPainter painter = waveCanvas.wave2painterMap.get(otherTx.getStream()); + if(painter==null) { + for(IHierNode gen:otherTx.getStream().getChildNodes()) { + if(gen instanceof ITxGenerator) { + painter = waveCanvas.wave2painterMap.get(gen); + if(painter!=null) + break; + } + } + } + int height = waveCanvas.styleProvider.getTrackHeight(); + return new Rectangle( + (int) (otherTx.getBeginTime() / scaleFactor), + waveCanvas.rulerHeight + painter.getVerticalOffset() + height * getConcurrencyIndex(otherTx), + (int) ((otherTx.getEndTime() - otherTx.getBeginTime()) / scaleFactor), + height); + } else + return null; + } + @Override public void paintArea(Projection proj, Rectangle clientRect) { yCtrlOffset = waveCanvas.styleProvider.getTrackHeight()/2; diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java index 6592632..ab5274e 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java @@ -10,10 +10,9 @@ *******************************************************************************/ package com.minres.scviewer.database.ui.swt.internal; -import java.util.Collection; import java.util.Map.Entry; import java.util.NavigableMap; -import java.util.TreeSet; +import java.util.TreeMap; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; @@ -37,19 +36,18 @@ public class StreamPainter extends TrackPainter{ private IWaveform stream; private int txBase; private int txHeight; - private TreeSet seenTx; + private TreeMap seenTx; public StreamPainter(WaveformCanvas waveCanvas, boolean even, TrackEntry trackEntry) { super(trackEntry, even); this.waveCanvas = waveCanvas; this.stream=trackEntry.waveform; - this.seenTx=new TreeSet<>(); + this.seenTx=new TreeMap<>(); } - @SuppressWarnings("unchecked") public void paintArea(Projection proj, Rectangle area) { if(stream.getEvents().size()==0) return; - int trackHeight=trackEntry.height/stream.getWidth(); + int trackHeight=trackEntry.height/stream.getRowCount(); txBase=trackHeight/5; txHeight=trackHeight*3/5; if(trackEntry.selected) { @@ -65,8 +63,8 @@ public class StreamPainter extends TrackPainter{ long beginTime = beginPos*scaleFactor; long endTime = beginTime + area.width*scaleFactor; - Entry firstTx=stream.getEvents().floorEntry(beginTime); - Entry lastTx=stream.getEvents().ceilingEntry(endTime); + Entry firstTx=stream.getEvents().floorEntry(beginTime); + Entry lastTx=stream.getEvents().ceilingEntry(endTime); if(firstTx==null) firstTx = stream.getEvents().firstEntry(); if(lastTx==null) lastTx=stream.getEvents().lastEntry(); proj.setFillRule(SWT.FILL_EVEN_ODD); @@ -77,46 +75,51 @@ public class StreamPainter extends TrackPainter{ for( int y1=area.y+trackHeight/2; y1)firstTx.getValue()) - drawTx(proj, area, txEvent.getTransaction(), false); + for(IEvent txEvent: firstTx.getValue()) + drawTx(proj, area, ((ITxEvent)txEvent).getTransaction(), ((ITxEvent)txEvent).getRowIndex(), false); }else{ seenTx.clear(); NavigableMap entries = stream.getEvents().subMap(firstTx.getKey(), true, lastTx.getKey(), true); - boolean highlighed=false; + ITxEvent highlighed=null; proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE)); long selectedId=waveCanvas.currentSelection!=null? waveCanvas.currentSelection.getId():-1; for(Entry entry: entries.entrySet()) - for(IEvent evt:entry.getValue()){ - ITx tx = ((ITxEvent) evt).getTransaction(); - highlighed|=selectedId==tx.getId(); + for(IEvent e:entry.getValue()){ + ITxEvent evt = (ITxEvent) e; + ITx tx = evt.getTransaction(); + if(selectedId==tx.getId()) + highlighed=evt; switch(evt.getKind()) { case BEGIN: - seenTx.add(tx); + seenTx.put(tx, evt); break; case END: + drawTx(proj, area, tx, evt.getRowIndex(), false); seenTx.remove(tx); + break; case SINGLE: - drawTx(proj, area, tx, false); + drawTx(proj, area, tx, evt.getRowIndex(), false); break; } } - for(ITx tx:seenTx){ - drawTx(proj, area, tx, false); - } - if(highlighed){ + seenTx.entrySet().stream().forEach(e -> { + drawTx(proj, area, e.getKey(), e.getValue().getRowIndex(), false); + }); + + if(highlighed!=null){ proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE_HIGHLITE)); - drawTx(proj, area, waveCanvas.currentSelection, true); + drawTx(proj, area, highlighed.getTransaction(), highlighed.getRowIndex(), true); } } } - protected void drawTx(Projection proj, Rectangle area, ITx tx, boolean highlighted ) { + protected void drawTx(Projection proj, Rectangle area, ITx tx, int concurrencyIndex, boolean highlighted ) { // compute colors Color[] transColor = waveCanvas.styleProvider.computeColor( tx.getGenerator().getName()); proj.setBackground(transColor[highlighted?1:0]); - int offset = tx.getConcurrencyIndex()*this.waveCanvas.styleProvider.getTrackHeight(); + int offset = concurrencyIndex*this.waveCanvas.styleProvider.getTrackHeight(); Rectangle bb = new Rectangle( (int)(tx.getBeginTime()/this.waveCanvas.getScaleFactor()), area.y+offset+txBase, (int)((tx.getEndTime()-tx.getBeginTime())/this.waveCanvas.getScaleFactor()), txHeight); @@ -164,25 +167,19 @@ public class StreamPainter extends TrackPainter{ protected ITx getTxFromEntry(int lane, int offset, Entry firstTx) { long timePoint=offset*waveCanvas.getScaleFactor(); - for(IEvent evt:firstTx.getValue()){ - if(evt instanceof ITxEvent) { - ITx tx=((ITxEvent)evt).getTransaction(); - if((evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE)&& - tx.getConcurrencyIndex()==lane && tx.getBeginTime()<=timePoint && tx.getEndTime()>=timePoint){ - return ((ITxEvent)evt).getTransaction(); - } - } - } - // now with some fuzziness - timePoint=(offset-5)*waveCanvas.getScaleFactor(); + long timePointLow=(offset-5)*waveCanvas.getScaleFactor(); long timePointHigh=(offset+5)*waveCanvas.getScaleFactor(); - for(IEvent evt:firstTx.getValue()){ - if(evt instanceof ITxEvent) { - ITx tx=((ITxEvent)evt).getTransaction(); - if((evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE) && - tx.getConcurrencyIndex()==lane && tx.getBeginTime()<=timePointHigh && tx.getEndTime()>=timePoint){ - return ((ITxEvent)evt).getTransaction(); - } + for(IEvent e:firstTx.getValue()){ + if(e instanceof ITxEvent) { + ITxEvent evt = (ITxEvent) e; + ITx tx=evt.getTransaction(); + if( + (evt.getKind()==EventKind.SINGLE && evt.getTime()==timePoint) || + (evt.getKind()==EventKind.SINGLE && evt.getTime()>timePointLow && evt.getTime()=timePoint) + ){ + return tx; + } } } return null; diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java index eba6cb4..af89087 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java @@ -11,10 +11,12 @@ package com.minres.scviewer.database.ui.swt.internal; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map.Entry; +import java.util.Optional; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ControlAdapter; @@ -32,9 +34,11 @@ import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.ScrollBar; import com.google.common.collect.Lists; +import com.minres.scviewer.database.IEvent; import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.database.RelationType; import com.minres.scviewer.database.tx.ITx; +import com.minres.scviewer.database.tx.ITxEvent; import com.minres.scviewer.database.ui.IWaveformStyleProvider; import com.minres.scviewer.database.ui.IWaveformView; import com.minres.scviewer.database.ui.TrackEntry; @@ -424,13 +428,17 @@ public class WaveformCanvas extends Canvas { } for (IWaveformPainter painter : wave2painterMap.values()) { if (painter instanceof StreamPainter && ((StreamPainter) painter).getStream() == tx.getStream()) { - int top = painter.getVerticalOffset() + styleProvider.getTrackHeight() * tx.getConcurrencyIndex(); - int bottom = top + styleProvider.getTrackHeight(); - if (top < -origin.y) { - setOrigin(origin.x, -(top-styleProvider.getTrackHeight())); - } else if (bottom > (size.y - origin.y)) { - setOrigin(origin.x, size.y - bottom); - } + Entry entry = tx.getStream().getEvents().floorEntry(tx.getBeginTime()); + Optional res = Arrays.stream(entry.getValue()).filter(e -> ((ITxEvent)e).getTransaction().equals(tx)).findFirst(); + if(res.isPresent()) { + int top = painter.getVerticalOffset() + styleProvider.getTrackHeight() * ((ITxEvent)res.get()).getRowIndex(); + int bottom = top + styleProvider.getTrackHeight(); + if (top < -origin.y) { + setOrigin(origin.x, -(top-styleProvider.getTrackHeight())); + } else if (bottom > (size.y - origin.y)) { + setOrigin(origin.x, size.y - bottom); + } + } } } } diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java index 6fb28d4..3ab9cca 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java @@ -514,7 +514,7 @@ public class WaveformView implements IWaveformView { streamEntry.vOffset = tracksVerticalHeight; if (streamEntry.waveform.getType() == WaveformType.TRANSACTION) { streamEntry.currentValue = ""; - streamEntry.height *= streamEntry.waveform.getWidth(); + streamEntry.height *= streamEntry.waveform.getRowCount(); painter = new StreamPainter(waveformCanvas, even, streamEntry); } else if (streamEntry.waveform.getType() == WaveformType.SIGNAL) { streamEntry.currentValue = "---"; @@ -579,17 +579,18 @@ public class WaveformView implements IWaveformView { entry.currentValue = Double.toString(val); } } else if (entry.waveform.getType() == WaveformType.TRANSACTION) { - ITx[] resultsList = new ITx[entry.waveform.getWidth()]; + ITx[] resultsList = new ITx[entry.waveform.getRowCount()]; Entry firstTx = entry.waveform.getEvents().floorEntry(time); if (firstTx != null) { do { - for (IEvent evt : firstTx.getValue()) { - if (evt instanceof ITxEvent) { - ITx tx = ((ITxEvent) evt).getTransaction(); + for (IEvent e : firstTx.getValue()) { + if (e instanceof ITxEvent) { + ITxEvent evt = ((ITxEvent) e); + ITx tx = evt.getTransaction(); if ((evt.getKind() == EventKind.BEGIN || evt.getKind() == EventKind.SINGLE) && tx.getBeginTime() <= time && tx.getEndTime() >= time - && resultsList[tx.getConcurrencyIndex()] == null) - resultsList[tx.getConcurrencyIndex()] = ((ITxEvent) evt).getTransaction(); + && resultsList[evt.getRowIndex()] == null) + resultsList[evt.getRowIndex()] = evt.getTransaction(); } } firstTx = entry.waveform.getEvents().lowerEntry(firstTx.getKey()); @@ -1036,7 +1037,7 @@ public class WaveformView implements IWaveformView { TrackEntry trackEntry = trackVerticalOffset.get(firstKey); IWaveform w = trackEntry.waveform; if (w.getType() == WaveformType.TRANSACTION) - subArea.height *= w.getWidth(); + subArea.height *= w.getRowCount(); drawTextFormat(gc, subArea, firstKey, w.getFullName(), trackEntry.selected); } else { for (Entry entry : trackVerticalOffset.subMap(firstKey, true, lastKey, true) @@ -1044,7 +1045,7 @@ public class WaveformView implements IWaveformView { IWaveform w = entry.getValue().waveform; subArea.height = styleProvider.getTrackHeight(); if (w.getType() == WaveformType.TRANSACTION) - subArea.height *= w.getWidth(); + subArea.height *= w.getRowCount(); drawTextFormat(gc, subArea, entry.getKey(), w.getFullName(), entry.getValue().selected); } } @@ -1065,7 +1066,7 @@ public class WaveformView implements IWaveformView { TrackEntry trackEntry = trackVerticalOffset.get(firstKey); IWaveform w = trackEntry.waveform; if (w.getType() == WaveformType.TRANSACTION) - subArea.height *= w.getWidth(); + subArea.height *= w.getRowCount(); drawValue(gc, subArea, firstKey, trackEntry.currentValue, trackEntry.selected); } else { for (Entry entry : trackVerticalOffset.subMap(firstKey, true, lastKey, true) @@ -1073,7 +1074,7 @@ public class WaveformView implements IWaveformView { IWaveform w = entry.getValue().waveform; subArea.height = styleProvider.getTrackHeight(); if (w.getType() == WaveformType.TRANSACTION) - subArea.height *= w.getWidth(); + subArea.height *= w.getRowCount(); drawValue(gc, subArea, entry.getKey(), entry.getValue().currentValue, entry.getValue().selected); } diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/HeapStatus.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/HeapStatus.java index 6bc4bf8..33b3357 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/HeapStatus.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/HeapStatus.java @@ -482,6 +482,7 @@ public class HeapStatus extends Composite { }); } }; + t.setDaemon(true); t.start(); } diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java index be74068..4b47c91 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java @@ -206,7 +206,7 @@ public class DesignBrowser { updateButtons(); } }); - treeViewer.setLabelProvider(new TxDbLabelProvider()); + treeViewer.setLabelProvider(new TxDbLabelProvider(true)); treeViewer.addFilter(treeAttributeFilter); treeViewer.setUseHashlookup(true); treeViewer.setAutoExpandLevel(2); @@ -252,7 +252,7 @@ public class DesignBrowser { updateButtons(); } }); - txTableViewer.setLabelProvider(new TxDbLabelProvider()); + txTableViewer.setLabelProvider(new TxDbLabelProvider(false)); txTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); txTableViewer.addFilter(tableAttributeFilter); txTableViewer.addDoubleClickListener(event -> { diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java index 5ee29a0..be0abe4 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java @@ -37,7 +37,6 @@ import com.minres.scviewer.database.IEvent; import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.database.WaveformType; import com.minres.scviewer.database.tx.ITx; -import com.minres.scviewer.database.tx.ITxAttribute; import com.minres.scviewer.database.tx.ITxEvent; import com.minres.scviewer.database.ui.TrackEntry; import com.minres.scviewer.e4.application.parts.txTableTree.AbstractTransactionTreeContentProvider; @@ -78,6 +77,8 @@ public class TransactionList extends Composite { private TableViewer tableViewer = null; + Thread updateThread = null; + private TableColumn valueColumn = null; private AttributeLabelProvider valueLabelProvider = null; @@ -86,8 +87,6 @@ public class TransactionList extends Composite { private ObservableList attrNames = new WritableList<>(); - private List eventList = new ArrayList<>(); - private List emptyList = new ArrayList<>(); TxFilter txFilter; @@ -244,56 +243,48 @@ public class TransactionList extends Composite { } else if(stream != trackEntry.waveform) { stream=trackEntry.waveform; tableViewer.setInput(emptyList); - new Thread() { - private ConcurrentHashMap propNames=new ConcurrentHashMap<>(); - - private List getEntries() { - return propNames.entrySet().stream() - .sorted((e1,e2)->e1.getKey().compareTo(e2.getKey())) - .map(e -> new AttributeNameBean(e.getKey(), e.getValue())) - .collect(Collectors.toList()); - } - - @Override - public void run() { - Collection values = stream.getEvents().values(); - eventList = values.parallelStream().map(Arrays::asList) - .flatMap(List::stream) - .filter(evt -> evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE) - .map(evt-> { - ITx tx = ((ITxEvent)evt).getTransaction(); - for(ITxAttribute attr: tx.getAttributes()) { - propNames.put(attr.getName(), attr.getDataType()); - } - return tx; - }) - .sorted((t1, t2)-> t1.getBeginTime().compareTo(t2.getBeginTime())) - .collect(Collectors.toList()); - getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - tableViewer.setInput(eventList); - attrNames.clear(); - attrNames.addAll(getEntries()); - if(!attrNames.isEmpty()) - txFilter.setSearchProp(attrNames.get(0).getName(), attrNames.get(0).getType()); - if (searchPropComboViewer!=null) { - searchPropComboViewer.setInput(attrNames); - Object sel = searchPropComboViewer.getElementAt(0); - if(sel!=null) searchPropComboViewer.setSelection(new StructuredSelection(sel)); - } - tableViewer.refresh(true); - } - }); - } - }.start(); + try{ + if(updateThread!=null) + updateThread.interrupt(); + }catch(SecurityException e){} + updateThread = new Thread(()-> { + final ConcurrentHashMap propNames=new ConcurrentHashMap<>(); + Collection values = stream.getEvents().values(); + final List txList = values.parallelStream().map(Arrays::asList) + .flatMap(List::stream) + .filter(evt -> evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE) + .map(evt-> { + ITx tx = ((ITxEvent)evt).getTransaction(); + tx.getAttributes().forEach(attr -> propNames.put(attr.getName(), attr.getDataType())); + return tx; + }) + .sorted((t1, t2)-> t1.getBeginTime().compareTo(t2.getBeginTime())) + .collect(Collectors.toList()); + final List newAttrNames=propNames.entrySet().stream() + .sorted((e1,e2)->e1.getKey().compareTo(e2.getKey())) + .map(e -> new AttributeNameBean(e.getKey(), e.getValue())) + .collect(Collectors.toList()); + getDisplay().asyncExec(() -> { + tableViewer.setInput(txList); + attrNames.clear(); + attrNames.addAll(newAttrNames); + if(!attrNames.isEmpty()) + txFilter.setSearchProp(attrNames.get(0).getName(), attrNames.get(0).getType()); + if (searchPropComboViewer!=null) + searchPropComboViewer.refresh(); + if (viewPropComboViewer!=null) + viewPropComboViewer.refresh(); + }); + updateThread=null; + }); + updateThread.start(); } } public void setSearchProps(String propName, DataType type, String propValue) { - for(int i=0; i SCViewer - ${parsedVersion.majorVersion}.${parsedVersion.minorVersion} + ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion} true From 5bae08671237c271be7672d1bbc514711a1452f7 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Thu, 14 Jan 2021 23:36:07 +0100 Subject: [PATCH 06/12] fix (Sonarlint) warnings --- .../database/sqlite/AbstractTxStream.java | 4 +--- .../database/text/AbstractTxStream.java | 1 - .../scviewer/database/text/TextDbLoader.java | 7 +------ .../ui/swt/internal/ArrowPainter.java | 19 ++++++++++--------- .../database/test/DatabaseServicesTest.java | 1 - 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java index f7cc35b..86a2ff6 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java @@ -11,8 +11,6 @@ package com.minres.scviewer.database.sqlite; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -41,7 +39,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { private List usedRelationsList; - public AbstractTxStream(IDatabase database, String name, long streamId) { + protected AbstractTxStream(IDatabase database, String name, long streamId) { super(name); this.database=database; this.streamId=streamId; diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java index 1264e3e..7992a27 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java @@ -18,7 +18,6 @@ import java.util.Map.Entry; import java.util.NavigableMap; import java.util.TreeMap; -import com.minres.scviewer.database.EventKind; import com.minres.scviewer.database.HierNode; import com.minres.scviewer.database.IEvent; import com.minres.scviewer.database.IWaveform; diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java index b5bda0f..2b0321e 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java @@ -29,8 +29,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; -import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; @@ -147,11 +145,10 @@ public class TextDbLoader implements IWaveformDbLoader { if (txCache.containsKey(txId)) return txCache.get(txId); if(transactions.containsKey(txId)) { - Tx tx = new Tx(this, txId); + Tx tx = new Tx(this, transactions.get(txId)); txCache.put(txId, tx); return tx; } else { - Set keys = new TreeSet<>(transactions.keySet()); throw new IllegalArgumentException(); } } @@ -256,10 +253,8 @@ public class TextDbLoader implements IWaveformDbLoader { TextDbParser parser = new TextDbParser(this); try { -// parser.txSink = mapDb.treeMap("transactions", Serializer.LONG, Serializer.JAVA).createFromSink(); parser.txSink = mapDb.hashMap("transactions", Serializer.LONG, Serializer.JAVA).create(); parser.parseInput(gzipped ? new GZIPInputStream(new FileInputStream(file)) : new FileInputStream(file)); -// transactions = parser.txSink.create(); transactions = parser.txSink; } catch (IllegalArgumentException | ArrayIndexOutOfBoundsException e) { } catch (Exception e) { diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java index b6bca54..c5044a4 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java @@ -23,7 +23,6 @@ import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Display; -import com.minres.scviewer.database.EventKind; import com.minres.scviewer.database.IEvent; import com.minres.scviewer.database.IHierNode; import com.minres.scviewer.database.IWaveform; @@ -143,14 +142,16 @@ public class ArrowPainter implements IPainter { } } } - int height = waveCanvas.styleProvider.getTrackHeight(); - return new Rectangle( - (int) (otherTx.getBeginTime() / scaleFactor), - waveCanvas.rulerHeight + painter.getVerticalOffset() + height * getConcurrencyIndex(otherTx), - (int) ((otherTx.getEndTime() - otherTx.getBeginTime()) / scaleFactor), - height); - } else - return null; + if(painter!=null) { + int height = waveCanvas.styleProvider.getTrackHeight(); + return new Rectangle( + (int) (otherTx.getBeginTime() / scaleFactor), + waveCanvas.rulerHeight + painter.getVerticalOffset() + height * getConcurrencyIndex(otherTx), + (int) ((otherTx.getEndTime() - otherTx.getBeginTime()) / scaleFactor), + height); + } + } + return null; } @Override diff --git a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java index d7488ff..35b9c93 100644 --- a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java +++ b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java @@ -95,7 +95,6 @@ public class DatabaseServicesTest { assertNotNull(waveformDb); assertEquals(3, waveformDb.getAllWaves().size()); assertEquals(1, waveformDb.getChildNodes().size()); - while(!waveformDb.isLoaded()) Thread.sleep(10); } @Test From 59859e5d90e6bb75cfa56bd7fc43ede18641856e Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Thu, 14 Jan 2021 23:36:29 +0100 Subject: [PATCH 07/12] cache some more infos for stream --- .../com/minres/scviewer/database/text/Tx.java | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java index eba4511..a42f43f 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java @@ -29,10 +29,16 @@ class Tx implements ITx { /** The loader. */ private final TextDbLoader loader; + + private ScvTx scvTx =null; /** The id. */ private final long id; + private final long generatorId; + + private final long streamId; + /** The begin time. */ long beginTime = -1; @@ -48,6 +54,8 @@ class Tx implements ITx { public Tx(TextDbLoader loader, ScvTx scvTx) { this.loader = loader; id = scvTx.id; + generatorId=scvTx.generatorId; + streamId=scvTx.streamId; beginTime=scvTx.beginTime; endTime=scvTx.endTime; } @@ -58,9 +66,11 @@ class Tx implements ITx { * @param loader the loader * @param txId the tx id */ - public Tx(TextDbLoader loader, long txId) { + public Tx(TextDbLoader loader, long id, long generatorId, long streamId) { this.loader = loader; - id = txId; + this.id = id; + this.generatorId=generatorId; + this.streamId = streamId; } /** @@ -152,7 +162,7 @@ class Tx implements ITx { */ @Override public IWaveform getStream() { - return loader.txStreams.get(getScvTx().streamId); + return loader.txStreams.get(streamId); } /** @@ -162,7 +172,7 @@ class Tx implements ITx { */ @Override public ITxGenerator getGenerator() { - return loader.txGenerators.get(getScvTx().generatorId); + return loader.txGenerators.get(generatorId); } /** @@ -172,8 +182,11 @@ class Tx implements ITx { */ @Override public Long getBeginTime() { - if (beginTime < 0) - beginTime = getScvTx().beginTime; + if (beginTime < 0) { + ScvTx tx = scvTx==null?loader.getScvTx(id):getScvTx(); + beginTime = tx.beginTime; + endTime = tx.endTime; + } return beginTime; } @@ -184,8 +197,11 @@ class Tx implements ITx { */ @Override public Long getEndTime() { - if (endTime < 0) - endTime = getScvTx().endTime; + if (endTime < 0) { + ScvTx tx = scvTx==null?loader.getScvTx(id):getScvTx(); + beginTime = tx.beginTime; + endTime = tx.endTime; + } return endTime; } @@ -209,7 +225,8 @@ class Tx implements ITx { } private ScvTx getScvTx() { - ScvTx scvTx=loader.getScvTx(id); + if(scvTx==null) + scvTx=loader.getScvTx(id); return scvTx; } } From ee5536f1b51cf34cadbbf37a2e44a8ee14178ef0 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Thu, 14 Jan 2021 23:51:18 +0100 Subject: [PATCH 08/12] update version numbers --- features/com.minres.scviewer.database.feature/pom.xml | 2 +- features/com.minres.scviewer.e4.feature/pom.xml | 2 +- features/com.minres.scviewer.e4.platform.feature/pom.xml | 2 +- features/com.minres.scviewer.feature/pom.xml | 2 +- features/com.minres.scviewer.ui.feature/pom.xml | 2 +- plugins/com.minres.scviewer.database.sqlite/pom.xml | 2 +- plugins/com.minres.scviewer.database.text/pom.xml | 2 +- plugins/com.minres.scviewer.database.ui.swt/pom.xml | 2 +- plugins/com.minres.scviewer.database.vcd/pom.xml | 2 +- plugins/com.minres.scviewer.database/pom.xml | 2 +- .../com.minres.scviewer.e4.application/META-INF/MANIFEST.MF | 2 +- plugins/com.minres.scviewer.e4.application/pom.xml | 2 +- plugins/com.minres.scviewer.ui/pom.xml | 2 +- pom.xml | 4 ++-- products/com.minres.scviewer.e4.product/pom.xml | 4 ++-- products/com.minres.scviewer.e4.product/scviewer.product | 2 +- releng/com.minres.scviewer.target/pom.xml | 2 +- releng/com.minres.scviewer.updateSite/pom.xml | 2 +- tests/com.minres.scviewer.database.test/pom.xml | 2 +- 19 files changed, 21 insertions(+), 21 deletions(-) diff --git a/features/com.minres.scviewer.database.feature/pom.xml b/features/com.minres.scviewer.database.feature/pom.xml index 5b88e3b..0f58de8 100644 --- a/features/com.minres.scviewer.database.feature/pom.xml +++ b/features/com.minres.scviewer.database.feature/pom.xml @@ -5,7 +5,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. 3.0.0-SNAPSHOT diff --git a/features/com.minres.scviewer.e4.feature/pom.xml b/features/com.minres.scviewer.e4.feature/pom.xml index c574dac..fc19d09 100644 --- a/features/com.minres.scviewer.e4.feature/pom.xml +++ b/features/com.minres.scviewer.e4.feature/pom.xml @@ -5,7 +5,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. 1.1.0-SNAPSHOT diff --git a/features/com.minres.scviewer.e4.platform.feature/pom.xml b/features/com.minres.scviewer.e4.platform.feature/pom.xml index fd4d313..cb14643 100644 --- a/features/com.minres.scviewer.e4.platform.feature/pom.xml +++ b/features/com.minres.scviewer.e4.platform.feature/pom.xml @@ -5,7 +5,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. 1.0.0-SNAPSHOT diff --git a/features/com.minres.scviewer.feature/pom.xml b/features/com.minres.scviewer.feature/pom.xml index 8a5f5f7..218d89b 100644 --- a/features/com.minres.scviewer.feature/pom.xml +++ b/features/com.minres.scviewer.feature/pom.xml @@ -5,7 +5,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. 1.1.0-SNAPSHOT diff --git a/features/com.minres.scviewer.ui.feature/pom.xml b/features/com.minres.scviewer.ui.feature/pom.xml index a494169..3119e8b 100644 --- a/features/com.minres.scviewer.ui.feature/pom.xml +++ b/features/com.minres.scviewer.ui.feature/pom.xml @@ -5,7 +5,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. 1.1.0-SNAPSHOT diff --git a/plugins/com.minres.scviewer.database.sqlite/pom.xml b/plugins/com.minres.scviewer.database.sqlite/pom.xml index 051a506..8b9b387 100644 --- a/plugins/com.minres.scviewer.database.sqlite/pom.xml +++ b/plugins/com.minres.scviewer.database.sqlite/pom.xml @@ -4,7 +4,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. eclipse-plugin diff --git a/plugins/com.minres.scviewer.database.text/pom.xml b/plugins/com.minres.scviewer.database.text/pom.xml index 51da48c..74d6a56 100644 --- a/plugins/com.minres.scviewer.database.text/pom.xml +++ b/plugins/com.minres.scviewer.database.text/pom.xml @@ -6,7 +6,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. eclipse-plugin diff --git a/plugins/com.minres.scviewer.database.ui.swt/pom.xml b/plugins/com.minres.scviewer.database.ui.swt/pom.xml index 33b5eed..e398c83 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/pom.xml +++ b/plugins/com.minres.scviewer.database.ui.swt/pom.xml @@ -5,7 +5,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. 3.0.0-SNAPSHOT diff --git a/plugins/com.minres.scviewer.database.vcd/pom.xml b/plugins/com.minres.scviewer.database.vcd/pom.xml index 1a27b50..bf73cf0 100644 --- a/plugins/com.minres.scviewer.database.vcd/pom.xml +++ b/plugins/com.minres.scviewer.database.vcd/pom.xml @@ -5,7 +5,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. eclipse-plugin diff --git a/plugins/com.minres.scviewer.database/pom.xml b/plugins/com.minres.scviewer.database/pom.xml index 10bea0e..abaa87b 100644 --- a/plugins/com.minres.scviewer.database/pom.xml +++ b/plugins/com.minres.scviewer.database/pom.xml @@ -4,7 +4,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. eclipse-plugin diff --git a/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF index 0459005..9132c4a 100644 --- a/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF +++ b/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: com.minres.scviewer.e4.application;singleton:=true -Bundle-Version: 2.11.2.qualifier +Bundle-Version: 2.12.0.qualifier Bundle-Vendor: %Bundle-Vendor Require-Bundle: javax.inject;bundle-version="1.0.0", org.eclipse.core.runtime;bundle-version="3.11.1", diff --git a/plugins/com.minres.scviewer.e4.application/pom.xml b/plugins/com.minres.scviewer.e4.application/pom.xml index 54ca93a..51621b7 100644 --- a/plugins/com.minres.scviewer.e4.application/pom.xml +++ b/plugins/com.minres.scviewer.e4.application/pom.xml @@ -6,7 +6,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. eclipse-plugin diff --git a/plugins/com.minres.scviewer.ui/pom.xml b/plugins/com.minres.scviewer.ui/pom.xml index c7a4b35..d00df08 100644 --- a/plugins/com.minres.scviewer.ui/pom.xml +++ b/plugins/com.minres.scviewer.ui/pom.xml @@ -4,7 +4,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. eclipse-plugin diff --git a/pom.xml b/pom.xml index b1885bf..c9f0d26 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT pom releng/com.minres.scviewer.target @@ -55,7 +55,7 @@ com.minres.scviewer com.minres.scviewer.target - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT diff --git a/products/com.minres.scviewer.e4.product/pom.xml b/products/com.minres.scviewer.e4.product/pom.xml index c7563cc..a8be2e8 100644 --- a/products/com.minres.scviewer.e4.product/pom.xml +++ b/products/com.minres.scviewer.e4.product/pom.xml @@ -6,11 +6,11 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. com.minres.scviewer.e4.product - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT eclipse-repository com.minres.scviewer diff --git a/products/com.minres.scviewer.e4.product/scviewer.product b/products/com.minres.scviewer.e4.product/scviewer.product index 5f00e43..379281c 100644 --- a/products/com.minres.scviewer.e4.product/scviewer.product +++ b/products/com.minres.scviewer.e4.product/scviewer.product @@ -1,7 +1,7 @@ - + diff --git a/releng/com.minres.scviewer.target/pom.xml b/releng/com.minres.scviewer.target/pom.xml index 97968fd..f370caf 100644 --- a/releng/com.minres.scviewer.target/pom.xml +++ b/releng/com.minres.scviewer.target/pom.xml @@ -12,7 +12,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. diff --git a/releng/com.minres.scviewer.updateSite/pom.xml b/releng/com.minres.scviewer.updateSite/pom.xml index ec0bdca..1946dbc 100644 --- a/releng/com.minres.scviewer.updateSite/pom.xml +++ b/releng/com.minres.scviewer.updateSite/pom.xml @@ -7,7 +7,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. diff --git a/tests/com.minres.scviewer.database.test/pom.xml b/tests/com.minres.scviewer.database.test/pom.xml index be980a5..9b902fe 100644 --- a/tests/com.minres.scviewer.database.test/pom.xml +++ b/tests/com.minres.scviewer.database.test/pom.xml @@ -6,7 +6,7 @@ com.minres.scviewer com.minres.scviewer.parent - 2.11.2-SNAPSHOT + 2.12.0-SNAPSHOT ../.. eclipse-test-plugin From 888edf32be799168c5d6a5fe1de0470b6154486c Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Thu, 14 Jan 2021 23:55:47 +0100 Subject: [PATCH 09/12] remove ITxGenerator interface --- .../minres/scviewer/database/sqlite/Tx.java | 3 +-- .../scviewer/database/sqlite/TxGenerator.java | 8 +----- .../scviewer/database/sqlite/TxStream.java | 3 +-- .../com/minres/scviewer/database/text/Tx.java | 3 +-- .../scviewer/database/text/TxGenerator.java | 13 +-------- .../ui/swt/internal/ArrowPainter.java | 5 ++-- .../minres/scviewer/database/IWaveform.java | 4 +++ .../com/minres/scviewer/database/tx/ITx.java | 2 +- .../scviewer/database/tx/ITxGenerator.java | 27 ------------------- 9 files changed, 12 insertions(+), 56 deletions(-) delete mode 100644 plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxGenerator.java diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java index 184a1fa..8b4aae3 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java @@ -28,7 +28,6 @@ import com.minres.scviewer.database.sqlite.tables.ScvTxEvent; import com.minres.scviewer.database.sqlite.tables.ScvTxRelation; import com.minres.scviewer.database.tx.ITx; import com.minres.scviewer.database.tx.ITxAttribute; -import com.minres.scviewer.database.tx.ITxGenerator; import com.minres.scviewer.database.tx.ITxRelation; public class Tx implements ITx { @@ -61,7 +60,7 @@ public class Tx implements ITx { } @Override - public ITxGenerator getGenerator() { + public IWaveform getGenerator() { return trGenerator; } diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java index bc9d707..1bcaca9 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java @@ -22,9 +22,8 @@ import com.minres.scviewer.database.sqlite.db.SQLiteDatabaseSelectHandler; import com.minres.scviewer.database.sqlite.tables.ScvGenerator; import com.minres.scviewer.database.sqlite.tables.ScvTx; import com.minres.scviewer.database.tx.ITx; -import com.minres.scviewer.database.tx.ITxGenerator; -public class TxGenerator extends AbstractTxStream implements ITxGenerator { +public class TxGenerator extends AbstractTxStream { private TxStream stream; @@ -44,11 +43,6 @@ public class TxGenerator extends AbstractTxStream implements ITxGenerator { return (long) scvGenerator.getId(); } - @Override - public IWaveform getStream() { - return stream; - } - @Override public String getName() { return scvGenerator.getName(); diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java index db93cee..57f2ab4 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java @@ -26,7 +26,6 @@ import com.minres.scviewer.database.sqlite.tables.ScvGenerator; import com.minres.scviewer.database.sqlite.tables.ScvStream; import com.minres.scviewer.database.sqlite.tables.ScvTx; import com.minres.scviewer.database.tx.ITx; -import com.minres.scviewer.database.tx.ITxGenerator; public class TxStream extends AbstractTxStream { @@ -54,7 +53,7 @@ public class TxStream extends AbstractTxStream { return (long) scvStream.getId(); } - public List getGenerators() { + public List getGenerators() { if(generators==null){ SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler<>( ScvGenerator.class, database, "stream="+scvStream.getId()); diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java index a42f43f..9b1b9d6 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java @@ -19,7 +19,6 @@ import java.util.stream.Collectors; import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.database.tx.ITx; import com.minres.scviewer.database.tx.ITxAttribute; -import com.minres.scviewer.database.tx.ITxGenerator; import com.minres.scviewer.database.tx.ITxRelation; /** @@ -171,7 +170,7 @@ class Tx implements ITx { * @return the generator */ @Override - public ITxGenerator getGenerator() { + public IWaveform getGenerator() { return loader.txGenerators.get(generatorId); } diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java index d4a14ac..1a0ffa6 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java @@ -15,12 +15,11 @@ import java.util.ArrayList; import java.util.List; import com.minres.scviewer.database.IWaveform; -import com.minres.scviewer.database.tx.ITxGenerator; /** * The Class TxGenerator. */ -class TxGenerator extends AbstractTxStream implements ITxGenerator { +class TxGenerator extends AbstractTxStream { /** The stream. */ TxStream stream; @@ -45,16 +44,6 @@ class TxGenerator extends AbstractTxStream implements ITxGenerator { stream.addChild(this); } - /** - * Gets the stream. - * - * @return the stream - */ - @Override - public IWaveform getStream() { - return stream; - } - /** * Checks if is same. * diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java index c5044a4..e5b6cc7 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java @@ -29,7 +29,6 @@ import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.database.RelationType; import com.minres.scviewer.database.tx.ITx; import com.minres.scviewer.database.tx.ITxEvent; -import com.minres.scviewer.database.tx.ITxGenerator; import com.minres.scviewer.database.tx.ITxRelation; import com.minres.scviewer.database.ui.WaveformColors; @@ -118,7 +117,7 @@ public class ArrowPainter implements IPainter { return; } else { for(IHierNode gen:otherTx.getStream().getChildNodes()) { - if(gen instanceof ITxGenerator) { + if(gen instanceof IWaveform) { bb = createLinkEntry(otherTx, (IWaveform) gen); if(bb!=null){ res.add(new LinkEntry(bb, iTxRelation.getRelationType())); @@ -135,7 +134,7 @@ public class ArrowPainter implements IPainter { IWaveformPainter painter = waveCanvas.wave2painterMap.get(otherTx.getStream()); if(painter==null) { for(IHierNode gen:otherTx.getStream().getChildNodes()) { - if(gen instanceof ITxGenerator) { + if(gen instanceof IWaveform) { painter = waveCanvas.wave2painterMap.get(gen); if(painter!=null) break; diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java index 25c6887..c30d9fe 100644 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java +++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java @@ -12,6 +12,7 @@ package com.minres.scviewer.database; import java.util.NavigableMap; +// TODO: Auto-generated Javadoc /** * The Interface IWaveform. * @@ -78,5 +79,8 @@ public interface IWaveform extends IHierNode { */ public int getRowCount(); + /** + * Calculate the concurrency (th enumber of parallel ongoing events) of the waveform. + */ public void calculateConcurrency(); } diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java index dc6efe7..f539270 100644 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java +++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java @@ -39,7 +39,7 @@ public interface ITx extends Comparable { * * @return the generator */ - public ITxGenerator getGenerator(); + public IWaveform getGenerator(); /** * Gets the begin time. diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxGenerator.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxGenerator.java deleted file mode 100644 index 54398c1..0000000 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxGenerator.java +++ /dev/null @@ -1,27 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015-2021 MINRES Technologies GmbH 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: - * MINRES Technologies GmbH - initial API and implementation - *******************************************************************************/ -package com.minres.scviewer.database.tx; - -import com.minres.scviewer.database.IWaveform; - -/** - * The Interface ITxGenerator. - */ -public interface ITxGenerator extends IWaveform { - - /** - * Gets the stream. - * - * @return the stream - */ - public IWaveform getStream(); - -} From a42f0863399163fe54421d3be85d280c77f6fdc8 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Thu, 14 Jan 2021 23:56:04 +0100 Subject: [PATCH 10/12] set max heap to 2GB by default --- products/com.minres.scviewer.e4.product/scviewer.product | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/com.minres.scviewer.e4.product/scviewer.product b/products/com.minres.scviewer.e4.product/scviewer.product index 379281c..5c1cc84 100644 --- a/products/com.minres.scviewer.e4.product/scviewer.product +++ b/products/com.minres.scviewer.e4.product/scviewer.product @@ -9,7 +9,7 @@ -clearPersistedState - -Xmx1G -Dosgi.instance.area=@user.home/.scviewer -Dosgi.instance.area.default=@user.home/.scviewer + -Xmx2G -Dosgi.instance.area=@user.home/.scviewer -Dosgi.instance.area.default=@user.home/.scviewer -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts From bca94ceb9d64d4c6bcd0007bd1516c941d3413e1 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Fri, 15 Jan 2021 08:53:06 +0100 Subject: [PATCH 11/12] fix stream row calculation --- .../database/text/AbstractTxStream.java | 28 ++++++++----------- .../scviewer/database/text/TextDbLoader.java | 15 ++++------ .../scviewer/database/text/TxGenerator.java | 9 ------ .../scviewer/database/vcd/VCDSignal.java | 4 --- .../minres/scviewer/database/IWaveform.java | 4 --- .../DatabaseServicesTest.launch | 8 +++--- 6 files changed, 22 insertions(+), 46 deletions(-) diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java index 7992a27..33a4a2a 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java @@ -40,10 +40,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { TreeMap events = new TreeMap<>(); /** The max concurrency. */ - private int maxConcurrency = 0; - - /** The concurrency calculated. */ - boolean concurrencyCalculated = false; + private int rowCount = -1; /** * Instantiates a new abstract tx stream. @@ -137,21 +134,21 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { */ @Override public int getRowCount() { - if (!concurrencyCalculated) + if (rowCount<0) calculateConcurrency(); - return maxConcurrency; + return rowCount; } /** * Calculate concurrency. */ - public void calculateConcurrency() { - if (concurrencyCalculated) + void calculateConcurrency() { + if (rowCount>=0) return; ArrayList rowEndTime = new ArrayList<>(); HashMap rowByTxId = new HashMap<>(); - events.entrySet().stream().forEach(entry -> { - Arrays.asList(entry.getValue()).stream().forEach(evt -> { + for(Entry entry: events.entrySet()) { + for(IEvent evt:entry.getValue()) { TxEvent txEvt = (TxEvent) evt; ITx tx = txEvt.getTransaction(); int rowIdx = 0; @@ -162,7 +159,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { rowByTxId.remove(txId); break; 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) rowEndTime.add(tx.getEndTime()); else @@ -170,7 +167,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { ((TxEvent) evt).setConcurrencyIndex(rowIdx); break; 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) rowEndTime.add(tx.getEndTime()); else @@ -179,10 +176,9 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { rowByTxId.put(tx.getId(), rowIdx); break; } - }); - }); - maxConcurrency=rowEndTime.size(); - concurrencyCalculated = true; + } + } + rowCount=rowEndTime.size()>0?rowEndTime.size():1; getChildNodes().parallelStream().forEach(c -> ((TxGenerator)c).calculateConcurrency()); } diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java index 2b0321e..0ec1809 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java @@ -420,16 +420,13 @@ public class TextDbLoader implements IWaveformDbLoader { TxGenerator gen = loader.txGenerators.get(scvTx.generatorId); TxStream stream = loader.txStreams.get(gen.stream.getId()); if (scvTx.beginTime == scvTx.endTime) { - TxEvent evt = new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime); - stream.addEvent(evt); - gen.addEvent(evt); + stream.addEvent(new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime)); + gen.addEvent(new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime)); } else { - TxEvent begEvt = new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime); - stream.addEvent(begEvt); - gen.addEvent(begEvt); - TxEvent endEvt = new TxEvent(loader, EventKind.END, id, scvTx.endTime); - stream.addEvent(endEvt); - gen.addEvent(endEvt); + stream.addEvent(new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime)); + gen.addEvent(new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime)); + stream.addEvent(new TxEvent(loader, EventKind.END, id, scvTx.endTime)); + gen.addEvent(new TxEvent(loader, EventKind.END, id, scvTx.endTime)); } if (nextLine != null && nextLine.charAt(0) == 'a') { int idx = 0; diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java index 1a0ffa6..a6597d1 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java @@ -83,13 +83,4 @@ class TxGenerator extends AbstractTxStream { return stream.getKind(); } - /** - * Gets the width. - * - * @return the width - */ - @Override - public int getRowCount() { - return stream.getRowCount(); - } } diff --git a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java index cd7716c..4b2bb71 100644 --- a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java +++ b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java @@ -118,8 +118,4 @@ public class VCDSignal extends HierNode implements IWaveform { return "signal"; } - @Override - public void calculateConcurrency() { - } - } diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java index c30d9fe..c96b04a 100644 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java +++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java @@ -79,8 +79,4 @@ public interface IWaveform extends IHierNode { */ public int getRowCount(); - /** - * Calculate the concurrency (th enumber of parallel ongoing events) of the waveform. - */ - public void calculateConcurrency(); } diff --git a/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch b/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch index 4536e71..03a641c 100644 --- a/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch +++ b/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch @@ -19,18 +19,18 @@ - + - + - + - + From 5adeae15a977f17e7e823748f03ff0ca656cb085 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Fri, 15 Jan 2021 15:52:28 +0100 Subject: [PATCH 12/12] change name of generated product artifacts --- pom.xml | 13 +++++++++++++ products/com.minres.scviewer.e4.product/pom.xml | 2 +- releng/com.minres.scviewer.updateSite/pom.xml | 13 ------------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index c9f0d26..20d4ad9 100644 --- a/pom.xml +++ b/pom.xml @@ -34,6 +34,19 @@ + + org.codehaus.mojo + build-helper-maven-plugin + 3.2.0 + + + parse-version + + parse-version + + + + org.eclipse.tycho tycho-maven-plugin diff --git a/products/com.minres.scviewer.e4.product/pom.xml b/products/com.minres.scviewer.e4.product/pom.xml index a8be2e8..0e14bcb 100644 --- a/products/com.minres.scviewer.e4.product/pom.xml +++ b/products/com.minres.scviewer.e4.product/pom.xml @@ -46,7 +46,7 @@ product - SCViewer-${project.version} + SCViewer-${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion} SCViewer.app diff --git a/releng/com.minres.scviewer.updateSite/pom.xml b/releng/com.minres.scviewer.updateSite/pom.xml index 1946dbc..afcadd7 100644 --- a/releng/com.minres.scviewer.updateSite/pom.xml +++ b/releng/com.minres.scviewer.updateSite/pom.xml @@ -21,19 +21,6 @@ ${project.artifactId}-${qualifiedVersion} - - org.codehaus.mojo - build-helper-maven-plugin - 3.2.0 - - - parse-version - - parse-version - - - -