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

Commit f5f04099 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add performance metric collectors to ProtoLogPerfTests" into main

parents 3a4efe7f bd992be0
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>