summaryrefslogtreecommitdiffstats
path: root/runtime/base
Commit message (Collapse)AuthorAgeFilesLines
* ART: Change UnresolvedMergedType internal representationAndreas Gampe2015-08-103-13/+41
| | | | | | | | | | Squashed cherry-picks: * 067f1ed7816cf4eb5d6258ca31b387ddb2073ab7 * 750f7c2827318f6d07620f2ef0321218ea4d8670 * 2f90b3415aadc2587d26c767c6bfb235797119a8 * 2ea7b70b2347969f3735bd0ec1b462bd6d2ff1bd Bug: 22881413
* ART: Fix streaming tracing issuesAndreas Gampe2015-06-261-0/+2
| | | | | | | | | | | | Fix a lock ordering issue in streaming-mode tracing. Fix a moving-GC issue in streaming-mode tracing. DexCache objects are not good keys for a map. Expose streaming mode for testing in run-tests. Bug: 21760614 Change-Id: Idcd0575684ee3cc0cec3f81b4fdd0d5988c11e8c
* New experimental GC stress modeMathieu Chartier2015-06-221-1/+1
| | | | | | | | | | | | | | | Tries to do a GC for every unique call stack (up to 16 frames). The goal is to catch moving GC bugs and lock violations without being rediculously slow. Some tests fail on 64 bits, 32 bit host doesn't work. N5 is booting. Added runtime -Xgc options: gcstress and nogcstress. Bug: 21664466 (cherry picked from commit 310008008c90fea246efd00cb99ee7ded97c5209) Change-Id: Icb8e420f2048e8ee83bcca7937563166a2638f5c
* JDWP: asynchronous invoke command handlingSebastien Hertz2015-06-121-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The JDWP thread used to wait for the result of a method invocation running in an event thread. But doing that prevents the JDWP thread from processing incoming commands from the debugger if the event thread gets suspended by a debug event occurring in another thread. In Android Studio (or another IDE), this leads to the debugger being blocked (with the famous message "Waiting until last debugger command completes" of Android Studio / IntelliJ) because it is actually waiting for the reply of its latest command while the JDWP thread cannot process it. This CL changes the way invoke commands (ClassType.InvokeCommand, ClassType.NewInstance and ObjectReference.InvokeCommand) are handled in the ART runtime. The JDWP thread no longer waits for the event thread to complete the method invocation. It now simply waits for the next JDWP command to process. This means it does not send any reply for invoke commands, except if the information given by the debugger is wrong. In this case, it still sends a reply with the appropriate error code. The event thread is now responsible for sending the reply (containing the result and the exception object of the invoked method) before going back to the suspended state. In other words, we add special handling for invoke commands so they are handled asynchronously while other commands remained handled synchronously. In the future, we may want to handle all commands asynchronously (using a queue of reply/event for instance) to remove the special handling code this CL is adding. Now the JDWP thread can process commands while a thread is invoking a method, it is possible for the debugger to detach (by sending a VirtualMachine.Dispose command) before the invocation completes. In that situation, we must not suspend threads again (including the event thread that executed the method) because they would all remain suspended forever. Also minor cleanup of the use of JDWP constants and update comments. Bug: 21515842 Bug: 18899981 (cherry picked from commit cbc5064ff05179b97b416f00ca579c55e38cd7d9) Change-Id: I8d31006043468913ee8453212e6d16e11fcfe4ea
* Move image intern table into imageMathieu Chartier2015-06-111-9/+91
| | | | | | | | | | | | | Previously we recreated this intern table during runtime startup. This added 50-100ms of boot time. Fixed bug where we didn't copy over hashcodes into the image. Deleted some stale code. Bug: 20727525 Bug: 19569780 Change-Id: I08959e9aa2a73cedb52f393033e2ffea3a26e76b
* Use runFinalizationWithTimeout for native allocationsMathieu Chartier2015-06-051-2/+2
| | | | | | | | Prevents deadlocks by not waiting longer than 250ms for finalizers to complete. Bug: 21544853 Change-Id: I57b2f7ae8b74185922eb3c15ba0ab71a4d2348aa
* Move mirror::ArtMethod to nativeMathieu Chartier2015-06-025-3/+65
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Fix mac build: include <sys/time.h> in time_utils.cc .Vladimir Marko2015-05-261-0/+4
| | | | | | | | | | Required for gettimeofday(). Not needed in utils.cc . Bug: 13925192 (cherry picked from commit ce39200492e2715a94d96fbd39fa42b46115c255) Change-Id: If40694965b84605819cac11a7937821aa74db82b
* ART: Clean up arm64 kNumberOfXRegisters usage.Vladimir Marko2015-05-2615-16/+1157
| | | | | | | | | | | | | | | | | | | | | Avoid undefined behavior for arm64 stemming from 1u << 32 in loops with upper bound kNumberOfXRegisters. Create iterators for enumerating bits in an integer either from high to low or from low to high and use them for <arch>Context::FillCalleeSaves() on all architectures. Refactor runtime/utils.{h,cc} by moving all bit-fiddling functions to runtime/base/bit_utils.{h,cc} (together with the new bit iterators) and all time-related functions to runtime/base/time_utils.{h,cc}. Improve test coverage and fix some corner cases for the bit-fiddling functions. Bug: 13925192 (cherry picked from commit 80afd02024d20e60b197d3adfbb43cc303cf29e0) Change-Id: I905257a21de90b5860ebe1e39563758f721eab82
* Stop wrapping close(2) with TEMP_FAILURE_RETRY in art.Elliott Hughes2015-05-151-1/+1
| | | | | | | | | | Note that all the TEMP_FAILURE_RETRY([A-Z] calls in this file are wrong. The member functions return -errno, so only an EPERM failure will return -1 (but errno should be EPERM, so you won't loop). Bug: http://b/20501816 Change-Id: Ibde6a2c7bf92469d008d6d510f9391669ae37a84 (cherry picked from commit 6a887d6a1d1ca089b48663a5ae11f973b98785a9)
* Quick: Fix DCE to mark wide register overlaps correctly.Vladimir Marko2015-05-122-5/+7
| | | | | | | | | | | Previously we missed some cases of overlap with registers coming from previous blocks. Bug: 20640451 (cherry picked from commit 83d46ef1eaa8fdecadfdb9564d80e50b42646c37) Change-Id: I1be879edfbc900b70cee411d9e31e5a4b524530a
* ART: Fix Trace types, check minimum buf sizeAndreas Gampe2015-04-251-0/+19
| | | | | | | | | Also make streaming mode adhere to the given buffer (and fix the case where the buffer is too small for a packet). This is important to not lose too much tracing information when the runtime is destroyed with an unflushed buffer. Change-Id: I6525fe4326ac5c3d7c9cda41c54a2a911ca889b7
* Replace NULL with nullptrMathieu Chartier2015-04-2211-65/+70
| | | | | | | Also fixed some lines that were too long, and a few other minor details. Change-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb
* ART: Update loop info of all nested loops when inliningDavid Brazdil2015-04-213-0/+72
| | | | | | | | When inlining into a nested loop, the inliner would only add the new blocks into the innermost loop info object. This patch fixes that and modifies SsaChecker to verify the property. Change-Id: I21d343a6f7d972f5b7420701f816c65ab3f20566
* Opt compiler: Implement parallel move resolver without using swap.Zheng Xu2015-04-171-0/+5
| | | | | | | | | | | | | | | | | | The algorithm of ParallelMoveResolverNoSwap() is almost the same with ParallelMoveResolverWithSwap(), except the way we resolve the circular dependency. NoSwap() uses additional scratch register to resolve the circular dependency. For example, (0->1) (1->2) (2->0) will be performed as (2->scratch) (1->2) (0->1) (scratch->0). On architectures without swap register support, NoSwap() can reduce the number of moves from 3x(N-1) to (N+1) when there is circular dependency with N moves. And also, NoSwap() algorithm does not depend on architecture register layout information, which means it can support register pairs on arm32 and X/W, D/S registers on arm64 without additional modification. Change-Id: Idf56bd5469bb78c0e339e43ab16387428a082318
* getRuntimeStat() support (ART).Hiroshi Yamauchi2015-04-132-1/+18
| | | | | | | | | | | Export some runtime stats (currently GC stats) via VMDebug.getRuntimeStat(). Added several new GC stats such as blocking GC counts and GC count histograms. Bug: 19825248 Change-Id: I8ece9ed241dc3982dfd983d7159090ba82940dce
* ART: Clean up includes.Vladimir Marko2015-04-132-2/+7
| | | | | | | Reduce dependencies to improve incremental build times. Break up circular dependency involving class_linker-inl.h. Change-Id: I4be742c5c2b5cd9855beea86630fd68aab76b0db
* Move ArtField to nativeMathieu Chartier2015-04-103-9/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add linear alloc. Moved ArtField to be native object. Changed image writer to put ArtFields after the mirror section. Savings: 2MB on low ram devices 4MB on normal devices Total PSS measurements before (normal N5, 95s after shell start): Image size: 7729152 bytes 23112 kB: .NonMoving 23212 kB: .NonMoving 22868 kB: .NonMoving 23072 kB: .NonMoving 22836 kB: .NonMoving 19618 kB: .Zygote 19850 kB: .Zygote 19623 kB: .Zygote 19924 kB: .Zygote 19612 kB: .Zygote Avg: 42745.4 kB After: Image size: 7462912 bytes 17440 kB: .NonMoving 16776 kB: .NonMoving 16804 kB: .NonMoving 17812 kB: .NonMoving 16820 kB: .NonMoving 18788 kB: .Zygote 18856 kB: .Zygote 19064 kB: .Zygote 18841 kB: .Zygote 18629 kB: .Zygote 3499 kB: .LinearAlloc 3408 kB: .LinearAlloc 3424 kB: .LinearAlloc 3600 kB: .LinearAlloc 3436 kB: .LinearAlloc Avg: 39439.4 kB No reflection performance changes. Bug: 19264997 Bug: 17643507 Change-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c
* Merge "Fix JDWP race at runtime shutdown"Sebastien Hertz2015-04-081-0/+1
|\
| * Fix JDWP race at runtime shutdownSebastien Hertz2015-04-011-0/+1
| | | | | | | | | | | | | | | | | | | | When the runtime shuts down, it closes the JDWP connection with the debugger. However, if a JDWP command is still being processed by the JDWP handler thread when we close the connection, we won't be able to send its reply. Bug: 19628620 Change-Id: I20301325a347d66f3b9ef95ebe8f156abafb1f76
* | ART: Enable more Clang warningsAndreas Gampe2015-04-061-1/+1
| | | | | | | | Change-Id: Ie6aba02f4223b1de02530e1515c63505f37e184c
* | ART: Enable Clang's -WdeprecatedAndreas Gampe2015-04-062-2/+3
|/ | | | | | | | | Replace throw() with noexcept. Add default copy constructors and copy assignment constructors for cases with destructors, as the implicit definition is deprecated. Change-Id: Ice306a3f510b072b00bec4d4360f7c8055135c9d
* Use unique location catalogs to encode Dex register maps.Roland Levillain2015-03-311-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | - For each CodeInfo object (i.e. for each method), compute a variable index size location catalog of unique Dex register locations. In Dex register maps, instead of storing the actual location of a (live) Dex register, store the index of the location catalog entry containing that Dex register location. - Adjust art::StackMapStream, art::CheckReferenceMapVisitor::CheckOptimizedMethod, art::StackVisitor::GetVRegFromOptimizedCode, and art::StackVisitor::SetVRegFromOptimizedCode. - Add LoadBits and StoreBits methods to art::MemoryRegion to load and store a block of adjacent bits in a memory region. - Update compiler/optimizing/stack_map_test.cc. - Remove the default value for parameter EmptyFn of art::HashMap. This default value did not seem to make sense, as it would create an "empty function" for type Key by default, whereas art::HashMap expects an "empty function" for type std::pair<Key, Value>. Change-Id: Id9e49d7756c253ce41c36630cd832208d06c2e28
* ART: Force constants into the entry blockDavid Brazdil2015-03-261-11/+6
| | | | | | | | | | | | | | | | | | Optimizations such as GVN and BCE make the assumption that all constants are located in the entry block of the CFG, but not all passes adhere to this rule. This patch makes constructors of constants private and only accessible to friend classes - HGraph for int/long constants and SsaBuilder for float/double - which ensure that they are placed correctly and not duplicated. Note that the ArenaAllocatorAdapter was modified to not increment the ArenaAllocator's internal reference counter in order to allow for use of ArenaSafeMap inside an arena-allocated objects. Because their destructor is not called, the counter does not get decremented. Change-Id: I36a4fa29ae34fb905cdefd482ccbf386cff14166
* Clean up hash setMathieu Chartier2015-03-182-56/+105
| | | | | | | Added vertical whitespace, const iterators, made some functions const. Change-Id: I188dc0384a98d6dae2822f0ac38b740f2356c23d
* ART: Fix build for counting arena allocations.Vladimir Marko2015-03-171-1/+1
| | | | Change-Id: I1fbb8cc9c4934cc81cb80c5c2107c63fd16a0a05
* Change method verifiers to be thread local rootsMathieu Chartier2015-03-132-8/+1
| | | | | | Bug: 10921004 Change-Id: I3a1425d76cd380587ba67ef6d5ec1227564e55bf
* ART: Add entries_ lock for race conditionbowen_lai2015-03-132-1/+9
| | | | | | | | | | GCDaemon thread would visit incorrect RegType content when there is another thread initializing classes. Add a lock to protect entries_. https://code.google.com/p/android/issues/detail?id=159849 Change-Id: Iabaa1c7f5cc5106b60a6e3856152e0797e8a5d6d
* Add way to select arena type at runtimeMathieu Chartier2015-03-122-48/+57
| | | | | | | We now use MemMap for JIT, and malloc for everything else. This should help fix the allegedly regressed compile times. Change-Id: I6a6552738933f9d7ee3bd23f45e310818b19b70d
* Merge "Create OatFileAssistant class for assisting with oat files."Richard Uhler2015-03-101-0/+1
|\
| * Create OatFileAssistant class for assisting with oat files.Richard Uhler2015-03-091-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The oat file assistant is used for determining whether dex2oat or patchoat is needed, for running dex2oat or patchoat as needed to make an oat file up to date, and to load dex files associated with a given dex location. The introduction of the OatFileAssistant class is meant to clean up and consolidate code related to the management of oat files that was duplicated and spread across dalvik_system_DexFile.cc and class_linker.cc. Bug: 11301553 Change-Id: I0c16027b9bae4570c2c50faa9c14f581c0cbafb8
* | Trim arenas for JITMathieu Chartier2015-03-092-5/+29
|/ | | | | | | | | | | | | | | | | | | | | | | Moved arena pool into the runtime. Added arena trimming to arena pool. When called, this madvises the used memory. Changed the JIT compiler to trim arenas after compilation. Changed the arena mmap name to dalvik-LinearAlloc. Native PSS before: 80353 kB: Native 80775 kB: Native 78116 kB: Native After: 73357 kB: Native 70181 kB: Native 70306 kB: Native Bug: 17950037 Bug: 17643507 Bug: 19264997 Change-Id: I63e7a898fd6e909c2c677fa57b5917a7b1398930
* Include what we use.Dan Albert2015-03-041-0/+1
| | | | | | Newest libc++ update fixes some of the header cruft. Change-Id: Ic5019ffcb272274ac3b21627218d65a887074458
* Wait for threads to finish unregisteringMathieu Chartier2015-03-032-1/+10
| | | | | | | | | | | | | | | | | | | There was a race where Thread::join would return before the thread was unregistered. This caused a problem with Daemons.stop since the thread list could get deleted before the daemon thread was removed from list_. This caused occasional "Request to unregister unattached thread" errors and warnings. The fix is to wait until threads finish registering before destroying the thread list. The only threads which can be unregistering at this point are the daemons we stopped earlier during the runtime shutdown process. The issue is that thread join finishes before we remove the thread from the thread list. Also some cleanup. Bug: 18713034 Change-Id: I8921122fe8462643a6b814b5f00632481e3831fb
* Add support for .bss section in oat files.Vladimir Marko2015-03-021-1/+1
| | | | Change-Id: I779b80b8139d9afdc28373f8c68edff5df7726ce
* Merge "ART: Fix "unused parameters""Andreas Gampe2015-02-253-15/+15
|\
| * ART: Fix "unused parameters"Andreas Gampe2015-02-243-15/+15
| | | | | | | | | | | | | | | | GCC 4.8 decides that parameters for functions implemented with "= default" are unused. This currently only impacts x86, but remove the parameter names anyways. Change-Id: I01865faa81af68c4c0e0b1cb1fb19e88ef548769
* | Revert "Revert "Add JIT""Mathieu Chartier2015-02-242-0/+2
|/ | | | | | | | Added missing EntryPointToCodePointer. This reverts commit a5ca888d715cd0c6c421313211caa1928be3e399. Change-Id: Ia74df0ef3a7babbdcb0466fd24da28e304e3f5af
* Revert "Add JIT"Nicolas Geoffray2015-02-242-2/+0
| | | | | | | | | | | | | | | Sorry, run-test crashes on target: 0-05 12:15:51.633 I/DEBUG (27995): Abort message: 'art/runtime/mirror/art_method.cc:349] Check failed: PcIsWithinQuickCode(reinterpret_cast<uintptr_t>(code), pc) java.lang.Throwable java.lang.Throwable.fillInStackTrace() pc=71e3366b code=0x71e3362d size=ad000000' 10-05 12:15:51.633 I/DEBUG (27995): r0 00000000 r1 0000542b r2 00000006 r3 00000000 10-05 12:15:51.633 I/DEBUG (27995): r4 00000006 r5 b6f9addc r6 00000002 r7 0000010c 10-05 12:15:51.633 I/DEBUG (27995): r8 b63fe1e8 r9 be8e1418 sl b6427400 fp b63fcce0 10-05 12:15:51.633 I/DEBUG (27995): ip 0000542b sp be8e1358 lr b6e9a27b pc b6e9c280 cpsr 40070010 10-05 12:15:51.633 I/DEBUG (27995): Bug: 17950037 This reverts commit 2535abe7d1fcdd0e6aca782b1f1932a703ed50a4. Change-Id: I6f88849bc6f2befed0c0aaa0b7b2a08c967a83c3
* Add JITMathieu Chartier2015-02-232-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently disabled by default unless -Xjit is passed in. The proposed JIT is a method JIT which works by utilizing interpreter instrumentation to request compilation of hot methods async during runtime. JIT options: -Xjit / -Xnojit -Xjitcodecachesize:N -Xjitthreshold:integervalue The JIT has a shared copy of a compiler driver which is accessed by worker threads to compile individual methods. Added JIT code cache and data cache, currently sized at 2 MB capacity by default. Most apps will only fill a small fraction of this cache however. Added support to the compiler for compiling interpreter quickened byte codes. Added test target ART_TEST_JIT=TRUE and --jit for run-test. TODO: Clean up code cache. Delete compiled methods after they are added to code cache. Add more optimizations related to runtime checks e.g. direct pointers for invokes. Add method recompilation. Move instrumentation to DexFile to improve performance and reduce memory usage. Bug: 17950037 Change-Id: Ifa5b2684a2d5059ec5a5210733900aafa3c51bca
* ART: Introduce NO_RETURN, Mark DoLongJump noreturnAndreas Gampe2015-02-231-0/+3
| | | | | | | Add NO_RETURN macro that adds C++11 noreturn attribute. Mark DoLongJump methods as noreturn. Change-Id: Ifde4318e370493237050d4c1349285a0382df23f
* Move arenas into runtimeMathieu Chartier2015-02-198-0/+1436
| | | | | | | | | | Moved arena pool into the runtime. Motivation: Allow GC to use arena allocators, recycle arena pool for linear alloc. Bug: 19264997 Change-Id: I8ddbb6d55ee923a980b28fb656c758c5d7697c2f
* art: Fix bug in VariantMap::SetIgor Murashkin2015-02-172-1/+25
| | | | | Bug: 19295410 Change-Id: I7827583846d710698c0e7bc0ec1a2c3bf901bd50
* Merge "art: Refactor RuntimeOptions/ParsedOptions"Igor Murashkin2015-02-042-0/+621
|\
| * art: Refactor RuntimeOptions/ParsedOptionsIgor Murashkin2015-02-042-0/+621
| | | | | | | | | | | | | | | | | | | | | | | | | | Refactor the RuntimeOptions to be a type-safe map (VariantMap, see runtime_options.h) and the ParsedOptions to delegate the parsing to CmdlineParser (see cmdline/cmdline_parser.h). This is the start of a command line parsing refactor, and may include more in the future (dex2oat, patchoat, etc). For more details of the command line parsing generator usage see cmdline/README.md Change-Id: Ic67c6bca5e1f33bf2ec60e2e3ff8c366bab91563
* | Disable clang optimization to boot up on arm64.Chih-Hung Hsieh2015-01-301-0/+4
|/ | | | | | | | | | | | | On arm64 devices, clang compiled lib64/libart.so repeatedly crashes during boot up stage. That prevents a stable adb connection. When optimization of BitVector::NumSetBits is disabled, we can boot up to Android home screen, although some Apps are still unstable. This is a temporary workaround only for clang/llvm arm64 target, to enable concurrent debugging on other bugs. BUG: 19180814 Change-Id: Id82497ce4be0b2c30d36679d15394848d826f50c
* Print lock level in ExclusiveUnlockMathieu Chartier2015-01-271-1/+2
| | | | | Bug: 18713034 Change-Id: I83e1bf1e2023b595d8ddf20008935c75b2b0aa0c
* ART: More Quick cleanupAndreas Gampe2015-01-261-0/+2
| | | | | | | | Remove frontend, move code to QuickCompiler. Fix some includes. Change-Id: Iedd8f339ec76635e48b166e285f7fc571fc948ac
* Merge "ART: On shutdown, only warn on mutex contention"Andreas Gampe2015-01-231-10/+13
|\
| * ART: On shutdown, only warn on mutex contentionAndreas Gampe2015-01-231-10/+13
| | | | | | | | | | | | | | | | | | | | Do not abort, as daemon threads may still be active. Bug: 17894429 (cherry picked from commit c0440f69ebf051ff2ffdc00de51005a040014462) Change-Id: I7c1d50ff8d4a5e150279e703a69c8f2f1d423e6b