diff options
author | Hiroshi Yamauchi <yamauchi@google.com> | 2014-09-25 11:46:46 -0700 |
---|---|---|
committer | Hiroshi Yamauchi <yamauchi@google.com> | 2014-09-25 15:53:54 -0700 |
commit | f0edfc355893d53d1104b05501c99ad5ccf305c4 (patch) | |
tree | 7e1fa49875759512f5d02b1c45435d3e3366b920 /runtime/interpreter/interpreter.cc | |
parent | 1ed5b27ee329208fd8ae22b8a9a61d708e2c1ffb (diff) | |
download | art-f0edfc355893d53d1104b05501c99ad5ccf305c4.tar.gz art-f0edfc355893d53d1104b05501c99ad5ccf305c4.tar.bz2 art-f0edfc355893d53d1104b05501c99ad5ccf305c4.zip |
Some optimizations for the array alloc path.
- Force Array::Alloc() to be inlined.
- Simplify the array size overflow check.
- Turn fill_usable into a template parameter.
- Remove a branch in Array::DataOffset() and avoid
Primitive::ComponentSize(), which has a switch, in the array alloc
path.
- Strength reductions in the array size computation by using component
size shifts instead of component sizes. Store component size shift
in the upper 16 bits of primitive_type field.
- Speedup: ~4% (3435->3284) in MemAllocTest on N4.
Bug: 9986565
Change-Id: I4b142ffac4ab8b5b915836f1660a949d6442344c
Diffstat (limited to 'runtime/interpreter/interpreter.cc')
-rw-r--r-- | runtime/interpreter/interpreter.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/runtime/interpreter/interpreter.cc b/runtime/interpreter/interpreter.cc index cd8cce06a..d2fcc644a 100644 --- a/runtime/interpreter/interpreter.cc +++ b/runtime/interpreter/interpreter.cc @@ -36,8 +36,8 @@ static void UnstartedRuntimeJni(Thread* self, ArtMethod* method, mirror::Class* array_class = runtime->GetClassLinker()->FindArrayClass(self, &element_class); DCHECK(array_class != nullptr); gc::AllocatorType allocator = runtime->GetHeap()->GetCurrentAllocator(); - result->SetL(mirror::Array::Alloc<true>(self, array_class, length, - array_class->GetComponentSize(), allocator, true)); + result->SetL(mirror::Array::Alloc<true, true>(self, array_class, length, + array_class->GetComponentSizeShift(), allocator)); } else if (name == "java.lang.ClassLoader dalvik.system.VMStack.getCallingClassLoader()") { result->SetL(NULL); } else if (name == "java.lang.Class dalvik.system.VMStack.getStackClass2()") { |