summaryrefslogtreecommitdiff
path: root/runtime/monitor_pool.cc
AgeCommit message (Collapse)Author
2024-01-25Add visibility attributes in runtime/m* Dmitrii Ishcheikin
Bug: 260881207 Test: presubmit Test: abtd app_compat_drm Test: abtd app_compat_top_100 Test: abtd app_compat_banking Change-Id: Ice9204277b257c6e3c25adb690bddfd834d24689
2019-04-01ObjPtr<>-ify Monitor/-Pool. Vladimir Marko
Test: m test-art-host-gtest Test: testrunner.py --host Bug: 31113334 Change-Id: I2d2ebc5ef56e73e5678e0cfcd84c479611dfcca8
2017-12-07ART: Replace base/logging with android-base/logging Andreas Gampe
Replace wherever possible. ART's base/logging is now mainly VLOG and initialization code that is unnecessary to pull in and makes changes to verbose logging more painful than they have to be. Test: m test-art-host Change-Id: I3e3a4672ba5b621e57590a526c7d1c8b749e4f6e
2017-11-08cpplint: Cleanup errors Igor Murashkin
Cleanup errors from upstream cpplint in preparation for moving art's cpplint fork to upstream tip-of-tree cpplint. Test: cd art && mm Bug: 68951293 Change-Id: I15faed4594cbcb8399850f8bdee39d42c0c5b956
2017-07-24ART: Include cleanup Andreas Gampe
Let clang-format reorder the header includes. Derived with: * .clang-format: BasedOnStyle: Google IncludeIsMainRegex: '(_test|-inl)?$' * Steps: find . -name '*.cc' -o -name '*.h' | xargs sed -i.bak -e 's/^#include/ #include/' ; git commit -a -m 'ART: Include cleanup' git-clang-format -style=file HEAD^ manual inspection git commit -a --amend Test: mmma art Change-Id: Ia963a8ce3ce5f96b5e78acd587e26908c7a70d02
2017-06-02ART: Introduce thread-current-inl.h Andreas Gampe
Factor out Thread::Current() code into its own -inl file to remove transitive includes. This requires at the same time correcting mutex.h, i.e., moving some functions into mutex-inl.h. Test: m test-art-host Change-Id: I88f888b604e0897368d9b483edce6ce4332dd9c9
2016-08-30ART: SHARED_REQUIRES to REQUIRES_SHARED Andreas Gampe
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
2016-04-28Correct monitor pool synchronization Hans Boehm
The previous implementation allowed a thread looking up a monitor to see an uninitialized monitor_chunks_ list if the list had just been resized. The obvious small fix would be to replace the relaxed load in LookupMonitor with an acquire load. But the extra fence (on ARM) may involve an appreciable performance hit. This instead redesigns the data structure to avoid the race in LookupMonitor, along with the need to use atomics there at all. The down side is a little more address arithmetic in LookupMonitor(), a mild decrease in the limit on the total number of monitors, and use of one extra page, since we now always reserve space for the first page worth of monitor chunk pointers. To me, the new algorithm feels cleaner and easier to reason about. Although this problem was externally reported, it seems unlikely that it was responsible for frequent failures. It could only be triggered when the monitor chunk list was resized, which should be quite rare. Bug: 28385279 Change-Id: I433155d91702878f6b114480eda1fbf09706f623
2016-03-10ART: Release all resource on MonitorPool destruction Andreas Gampe
To be valgrind-clean, we need to release the current metadata and all chunks on destruction. Bug: 27156726 Change-Id: Ia51cea139a6e9669975b6ac045f5223cd68f1f6a
2016-03-03ART: Fix UTF test and monitor pool old chunks Andreas Gampe
Zero-initialize buffers in utf_test. UTF conversion does not append a zero terminator, but the test uses strlen to check the byte count. Move to unique_ptr for storing old monitor-pool chunk data to fix a leak. Bug: 27156726 Change-Id: I14424c6f98cf47beab6243f83a335bd6a682c638
2015-07-22Move to newer clang annotations Mathieu Chartier
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
2014-08-29Add native memory accounting through custom allocator. Mathieu Chartier
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 Change-Id: Ibb470ef2e9c9a24563bb46422d46a55799704d82 (cherry picked from commit 5369c40f75fdcb1be7a7c06db212ce965c83a164)
2014-08-06Add card table test. Mathieu Chartier
Tests some of the functionality supported by the card table. Removed some logcat spam from monitor_pool. Change-Id: I1423816a72572f78aca44552effa2b4c6aac46c8
2014-07-10Use memory chunks for monitors on LP64 Andreas Gampe
Monitor IDs in lock words are only 30b. On a 32b system that works fine, as memory is usually aligned enough that shifting works out. On 64b systems, the virtual memory space is too large for that. This adds memory chunks into which we allocate the monitors so that we have base_addr + offset and can use the offset as the monitor ID. To allow for relatively compact but growable storage, we use a list of chunks. Added a global lock for the monitor pool. Change-Id: I0e290c4914a2556e0b2eef9902422d7c4dcf536d
2014-03-06Fix issues with clang and BUILD_HOST_64bit. Ian Rogers
Change-Id: Id954d0c1144de6eaf89a4d27d205e3bf6ccb655f
2014-03-05Lock ranking fix for monitor IDs. Ian Rogers
Free-ing objects holds a lock and so the monitor ID lock needs to be of a lower rank. Change-Id: I594ac04c1f76c5d6fd2e752886040565001d4eaf
2014-02-06Object model changes to support 64bit. Ian Rogers
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