Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd992be0 authored by Pablo Gamito's avatar Pablo Gamito
Browse files

Add performance metric collectors to ProtoLogPerfTests

Flag: TEST_ONLY
Bug: 370430208
Test: atest ProtologPerfTests
Change-Id: Idf43735660bc73bc70780c57c8684e48b214a7f8
parent 58510fe4
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -21,12 +21,13 @@ android_test {
        "androidx.annotation_annotation",
        "apct-perftests-utils",
        "collector-device-lib",
        "collector-device-lib-platform",
        "platform-test-annotations",
        "perfetto_trace_java_protos",
    ],
    test_suites: [
        "device-tests",
        "automotive-tests",
        "performance-tests",
    ],
    data: [":perfetto_artifacts"],
    platform_apis: true,
+85 −6
Original line number Diff line number Diff line
@@ -14,6 +14,8 @@
     limitations under the License.
-->
<configuration description="Runs ProtologPerfTests metric instrumentation.">
    <option name="config-descriptor:metadata" key="test-type" value="performance" />

    <option name="test-suite-tag" value="apct" />
    <option name="test-suite-tag" value="apct-metric-instrumentation" />
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
@@ -42,7 +44,7 @@
        <option name="hidden-api-checks" value="false"/>

        <!-- Listener related args for collecting the traces and waiting for the device to stabilize. -->
        <option name="device-listeners" value="android.device.collectors.ProcLoadListener,android.device.collectors.PerfettoListener" />
        <option name="device-listeners" value="android.device.collectors.ProcLoadListener,android.device.collectors.SimpleperfListener,android.device.collectors.PerfettoListener" />

        <!-- Guarantee that user defined RunListeners will be running before any of the default listeners defined in this runner. -->
        <option name="instrumentation-arg" key="newRunListenerMode" value="true" />
