Add a few GC-flexing microbenchmark tests

Added ObjectGc and FinalizingGc to stress single-object allocation and
collection with/without the presence of finalizers.

Also added GcOp() to the menu of available single-shot tests.

Change-Id: I36d3254dfe2e97e504f9e4f77c8addda98ab4f4b
diff --git a/tests/FrameworkPerf/src/com/android/frameworkperf/TestService.java b/tests/FrameworkPerf/src/com/android/frameworkperf/TestService.java
index 3d939bd..8cf1ac2 100644
--- a/tests/FrameworkPerf/src/com/android/frameworkperf/TestService.java
+++ b/tests/FrameworkPerf/src/com/android/frameworkperf/TestService.java
@@ -33,6 +33,7 @@
 import android.content.res.XmlResourceParser;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.graphics.Paint;
 import android.os.Bundle;
 import android.os.FileUtils;
 import android.os.Handler;
@@ -64,6 +65,9 @@
             new MethodCallOp(), new ReadFileOp(),
             new SchedulerOp(), new SchedulerOp(),
             new GcOp(), new NoOp(),
+            new ObjectGcOp(), new NoOp(),
+            new FinalizingGcOp(), new NoOp(),
+            new PaintGcOp(), new NoOp(),
             new IpcOp(), new NoOp(),
             new IpcOp(), new CpuOp(),
             new IpcOp(), new SchedulerOp(),
@@ -111,6 +115,10 @@
             new CpuOp(),
             new SchedulerOp(),
             new MethodCallOp(),
+            new GcOp(),
+            new ObjectGcOp(),
+            new FinalizingGcOp(),
+            new PaintGcOp(),
             new IpcOp(),
             new CreateFileOp(),
             new CreateWriteFileOp(),
@@ -467,6 +475,47 @@
         }
     }
 
+    static class ObjectGcOp extends Op {
+        ObjectGcOp() {
+            super("ObjectGc", "Run garbage collector with simple objects");
+        }
+
+        boolean onRun() {
+            Object obj = new Object();
+            return true;
+        }
+    }
+
+    static class FinalizingGcOp extends Op {
+        class Finalizable {
+            Finalizable() {}
+            @Override
+            protected void finalize() throws Throwable {
+                super.finalize();
+            }
+        }
+
+        FinalizingGcOp() {
+            super("FinalizingGc", "Run garbage collector with finalizable objects");
+        }
+
+        boolean onRun() {
+            Finalizable obj = new Finalizable();
+            return true;
+        }
+    }
+
+    static class PaintGcOp extends Op {
+        PaintGcOp() {
+            super("PaintGc", "Run garbage collector with Paint objects");
+        }
+
+        boolean onRun() {
+            Paint p = new Paint();
+            return true;
+        }
+    }
+
     static class MethodCallOp extends Op {
         MethodCallOp() {
             super("MethodCall", "Method call");