bb18a03c44d99b3cae232d445d56e80d8388cca9 |
|
23-Mar-2016 |
Andreas Gampe <agampe@google.com> |
ART: Allow array-ness for unresolved merge types In case component types aren't resolvable, array types won't be either. They then may be merged. The merge is still potentially an array type. Ensure that merging an unresolved array type with a primitive array type or a non-array type will be resolved to java.lang.Object. Added tests. Bug: 27799205 Change-Id: I9beff75318814dddd842abd64ef9a5d2644d801e
|
705ad49f353d3f90d8b63625aca2c2035bacdbef |
|
21-Sep-2015 |
Alex Light <allight@google.com> |
Support directly invoking interface default methods With the Java 8 Language one is allowed to directly call default interface methods of interfaces one (directly) implements through the use of the super keyword. We support this behavior through the invoke-super opcode with the target being an interface. We add 3 tests for this behavior. Currently only supports slow-path interpreter. Invoke-super is currently extremely slow. Bug: 24618811 Change-Id: I7e06e17326f7dbae0116bd7dfefca151f0092bd2
|
de40d478930d0889a2aea5cbf58aa63da24e5dfa |
|
16-Oct-2015 |
Mathieu Chartier <mathieuc@google.com> |
Use arenas for the verifier Improvements are from using arenas for verifier. The things that were moved into arenas are register lines, reg types, and reg type descriptors. Also some minor cleanup. Fixed double space formatting error in string piece. ======================================== Before: ======================================= compile GmsCore 50x on host -j1: real 3m5.510s user 2m48.139s sys 0m11.753s 50 random APKs: real 1m18.157s user 1m8.167s sys 0m8.071s RAM (GmsCore): (threads: 1) arena alloc=0B java alloc=27MB native alloc=64MB free=792KB (threads: 4) arena alloc=0B java alloc=27MB native alloc=64MB free=397KB Perf: ============================= After: ============================= compile GmsCore 50x on host -j1: real 2m31.455s user 2m14.784s sys 0m10.888s 50 random APKs: Speed up from arena allocating: real 1m12.094s user 1m2.325s sys 0m7.872s Speed up from areans + CreateFindClassDefIndex + unordered_map for DexFileVerifier. real 1m8.654s user 0m58.955s sys 0m7.777s RAM (GmsCore): (threads: 1) arena alloc=1049KB java alloc=27MB native alloc=65MB free=538KB (threads: 4) arena alloc=4MB java alloc=27MB native alloc=69MB free=650KB Perf on host key results: _int_malloc: 3.60% -> 1.39% malloc: 1.48% -> 0.65% _int_free: 1.59% -> 0.61% RegTypeCache::FromClass: 1.47% -> 0.86% malloc_consolidate: 0.89% -> 0.63% Real speed up is ~22% on GmsCore, ~14% on the set of 60 APKs. Bug: 10921004 Change-Id: If13d4ab4284a176f93a26a412549b6b1149dfb16
|
f695a009725c8c840d916d01c14998f5c5f816d2 |
|
07-Aug-2015 |
Andreas Gampe <agampe@google.com> |
ART: Change UnresolvedMergedType internal representation Squashed cherry-picks: * 067f1ed7816cf4eb5d6258ca31b387ddb2073ab7 * 750f7c2827318f6d07620f2ef0321218ea4d8670 * 2f90b3415aadc2587d26c767c6bfb235797119a8 * 2ea7b70b2347969f3735bd0ec1b462bd6d2ff1bd Bug: 22881413
|
750f7c2827318f6d07620f2ef0321218ea4d8670 |
|
06-Aug-2015 |
Andreas Gampe <agampe@google.com> |
ART: Change UnresolvedMergedType internal representation Use a BitVector instead of the tree representation. This avoids flattening the components and other instances. Bug: 22881413 Change-Id: Ibf7cfb54443affeb1753bf114c0f306125391c62
|
90443477f9a0061581c420775ce3b7eeae7468bc |
|
17-Jul-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move to newer clang annotations Also enable -Wthread-safety-negative. Changes: Switch to capabilities and negative capabilities. Future work: Use capabilities to implement uninterruptible annotations to work with AssertNoThreadSuspension. Bug: 20072211 Change-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33
|
2cebb24bfc3247d3e9be138a3350106737455918 |
|
22-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Replace NULL with nullptr Also fixed some lines that were too long, and a few other minor details. Change-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb
|
bb87e0f1a52de656bc77cb01cb887e51a0e5198b |
|
03-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Refactor and improve GC root handling Changed GcRoot to use compressed references. Changed root visiting to use virtual functions instead of function pointers. Changed root visting interface to be an array of roots instead of a single root at a time. Added buffered root marking helper to avoid dispatch overhead. Root marking seems a bit faster on EvaluateAndApplyChanges due to batch marking. Pause times unaffected. Mips64 is untested but might work, maybe. Before: MarkConcurrentRoots: Sum: 67.678ms 99% C.I. 2us-664.999us Avg: 161.138us Max: 671us After: MarkConcurrentRoots: Sum: 54.806ms 99% C.I. 2us-499.986us Avg: 136.333us Max: 602us Bug: 19264997 Change-Id: I0a71ebb5928f205b9b3f7945b25db6489d5657ca
|
16f149c2cb43a14d8f33d7d0fa36cd784e900f07 |
|
23-Mar-2015 |
Andreas Gampe <agampe@google.com> |
ART: Change RETURN_OBJECT verification for arrays Arrays appear to be valid (as according to spec), even if their components are erroneous. If a component is erroneous, it may not have loaded superclass or interface information, and so fail a direct check for assignability. Add a cutout that checks whether the declared return-type or the actual return-type are arrays with erroneous components (and if so, have the same 'depth'). In that case, generate a soft instead of a hard error. Also includes a fix to DumpClass. Bug: 19683465 Change-Id: Ie73de03adeb0af7e939370d7363684fe125d7994
|
12d625f87bcd6c4059a205bb39007a255f57f382 |
|
13-Mar-2015 |
Mathieu Chartier <mathieuc@google.com> |
Change method verifiers to be thread local roots Bug: 10921004 Change-Id: I3a1425d76cd380587ba67ef6d5ec1227564e55bf
|
8e1f4f8f848f2dbb36265a019310498a61cd674d |
|
05-Nov-2014 |
Ian Rogers <irogers@google.com> |
Avoid abort in malformed dex code. Don't allow a perceived double monitor-enter on a register to abort libartd. Allow expected verifier errors in the smali tests. Tidy includes in the method verifier. Bug: 17978759 Change-Id: Ic44924c788cd2334f91a047fb41b459b89a1843b
|
10f0ca2844e82a3319a12246af913e14f93194ef |
|
23-Sep-2014 |
Logan Chien <logan.chien@mediatek.com> |
Fix "const-class v0, I" for libartd.so This CL fixes the verification of "const-class v0, I" by adding HasClassVirtual() to PrimitiveType. Without this CL, the DCHECK for HasClass() in RegType::GetClass() will raise an assertion failure, since the verifier is trying to get the class object for the dex cache. This issue can be reproduced by running the CTS dot.junit.opcodes.const_class.Main_testN2 with libartd.so. Change-Id: I605a3fcf7dd9d63e1f739fbb3153d0367911bb3e
|
7b078e8c04f3e1451dbdd18543c8b9692b5b067e |
|
10-Sep-2014 |
Ian Rogers <irogers@google.com> |
Compile time performance improvements focusing on interpret-only. Reduce virtual method dispatch in the method verifier and make more code inline-able. Add a StringPiece with const char* equality operator to avoid redundant StringPieces and strlens. Remove back link from register line to verifier and pass as argument to reduce size of RegisterLine. Remove instruction length from instruction flags and compute from the instruction, again to reduce size. Add suspend checks to resolve and verify to allow for more easy monitor inflation and reduce contention on Locks::thread_list_suspend_thread_lock_. Change ThrowEarlierClassFailure to throw pre-allocated exception. Avoid calls to Thread::Current() by passing self. Template specialize IsValidClassName. Make ANR reporting with SIGQUIT run using checkpoints rather than suspending all threads. This makes the stack/lock analysis less lock error prone. Extra Barrier assertions and condition variable time out is now returned as a boolean both from Barrier and ConditionVariable::Wait. 2 threaded host x86-64 interpret-only numbers from 341 samples: Before change: Avg 176.137ms 99% CI 3.468ms to 1060.770ms After change: Avg 139.163% 99% CI 3.027ms to 838.257ms Reduction in average compile time after change is 20.9%. Slow-down without change is 26.5%. Bug: 17471626 - Fix bug where RegTypeCache::JavaLangObject/String/Class/Throwable could return unresolved type when class loading is disabled. Bug: 17398101 Change-Id: Id59ce3cc520701c6ecf612f7152498107bc40684
|
5441091dc78c64a683cb336ff27e80c364bc2cd3 |
|
11-Sep-2014 |
Ian Rogers <irogers@google.com> |
Re-add read barrier to roots in the verifier. Fixes read-barriers but keeps verifier API invariants. Based on: https://android-review.googlesource.com/#/c/102962 Bug: 17398101 Change-Id: Iad986784a5d735ccb3214362ccfc7ef69bc02c57
|
d8f69b086baf6717ce949d1c4de90d73b91083b0 |
|
10-Sep-2014 |
Ian Rogers <irogers@google.com> |
Revert "Add read barriers for the roots in the verifier." This reverts commit 7da9586b559290e1c16207c6513ffe485de61655. Bug: 17398101 Change-Id: I1d6110fdf0d3a3c9241c8e7e7f4b85a298f9dd8e
|
68d8b42ddec39ec0174162d90d4abaa004d1983e |
|
17-Jul-2014 |
Ian Rogers <irogers@google.com> |
Wire up check JNI force copy mode. Increase check JNI checks. Break apart jni_internal.h in to jni_env_ext.h and java_vm_ext.h. Fix the abuse of ScopedObjectAccess/annotalysis by ScopedCheck in the case of VM routines. Make class loader override and shared library class loader JNI global references rather than mirror pointers. Clean-ups to native bridge. Change-Id: If7c6110b5aade7a402bfb67534af86a7b2cdeb55
|
7da9586b559290e1c16207c6513ffe485de61655 |
|
30-Jul-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add read barriers for the roots in the verifier. Note: Because the roots (the class references in RegType objects) can be updated by the read barriers, a lot of uses of type "const RegType" were replaced with "RegType". Bug: 12687968 Change-Id: I6cf37a87f352938d43fb51560a8d927ada104f50
|
ebbdd87cbb57e45da341fbf7325406e982810c10 |
|
08-Jul-2014 |
Ian Rogers <irogers@google.com> |
Only allow instance-of to improve knowledge of a type for downcasts. Previous "not upcast" test could improve a type to an impossible type that following a merge back with the original register would lead to conflict (and subsequent verifier errors). Modify UpdateRegisters so that the work line will be updated if merging causes changes in the fall-through case. Bug: 15808277 Issue: https://code.google.com/p/android/issues/detail?id=72093 Change-Id: Ib16cae8506246177e902825af036d5a397ad0dac
|
576ca0cd692c0b6ae70e776de91015b8ff000a08 |
|
07-Jun-2014 |
Ian Rogers <irogers@google.com> |
Reduce header files including header files. Main focus is getting heap.h out of runtime.h. Change-Id: I8d13dce8512816db2820a27b24f5866cc871a04b
|
83c8ee000d525017ead8753fce6bc1020249b96a |
|
28-Jan-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add root types and thread id to root visiting. Enables us to pass the root type and thread id to hprof. Bug: 12680863 Change-Id: I6a0f1f9e3aa8f9b4033d695818ae7ca3460d67cb
|
ef7d42fca18c16fbaf103822ad16f23246e2905d |
|
06-Jan-2014 |
Ian Rogers <irogers@google.com> |
Object model changes to support 64bit. Modify mirror objects so that references between them use an ObjectReference value type rather than an Object* so that functionality to compress larger references can be captured in the ObjectRefererence implementation. ObjectReferences are 32bit and all other aspects of object layout remain as they are currently. Expand fields in objects holding pointers so they can hold 64bit pointers. Its expected the size of these will come down by improving where we hold compiler meta-data. Stub out x86_64 architecture specific runtime implementation. Modify OutputStream so that reads and writes are of unsigned quantities. Make the use of portable or quick code more explicit. Templatize AtomicInteger to support more than just int32_t as a type. Add missing, and fix issues relating to, missing annotalysis information on the mutator lock. Refactor and share implementations for array copy between System and uses elsewhere in the runtime. Fix numerous 64bit build issues. Change-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822
|
e6da9af8dfe0a3e3fbc2be700554f6478380e7b9 |
|
16-Dec-2013 |
Mathieu Chartier <mathieuc@google.com> |
Background compaction support. When the process state changes to a state which does not perceives jank, we copy from the main free-list backed allocation space to the bump pointer space and enable the semispace allocator. When we transition back to foreground, we copy back to a free-list backed space. Create a seperate non-moving space which only holds non-movable objects. This enables us to quickly wipe the current alloc space (DlMalloc / RosAlloc) when we transition to background. Added multiple alloc space support to the sticky mark sweep GC. Added a -XX:BackgroundGC option which lets you specify which GC to use for background apps. Passing in -XX:BackgroundGC=SS makes the heap compact the heap for apps which do not perceive jank. Results: Simple background foreground test: 0. Reboot phone, unlock. 1. Open browser, click on home. 2. Open calculator, click on home. 3. Open calendar, click on home. 4. Open camera, click on home. 5. Open clock, click on home. 6. adb shell dumpsys meminfo PSS Normal ART: Sample 1: 88468 kB: Dalvik 3188 kB: Dalvik Other Sample 2: 81125 kB: Dalvik 3080 kB: Dalvik Other PSS Dalvik: Total PSS by category: Sample 1: 81033 kB: Dalvik 27787 kB: Dalvik Other Sample 2: 81901 kB: Dalvik 28869 kB: Dalvik Other PSS ART + Background Compaction: Sample 1: 71014 kB: Dalvik 1412 kB: Dalvik Other Sample 2: 73859 kB: Dalvik 1400 kB: Dalvik Other Dalvik other reduction can be explained by less deep allocation stacks / less live bitmaps / less dirty cards. TODO improvements: Recycle mem-maps which are unused in the current state. Not hardcode 64 MB capacity of non movable space (avoid returning linear alloc nightmares). Figure out ways to deal with low virtual address memory problems. Bug: 8981901 Change-Id: Ib235d03f45548ffc08a06b8ae57bf5bada49d6f3
|
c528dba35b5faece51ca658fc008b688f8b690ad |
|
26-Nov-2013 |
Mathieu Chartier <mathieuc@google.com> |
Enable moving classes. Slight reduction in Zygote size, memory savings are in the noise. Before: Zygote size: 8739224 After: Zygote size: 8733568 Fixed a bug where we didn't set the concurrent start bytes after switching the allocator from bump pointer to ROSAlloc in the zygote. This caused excessive memory usage. Added the method verifiers as roots to fix an issue caused by RegTypes holding a Class*. Added logic to clear card table in the SemiSpace collector, this reduces DalvikOther from ~2400k -> ~1760k when using the SemiSpace collector. Added a missing lock to the timing loggers which caused a rare one time crash in std::set. Bug: 11771255 Bug: 8499494 Bug: 10802951 Change-Id: I99d2b528cd51c1c5ed7012e3220b3aefded680ae
|
fc0e94bed3f88ed7e50854fd8dfaf5dcb345250f |
|
24-Sep-2013 |
Ian Rogers <irogers@google.com> |
StringPiece clean up. Profile guided clean up. Try to avoid creating StringPieces with the contents of a dex file where the length is known. Try to avoid RegTypeCache::FromDescriptor when there's a class available. Make ConstantType::ConstantValue inlinable. Saving of about 50ms from a 2 threaded ThinkFree compile on host. Change-Id: I47a12c3c76f46e2c9805be1c3a3e3870fe1f5d85
|
02e25119b15a6f619f17db99f5d05124a5807ff3 |
|
15-Aug-2013 |
Mathieu Chartier <mathieuc@google.com> |
Fix up TODO: c++0x, update cpplint. Needed to update cpplint to handle const auto. Fixed a few cpplint errors that were being missed before. Replaced most of the TODO c++0x with ranged based loops. Loops which do not have a descriptive container name have a concrete type instead of auto. Change-Id: Id7cc0f27030f56057c544e94277300b3f298c9c5
|
02c8cc6d1312a2b55533f02f6369dc7c94672f90 |
|
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fixing cpplint whitespace/blank_line, whitespace/end_of_line, whitespace/labels, whitespace/semicolon issues Change-Id: Ide4f8ea608338b3fed528de7582cfeb2011997b6
|
6f485c62b9cfce3ab71020c646ab9f48d9d29d6d |
|
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/indent issues Change-Id: I7c1647f0c39e1e065ca5820f9b79998691ba40b1
|
0cd7ec2dcd8d7ba30bf3ca420b40dac52849876c |
|
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/blank_line issues Change-Id: Ice937e95e23dd622c17054551d4ae4cebd0ef8a2
|
b1eba213afaf7fa6445de863ddc9680ab99762ea |
|
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/comma issues Change-Id: I456fc8d80371d6dfc07e6d109b7f478c25602b65
|
fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d |
|
17-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix multiple inclusion guards to match new pathnames Change-Id: Id7735be1d75bc315733b1773fba45c1deb8ace43
|
7940e44f4517de5e2634a7e07d58d0fb26160513 |
|
12-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Create separate Android.mk for main build targets The runtime, compiler, dex2oat, and oatdump now are in seperate trees to prevent dependency creep. They can now be individually built without rebuilding the rest of the art projects. dalvikvm and jdwpspy were already this way. Builds in the art directory should behave as before, building everything including tests. Change-Id: Ic6b1151e5ed0f823c3dd301afd2b13eb2d8feb81
|