@@ -57,11 +59,88 @@
        <!-- PerfettoListener related arguments -->
        <option name="instrumentation-arg" key="perfetto_config_text_proto" value="true" />
        <option name="instrumentation-arg" key="perfetto_config_file" value="trace_config.textproto" />

        <option name="instrumentation-arg" key="listener" value="android.device.collectors.CpuUsageListener,android.device.collectors.ProcLoadListener,android.device.collectors.PerfettoListener,android.device.collectors.CrashListener,android.device.collectors.ThermalListener,android.device.collectors.TotalPssMetricListener,android.device.collectors.LogcatCollector,android.device.collectors.HeapDumpListener"/>
        <option name="instrumentation-arg" key="procload-collector:per_run" value="true"/>
        <option name="instrumentation-arg" key="procload-collector:proc-loadavg-timeout" value="900000"/>
        <option name="instrumentation-arg" key="procload-collector:proc-loadavg-interval" value="20000"/>
        <option name="instrumentation-arg" key="procload-collector:proc-loadavg-threshold" value="2"/>
        <option name="instrumentation-arg" key="cpuusage-collector:disable_per_pkg" value="true"/>
        <option name="instrumentation-arg" key="cpuusage-collector:disable_per_freq" value="true"/>
        <option name="instrumentation-arg" key="cpuusage-collector:log" value="true"/>
        <option name="instrumentation-arg" key="trace-processor-name" value="trace_processor_shell"/>
        <option name="instrumentation-arg" key="logcat-collector:collect-on-failure-only" value="true"/>
        <option name="instrumentation-arg" key="perfetto_persist_pid_track" value="false"/>
        <option name="instrumentation-arg" key="totalpss-collector:log" value="true"/>
        <option name="instrumentation-arg" key="crash-collector:log" value="true"/>
        <option name="instrumentation-arg" key="skip_test_failure_metrics" value="true"/>
        <option name="instrumentation-arg" key="include-ui-xml" value="true"/>
        <option name="instrumentation-arg" key="app-version-listener:per_run" value="true"/>
        <option name="isolated-storage" value="false"/>
    </test>

    <!-- <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
        <option name="directory-keys" value="/data/local/tmp/ProtologPerfTests" /> -->
        <!-- Needed for pulling the collected trace config on to the host -->
        <!-- <option name="pull-pattern-keys" value="perfetto_file_path" />
    </metrics_collector> -->
    <metrics_collector class="com.android.tradefed.device.metric.PerfettoFilePullerCollector">
        <option name="pull-pattern-keys" value="^perfetto_file_path(_\d+)?$" />
        <option name="collect-on-run-ended-only" value="false"/>
    </metrics_collector>

    <!-- Post processors run in the reverse order to that in xml, so the order is:
        1. PerfettoTracePostProcessor runs the trace_processor to produce a metric proto
        2. PerfettoGenericPostProcessor parses the proto to produce metrics as key-value pairs
        3. MetricFilePostProcessor writes the metrics to a file -->
    <metric_post_processor class="com.android.tradefed.postprocessor.MetricFilePostProcessor"/>

    <metric_post_processor class="com.android.tradefed.postprocessor.PerfettoGenericPostProcessor">
        <option name="perfetto-proto-file-prefix" value="metric_perfetto"/>
        <option name="perfetto-proto-file-prefix" value="metric_v2_perfetto"/>

        <!-- Memory related metrics -->
        <option name="perfetto-prefix-key-field" value="perfetto.protos.AndroidGpuMetric.Process.name"/>
        <option name="perfetto-metric-filter-regex" value="android_mem-process_metrics-process_name-.*-total_counters-.*"/>
        <option name="perfetto-metric-replace-prefix" key="android_mem-process_metrics-process_name" value="android_mem"/>

        <!-- PnP related metrics. -->
        <option name="perfetto-metric-filter-regex" value="android_batt-battery_aggregates-avg_power_mw"/>
        <option name="perfetto-metric-filter-regex" value="android_frame_timeline_metric-(total_frames|missed_app_frames)"/>

        <!-- Metric for wattson energy/power consumption -->
        <option name="perfetto-metric-filter-regex" value="wattson_atrace_apps_rails-period_info-period_name-*.*-cpu_subsystem-estimated_mw\b"/>
        <option name="perfetto-metric-filter-regex" value="wattson_atrace_apps_rails-period_info-period_name-*.*-cpu_subsystem-estimated_mws"/>
        <option name="perfetto-metric-replace-prefix" key="wattson_atrace_apps_rails-period_info-period_name" value="wattson_apps_rails-name"/>

        <!-- Metric for android anomaly detection-->
        <option name="perfetto-metric-filter-regex" value="android_anomaly-binder-max_outgoing_process_count_per_second-process_name-system_server-value"/>
        <option name="perfetto-metric-filter-regex" value="android_anomaly-binder-max_incoming_process_count_per_second-process_name-system_server-value"/>
        <option name="perfetto-metric-filter-regex" value="android_anomaly-binder-max_outgoing_process_count_per_second-process_name-/system/bin/servicemanager-value"/>
        <option name="perfetto-metric-filter-regex" value="android_anomaly-binder-max_incoming_process_count_per_second-process_name-/system/bin/servicemanager-value"/>
        <option name="perfetto-metric-filter-regex" value="android_anomaly-binder-max_outgoing_process_count_per_second-process_name-com.google.android.apps.nexuslauncher-value"/>
        <option name="perfetto-metric-filter-regex" value="android_anomaly-binder-max_incoming_process_count_per_second-process_name-com.google.android.apps.nexuslauncher-value"/>
        <option name="perfetto-metric-filter-regex" value="android_anomaly-binder-max_outgoing_process_count_per_second-process_name-com.android.systemui-value"/>
        <option name="perfetto-metric-filter-regex" value="android_anomaly-binder-max_incoming_process_count_per_second-process_name-com.android.systemui-value"/>
        <option name="perfetto-prefix-key-field"  value="perfetto.protos.AndroidAnomalyMetric.ProcessAnomaly.process_name"/>

        <option name="perfetto-metric-replace-prefix" key="android_anomaly-binder-max_outgoing_process_count_per_second-process_name-system_server-value" value="android_anomaly-max_outgoing_process_name-system_server"/>
        <option name="perfetto-metric-replace-prefix" key="android_anomaly-binder-max_incoming_process_count_per_second-process_name-system_server-value" value="android_anomaly-max_incoming_process_name-system_server"/>
        <option name="perfetto-metric-replace-prefix" key="android_anomaly-binder-max_outgoing_process_count_per_second-process_name-/system/bin/servicemanager-value" value="android_anomaly-max_outgoing_process_name-/system/bin/servicemanager"/>
        <option name="perfetto-metric-replace-prefix" key="android_anomaly-binder-max_incoming_process_count_per_second-process_name-/system/bin/servicemanager-value" value="android_anomaly-max_incoming_process_name-/system/bin/servicemanager"/>
        <option name="perfetto-metric-replace-prefix" key="android_anomaly-binder-max_outgoing_process_count_per_second-process_name-com.android.systemui-value" value="android_anomaly-max_outgoing_process_name-com.android.systemui"/>
        <option name="perfetto-metric-replace-prefix" key="android_anomaly-binder-max_incoming_process_count_per_second-process_name-com.android.systemui-value" value="android_anomaly-max_incoming_process_name-com.android.systemui"/>
        <option name="perfetto-metric-replace-prefix" key="android_anomaly-binder-max_outgoing_process_count_per_second-process_name-com.google.android.apps.nexuslauncher-value" value="android_anomaly-max_outgoing_process_name-com.google.android.apps.nexuslauncher"/>
        <option name="perfetto-metric-replace-prefix" key="android_anomaly-binder-max_incoming_process_count_per_second-process_name-com.google.android.apps.nexuslauncher-value" value="android_anomaly-max_incoming_process_name-com.google.android.apps.nexuslauncher"/>
    </metric_post_processor>

    <metric_post_processor class="com.android.tradefed.postprocessor.PerfettoTracePostProcessor">
        <!-- V1 metrics -->
        <option name="trace-processor-run-metrics" value="android_batt,android_frame_timeline_metric,android_mem,android_gpu,android_ion,android_dma_heap"/>
    </metric_post_processor>

    <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
        <option name="pull-pattern-keys" value="managed_heapdump_file.*"/>
        <option name="pull-pattern-keys" value="android.device.collectors.LogcatCollector.*"/>
        <!-- Passing case already collected by PerfettoPullerMetricCollector -->
        <option name="pull-pattern-keys" value="^perfetto_file_path_FAILED(_\d+)?$"/>
        <option name="clean-up" value="false"/>
        <option name="collect-on-run-ended-only" value="false"/>
    </metrics_collector>

</configuration>