From 02bffbf87f9f289250d1b52fd116dd1f3686bf64 Mon Sep 17 00:00:00 2001 From: edubinskaya Date: Fri, 10 Mar 2023 14:58:26 +0300 Subject: [PATCH] added div storage performance tests added div storage performance tests --- .../storage/histogram/HistogramRecorder.kt | 21 +++-- .../DemoAppHistogramNameProvider.kt | 9 +++ .../perftests/div/DivStorageCardsLoadTest.kt | 79 +++++++++++++++++++ ...tests.div.DivStorageCardsLoadTest.wprgo.s3 | 1 + 4 files changed, 99 insertions(+), 11 deletions(-) create mode 100644 client/android/divkit-perftests/src/androidTest/java/com/yandex/morda/perftests/div/DivStorageCardsLoadTest.kt create mode 100644 client/android/perf/archives/com.yandex.morda.perftests.div.DivStorageCardsLoadTest.wprgo.s3 diff --git a/client/android/div-storage/src/main/java/com/yandex/div/storage/histogram/HistogramRecorder.kt b/client/android/div-storage/src/main/java/com/yandex/div/storage/histogram/HistogramRecorder.kt index 516a8a778..a017729b8 100644 --- a/client/android/div-storage/src/main/java/com/yandex/div/storage/histogram/HistogramRecorder.kt +++ b/client/android/div-storage/src/main/java/com/yandex/div/storage/histogram/HistogramRecorder.kt @@ -2,6 +2,7 @@ package com.yandex.div.storage.histogram import androidx.annotation.AnyThread import com.yandex.div.core.annotations.Mockable +import com.yandex.div.histogram.HistogramCallType import com.yandex.div.histogram.HistogramFilter import com.yandex.div.histogram.reporter.HistogramReporter import com.yandex.div.histogram.reporter.HistogramReporterDelegate @@ -41,23 +42,21 @@ internal class HistogramRecorder( histogramName: String, time: Long, filter: HistogramFilter = HistogramFilter.ON, - ) = histogramReporter.reportDuration( - histogramName = getFullHistogramName(histogramName), + ) = + histogramReporter.reportDuration( + histogramName = histogramName, duration = time, componentName = histogramNameProvider?.componentName, - filter = filter + filter = filter, + forceCallType = getHistogramCallType(histogramName), ) - private fun getFullHistogramName(histogramName: String): String { - val callType = if (recordedHistograms.add(histogramName)) { - histogramNameProvider?.coldCallTypeSuffix + private fun getHistogramCallType(histogramName: String): String { + return if (recordedHistograms.add(histogramName)) { + histogramNameProvider?.coldCallTypeSuffix ?: HistogramCallType.CALL_TYPE_COLD } else { - histogramNameProvider?.hotCallTypeSuffix + histogramNameProvider?.hotCallTypeSuffix ?: HistogramCallType.CALL_TYPE_WARM } - - return StringBuilder(histogramName).apply { - callType?.let { append(".$it") } - }.toString() } fun reportTemplatesParseTime(parsingHistogramNames: Set, duration: Long) { diff --git a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/divstorage/DemoAppHistogramNameProvider.kt b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/divstorage/DemoAppHistogramNameProvider.kt index b4bf88b38..9a9706297 100644 --- a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/divstorage/DemoAppHistogramNameProvider.kt +++ b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/divstorage/DemoAppHistogramNameProvider.kt @@ -1,5 +1,6 @@ package com.yandex.divkit.demo.divstorage +import com.yandex.div.histogram.HistogramCallType import com.yandex.div.storage.histogram.HistogramNameProvider /** @@ -27,6 +28,14 @@ class DemoAppHistogramNameProvider: HistogramNameProvider { * Base name for templates parsing histogram. */ override val divParsingHistogramName: String = "Storage.Templates.Parsing" + /** + * Display suffix in report for first start. + */ + override val coldCallTypeSuffix: String get() = HistogramCallType.CALL_TYPE_COLD + /** + * Display suffix in report for hot start. + */ + override val hotCallTypeSuffix: String get() = HistogramCallType.CALL_TYPE_WARM //currently used only as component name override fun getHistogramNameFromCardId(cardId: String): String = componentName diff --git a/client/android/divkit-perftests/src/androidTest/java/com/yandex/morda/perftests/div/DivStorageCardsLoadTest.kt b/client/android/divkit-perftests/src/androidTest/java/com/yandex/morda/perftests/div/DivStorageCardsLoadTest.kt new file mode 100644 index 000000000..2797b62c7 --- /dev/null +++ b/client/android/divkit-perftests/src/androidTest/java/com/yandex/morda/perftests/div/DivStorageCardsLoadTest.kt @@ -0,0 +1,79 @@ +package com.yandex.morda.perftests.div + +import androidx.test.uiautomator.By +import androidx.test.uiautomator.Until +import com.yandex.divkit.perftests.divStorageBenchmarkActivityExtras +import com.yandex.divkit.perftests.DIV_STORAGE_BENCHMARK_ACTIVITY +import com.yandex.divkit.perftests.PACKAGE_NAME +import com.yandex.divkit.perftests.report +import com.yandex.divkit.perftests.startActivity +import com.yandex.perftests.runner.PerfTest +import com.yandex.perftests.runner.PerfTestJUnit4Runner +import com.yandex.perftests.runner.PerfTestParameter +import com.yandex.perftests.runner.PerfTestUtils +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(PerfTestJUnit4Runner::class) +@PerfTest( + packageName = PACKAGE_NAME, + description = "Div storage loading test", + owners = ["edubinskaya", "i-ts", "bgubanov"], + defaultRepeat = 20, + timeoutSeconds = 1200 +) +class DivStorageCardsLoadTest { + + private val utils = PerfTestUtils(PACKAGE_NAME) + + @Before + fun setUp() { + utils.forceStop() + } + + @PerfTestParameter( + requiredMetrics = [ + "Storage.Data.Load.Cold", + "Storage.Templates.Parsing.Cold" + ] + ) + @Test + fun withTemplates() { + utils.run { + report(packageName = PACKAGE_NAME, tag = "with_templates") { + startActivity( + packageName = PACKAGE_NAME, + activityClass = DIV_STORAGE_BENCHMARK_ACTIVITY, + extras = divStorageBenchmarkActivityExtras( + assetNames = arrayOf("div2-perf/benchmark-with-templates.json", + "div2-perf/state-benchmark-multiple-change.json") + ), + waitCondition = Until.findObject(By.textContains("Finished")) + ) + } + } + } + + @PerfTestParameter( + requiredMetrics = [ + "Storage.Data.Load.Cold" + ] + ) + @Test + fun withoutTemplates() { + utils.run { + report(packageName = PACKAGE_NAME, tag = "without_templates") { + startActivity( + packageName = PACKAGE_NAME, + activityClass = DIV_STORAGE_BENCHMARK_ACTIVITY, + extras = divStorageBenchmarkActivityExtras( + assetNames = arrayOf("div2-perf/benchmark-without-templates.json", + "div2-perf/state-benchmark-multiple-change.json") + ), + waitCondition = Until.findObject(By.textContains("Finished")) + ) + } + } + } +} diff --git a/client/android/perf/archives/com.yandex.morda.perftests.div.DivStorageCardsLoadTest.wprgo.s3 b/client/android/perf/archives/com.yandex.morda.perftests.div.DivStorageCardsLoadTest.wprgo.s3 new file mode 100644 index 000000000..831fe99ff --- /dev/null +++ b/client/android/perf/archives/com.yandex.morda.perftests.div.DivStorageCardsLoadTest.wprgo.s3 @@ -0,0 +1 @@ +divkit-android/c263fb9713f91dead24cd759a31aec3cfc7dcaec-com.yandex.morda.perftests.div.DivStorageCardsLoadTest.wprgo \ No newline at end of file