diff options
| author | Hiroshi Yamauchi <yamauchi@google.com> | 2013-09-10 16:24:21 -0700 |
|---|---|---|
| committer | Hiroshi Yamauchi <yamauchi@google.com> | 2013-09-11 15:38:23 -0700 |
| commit | 967a0adf8b93a23d2a8fef82e06bd913db94ac19 (patch) | |
| tree | 35b7fbf6eb1899736213e57e11c85d16c1b4853e /runtime/mirror/array.cc | |
| parent | af3994db1b42929666b6a50c3c4b237a25c99951 (diff) | |
| download | art-967a0adf8b93a23d2a8fef82e06bd913db94ac19.tar.gz art-967a0adf8b93a23d2a8fef82e06bd913db94ac19.tar.bz2 art-967a0adf8b93a23d2a8fef82e06bd913db94ac19.zip | |
More allocation code optimizations.
- Inline Class::AllocObject() and Array::Alloc().
- Inline some short Mutex functions and add LIKELY/UNLIKELY to some
Mutex functions.
- This change improves the Ritz MemAllocTest by ~6% on Nexus 4 and
~10% on host.
Bug: 9986565
Change-Id: I1606c74ddb21676cbc1de1a40e9b076fc23eaea4
Diffstat (limited to 'runtime/mirror/array.cc')
| -rw-r--r-- | runtime/mirror/array.cc | 33 |
1 files changed, 0 insertions, 33 deletions
diff --git a/runtime/mirror/array.cc b/runtime/mirror/array.cc index 88cd309eeb..020085dbf0 100644 --- a/runtime/mirror/array.cc +++ b/runtime/mirror/array.cc @@ -32,39 +32,6 @@ namespace art { namespace mirror { -Array* Array::Alloc(Thread* self, Class* array_class, int32_t component_count, - size_t component_size) { - DCHECK(array_class != NULL); - DCHECK_GE(component_count, 0); - DCHECK(array_class->IsArrayClass()); - - size_t header_size = sizeof(Object) + (component_size == sizeof(int64_t) ? 8 : 4); - size_t data_size = component_count * component_size; - size_t size = header_size + data_size; - - // Check for overflow and throw OutOfMemoryError if this was an unreasonable request. - size_t component_shift = sizeof(size_t) * 8 - 1 - CLZ(component_size); - if (UNLIKELY(data_size >> component_shift != size_t(component_count) || size < data_size)) { - self->ThrowOutOfMemoryError(StringPrintf("%s of length %d would overflow", - PrettyDescriptor(array_class).c_str(), - component_count).c_str()); - return NULL; - } - - gc::Heap* heap = Runtime::Current()->GetHeap(); - Array* array = down_cast<Array*>(heap->AllocObject(self, array_class, size)); - if (array != NULL) { - DCHECK(array->IsArrayInstance()); - array->SetLength(component_count); - } - return array; -} - -Array* Array::Alloc(Thread* self, Class* array_class, int32_t component_count) { - DCHECK(array_class->IsArrayClass()); - return Alloc(self, array_class, component_count, array_class->GetComponentSize()); -} - // Create a multi-dimensional array of Objects or primitive types. // // We have to generate the names for X[], X[][], X[][][], and so on. The |
