[android] shutting down thread pool of the CustomGeometrySource when the source is destroyed

This commit is contained in:
Łukasz Paczos
2018-07-31 19:42:09 +02:00
committed by Łukasz Paczos
parent b500577bfa
commit 63d4ac05f2
8 changed files with 198 additions and 26 deletions

View File

@@ -0,0 +1,68 @@
package com.mapbox.mapboxsdk.testapp.style
import android.support.test.espresso.Espresso.onView
import android.support.test.espresso.matcher.ViewMatchers.isRoot
import com.mapbox.mapboxsdk.style.sources.CustomGeometrySource
import com.mapbox.mapboxsdk.style.sources.CustomGeometrySource.THREAD_POOL_LIMIT
import com.mapbox.mapboxsdk.style.sources.CustomGeometrySource.THREAD_PREFIX
import com.mapbox.mapboxsdk.testapp.action.MapboxMapAction.invoke
import com.mapbox.mapboxsdk.testapp.action.OrientationChangeAction.orientationLandscape
import com.mapbox.mapboxsdk.testapp.action.OrientationChangeAction.orientationPortrait
import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest
import com.mapbox.mapboxsdk.testapp.activity.style.GridSourceActivity
import com.mapbox.mapboxsdk.testapp.activity.style.GridSourceActivity.ID_GRID_LAYER
import com.mapbox.mapboxsdk.testapp.activity.style.GridSourceActivity.ID_GRID_SOURCE
import org.junit.Assert
import org.junit.Test
class CustomGeometrySourceTest : BaseActivityTest() {
override fun getActivityClass(): Class<*> = GridSourceActivity::class.java
@Test
fun sourceNotLeakingThreadsTest() {
validateTestSetup()
waitAction(4000)
onView(isRoot()).perform(orientationLandscape())
waitAction(2000)
onView(isRoot()).perform(orientationPortrait())
waitAction(2000)
Assert.assertFalse("Threads should be shutdown when the source is destroyed.",
Thread.getAllStackTraces().keys.filter {
it.name.startsWith(THREAD_PREFIX)
}.count() > THREAD_POOL_LIMIT)
}
@Test
fun threadsShutdownWhenSourceRemovedTest() {
validateTestSetup()
invoke(mapboxMap) { uiController, mapboxMap ->
mapboxMap.removeLayer(ID_GRID_LAYER)
uiController.loopMainThreadForAtLeast(3000)
mapboxMap.removeSource(ID_GRID_SOURCE)
uiController.loopMainThreadForAtLeast(1000)
Assert.assertTrue("There should be no threads running when the source is removed.",
Thread.getAllStackTraces().keys.filter {
it.name.startsWith(CustomGeometrySource.THREAD_PREFIX)
}.count() == 0)
}
}
@Test
fun threadsRestartedWhenSourceReAddedTest() {
validateTestSetup()
invoke(mapboxMap) { uiController, mapboxMap ->
mapboxMap.removeLayer((rule.activity as GridSourceActivity).layer)
uiController.loopMainThreadForAtLeast(3000)
mapboxMap.removeSource(ID_GRID_SOURCE)
uiController.loopMainThreadForAtLeast(1000)
mapboxMap.addSource((rule.activity as GridSourceActivity).source)
mapboxMap.addLayer((rule.activity as GridSourceActivity).layer)
uiController.loopMainThreadForAtLeast(1000)
Assert.assertTrue("Threads should be restarted when the source is re-added to the map.",
Thread.getAllStackTraces().keys.filter {
it.name.startsWith(CustomGeometrySource.THREAD_PREFIX)
}.count() == CustomGeometrySource.THREAD_POOL_LIMIT)
}
}
}