@@ -7,11 +7,14 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
77import io.sentry.IHub
88import io.sentry.ILogger
99import io.sentry.ISentryExecutorService
10+ import io.sentry.MemoryCollectionData
11+ import io.sentry.PerformanceCollectionData
1012import io.sentry.ProfilingTraceData
1113import io.sentry.SentryLevel
1214import io.sentry.SentryTracer
1315import io.sentry.TransactionContext
1416import io.sentry.android.core.internal.util.SentryFrameMetricsCollector
17+ import io.sentry.profilemeasurements.ProfileMeasurement
1518import io.sentry.test.getCtor
1619import org.junit.runner.RunWith
1720import org.mockito.kotlin.any
@@ -28,8 +31,10 @@ import java.util.concurrent.FutureTask
2831import kotlin.test.AfterTest
2932import kotlin.test.BeforeTest
3033import kotlin.test.Test
34+ import kotlin.test.assertContentEquals
3135import kotlin.test.assertEquals
3236import kotlin.test.assertFailsWith
37+ import kotlin.test.assertFalse
3338import kotlin.test.assertNotNull
3439import kotlin.test.assertNull
3540
@@ -145,7 +150,7 @@ class AndroidTransactionProfilerTest {
145150 fun `profiler profiles current transaction` () {
146151 val profiler = fixture.getSut(context)
147152 profiler.onTransactionStart(fixture.transaction1)
148- val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1)
153+ val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1, null )
149154
150155 assertNotNull(profilingTraceData)
151156 assertEquals(profilingTraceData.transactionId, fixture.transaction1.eventId.toString())
@@ -158,7 +163,7 @@ class AndroidTransactionProfilerTest {
158163 }
159164 val profiler = fixture.getSut(context, buildInfo)
160165 profiler.onTransactionStart(fixture.transaction1)
161- val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1)
166+ val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1, null )
162167 assertNull(profilingTraceData)
163168 }
164169
@@ -169,7 +174,7 @@ class AndroidTransactionProfilerTest {
169174 }
170175 val profiler = fixture.getSut(context)
171176 profiler.onTransactionStart(fixture.transaction1)
172- val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1)
177+ val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1, null )
173178 assertNull(profilingTraceData)
174179 }
175180
@@ -242,7 +247,7 @@ class AndroidTransactionProfilerTest {
242247 }
243248 val profiler = fixture.getSut(context)
244249 profiler.onTransactionStart(fixture.transaction1)
245- val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1)
250+ val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1, null )
246251 assertNull(profilingTraceData)
247252 }
248253
@@ -253,7 +258,7 @@ class AndroidTransactionProfilerTest {
253258 }
254259 val profiler = fixture.getSut(context)
255260 profiler.onTransactionStart(fixture.transaction1)
256- val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1)
261+ val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1, null )
257262 assertNull(profilingTraceData)
258263 }
259264
@@ -264,7 +269,7 @@ class AndroidTransactionProfilerTest {
264269 }
265270 val profiler = fixture.getSut(context)
266271 profiler.onTransactionStart(fixture.transaction1)
267- val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1)
272+ val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1, null )
268273 assertNull(profilingTraceData)
269274 }
270275
@@ -275,7 +280,7 @@ class AndroidTransactionProfilerTest {
275280 }
276281 val profiler = fixture.getSut(context)
277282 profiler.onTransactionStart(fixture.transaction1)
278- val traceData = profiler.onTransactionFinish(fixture.transaction1)
283+ val traceData = profiler.onTransactionFinish(fixture.transaction1, null )
279284 assertNotNull(traceData)
280285 }
281286
@@ -287,15 +292,15 @@ class AndroidTransactionProfilerTest {
287292 whenever(mockExecutorService.submit(any<Callable <* >>())).thenReturn(mock())
288293 profiler.onTransactionStart(fixture.transaction1)
289294 verify(mockExecutorService).submit(any<Runnable >())
290- val profilingTraceData: ProfilingTraceData ? = profiler.onTransactionFinish(fixture.transaction1)
295+ val profilingTraceData: ProfilingTraceData ? = profiler.onTransactionFinish(fixture.transaction1, null )
291296 assertNull(profilingTraceData)
292297 verify(mockExecutorService).submit(any<Callable <* >>())
293298 }
294299
295300 @Test
296301 fun `onTransactionFinish works only if previously started` () {
297302 val profiler = fixture.getSut(context)
298- val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1)
303+ val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1, null )
299304 assertNull(profilingTraceData)
300305 }
301306
@@ -310,7 +315,7 @@ class AndroidTransactionProfilerTest {
310315 fixture.lastScheduledRunnable?.run ()
311316
312317 // First transaction finishes: timed out data is returned
313- val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1)
318+ val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1, null )
314319 assertEquals(profilingTraceData!! .transactionId, fixture.transaction1.eventId.toString())
315320 assertEquals(ProfilingTraceData .TRUNCATION_REASON_TIMEOUT , profilingTraceData.truncationReason)
316321 }
@@ -321,10 +326,10 @@ class AndroidTransactionProfilerTest {
321326 profiler.onTransactionStart(fixture.transaction1)
322327 profiler.onTransactionStart(fixture.transaction2)
323328
324- var profilingTraceData = profiler.onTransactionFinish(fixture.transaction2)
329+ var profilingTraceData = profiler.onTransactionFinish(fixture.transaction2, null )
325330 assertNull(profilingTraceData)
326331
327- profilingTraceData = profiler.onTransactionFinish(fixture.transaction1)
332+ profilingTraceData = profiler.onTransactionFinish(fixture.transaction1, null )
328333 assertNotNull(profilingTraceData)
329334 assertEquals(profilingTraceData.transactionId, fixture.transaction1.eventId.toString())
330335 }
@@ -333,7 +338,7 @@ class AndroidTransactionProfilerTest {
333338 fun `profiling trace data contains release field` () {
334339 val profiler = fixture.getSut(context)
335340 profiler.onTransactionStart(fixture.transaction1)
336- val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1)
341+ val profilingTraceData = profiler.onTransactionFinish(fixture.transaction1, null )
337342 assertNotNull(profilingTraceData!! .release)
338343 assertEquals(fixture.options.release, profilingTraceData.release)
339344 }
@@ -353,7 +358,36 @@ class AndroidTransactionProfilerTest {
353358 whenever(fixture.frameMetricsCollector.startCollection(any())).thenReturn(frameMetricsCollectorId)
354359 profiler.onTransactionStart(fixture.transaction1)
355360 profiler.onTransactionStart(fixture.transaction2)
356- profiler.onTransactionFinish(fixture.transaction1)
361+ profiler.onTransactionFinish(fixture.transaction1, null )
357362 verify(fixture.frameMetricsCollector).stopCollection(frameMetricsCollectorId)
358363 }
364+
365+ @Test
366+ fun `profiler does not includes memory measurements when null is passed on transaction finish` () {
367+ val profiler = fixture.getSut(context)
368+ profiler.onTransactionStart(fixture.transaction1)
369+ val data = profiler.onTransactionFinish(fixture.transaction1, null )
370+ assertFalse(data!! .measurementsMap.containsKey(ProfileMeasurement .ID_MEMORY_FOOTPRINT ))
371+ assertFalse(data.measurementsMap.containsKey(ProfileMeasurement .ID_MEMORY_NATIVE_FOOTPRINT ))
372+ }
373+
374+ @Test
375+ fun `profiler includes memory measurements when passed on transaction finish` () {
376+ val profiler = fixture.getSut(context)
377+ val memoryCollectionData = PerformanceCollectionData ()
378+ memoryCollectionData.addMemoryData(MemoryCollectionData (1 , 2 , 3 ))
379+ memoryCollectionData.commitData()
380+ memoryCollectionData.addMemoryData(MemoryCollectionData (2 , 3 , 4 ))
381+ memoryCollectionData.commitData()
382+ profiler.onTransactionStart(fixture.transaction1)
383+ val data = profiler.onTransactionFinish(fixture.transaction1, memoryCollectionData)
384+ assertContentEquals(
385+ listOf (2.0 , 3.0 ),
386+ data!! .measurementsMap[ProfileMeasurement .ID_MEMORY_FOOTPRINT ]!! .values.map { it.value }
387+ )
388+ assertContentEquals(
389+ listOf (3.0 , 4.0 ),
390+ data.measurementsMap[ProfileMeasurement .ID_MEMORY_NATIVE_FOOTPRINT ]!! .values.map { it.value }
391+ )
392+ }
359393}
0 commit comments