summaryrefslogtreecommitdiffstats
path: root/runtime/reflection.h
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2015-04-24 16:55:16 -0700
committerAndreas Gampe <agampe@google.com>2015-04-25 22:08:16 +0000
commitf36cb5f65cb150151aa40b23937e2b0ad75cc546 (patch)
tree25365c69a089bc491a4b070ee3403be964cfc606 /runtime/reflection.h
parent33984b4d6b79b2d65258e69506e5669be704db82 (diff)
downloadart-f36cb5f65cb150151aa40b23937e2b0ad75cc546.zip
art-f36cb5f65cb150151aa40b23937e2b0ad75cc546.tar.gz
art-f36cb5f65cb150151aa40b23937e2b0ad75cc546.tar.bz2
Move Class.newInstance to native
Avoids 1 allocation and several JNI transitions. Before: Class_classNewInstance: 4462.39 ns; σ=39.42 ns @ 3 trials After: Class_classNewInstance: 1073.39 ns; σ=24.14 ns @ 10 trials Bug: 20269715 Bug: 20566996 Change-Id: Icd52155ce79a978a4d869855bfdfd7735abd8187
Diffstat (limited to 'runtime/reflection.h')
-rw-r--r--runtime/reflection.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/runtime/reflection.h b/runtime/reflection.h
index c63f858..6305d68 100644
--- a/runtime/reflection.h
+++ b/runtime/reflection.h
@@ -77,6 +77,15 @@ bool VerifyAccess(Thread* self, mirror::Object* obj, mirror::Class* declaring_cl
uint32_t access_flags, mirror::Class** calling_class, size_t num_frames)
SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
+// This version takes a known calling class.
+bool VerifyAccess(Thread* self, mirror::Object* obj, mirror::Class* declaring_class,
+ uint32_t access_flags, mirror::Class* calling_class)
+ SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
+
+// Get the calling class by using a stack visitor, may return null for unattached native threads.
+mirror::Class* GetCallingClass(Thread* self, size_t num_frames)
+ SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
+
void InvalidReceiverError(mirror::Object* o, mirror::Class* c)
SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);