67bf42e89592c3a1c648f927f2ce3ccb189a1161 |
|
27-Feb-2018 |
David Sehr <sehr@google.com> |
Header library to remove dependence on runtime/ Add a new header library to remove libdexfile and others' dependence on runtime (typically runtime/base) includes in libdexfile. Also a small step to tease dexlayout and profman away from relying on these as well. Bug: 22322814 Test: make -j 50 checkbuild make -j 50 test-art-host-gtest Change-Id: I38e2fe399a75f4bc6318c77a71954c00ea73ec2b
|
0225f8e2939a9340cb7dcebfcfe7996a2bd9bce9 |
|
31-Jan-2018 |
David Sehr <sehr@google.com> |
Revert "Revert "Make libdexfile build independent of runtime dir"" This reverts commit 787784f9effb126b5d0d3dc97d544c4a477b5daf. Reason for revert: Bot configuration issue. Change-Id: I6a10bb4a9571f89c7e4dd095f9157e830a44e2de Bug: 22322814 Test: make -j 50 checkbuild
|
787784f9effb126b5d0d3dc97d544c4a477b5daf |
|
30-Jan-2018 |
David Sehr <sehr@google.com> |
Revert "Make libdexfile build independent of runtime dir" This reverts commit b40b7e73469339a6b667b4a2e2b8690112a74dc9. Reason for revert: on device libdexfile.so missing Change-Id: I9bd61a98bef870400580e8c991cb061d3f57fa72
|
b40b7e73469339a6b667b4a2e2b8690112a74dc9 |
|
26-Jan-2018 |
David Sehr <sehr@google.com> |
Make libdexfile build independent of runtime dir Remove libdexfile's dependency on utils.cc and move utf.cc into /dex. Remove libdexfile's constituent sources from libart and use libdexfile wherever libart is. Also remove some ART-specific interfaces. Libdexfile's tests remain to be converted, plus moving the files to a new directory peer to runtime/. Bug: 22322814 Test: make -j 50 test-art-host Change-Id: Ifaf695216e4a0e43d3aa377984d933f7a2a243c2
|
c3a22aa19bbe35ff8447460b29e07d42937a39de |
|
20-Jan-2018 |
Mathieu Chartier <mathieuc@google.com> |
Add shared separate data section for compact dex Added a shared dex data buffer for compact dex files, this buffer is referenced by all compact dex files in a vdex file. Repurposed the existing data_off / data_size fields in the header. After the shared buffer is filled up, it is placed after the dex files in the oat writer and the dex file headers are fixed up to have the correct offsets / sizes to the shared buffer. Motivation: Make it easy to deduplicate data across dexes. Bug: 63756964 Test: test-art-host Change-Id: I17855a0c78b20be3d323d12dedb9c695962be3ed
|
9e734c7ab4599d7747a05db0dc73c7b668cb6683 |
|
05-Jan-2018 |
David Sehr <sehr@google.com> |
Create dex subdirectory Move all the DexFile related source to a common subdirectory dex/ of runtime. Bug: 71361973 Test: make -j 50 test-art-host Change-Id: I59e984ed660b93e0776556308be3d653722f5223
|
e2abbc604ce003c776c00ecf1293796bb4c4ac5a |
|
15-Sep-2017 |
Andreas Gampe <agampe@google.com> |
ART: Move kDexNoIndex to dex_file_types.h Define the constant with the types to allow lowering the dependency on DexFile. Test: m Change-Id: I3c61421db45be96d2057e01b1a7825883d8bd178
|
ba650a4d5a0a82c6c88d6546b6111013c2ee8072 |
|
06-Mar-2017 |
Roland Levillain <rpl@google.com> |
Revert "Revert "Use the "GC is marking" information in compiler read barriers (ARM, ARM64)."" This reverts commit 35345a555bd7928582a7ffa6369b374b3ddc379d. In compiler-generated code, when deciding whether to mark a heap reference or not in a read barrier, check whether the GC is currently marking, instead of checking the gray bit in the reference's holder's lock word. This change is only for ARM and ARM64, as it does not benefit x86 nor x86-64. Change-Id: Id3d2758c600115b2f07d345442cfa87edfc2792c Test: Run ART tests in Baker read barrier configuration. Test: Boot a device in Baker read barrier configuration. Bug: 35780827 Bug: 29516974
|
35345a555bd7928582a7ffa6369b374b3ddc379d |
|
27-Feb-2017 |
Roland Levillain <rpl@google.com> |
Revert "Use the "GC is marking" information in compiler read barriers (ARM, ARM64)." This reverts commit 1372c9f40df1e47bf775f1466bbb96f472b6b9ed. This change (along with https://android-review.googlesource.com/#/c/342429/) creates null pointer dereferences. Bug: 35780827 Bug: 29516974 Change-Id: I2a9c4d0ad8d2ab870c2e0ddbff32152933c77abe
|
1372c9f40df1e47bf775f1466bbb96f472b6b9ed |
|
13-Jan-2017 |
Roland Levillain <rpl@google.com> |
Use the "GC is marking" information in compiler read barriers (ARM, ARM64). In compiler-generated code, when deciding whether to mark a heap reference or not in a read barrier, check whether the GC is currently marking, instead of checking the gray bit in the reference's holder's lock word. This change is only for ARM and ARM64, as it does not benefit x86 nor x86-64. Test: Run ART tests in Baker read barrier configuration. Test: Boot a device in Baker read barrier configuration. Bug: 29516974 Change-Id: Ia5d90286bb9f753f3bbcb3a6254eb166523a2ff5
|
1b868498a176705b867e2572cc1bcbd58dbd62d6 |
|
17-Nov-2016 |
Mathieu Chartier <mathieuc@google.com> |
Use type lookup tables in compiler This recently regressed and stopped happening, the fix creates fake OatDexFiles so that the compiler uses the type lookup tables instead of slow FindClassDef and FindTypeId. Perf on host compile Facebook: Before: 2.49%: art::DexFile::FindClassDef(unsigned short) const 1.59%: art::DexFile::FindTypeId(char const*) const After: 0.42%: art::OatDexFile::FindClassDef(art::DexFile const&, char const*, unsigned long) 0%: art::DexFile::FindTypeId(char const*) const 0%: art::DexFile::FindClassDef(unsigned short) const Average install (N6P 960 mhz average of 40 samples): 38.2s -> 35.64s Bug: 32641252 Test: test-art-host, adb install. Change-Id: I34df21dc2c155bc2579c5cafdd91f9cb0fead1a9
|
9aa352e92b6ca0f2250cb7f54dfbf4b1be714c19 |
|
16-Sep-2016 |
David Sehr <sehr@google.com> |
Remove TypeLookupTable from DexFile. One more step towards removing runtime dependencies from the DexFile API. This severs the ties to OatFile. Work remains to move MemMap out of DexFile. Bug: 22322814 Change-Id: I29e7ad8fd292c7919ed2689dc754b958b88d6819 Test: test-art-host
|
9bdf108885a27ba05fae8501725649574d7c491b |
|
21-Jan-2016 |
Vladimir Marko <vmarko@google.com> |
Revert "Revert "Write dex files to oat file early."" This reverts commit 919f5536182890d2e03f59b961acf8f7c836ff61. Fix linker error (Mac build): Replace inline definition of art::ZipArchive::~ZipArchive() with an out-of-line definition in zip_archive.cc to avoid direct reference to CloseArchive() from libart-compiler due to inlining. Note that libart is linked against -lziparchive but libart-compiler is not. Change-Id: I92620ea0200282ca7ba9b7f61a592cb6468d90d8
|
919f5536182890d2e03f59b961acf8f7c836ff61 |
|
20-Jan-2016 |
Vladimir Marko <vmarko@google.com> |
Revert "Write dex files to oat file early." This reverts commit 625a64aad13905d8a2454bf3cc0e874487b110d5. Breaks the Mac build: Undefined symbols for architecture i386: "_CloseArchive", referenced from: ... in oat_writer.o ld: symbol(s) not found for architecture i386 Change-Id: I21608bc51437834e1e6abde9bcbe5e7d9998197e
|
625a64aad13905d8a2454bf3cc0e874487b110d5 |
|
26-Nov-2015 |
Vladimir Marko <vmarko@google.com> |
Write dex files to oat file early. Write dex files to oat file before we actually open and verify them. Instead, open and verify the copies from the oat file and use these. This way, in the most common case of zipped dex files, we have mmapped dex files instead of inflated dex files. That reduces the number of dirty pages used by dex2oat. Reading /proc/self/statm after we write the oat file for a compilation of a certain large app on Nexus 5 AOSP build with -j1, three attempts before and after this CL gave before: 346061 189462 6269 26 0 140723 0 346189 189450 6269 26 0 140851 0 346061 189463 6269 26 0 140723 0 after: 346186 185808 23040 27 0 140468 0 346186 185819 23040 27 0 140468 0 346186 185822 23040 27 0 140468 0 These values are in pages (4KiB), so while the "size" (=VmSize) is essentially unchanged, the "resident" (=VmRSS) is over 14MiB less and the "shared" (i.e. backed by a file) is 65.5MiB more. That is, the amount of dirty non-pageable memory used is reduced by about 80MiB. The oat file format has changed slightly, the class offset table has been moved from the OatDexFile to its own section. This actually fixes the alignment of these offsets as they could have been unaligned previously, yet accessed as normal with significant performance impact if the kernel has to emulate the unaligned access (say, mips). Change-Id: I0f4799bb1f1ca28e3533156a3494f55345c3e10a
|
d9786b0e5be23ea0258405165098b4216579209c |
|
14-Oct-2015 |
Artem Udovichenko <artem.u@samsung.com> |
Implementation of fast lookup table to search class_def by descriptor Lookup table is a hash table which built at compile time and stored into oat file. At runtime the table is restored and used in the method DexFile::FindClassDef(const char*) to perform fast search of the class_def_idx by class descriptor. Advantages of the lookup table over the HashSet (runtime/base/hash_set.h) are: 1. Lookup table is built at compile time and uses read-only memory at runtime 2. Lookup table uses less memory then DexFile::Index (less by 80% for /system/framework/framework.jar on Nexus5) 3. Lookup table does less string comparisons compared with HashSet (less by 70% for zygote process on Nexus5) The disadvantage of the lookup table is it increased boot.oat size by 0.2% on Nexus5 and application .oat file by 0.3% in average on Nexus5. mathieuc changes: Create lookup table in dex2oat to speed up compilation. Clean up code to follow style guide and use less static functions. Added performance measurements. Compile ~100 APKs 5 times with filter interpret-only: Before: real 1m8.989s user 0m59.318s sys 0m7.773s After: real 1m1.493s user 0m52.055s sys 0m7.581s App launch (AOSP N5 maps, average of 45 runs): Before: 966.84ms After: 923.733ms Launch speedup is 4.7% Memory usage compared to HashSet index on 50 various APK: 32 bit: HashSet ~625694b vs TypeLookupTable ~404268b 64 bit: HashSet ~1251390b vs TypeLookupTable ~404268b Bug: 10921004 Bug: 20269715 Change-Id: I7246c1d9ad9fe81fe5c5907a4bf70396d8f9242a
|