Fix issue #2176944: Need API so browser, others can determine memory size of device

Change-Id: I65d91cdb70df91b67fe84297dd6a94d26a785131
diff --git a/api/current.xml b/api/current.xml
index f4d81c7..b72fea0 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -17299,6 +17299,17 @@
  visibility="public"
 >
 </method>
+<method name="getMemoryClass"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getMemoryInfo"
  return="void"
  abstract="false"
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index be89ee6..d709deb 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -27,6 +27,7 @@
 import android.os.Handler;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.os.SystemProperties;
 import android.text.TextUtils;
 import java.util.List;
 
@@ -47,6 +48,26 @@
     }
 
     /**
+     * Return the approximate per-application memory class of the current
+     * device.  This gives you an idea of how hard a memory limit you should
+     * impose on your application to let the overall system work best.  The
+     * returned value is in megabytes; the baseline Android memory class is
+     * 16 (which happens to be the Java heap limit of those devices); some
+     * device with more memory may return 24 or even higher numbers.
+     */
+    public int getMemoryClass() {
+        return staticGetMemoryClass();
+    }
+    
+    /** @hide */
+    static public int staticGetMemoryClass() {
+        // Really brain dead right now -- just take this from the configured
+        // vm heap size, and assume it is in megabytes and thus ends with "m".
+        String vmHeapSize = SystemProperties.get("dalvik.vm.heapsize", "16m");
+        return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1));
+    }
+    
+    /**
      * Information you can retrieve about tasks that the user has most recently
      * started or visited.
      */
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 3460d3a..e1e8bea 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -1436,6 +1436,8 @@
             mSimpleProcessManagement = true;
         }
 
+        Log.i(TAG, "Memory class: " + ActivityManager.staticGetMemoryClass());
+        
         MY_PID = Process.myPid();
         
         File dataDir = Environment.getDataDirectory();