diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt index 84b738d787..048a259eaf 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.messages import androidx.test.ext.junit.runners.AndroidJUnit4 import io.mockk.every +import io.mockk.mockkObject import io.mockk.mockkStatic import io.mockk.unmockkStatic import okio.ByteString @@ -57,14 +58,14 @@ class MessageProcessingPerformanceTest { mockkStatic(UnidentifiedAccessUtil::class) every { UnidentifiedAccessUtil.getCertificateValidator() } returns FakeClientHelpers.noOpCertificateValidator - mockkStatic(MessageContentProcessor::class) - every { MessageContentProcessor.create(harness.application) } returns TimingMessageContentProcessor(harness.application) + mockkObject(MessageContentProcessorV2) + every { MessageContentProcessorV2.create(harness.application) } returns TimingMessageContentProcessorV2(harness.application) } @After fun after() { unmockkStatic(UnidentifiedAccessUtil::class) - unmockkStatic(MessageContentProcessor::class) + unmockkStatic(MessageContentProcessorV2::class) } @Test @@ -105,7 +106,7 @@ class MessageProcessingPerformanceTest { // Wait until they've all been fully decrypted + processed harness .inMemoryLogger - .getLockForUntil(TimingMessageContentProcessor.endTagPredicate(lastTimestamp)) + .getLockForUntil(TimingMessageContentProcessorV2.endTagPredicate(lastTimestamp)) .awaitFor(1.minutes) harness.inMemoryLogger.flush() @@ -124,7 +125,7 @@ class MessageProcessingPerformanceTest { // Calculate MessageContentProcessor - val takeLast: List = entries.filter { it.tag == TimingMessageContentProcessor.TAG }.drop(2) + val takeLast: List = entries.filter { it.tag == TimingMessageContentProcessorV2.TAG }.drop(2) val iterator = takeLast.iterator() var processCount = 0L var processDuration = 0L @@ -140,7 +141,7 @@ class MessageProcessingPerformanceTest { // Calculate messages per second from "retrieving" first message post session initialization to processing last message val start = entries.first { it.message == "Retrieved envelope! $firstTimestamp" } - val end = entries.first { it.message == TimingMessageContentProcessor.endTag(lastTimestamp) } + val end = entries.first { it.message == TimingMessageContentProcessorV2.endTag(lastTimestamp) } val duration = (end.timestamp - start.timestamp).toFloat() / 1000f val messagePerSecond = messageCount.toFloat() / duration @@ -155,7 +156,7 @@ class MessageProcessingPerformanceTest { val aliceProcessFirstMessageLatch = harness .inMemoryLogger - .getLockForUntil(TimingMessageContentProcessor.endTagPredicate(firstPreKeyMessageTimestamp)) + .getLockForUntil(TimingMessageContentProcessorV2.endTagPredicate(firstPreKeyMessageTimestamp)) Thread { aliceClient.process(encryptedEnvelope, System.currentTimeMillis()) }.start() aliceProcessFirstMessageLatch.awaitFor(15.seconds) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/TimingMessageContentProcessor.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/TimingMessageContentProcessor.kt deleted file mode 100644 index 9fa27e7548..0000000000 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/TimingMessageContentProcessor.kt +++ /dev/null @@ -1,25 +0,0 @@ -package org.thoughtcrime.securesms.messages - -import android.content.Context -import org.signal.core.util.logging.Log -import org.thoughtcrime.securesms.testing.LogPredicate -import org.whispersystems.signalservice.api.messages.SignalServiceContent - -class TimingMessageContentProcessor(context: Context) : MessageContentProcessor(context) { - companion object { - val TAG = Log.tag(TimingMessageContentProcessor::class.java) - - fun endTagPredicate(timestamp: Long): LogPredicate = { entry -> - entry.tag == TAG && entry.message == endTag(timestamp) - } - - private fun startTag(timestamp: Long) = "$timestamp start" - fun endTag(timestamp: Long) = "$timestamp end" - } - - override fun process(messageState: MessageState?, content: SignalServiceContent?, exceptionMetadata: ExceptionMetadata?, envelopeTimestamp: Long, smsMessageId: Long) { - Log.d(TAG, startTag(envelopeTimestamp)) - super.process(messageState, content, exceptionMetadata, envelopeTimestamp, smsMessageId) - Log.d(TAG, endTag(envelopeTimestamp)) - } -} diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/TimingMessageContentProcessorV2.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/TimingMessageContentProcessorV2.kt new file mode 100644 index 0000000000..ada5cdba2f --- /dev/null +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/TimingMessageContentProcessorV2.kt @@ -0,0 +1,26 @@ +package org.thoughtcrime.securesms.messages + +import android.content.Context +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.testing.LogPredicate +import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata +import org.whispersystems.signalservice.internal.push.SignalServiceProtos + +class TimingMessageContentProcessorV2(context: Context) : MessageContentProcessorV2(context) { + companion object { + val TAG = Log.tag(TimingMessageContentProcessorV2::class.java) + + fun endTagPredicate(timestamp: Long): LogPredicate = { entry -> + entry.tag == TAG && entry.message == endTag(timestamp) + } + + private fun startTag(timestamp: Long) = "$timestamp start" + fun endTag(timestamp: Long) = "$timestamp end" + } + + override fun process(envelope: SignalServiceProtos.Envelope, content: SignalServiceProtos.Content, metadata: EnvelopeMetadata, serverDeliveredTimestamp: Long, processingEarlyContent: Boolean) { + Log.d(TAG, startTag(envelope.timestamp)) + super.process(envelope, content, metadata, serverDeliveredTimestamp, processingEarlyContent) + Log.d(TAG, endTag(envelope.timestamp)) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt index b52e49aa8b..1d0b7be63f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt @@ -47,7 +47,7 @@ import org.whispersystems.signalservice.internal.push.SignalServiceProtos.Envelo import org.whispersystems.signalservice.internal.push.SignalServiceProtos.TypingMessage import java.io.IOException -class MessageContentProcessorV2(private val context: Context) { +open class MessageContentProcessorV2(private val context: Context) { companion object { const val TAG = "MessageProcessorV2" @@ -277,7 +277,7 @@ class MessageContentProcessorV2(private val context: Context) { * store or enqueue early content jobs if we detect this as being early, to avoid recursive scenarios. */ @JvmOverloads - fun process(envelope: Envelope, content: Content, metadata: EnvelopeMetadata, serverDeliveredTimestamp: Long, processingEarlyContent: Boolean = false) { + open fun process(envelope: Envelope, content: Content, metadata: EnvelopeMetadata, serverDeliveredTimestamp: Long, processingEarlyContent: Boolean = false) { val senderRecipient = Recipient.externalPush(metadata.sourceServiceId) handleMessage(senderRecipient, envelope, content, metadata, serverDeliveredTimestamp, processingEarlyContent)