summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp/src
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2018-07-31 19:42:09 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2018-08-10 18:31:52 +0200
commit63d4ac05f20190d7ac3df1f852840e9678b9e7dd (patch)
tree563c6308ca6c0c8cad0e4a10a1c76352c2e31cc8 /platform/android/MapboxGLAndroidSDKTestApp/src
parentb500577bfa9759241b374c161a06c1bef79cf4cd (diff)
downloadqtlocation-mapboxgl-63d4ac05f20190d7ac3df1f852840e9678b9e7dd.tar.gz
[android] shutting down thread pool of the CustomGeometrySource when the source is destroyed
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src')
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CustomGeometrySourceTest.kt68
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GridSourceActivity.java12
2 files changed, 76 insertions, 4 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CustomGeometrySourceTest.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CustomGeometrySourceTest.kt
new file mode 100644
index 0000000000..1496cb704d
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CustomGeometrySourceTest.kt
@@ -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)
+ }
+ }
+} \ No newline at end of file
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GridSourceActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GridSourceActivity.java
index fdc3826fb1..195aa63edd 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GridSourceActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GridSourceActivity.java
@@ -30,12 +30,16 @@ import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineColor;
*/
public class GridSourceActivity extends AppCompatActivity implements OnMapReadyCallback {
- private static final String ID_GRID_SOURCE = "grid_source";
- private static final String ID_GRID_LAYER = "grid_layer";
+ public static final String ID_GRID_SOURCE = "grid_source";
+ public static final String ID_GRID_LAYER = "grid_layer";
private MapView mapView;
private MapboxMap mapboxMap;
+ // public for testing purposes
+ public CustomGeometrySource source;
+ public LineLayer layer;
+
/**
* Implementation of GeometryTileProvider that returns features representing a zoom-dependent
* grid.
@@ -101,11 +105,11 @@ public class GridSourceActivity extends AppCompatActivity implements OnMapReadyC
mapboxMap = map;
// add source
- CustomGeometrySource source = new CustomGeometrySource(ID_GRID_SOURCE, new GridProvider());
+ source = new CustomGeometrySource(ID_GRID_SOURCE, new GridProvider());
mapboxMap.addSource(source);
// add layer
- LineLayer layer = new LineLayer(ID_GRID_LAYER, ID_GRID_SOURCE);
+ layer = new LineLayer(ID_GRID_LAYER, ID_GRID_SOURCE);
layer.setProperties(
lineColor(Color.parseColor("#000000"))
);