diff options
author | Alexandre Montplaisir | 2014-04-11 15:43:47 +0000 |
---|---|---|
committer | Alexandre Montplaisir | 2014-04-16 22:36:24 +0000 |
commit | e9633b627399173d6d5f0d4642ef71db1e53283f (patch) | |
tree | 457eed5f251ed06df2552bf8ded8bba2e8b7a121 | |
parent | 6bd2f73ea4c7f44a694910cec5bbc664f9d601b5 (diff) | |
download | org.eclipse.linuxtools-e9633b627399173d6d5f0d4642ef71db1e53283f.tar.gz org.eclipse.linuxtools-e9633b627399173d6d5f0d4642ef71db1e53283f.tar.xz org.eclipse.linuxtools-e9633b627399173d6d5f0d4642ef71db1e53283f.zip |
tmf: Make CtfTmfTrace AutoCloseable
While we won't be able to make ITmfTrace closeable anytime soon (every
time you get a local reference to a trace, it'd expect you to close()
it, which is not what we want), CtfTmfTrace can benefit a bit from it,
as it helps pointing out some tests that are causing resource leaks.
Change-Id: Iaa163799390e01c9d4e996e2be1c5f160382aacd
Signed-off-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
Reviewed-on: https://git.eclipse.org/r/25091
Tested-by: Hudson CI
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
9 files changed, 85 insertions, 89 deletions
diff --git a/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/event/matchandsync/ExperimentSyncTest.java b/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/event/matchandsync/ExperimentSyncTest.java index 38354b68db..95ebf64b62 100644 --- a/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/event/matchandsync/ExperimentSyncTest.java +++ b/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/event/matchandsync/ExperimentSyncTest.java @@ -52,14 +52,12 @@ public class ExperimentSyncTest { public void setUp() { assumeTrue(CtfTmfTestTrace.SYNC_SRC.exists()); assumeTrue(CtfTmfTestTrace.SYNC_DEST.exists()); - CtfTmfTrace trace1 = CtfTmfTestTrace.SYNC_SRC.getTrace(); - CtfTmfTrace trace2 = CtfTmfTestTrace.SYNC_DEST.getTrace(); fTraces = new CtfTmfTrace[2]; - fTraces[0] = trace1; - fTraces[1] = trace2; + fTraces[0] = CtfTmfTestTrace.SYNC_SRC.getTrace(); + fTraces[1] = CtfTmfTestTrace.SYNC_DEST.getTrace(); - fExperiment = new TmfExperiment(trace1.getEventType(), EXPERIMENT, fTraces, BLOCK_SIZE); + fExperiment = new TmfExperiment(fTraces[0].getEventType(), EXPERIMENT, fTraces, BLOCK_SIZE); TmfEventMatching.registerMatchObject(new TcpEventMatching()); TmfEventMatching.registerMatchObject(new TcpLttngEventMatching()); @@ -72,8 +70,8 @@ public class ExperimentSyncTest { public void cleanUp() { fTraces[0].setTimestampTransform(TmfTimestampTransform.IDENTITY); fTraces[1].setTimestampTransform(TmfTimestampTransform.IDENTITY); - CtfTmfTestTrace.SYNC_SRC.dispose(); - CtfTmfTestTrace.SYNC_DEST.dispose(); + fTraces[0].dispose(); + fTraces[1].dispose(); } /** diff --git a/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/event/matchandsync/MatchAndSyncTest.java b/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/event/matchandsync/MatchAndSyncTest.java index c0d17dd7b9..e8e7b514ab 100644 --- a/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/event/matchandsync/MatchAndSyncTest.java +++ b/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/event/matchandsync/MatchAndSyncTest.java @@ -44,30 +44,29 @@ public class MatchAndSyncTest { final String cr = System.getProperty("line.separator"); assumeTrue(CtfTmfTestTrace.SYNC_SRC.exists()); assumeTrue(CtfTmfTestTrace.SYNC_DEST.exists()); - CtfTmfTrace trace1 = CtfTmfTestTrace.SYNC_SRC.getTrace(); - CtfTmfTrace trace2 = CtfTmfTestTrace.SYNC_DEST.getTrace(); + try (CtfTmfTrace trace1 = CtfTmfTestTrace.SYNC_SRC.getTrace(); + CtfTmfTrace trace2 = CtfTmfTestTrace.SYNC_DEST.getTrace();) { - List<ITmfTrace> tracearr = new LinkedList<>(); - tracearr.add(trace1); - tracearr.add(trace2); + List<ITmfTrace> tracearr = new LinkedList<>(); + tracearr.add(trace1); + tracearr.add(trace2); - TmfEventMatching.registerMatchObject(new TcpEventMatching()); - TmfEventMatching.registerMatchObject(new TcpLttngEventMatching()); + TmfEventMatching.registerMatchObject(new TcpEventMatching()); + TmfEventMatching.registerMatchObject(new TcpLttngEventMatching()); - TmfNetworkEventMatching twoTraceMatch = new TmfNetworkEventMatching(tracearr); - assertTrue(twoTraceMatch.matchEvents()); + TmfNetworkEventMatching twoTraceMatch = new TmfNetworkEventMatching(tracearr); + assertTrue(twoTraceMatch.matchEvents()); - String stats = twoTraceMatch.toString(); - assertEquals("TmfEventMatches [ Number of matches found: 46 ]" + - "Trace 0:" + cr + - " 3 unmatched incoming events" + cr + - " 2 unmatched outgoing events" + cr + - "Trace 1:" + cr + - " 2 unmatched incoming events" + cr + - " 1 unmatched outgoing events" + cr, stats); + String stats = twoTraceMatch.toString(); + assertEquals("TmfEventMatches [ Number of matches found: 46 ]" + + "Trace 0:" + cr + + " 3 unmatched incoming events" + cr + + " 2 unmatched outgoing events" + cr + + "Trace 1:" + cr + + " 2 unmatched incoming events" + cr + + " 1 unmatched outgoing events" + cr, stats); - CtfTmfTestTrace.SYNC_SRC.dispose(); - CtfTmfTestTrace.SYNC_DEST.dispose(); + } } } diff --git a/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/stateprovider/GenerateTestValues.java b/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/stateprovider/GenerateTestValues.java index 9965e424f6..ef09fc836b 100644 --- a/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/stateprovider/GenerateTestValues.java +++ b/lttng/org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/stateprovider/GenerateTestValues.java @@ -57,8 +57,8 @@ public class GenerateTestValues { /* Prepare the files */ File logFile = File.createTempFile("TestValues", ".java"); - final CtfTmfTrace trace = testTrace.getTrace(); - try (PrintWriter writer = new PrintWriter(new FileWriter(logFile), true);) { + try (final CtfTmfTrace trace = testTrace.getTrace(); + PrintWriter writer = new PrintWriter(new FileWriter(logFile), true);) { /* Build and query the state system */ TmfStateSystemAnalysisModule module = new TmfStateSystemAnalysisModule() { @Override diff --git a/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/shared/org/eclipse/linuxtools/tmf/ctf/core/tests/shared/CtfTmfTestTrace.java b/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/shared/org/eclipse/linuxtools/tmf/ctf/core/tests/shared/CtfTmfTestTrace.java index 7b8e5740a8..fbf58b091d 100644 --- a/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/shared/org/eclipse/linuxtools/tmf/ctf/core/tests/shared/CtfTmfTestTrace.java +++ b/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/shared/org/eclipse/linuxtools/tmf/ctf/core/tests/shared/CtfTmfTestTrace.java @@ -77,7 +77,7 @@ public enum CtfTmfTestTrace { */ public synchronized CtfTmfTrace getTrace() { if (fTrace != null) { - fTrace.dispose(); + fTrace.close(); } fTrace = new CtfTmfTraceStub(); try { diff --git a/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfIteratorTest.java b/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfIteratorTest.java index e7daea7400..9100880f68 100644 --- a/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfIteratorTest.java +++ b/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfIteratorTest.java @@ -163,8 +163,9 @@ public class CtfIteratorTest { */ @Test public void testGetCtfTmfTrace() { - CtfTmfTrace result = iterator.getCtfTmfTrace(); - assertNotNull(result); + try (CtfTmfTrace result = iterator.getCtfTmfTrace();) { + assertNotNull(result); + } } /** diff --git a/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfTmfEventTest.java b/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfTmfEventTest.java index 492b045e40..09caf357d5 100644 --- a/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfTmfEventTest.java +++ b/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfTmfEventTest.java @@ -64,8 +64,8 @@ public class CtfTmfEventTest { @Before public void setUp() throws CTFReaderException { assumeTrue(testTrace.exists()); - CtfTmfTrace trace = testTrace.getTrace(); - try (CtfIterator tr = new CtfIterator(trace);) { + try (CtfTmfTrace trace = testTrace.getTrace(); + CtfIterator tr = new CtfIterator(trace);) { tr.advance(); fixture = tr.getCurrentEvent(); } @@ -172,12 +172,14 @@ public class CtfTmfEventTest { @Test public void testGetters() { long rank = fixture.getRank(); - CtfTmfTrace trace = fixture.getTrace(); + try (CtfTmfTrace trace = fixture.getTrace();) { + assertEquals("kernel", trace.getName()); + } String reference = fixture.getReference(); String source = fixture.getSource(); ITmfEventType type = fixture.getType(); assertEquals(ITmfContext.UNKNOWN_RANK, rank); - assertEquals("kernel", trace.getName()); + assertEquals("channel0_1", reference); assertEquals("1", source); assertEquals("lttng_statedump_vm_map", type.toString()); diff --git a/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfTmfTraceTest.java b/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfTmfTraceTest.java index cff3f56312..c8cd380ef3 100644 --- a/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfTmfTraceTest.java +++ b/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfTmfTraceTest.java @@ -82,15 +82,15 @@ public class CtfTmfTraceTest { */ @Test public void testCtfTmfTrace() { - CtfTmfTrace result = new CtfTmfTrace(); - - assertNotNull(result); - assertNull(result.getEventType()); - assertEquals(1000, result.getCacheSize()); - assertEquals(0L, result.getNbEvents()); - assertEquals(0L, result.getStreamingInterval()); - assertNull(result.getResource()); - assertNull(result.getType()); + try (CtfTmfTrace result = new CtfTmfTrace();) { + assertNotNull(result); + assertNull(result.getEventType()); + assertEquals(1000, result.getCacheSize()); + assertEquals(0L, result.getNbEvents()); + assertEquals(0L, result.getStreamingInterval()); + assertNull(result.getResource()); + assertNull(result.getType()); + } } /** @@ -113,25 +113,15 @@ public class CtfTmfTraceTest { fixture.broadcast(signal); } - - /** - * Run the void dispose() method test. - */ - @Test - public void testDispose() { - CtfTmfTrace emptyFixture = new CtfTmfTrace(); - emptyFixture.dispose(); - - } - /** * Run the int getCacheSize() method test. */ @Test public void testGetCacheSize() { - CtfTmfTrace emptyFixture = new CtfTmfTrace(); - int result = emptyFixture.getCacheSize(); - assertEquals(1000, result); + try (CtfTmfTrace emptyFixture = new CtfTmfTrace();) { + int result = emptyFixture.getCacheSize(); + assertEquals(1000, result); + } } /** diff --git a/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/headless/Benchmark.java b/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/headless/Benchmark.java index 6dfa6ffd5b..8782a70528 100644 --- a/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/headless/Benchmark.java +++ b/lttng/org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/headless/Benchmark.java @@ -41,44 +41,44 @@ public class Benchmark { // Work variables long nbEvent = 0L; final Vector<Double> benchs = new Vector<>(); - CtfTmfTrace trace = null; long start, stop; for (int loops = 0; loops < NUM_LOOPS; loops++) { nbEvent = 0L; - trace = new CtfTmfTrace(); - try { - trace.initTrace(null, TRACE_PATH, CtfTmfEvent.class); - } catch (final TmfTraceException e) { - loops = NUM_LOOPS +1; - break; - } - - start = System.nanoTime(); - if (nbEvent != -1) { - final CtfTmfContext traceReader = (CtfTmfContext) trace.seekEvent(0); + try (CtfTmfTrace trace = new CtfTmfTrace();) { + try { + trace.initTrace(null, TRACE_PATH, CtfTmfEvent.class); + } catch (final TmfTraceException e) { + loops = NUM_LOOPS + 1; + break; + } start = System.nanoTime(); - CtfTmfEvent current = traceReader.getCurrentEvent(); - while (current != null) { - nbEvent++; - if (USE_TEXT) { + if (nbEvent != -1) { + final CtfTmfContext traceReader = (CtfTmfContext) trace.seekEvent(0); - System.out.println("Event " + nbEvent + " Time " - + current.getTimestamp().toString() + " type " + current.getType().getName() - + " on CPU " + current.getSource() + " " + current.getContent().toString()); - } - // advance the trace to the next event. - boolean hasMore = traceReader.advance(); - if( hasMore ){ - // you can know the trace has more events. + start = System.nanoTime(); + CtfTmfEvent current = traceReader.getCurrentEvent(); + while (current != null) { + nbEvent++; + if (USE_TEXT) { + + System.out.println("Event " + nbEvent + " Time " + + current.getTimestamp().toString() + " type " + current.getType().getName() + + " on CPU " + current.getSource() + " " + current.getContent().toString()); + } + // advance the trace to the next event. + boolean hasMore = traceReader.advance(); + if (hasMore) { + // you can know the trace has more events. + } + current = traceReader.getCurrentEvent(); } - current = traceReader.getCurrentEvent(); } - } - stop = System.nanoTime(); - System.out.print('.'); - final double time = (stop - start) / (double) nbEvent; - benchs.add(time); + stop = System.nanoTime(); + System.out.print('.'); + final double time = (stop - start) / (double) nbEvent; + benchs.add(time); + } // trace.close() } System.out.println(""); double avg = 0; diff --git a/lttng/org.eclipse.linuxtools.tmf.ctf.core/src/org/eclipse/linuxtools/tmf/ctf/core/CtfTmfTrace.java b/lttng/org.eclipse.linuxtools.tmf.ctf.core/src/org/eclipse/linuxtools/tmf/ctf/core/CtfTmfTrace.java index 4fbf97a05c..f23a0690d1 100644 --- a/lttng/org.eclipse.linuxtools.tmf.ctf.core/src/org/eclipse/linuxtools/tmf/ctf/core/CtfTmfTrace.java +++ b/lttng/org.eclipse.linuxtools.tmf.ctf.core/src/org/eclipse/linuxtools/tmf/ctf/core/CtfTmfTrace.java @@ -51,7 +51,8 @@ import org.eclipse.linuxtools.tmf.core.trace.location.ITmfLocation; * @author Matthew khouzam */ public class CtfTmfTrace extends TmfTrace - implements ITmfEventParser, ITmfTraceProperties, ITmfPersistentlyIndexable { + implements ITmfEventParser, ITmfTraceProperties, ITmfPersistentlyIndexable, + AutoCloseable { // ------------------------------------------- // Constants @@ -127,6 +128,11 @@ public class CtfTmfTrace extends TmfTrace } @Override + public void close() { + dispose(); + } + + @Override public synchronized void dispose() { CtfIteratorManager.removeTrace(this); if (fTrace != null) { |