summaryrefslogtreecommitdiff
path: root/runtime/mirror/object_array-alloc-inl.h
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2019-05-28 16:39:29 +0100
committer Vladimir Marko <vmarko@google.com> 2019-05-31 14:15:59 +0000
commit3068d582eff4552ff260d7966fcbdc93e17d0207 (patch)
treebc894a414070a06ea2a231fb98607b57b8c3b0cb /runtime/mirror/object_array-alloc-inl.h
parent991cd5cc16267b74e390f640eb441102062babb6 (diff)
Clean up creating handles from `this`.
Make these member functions static and take an additional parameter `Handle<.> h_this`. Callers mostly already have a Handle<> to pass, so we avoid an extra StackHandleScope. This pattern was already used for some functions. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing --interpreter Change-Id: I4f4478b0526bcb2f3c23305d3b3cc4a65fff9ff5
Diffstat (limited to 'runtime/mirror/object_array-alloc-inl.h')
-rw-r--r--runtime/mirror/object_array-alloc-inl.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/runtime/mirror/object_array-alloc-inl.h b/runtime/mirror/object_array-alloc-inl.h
index b417b62b11..594b0a6346 100644
--- a/runtime/mirror/object_array-alloc-inl.h
+++ b/runtime/mirror/object_array-alloc-inl.h
@@ -61,15 +61,15 @@ inline ObjPtr<ObjectArray<T>> ObjectArray<T>::Alloc(Thread* self,
}
template<class T>
-inline ObjPtr<ObjectArray<T>> ObjectArray<T>::CopyOf(Thread* self, int32_t new_length) {
+inline ObjPtr<ObjectArray<T>> ObjectArray<T>::CopyOf(Handle<ObjectArray<T>> h_this,
+ Thread* self,
+ int32_t new_length) {
DCHECK_GE(new_length, 0);
- // We may get copied by a compacting GC.
- StackHandleScope<1> hs(self);
- Handle<ObjectArray<T>> h_this(hs.NewHandle(this));
gc::Heap* heap = Runtime::Current()->GetHeap();
- gc::AllocatorType allocator_type = heap->IsMovableObject(this) ? heap->GetCurrentAllocator() :
- heap->GetCurrentNonMovingAllocator();
- ObjPtr<ObjectArray<T>> new_array = Alloc(self, GetClass(), new_length, allocator_type);
+ gc::AllocatorType allocator_type = heap->IsMovableObject(h_this.Get())
+ ? heap->GetCurrentAllocator()
+ : heap->GetCurrentNonMovingAllocator();
+ ObjPtr<ObjectArray<T>> new_array = Alloc(self, h_this->GetClass(), new_length, allocator_type);
if (LIKELY(new_array != nullptr)) {
new_array->AssignableMemcpy(0, h_this.Get(), 0, std::min(h_this->GetLength(), new_length));
}