Skip to content

Commit afda02e

Browse files
committed
NAVAND-777: remove coalescing refresh requests queue
1 parent 473b8e4 commit afda02e

File tree

3 files changed

+11
-58
lines changed

3 files changed

+11
-58
lines changed

instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/core/RouteRefreshStateTest.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -390,19 +390,18 @@ class RouteRefreshStateTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::cla
390390
mapboxNavigation.refreshRoutesImmediately()
391391
mapboxNavigation.refreshRoutesImmediately()
392392
mapboxNavigation.refreshRoutesImmediately()
393+
delay(4000)
393394

394-
waitForRefreshes(2)
395+
waitForRefresh()
395396

396397
assertEquals(
397398
listOf(
398399
RouteRefreshExtra.REFRESH_STATE_STARTED,
399400
RouteRefreshExtra.REFRESH_STATE_FINISHED_SUCCESS,
400-
RouteRefreshExtra.REFRESH_STATE_STARTED,
401-
RouteRefreshExtra.REFRESH_STATE_FINISHED_SUCCESS,
402401
),
403402
observer.getStatesSnapshot()
404403
)
405-
assertEquals(2, refreshHandler.handledRequests.size)
404+
assertEquals(1, refreshHandler.handledRequests.size)
406405
}
407406

408407
@Test

libnavigation-core/src/main/java/com/mapbox/navigation/core/routerefresh/RouteRefresherExecutor.kt

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package com.mapbox.navigation.core.routerefresh
33
import com.mapbox.navigation.base.route.NavigationRoute
44
import kotlinx.coroutines.CoroutineScope
55
import kotlinx.coroutines.launch
6-
import kotlinx.coroutines.sync.Mutex
7-
import kotlinx.coroutines.sync.withLock
86

97
internal interface RouteRefresherProgressCallback {
108

@@ -19,22 +17,19 @@ internal class RouteRefresherExecutor(
1917
private val timeout: Long,
2018
) {
2119

22-
private val mutex = Mutex()
23-
private val queue = ArrayDeque<Pair<List<NavigationRoute>, RouteRefresherProgressCallback>>()
20+
private var hasCurrentRequest = false
2421

2522
fun postRoutesToRefresh(
2623
routes: List<NavigationRoute>,
2724
callback: RouteRefresherProgressCallback
2825
) {
29-
queue.clear()
30-
queue.add(routes to callback)
3126
scope.launch {
32-
mutex.withLock {
33-
queue.removeFirstOrNull()?.let {
34-
it.second.onStarted()
35-
val result = routeRefresher.refresh(it.first, timeout)
36-
it.second.onResult(result)
37-
}
27+
if (!hasCurrentRequest) {
28+
hasCurrentRequest = true
29+
callback.onStarted()
30+
val result = routeRefresher.refresh(routes, timeout)
31+
callback.onResult(result)
32+
hasCurrentRequest = false
3833
}
3934
}
4035
}

libnavigation-core/src/test/java/com/mapbox/navigation/core/routerefresh/RouteRefresherExecutorTest.kt

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -74,53 +74,12 @@ class RouteRefresherExecutorTest {
7474

7575
coroutineRule.testDispatcher.advanceTimeBy(10000)
7676

77-
coVerifyOrder {
77+
coVerify {
7878
callback.onResult(routeRefresherResult)
79-
callback2.onStarted()
80-
callback2.onResult(routeRefresherResult2)
81-
}
82-
}
83-
84-
@Test
85-
fun onlyTwoRequestsCanBeInQueue() = coroutineRule.runBlockingTest {
86-
val routes2 = listOf<NavigationRoute>(mockk(), mockk(), mockk())
87-
val routes3 = listOf<NavigationRoute>(mockk())
88-
val routes4 = listOf<NavigationRoute>(mockk(), mockk())
89-
val callback2 = mockk<RouteRefresherProgressCallback>(relaxed = true)
90-
val callback3 = mockk<RouteRefresherProgressCallback>(relaxed = true)
91-
val callback4 = mockk<RouteRefresherProgressCallback>(relaxed = true)
92-
93-
coEvery { routeRefresher.refresh(routes, any()) } coAnswers {
94-
delay(10000)
95-
routeRefresherResult
96-
}
97-
98-
sut.postRoutesToRefresh(routes, callback)
99-
sut.postRoutesToRefresh(routes2, callback2)
100-
sut.postRoutesToRefresh(routes3, callback3)
101-
sut.postRoutesToRefresh(routes4, callback4)
102-
103-
coroutineRule.testDispatcher.advanceTimeBy(10000)
104-
105-
coVerify(exactly = 1) {
106-
routeRefresher.refresh(routes, timeout)
107-
routeRefresher.refresh(routes4, timeout)
108-
}
109-
coVerify(exactly = 0) {
110-
routeRefresher.refresh(routes2, timeout)
111-
routeRefresher.refresh(routes3, timeout)
112-
}
113-
coVerify(exactly = 1) {
114-
callback.onStarted()
115-
callback.onResult(any())
116-
callback4.onStarted()
117-
callback4.onResult(any())
11879
}
11980
coVerify(exactly = 0) {
12081
callback2.onStarted()
12182
callback2.onResult(any())
122-
callback3.onStarted()
123-
callback3.onResult(any())
12483
}
12584
}
12685
}

0 commit comments

Comments
 (0)