Skip to content

Commit 6988e59

Browse files
committed
Also measure and log splitContentAndQuotes()
1 parent 16deecf commit 6988e59

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

app/src/main/java/com/infomaniak/mail/utils/JsoupParserUtil.kt

+7-4
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,21 @@ object JsoupParserUtil {
2727
private const val BYTE_TO_MEGABYTE_DIVIDER: Float = 1024f * 1024f
2828

2929
fun jsoupParseWithLog(value: String): Document {
30-
return measureMemoryUsage(SENTRY_LOG_TAG, actionName = "parsing") {
30+
return measureAndLogMemoryUsage(SENTRY_LOG_TAG, actionName = "parsing") {
3131
Jsoup.parse(value)
3232
}
3333
}
3434

3535
fun jsoupParseBodyFragmentWithLog(value: String): Document {
36-
return measureMemoryUsage(SENTRY_LOG_TAG, actionName = "parsing body fragment") {
36+
return measureAndLogMemoryUsage(SENTRY_LOG_TAG, actionName = "parsing body fragment") {
3737
Jsoup.parseBodyFragment(value)
3838
}
3939
}
40-
41-
fun <R> measureMemoryUsage(tag: String, actionName: String, block: () -> R): R {
40+
41+
/**
42+
* Measures and logs to sentry the used and available RAM of the JVM
43+
*/
44+
fun <R> measureAndLogMemoryUsage(tag: String, actionName: String, block: () -> R): R {
4245
val (usedMemoryBefore, maxMemoryBefore) = getMemoryUsage()
4346
SentryLog.i(tag, "Before $actionName, used / available: $usedMemoryBefore / $maxMemoryBefore MB")
4447

app/src/main/java/com/infomaniak/mail/utils/MessageBodyUtils.kt

+9-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ import android.content.Context
2121
import com.infomaniak.mail.data.models.message.Body
2222
import com.infomaniak.mail.data.models.message.Message
2323
import com.infomaniak.mail.data.models.message.SubBody
24-
import com.infomaniak.mail.utils.PrintHeaderUtils.createPrintHeader
2524
import com.infomaniak.mail.utils.JsoupParserUtil.jsoupParseWithLog
25+
import com.infomaniak.mail.utils.JsoupParserUtil.measureAndLogMemoryUsage
26+
import com.infomaniak.mail.utils.PrintHeaderUtils.createPrintHeader
2627
import io.sentry.Sentry
2728
import io.sentry.SentryLevel
2829
import kotlinx.coroutines.CoroutineScope
@@ -67,7 +68,13 @@ object MessageBodyUtils {
6768
timeout = QUOTE_DETECTION_TIMEOUT,
6869
defaultValue = SplitBody(bodyContent),
6970
block = {
70-
val (content, quotes) = splitContentAndQuotes(htmlDocument = jsoupParseWithLog(bodyContent))
71+
// Do not nest jsoupParseWithLog and measureAndLogMemoryUsage so logs are independent from one another
72+
val htmlDocument = jsoupParseWithLog(bodyContent)
73+
val (content, quotes) = measureAndLogMemoryUsage(
74+
tag = "Split signature and quote memory usage",
75+
actionName = "splitting",
76+
) { splitContentAndQuotes(htmlDocument = htmlDocument) }
77+
7178
if (quotes.isEmpty() || quotes.all { it.isBlank() }) SplitBody(bodyContent) else SplitBody(content, bodyContent)
7279
},
7380
onTimeout = {

0 commit comments

Comments
 (0)