Break message-latency into high/low priority.
This commit is contained in:
parent
7ac479b78a
commit
14f3fb5a94
3 changed files with 11 additions and 9 deletions
|
@ -299,7 +299,7 @@ class IncomingMessageObserver(private val context: Application) {
|
|||
val result = MessageDecryptor.decrypt(context, bufferedProtocolStore, envelope, serverDeliveredTimestamp)
|
||||
localReceiveMetric.onEnvelopeDecrypted()
|
||||
|
||||
SignalLocalMetrics.MessageLatency.onMessageReceived(envelope.serverTimestamp, serverDeliveredTimestamp)
|
||||
SignalLocalMetrics.MessageLatency.onMessageReceived(envelope.serverTimestamp, serverDeliveredTimestamp, envelope.urgent)
|
||||
when (result) {
|
||||
is MessageDecryptor.Result.Success -> {
|
||||
val job = PushProcessMessageJobV2.processOrDefer(messageContentProcessor, result, localReceiveMetric)
|
||||
|
|
|
@ -73,17 +73,17 @@ object SlowNotificationHeuristics {
|
|||
}
|
||||
|
||||
private fun hasLongMessageLatency(metrics: List<LocalMetricsDatabase.EventMetrics>, minimumEventAgeMs: Long, percentage: Int, messageThreshold: Int, durationThreshold: Long): Boolean {
|
||||
if (!haveEnoughData(SignalLocalMetrics.MessageLatency.NAME, minimumEventAgeMs)) {
|
||||
if (!haveEnoughData(SignalLocalMetrics.MessageLatency.NAME_HIGH, minimumEventAgeMs)) {
|
||||
Log.d(TAG, "insufficient data for message latency")
|
||||
return false
|
||||
}
|
||||
val eventCount = metrics.count { it.name == SignalLocalMetrics.MessageLatency.NAME }
|
||||
val eventCount = metrics.count { it.name == SignalLocalMetrics.MessageLatency.NAME_HIGH }
|
||||
if (eventCount < messageThreshold) {
|
||||
Log.d(TAG, "not enough messages for message latency")
|
||||
return false
|
||||
}
|
||||
val db = LocalMetricsDatabase.getInstance(ApplicationDependencies.getApplication())
|
||||
val averageLatency = db.eventPercent(SignalLocalMetrics.MessageLatency.NAME, percentage.coerceAtMost(100).coerceAtLeast(0))
|
||||
val averageLatency = db.eventPercent(SignalLocalMetrics.MessageLatency.NAME_HIGH, percentage.coerceAtMost(100).coerceAtLeast(0))
|
||||
|
||||
val longMessageLatency = averageLatency > durationThreshold
|
||||
if (longMessageLatency) {
|
||||
|
|
|
@ -204,15 +204,17 @@ public final class SignalLocalMetrics {
|
|||
}
|
||||
|
||||
public static final class MessageLatency {
|
||||
public static final String NAME = "message-latency";
|
||||
public static final String NAME_HIGH = "message-latency-high-priority";
|
||||
public static final String NAME_LOW = "message-latency-low-priority";
|
||||
|
||||
private static final String SPLIT_LATENCY = "latency";
|
||||
|
||||
public static void onMessageReceived(long serverReceiveTimestamp, long serverDeliverTimestamp) {
|
||||
long latency = serverDeliverTimestamp - serverReceiveTimestamp;
|
||||
public static void onMessageReceived(long serverReceiveTimestamp, long serverDeliverTimestamp, boolean highPriority) {
|
||||
String name = highPriority ? NAME_HIGH : NAME_LOW;
|
||||
long latency = serverDeliverTimestamp - serverReceiveTimestamp;
|
||||
|
||||
String id = NAME + System.currentTimeMillis();
|
||||
LocalMetrics.getInstance().start(id, NAME);
|
||||
String id = name + System.currentTimeMillis();
|
||||
LocalMetrics.getInstance().start(id, name);
|
||||
LocalMetrics.getInstance().splitWithDuration(id, SPLIT_LATENCY, latency);
|
||||
LocalMetrics.getInstance().end(id);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue