9e57abacecc683f50dd6c9870a32ee075eaf86a8 |
|
16-Mar-2017 |
Vladimir Marko <vmarko@google.com> |
Fix String::DoReplace() using obsolete `this`. Change it to a static function taking a Handle<>. Test: testrunner.py --host --interp-ac --gcstress -t 021-string2 Bug: 36335996 Change-Id: I5ab3e7adc59d6a9095290e57d5ce5d46b79f089b
|
bcf716f3e0c72aa8bb75b15e5b273a813658fdb5 |
|
23-Feb-2017 |
Vladimir Marko <vmarko@google.com> |
Revert^2 "Enable String compression." Test: m test-art-host (interpreter, JIT, AOT) Test: m test-art-target on Nexus 6P (interpreter, JIT, AOT) Test: Nexus 6P boots Test: m ahat-test Bug: 31040547 This reverts commit afcb365b2d3ae152989826c2afb0d98a9cf3f6be. Change-Id: Id7e27d717c8e36d3c7abdde59ca2c8fd4fc221c9
|
92907f3f7af106a9eeb341caba17f3770203f7fb |
|
20-Feb-2017 |
Vladimir Marko <vmarko@google.com> |
Remove String.setCharAt(). The internal API String.setCharAt() breaks the assumption that strings are really immutable. That in turn breaks string compression invariants - compressible strings must be compressed. This CL removes the String.setCharAt() API. The method was used only in String.replace(char, char) when we found a match, copying the string on first match. Instead, introduce a new native method that does the whole replacement with a single call when we find the first match. StringReplaceBenchmark results on Nexus 6P, lower is better: timeReplaceCharNonExistent/EMPTY 41.93 -> 38.25 (-9%) timeReplaceCharNonExistent/L_16 114.90 -> 95.09 (-17%) timeReplaceCharNonExistent/L_64 419.97 -> 320.65 (-24%) timeReplaceCharNonExistent/L_256 1667.01 -> 1091.25 (-35%) timeReplaceCharNonExistent/L_512 3253.50 -> 2075.62 (-36%) timeReplaceCharRepeated/EMPTY 41.93 -> 39.58 (-6%) timeReplaceCharRepeated/L_16 114.87 -> 95.40 (-17%) timeReplaceCharRepeated/L_64 1267.29 -> 704.32 (-44%) timeReplaceCharRepeated/L_256 5139.14 -> 1361.80 (-74%) timeReplaceCharRepeated/L_512 10787.81 -> 2338.41 (-78%) timeReplaceSingleChar/EMPTY 41.78 -> 37.16 (-11%) timeReplaceSingleChar/L_16 449.54 -> 497.51 (+11%) timeReplaceSingleChar/L_64 942.08 -> 891.35 (-5%) timeReplaceSingleChar/L_256 2756.18 -> 2174.64 (-21%) timeReplaceSingleChar/L_512 5489.91 -> 3983.32 (-27%) Test: testrunner.py --host Test: run-libcore-tests.sh --mode=host Test: testrunner.py --host with string compression enabled. Test: run-libcore-tests.sh --mode=host with string compression enabled. Bug: 31040547 Change-Id: I9cf0d5457182f0a33ca8251c29931d3eb624ae07
|
afcb365b2d3ae152989826c2afb0d98a9cf3f6be |
|
16-Feb-2017 |
Vladimir Marko <vmarko@google.com> |
Revert "Enable String compression." The internal API String.setCharAt() is broken with string compression. Bug: 31040547 This reverts commit 24bbf98cec9f39a2592892adb245ce15d58cab19. Change-Id: If2c2fa0eb42a8613994dfa5299febf7a5de2bf31
|
e39f14ff4e0d7c70016874cff24863b912d40bf1 |
|
10-Feb-2017 |
Vladimir Marko <vmarko@google.com> |
ARM64: Improve String.equals() intrinsic for const strings. And add additional tests to 021-string2. aosp_angler-userdebug: before: arm64 boot*.oat: 43324664 arm64 boot*.oat/string compression: 43411112 after: arm64 boot*.oat: 43300136 (-24528) arm64 boot*.oat/string compression: 43345464 (-65648) The string compression code size difference drops from 86448 to 45328. Test: m test-art-target on Nexus 6P Test: m test-art-target on Nexus 6P with string compression enabled. Bug: 31040547 Change-Id: I99a3777b91b248da2b0ac25abd260f9e5abb2c09
|
8ed94712bccd4ab35b2565cd88cf5369b353216d |
|
02-Feb-2017 |
Vladimir Marko <vmarko@google.com> |
Enable String compression. Test: m test-art-host (interpreter, JIT, AOT) Test: m test-art-target on Nexus 6P (interpreter, JIT, AOT) Test: Nexus 6P boots Test: m ahat-test Bug: 31040547 (cherry picked from commit 24bbf98cec9f39a2592892adb245ce15d58cab19) Change-Id: Iaf44fa7041c7cd9ff315c752f482a06b18aa7383 (cherry picked from commit 5d368c82f2896823cf9b61d9503602bc24559073)
|
383b468cafa241d457fd83d005b439d3106cb001 |
|
14-Feb-2017 |
Kuan-Tung Pan <kuantung@google.com> |
Revert "Enable String compression." This reverts commit 5d368c82f2896823cf9b61d9503602bc24559073. Change-Id: Icb00c96f982431b13fc56aaab7e9d246f2812f45
|
5d368c82f2896823cf9b61d9503602bc24559073 |
|
02-Feb-2017 |
Vladimir Marko <vmarko@google.com> |
Enable String compression. Test: m test-art-host (interpreter, JIT, AOT) Test: m test-art-target on Nexus 6P (interpreter, JIT, AOT) Test: Nexus 6P boots Test: m ahat-test Bug: 31040547 (cherry picked from commit 24bbf98cec9f39a2592892adb245ce15d58cab19) Change-Id: Iaf44fa7041c7cd9ff315c752f482a06b18aa7383
|
24bbf98cec9f39a2592892adb245ce15d58cab19 |
|
02-Feb-2017 |
Vladimir Marko <vmarko@google.com> |
Enable String compression. Test: m test-art-host (interpreter, JIT, AOT) Test: m test-art-target on Nexus 6P (interpreter, JIT, AOT) Test: Nexus 6P boots Test: m ahat-test Bug: 31040547 Change-Id: I2c2f74ca147b3ea98ef06f9c64553737d17d42fd
|
595beb3ff0e8e9bc6ca9c3be453187a4a41ad7dc |
|
06-Feb-2017 |
Vladimir Marko <vmarko@google.com> |
Fix hprof/ahat for string compression. Test: m test-art-host Test: m ahat-test Test: m test-art-host with string compression enabled Test: m ahat-test with string compression enabled Bug: 31040547 Change-Id: I660e39c586d23f4a95686d484ca108466e52d249
|
fdaf0f45510374d3a122fdc85d68793e2431175e |
|
13-Oct-2016 |
Vladimir Marko <vmarko@google.com> |
Change string compression encoding. Encode the string compression flag as the least significant bit of the "count" field, with 0 meaning compressed and 1 meaning uncompressed. The main vdex file is a tiny bit larger (+28B for prebuilt boot images, +32 for on-device built images) and the oat file sizes change. Measured on Nexus 9, AOSP ToT, these changes are insignificant when string compression is disabled (-200B for the 32-bit boot*.oat for prebuilt boot image, -4KiB when built on the device attributable to rounding, -16B for 64-bit boot*.oat for prebuilt boot image, no change when built on device) but with string compression enabled we get significant differences: prebuilt multi-part boot image: - 32-bit boot*.oat: -28KiB - 64-bit boot*.oat: -24KiB on-device built single boot image: - 32-bit boot.oat: -32KiB - 64-bit boot.oat: -28KiB The boot image oat file overhead for string compression: prebuilt multi-part boot image: - 32-bit boot*.oat: before: ~80KiB after: ~52KiB - 64-bit boot*.oat: before: ~116KiB after: ~92KiB on-device built single boot image: - 32-bit boot.oat: before: 92KiB after: 60KiB - 64-bit boot.oat: before: 116KiB after: 92KiB The differences in the SplitStringBenchmark seem to be lost in the noise. Test: Run ART test suite on host and Nexus 9 with Optimizing. Test: Run ART test suite on host and Nexus 9 with interpreter. Test: All of the above with string compression enabled. Bug: 31040547 Change-Id: I7570c2b700f1a31004a2d3c18b1cc30046d35a74
|
9e868098b4a5d666570e3924518978d7abd3542e |
|
31-Oct-2016 |
Mathieu Chartier <mathieuc@google.com> |
Move intern table to ObjPtr Also moved StringLog to use a GcRoot. Also removed read barriers from lookup to prevent making weak strings strongly live more often than necessary. Bug: 31113334 Test: clean-oat-host && test-art-host CC baker Change-Id: I05586e125d5dfed8d184890468fd398c79f32619
|
709b070044354d9f47641f273edacaeeb0240ab7 |
|
13-Oct-2016 |
David Sehr <sehr@google.com> |
Remove mirror:: and ArtMethod deps in utils.{h,cc} The latest chapter in the ongoing saga of attempting to dump a DEX file without having to start a whole runtime instance. This episode finds us removing references to ArtMethod/ArtField/mirror. One aspect of this change that I would like to call out specfically is that the utils versions of the "Pretty*" functions all were written to accept nullptr as an argument. I have split these functions up as follows: 1) an instance method, such as PrettyClass that obviously requires this != nullptr. 2) a static method, that behaves the same way as the util method, but calls the instance method if p != nullptr. This requires using a full class qualifier for the static methods, which isn't exactly beautiful. I have tried to remove as many cases as possible where it was clear p != nullptr. Bug: 22322814 Test: test-art-host Change-Id: I21adee3614aa697aa580cd1b86b72d9206e1cb24
|
31e88225b2ef68e7f32f11186acf922c74ddabab |
|
15-Oct-2016 |
Mathieu Chartier <mathieuc@google.com> |
Move most mirror:: args to ObjPtr Fixed possible moving GC bugs in ClinitImageUpdate class. Bug: 31113334 Test: test-art-host Change-Id: I0bf6578553d58b944aaa17665f1350bdf5ed15ec
|
bdf7f1c3ab65ccb70f62db5ab31dba060632d458 |
|
31-Aug-2016 |
Andreas Gampe <agampe@google.com> |
ART: SHARED_REQUIRES to REQUIRES_SHARED This coincides with the actual attribute name and upstream usage. Preparation for deferring to libbase. Test: m Test: m test-art-host Change-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518
|
3aaa37bba53d6df0265793de48b4b0b57327e57a |
|
29-Jul-2016 |
jessicahandojo <jessicahandojo@google.com> |
creating workflow for mirror::String compression All-ASCII String characters are stored in 8-bit blocks instead of 16-bit. The compression has not taken place, but all workflow are in the code already (changing kUseStringCompression in string.h file to TRUE will enable the feature) Notes: Feature works on interpreter only without optimizing Test art: m ART_TEST_INTERPRETER=true ART_TEST_OPTIMIZING=false test-art-host Also tested with String tests from libcore/: 1. libcore.java.lang.StringTest 2. libcore.java.lang.StringBufferTest 3. libcore.java.lang.StringBuilderTest 4. libcore.java.lang.OldStringTest 5. libcore.java.lang.OldStringBufferTest Memory improvement is 33% (from 6.03% to 4.03%, total String memory from all apps per total memory of all apps) measured on Angler with Hprof tools Bug: 31040547 Change-Id: I9cc92c265ebf1305fc06b5fc33efd83797660cce
|
542451cc546779f5c67840e105c51205a1b0a8fd |
|
26-Jul-2016 |
Andreas Gampe <agampe@google.com> |
ART: Convert pointer size to enum Move away from size_t to dedicated enum (class). Bug: 30373134 Bug: 30419309 Test: m test-art-host Change-Id: Id453c330f1065012e7d4f9fc24ac477cc9bb9269
|
1646d7a22e43a1fb25452ead47a4073e63d7f391 |
|
28-Oct-2015 |
Bruce Hoult <b.hoult@samsung.com> |
Optimize some commonly used utf8 functions by: - using counted loops instead of searching for terminating null. In the important cases the caller already knows the length: change the API to pass it in. Keep the old API version as well to avoid extensive changes to non-critical debug and test code. - ensure the common cases are at the start of if/then/else chains. Usually 99+% of characters are ASCII even in mixed strings. - for the "convert" functions, when both utf8 and utf16 lengths are passed, and are equal, it means the entire string is ASCII, and a specialized loop can be used. The compiler might then unroll or even vectorize this. The functions improved are (tested on Nexus 5 with a 44 character ASCII string): CountModifiedUtf8Chars : 20% faster ConvertUtf16ToModifiedUtf8: 80% faster ConvertModifiedUtf8ToUtf16: 200% faster Also for completeness CountUtf8Bytes has been cleaned up a little, but the speed is unchanged. Unlike CountModifiedUtf8Chars, it was already passed the length, rather than searching for null. Change-Id: I1c9b7dea3eda869fc9f5f6b4dd6be8cdd5bc3ac0
|
0d5a281c671444bfa75d63caf1427a8c0e6e1177 |
|
13-Nov-2015 |
Roland Levillain <rpl@google.com> |
x86/x86-64 read barrier support for concurrent GC in Optimizing. This first implementation uses slow paths to instrument heap reference loads and GC root loads for the concurrent copying collector, respectively calling the artReadBarrierSlow and artReadBarrierForRootSlow (new) runtime entry points. Notes: - This implementation does not instrument HInvokeVirtual nor HInvokeInterface instructions (for class reference loads), as the corresponding read barriers are not stricly required with the current concurrent copying collector. - Intrinsics which may eventually call (on slow path) are disabled when read barriers are enabled, as the current slow path infrastructure does not support this case. - When read barriers are enabled, the code generated for a HArraySet instruction always go into the array set slow path for object arrays (delegating the operation to the runtime), as we are lacking a mechanism to keep a temporary register live accross a runtime call (needed for the instrumentation of type checking code, which requires two successive read barriers). Bug: 12687968 Change-Id: I14cd6107233c326389120336f93955b28ffbb329
|
29f33e6bdb6188f55de909f01c23d6bea7fd000e |
|
19-May-2015 |
Piotr Jastrzebski <haaawk@google.com> |
A few more string related changes. - Remove implementation of String::SetOffset (always zero). - Update the class layout : one less static reference field. Change-Id: I16e9c560659c6c5c608d14e31880ba27fec1b929
|
3a7cf8e22f325eceac651ced9b83c5a762f3d108 |
|
07-May-2015 |
Piotr Jastrzebski <haaawk@google.com> |
Revert "Combine image string char arrays into single array" This reverts commit 23c1d0ca7ab63f4adad88631bddefb769d0dcc2c. We cannot use this change unless the OpenJdk string class is modified to keep track of the char array offset and length. Change-Id: Ic20cea3f5731734d1eb7c3560dfacf612778cfcc
|
8a89433aafe6dbb88fa1659b4364d733e5af739b |
|
07-May-2015 |
Piotr Jastrzebski <haaawk@google.com> |
Update runtime to work with the OpenJdk String. The key difference here is that the OpenJdk String class does not maintain an offset or a count field into its backing char[] array. The offset is assumed to be zero, and the count is always array.length. Change-Id: I8b0518642f440cd38d24d9b90c575b7110233cc5
|
44095a15349445e87942a728a825bd32ea11be1d |
|
27-Apr-2015 |
Piotr Jastrzebski <haaawk@google.com> |
String: account for the hash32 field. Also temporarily disable intrinsics for now. Change-Id: I8158962efeba6e4ccb39cc147bff782aace3ffbc
|
52a7f5caebdf359ab877f1928aad59f1e9ad29fa |
|
19-Aug-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add class flags to class to help GC scanning Reduces GC time and pauses by reducing the number of loads required to scan an object. Average total GC time before on EvaluateAndApplyChanges (EAAC): 7.452s After: 7.144s Average GC pause times before on EAAC: 860.67us After: 722.75us Adding the class flags field cause a memory increase of ~24k system wide on low memory devices. Change-Id: I3f04212d5787bfbf5e55026584d149f55476105e
|
ed8990a467f3d93545221a33e43a9d34b1cc363f |
|
23-Jul-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add some more uninterruptible annotations Added to mirror sites, class linker, and intern table. Bug: 20072211 Change-Id: I2224bcefefaab05d325f14844b1514e3d719e649
|
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
|
c449e8b79aaaf156ce055524c41474cc1200ed5a |
|
11-Jun-2015 |
Igor Murashkin <iam@google.com> |
runtime: Minor cleanup and extra comments around interpreter Change-Id: I24c0b261de8cf737babd9d01bf679482d48c8bc9
|
3d21bdf8894e780d349c481e5c9e29fe1556051c |
|
22-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move mirror::ArtMethod to native Optimizing + quick tests are passing, devices boot. TODO: Test and fix bugs in mips64. Saves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS. Some of the savings are from removal of virtual methods and direct methods object arrays. Bug: 19264997 (cherry picked from commit e401d146407d61eeb99f8d6176b2ac13c4df1e33) Change-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d Fix some ArtMethod related bugs Added root visiting for runtime methods, not currently required since the GcRoots in these methods are null. Added missing GetInterfaceMethodIfProxy in GetMethodLine, fixes --trace run-tests 005, 044. Fixed optimizing compiler bug where we used a normal stack location instead of double on ARM64, this fixes the debuggable tests. TODO: Fix JDWP tests. Bug: 19264997 Change-Id: I7c55f69c61d1b45351fd0dc7185ffe5efad82bd3 ART: Fix casts for 64-bit pointers on 32-bit compiler. Bug: 19264997 Change-Id: Ief45cdd4bae5a43fc8bfdfa7cf744e2c57529457 Fix JDWP tests after ArtMethod change Fixes Throwable::GetStackDepth for exception event detection after internal stack trace representation change. Adds missing ArtMethod::GetInterfaceMethodIfProxy call in case of proxy method. Bug: 19264997 Change-Id: I363e293796848c3ec491c963813f62d868da44d2 Fix accidental IMT and root marking regression Was always using the conflict trampoline. Also included fix for regression in GC time caused by extra roots. Most of the regression was IMT. Fixed bug in DumpGcPerformanceInfo where we would get SIGABRT due to detached thread. EvaluateAndApplyChanges: From ~2500 -> ~1980 GC time: 8.2s -> 7.2s due to 1s less of MarkConcurrentRoots Bug: 19264997 Change-Id: I4333e80a8268c2ed1284f87f25b9f113d4f2c7e0 Fix bogus image test assert Previously we were comparing the size of the non moving space to size of the image file. Now we properly compare the size of the image space against the size of the image file. Bug: 19264997 Change-Id: I7359f1f73ae3df60c5147245935a24431c04808a [MIPS64] Fix art_quick_invoke_stub argument offsets. ArtMethod reference's size got bigger, so we need to move other args and leave enough space for ArtMethod* and 'this' pointer. This fixes mips64 boot. Bug: 19264997 Change-Id: I47198d5f39a4caab30b3b77479d5eedaad5006ab
|
e401d146407d61eeb99f8d6176b2ac13c4df1e33 |
|
22-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move mirror::ArtMethod to native Optimizing + quick tests are passing, devices boot. TODO: Test and fix bugs in mips64. Saves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS. Some of the savings are from removal of virtual methods and direct methods object arrays. Bug: 19264997 Change-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d
|
848f70a3d73833fc1bf3032a9ff6812e429661d9 |
|
15-Jan-2014 |
Jeff Hao <jeffhao@google.com> |
Replace String CharArray with internal uint16_t array. Summary of high level changes: - Adds compiler inliner support to identify string init methods - Adds compiler support (quick & optimizing) with new invoke code path that calls method off the thread pointer - Adds thread entrypoints for all string init methods - Adds map to verifier to log when receiver of string init has been copied to other registers. used by compiler and interpreter Change-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01
|
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
|
a5afcfc73141e5e378d79a326d02c5c2039fb025 |
|
29-Jan-2015 |
Narayan Kamath <narayan@google.com> |
Be more lenient with 4 byte UTF-8 sequences. Accept 4 byte sequences and convert them into surrogate pairs instead of expecting 2 separate 3 byte sequences each encoding one half of a surrogate pair. Note that in addition to supporting 4 byte sequences in strings from JNI, we also tolerate them in dex files. This is mainly for consistency, and there's no need to claim any sort of official support. bug: 18848397 bug: https://code.google.com/p/android/issues/detail?id=81341 Change-Id: Ibc98d29e59d98803e640f2489ea4c56912a59b29
|
fd04b6f89238af5da682805aa11899639fb4ee07 |
|
15-Nov-2014 |
Mathieu Chartier <mathieuc@google.com> |
Combine image string char arrays into single array Having one giant char array shared between all the strings saves memory since it avoids the 12 bytes of array overhead per image string. Also added substring finding based on prefixes, strings are added into the array in reverse sorted length. Image size goes from 11767808 -> 11100160. Bug: 17643507 Change-Id: I2a7f177b40d0458d5c50640643d8f16b0030bdce (cherry picked from commit 23c1d0ca7ab63f4adad88631bddefb769d0dcc2c)
|
23c1d0ca7ab63f4adad88631bddefb769d0dcc2c |
|
15-Nov-2014 |
Mathieu Chartier <mathieuc@google.com> |
Combine image string char arrays into single array Having one giant char array shared between all the strings saves memory since it avoids the 12 bytes of array overhead per image string. Also added substring finding based on prefixes, strings are added into the array in reverse sorted length. Image size goes from 11767808 -> 11100160. Bug: 17643507 Change-Id: I2a7f177b40d0458d5c50640643d8f16b0030bdce
|
677cd61ad05d993c4d3b22656675874f06d6aabc |
|
15-Oct-2014 |
Ian Rogers <irogers@google.com> |
Make ART compile with GCC -O0 again. Tidy up InstructionSetFeatures so that it has a type hierarchy dependent on architecture. Add to instruction_set_test to warn when InstructionSetFeatures don't agree with ones from system properties, AT_HWCAP and /proc/cpuinfo. Clean-up class linker entry point logic to not return entry points but to test whether the passed code is the particular entrypoint. This works around image trampolines that replicate entrypoints. Bug: 17993736 (cherry picked from commit 6f3dbbadf4ce66982eb3d400e0a74cb73eb034f3) Change-Id: I3e7595f437db4828072589d475a5453b7f31003e
|
6f3dbbadf4ce66982eb3d400e0a74cb73eb034f3 |
|
15-Oct-2014 |
Ian Rogers <irogers@google.com> |
Make ART compile with GCC -O0 again. Tidy up InstructionSetFeatures so that it has a type hierarchy dependent on architecture. Add to instruction_set_test to warn when InstructionSetFeatures don't agree with ones from system properties, AT_HWCAP and /proc/cpuinfo. Clean-up class linker entry point logic to not return entry points but to test whether the passed code is the particular entrypoint. This works around image trampolines that replicate entrypoints. Bug: 17993736 Change-Id: I5f4b49e88c3b02a79f9bee04f83395146ed7be23
|
cdfd39f579574a75b98e7ad48c69826b00361b27 |
|
30-Aug-2014 |
Mathieu Chartier <mathieuc@google.com> |
Change intern table to unordered set. Intern table active used bytes goes from 430k to 317k on system server. Similar %wise savings on other apps. Bug: 16238192 (cherry picked from commit d910fcef539e12ab181e56ec80684f39c4e95733) Change-Id: Ic70395124435c6f420a77e6d8639404a160f395a
|
d910fcef539e12ab181e56ec80684f39c4e95733 |
|
30-Aug-2014 |
Mathieu Chartier <mathieuc@google.com> |
Change intern table to unordered set. Intern table active used bytes goes from 430k to 317k on system server. Similar %wise savings on other apps. Bug: 16238192 Change-Id: I92de72de3eae0b76629e9da83db2c2d0fa613052
|
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
|
e63db27db913f1a88e2095a1ee8239b2bb9124e8 |
|
16-Jul-2014 |
Ian Rogers <irogers@google.com> |
Break apart header files. Create libart-gtest for common runtime and compiler gtest routines. Rename CompilerCallbacksImpl that is quick compiler specific. Rename trace clock source constants to not use the overloaded profiler term. Change-Id: I4aac4bdc7e7850c68335f81e59a390133b54e933
|
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
|
4f1ebc2b86c8467d1ecb3ec655316e6d7ee8b8b5 |
|
25-Jun-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add read barriers to the constant roots. This change makes it possible to concurrently scan the constant roots (the roots visited by Runtime::VisitConstantRoots()) such as the class of java.lang.Class by adding read barriers. Bug: 12687968 Change-Id: If1afea471c4e1093688d2db37b7f1fc2742edeef
|
ffddfdf6fec0b9d98a692e27242eecb15af5ead2 |
|
03-Jun-2014 |
Tim Murray <timmurray@google.com> |
DO NOT MERGE Merge ART from AOSP to lmp-preview-dev. Change-Id: I0f578733a4b8756fd780d4a052ad69b746f687a9
|
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
|
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
|
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
|
ee1d79a603c77c0667b27c075a983579d5c51f7e |
|
21-Feb-2014 |
Sebastien Hertz <shertz@google.com> |
Cleanup transaction support Updates Thread::CreateInternalStackTrace to support both transactional and non-transactional modes using template. Generalizes non-transactional mode for invariant fields (which are set only once). Removes ArrayLog::VisitRoots as we never create Array logs of ObjectArray. As ObjectArray elements are set using Object::SetFieldObject, they are already recorded in the object logs: the object is the array itself and the offset corresponds to the element index in this array. And also checks we never log ObjectArray in array logs. Fixes location of thrown exception when calling native method during class initialization. Change-Id: Idbc368d3b8292b85ff40bc8a7c559e085477bf89
|
d2fe10a3a34af171bf1631219cd2d6ff6b7778b5 |
|
15-Jan-2014 |
Sebastien Hertz <shertz@google.com> |
Remove blacklist Removes the class initialization blacklist and use transaction to detect and revert class initialization attempting to invoke native method. This only concerns class initialization happening at compilation time when generating an image (like boot.art for the system). In transactional mode, we log every object's field assignment and array update. Therefore we're able to abort a transaction to restore values of fields and array as they were before the transaction starts. We also log changes to the intern string table so we can restore its state prior to transaction start. Since transactional mode only happens at compilation time, we don't need to log all these changes at runtime. In order to reduce the overhead of testing if transactional mode is on/off, we templatize interfaces of mirror::Object and mirror::Array, respectively responsible for setting a field and setting an array element. For various reasons, we skip some specific fields from transaction: - Object's class and array's length must remain unchanged so garbage collector can compute object's size. - Immutable fields only set during class loading: list of fields, method, dex caches, vtables, ... as all classes have been loaded and verified before a transaction occurs. - Object's monitor for performance reason. Before generating the image, we browse the heap to collect objects that need to be written into it. Since the heap may still holds references to unreachable objects due to aborted transactions, we trigger one collection at the end of the class preinitialization phase. Since the transaction is held by the runtime and all compilation threads share the same runtime, we need to ensure only one compilation thread has exclusive access to the runtime. To workaround this issue, we force class initialization phase to run with only one thread. Note this is only done when generating image so application compilation is not impacted. This issue will be addressed in a separate CL. Bug: 9676614 Change-Id: I221910a9183a5ba6c2b99a277f5a5a68bc69b5f9
|
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
|
29501cf5663c7951717bae3521815d121a778396 |
|
08-Feb-2014 |
Ian Rogers <irogers@google.com> |
Make primitive getter/setters consistently signed. Use QuasiAtomic for Cas64, which fixes the MIPS build of ART. Change-Id: Id1dba264b148a7ce9bcc637159ec733cfbd88b70
|
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
|
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
|
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
|
423d2a3dcbb260b020efb5da59f784c9f02accbf |
|
13-Sep-2013 |
Mathieu Chartier <mathieuc@google.com> |
Add support for changing roots through the root visitor callback. Needed for copying collectors. Change-Id: Icc4a342a57e0cfb79587edb02ef8c85e08808877
|
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
|