63bc11efaac0c041e849ab401f9fc368631a00f5 |
|
18-Sep-2014 |
Ian Rogers <irogers@google.com> |
DO NOT MERGE. Only have a portable entrypoint in portable builds. Bug: 16214885 Change-Id: Iff7b7415efdbdabd7e6020e221a540f6a774c852
|
194116c836080de14245a3a7c4617d07b8abf8cf |
|
11-Sep-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add fast path to VMClassLoader.findLoadedClass VMClassLoader.findLoadedClass now calls FindClassInPathClassLoader as a fast path. Exclusive time results (trace view maps launch): Before: nativeFillInStackTrace 1.4% defineClassNative 1.2% findLoadedClass 0.2% After: nativeFillInStackTrace 0.5% defineClassNative 0.0% findLoadedClass 0.9% Bug: 16828525 Change-Id: I1bde48effcd28529778c00ec0fa0dda4e32026a3
|
df1532b9ba0cda2d00b78fbdef461f8a6cf8a737 |
|
11-Sep-2014 |
Andreas Gampe <agampe@google.com> |
ART: Correctly make methods preverified Bug: 16828525 Change-Id: I66756348b2aa50e41dacca59769b6810a91c73b0
|
be4e64303cc66bda0a12eaab835caa0bcfda3cd9 |
|
05-Sep-2014 |
Vladimir Marko <vmarko@google.com> |
Improve dex location canonicalization-related performance. Eagerly add canonical dex file locations to the OatFile's primary lookup map in Setup(). This moves the boot.oat work from every app startup to the zygote initialization. Since we always ended up initializing the canonical location map anyway due to the way that we're loading dex files, the lazy initialization didn't save anything. Clean up dex file name canonicalization to make sure we free() the memory returned by realpath() rather than using std::unique_ptr<> with the default deleter. Avoid some unnecessary duplicate OatDexFile lookups. Bug: 16828525 Bug: 17346103 (cherry picked from commit aa4497db59f1eeec954f2ba5da6d458fcdf9b3a4) Change-Id: Icc4b14ebe903282ca91ce24e33a6d7c75dff991c
|
ca0c8d3f81cdee58bd9a70c0fd26f79917dff3b5 |
|
30-Aug-2014 |
Ian Rogers <irogers@google.com> |
VisitClassesWithoutClassesLock isn't safe if classes move. Which they do, so avoid by doing an array allocation. Also, tidy member variables to the end of ClassLinker. Remove unnecessary mutable. Tidy and fix a locks required/excluded. Change-Id: I2404a9e7a1ea997d68ab1206f97d2a20dffbda06 (cherry picked from commit dbf3be0f133c0bdf454f637fee2452dbb5f7c027)
|
ca3459398018360d9968a52eebf727df085caf83 |
|
02-Sep-2014 |
Calin Juravle <calin@google.com> |
Avoid recomputing the dex checksum during class loading Thread the already computed checksum to VerifyOatAndDexFileChecksums and LoadMultiDexFilesFromOatFile to avoid recomputing it. Bug:17346103 Change-Id: Ifa0c1cad952853751e98cbb3c999631b9909a9f9
|
79cfc0e93e210e548b45459478a154168d2d8cc2 |
|
05-Jun-2014 |
Ian Rogers <irogers@google.com> |
Pre-allocate the NoClassDefFoundError to be thrown for boot classes. Bring over a Dalvik "optimization". Bug: 12804658 Bug: 16853450 Change-Id: I6419de7bd2ba18d91479cb52489104954f5c4524 (cherry picked from commit 63557459a4098294a9ff44d035241de2966047c0)
|
cc2f2393e69a9b1425bad1a89f41aaaf8c38f9e2 |
|
30-Aug-2014 |
Ian Rogers <irogers@google.com> |
Reduce and speed-up class def searches. Use the class linker for descriptor lookups from the compile driver so that dex caches are populated. Reduce the scope of functions for scanning class paths to just the class linker where they are performed. If we see more than a threshold number of find class def misses on a dex file lazily compute an index, so that future lookups are constant time (part of the collection code is taken from https://android-review.googlesource.com/#/c/103865/3). Note that we take a lazy approach so that we don't serialize on loading dex files, this avoids the reason the index was removed in 8b2c0b9abc3f520495f4387ea040132ba85cae69. Remove an implicit and unnecessary std::string creation for PrintableString. Single threaded interpret-only dex2oat performance is improved by roughly 10%. Bug: 16853450 Change-Id: Icf72df76b0a4328f2a24075e81f4ff267b9401f4 (cherry picked from commit 68b56858367e29461ae290fd797443a1ef6d8005)
|
5369c40f75fdcb1be7a7c06db212ce965c83a164 |
|
25-Aug-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add native memory accounting through custom allocator. Added a custom allocator that lets you pass in a special tag which specifices where the allocation came from. This is used when dumping. The performance overhead is low since each allocation only does a atomic add/sub for each allocation/free. The measurements are dumped to traces.txt during SIGQUIT. Example output: I/art (27274): AllocatorTagHeap active=120 max=120 total=168 I/art (27274): AllocatorTagMonitorList active=1572 max=6240 total=11724 I/art (27274): AllocatorTagClassTable active=185208 max=185208 total=268608 I/art (27274): AllocatorTagInternTable active=430368 max=430368 total=436080 I/art (27274): AllocatorTagMaps active=5616 max=6168 total=34392 I/art (27274): AllocatorTagLOS active=1024 max=1536 total=2044 I/art (27274): AllocatorTagSafeMap active=0 max=51936 total=533688 I/art (27274): AllocatorTagLOSMaps active=144 max=1248 total=5760 I/art (27274): AllocatorTagReferenceTable active=10944 max=11840 total=19136 I/art (27274): AllocatorTagHeapBitmap active=32 max=40 total=56 I/art (27274): AllocatorTagHeapBitmapLOS active=8 max=8 total=8 I/art (27274): AllocatorTagVerifier active=0 max=18844 total=1073156 I/art (27274): AllocatorTagModUnionCardSet active=5300 max=5920 total=56020 I/art (27274): AllocatorTagModUnionReferenceArray active=24864 max=24864 total=24864 I/art (27274): AllocatorTagJNILibrarires active=320 max=320 total=320 I/art (27274): AllocatorTagOatFile active=1400 max=1400 total=5852 Bug: 16238192 Change-Id: Ibb470ef2e9c9a24563bb46422d46a55799704d82
|
507e6180ad271eb719c67ce7394852c731d975a5 |
|
19-Aug-2014 |
Alex Light <allight@google.com> |
Support running without a boot image. Bug: 17000769 (cherry picked from commit 64ad14dbe2225441fb7734bf6d89358d96692eea) Change-Id: I6404d5050c8a2f4ee6e70d58532eb25ee9de248e
|
0a112bbbcd761c749c346bfec0ec39c1ef37a590 |
|
14-Aug-2014 |
Alex Light <allight@google.com> |
Make apps able to run with a failing patchoat Bug: 17000769 (cherry picked from commit 9dcc4572949f6a8231a1b4ed859676ba6f411726) Change-Id: I0a1a4dc7f5d4bb268530840302ecfb1555231e05
|
9c290012b7f505ae1943ab87236f775b97a46e2d |
|
22-Jul-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Execute an application even when dex2oat crashes. Bug: 17000769 (cherry picked from commit 4fcdc94d22a4608e355aa8df36240181149d10e8) Change-Id: Iccb1fec94fe64ce4c3097510952f275482b86aa9
|
345c4b19758703793ed31024cfb79940e2c63b75 |
|
18-Jul-2014 |
Alex Light <allight@google.com> |
Make system use patchoat to relocate during runtime. Change dalvik_system_DexFile.cc so that isDexOptNeededInternal will be able to indicate that a patchoat is required. Change default of relocate option to be on. Bug: 15358152 (cherry picked from commit 6e183f2e973a20f2eaca135c240908e1bf98c5d0) Change-Id: Ib21f4f41b6cbf18094e3ca1a30d65a3b197b71b0
|
6e183f2e973a20f2eaca135c240908e1bf98c5d0 |
|
18-Jul-2014 |
Alex Light <allight@google.com> |
Make system use patchoat to relocate during runtime. Change dalvik_system_DexFile.cc so that isDexOptNeededInternal will be able to indicate that a patchoat is required. Change default of relocate option to be on. Bug: 15358152 Change-Id: Ibe92d8b55a24bbf718b0416a21b76e5df7a2de26
|
94f7b49578b6aaa80de8ffed230648d601393905 |
|
23-Jul-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add GcRoot to clean up and enforce read barriers. Introduce a value-type wrapper around Object* for GC roots so that 1) we won't have to directly add the read barrier code in many places and 2) we can avoid accidentally bypassing/missing read barriers on GC roots (the GcRoot interface ensures that the read barrier is executed on a read). The jdwp test passed. Bug: 12687968 Change-Id: Ib167c7c325b3c7e3900133578815f04d219972a1
|
b76cac637691c29daa9c44e493b5bc26346ed116 |
|
23-Jul-2014 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Disable adding main and non moving spaces to immune region in GSS"" This reverts commit f85c2fb317399ab540854cd7551ac47690366543.
|
a59dd80f9f48cb750d329d4d4af2d99d72b484d1 |
|
03-Jul-2014 |
Alex Light <allight@google.com> |
Runtime can now be set to require relocation Add a pair of runtime flags -Xrelocate and -Xnorelocate that can force the runtime to require that all files that are run are relocated, to prevent attacks based on the known art base address. Add support for running patchoat on oat files compiled without an image. Change run-test to have new --prebuild and --relocate flags. Bug: 15358152 Change-Id: I91166c62dd1ab80e5cbcb7883a2cd0d56afca32d
|
f85c2fb317399ab540854cd7551ac47690366543 |
|
22-Jul-2014 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Disable adding main and non moving spaces to immune region in GSS" Bug: 16399257 This reverts commit be0562fb14e6754ee932b8d9c97e2a6df3a91119. Change-Id: I29e07a8fa1e972990e5bf1ddf8c9a3538ea5f9cf
|
39c86bc9de106e3641ecab2374a24e41d0430694 |
|
16-Jul-2014 |
Calin Juravle <calin@google.com> |
Make ART fail gracefully when it can't update the desired code. ART was exiting with a fatal error when it couldn't clean an obsolete file. Relaxing this and failing gracefully preserves the behaviour that Dalvik had. Bug: 15313272 (cherry picked from commit c54aea7f4acd1a32bb298d43c20e3e0217638926) Change-Id: I862a8925a0edd6370e94af8fa984a64099240029
|
be0562fb14e6754ee932b8d9c97e2a6df3a91119 |
|
14-Jul-2014 |
Mathieu Chartier <mathieuc@google.com> |
Disable adding main and non moving spaces to immune region in GSS Disabled adding the main and non moving space to the immune region. This will enable us to recycle bump pointer spaces for malloc space -> malloc space compaction as well as collector transitions. Also added logic for falling back to the non moving space, we may copy objects there. Refactored mod union table logic into MarkReachableObjects. No measurable performance benefit or regression. Bug: 14059466 Bug: 16291259 (cherry picked from commit 4c13a3ff475f206c4d0a86ee2595c45392fd942f) Change-Id: I858b4fbddca888e164052ad247565a0bdbea68b5
|
4c13a3ff475f206c4d0a86ee2595c45392fd942f |
|
14-Jul-2014 |
Mathieu Chartier <mathieuc@google.com> |
Disable adding main and non moving spaces to immune region in GSS Disabled adding the main and non moving space to the immune region. This will enable us to recycle bump pointer spaces for malloc space -> malloc space compaction as well as collector transitions. Also added logic for falling back to the non moving space, we may copy objects there. Refactored mod union table logic into MarkReachableObjects. No measurable performance benefit or regression. Bug: 14059466 Bug: 16291259 Change-Id: If663d9fdbde943b988173b7f6ac844e5f78a0327
|
c54aea7f4acd1a32bb298d43c20e3e0217638926 |
|
16-Jul-2014 |
Calin Juravle <calin@google.com> |
Make ART fail gracefully when it can't update the desired code. ART was exiting with a fatal error when it couldn't clean an obsolete file. Relaxing this and failing gracefully preserves the behaviour that Dalvik had. Bug: 15313272 Change-Id: I8d0d6d374c90d2a434909dd4ae56f0799f30134d
|
98d1cc8033251c93786e2fa8c59a2e555a9493be |
|
16-May-2014 |
Mingyao Yang <mingyao@google.com> |
Improve performance of invokevirtual/invokeinterface with embedded imt/vtable Add an embedded version of imt/vtable into class object. Both tables start at fixed offset within class object so method/entry point can be loaded directly from class object for invokeinterface/invokevirtual. Bug: 8142917 Change-Id: I4240d58cfbe9250107c95c0708c036854c455968
|
833a48501d560c9fa7fc78ef619888138c2d374f |
|
22-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Native support for multidex Native support for zip files with multiple classesX.dex. Works by explicitly looking for those files in ascending order. As these files have no file system representation for themselves, introduce synthetic dex locations: the name of the originating file plus a colon plus the name of the dex file, e.g., test.jar:classes2.dex. Opening a zip dex file will return all dex files in this way. This keeps the changes to dex2oat minimal. To hide multidex/synthetic names from the Java layer, let the handle of dalvik.system.DexFile refer to a vector of DexFile objects. When opening a location, test possible synthetic names and add them to the vector. Thus, the original multidex jar in the classpath will be associated with all embedded dex files. Change-Id: I0de107e1369cbc94416c544aca3b17525c9eac8b
|
e9e3e697f0c426132bee10aaa6aee9107d2d7dc6 |
|
24-Jun-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add more read barriers to the class linker. This change makes it possible to concurrently scan the remaining roots in the class linker (the non-class-table roots that are visited by ClassLinker::VisitRoots()) by adding read barriers. Bug: 12687968 Change-Id: I66fecf7a303eee7537429e018f38da8270b18c67
|
52e4b43d62896b56f8c2bd041e528472bb4a0d8d |
|
10-Jun-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add mark compact collector. The mark compact collector is a 4 phase collection, doing a normal full mark_sweep, calculating forwarding addresses of objects in the from space, updating references of objects in the from space, and moving the objects in the from space. Support is diabled by default since it needs to have non movable classes and field arrays. Performance numbers is around 50% as fast. The main advantage that this has over semispace is that the worst case memory usage is 50% since we only need one space isntead of two. TODO: Make field arrays and classes movable. This causes complication since Object::VisitReferences relies on these, so if we update the fields of an object but another future object uses this object to figure out what fields are reference fields it doesn't work. Bug: 14059466 Change-Id: I661ed3b71ad4dde124ef80312c95696b4a5665a1
|
a91a4bc1f8960f64c5f7e4616d46e21b8e1bfba2 |
|
14-Jun-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add read barriers for the class and the intern tables. Add read barriers for the strong roots in the intern table and the (strong) roots in the class table to make possible concurrent scanning of them. Bug: 12687968 Change-Id: If6edc33a37e65a8494e66dc3b144138b1530367f
|
bfd9a4378eacaf2dc2bbe05ad48c5164fc93c9fe |
|
22-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Change MethodHelper to use a Handle. Added ConstHandle to help prevent errors where you modify the value stored in the handle of the caller. Also fixed compaction bugs related to not knowing MethodHelper::GetReturnType can resolve types. This bug was present in interpreter RETURN_OBJECT. Bug: 13077697 Change-Id: I71f964d4d810ab4debda1a09bc968af8f3c874a3
|
ffddfdf6fec0b9d98a692e27242eecb15af5ead2 |
|
03-Jun-2014 |
Tim Murray <timmurray@google.com> |
DO NOT MERGE Merge ART from AOSP to lmp-preview-dev. Change-Id: I0f578733a4b8756fd780d4a052ad69b746f687a9
|
b74cd29802f364b4cec88f4913fa38ade26b8fab |
|
29-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Compaction cleanup for FindArrayClass. We now pass double pointer in to signify that it can cause thread suspension, this double pointer gets wrapped by a handle if don't find the array class in the cache. Change-Id: I43436b6c35597c7252b65d1180baddb5ac4caabb
|
0cd81352a7c06e381951cea1b104fd73516f4341 |
|
23-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Fix an outstanding compaction bug in interpreter."" Fixed the generic trampoline to not use ToJObject when unnecessary. Bug: 15167269 This reverts commit 3bdb873122964da7937eb070cbcf2ef638a8e459. Change-Id: I0525d0e0f3afb753c770e1572070a0fa22b02271
|
3bdb873122964da7937eb070cbcf2ef638a8e459 |
|
23-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Fix an outstanding compaction bug in interpreter." This reverts commit e09ae0920be57760fb390b6944bce420fa0b5582. Change-Id: I48036306130d5ccfec683d0dc3e9a642a02ee9c1
|
e09ae0920be57760fb390b6944bce420fa0b5582 |
|
15-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Fix an outstanding compaction bug in interpreter. Fixed a bug in DoFieldPut where the FieldHelper GetType could cause thread suspension which would result in a stale obj. Added more handles in the class linker to facilitate moving fiels and methods in the future. Removed un-necessarly passing handle references since these are value types and don't need to be passed by reference. Added a special NullHandle type which allows null handles without a handle scope. Change-Id: I1b51723920a2e4f4f8b2907066f578a3e879fd5b
|
700a402244a1a423da4f3ba8032459f4b65fa18f |
|
20-May-2014 |
Ian Rogers <irogers@google.com> |
Now we have a proper C++ library, use std::unique_ptr. Also remove the Android.libcxx.mk and other bits of stlport compatibility mechanics. Change-Id: Icdf7188ba3c79cdf5617672c1cfd0a68ae596a61
|
2b7c4d196c8abe32f4ca633534917da9de53c359 |
|
19-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Don't get and restore thread state for ScopedFastNativeObjectAccess. Before we would ensure that we were runnable for fast native object access. However, these are done when you are already runnable. Change-Id: Ia4c6e4c83d146fe2a988b37b3133ca46b0f0fa42
|
2afe49450f2e018f18b5de45428b9174bfd6f196 |
|
19-May-2014 |
Brian Carlstrom <bdc@google.com> |
Follow up to "Add ISA directory to image and odex pathnames." Change-Id: I7f08cc3052fbed93a56ccf1ab7675ae8bc129da9
|
f0972a410a0665dbe32bd96df09a572d69f9f3a3 |
|
16-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
Fix generic jni issue in ArtMethod::GetQuickFrameInfo The 64-bit host mode fails to start due to incorrect detection of GetQuickGenericJniTrampoline. The quick_code is 32-bit and taken from oat file, but GetQuickGenericJniTrampoline returnf 0x7fffxx (64-bit) address of trampoline and execution went to incorrect way. Some clean-up. Original Author: Dmitry Petrochenko <dmitry.petrochenko@intel.com> Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com> Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Change-Id: I0952443b2a9f6833ad37ec373837ae208681fad7
|
0e12bdc49744eb6d5c29b9611a8dbe10bac4cd53 |
|
15-May-2014 |
Brian Carlstrom <bdc@google.com> |
Add ISA directory to image and odex pathnames. Bug: 14882223 Bug: 14694978 Change-Id: Ic1b5ae836b8e91ea461dcd4f3da8e38dc3bec00f
|
eb8167a4f4d27fce0530f6724ab8032610cd146b |
|
08-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add Handle/HandleScope and delete SirtRef. Delete SirtRef and replaced it with Handle. Handles are value types which wrap around StackReference*. Renamed StackIndirectReferenceTable to HandleScope. Added a scoped handle wrapper which wraps around an Object** and restores it in its destructor. Renamed Handle::get -> Get. Bug: 8473721 Change-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a
|
52f84884433f3875f4b1bc5595b8d5a2d6fb3d99 |
|
02-May-2014 |
Narayan Kamath <narayan@google.com> |
Prevent spurious dexopts in 32-64 builds. When we're checking if a file needs to be dexopted, we need to compare oat file checksums with the image checksum for the oat file's target instruction set and not the current runtime's target instruction set. bug:14475807 Change-Id: Ib44d8e3c6cdf3a37fce6332c694a6602c658e925
|
b0fa5dc7769c1e054032f39de0a3f6d6dd06f8cf |
|
29-Apr-2014 |
Ian Rogers <irogers@google.com> |
Force inlining on trivial accessors. Make volatility for GetFieldObject a template parameter. Move some trivial mirror::String routines to a -inl.h. Bug: 14285442 Change-Id: Ie23b11d4f18cb15a62c3bbb42837a8aaf6b68f92
|
8a630577ed2d9e9571c3434c505e5de223b23c07 |
|
09-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Move mapping table and vmap table offsets to OatMethodHeader. This change has a libcore/ companion CL "Remove ArtMethod's quick fields mapping table and vmap table." https://android-review.googlesource.com/91254 Bug: 11767815 Change-Id: I46ce2067e1ecd915da3890606498e31ffc332813
|
d3c5bebcb52a67cb06e7ab303eaf45f230c08b60 |
|
11-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Avoid allocating OatFile::OatClass on the heap. Avoid allocating a BitVector for OatFile::OatClass::bitmap_ with kOatClassSomeCompiled methods. That makes the OatClass copy-constructible as it doesn't own any memory. We use that in OatFile::OatDexFile::GetOatClass() to return the result by value thus avoiding one or two heap allocations per call. Change-Id: Ic7098109028a5b49e39ef626f877de86e732ed18
|
329d18806792771dfee064203fe27875d79cd53a |
|
08-Apr-2014 |
Andreas Gampe <agampe@google.com> |
Better error reporting when loading dex files Collect all partial error messages and return them as cause exceptions for the top-level exception returned. Change-Id: I9661b8aed2a571dc88bf0f06d447108eeaed1409
|
719d1a33f6569864f529e5a3fff59e7bca97aad0 |
|
06-Mar-2014 |
Ian Rogers <irogers@google.com> |
Enable annotalysis on clang ART builds. Fix clang build errors aswell as restructure locking/mutex code for correct thread safety analysis support. Reorder make dependencies so that host builds build first as they should provide better compilation errors than target. Remove host's use of -fno-omit-frame-pointer as it has no value with correct use of CFI, which we should have. Change-Id: I72cea8da9a3757b1a0b3acb4081feccb7c6cef90
|
893263b7d5bc2ca43a91ecb8071867f5134fc60a |
|
04-Mar-2014 |
Mathieu Chartier <mathieuc@google.com> |
Avoid marking old class linker and intern table roots during pause. The new root visiting logic has a concept of a root log which holds new roots which were added since the start of the GC. This is an optimization since it lets us only mark these newly added roots during the pause (or pre-cleaning) since the other roots intern table and class linker roots were marked concurrently at the start of the GC. Before (EvaluateAndApplyChanges): MarkConcurrentRoots: Sum: 605.193ms After: MarkConcurrentRoots: Sum: 271.858ms This should also reduce pathological GC pauses which used to be able to happen when the intern table or class linker became "dirty" during the concurrent GC. Change-Id: I433fab021f2c339d50c35aaae7161a50a0901dec
|
2da882315a61072664f7ce3c212307342e907207 |
|
27-Feb-2014 |
Andreas Gampe <agampe@google.com> |
Initial changes towards Generic JNI option Some initial changes that lead to an UNIMPLEMENTED. Works by not compiling for JNI right now and tracking native methods which have neither quick nor portable code. Uses new trampoline. Change-Id: I5448654044eb2717752fd7359f4ef8bd5c17be6e
|
6fac447555dc94a935b78198479cce645c837b89 |
|
26-Feb-2014 |
Ian Rogers <irogers@google.com> |
Make allocations report usable size. Work-in-progress to allow arrays to fill usable size. Bug: 13028925. Use C++11's override keyword on GCC >= 2.7 to ensure that we override GC and allocator methods. Move initial mirror::Class set up into a Functor so that all allocated objects have non-zero sizes. Use this property to assert that all objects are never larger than their usable size. Other bits of GC related clean-up, missing initialization, missing use of const, hot methods in .cc files, "unimplemented" functions that fail at runtime in header files, reducing header file includes, move valgrind's space into its own files, reduce number of array allocation routines. Change-Id: Id5760041a2d7f94dcaf17ec760f6095ec75dadaa
|
9837939678bb5dcba178e5fb00ed59b5d14c8d9b |
|
25-Feb-2014 |
Ian Rogers <irogers@google.com> |
Avoid std::string allocations for finding an array class. Introduce ClassLinker::FindArrayClass which performs an array class lookup given the element/component class. This has a 16 element cache of recently looked up arrays. Pass the current thread to ClassLinker Find .. Class routines to avoid calls to Thread::Current(). Avoid some uses of FindClass in the debugger where WellKnownClasses is a faster and more compacting GC friendly alternative. Change-Id: I60e231820b349543a7edb3ceb9cf1ce92db3c843
|
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
|
60836d5a9bcf8b30984aae4279a4f6233b0bf622 |
|
16-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Fix opening oat files that are out of date. Make sure we're not using an old MAP_PRIVATE mapping of an OatFile after a forked process modifies the underlying file. Change-Id: I5c6caaf34272c805e40e95ee690dd948d7406751
|
08cbf66dc4632913f80f8ac18082c39b7d52c7dd |
|
11-Dec-2013 |
Brian Carlstrom <bdc@google.com> |
Do not require classes.dex to support stripped zip files Change-Id: Ief34c1b559dbebda85d181ae49da7d35446c9b37
|
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
|
590fee9e8972f872301c2d16a575d579ee564bee |
|
13-Sep-2013 |
Mathieu Chartier <mathieuc@google.com> |
Compacting collector. The compacting collector is currently similar to semispace. It works by copying objects back and forth between two bump pointer spaces. There are types of objects which are "non-movable" due to current runtime limitations. These are Classes, Methods, and Fields. Bump pointer spaces are a new type of continuous alloc space which have no lock in the allocation code path. When you allocate from these it uses atomic operations to increase an index. Traversing the objects in the bump pointer space relies on Object::SizeOf matching the allocated size exactly. Runtime changes: JNI::GetArrayElements returns copies objects if you attempt to get the backing data of a movable array. For GetArrayElementsCritical, we return direct backing storage for any types of arrays, but temporarily disable the GC until the critical region is completed. Added a new runtime call called VisitObjects, this is used in place of the old pattern which was flushing the allocation stack and walking the bitmaps. Changed image writer to be compaction safe and use object monitor word for forwarding addresses. Added a bunch of added SIRTs to ClassLinker, MethodLinker, etc.. TODO: Enable switching allocators, compacting on background, etc.. Bug: 8981901 Change-Id: I3c886fd322a6eef2b99388d19a765042ec26ab99
|
88474b416eb257078e590bf9bc7957cee604a186 |
|
24-Oct-2013 |
Jeff Hao <jeffhao@google.com> |
Implement Interface Method Tables (IMT). Change-Id: Idf7fe85e1293453a8ad862ff2380dcd5db4e3a39
|
8d31bbd3d6536de12bc20e3d29cfe03fe848f9da |
|
13-Oct-2013 |
Ian Rogers <irogers@google.com> |
Throw IOException at source of failing to open a dex file. Before is: java.lang.ClassNotFoundException: Didn't find class "GCBench" on path: DexPathList[[zip file "/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar"],nativeLibraryDirectories=[/disk2/dalvik-dev/out/host/linux-x86/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) Suppressed: java.lang.ClassNotFoundException: GCBench at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 1 more Caused by: java.lang.NoClassDefFoundError: Class "LGCBench;" not found ... 5 more And after is: java.lang.ClassNotFoundException: Didn't find class "GCBench" on path: DexPathList[[zip file "/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar"],nativeLibraryDirectories=[/disk2/dalvik-dev/out/host/linux-x86/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) Suppressed: java.io.IOException: Zip archive '/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar' doesn't contain classes.dex at dalvik.system.DexFile.openDexFile(Native Method) at dalvik.system.DexFile.<init>(DexFile.java:80) at dalvik.system.DexFile.<init>(DexFile.java:59) at dalvik.system.DexPathList.loadDexFile(DexPathList.java:268) at dalvik.system.DexPathList.makeDexElements(DexPathList.java:235) at dalvik.system.DexPathList.<init>(DexPathList.java:113) at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48) at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:38) at java.lang.ClassLoader.createSystemClassLoader(ClassLoader.java:128) at java.lang.ClassLoader.access$000(ClassLoader.java:65) at java.lang.ClassLoader$SystemClassLoader.<clinit>(ClassLoader.java:81) at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:137) Suppressed: java.lang.ClassNotFoundException: GCBench at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 1 more Caused by: java.lang.NoClassDefFoundError: Class "LGCBench;" not found ... 5 more Also, move dex file verifier messages out of logs. In the process the ClassLinker::dex_lock_ needed tidying to cover a smaller scope. Bug 11301553. Change-Id: I80058652e11e7ea63457cc01a0cb48afe1c15543
|
e810452722ac83b294d1f7aa80bdd88e547d5af0 |
|
16-Oct-2013 |
Brian Carlstrom <bdc@google.com> |
Preload DexCaches Bug: 11045348 Change-Id: I6f9c0d11613b6b4933a04ae23dbf4bc7879cea65
|
756ee4e090bc1e1812b41fb7b4661df601a32ef9 |
|
04-Oct-2013 |
Brian Carlstrom <bdc@google.com> |
Find OatDexFile by DexFile name and checksum, not just checksum Bug: 10614658 Change-Id: Ie0b5a34fd396b6299000c37909108c5e7e6ab80f
|
ee39a10e45a6a0880e8b829525c40d6055818560 |
|
19-Sep-2013 |
Ian Rogers <irogers@google.com> |
Use class def index from java.lang.Class. Bug: 10244719 This removes the computation of the dex file index, when necessary this is computed by searching the dex file. Its only necessary in dalvik.system.DexFile.defineClassNative and DexFile::FindInClassPath, the latter not showing up significantly in profiling with this change. (cherry-picked from 8b2c0b9abc3f520495f4387ea040132ba85cae69) Change-Id: I20c73a3b17d86286428ab0fd21bc13f51f36c85c
|
8b2c0b9abc3f520495f4387ea040132ba85cae69 |
|
19-Sep-2013 |
Ian Rogers <irogers@google.com> |
Use class def index from java.lang.Class. Bug: 10244719 Depends on: https://googleplex-android-review.git.corp.google.com/362363 This removes the computation of the dex file index, when necessary this is computed by searching the dex file. Its only necessary in dalvik.system.DexFile.defineClassNative and DexFile::FindInClassPath, the latter not showing up significantly in profiling with this change. Change-Id: I20c73a3b17d86286428ab0fd21bc13f51f36c85c
|
c4621985bdfc2b27494087e5dee65a6d0cc5a632 |
|
17-Sep-2013 |
Mathieu Chartier <mathieuc@google.com> |
Fix race in root marking. There was a race which caused the class linker / intern table to not become dirty after adding a root. We now guard the is dirty flag by the corresponding locks to prevent this from occuring. This was causing roots to be occasionally missed. Also fixes the bug where we occasionally scan more cards than needed. Bug: 10626133 Change-Id: I0f6e72d92035ff463954d66988ef610ea0df61be
|
7dfb28c066159e6cde8181720f0c451a700ef966 |
|
22-Aug-2013 |
Ian Rogers <irogers@google.com> |
Don't scan image space when starting runtime. Bug 10432288. Find Classes and Strings from dex caches lazily rather than when the image is loaded. Make class status changes do notifies when there can be waiters. For Class lookup there's a pathology if we always search dex caches and so after 1000 failures move all classes into the class table. Be consistent in using "const char*" for class linker descriptors as this most easily agrees with the type in the dex file. Improve the intern run-test so that it has a case of a literal contained in the image. Modify image_test to allow any valid lock word rather than expecting 0, ideally we wouldn't see inflated monitors but we do due to NotifyAll (see bug 6961405). Change-Id: Ia9bfa748eeccb9b4498784b97c6823141b1f6db8
|
8f3c9ae38df2460940a26dff889a84430b6c38d3 |
|
21-Aug-2013 |
Ian Rogers <irogers@google.com> |
Don't allow class status to go backward except for error. Allow greater parallelism of initialization. Bug 10393546. Change-Id: Ic194ed490bb0a986250c09fcf335eb1be9714657
|
be7149fc2e7cc607937209f2819e3c1d672e2668 |
|
20-Aug-2013 |
Ian Rogers <irogers@google.com> |
Avoid throwing NoClassDefFoundError at compile time. Change-Id: I8ba56a8750e1718babcb1f94e0408d89f58ea9b5
|
e6bb3b2ce5a69c31c2adfc7eb2705633b7f966eb |
|
20-Aug-2013 |
Ian Rogers <irogers@google.com> |
Reduce AOT initialization. When compiling apps there is no need to resolve all types in the dex file, just those declared in the dex file. There's also no need to initialize static fields if we can only leave the class in a verified state. Increase use of CompilerDriver::IsImage. Move timing of dex2oat setup to before Runtime::Create. On run-test 056 the performance improvement is an order of magnitude, for ThinkFree dex2oat time is dominated by compilation and this change has no effect. Bug 10316099. Change-Id: Ibdd7caa43284e7448e6a56d810967100ae4a7898
|
ea46f950e7a51585db293cd7f047de190a482414 |
|
30-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Refactor java.lang.reflect implementation Cherry-picked from commit ed41d5c44299ec5d44b8514f6e17f802f48094d1. Move to ArtMethod/Field instead of AbstractMethod/Field and have java.lang.reflect APIs delegate to ArtMethod/ArtField. Bug: 10014286. Change-Id: Iafc1d8c5b62562c9af8fb9fd8c5e1d61270536e7
|
468532ea115657709bc32ee498e701a4c71762d4 |
|
05-Aug-2013 |
Ian Rogers <irogers@google.com> |
Entry point clean up. Create set of entry points needed for image methods to avoid fix-up at load time: - interpreter - bridge to interpreter, bridge to compiled code - jni - dlsym lookup - quick - resolution and bridge to interpreter - portable - resolution and bridge to interpreter Fix JNI work around to use JNI work around argument rewriting code that'd been accidentally disabled. Remove abstact method error stub, use interpreter bridge instead. Consolidate trampoline (previously stub) generation in generic helper. Simplify trampolines to jump directly into assembly code, keeps stack crawlable. Dex: replace use of int with ThreadOffset for values that are thread offsets. Tidy entry point routines between interpreter, jni, quick and portable. Change-Id: I52a7c2bbb1b7e0ff8a3c3100b774212309d0828e (cherry picked from commit 848871b4d8481229c32e0d048a9856e5a9a17ef9)
|
b0f871965d588cce066785728fb105248b38bb4a |
|
08-Aug-2013 |
Dragos Sbirlea <dragoss@google.com> |
Removed unused friend classes for tests. Change-Id: I7f08b0cd4abbbc82f329a8bec0d0994327b6dba9
|
848871b4d8481229c32e0d048a9856e5a9a17ef9 |
|
05-Aug-2013 |
Ian Rogers <irogers@google.com> |
Entry point clean up. Create set of entry points needed for image methods to avoid fix-up at load time: - interpreter - bridge to interpreter, bridge to compiled code - jni - dlsym lookup - quick - resolution and bridge to interpreter - portable - resolution and bridge to interpreter Fix JNI work around to use JNI work around argument rewriting code that'd been accidentally disabled. Remove abstact method error stub, use interpreter bridge instead. Consolidate trampoline (previously stub) generation in generic helper. Simplify trampolines to jump directly into assembly code, keeps stack crawlable. Dex: replace use of int with ThreadOffset for values that are thread offsets. Tidy entry point routines between interpreter, jni, quick and portable. Change-Id: I52a7c2bbb1b7e0ff8a3c3100b774212309d0828e
|
7934ac288acfb2552bb0b06ec1f61e5820d924a4 |
|
26-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/comments issues Change-Id: Iae286862c85fb8fd8901eae1204cd6d271d69496
|
fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d |
|
17-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix multiple inclusion guards to match new pathnames Change-Id: Id7735be1d75bc315733b1773fba45c1deb8ace43
|
56d947fbc9bc2992e2f93112fafb73e50d2aaa7a |
|
15-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Add verification of boot.oat generated on device Change-Id: I069586205a9a92fc7375ccf5cdde136bbbcfc800
|
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
|