Improve message processing performance.

This commit is contained in:
Cody Henthorne
2026-02-26 10:43:00 -05:00
committed by Greyson Parrelli
parent 7eebb38eda
commit 61ba2ac97a
11 changed files with 166 additions and 81 deletions

View File

@@ -20,13 +20,19 @@ object BenchmarkMetrics {
TraceSectionMetric("IncomingMessageObserver#totalProcessing", Mode.Sum)
)
val dataMessageProcessor: List<TraceSectionMetric>
val groupDataMessageProcessor: List<TraceSectionMetric>
get() = listOf(
TraceSectionMetric("DataMessageProcessor#gv2PreProcessing", Mode.Average),
TraceSectionMetric("DataMessageProcessor#messageInsert", Mode.Average),
TraceSectionMetric("DataMessageProcessor#postProcess", Mode.Average)
)
val individualDataMessageProcessor: List<TraceSectionMetric>
get() = listOf(
TraceSectionMetric("DataMessageProcessor#messageInsert", Mode.Average),
TraceSectionMetric("DataMessageProcessor#postProcess", Mode.Average)
)
val messageContentProcessor: List<TraceSectionMetric>
get() = listOf(
TraceSectionMetric("MessageContentProcessor#handleMessage", Mode.Average)

View File

@@ -34,7 +34,7 @@ class ConversationBenchmarks {
TraceSectionMetric("4-ConversationOpen-Data-Posted"),
TraceSectionMetric("5-ConversationOpen-Render"),
),
iterations = 10,
iterations = 3,
compilationMode = CompilationMode.Partial(),
setupBlock = {
if (!setup) {

View File

@@ -41,8 +41,8 @@ class GroupMessageProcessingBenchmarks {
private fun runGroupMessageReceive(withConversationOpen: Boolean) {
benchmarkRule.measureRepeated(
packageName = "org.thoughtcrime.securesms.benchmark",
metrics = BenchmarkMetrics.incomingMessageObserver + BenchmarkMetrics.messageContentProcessor + BenchmarkMetrics.dataMessageProcessor,
iterations = 5,
metrics = BenchmarkMetrics.incomingMessageObserver + BenchmarkMetrics.messageContentProcessor + BenchmarkMetrics.groupDataMessageProcessor,
iterations = 3,
compilationMode = CompilationMode.Partial(),
setupBlock = {
setupGroup("group-message-send", BenchmarkSetup::setupGroupSend, withConversationOpen)
@@ -69,7 +69,7 @@ class GroupMessageProcessingBenchmarks {
benchmarkRule.measureRepeated(
packageName = "org.thoughtcrime.securesms.benchmark",
metrics = BenchmarkMetrics.incomingMessageObserver + BenchmarkMetrics.messageContentProcessor + BenchmarkMetrics.deliveryReceipt,
iterations = 5,
iterations = 3,
compilationMode = CompilationMode.Partial(),
setupBlock = {
setupGroup("group-delivery-receipt", BenchmarkSetup::setupGroupDeliveryReceipt, withConversationOpen)
@@ -95,7 +95,7 @@ class GroupMessageProcessingBenchmarks {
benchmarkRule.measureRepeated(
packageName = "org.thoughtcrime.securesms.benchmark",
metrics = BenchmarkMetrics.incomingMessageObserver + BenchmarkMetrics.messageContentProcessor + BenchmarkMetrics.readReceipt,
iterations = 5,
iterations = 3,
compilationMode = CompilationMode.Partial(),
setupBlock = {
setupGroup("group-read-receipt", BenchmarkSetup::setupGroupReadReceipt, withConversationOpen)

View File

@@ -39,8 +39,8 @@ class MessageProcessingBenchmarks {
private fun run(withConversationOpen: Boolean) {
benchmarkRule.measureRepeated(
packageName = "org.thoughtcrime.securesms.benchmark",
metrics = BenchmarkMetrics.incomingMessageObserver + BenchmarkMetrics.messageContentProcessor,
iterations = 5,
metrics = BenchmarkMetrics.incomingMessageObserver + BenchmarkMetrics.messageContentProcessor + BenchmarkMetrics.individualDataMessageProcessor,
iterations = 3,
compilationMode = CompilationMode.Partial(),
setupBlock = {
BenchmarkSetup.setup("message-send", device)
@@ -60,7 +60,7 @@ class MessageProcessingBenchmarks {
BenchmarkSetup.releaseMessages(device)
device.wait(Until.hasObject(By.textContains("101")), 10_000L)
device.wait(Until.hasObject(By.textContains("501")), 10_000L)
}
}
}

View File

@@ -24,12 +24,12 @@ class StartupBenchmarks {
@Test
fun coldStartNone() {
measureStartup(5, CompilationMode.None())
measureStartup(3, CompilationMode.None())
}
@Test
fun coldStartBaselineProfile() {
measureStartup(5, CompilationMode.Partial(BaselineProfileMode.Require))
measureStartup(3, CompilationMode.Partial(BaselineProfileMode.Require))
}
@OptIn(ExperimentalMetricApi::class)