Improve conversation open benchmark test.

This commit is contained in:
Cody Henthorne 2023-07-10 19:39:06 -04:00 committed by Clark Chen
parent 7e909f2bee
commit aee0b5268f
7 changed files with 38 additions and 9 deletions

View file

@ -148,6 +148,7 @@ object TestMessages {
1024,
1024,
Optional.empty(),
Optional.empty(),
Optional.of("/not-there.jpg"),
false,
false,
@ -169,6 +170,7 @@ object TestMessages {
1024,
1024,
Optional.empty(),
Optional.empty(),
Optional.of("/not-there.aac"),
true,
false,

View file

@ -65,7 +65,7 @@ object TestUsers {
).blockingGet()
ServiceResponseProcessor.DefaultProcessor(response).resultOrThrow
SignalStore.kbsValues().optOut()
SignalStore.svr().optOut()
RegistrationUtil.maybeMarkRegistrationComplete()
SignalDatabase.recipients.setProfileName(Recipient.self().id, ProfileName.fromParts("Tester", "McTesterson"))

View file

@ -292,7 +292,6 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
this.locale = Locale.getDefault();
startupStopwatch = new Stopwatch("conversation-open");
SignalLocalMetrics.ConversationOpen.start();
SignalTrace.beginSection("ConversationOpen");
}
@Override
@ -405,7 +404,6 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
startupStopwatch.stop(TAG);
SignalLocalMetrics.ConversationOpen.onRenderFinished();
listener.onFirstRender();
SignalTrace.endSection();
return Unit.INSTANCE;
});
}

View file

@ -82,29 +82,41 @@ public final class SignalLocalMetrics {
private static String id;
public static void start() {
SignalTrace.beginSection("6-ConversationOpen");
id = NAME + "-" + System.currentTimeMillis();
LocalMetrics.getInstance().start(id, NAME);
SignalTrace.beginSection("1-ConversationOpen-ViewModel-Init");
}
public static void onMetadataLoadStarted() {
SignalTrace.endSection();
LocalMetrics.getInstance().split(id, SPLIT_VIEWMODEL_INIT);
SignalTrace.beginSection("2-ConversationOpen-Metadata-Loaded");
}
public static void onMetadataLoaded() {
SignalTrace.endSection();
LocalMetrics.getInstance().split(id, SPLIT_METADATA_LOADED);
SignalTrace.beginSection("3-ConversationOpen-Data-Loaded");
}
public static void onDataLoaded() {
SignalTrace.endSection();
LocalMetrics.getInstance().split(id, SPLIT_DATA_LOADED);
SignalTrace.beginSection("4-ConversationOpen-Data-Posted");
}
public static void onDataPostedToMain() {
SignalTrace.endSection();
LocalMetrics.getInstance().split(id, SPLIT_DATA_POSTED);
SignalTrace.beginSection("5-ConversationOpen-Render");
}
public static void onRenderFinished() {
SignalTrace.endSection();
LocalMetrics.getInstance().split(id, SPLIT_RENDER);
LocalMetrics.getInstance().end(id);
SignalTrace.endSection();
}
}

View file

@ -1,15 +1,21 @@
package org.thoughtcrime.securesms.util
import org.thoughtcrime.securesms.BuildConfig
import java.util.concurrent.Executors
import androidx.tracing.Trace as AndroidTrace
object SignalTrace {
private val executor by lazy(LazyThreadSafetyMode.NONE) {
Executors.newSingleThreadExecutor()
}
@JvmStatic
fun beginSection(methodName: String) {
if (!BuildConfig.TRACING_ENABLED) {
return
}
AndroidTrace.beginSection(methodName)
executor.execute { AndroidTrace.beginSection(methodName) }
}
@JvmStatic
@ -17,6 +23,6 @@ object SignalTrace {
if (!BuildConfig.TRACING_ENABLED) {
return
}
AndroidTrace.endSection()
executor.execute { AndroidTrace.endSection() }
}
}

View file

@ -2,8 +2,6 @@
package org.thoughtcrime.benchmark
import android.content.ComponentName
import android.content.Intent
import androidx.benchmark.macro.ExperimentalBaselineProfilesApi
import androidx.benchmark.macro.junit4.BaselineProfileRule
import androidx.test.uiautomator.By
@ -18,6 +16,7 @@ import org.junit.Test
* - start the app
* - open a conversation
*/
@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()

View file

@ -1,5 +1,7 @@
package org.thoughtcrime.benchmark
import android.Manifest
import android.os.Build
import androidx.benchmark.macro.CompilationMode
import androidx.benchmark.macro.ExperimentalMetricApi
import androidx.benchmark.macro.TraceSectionMetric
@ -22,7 +24,14 @@ class ConversationBenchmarks {
var setup = false
benchmarkRule.measureRepeated(
packageName = "org.thoughtcrime.securesms",
metrics = listOf(TraceSectionMetric("ConversationOpen")),
metrics = listOf(
TraceSectionMetric("6-ConversationOpen"),
TraceSectionMetric("1-ConversationOpen-ViewModel-Init"),
TraceSectionMetric("2-ConversationOpen-Metadata-Loaded"),
TraceSectionMetric("3-ConversationOpen-Data-Loaded"),
TraceSectionMetric("4-ConversationOpen-Data-Posted"),
TraceSectionMetric("5-ConversationOpen-Render"),
),
iterations = 10,
compilationMode = CompilationMode.Partial(),
setupBlock = {
@ -31,10 +40,13 @@ class ConversationBenchmarks {
setup = true
}
killProcess()
if (Build.VERSION.SDK_INT >= 33) {
device.executeShellCommand("pm grant $packageName ${Manifest.permission.POST_NOTIFICATIONS}")
}
startActivityAndWait()
device.waitForIdle()
}) {
device.findObject(By.textContains("Buddy")).click();
device.findObject(By.textContains("Buddy")).click()
device.wait(Until.hasObject(By.textContains("Signal message")), 10_000L)
device.wait(Until.hasObject(By.textContains("Test")), 5_000L)
}