Improve conversation open speed.

Co-authored-by: Cody Henthorne <cody@signal.org>
This commit is contained in:
Greyson Parrelli
2022-03-16 10:10:01 -04:00
committed by Cody Henthorne
parent d3049a3433
commit 666218773c
27 changed files with 462 additions and 395 deletions

View File

@@ -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
}

View File

@@ -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);
}

View File

@@ -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();