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

Commit 3711f2f0 authored by Michael Rosenfeld's avatar Michael Rosenfeld Committed by android-build-merger
Browse files

Merge "Add command line action sequencing."

am: 880c9acf

Change-Id: I81b31d950e0dca525fbfe9aa38c9c113eea7cec8
parents 7f12aa54 880c9acf
Loading
Loading
Loading
Loading
+56 −5
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.preload.classdataretrieval.jdwp.JDWPClassDataRetriever;
import com.android.preload.ui.IUI;
import com.android.preload.ui.IUI;
import com.android.preload.ui.SequenceUI;
import com.android.preload.ui.SequenceUI;
import com.android.preload.ui.SwingUI;
import com.android.preload.ui.SwingUI;

import java.io.File;
import java.io.File;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
@@ -42,6 +43,7 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.Iterator;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Map;
import java.util.NoSuchElementException;


import javax.swing.Action;
import javax.swing.Action;
import javax.swing.DefaultListModel;
import javax.swing.DefaultListModel;
@@ -89,6 +91,12 @@ public class Main {
            + "android.webkit.WebViewClassic\\$1$" + "|" + "java.lang.ProcessManager$" + "|"
            + "android.webkit.WebViewClassic\\$1$" + "|" + "java.lang.ProcessManager$" + "|"
            + "(.*\\$NoPreloadHolder$)";
            + "(.*\\$NoPreloadHolder$)";


    public final static String SCAN_ALL_CMD = "scan-all";
    public final static String SCAN_PACKAGE_CMD = "scan";
    public final static String COMPUTE_FILE_CMD = "comp";
    public final static String EXPORT_CMD = "export";
    public final static String IMPORT_CMD = "import";

    /**
    /**
     * @param args
     * @param args
     */
     */
@@ -148,13 +156,56 @@ public class Main {


        Iterator<String> it = Arrays.asList(args).iterator();
        Iterator<String> it = Arrays.asList(args).iterator();
        it.next();  // --seq
        it.next();  // --seq

        // Setup
        ui.choice("#" + it.next());  // Device.
        ui.choice("#" + it.next());  // Device.
        ui.confirmNo();              // Prepare: no.
        ui.confirmNo();              // Prepare: no.
        ui.action(ScanPackageAction.class);                 // Take hprof dump.
        // Actions
        ui.client("system_process");                        // Select system server.
        try {
        ui.action(ExportAction.class);                      // Export data.
            while (it.hasNext()) {
        ui.output(new File("/tmp/system_server.data"));     // Write to file.
                String op = it.next();
                // Operation: Scan a single package
                if (SCAN_PACKAGE_CMD.equals(op)) {
                    System.out.println("Scanning package.");
                    ui.action(ScanPackageAction.class);
                    ui.client(it.next());
                // Operation: Scan all packages
                } else if (SCAN_ALL_CMD.equals(op)) {
                    System.out.println("Scanning all packages.");
                    ui.action(ScanAllPackagesAction.class);
                // Operation: Export the output to a file
                } else if (EXPORT_CMD.equals(op)) {
                    System.out.println("Exporting data.");
                    ui.action(ExportAction.class);
                    ui.output(new File(it.next()));
                // Operation: Import the input from a file or directory
                } else if (IMPORT_CMD.equals(op)) {
                    System.out.println("Importing data.");
                    File file = new File(it.next());
                    if (!file.exists()) {
                        throw new RuntimeException(
                                String.format("File does not exist, %s.", file.getAbsolutePath()));
                    } else if (file.isFile()) {
                        ui.action(ImportAction.class);
                        ui.input(file);
                    } else if (file.isDirectory()) {
                        for (File content : file.listFiles()) {
                            ui.action(ImportAction.class);
                            ui.input(content);
                        }
                    }
                // Operation: Compute preloaded classes with specific threshold
                } else if (COMPUTE_FILE_CMD.equals(op)) {
                    System.out.println("Compute preloaded classes.");
                    ui.action(ComputeThresholdXAction.class);
                    ui.input(it.next());
                    ui.confirmYes();
                    ui.output(new File(it.next()));
                }
            }
        } catch (NoSuchElementException e) {
            System.out.println("Failed to parse action sequence correctly.");
            throw e;
        }


        return main;
        return main;
    }
    }