Don't allow negative GetFreeMemory.

The max allowed footprint is only updated after the GC. But we can
still allocate even if bytes_allocated > max_allowed_footprint_.
This means that we used to be able to get a negative value if
bytes_allocated > max_allowed_footprint_.

External bug:
https://code.google.com/p/android/issues/detail?id=72221

Change-Id: I4ef9a534e29211786e82cdcb2582c11ab37a348a
diff --git a/runtime/gc/heap.h b/runtime/gc/heap.h
index a34cd38..6d70a38 100644
--- a/runtime/gc/heap.h
+++ b/runtime/gc/heap.h
@@ -417,7 +417,10 @@
 
   // Implements java.lang.Runtime.freeMemory.
   size_t GetFreeMemory() const {
-    return max_allowed_footprint_ - num_bytes_allocated_.LoadSequentiallyConsistent();
+    size_t byte_allocated = num_bytes_allocated_.LoadSequentiallyConsistent();
+    // Make sure we don't get a negative number since the max allowed footprint is only updated
+    // after the GC. But we can still allocate even if bytes_allocated > max_allowed_footprint_.
+    return std::max(max_allowed_footprint_, byte_allocated) - byte_allocated;
   }
 
   // get the space that corresponds to an object's address. Current implementation searches all