mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 09:49:30 +01:00
Add heuristics for delayed notifications.
This commit is contained in:
@@ -87,14 +87,15 @@ object LocalMetrics {
|
||||
*
|
||||
* If an event with the provided ID does not exist, this is effectively a no-op.
|
||||
*/
|
||||
fun splitWithDuration(id: String, split: String, duration: Long) {
|
||||
val time = System.currentTimeMillis()
|
||||
@JvmOverloads
|
||||
fun splitWithDuration(id: String, split: String, duration: Long, timeunit: TimeUnit = TimeUnit.MILLISECONDS) {
|
||||
val time = SystemClock.elapsedRealtimeNanos()
|
||||
|
||||
executor.execute {
|
||||
val lastTime: Long? = lastSplitTimeById[id]
|
||||
val splitDoesNotExist: Boolean = eventsById[id]?.splits?.none { it.name == split } ?: true
|
||||
if (lastTime != null && splitDoesNotExist) {
|
||||
eventsById[id]?.splits?.add(LocalMetricsSplit(split, duration))
|
||||
eventsById[id]?.splits?.add(LocalMetricsSplit(split, TimeUnit.NANOSECONDS.convert(duration, timeunit)))
|
||||
lastSplitTimeById[id] = time
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,9 +203,51 @@ public final class SignalLocalMetrics {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class MessageLatency {
|
||||
public static final String NAME = "message-latency";
|
||||
|
||||
private static final String SPLIT_LATENCY = "latency";
|
||||
|
||||
public static void onMessageReceived(long serverReceiveTimestamp, long serverDeliverTimestamp) {
|
||||
long latency = serverDeliverTimestamp - serverReceiveTimestamp;
|
||||
|
||||
String id = NAME + System.currentTimeMillis();
|
||||
LocalMetrics.getInstance().start(id, NAME);
|
||||
LocalMetrics.getInstance().splitWithDuration(id, SPLIT_LATENCY, latency);
|
||||
LocalMetrics.getInstance().end(id);
|
||||
}
|
||||
}
|
||||
|
||||
public static final class FcmServiceStartFailure {
|
||||
public static final String NAME = "fcm-service-start-failure";
|
||||
|
||||
private static final String SPLIT_EVENT = "event";
|
||||
|
||||
public static void onFcmFailedToStart() {
|
||||
String id = NAME + System.currentTimeMillis();
|
||||
LocalMetrics.getInstance().start(id, NAME);
|
||||
LocalMetrics.getInstance().splitWithDuration(id, SPLIT_EVENT, 1);
|
||||
LocalMetrics.getInstance().end(id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static final class FcmServiceStartSuccess {
|
||||
public static final String NAME = "fcm-service-start-success";
|
||||
|
||||
private static final String SPLIT_EVENT = "event";
|
||||
|
||||
public static void onFcmStarted() {
|
||||
String id = NAME + System.currentTimeMillis();
|
||||
LocalMetrics.getInstance().start(id, NAME);
|
||||
LocalMetrics.getInstance().splitWithDuration(id, SPLIT_EVENT, 1);
|
||||
LocalMetrics.getInstance().end(id);
|
||||
}
|
||||
|
||||
}
|
||||
public static final class PushWebsocketFetch {
|
||||
private static final String SUCCESS_EVENT = "push-websocket-fetch";
|
||||
private static final String TIMEOUT_EVENT = "timed-out-fetch";
|
||||
public static final String SUCCESS_EVENT = "push-websocket-fetch";
|
||||
public static final String TIMEOUT_EVENT = "timed-out-fetch";
|
||||
|
||||
private static final String SPLIT_BATCH_PROCESSED = "batches-processed";
|
||||
private static final String SPLIT_PROCESS_TIME = "fetch-time";
|
||||
|
||||
Reference in New Issue
Block a user