Add thread unsafe allocation methods to spaces.

Used by SS/GSS collectors since these run with mutators suspended and
only allocate from a single thread. Added AllocThreadUnsafe to
BumpPointerSpace and RosAllocSpace. Added AllocThreadUnsafe which uses
current runs as thread local runs for a thread unsafe allocation.
Added code to revoke current runs which are the same idx as thread
local runs.

Changed:
The number of thread local runs in each thread is now the the number
of thread local runs in RosAlloc instead of the number of size
brackets.

Total GC time / time on EvaluateAndApplyChanges.
TLAB SS:
Before: 36.7s / 7254
After: 16.1s / 4837

TLAB GSS:
Before: 6.9s / 3973
After: 5.7s / 3778

Bug: 8981901

Change-Id: Id1d264ade3799f431bf7ebbdcca6146aefbeb632
diff --git a/runtime/thread.h b/runtime/thread.h
index f869285..8c17082 100644
--- a/runtime/thread.h
+++ b/runtime/thread.h
@@ -29,6 +29,7 @@
 #include "entrypoints/jni/jni_entrypoints.h"
 #include "entrypoints/portable/portable_entrypoints.h"
 #include "entrypoints/quick/quick_entrypoints.h"
+#include "gc/allocator/rosalloc.h"
 #include "globals.h"
 #include "jvalue.h"
 #include "object_callbacks.h"
@@ -783,9 +784,6 @@
     return tlsPtr_.thread_local_objects;
   }
 
-  // ROS alloc TLS.
-  static constexpr size_t kRosAllocNumOfSizeBrackets = 34;
-
   void* GetRosAllocRun(size_t index) const {
     return tlsPtr_.rosalloc_runs[index];
   }
@@ -1060,12 +1058,8 @@
     byte* thread_local_end;
     size_t thread_local_objects;
 
-    // Thread-local rosalloc runs. There are 34 size brackets in rosalloc
-    // runs (RosAlloc::kNumOfSizeBrackets). We can't refer to the
-    // RosAlloc class due to a header file circular dependency issue.
-    // To compensate, we check that the two values match at RosAlloc
-    // initialization time.
-    void* rosalloc_runs[kRosAllocNumOfSizeBrackets];
+    // There are RosAlloc::kNumThreadLocalSizeBrackets thread-local size brackets per thread.
+    void* rosalloc_runs[gc::allocator::RosAlloc::kNumThreadLocalSizeBrackets];
 
     // Thread-local allocation stack data/routines.
     mirror::Object** thread_local_alloc_stack_top;