Merge "Rename ZoneInfoDB -> ZoneInfoDb"
diff --git a/libart/src/main/java/dalvik/system/VMRuntime.java b/libart/src/main/java/dalvik/system/VMRuntime.java
index a97d7fc..6171cb6 100644
--- a/libart/src/main/java/dalvik/system/VMRuntime.java
+++ b/libart/src/main/java/dalvik/system/VMRuntime.java
@@ -475,12 +475,6 @@
     public native void clampGrowthLimit();
 
     /**
-     * Returns true if either a Java debugger or native debugger is active.
-     */
-    @FastNative
-    public native boolean isDebuggerActive();
-
-    /**
      * Returns true if native debugging is on.
      */
     @libcore.api.CorePlatformApi
diff --git a/libart/src/main/java/java/lang/Daemons.java b/libart/src/main/java/java/lang/Daemons.java
index 183a588..568614f 100644
--- a/libart/src/main/java/java/lang/Daemons.java
+++ b/libart/src/main/java/java/lang/Daemons.java
@@ -29,6 +29,7 @@
 import libcore.util.EmptyArray;
 
 import dalvik.system.VMRuntime;
+import dalvik.system.VMDebug;
 
 /**
  * Calls Object.finalize() on objects in the finalizer reference queue. The VM
@@ -322,7 +323,7 @@
                     continue;
                 }
                 final Object finalizing = waitForFinalization();
-                if (finalizing != null && !VMRuntime.getRuntime().isDebuggerActive()) {
+                if (finalizing != null && !VMDebug.isDebuggerConnected()) {
                     finalizerTimedOut(finalizing);
                     break;
                 }
diff --git a/metrictests/memory/apps/AndroidManifest.xml b/metrictests/memory/apps/AndroidManifest.xml
index a8856aa..a4b3488 100644
--- a/metrictests/memory/apps/AndroidManifest.xml
+++ b/metrictests/memory/apps/AndroidManifest.xml
@@ -18,7 +18,9 @@
     package="libcore.heapdumper">
 
     <uses-sdk android:minSdkVersion="19" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
 
     <instrumentation
             android:name="libcore.heapdumper.HeapDumpInstrumentation"
diff --git a/metrictests/memory/apps/src/libcore/heapdumper/Actions.java b/metrictests/memory/apps/src/libcore/heapdumper/Actions.java
index e8b56f1..e5ef4ba 100644
--- a/metrictests/memory/apps/src/libcore/heapdumper/Actions.java
+++ b/metrictests/memory/apps/src/libcore/heapdumper/Actions.java
@@ -19,6 +19,8 @@
 import java.text.Collator;
 import java.util.Arrays;
 import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * An enumeration of actions for which we'd like to measure the effect on the post-GC heap.
@@ -65,6 +67,33 @@
         }
     },
 
+    REGEX {
+        @Override
+        public void run() {
+            final String sequence = "foo 123 bar baz";
+            Pattern p = Pattern.compile("foo (\\d+) bar (\\w+)");
+            Matcher m = p.matcher(sequence);
+
+            boolean found = m.find();
+            boolean matches = m.matches();
+            int groups = m.groupCount();
+            String first = m.group(1);
+            String second = m.group(2);
+            boolean hitEnd = m.hitEnd();
+
+            // Set region to prefix of the original sequence
+            m.region(0, "foo 123".length());
+            boolean matchesPrefix = m.lookingAt();
+            boolean requireEnd = m.requireEnd();
+
+            m.useTransparentBounds(true);
+            boolean matchesPrefixTransparentBounds = m.lookingAt();
+
+            m.useAnchoringBounds(true);
+            boolean matchesPrefixAnchoringBounds = m.lookingAt();
+        }
+    }
+
     ;
 
     private static void useCollatorForLocale(Locale locale) {
diff --git a/metrictests/memory/host/src/libcore/heapmetrics/LibcoreHeapMetricsTest.java b/metrictests/memory/host/src/libcore/heapmetrics/LibcoreHeapMetricsTest.java
index 5340d90..2231614 100644
--- a/metrictests/memory/host/src/libcore/heapmetrics/LibcoreHeapMetricsTest.java
+++ b/metrictests/memory/host/src/libcore/heapmetrics/LibcoreHeapMetricsTest.java
@@ -103,6 +103,12 @@
         recordBeforeAndAfterAppHeapMetrics(result.getBeforeDump(), result.getAfterDump());
     }
 
+    @Test
+    public void measureRegexes() throws Exception {
+        MetricsRunner.Result result = metricsRunner.runAllInstrumentations("REGEX");
+        recordBeforeAndAfterAppHeapMetrics(result.getBeforeDump(), result.getAfterDump());
+    }
+
     private void recordHeapMetrics(AhatSnapshot dump, String metricPrefix, String heapName) {
         AhatHeap heap = dump.getHeap(heapName);
         recordSizeMetric(metricPrefix, heap.getSize());
diff --git a/metrictests/memory/host/src/libcore/heapmetrics/MetricsRunner.java b/metrictests/memory/host/src/libcore/heapmetrics/MetricsRunner.java
index c3f9e0d..00d5554 100644
--- a/metrictests/memory/host/src/libcore/heapmetrics/MetricsRunner.java
+++ b/metrictests/memory/host/src/libcore/heapmetrics/MetricsRunner.java
@@ -155,7 +155,7 @@
             String action, String relativeDirectoryName, String deviceDirectoryName, String apk)
             throws DeviceNotAvailableException, IOException {
         String command = String.format(
-                "am instrument -w -e dumpdir %s -e action %s  %s",
+                "am instrument --no-isolated-storage -w -e dumpdir %s -e action %s  %s",
                 relativeDirectoryName, action, apk);
         testDevice.executeShellCommand(command);
         checkForErrorFile(deviceDirectoryName);
diff --git a/ojluni/src/main/java/java/net/NetworkInterface.java b/ojluni/src/main/java/java/net/NetworkInterface.java
index eab09ab..673a1d2 100644
--- a/ojluni/src/main/java/java/net/NetworkInterface.java
+++ b/ojluni/src/main/java/java/net/NetworkInterface.java
@@ -37,9 +37,6 @@
 import java.util.Map;
 import java.util.NoSuchElementException;
 
-import android.compat.annotation.ChangeId;
-import android.compat.Compatibility;
-import android.system.Os;
 import android.system.StructIfaddrs;
 import libcore.io.IoUtils;
 import libcore.io.Libcore;
@@ -61,21 +58,6 @@
  * @since 1.4
  */
 public final class NetworkInterface {
-    // BEGIN Android-added: Return anonymized device address to non-system processes.
-    /**
-     * Gates whether calls to {@link #getHardwareAddress()} made by non-system processes
-     * to return the actual MAC address (pre-change behavior) or an anonymized MAC address
-     * (post-change behavior). Future versions of Android will enforce the post-change
-     * behavior through SELinux.
-     */
-    @ChangeId
-    static final long ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID = 141455849L;
-    // This is used instead of the own device MAC.
-    private static final byte[] ANONYMIZED_DEVICE_ADDRESS = {0x02, 0x00, 0x00, 0x00, 0x00, 0x00};
-    // First UID of non-system applications. See {@code android.os.Process.FIRST_APPLICATION_UID}.
-    private static final int FIRST_APPLICATION_UID = 10000;
-    // END Android-added: Return anonymized device address to non-system processes.
-
     private String name;
     private String displayName;
     private int index;
@@ -569,23 +551,8 @@
         if (ni == null) {
             throw new SocketException("NetworkInterface doesn't exist anymore");
         }
+        return ni.hardwareAddr;
         // END Android-changed: Fix upstream not returning link-down interfaces. http://b/26238832
-        // BEGIN Android-changed: Return anonymized device address to non-system processes.
-        if (!Compatibility.isChangeEnabled(ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID)) {
-            return ni.hardwareAddr;
-        } else {
-            if (ni.hardwareAddr == null) {
-                // MAC address does not exist or is not accessible.
-                return null;
-            }
-            if (Os.getuid() < FIRST_APPLICATION_UID) {
-                // This is a system process. Return the actual MAC address.
-                return ni.hardwareAddr;
-            } else {
-                return ANONYMIZED_DEVICE_ADDRESS;
-            }
-        }
-        // END Android-changed: Return anonymized device address to non-system processes.
     }
 
     /**