Skip to content

Commit a82db77

Browse files
authored
Use incubating cache v0.0.7 in benchmarks and go through ApolloStore (#6422)
1 parent 01ee2b8 commit a82db77

File tree

3 files changed

+30
-127
lines changed

3 files changed

+30
-127
lines changed

benchmark/microbenchmark/src/androidTest/java/com/apollographql/apollo/benchmark/CacheIncubatingTests.kt

Lines changed: 18 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -2,151 +2,68 @@ package com.apollographql.apollo.benchmark
22

33
import androidx.benchmark.junit4.BenchmarkRule
44
import androidx.benchmark.junit4.measureRepeated
5-
import com.apollographql.apollo.api.CustomScalarAdapters
65
import com.apollographql.apollo.api.Query
76
import com.apollographql.apollo.api.json.jsonReader
87
import com.apollographql.apollo.api.parseJsonResponse
9-
import com.apollographql.apollo.benchmark.Utils.checkOperationBased
10-
import com.apollographql.apollo.benchmark.Utils.checkResponseBased
8+
import com.apollographql.apollo.benchmark.Utils.dbFile
9+
import com.apollographql.apollo.benchmark.Utils.dbName
1110
import com.apollographql.apollo.benchmark.Utils.operationBasedQuery
1211
import com.apollographql.apollo.benchmark.Utils.registerCacheSize
1312
import com.apollographql.apollo.benchmark.Utils.resource
1413
import com.apollographql.apollo.benchmark.Utils.responseBasedQuery
1514
import com.apollographql.apollo.benchmark.test.R
16-
import com.apollographql.cache.normalized.api.CacheHeaders
17-
import com.apollographql.cache.normalized.api.DefaultRecordMerger
18-
import com.apollographql.cache.normalized.api.FieldPolicyCacheResolver
15+
import com.apollographql.cache.normalized.ApolloStore
1916
import com.apollographql.cache.normalized.memory.MemoryCacheFactory
20-
import com.apollographql.cache.normalized.api.TypePolicyCacheKeyGenerator
21-
import com.apollographql.cache.normalized.api.normalize
22-
import com.apollographql.cache.normalized.api.readDataFromCache
2317
import com.apollographql.cache.normalized.sql.SqlNormalizedCacheFactory
2418
import kotlinx.coroutines.runBlocking
25-
import org.junit.Assert
2619
import org.junit.Rule
2720
import org.junit.Test
28-
import java.util.concurrent.Executors
2921

3022
class CacheIncubatingTests {
3123
@get:Rule
3224
val benchmarkRule = BenchmarkRule()
3325

3426
@Test
3527
fun cacheOperationMemory() {
36-
readFromCache("cacheOperationMemory", operationBasedQuery, sql = false, ::checkOperationBased)
28+
readFromCache("cacheOperationMemory", operationBasedQuery, sql = false, Utils::checkOperationBased)
3729
}
3830

3931
@Test
4032
fun cacheOperationSql() {
41-
readFromCache("cacheOperationSql", operationBasedQuery, sql = true, ::checkOperationBased)
33+
readFromCache("cacheOperationSql", operationBasedQuery, sql = true, Utils::checkOperationBased)
4234
}
4335

4436
@Test
4537
fun cacheResponseMemory() {
46-
readFromCache("cacheResponseMemory", responseBasedQuery, sql = false, ::checkResponseBased)
38+
readFromCache("cacheResponseMemory", responseBasedQuery, sql = false, Utils::checkResponseBased)
4739
}
4840

4941
@Test
5042
fun cacheResponseSql() {
51-
readFromCache("cacheResponseSql", responseBasedQuery, sql = true, ::checkResponseBased)
43+
readFromCache("cacheResponseSql", responseBasedQuery, sql = true, Utils::checkResponseBased)
5244
}
5345

54-
@Test
55-
fun concurrentCacheOperationMemory() {
56-
concurrentReadWriteFromCache(operationBasedQuery, sql = false)
57-
}
58-
59-
@Test
60-
fun concurrentCacheOperationSql() {
61-
concurrentReadWriteFromCache(operationBasedQuery, sql = true)
62-
}
63-
64-
@Test
65-
fun concurrentCacheResponseMemory() {
66-
concurrentReadWriteFromCache(responseBasedQuery, sql = false)
67-
}
68-
69-
@Test
70-
fun concurrentCacheResponseSql() {
71-
concurrentReadWriteFromCache(responseBasedQuery, sql = true)
72-
}
73-
74-
7546
private fun <D : Query.Data> readFromCache(testName: String, query: Query<D>, sql: Boolean, check: (D) -> Unit) {
76-
val cache = if (sql) {
77-
Utils.dbFile.delete()
78-
SqlNormalizedCacheFactory(name = Utils.dbName).create()
79-
} else {
80-
MemoryCacheFactory().create()
81-
}
82-
val data = query.parseJsonResponse(resource(R.raw.calendar_response).jsonReader()).data!!
83-
84-
val records = query.normalize(
85-
data,
86-
CustomScalarAdapters.Empty,
87-
TypePolicyCacheKeyGenerator,
47+
val store = ApolloStore(
48+
if (sql) {
49+
dbFile.delete()
50+
SqlNormalizedCacheFactory(name = dbName)
51+
} else {
52+
MemoryCacheFactory()
53+
}
8854
)
8955

56+
val data = query.parseJsonResponse(resource(R.raw.calendar_response).jsonReader()).data!!
9057
runBlocking {
91-
cache.merge(records.values.toList(), CacheHeaders.NONE, DefaultRecordMerger)
58+
store.writeOperation(query, data)
9259
}
9360

9461
if (sql) {
95-
registerCacheSize("CacheIncubatingTests", testName, Utils.dbFile.length())
62+
registerCacheSize("CacheIncubatingTests", testName, dbFile.length())
9663
}
9764
benchmarkRule.measureRepeated {
98-
val data2 = query.readDataFromCache(
99-
CustomScalarAdapters.Empty,
100-
cache,
101-
FieldPolicyCacheResolver,
102-
CacheHeaders.NONE
103-
)
65+
val data2 = store.readOperation(query).data!!
10466
check(data2)
10567
}
10668
}
107-
108-
private fun <D : Query.Data> concurrentReadWriteFromCache(query: Query<D>, sql: Boolean) {
109-
val cache = if (sql) {
110-
Utils.dbFile.delete()
111-
SqlNormalizedCacheFactory(name = Utils.dbName).create()
112-
} else {
113-
MemoryCacheFactory().create()
114-
}
115-
val data = query.parseJsonResponse(resource(R.raw.calendar_response_simple).jsonReader()).data!!
116-
117-
val records = query.normalize(
118-
data,
119-
CustomScalarAdapters.Empty,
120-
TypePolicyCacheKeyGenerator,
121-
)
122-
123-
val threadPool = Executors.newFixedThreadPool(CONCURRENCY)
124-
benchmarkRule.measureRepeated {
125-
val futures = (1..CONCURRENCY).map {
126-
threadPool.submit {
127-
// Let each thread execute a few writes/reads
128-
repeat(WORK_LOAD) {
129-
cache.merge(records.values.toList(), CacheHeaders.NONE, DefaultRecordMerger)
130-
131-
val data2 = query.readDataFromCache(
132-
CustomScalarAdapters.Empty,
133-
cache,
134-
FieldPolicyCacheResolver,
135-
CacheHeaders.NONE
136-
)
137-
138-
Assert.assertEquals(data, data2)
139-
}
140-
}
141-
}
142-
// Wait for all threads to finish
143-
futures.forEach { it.get() }
144-
}
145-
}
146-
147-
148-
companion object {
149-
private const val CONCURRENCY = 15
150-
private const val WORK_LOAD = 15
151-
}
15269
}

benchmark/microbenchmark/src/androidTest/java/com/apollographql/apollo/benchmark/CacheTests.kt

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.apollographql.apollo.benchmark
22

33
import androidx.benchmark.junit4.BenchmarkRule
44
import androidx.benchmark.junit4.measureRepeated
5-
import com.apollographql.apollo.api.CustomScalarAdapters
65
import com.apollographql.apollo.api.Query
76
import com.apollographql.apollo.api.json.jsonReader
87
import com.apollographql.apollo.api.parseJsonResponse
@@ -13,12 +12,8 @@ import com.apollographql.apollo.benchmark.Utils.registerCacheSize
1312
import com.apollographql.apollo.benchmark.Utils.resource
1413
import com.apollographql.apollo.benchmark.Utils.responseBasedQuery
1514
import com.apollographql.apollo.benchmark.test.R
16-
import com.apollographql.apollo.cache.normalized.api.CacheHeaders
17-
import com.apollographql.apollo.cache.normalized.api.FieldPolicyCacheResolver
15+
import com.apollographql.apollo.cache.normalized.ApolloStore
1816
import com.apollographql.apollo.cache.normalized.api.MemoryCacheFactory
19-
import com.apollographql.apollo.cache.normalized.api.TypePolicyCacheKeyGenerator
20-
import com.apollographql.apollo.cache.normalized.api.normalize
21-
import com.apollographql.apollo.cache.normalized.api.readDataFromCache
2217
import com.apollographql.apollo.cache.normalized.sql.SqlNormalizedCacheFactory
2318
import kotlinx.coroutines.runBlocking
2419
import org.junit.Rule
@@ -49,35 +44,26 @@ class CacheTests {
4944
}
5045

5146
private fun <D : Query.Data> readFromCache(testName: String, query: Query<D>, sql: Boolean, check: (D) -> Unit) {
52-
val cache = if (sql) {
53-
dbFile.delete()
54-
SqlNormalizedCacheFactory(dbName).create()
55-
} else {
56-
MemoryCacheFactory().create()
57-
}
58-
59-
val data = query.parseJsonResponse(resource(R.raw.calendar_response).jsonReader()).data!!
60-
val records = query.normalize(
61-
data = data,
62-
customScalarAdapters = CustomScalarAdapters.Empty,
63-
cacheKeyGenerator = TypePolicyCacheKeyGenerator,
47+
val store = ApolloStore(
48+
if (sql) {
49+
dbFile.delete()
50+
SqlNormalizedCacheFactory(name = dbName)
51+
} else {
52+
MemoryCacheFactory()
53+
}
6454
)
6555

56+
val data = query.parseJsonResponse(resource(R.raw.calendar_response).jsonReader()).data!!
6657
runBlocking {
67-
cache.merge(records.values.toList(), CacheHeaders.NONE)
58+
store.writeOperation(query, data)
6859
}
6960

7061
if (sql) {
7162
registerCacheSize("CacheTests", testName, dbFile.length())
7263
}
7364

7465
benchmarkRule.measureRepeated {
75-
val data2 = query.readDataFromCache(
76-
CustomScalarAdapters.Empty,
77-
cache,
78-
FieldPolicyCacheResolver,
79-
CacheHeaders.NONE
80-
)
66+
val data2 = store.readOperation(query)
8167
check(data2)
8268
}
8369
}

gradle/libraries.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ androidx-sqlite = "2.3.1"
1717
# This is used by the gradle integration tests to get the artifacts locally
1818
apollo = "4.1.2-SNAPSHOT"
1919
apollo-execution = "0.1.0"
20-
apollo-normalizedcache-incubating = "0.0.6"
20+
apollo-normalizedcache-incubating = "0.0.7"
2121
# Used by the apollo-tooling project which uses a published version of Apollo
2222
apollo-published = "4.0.1"
2323
atomicfu = "0.26.0"

0 commit comments

Comments
 (0)