mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 08:39:22 +01:00
Improve conversation open speed.
Co-authored-by: Cody Henthorne <cody@signal.org>
This commit is contained in:
committed by
Cody Henthorne
parent
d3049a3433
commit
666218773c
@@ -68,8 +68,8 @@ object LocalMetrics {
|
||||
|
||||
executor.execute {
|
||||
val lastTime: Long? = lastSplitTimeById[id]
|
||||
|
||||
if (lastTime != null) {
|
||||
val splitDoesNotExist: Boolean = eventsById[id]?.splits?.none { it.name == split } ?: true
|
||||
if (lastTime != null && splitDoesNotExist) {
|
||||
eventsById[id]?.splits?.add(LocalMetricsSplit(split, time - lastTime))
|
||||
lastSplitTimeById[id] = time
|
||||
}
|
||||
|
||||
@@ -72,8 +72,10 @@ public final class SignalLocalMetrics {
|
||||
public static final class ConversationOpen {
|
||||
private static final String NAME = "conversation-open";
|
||||
|
||||
private static final String SPLIT_DATA_LOADED = "data-loaded";
|
||||
private static final String SPLIT_RENDER = "render";
|
||||
private static final String SPLIT_VIEWMODEL_INIT = "viewmodel-init";
|
||||
private static final String SPLIT_METADATA_LOADED = "metadata-loaded";
|
||||
private static final String SPLIT_DATA_LOADED = "data-loaded";
|
||||
private static final String SPLIT_RENDER = "render";
|
||||
|
||||
private static String id;
|
||||
|
||||
@@ -82,6 +84,14 @@ public final class SignalLocalMetrics {
|
||||
LocalMetrics.getInstance().start(id, NAME);
|
||||
}
|
||||
|
||||
public static void onMetadataLoadStarted() {
|
||||
LocalMetrics.getInstance().split(id, SPLIT_VIEWMODEL_INIT);
|
||||
}
|
||||
|
||||
public static void onMetadataLoaded() {
|
||||
LocalMetrics.getInstance().split(id, SPLIT_METADATA_LOADED);
|
||||
}
|
||||
|
||||
public static void onDataLoaded() {
|
||||
LocalMetrics.getInstance().split(id, SPLIT_DATA_LOADED);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import androidx.annotation.AnyThread;
|
||||
import androidx.annotation.MainThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.LiveDataReactiveStreams;
|
||||
import androidx.lifecycle.MediatorLiveData;
|
||||
|
||||
import com.annimon.stream.function.Function;
|
||||
@@ -15,6 +16,9 @@ import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy;
|
||||
import io.reactivex.rxjava3.core.Observable;
|
||||
|
||||
/**
|
||||
* Manages a state to be updated from a view model and provide direct and live access. Updates
|
||||
* occur serially on the same executor to allow updating in a thread safe way. While not
|
||||
@@ -46,6 +50,11 @@ public class Store<State> {
|
||||
liveStore.update(source, action);
|
||||
}
|
||||
|
||||
@MainThread
|
||||
public <Input> void update(@NonNull Observable<Input> source, @NonNull Action<Input, State> action) {
|
||||
liveStore.update(LiveDataReactiveStreams.fromPublisher(source.toFlowable(BackpressureStrategy.LATEST)), action);
|
||||
}
|
||||
|
||||
@MainThread
|
||||
public void clear() {
|
||||
liveStore.clear();
|
||||
|
||||
Reference in New Issue
Block a user