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

Commit 14e076e6 authored by Stefan Lafon's avatar Stefan Lafon
Browse files

Improvements to loadtest app.

- Support for statsd stats in loadtest app.
- Skeleton for correctness validation.
- New config with pulled atoms in gauge metrics.

Test: Ran statsd.

Change-Id: I0f062d55b8827452cc0421093fc35242dc3afb23
parent b8f2728a
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -160,13 +160,6 @@
            android:layout_width="1dp"
            android:layout_height="30dp"/>

        <Button
            android:id="@+id/display_output"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/display_output"
            android:textSize="30dp"/>

        <Space
            android:layout_width="1dp"
            android:layout_height="30dp"/>
+0 −1
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@
    <string name="app_name">Statsd Loadtest</string>
    <string name="bucket_label">bucket size (mins):&#160;</string>
    <string name="burst_label">burst:&#160;</string>
    <string name="display_output">Show metrics data</string>
    <string name="placebo">placebo</string>
    <string name="period_label">logging period (secs):&#160;</string>
    <string name="replication_label">metric replication:&#160;</string>
+50 −43
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.statsd.loadtest;

import android.annotation.Nullable;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
@@ -43,6 +44,10 @@ import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.android.os.StatsLog.ConfigMetricsReport;
import com.android.os.StatsLog.ConfigMetricsReportList;
import com.android.os.StatsLog.StatsdStatsReport;
import java.util.List;

/**
 * Runs a load test for statsd.
@@ -191,13 +196,6 @@ public class LoadtestActivity extends Activity {
            }
        });

        findViewById(R.id.display_output).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                fetchAndDisplayData();
            }
        });

        mAlarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        mStatsManager = (StatsManager) getSystemService("stats");
        mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
@@ -239,6 +237,48 @@ public class LoadtestActivity extends Activity {
        super.onDestroy();
    }

    @Nullable
    public StatsdStatsReport getMetadata() {
        if (!statsdRunning()) {
            return null;
        }
        if (mStatsManager != null) {
            byte[] data = mStatsManager.getMetadata();
            if (data != null) {
                StatsdStatsReport report = null;
                boolean good = false;
                try {
                    return StatsdStatsReport.parseFrom(data);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    Log.d(TAG, "Bad StatsdStatsReport");
                }
            }
        }
        return null;
    }

    @Nullable
    public List<ConfigMetricsReport> getData() {
        if (!statsdRunning()) {
            return null;
        }
        if (mStatsManager != null) {
            byte[] data = mStatsManager.getData(ConfigFactory.CONFIG_NAME);
            if (data != null) {
                ConfigMetricsReportList reports = null;
                try {
                    reports = ConfigMetricsReportList.parseFrom(data);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    Log.d(TAG, "Invalid data");
                }
                if (reports != null) {
                    return reports.getReportsList();
                }
            }
        }
        return null;
    }

    private void onPerfAlarm() {
        if (mPerfData != null) {
            mPerfData.onAlarm(this);
@@ -285,6 +325,9 @@ public class LoadtestActivity extends Activity {
        // Prepare to push a sequence of atoms to logd.
        mPusher = new SequencePusher(mBurst, mPlacebo);

        // Force a data flush by requesting data.
        getData();

        // Create a config and push it to statsd.
        if (!setConfig(mFactory.getConfig(mReplication, mBucketMins * 60 * 1000, mPlacebo))) {
            return;
@@ -355,42 +398,6 @@ public class LoadtestActivity extends Activity {
        mPlaceboCheckBox.setEnabled(!mStarted);
    }

    private void fetchAndDisplayData() {
        if (!statsdRunning()) {
            return;
        }
        if (mStatsManager != null) {
            byte[] data = mStatsManager.getData(ConfigFactory.CONFIG_NAME);
            if (data != null) {
                displayData(data);
            } else {
                mReportText.setText("Failed to pull data");
            }
        }
    }

    private void displayData(byte[] data) {
        com.android.os.StatsLog.ConfigMetricsReportList reports = null;
        boolean good = false;
        if (data != null) {
            try {
                reports = com.android.os.StatsLog.ConfigMetricsReportList.parseFrom(data);
                good = true;
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                // display it in the text view.
            }
        }
        int size = data == null ? 0 : data.length;
        StringBuilder sb = new StringBuilder();
        sb.append(good ? "Proto parsing OK!" : "Proto parsing Error!");
        sb.append(" size:").append(size).append("\n");

        if (good && reports != null) {
            DisplayProtoUtils.displayLogReport(sb, reports);
            mReportText.setText(sb.toString());
        }
    }

    private boolean statsdRunning() {
        if (IStatsManager.Stub.asInterface(ServiceManager.getService("stats")) == null) {
            Log.d(TAG, "Statsd not running");
+0 −1
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ public class MemoryDataRecorder extends PerfDataRecorder {

    @Override
    public void onAlarm(Context context) {
      Log.d(TAG, "GOT ALARM IN MEM");
        runDumpsysStats(context, DUMP_FILENAME, "meminfo");
        readDumpData(context, DUMP_FILENAME, new MemInfoParser(mStartTimeMillis), mSb);
    }
Loading