)]}'
{
  "log": [
    {
      "commit": "fa595885339140c3507f26d93cdc6b99081e23c5",
      "tree": "19d6240afee048aa37a778f09996c6ecad5266a6",
      "parents": [
        "918e9af6a7259e7178ec10257f568a60e832a962"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Aug 06 17:40:09 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Aug 09 07:36:39 2019 +0000"
      },
      "message": "Fix setting/getting the native priority of a thread.\n\nBug: 138415922\nTest: 720-thread-priority\nChange-Id: I6e1f34fce3838b7904281be00f315e5b7ade0c78\n"
    },
    {
      "commit": "9f18fbc433bba51a5b81249989a8726558135528",
      "tree": "5a293f961924edf35f6ad4be9935a71c5ba69761",
      "parents": [
        "6f382013399fc8ba8b2717e4d24d91978d2bc0f7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 31 15:06:12 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 01 16:36:41 2019 +0000"
      },
      "message": "Make classes visibly initialized faster.\n\nReduce the batch size from 32 to 16 and the trigger count\nfrom 1024 to 128.\n\nThis may help system health micro-benchmarks (b/138601570)\nbut I\u0027m unable to run the forrest tests locally to verify.\n\nBug: 138601570\nBug: 36692143\nTest: m\nChange-Id: I4d938ddbd284ebe624d146eca9ad59ceefeba4d4\n"
    },
    {
      "commit": "bf12191214c0d6215a98dfe846a51230d995dad9",
      "tree": "085c1059014ce66fdb7eceb6e8502d906f0eacbd",
      "parents": [
        "78342419743cb6d0f17dc2d4c0cd99d18d9c83d6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 04 13:49:05 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 26 11:10:26 2019 +0000"
      },
      "message": "Implement ClassStatus::kVisiblyInitialized.\n\nPreviously all class initialization checks involved a memory\nbarrier to ensure appropriate memory visibility. We change\nthat by introducing the kVisiblyInitialized status which can\nbe checked without a memory barrier. Before we mark a class\nas visibly initialized, we run a checkpoint on all threads\nto ensure memory visibility. This is done in batches for up\nto 32 classes to reduce the overhead.\n\nAvoiding memory barriers in the compiled code reduces code\nsize and improves performance. This is also the first step\ntoward fixing a long-standing synchronization bug 18161648.\n\nPrebuilt sizes for aosp_taimen-userdebug:\n - before:\n   arm/boot*.oat: 19150696\n   arm64/boot*.oat: 22574336\n   oat/arm64/services.odex: 21929800\n - after:\n   arm/boot*.oat: 19134508 (-16KiB)\n   arm64/boot*.oat: 22553664 (-20KiB)\n   oat/arm64/services.odex: 21888760 (-40KiB)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots\nTest: run-gtests.sh -j4\nTest: testrunner.py --target --optimizing\nTest: Manually diff `m dump-oat-boot` output from before\n      with output after this CL without codegen changes,\n      with `sed` replacements for class status. Check that\n      only checksums and the oatdump runtime values of\n      DexCache.dexFile differ.\nBug: 18161648\nBug: 36692143\nChange-Id: Ida10439d347e680a0abf4674546923374ffaa957\n"
    },
    {
      "commit": "01ecfa1c31282e12b18df5b2f555898a0c3a2e35",
      "tree": "f3f71be061fb0b411ec9434fb23e0b2a8b787075",
      "parents": [
        "2be4306b7669a5aca3e936c531c5ec370ae98e92"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jul 18 12:57:47 2019 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jul 26 08:41:54 2019 +0000"
      },
      "message": "Refactor Core Plaform API checking\n\nMove Core Platform API check logic to hidden_api_jni.{h,cc}.\n\nUse libunwindstack for walking stack as builtin isn\u0027t robust without\nframe pointers. This is moderately expensive so we currently walk a\nmaximum of 3 frames.\n\nChecks are now performed by placing ScopedCorePlatformApiCheck\ninstances at potential points of entry via JNI. Specifically, where\nJNI interfaces implement methods for getting field and method ids. The\ncheck is only performed on the outermost instance of the\nScopedCorePlatformApiCheck since only the outer caller is of interest.\n\nState for the checks is stored in the current Thread instance since\nthe JNI interface signatures are fixed and we need a way to be able to\ndetermine whether a ScopedCorePlatformApiCheck is the outermost\ninstance and whether the outmost instance was approved.\n\nTest: build eng build (has checkjni), boot, grep logcat nio/Buffer\nTest: build user build (regular jni), boot, grep logcat nio/Buffer\nBug: 130336799\nBug: 136276414\nChange-Id: If1261046dd57c007bc77b213daaa5f733151123e\n"
    },
    {
      "commit": "2be4306b7669a5aca3e936c531c5ec370ae98e92",
      "tree": "e20868e4e3303463dbe9eba507b89165f2985a06",
      "parents": [
        "82372004427646e048b47ca507e7409d8edfeaf5"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 24 16:52:33 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 25 22:18:20 2019 +0000"
      },
      "message": "ART: Use initial-exec TLS mode for Thread TLS\n\nAvoid unnecessary overhead. This works as on the host we do not\nrun complicated workloads with other libraries etc, so glibc\u0027s\npreallocated storage is large enough to fit this.\n\nBug: 138329277\nTest: m test-art-host\nChange-Id: Ibd013521b7fc043b62ed79a72e94c0c002c7c402\n"
    },
    {
      "commit": "82372004427646e048b47ca507e7409d8edfeaf5",
      "tree": "6f109e4b2428b2a2340bf4ed93d8fc9f30b0f0dc",
      "parents": [
        "a47a6e89407fa9f0234d44c2be8451f4838c0780"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 24 15:42:09 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 25 21:38:53 2019 +0000"
      },
      "message": "ART: Use thread_local on the host for ART Thread*\n\nUse thread_local instead of a pthread key for Thread::Current().\nRetain the pthread key as we are still using it for some sanity\nchecks in ThreadExitCallback.\n\nBug: 138329277\nTest: m test-art-host\nChange-Id: Idfe43bc279459e307e2165d3a3762af09230bdfd\n"
    },
    {
      "commit": "79d6c800cd8aa1da335ea0523c391852780ac02a",
      "tree": "a77faf41d7b658709113c72d7eaaaa1ce2ded6b5",
      "parents": [
        "01fbfbebceb00b94cc54738ebf425b6c4a79211a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 27 15:50:11 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 28 14:58:17 2019 +0000"
      },
      "message": "Revert^2 \"Support using opaque JNI ids\"\n\nWe weren\u0027t handing the fact that encoding jmethodIDs could cause OOM\nexceptions in some places in reflection.cc. This could lead to\nattempting to use a null jmethodID as if it were a real id. This issue\nis fixed by the parent CL.\n\nThis reverts commit b476a29a2c.\nThis reverts commit 3b2905366c.\nThis Unreverts commit d5d645ffec.\nThis Unreverts commit 21d5994583.\n\nReason for revert: Fixed issue causing 004 debuggable flakes\nTest: ./test.py --host --jit --debuggable\nBug: 134162467\n\nChange-Id: Iece08ab299cd8a20f8382be7be6c3796858e70eb\n"
    },
    {
      "commit": "b476a29a2cda22b86fc1d96e4cc65ce36fb878af",
      "tree": "039eaee2edf5495275088d1c467e522977c6bcd6",
      "parents": [
        "3b2905366c6ee1eaba2d6477078e505e377343ec"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 07:54:48 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 08:16:04 2019 +0000"
      },
      "message": "Revert \"Support using opaque JNI ids\"\n\nThis reverts commit 21d5994583c679cd5d8573b5d35dbd659bdca2c7.\n\nBug: 134162467\n\nReason for revert: Breaks debuggable\n\nChange-Id: I9510a6ac208d392ff25ee196a1a519fecd151445\n"
    },
    {
      "commit": "21d5994583c679cd5d8573b5d35dbd659bdca2c7",
      "tree": "521906398a2f04048cc51b4f409b6a3ebc0c6ffa",
      "parents": [
        "5dfbe7ae9ed9a1a82446d32118190105a211a2d2"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 19 12:58:22 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 26 20:22:39 2019 +0000"
      },
      "message": "Support using opaque JNI ids\n\nCurrently JNI ids (jmethodID \u0026  jfieldID) are created by simply\ncasting the corresponding ART structure pointer. This is great for\nsimplicity but means we are prevented from performing operations that\ncould change these pointer values. To support these use-cases add\nsupport for loading the runtime with a layer of indirection between\nthese ids and the internal art data types.\n\nCurrently the JNI id type can be toggled only by passing the new\n\u0027-Xopaque-jni-ids:{true,false}\u0027 flag during startup.\n\nThis changes the --debuggable test configuration to pass\n\u0027-Xopaque-jni-ids:true\u0027 in order to get test coverage of this feature\nusing the \u0027art-jit\u0027 configuration.\n\nTest: ./test.py --host --debuggable\nTest: ./test.py --host --debuggable --jit-on-first-use\nTest: ./test/testrunnner/run_build_test_target.py art-jit\nBug: 134162467\nChange-Id: Id8c8cb9a5b8ff18dc2f40892fae2d344a7214f44\n"
    },
    {
      "commit": "b7c640d364d32b79cb52d04750b063667a9a0c86",
      "tree": "9caafc96879f83f8e5dd3cd45b9005be6e2b7deb",
      "parents": [
        "3ffb5b1576f8af0c361284ebd8d2d54c70ede3ff"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Mar 20 15:52:13 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 10 18:33:25 2019 +0000"
      },
      "message": "JVMTI Force early return\n\nAdd support for can_force_early_return jvmti capability. This allows\none to force java frames to exit early. Exited frames have all of\ntheir normal locks released.\n\nWe implement this by modifying the existing method exit events to\nallow one to modify the exit value during the callback. This is used\nto implement ForceEarlyReturn by adding internal-only events that will\nchange the return value of methods once they return (using\nkForcePopFrame) avoiding the need to modify the actual interpreter\nvery deeply. This also makes it simple to continue to use the standard\ndeoptimization functions to force the actual return.\n\nIn order to simplify book-keeping the internal event is refcounted,\nnot associated with any specific jvmtiEnv, and only settable on\nspecific threads. The internal event is added by the ForceEarlyReturn\nfunction and then removed by the MethodExit event when we update the\nreturn value.\n\nBug: 130028055\nTest: ./test.py --host\nChange-Id: Ifa44605b4e8032605f503a654ddf4bd2fc6b60bf\n"
    },
    {
      "commit": "7d42cdd5052d3d7dec62df03c3512e9e12d4035d",
      "tree": "ce4aea642eba51c7beaa8f2660a69024578a15ce",
      "parents": [
        "ba26b51e2e74bf8c4f87e99dc60f1cbca033ecac"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri May 31 16:54:46 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 03 13:27:02 2019 -0700"
      },
      "message": "ART: Allow thread suspend lock to be held when dumping a thread\n\nOnly dumping a thread\u0027s suspend state requires holding the lock.\nSpecialize the code to recognize if the lock is already held,\nand remove the negative capability from the callers.\n\nBug: 134037466\nBug: 134167395\nTest: m\nTest: m test-art-host-gtest-runtime_test\nChange-Id: Ib55eafba72c5d15de01719840ba3f223ae4af8c7\n"
    },
    {
      "commit": "0c2313c2d119e32ac27dae6513a9406ea087bfa9",
      "tree": "39f00ebfc1b4766fc45e6a322637ea9d09c3cd51",
      "parents": [
        "b79674cf70cabdcbe85de2e45b090f98990d020a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 14 09:47:00 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 16 00:53:06 2019 +0000"
      },
      "message": "ART: Forward-declare SuspendReason in thread.h\n\nReduce transitive includes, iwyu.\n\nTest: mmma art\nChange-Id: Ief9708af95db988f2b77accdd144b3d90e4248d2\n"
    },
    {
      "commit": "4617d5823c8e7841fed813b3b9c72664d7fd4dc6",
      "tree": "9eafbee06717e02a2c4acd5d7ce1e6601955356e",
      "parents": [
        "d7e9bbf092b5a61048358fd54183526ef12284af"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 28 13:48:31 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 29 09:50:00 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify mirror::Object::As*(), fix stale refs in test.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: Ia04c4996f5cbfa1f26acbadcd747342c57b1aac3\n"
    },
    {
      "commit": "3dacdd6343ea9a6471692914c7a9dff66d6453c7",
      "tree": "5e0a3b8f99e914a7fbd49822e5c8fb1bd4709f5c",
      "parents": [
        "939798e6a565a92e597136c589428e89c28bffd5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 12 15:45:47 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 12 09:52:59 2019 -0700"
      },
      "message": "Revert^4 \"Remove Global deopt requirement for several jvmti events\"\n\nIt was possible for the top frame of a thread to enter the\nartQuickToInterpreterBridge during runtime shutdown. This could be\ncaused by the libjdwp agent. If this happens the caller of the frame\nwill be \u0027null\u0027, which could cause a segv if not detected correctly.\n\nThis reverts commit 939798e6a565a92e597136c589428e89c28bffd5.\n\nReason for revert: Fixed issue that could cause crash during process\n                   shutdown.\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\nTest: ./test.py --host\n\nChange-Id: I2aad1705c761edb4ed788cec4fc8a3068d67aee5\n"
    },
    {
      "commit": "939798e6a565a92e597136c589428e89c28bffd5",
      "tree": "3274ff355163df18cd2d7343ce0d34214f9d09c9",
      "parents": [
        "a55e8b5c9827cc4dc4e7f7c7ee07ef1fdafc35e0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 12 14:26:22 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 12 14:26:42 2019 +0000"
      },
      "message": "Revert \"Revert^2 \"Remove Global deopt requirement for several jvmti events\"\"\n\nThis reverts commit a75e5892fba6d0208f33e9ab8e19e732daf94996.\n\nReason for revert: Fails jdwp tests.\n\nChange-Id: Ic883f4f0108b07f1609c6c6a9565eae5903bfd2c\n"
    },
    {
      "commit": "a75e5892fba6d0208f33e9ab8e19e732daf94996",
      "tree": "3daff8c3ce1608bacba7358711ccf9bd61c0bb05",
      "parents": [
        "dd83a40a3c4fea0d917577de96742900a61ab548"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Mar 11 15:49:40 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Mar 11 21:59:44 2019 +0000"
      },
      "message": "Revert^2 \"Remove Global deopt requirement for several jvmti events\"\n\nThis reverts commit ad344b6a14feba90a06a205760e9bc766c56cab0.\n\nJit-on-first-use would cause the runtime to skip sending FramePop\nevents for exceptions in some circumstances due to longjmp-ing over\nthe frames. This requires forcing jit off from the first instant a\nthread can get frame popped events, which is unfortunate.\n\nReason for revert: Fixed issue causing 1925 to fail on\n                   jit-on-first-use and redefine-stress\nTest: ./test.py --host\nTest: ./art/test/testrunner/run_build_test_target.py -j50 art-jit-on-first-use\n\nChange-Id: I6ec2a799db1041262a055be10e1af1faece6f2fc\n"
    },
    {
      "commit": "ad344b6a14feba90a06a205760e9bc766c56cab0",
      "tree": "47801fc5b432b0baf544bb8fd522a9fd3b567a7e",
      "parents": [
        "739383c80684eeb41d380ca5d18e1e9a1fe9fd7f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Mar 09 17:49:52 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Mar 09 21:13:15 2019 +0000"
      },
      "message": "Revert \"Remove Global deopt requirement for several jvmti events\"\n\nThis reverts commit 334630ee9dffdd1932c1ee641d938f25362a4c1a.\n\nReason for revert: 1924-frame-pop-toggle fails on some configs.\n\nChange-Id: I5ed3846e0dfff09c67a468f319ff516e14c44e61\n"
    },
    {
      "commit": "334630ee9dffdd1932c1ee641d938f25362a4c1a",
      "tree": "81957d634aa76967d97c89014eb69158682b0128",
      "parents": [
        "5b76c16cca1984209e838ada4d79e370d7fda431"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Mar 04 15:08:04 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 08 04:07:45 2019 +0000"
      },
      "message": "Remove Global deopt requirement for several jvmti events\n\nThe JVMTI_EVENT_SINGLE_STEP, JVMTI_EVENT_FIELD_MODIFICATION,\nJVMTI_EVENT_METHOD_EXIT, JVMTI_EVENT_SINGLE_FIELD_ACCESS, and\nJVMTI_EVENT_FRAME_POP events would all deoptimize all threads in all\ncases when enabled. This changes the behavior to instead only\ndeoptimize individual threads when possible. This should make some\ndebugger interactions faster.\n\nTest: ./test.py --host -j72\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\n\nChange-Id: I42513cb17fd1144aeb03ca11afd3e3b05e918ce2\n"
    },
    {
      "commit": "e0b2ce413367c9266e9b0657a0505c1ef776b7ae",
      "tree": "ea17b0478011d74009177bf9cf568718b3482777",
      "parents": [
        "77182cd0f4527538df832eddbc775391c283cffb"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Feb 21 19:23:42 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Feb 22 08:56:22 2019 -0800"
      },
      "message": "Revert^2 \"Prevent agents from delaying system daemon threads\"\n\nIt looks like there might be a race between DetachCurrentThread and\nruntime shutdown that the original CL exposed with test 1919. I\u0027m not\nsure why this test exposed this issue, possibly it\u0027s due to the\nremoval of the Daemon events making the test faster, thus more likely\nto get to runtime-shutdown without the testing thread having fully\ndetached.\n\nThis reverts commit c08c10713e8884e8adfbf6a8e370a9ec96c1883f.\n\nReason for revert: (Hopefully) made test 1919 resistant to the flake\n                   it was experiencing.\nTest: ./test.py --host --ndebug -j80\n\nBug: 123696564\nBug: 124284724\n\nChange-Id: I2e58a71aa174f6b89e57c31378b0fe5bb41a8844\n"
    },
    {
      "commit": "c08c10713e8884e8adfbf6a8e370a9ec96c1883f",
      "tree": "84dc682b40f38d0377639befe6f3d43e5655a43c",
      "parents": [
        "3611fdf703a6417c08a2e3d6e642d5936318de18"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 21 10:15:28 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 21 10:15:28 2019 +0000"
      },
      "message": "Revert \"Prevent agents from delaying system daemon threads\"\n\nThis reverts commit 3611fdf703a6417c08a2e3d6e642d5936318de18.\n\nBug: 123696564\nBug: 124284724\nReason for revert: b/124284724\n\nChange-Id: I546758b4cbb5e3f62f7b66a2faed544abce0d9c2\n"
    },
    {
      "commit": "3611fdf703a6417c08a2e3d6e642d5936318de18",
      "tree": "ef152ff80f42b6486e5a02eee3fb7a02fbef15e7",
      "parents": [
        "794350fd0e21aa9e259b6c45394494871e7fdb13"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Feb 06 15:10:58 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Feb 11 11:03:22 2019 -0800"
      },
      "message": "Prevent agents from delaying system daemon threads\n\nThe runtime starts several important daemon threads that are\nresponsible for various GC related tasks (i.e. FinalizerDaemon, etc).\nThe runtime cannot be considered fully started until these threads\nhave been started or will be started soon.\n\nIt was possible for agents to delay the startup of these daemons\narbitrarily (while calling arbitrary java code) by never leaving the\nVMInit event or by never returning from the daemons ThreadStart\nevents. This could cause deadlocks or other errors when using some\nagents, such as libjdwp.\n\nIn order to prevent these issues and more closely match other java\nlanguage runtimes we launch these threads before sending the VMInit\nevent and suppress their ThreadStart events. The openjdkjvmti plugin\nthen waits for the Daemon threads to actually begin executing before\ncalling the VMInit event or any other agent code. This prevents the\nagents from seeing threads appear from nowhere.\n\nBug: 123696564\nTest: while atest CtsJdwpTestCases; do; done;\n\nChange-Id: I7e07187f3e8670f32df0490cb419585c13d81765\n"
    },
    {
      "commit": "e5d2398fa5be5effbc552b244387119dc53a9671",
      "tree": "f32b3f3d67c469d9bdc83961ef9c4d863c351f0a",
      "parents": [
        "639b2b1f3a675135d443fc380323fbc48639a7eb"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jan 08 10:34:26 2019 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 09 12:38:30 2019 -0800"
      },
      "message": "ART: Forward-declare Context\n\nMove deletion to thread.cc, which allows to forward-declare\nContext.\n\nBug: 119869270\nTest: mmma art\nChange-Id: Ifd9006cd3457d4ab708a289a7f6e1cdf2591c596\n"
    },
    {
      "commit": "639b2b1f3a675135d443fc380323fbc48639a7eb",
      "tree": "0aba54938e712e5dd95b525c92f836c59cca49c6",
      "parents": [
        "8764dc3b3eda7f6f13ed7b584475503fe5bedd59"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jan 08 10:32:50 2019 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 09 12:38:30 2019 -0800"
      },
      "message": "ART: Remove instruction_set.h from thread.h\n\nMove the function definitions relying on it to the -inl. Some\nfollow-up transitive-include cleanup, as well as some more\nforward-declarations.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I820f395e6cb8343a4bb9bf02da271fbec067109f\n"
    },
    {
      "commit": "a1ffdba7e285435cbb3538473f25eb7cb47cfd66",
      "tree": "35b1ad4e66839425ef3ff52287e53dec4e5a348e",
      "parents": [
        "5a0430d0239481f4efb252d60ec9641703b8d456"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jan 04 16:08:51 2019 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 09 12:38:30 2019 -0800"
      },
      "message": "ART: IWYU handle_scope\n\nMove wrappers to their own header. Forward-declare handles.\n\nBug: 119869270\nTest: m\nChange-Id: I9fba4df9b589cec07c7f687791ddbed81d188410\n"
    },
    {
      "commit": "5a0430d0239481f4efb252d60ec9641703b8d456",
      "tree": "cd7bdb45d94e7af3aa3e1bbb5958f930bcee29f6",
      "parents": [
        "b9b995738c8f53d68446d14553c1befd487877e7"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jan 04 14:33:57 2019 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 09 12:38:20 2019 -0800"
      },
      "message": "ART: Introduce runtime_globals\n\nSplit libartbase\u0027s globals.h into actual globals, and runtime-\ndependent globals which should live in runtime.\n\nBlanket-convert all runtime/ inclusions.\n\nIn future CLs, the number of global constants should be reduced.\nFor example, GC types are only relevant to GC/alloc functionality.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I2d8cd32e0e7ab4084d2f2e96864b5338a78da94e\n"
    },
    {
      "commit": "d77abd9e128f60917f712b8da84bab46e3ed5870",
      "tree": "40d3108c1190860ef119e85f9c94688ca8036c39",
      "parents": [
        "bec232eb2f07d53c4dbf510b3fbb80f092d02681"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 02 16:10:20 2019 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 03 16:09:07 2019 -0800"
      },
      "message": "ART: Forward-declare Instrumentation\n\nAvoid header include in a very common header.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I6a6f09ad62d61684969635f8cb98b072f3ea781c\n"
    },
    {
      "commit": "7fbc4a59ba2e60d869313d7961662430df83b2cb",
      "tree": "59520285df8d2075412ddc566a0d4d96d4c7e109",
      "parents": [
        "7cc45fd1dbcf5704e442d0443e437aa2ae3fe21b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 28 08:26:47 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 06 11:37:19 2018 -0800"
      },
      "message": "ART: Move to using locks.h instead of mutex.h\n\nWhen only annotating lock requirements, use locks.h.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I1608b03254712feff0072ebad012c3af0cc3dda4\n"
    },
    {
      "commit": "79c693b3133da397cec7eaff19de631b65a0cf70",
      "tree": "dc08c382b7b17eac484355ca63683b3a0560ab81",
      "parents": [
        "f759dc027507d0092a49d9ec146dc37ca4534dd4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 21 10:43:50 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 21 15:22:07 2018 -0800"
      },
      "message": "ART: Remove setjmp.h includes\n\nWe are not using jmpbuf and co.\n\nBug: 119869270\nTest: m\nChange-Id: I85993e2ce506b059801d8d8da8b440e93ee9e3fd\n"
    },
    {
      "commit": "aa31f4944936cabb8cc307890de9fa54ceda6de8",
      "tree": "7485bb1d985244ca54cba25f56585f0ac4e30039",
      "parents": [
        "ae5d77d323c8456343e30571c0f67e40b15c7af1"
      ],
      "author": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Thu Nov 01 18:57:38 2018 +0000"
      },
      "committer": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Mon Nov 05 11:01:51 2018 -0800"
      },
      "message": "Revert^4 \"Implement LockSupport.park with a futex\"\n\nThis reverts commit 13f4d9631db981ae5008073db4df9c6a934fc9f3.\n\nReason for revert: Fixing ThreadStress timeouts.\n\nChange-Id: I9f8c3f56eccfadc3751049731e8d427873cc7841\n"
    },
    {
      "commit": "13f4d9631db981ae5008073db4df9c6a934fc9f3",
      "tree": "928c363c96854ac8db404a0ddd11adf8c66ea1c0",
      "parents": [
        "4e7077d795ab94d40c76ae7b9245fd5dcbb7716c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 01 11:34:29 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 01 11:34:29 2018 +0000"
      },
      "message": "Revert \"Revert^2 \"Implement LockSupport.park with a futex\"\"\n\nThis reverts commit 4e7077d795ab94d40c76ae7b9245fd5dcbb7716c.\n\nBug: 28845097\n\nReason for revert: ThreadStress flakes.\n\nChange-Id: Ibe29c2f679a642ccffea51c2fcf7dfaaed2dc305\n"
    },
    {
      "commit": "4e7077d795ab94d40c76ae7b9245fd5dcbb7716c",
      "tree": "df6ab853427ab64353933b50637bffb584938274",
      "parents": [
        "97d40f9c7b1157783d09861ce76d3a0b3da73cbe"
      ],
      "author": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Thu Oct 18 13:34:39 2018 -0700"
      },
      "committer": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Wed Oct 31 17:19:19 2018 +0000"
      },
      "message": "Revert^2 \"Implement LockSupport.park with a futex\"\n\nReason for revert: Fixed unused-argument compile error on mac\n\nThis resolves a contention issue where a thread unparking a higher\npriority thread would see a bunch of repeated wakeups. It also resolves\nan issue where LockSupport.parkUntil would not return on time if the\nsystem clock changed while the thread was parked.\n\nBug: 28845097\nTested: ./test.py -b --host --verbose -j20\nChange-Id: Iff71a0e23d0a9fbe072a092bec40a39192c195eb\n"
    },
    {
      "commit": "97d40f9c7b1157783d09861ce76d3a0b3da73cbe",
      "tree": "928c363c96854ac8db404a0ddd11adf8c66ea1c0",
      "parents": [
        "41271dd3dfc2ff75702ae3b709eb8afa9464a49f",
        "5485371cf3894d71e0d0fe2bdf639fde478012ca"
      ],
      "author": {
        "name": "Filip Pavlis",
        "email": "pavlis@google.com",
        "time": "Wed Oct 31 16:16:08 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 31 16:16:08 2018 +0000"
      },
      "message": "Merge \"Revert \"Implement LockSupport.park with a futex\"\""
    },
    {
      "commit": "5485371cf3894d71e0d0fe2bdf639fde478012ca",
      "tree": "3b8f742544db21dbd4994ec204c19eaf613a9b10",
      "parents": [
        "5e1a75c1d12ea47bdc0f73d378b5fa25326829f4"
      ],
      "author": {
        "name": "Filip Pavlis",
        "email": "pavlis@google.com",
        "time": "Wed Oct 31 12:43:13 2018 +0000"
      },
      "committer": {
        "name": "Filip Pavlis",
        "email": "pavlis@google.com",
        "time": "Wed Oct 31 12:43:13 2018 +0000"
      },
      "message": "Revert \"Implement LockSupport.park with a futex\"\n\nThis reverts commit 5e1a75c1d12ea47bdc0f73d378b5fa25326829f4.\n\nReason for revert: This CL unfortunately breaks:\nsdk_gphone_x86-sdk_addon_mac\nsdk_mac\n\nFollowing error:\nart/runtime/thread.cc:370:4: warning: \"LockSupport.park/unpark implemented as noops without FUTEX support.\" [-W#warnings]\n#warning \"LockSupport.park/unpark implemented as noops without FUTEX support.\"\n^\nart/runtime/thread.cc:295:24: error: unused parameter \u0027is_absolute\u0027 [-Werror,-Wunused-parameter]\nvoid Thread::Park(bool is_absolute, int64_t time) {\n^\nart/runtime/thread.cc:295:45: error: unused parameter \u0027time\u0027 [-Werror,-Wunused-parameter]\nvoid Thread::Park(bool is_absolute, int64_t time) {\n^\n1 warning and 2 errors generated.\n\nChange-Id: Iae41cce7cd5fc38f605173519931491a019f7c80\n"
    },
    {
      "commit": "fe79b5939696c87f66d9d39540fe0f38369c5158",
      "tree": "7b44d07b2fceec22534c7441ba04133f26b7363f",
      "parents": [
        "ed0d82201a3853b31588fa1f9e0c902e3f09902e",
        "5e1a75c1d12ea47bdc0f73d378b5fa25326829f4"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Oct 31 02:54:08 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 31 02:54:08 2018 +0000"
      },
      "message": "Merge \"Implement LockSupport.park with a futex\""
    },
    {
      "commit": "5e1a75c1d12ea47bdc0f73d378b5fa25326829f4",
      "tree": "3a69bbfecee2527a0584cb7bc30fbf434f20c47d",
      "parents": [
        "f4fd65e393fe60f17e22ee7823f8dce4594c053d"
      ],
      "author": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Thu Oct 18 13:34:39 2018 -0700"
      },
      "committer": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Tue Oct 30 09:43:57 2018 -0700"
      },
      "message": "Implement LockSupport.park with a futex\n\nThis resolves a contention issue where a thread unparking a higher\npriority thread would see a bunch of repeated wakeups. It also resolves\nan issue where LockSupport.parkUntil would not return on time if the\nsystem clock changed while the thread was parked.\n\nBug: 28845097\nTested: ./test.py -b --host --verbose -j20\nChange-Id: I75458afc481b7a5860e67f8a421109308ce5ebc6\n"
    },
    {
      "commit": "28f6cff854b61e39f953e69ebf3646ee9826ec82",
      "tree": "a98e2bf1746d93079b7abe54e278ba87f0aef360",
      "parents": [
        "06ef9aa6a562a3a1f7c1f9b91aadda5018f8ba86"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Oct 16 15:07:28 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Oct 22 14:35:07 2018 +0100"
      },
      "message": "Cache the value of MterpShouldSwitchInterpreters()\n\nAdd field to the Thread object which stores the value instead (negated).\nExplicitly update the field when relevant state changes (which is rare).\n\nThis speeds up golem interpreter benchmarks by 3.5%\non average with some benchmarks up to 15% faster.\n\nTest: test.py -b -r --interpreter --host\nChange-Id: If2df0d3bf9e69ab50c30102b2648e997927c34d8\n"
    },
    {
      "commit": "776f3f7bfa33e0449e4e2c5535bae1babfdbaf83",
      "tree": "274d20979e48c772327258b7cbeab92b276df84e",
      "parents": [
        "d88f5f7b22571511b93206f02806568648138a35"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Oct 15 18:03:55 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Oct 16 15:13:44 2018 +0100"
      },
      "message": "Remove mterp \"alternate\" opcode handlers.\n\nThey are currently unused and I don\u0027t have plans to use them.\n\nThe alternate table made it possible to enable extra mterp checks.\nHowever, it is possible to move the debug checks to the main path.\n\nTest: test.py -b -r --interpreter -t 001-HelloWorld\nChange-Id: I45a39ec73abaefaecf5b8c636f3f9d519a0a8bb0\n"
    },
    {
      "commit": "185a461af9d273fa62170f67ac485f665ae57d8b",
      "tree": "3c3d51f5e5c1f5456d5e83d59f0154f2f9e5ba98",
      "parents": [
        "660718f175cecef927411607d1484235cb38bf05"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Oct 04 15:54:25 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Oct 04 15:54:25 2018 -0700"
      },
      "message": "Add some comments missed during jit-loading CL\n\nTest: none\nChange-Id: Iad77ad432bb9395852653953dc02589bf84d54d6\n"
    },
    {
      "commit": "56de89aaf2a224de8c436291e3c23a1a61315437",
      "tree": "397fafa3662d1abde6fecff49f24a559c2b0ab32",
      "parents": [
        "ededf08e2f4a5df3401a5d4badb98ff3c8cb8fb9"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Oct 01 15:32:20 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Oct 03 14:38:59 2018 +0100"
      },
      "message": "Mark most *Offset helper functions as constexpr.\n\nMaking the values compile-time constants will help to\nclean up the cpp-define-generator.\n\nTest: test.py -b -g\nChange-Id: I612a19a54062784b501bfe4f41c6642d48e0dd21\n"
    },
    {
      "commit": "cea421597f26b2afb2d82d72a46c5dc905496ca5",
      "tree": "60f2a4df80e1fdf8aeb42e9dafca96d75aa43d2f",
      "parents": [
        "e9f61035e7077032a17d7d0e9035b6ef3995273f"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 18 22:51:55 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 01 15:34:06 2018 -0700"
      },
      "message": "Revert \"Allow threads to be marked as unsuspendable by kForUserCode\"\n\nThis allows any thread (including jit-threads) to be suspended by\nkForUserCode and the will stop executing at the next suspend-point.\n\nThis reverts commit 53570676750d74416cecdf5a8e01f3cf9a8d4169.\n\nReason for revert: This marking was not sufficient to prevent\ndeadlocks and there is a better solution in simply preventing the jit\nthread from making this situation possible.\n\nTest: ./test.py --host\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\nTest: ./art/tools/run-libjdwp-tests.sh \\\n        --mode\u003dhost                    \\\n        --variant\u003dx64                  \\\n        --test org.apache.harmony.jpda.tests.jdwp.EventModifiers.InstanceOnlyModifierTest\n\nBug: 70838465\nBug: 111348762\n\nChange-Id: I8314904cc35f66bdf287ac7b9ec69510310a3474\n"
    },
    {
      "commit": "e9f61035e7077032a17d7d0e9035b6ef3995273f",
      "tree": "e24de0b760ef3848c8d405b4b7fec5a8b630778c",
      "parents": [
        "bb68fda18ef3d7ea183a322831a5afd20b6a8bff"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Sep 24 16:04:51 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 01 15:34:02 2018 -0700"
      },
      "message": "Prevent the JIT from loading classes in debuggable mode\n\nIn debuggable mode the timing and placement of class loads is\nobservable. This causes deopts to be placed in situations where a\nclass would be loaded by the JIT.\n\nThis has negligible impact on performance of compiled code, causing\nonly a handful of classes to be not loaded.\n\nFor example with the it.mvilla.android.fenix2 application of the\n~13000 classes loaded the jit was responsible for 19 of them.\n\nSince the jit is only responsible for a small number of class loads\nand for the class not to have been loaded by the interpreter the path\nmust be cold anyway there is no performance impact on standard paths.\n\nTest: ./test.py --host\nTest: ./test/testrunner/testrunner.py --with-agent\u003dlibjitloadd.so\u003dfatal --host\nTest: Attach libjitload.so to running processes and examine jit-load\n      counts.\n\nBug: 70838465\nBug: 73255278\nBug: 112074977\nBug: 116517081\n\nChange-Id: I030bc8116345af506e83ba78427a7fbda7a7b386\n"
    },
    {
      "commit": "bb68fda18ef3d7ea183a322831a5afd20b6a8bff",
      "tree": "5745a64e0e410ac3fe66cd54abd2bbfb84539e93",
      "parents": [
        "29391756f70489a5ab659988f058e359527a7af1"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 01 13:21:47 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 01 14:57:18 2018 -0700"
      },
      "message": "Move InterpreterCache to right below tlsPtr_\n\nChange the position of the InterpreterCache field in Thread to be\ndirectly below the tlsPtr_ field. Since both members of the tlsPtr_\nand InterpreterCache fields are used by asm_code we need their offsets\nin asm_support.h. The fields at the end of the Thread struct have been\nundergoing changes. By moving this field up we avoid the need to\nupdate asm_support.h whenever one of the fields is modified.\n\nTest: ./test.py --host\nChange-Id: Ic2863116ed446af155badfc3bf098add7ba0b699\n"
    },
    {
      "commit": "912f36c954a91bdc7d9801a111ba089ec2a23681",
      "tree": "87e576e86867140c478d6959ce20a261daaad60a",
      "parents": [
        "26f048f48cdb1e884aab2b6fddf26d58346d29ad"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sat Sep 08 12:22:58 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Sep 27 15:16:09 2018 +0100"
      },
      "message": "Add small thread-local cache for use by the interpreter.\n\nSmall (one page) cache which can be used on the hottest paths\nin the interpreter and which does not require synchronisation.\nThis CL adds the code but it does not use it for anything yet.\n\nTest: test-art-host-gtest\nChange-Id: I41d4e7a86a0f62f7a4efc165b8934232b4e766c7\n"
    },
    {
      "commit": "53570676750d74416cecdf5a8e01f3cf9a8d4169",
      "tree": "8de1c48dd0a83091ffef6bf321ffc4ffc05b1147",
      "parents": [
        "b7f10d59557cb6b6cd6824f3bf4d77f961248846"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jul 12 11:09:59 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jul 17 11:03:20 2018 -0700"
      },
      "message": "Allow threads to be marked as unsuspendable by kForUserCode\n\nThere was a possible deadlock between jit-threads being suspended and\nanother thread waiting for the jit-thread to finish their work. If the\njit-thread hit a suspend-point the process would deadlock. This fixes\nthis by allowing threads to be marked as unsuspendable by user-code.\nThis prevents the issue by marking jit and gc threads as unsuspendable\nby user code. Agents attempting to suspend them using JVMTI will\nsucceed (and see the thread as suspended) but internal runtime methods\nwill not see the thread as suspended and the thread will not be\nprevented from moving into the kRunnable state. A thread that is\nunsuspendable trying to suspend itself using JVMTI will get\nERR(INTERNAL) and a log message.\n\nDoing this requires that we rewrite the JVMTI thread suspension code\nsomewhat so it will now perform an unconditional kInternal suspension\nprior to trying to suspend the thread kForUserCode. The kInternal\nsuspension is then lifted. This ensures that everything is done\natomically even if the kForUserCode won\u0027t stop the thread.\n\nTest: ./test.py --host\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\nTest: ./art/tools/run-libjdwp-tests.sh \\\n        --mode\u003dhost                    \\\n        --variant\u003dx64                  \\\n        --test org.apache.harmony.jpda.tests.jdwp.EventModifiers.InstanceOnlyModifierTest\n\nBug: 70838465\nBug: 111348762\n\nChange-Id: I91211641b82416664bf5abd8546efebf4f672f12\n"
    },
    {
      "commit": "184f0759ef700b1412c7df412c4ebb297427d9fc",
      "tree": "beef751010816fbbee70494422fd48d46559a4ac",
      "parents": [
        "ec1f1a91328f44d93cfc16e39160dbdfce2f7b9a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jul 13 11:18:22 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jul 16 16:20:01 2018 -0700"
      },
      "message": "Rewrite thread CustomTLS to support keyed TLS entries\n\nOur Thread struct allowed plugins or other parts of the runtime to use\na single custom_tls_ void* pointer to store additional data in the\nThread struct. Unfortunately it was limited to a single value. This CL\nchanges the API to allow one to pass in a const char* key that is used\nto address the TLS data. This lets multiple plugins or parts of the\nruntime set their own independent TLS entries. This also adds support\nfor TLS entries actually being deallocated automatically.\n\nTest: ./test.py --host\nChange-Id: I40fa767b9c61a755b2ed910e4ad1e6327705e941\n"
    },
    {
      "commit": "aee008e77ef1f7759f6e04df2e87fab89f5ebfa7",
      "tree": "cb8b0bbd5c64f116eaeac9cb0e27c000c4881003",
      "parents": [
        "b5271dd44a30f498689e503340d3c8d01bf31f07"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 29 10:00:13 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 29 10:00:13 2018 -0700"
      },
      "message": "ART: Reserve more overflow space for the interpreter\n\nIn debuggable builds, especially under ASAN, the switch interpreter\nwith access-checks has a huge stack frame. Virtually increase the\nprotected stack space at the end for overflow handling. This is\nnecessary so that interpreter calls will create a StackOverflow\nbefore it is too late.\n\nTechnically only ASAN pushes the stack over the established limit,\nbut there is no practical downside to adding a small amount to the\noverflow (note that the reserved size is small for non-ASAN builds),\nand this avoids the proliferation of memory_tool.h.\n\nNon-debug builds are approximately protected by frame-size compiler\nchecks. Compiled code does not need additional space, as the actual\noverflow handling fits into the carved-out space.\n\nBug: 109813469\nTest: SANITIZE_HOST\u003daddress art/test/testrunner/testrunner.py -b --host --interp-ac -t 004-SignalTest\nChange-Id: I1bdd2fc586a6da30720a8be62f3247180ce48e93\n"
    },
    {
      "commit": "1979c64214bd505c013d573bc8729ee94f7bdea5",
      "tree": "9b4b2298b8b9d15cd6ca0a1e06e3771f3db2163f",
      "parents": [
        "5a87e19e4bf1b6719c2aad3effde1b38d2c3085c"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Apr 26 14:41:18 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Apr 26 15:08:49 2018 -0700"
      },
      "message": "Clean up include paths\n\nRemove runtime/globals.h and make clients point to the right globals.h\n(libartbase/base/globals.h).  Also make within-libartbase includes\nrelative rather than using base/, etc.\n\nBug: 22322814\nTest: make -j 40 checkbuild\nChange-Id: I99de63fc851d48946ab401e2369de944419041c7\n"
    },
    {
      "commit": "6ee497188b0e8c7bcf5126cefad04090f956616a",
      "tree": "db2d06b01d255811726ea748db8eb6f62cd7b71c",
      "parents": [
        "642e9d8249be5aff68022cabdc8ba576a57ff8d6"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 30 14:39:05 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 30 14:39:05 2018 +0000"
      },
      "message": "Revert^4 \"Add an option to disable native stack dumping on SIGQUIT.\"\n\nBug: 74121887\n\nStill failing :(\n\nThis reverts commit 642e9d8249be5aff68022cabdc8ba576a57ff8d6.\n\nChange-Id: I603ca9fdd2d8f2f759527130b3288efe5b23b5c3\n"
    },
    {
      "commit": "642e9d8249be5aff68022cabdc8ba576a57ff8d6",
      "tree": "1fa53cee639241bd3968997e55e38ed282235569",
      "parents": [
        "b939805d9d4b0957274c562fb8053512d04138b2"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Mar 27 20:30:55 2018 +0000"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Mar 27 22:36:09 2018 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Add an option to disable native stack dumping on SIGQUIT.\"\"\"\n\nThis reverts commit 74d25c9040dfd1e0985987eb38817e526878a3db.\n\nReason for revert: The original failing condition appears to be gone.\n\nBug: 74121887\n\nTest: Ran 004-ThreadStress many times against the target.\nChange-Id: Ie5bd050112e654a99bdfea7d6dd673882ca35567\n"
    },
    {
      "commit": "3dada431768b980c65d8256327f160803aae1b41",
      "tree": "a1ab5bafe0ac9324710f3ff8f8dc7b5473bf1ce4",
      "parents": [
        "2410a88a94b57247a1096562564c2f23528b3e46",
        "88591fe82f499de10591f5b77efac71f8954eae2"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Sun Mar 25 20:23:11 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Mar 25 20:23:11 2018 +0000"
      },
      "message": "Merge \"ART: Simplify atomic.h\""
    },
    {
      "commit": "318afe6c3ac1e734adbd769bbf22b8c7e373e80b",
      "tree": "2dada0828636c2dc8e40e0f34b2b3f01e6caa0a5",
      "parents": [
        "ba1e9e73c07bffc046f651414db43aeee9953d15"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Mar 22 16:50:10 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Mar 23 14:19:35 2018 -0700"
      },
      "message": "Remove unneeded ScopedGCCriticalSections from openjdkjvmti.\n\nWe used ScopedGCCriticalSections in many parts of the openjdkjvmti\noften unnecessarily.\n\nWe removed a totally unneeded GCCriticalSection that was acquired when\nmodifying the instrumentation listeners.\n\nWe also removed RequestGCSafeSynchronousCheckpoint and the change to\nuse GcRoots instead.  We added RequestGCSafeSynchronousCheckpoint as a\nway to prevent the GC from running when we are doing some JVMTI\noperations on other threads.  This could interact with running GCs in\nnon-trivial ways, potentially causing deadlocks in some situations.\nThis changes the code to instead use read-barriers and GcRoots to\nensure that we do not read data from the wrong gc space.\n\nIn order for this to work correctly we need to make sure that we are\nonly ever reading the GcRoots from the thread that eventually needs\nthe reference. This required some re-writing of the checkpoint\nclosures since they would often just call AddLocalReference on\nnon-local Thread objects.\n\nChanges to Thread::RequestSynchronousCheckpoint and art::Barrier were\nneeded in order to allow this all to work since we needed to ensure\nthat the requesting thread did not suspend as the checkpoint was being\nrun.\n\nThis is a partial revert of commit 7585b91bfc77b8.\n\nBug: 67838964\nBug: 76003243\n\nTest: use gapid\nTest: ./test.py --host -j50\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\n\nChange-Id: I26d871089829639eccb973cecc315194f7bcf681\n"
    },
    {
      "commit": "88591fe82f499de10591f5b77efac71f8954eae2",
      "tree": "bfa126ad55ee091e3b615bd3bb60d5f8cfb6e37a",
      "parents": [
        "e8a4e378c5a928d5de07bee6db99150a57dabcd8"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Mar 06 13:35:43 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Mar 23 15:01:15 2018 +0000"
      },
      "message": "ART: Simplify atomic.h\n\nPrefer std::atomic operations over wrappers in atomic.h. Exceptions\nare cases that relate to the Java data memory operations and CAS\noperations.\n\nBug: 71621075\nTest: art/test.py --host -j32\nTest: art/test.py --target --64 -j4\nChange-Id: I9a157e9dede852c1b2aa67d22e3e604a68a9ef1c\n"
    },
    {
      "commit": "86821aca0eff7fb1fff18c0d71acfcc06f5d73f3",
      "tree": "a285269f9035de4767c2b166784b33ca3a8e9d01",
      "parents": [
        "ec9855e6262cd477c9f61ed245b9e2526e351698",
        "74d25c9040dfd1e0985987eb38817e526878a3db"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 13 08:57:20 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 13 08:57:20 2018 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Add an option to disable native stack dumping on SIGQUIT.\"\"\""
    },
    {
      "commit": "74d25c9040dfd1e0985987eb38817e526878a3db",
      "tree": "e63323329298a7cc67799324a6edc2378cfb6822",
      "parents": [
        "8b089742252e827d863218413e8855e1bae75af5"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 12 19:26:44 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 12 19:26:44 2018 +0000"
      },
      "message": "Revert \"Revert \"Add an option to disable native stack dumping on SIGQUIT.\"\"\n\nBug: 27185632\nBug: 74121887\n\n\nGot flakes on device for 004-ThreadStress and 141-static-field-sigquit\n\nThis reverts commit 8b089742252e827d863218413e8855e1bae75af5.\n\nChange-Id: Ie76c84a1889e85b885d5f4123d60e8a760cf186d\n"
    },
    {
      "commit": "7a02c66fd9ed174fc2e49ccc9f582dd661b7de9e",
      "tree": "8f193c8ecea0ff418370bf72babb97487e8c9c65",
      "parents": [
        "334f170654fed18711d8dcf5238c1ac8bad7ecd1",
        "8b089742252e827d863218413e8855e1bae75af5"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 06 19:56:58 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 06 19:56:58 2018 +0000"
      },
      "message": "Merge \"Revert \"Add an option to disable native stack dumping on SIGQUIT.\"\""
    },
    {
      "commit": "c431b9dc4b23cc950eb313695258df5d89f53b22",
      "tree": "422273559c3ae52caff0c6b1cf1a62a8312f0e26",
      "parents": [
        "f46f46cf5bd32788d5252b7107628a66594a5e98"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Mar 02 12:01:51 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 05 13:58:20 2018 -0800"
      },
      "message": "Move most of runtime/base to libartbase/base\n\nEnforce the layering that code in runtime/base should not depend on\nruntime by separating it into libartbase.  Some of the code in\nruntime/base depends on the Runtime class, so it cannot be moved yet.\nAlso, some of the tests depend on CommonRuntimeTest, which itself needs\nto be factored (in a subsequent CL).\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host\n\nChange-Id: I8b096c1e2542f829eb456b4b057c71421b77d7e2\n"
    },
    {
      "commit": "8b089742252e827d863218413e8855e1bae75af5",
      "tree": "bbfe333fced26fbc42f87a4469c59822611acd9f",
      "parents": [
        "f46f46cf5bd32788d5252b7107628a66594a5e98"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 05 11:47:30 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 05 13:43:15 2018 -0800"
      },
      "message": "Revert \"Add an option to disable native stack dumping on SIGQUIT.\"\n\nThis reverts commit a73280df8cac1279b6dea0424722f42ef0048613.\n\nBug: 27185632\nBug: 74121887\nTest: m test-art-host\nChange-Id: I24af48619577a78371c93cbad24d307d4d7a217d\n"
    },
    {
      "commit": "56776014d181b7ee386a2ba5d85cf66d8bb4dd22",
      "tree": "21b9f0411f565d9e49bce916e720b70a79145750",
      "parents": [
        "47ec7ad0f819c171e41d323aff71f5ac425b1ccd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jan 26 17:40:55 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jan 30 09:26:22 2018 -0800"
      },
      "message": "ART: Call ThreadGroup.add for attached threads\n\nWhen attaching threads to the runtime, call ThreadGroup.add to\nlet the thread\u0027s group know that the thread is now started. This\nfixes incorrect internal accounting.\n\nTest: art/test/testrunner/testrunner.py -b --host -t 169\nTest: m test-art-host\nChange-Id: I60362b6b53acf06b97779ea9b3b0bc6264f1dc2d\n"
    },
    {
      "commit": "fb6b0b1b04081f9ef7a240f702d8ce4e61a02e9f",
      "tree": "ae24c7d7bf4493ab9dc881c7b3b95ef8f706974d",
      "parents": [
        "680e88ba30d1c599c5eaab4a207db3e39bf2d57f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Dec 11 20:47:56 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jan 08 18:48:47 2018 -0800"
      },
      "message": "ART: Add support for VMStack.getAnnotatedStackTrace\n\nAdd Thread.CreateAnnotatedStackTrace to return an array that\ncontains an AnnotatedStackTraceElement for each stack frame,\nwith the StackTraceElement describing the frame, an array\ncontaining all objects that are locked at the described location,\nand optionally for the top frame an object the thread is blocked\non, waiting for or sleeping on.\n\nAdd a test.\n\nBug: 70538431\nTest: m test-art-host\nTest: art/test/testrunner/testrunner.py -b --host -t 168\nChange-Id: I0d92e3d8182c4a592549a6445854816f71afd29e\n"
    },
    {
      "commit": "4131d1096ac57a29ba1939c1cf2cb74144c16c92",
      "tree": "d3ac7e0732eac24602718ee2d2af33641b4cf13e",
      "parents": [
        "bd018439d78f89c84df061173521dbd91666c02e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 03 14:04:42 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jan 05 09:34:26 2018 +0000"
      },
      "message": "ART: Additional Atomic methods\n\nA few additional methods on the Atomic class to support the\ninterpreter VarHandles implementation.\n\nMinor renaming of Atomic::FetchAnd{Or,And}.* to\nAtomic::FetchAndBitwise{Or,And}.*.\n\nMinor updates for consistency in the choice of argument names and doc\ncomments.\n\nBug: 65872996\nTest: art/test.py --host -j32\nChange-Id: Iae35286935fbb270478082fed2fe74abb7b68c57\n"
    },
    {
      "commit": "55256cb60e11d4fac71affb4b9760a2931a3598d",
      "tree": "fc1ed6885b013e0aa2bcfd9ef4dd94fec29bd382",
      "parents": [
        "64bae9fb677aa0e2406d13ea9f8ebaa92e16f978"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Dec 21 17:07:11 2017 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Dec 22 10:11:39 2017 -0800"
      },
      "message": "Extensions to check JNI.\n\nEnsure critical lock isn\u0027t held when returning from a down-call.\nLog a warning if the critical lock is held for a significant period of\ntime.\nRefactor JNIEnvExt to be a class rather than a struct.\n\nTest: mma test-art-host\n\nChange-Id: I4d149cb04d3a7308a22b92b196e51e2f1ae17ede\n"
    },
    {
      "commit": "2196c651ecc77e49992c6c329dfce45f78ff46cb",
      "tree": "4eb151632fc7b851101b4264286ce5e900fa06b5",
      "parents": [
        "dc93cac66f1db225474cec5bf0350fd7a148085e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 30 16:16:07 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 30 16:20:39 2017 +0000"
      },
      "message": "Revert^4 \"JIT JNI stubs.\"\n\nThe original CL,\n    https://android-review.googlesource.com/513417 ,\nhas a bug fixed in the Revert^2,\n    https://android-review.googlesource.com/550579 ,\nand this Revert^4 adds two more fixes:\n    - fix obsolete native method getting interpreter\n      entrypoint in 980-redefine-object,\n    - fix random JIT GC flakiness in 667-jit-jni-stub.\n\nTest: testrunner.py --host --prebuild --no-relocate \\\n      --no-image --jit -t 980-redefine-object\nBug: 65574695\nBug: 69843562\n\nThis reverts commit 056d7756152bb3ced81dd57781be5028428ce2bd.\n\nChange-Id: Ic778686168b90e29816fd526e23141dcbe5ea880\n"
    },
    {
      "commit": "056d7756152bb3ced81dd57781be5028428ce2bd",
      "tree": "154ae8968a450a2e02d88207fa09e380fd380553",
      "parents": [
        "e7441631a11e2e07ce863255a59ee4de29c6a56f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 30 09:12:13 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 30 09:12:13 2017 +0000"
      },
      "message": "Revert \"Revert \"Revert \"JIT JNI stubs.\"\"\"\n\nStill seeing occasional failures on 667-jit-jni-stub\n\nBug: 65574695\nBug: 69843562\n\nThis reverts commit e7441631a11e2e07ce863255a59ee4de29c6a56f.\n\nChange-Id: I3db751679ef7bdf31c933208aaffe4fac749a14b\n"
    },
    {
      "commit": "e7441631a11e2e07ce863255a59ee4de29c6a56f",
      "tree": "a0488fac018ea391d01b751b7254719937bdee8f",
      "parents": [
        "aa25db7d2a6f7f507c27ce49c99a33daf3059f8f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 29 13:00:56 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 29 14:04:26 2017 +0000"
      },
      "message": "Revert \"Revert \"JIT JNI stubs.\"\"\n\nThe original CL,\n    https://android-review.googlesource.com/513417 ,\nhad a bug for class unloading where a read barrier was\nexecuted at the wrong time from\n    ConcurrentCopying::MarkingPhase() -\u003e\n    ClassLinker::CleanupClassLoaders() -\u003e\n    ClassLinker::DeleteClassLoader() -\u003e\n    JitCodeCache::RemoveMethodsIn() -\u003e\n    JitCodeCache::JniStubKey::UpdateShorty() -\u003e\n    ArtMethod::GetShorty().\nThis has been fixed by removing sources of the read barrier\nfrom ArtMethod::GetShorty().\n\nTest: testrunner.py --host --prebuild --jit --no-relocate \\\n      --no-image -t 998-redefine-use-after-free\nBug: 65574695\nBug: 69843562\n\nThis reverts commit 47d31853e16a95393d760e6be2ffeeb0193f94a1.\n\nChange-Id: I06e7a15b09d9ff11cde15a7d1529644bfeca15e0\n"
    },
    {
      "commit": "47d31853e16a95393d760e6be2ffeeb0193f94a1",
      "tree": "344b0fddbbcc9a64bed2ba20dbe73fb227c2bdf4",
      "parents": [
        "3417eaefe4e714c489a6fb0cb89b4810d81bdf4d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 28 18:36:12 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 28 18:36:12 2017 +0000"
      },
      "message": "Revert \"JIT JNI stubs.\"\n\nSeems to break 998-redefine-use-after-free in\nsome --no-image configuration.\n\nBug: 65574695\nBug: 69843562\n\nThis reverts commit 3417eaefe4e714c489a6fb0cb89b4810d81bdf4d.\n\nChange-Id: I2dd157b931c17c791522ea2544c1982ed3519b86\n"
    },
    {
      "commit": "3417eaefe4e714c489a6fb0cb89b4810d81bdf4d",
      "tree": "fe97f5191d25d26ef4250280f4c599b3a50f2059",
      "parents": [
        "7bdc6e73fd97eb75f30b77f183e4fe6c2c599a09"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 21 18:14:28 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 28 13:00:09 2017 +0000"
      },
      "message": "JIT JNI stubs.\n\nAllow the JIT compiler to compile JNI stubs and make sure\nthey can be collected once they are not in use anymore.\n\nTest: 667-jit-jni-stub\nTest: Pixel 2 XL boots.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --jit\nTest: testrunner.py --target --jit\nBug: 65574695\nChange-Id: Idf81f50bcfa68c0c403ad2b49058be62b21b7b1f\n"
    },
    {
      "commit": "2ffb703bf431d74326c88266b4ddaf225eb3c6ad",
      "tree": "0552c3c76a42b18f9e7460d501fb71a6dc2e7f33",
      "parents": [
        "c4b6f3116f15c8e4fdf2e4f604ababdee12d8923"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Nov 08 13:35:21 2017 -0800"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Nov 08 15:15:52 2017 -0800"
      },
      "message": "cpplint: Cleanup errors\n\nCleanup errors from upstream cpplint in preparation\nfor moving art\u0027s cpplint fork to upstream tip-of-tree cpplint.\n\nTest: cd art \u0026\u0026 mm\nBug: 68951293\nChange-Id: I15faed4594cbcb8399850f8bdee39d42c0c5b956\n"
    },
    {
      "commit": "df00a1ed1a0b633a1e66f1f650f53c22ea260e5b",
      "tree": "82b965a44ce46f51def31e1e311a26ee991ee868",
      "parents": [
        "a2cbb2b0723a3fa05cc44e13cbe90543b3236883"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 01 09:29:53 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 01 11:47:01 2017 -0700"
      },
      "message": "Prevent abort in situations with recursive checkpoints\n\nIn situations where there were multiple checkpoints queued and the\nfirst one causes the thread to suspend itself again then the\nRunCheckpointFunction function will hit a LOG(FATAL) and abort. This\nis because the recursive checkpoint will clear out the checkpoint\nbacklog and the first RunCheckpointFunction invocation will\nunexpectedly find itself without any more checkpoints to run and\nabort.\n\nTo fix this, and simplify the code at the same time, we have changed\nthe RunCheckpointFunction method to (as its name suggests) only run a\nsingle checkpoint function. It will pop this function off the stack of\npending checkpoints and run it relying on the caller to ensure that\nall pending checkpoints are handled. This is fine since, due to the\nmultithreaded nature of checkpoints, the caller must call\nRunCheckpointFunction in a loop anyway to ensure it does not advance\nuntil all checkpoints have been handled.\n\nWe add test 203-multi-checkpoints that tests that the checkpoint\nsystem does not fall over if there are multiple checkpoints some of\nwhich can suspend.\n\nBug: 67838964\nTest: ./test.py --host -j50\nChange-Id: Ib6a3e083e6069d4839647d194bee6849d973633e\n"
    },
    {
      "commit": "b1e31a8337b9cce2f3160a972123886b355dce27",
      "tree": "30413acc04bd03c385b3b6023e332ecc535ff4ee",
      "parents": [
        "8cdfac752808784d29185710095ad104922cd861"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 04 16:57:36 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 18 17:01:37 2017 -0700"
      },
      "message": "Change RequestSynchronousCheckpoint to release thread_list_lock_\n\nThe RequestSynchronousCheckpoint function in some cases needs to\nrelease the thread_list_lock_ as it waits for a checkpoint to be\nexecuted. This means that the thread being checkpointed might be\ndeleted. Previously it was not obvious this was the case since the\nthread_list_lock_ seemed to be held throughout the execution of the\nmethod.\n\nIn order to prevent bugs we make RequestSynchronousCheckpoint\nexplicitly release the thread_list_lock_ when executed, meaning code\nwill be aware that threads might die during its execution.\n\nBug: 67362832\nTest: ./test.py --host -j50\nChange-Id: I1cbdf7660096dc1908b0eeabc1062447307bc888\n"
    },
    {
      "commit": "848574ca50bb7e2d109608359d1086b3ca6bb4b3",
      "tree": "6a3d55ae8b66279c1e417c7c5116394613037ae8",
      "parents": [
        "9c0a6ce0a41eaf78f3fc3224fc34195601b6e0b3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Sep 25 16:59:39 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 28 12:56:13 2017 -0700"
      },
      "message": "Implement asynchronous exception support\n\nThis CL implements async exception support in the switch interpreter.\nIt also adds support for the MTerp to detect and switch back to the\nswitch interpreter in cases where an async exception is detected.\n\nTests follow in next CL.\n\nTest: ./test.py --host -j50\n\nBug: 62821960\nBug: 34415266\n\nChange-Id: Idb53711a40c20f962de8aa6b74662676b8bd25c6\n"
    },
    {
      "commit": "4d159807a4854caa6396b708a38bbd6fa49d736f",
      "tree": "25c2ea8ce12881cf26c933c89a0a3096d260de46",
      "parents": [
        "08601a494e87dfba9b06f9fdea37c9342e4896d1",
        "0882af2e3ca253184b6ab56a8966a2f37407144e"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Sep 19 16:37:30 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 19 16:37:30 2017 +0000"
      },
      "message": "Merge \"Shrink ART Mutex exclusive_owner_ field to Atomic\u003cpid_t\u003e\""
    },
    {
      "commit": "217488a9ddf351033c1688198c492b9c40c36d8a",
      "tree": "98dc5553e2538b9b508c1837bc27b383d73b7149",
      "parents": [
        "e16ed6da590e717e28c07e2c9d1b342efc678870"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 18 08:34:42 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 18 12:50:43 2017 -0700"
      },
      "message": "ART: Move read barrier config out of globals\n\nReduce the global dependencies by refactoring where the read\nbarrier constants are defined.\n\nRename read_barier_c.h to read_barier_config.h and ifdef the\nC++ parts to have a common header for both C/asm and C++.\n\nPut heap poisoning configuration into its own minimal header.\n\nFix up transitive includes.\n\nTest: m\nChange-Id: I159669ec61e3d1c4c7ddcd79e63b023a0519717a\n"
    },
    {
      "commit": "0882af2e3ca253184b6ab56a8966a2f37407144e",
      "tree": "dc61cf0d66ec576c6b2e3b78b5fb304afd6994c9",
      "parents": [
        "6b411fc9fd94da3c552d8b96cee14f6414e7b734"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Aug 31 15:21:57 2017 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Sep 13 13:15:12 2017 -0700"
      },
      "message": "Shrink ART Mutex exclusive_owner_ field to Atomic\u003cpid_t\u003e\n\nThe old volatile uint64_t version had a data race, and was thus\ntechnically incorrect. Since it\u0027s unclear whether volatile uint64_t\nupdates are actually atomic on 32-bit platforms, even the informal\ncorrectness argument here already effectively assumed that the upper\n32 bits were zero. Don\u0027t store them. Explicitly complain if a pid_t\nmight be too big to support lock-free atomic operations.\n\nRemove many explicit references to exclusive_owner to avoid\nlittering the code with LoadRelaxed calls.\n\nThe return convention for GetExclusiveOwnerTid() was unclear\nfor the shared ownership case. It was previously treated\ninconsistently as 0 (pthread locks), (uint64_t)(-1U) and\n(uint64_t)(-1). Make it as consistent as easily possible, and\ndocument remaining weirdness.\n\nBug: 65171052\n\nTest: AOSP builds. Host tests pass.\n\nChange-Id: Ia99aca268952597a90b3c798b714cddbdc2c365e\n"
    },
    {
      "commit": "2ee17909eadd7155f4a7751c38398b36fc267f04",
      "tree": "2d13de7e9aae9d24ceb4ff1e03f81e46a5aee54b",
      "parents": [
        "1accd636dc90edef2878f0b8e2716b078379842e"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Aug 30 11:37:08 2017 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Sep 05 13:22:15 2017 -0700"
      },
      "message": "Revert^4 \"Allow deoptimization when returning from a runtime method.\"\n\nThis reverts commit 07c7028e518b98d3267a77dfe0d149db1adbe858.\n\nNeed some special treatment of string init\u0027s shorty.\n\nTest: run-test/gtest on both host and target\nTest: 597-deopt-busy-loop, 597-deopt-invoke-stub\nBug: 33616143\nChange-Id: Id4c64910acfdd088835b6db6fc503e6ade0218e7\n"
    },
    {
      "commit": "07c7028e518b98d3267a77dfe0d149db1adbe858",
      "tree": "71fbc9572541cdf08c21c88e3a1d5ff92f1d9885",
      "parents": [
        "047abb20d02546d3dd6e8630befc31e5568fa90e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 30 08:09:42 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 30 08:09:42 2017 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Allow deoptimization when returning from a runtime method.\"\"\"\n\nBug: 33616143\n\ndeopt string test still failing on occasion.\n\nThis reverts commit 047abb20d02546d3dd6e8630befc31e5568fa90e.\n\nChange-Id: I89fc28696290da52317d0e3dd07ecf0d1bdac823\n"
    },
    {
      "commit": "047abb20d02546d3dd6e8630befc31e5568fa90e",
      "tree": "dfe08cef1f53a7559f792221e3e06dccbe704380",
      "parents": [
        "95d9bdd36b7ae6682f8602292fd547a0faa73829"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Aug 23 15:26:57 2017 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Aug 24 14:36:21 2017 -0700"
      },
      "message": "Revert \"Revert \"Allow deoptimization when returning from a runtime method.\"\"\n\nThis reverts commit 2b87ae0073256e909e15f464300912552e58ee48.\n\nFor an invocation runtime method such as quick-to-interpreter bridge,\nadd a special stack walk to get the shorty for the invoked method.\n\nTest: run-test/gtest on both host and target, and 597-deopt-runtime-method.\nBug: 33616143\n\nChange-Id: I53ae93880f62c95dcf48005239b925d7f7b11eb6\n"
    },
    {
      "commit": "2b87ae0073256e909e15f464300912552e58ee48",
      "tree": "0b9db32799d6efa93d3db6dca5170d185627e138",
      "parents": [
        "fc63babf6be7bdd96be1492391594ad628f1fd3c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 23 10:16:26 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 23 10:16:47 2017 +0000"
      },
      "message": "Revert \"Allow deoptimization when returning from a runtime method.\"\n\nReason for revert:\n    Some tests failing even after a minor fix.\n\nThis reverts commit edeba10d523c3e283ab939a16c7203af32c7707e.\n\nChange-Id: I6407c9b489c016d19a12c28d1da0efa55ad554a7\n"
    },
    {
      "commit": "edeba10d523c3e283ab939a16c7203af32c7707e",
      "tree": "88f13395178e7a17979dcb0666c65c024732be6b",
      "parents": [
        "c9d88538d73680563f7a6e73885acfff2c55ef58"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Apr 12 13:43:15 2017 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Aug 21 16:44:57 2017 -0700"
      },
      "message": "Allow deoptimization when returning from a runtime method.\n\nThis CL patches the return pc of a runtime method to allow the top\nJava frame to be deoptimized. This should fix the issue that debugger\ncannot break in a busy loop. It also means we can now do full async\ndeoptimization, if we want to enable it by letting environment keep\nregisters live.\n\nart_quick_instrumentation_exit and art_quick_deoptimize now need to save\nall registers since some compiler slow paths assume runtime methods save\neverything.\n\nSome special handling needs to be done to decide whether dex_pc should\nbe advanced when deoptimized back to interpreter.\n\nTest: run-test/gtest on both host and target, and 597-deopt-runtime-method.\nBug: 33616143\nChange-Id: I2e2c199998825afd5057f7deadfc8fa203ce1936\n"
    },
    {
      "commit": "f26828bf1fd5381abc9d834fcbbd74f2465c59d1",
      "tree": "6ffcc4d1051609293210698d1926b2115b04407d",
      "parents": [
        "055761a47c4c0f591faaf44279e8d6a412c4f513"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Jul 27 12:49:01 2017 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Jul 27 12:51:31 2017 -0700"
      },
      "message": "Add a conditional boolean to ScopedAssertNoThreadSuspension.\n\nSometimes it\u0027s convenient to assert a block of code conditionally.\n\nTest: run-test\nChange-Id: I9c33840bb8818379dcede99d7247fc85f8ec5d17\n"
    },
    {
      "commit": "8cf9cb386cd9286d67e879f1ee501ec00d72a4e1",
      "tree": "88e86e214b425e444760fe4e0ffeee677e1558a2",
      "parents": [
        "914b7b6a6c9f399b26b41e9160e9871ef749e0db"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 19 09:28:38 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 24 16:07:10 2017 -0700"
      },
      "message": "ART: Include cleanup\n\nLet clang-format reorder the header includes.\n\nDerived with:\n\n* .clang-format:\n BasedOnStyle: Google\n IncludeIsMainRegex: \u0027(_test|-inl)?$\u0027\n\n* Steps:\n find . -name \u0027*.cc\u0027 -o -name \u0027*.h\u0027 | xargs sed -i.bak -e \u0027s/^#include/ #include/\u0027 ; git commit -a -m \u0027ART: Include cleanup\u0027\n git-clang-format -style\u003dfile HEAD^\n manual inspection\n git commit -a --amend\n\nTest: mmma art\nChange-Id: Ia963a8ce3ce5f96b5e78acd587e26908c7a70d02\n"
    },
    {
      "commit": "092a4046ff7bd3d7e24bc77cecf3d1bb0aa52107",
      "tree": "966086d6f9b69f1a677110f2d3cd3b9f0491bc3d",
      "parents": [
        "5e7eb2faccf8f4a28e9fcda26053a5b388f2190a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jul 12 08:46:44 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jul 14 14:52:23 2017 -0700"
      },
      "message": "Ensure jvmti agents don\u0027t share ThreadLocalStorage\n\nBug: 63665647\nTest: ./test.py --host -j40\n\nChange-Id: Iea33cca5b708f60390b8c79462ca991363ad33a2\n"
    },
    {
      "commit": "5e7eb2faccf8f4a28e9fcda26053a5b388f2190a",
      "tree": "12b2936d445607d1bd7294d3f4a6ba19c27d8951",
      "parents": [
        "6e875347976b1f332731be775dfd066fda730085",
        "88fd720b6799184c8ad61e766a6d37af33ed30ef"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 14 15:13:41 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 14 15:13:41 2017 +0000"
      },
      "message": "Merge \"Add Jvmti Suspend/ResumeThread functions\""
    },
    {
      "commit": "88fd720b6799184c8ad61e766a6d37af33ed30ef",
      "tree": "80e49456eafd44b0ad8790be456ae06949fcc506",
      "parents": [
        "1cba8d219331e4d6994359e8f9104e5db2c8f8a9"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jun 30 08:31:59 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jul 13 09:11:03 2017 -0700"
      },
      "message": "Add Jvmti Suspend/ResumeThread functions\n\nEnable the can_suspend jvmti capability and implement all required\nfunctionality associated with it.\n\nTest: ./test.py --host -j40\nBug: 34415266\nBug: 62821960\nBug: 63579748\n\nChange-Id: I83b92de7f81622e1658114b034918e8295805b6e\n"
    },
    {
      "commit": "97c46466aea25ab63a99b3d1afc558f0d9f55abb",
      "tree": "afd225f51d28a77329bc2590a025400e088f260c",
      "parents": [
        "00cca3a275562d110a8b35094b9b12fac37f67ab"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu May 11 14:04:03 2017 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jul 11 17:43:27 2017 +0100"
      },
      "message": "Introduce a Marking Register in ARM64 code generation.\n\nWhen generating code for ARM64, maintain the status of\nThread::Current()-\u003eGetIsGcMarking() in register X20,\ndubbed MR (Marking Register), and check the value of that\nregister (instead of loading and checking a read barrier\nmarking entrypoint) in read barriers.\n\nTest: m test-art-target\nTest: m test-art-target with tree built with ART_USE_READ_BARRIER\u003dfalse\nTest: ARM64 device boot test\nBug: 37707231\nChange-Id: Ibe9bc5c99a2176b0a0476e9e9ad7fcc9f745017b\n"
    },
    {
      "commit": "46f9340f2a055a8fdfebbfbb739c697c20d83e7c",
      "tree": "acb172f74723e4ea9ac7ded73b94c661217ec90d",
      "parents": [
        "fe9a4f061841a3c597aac6817a47c799c54fcad7"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 29 11:59:50 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jun 30 14:24:56 2017 +0000"
      },
      "message": "Add SuspendReason enum and change Suspension functions.\n\nMore self-documenting and more type safe.\n\nBug: 62821960\nTest: ./test.py\nChange-Id: Ic7a1ae6a25e687d65f5aa10c1aad54a7b80dd086\n"
    },
    {
      "commit": "28c4a233681040de4b2785ab5beef0a6d150e46a",
      "tree": "c05b8402deb757aaabc989ddc8fd3c0a051529cd",
      "parents": [
        "f1221a1f39987b94a54dc57b824fcf360c890ed0"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 21 21:21:31 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 21 21:24:22 2017 -0700"
      },
      "message": "ART: Fix RequestSynchronousCheckpoint\n\nFix the known races in the code by requiring more locks on entry.\nThis helps ensure there is no time in the caller where the thread\ncan die while requesting the checkpoint.\n\nFix up GetStackTrace, GetFrameCount and GetFrameLocation.\n\nBug: 62353392\nTest: m test-art-host\nTest: art/test/testrunner/testrunner.py -b --host -t 911\nChange-Id: Ia0c5e920599b58098dc4b3a3d09c5284045f2947\n"
    },
    {
      "commit": "b486a98aadc95d80548953410cf23edba62259fa",
      "tree": "b113b7d50a4a015502873b7742c9ece00d293e84",
      "parents": [
        "1656ca9e6996cb555b4463e5efd4bd7e3f4fb816"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 13:45:54 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 02 08:24:02 2017 -0700"
      },
      "message": "ART: Introduce thread-current-inl.h\n\nFactor out Thread::Current() code into its own -inl file to remove\ntransitive includes.\n\nThis requires at the same time correcting mutex.h, i.e., moving\nsome functions into mutex-inl.h.\n\nTest: m test-art-host\nChange-Id: I88f888b604e0897368d9b483edce6ce4332dd9c9\n"
    },
    {
      "commit": "513061a792b22c417c938d31c19581390709561c",
      "tree": "80b4fdce03711170626aa5640d07b07de4a326a1",
      "parents": [
        "38c4ae5f4c5a033b7a7441032f39ea58f5772d4c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 09:17:34 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 12:59:13 2017 -0700"
      },
      "message": "ART: Clean up thread.h and thread_list.h\n\nRemove dependency on stack.h and gc_root.h. Remove unused object\ncallbacks include. Factor out ManagedStack into its own set of files.\nFix up users of transitive includes.\n\nTest: m test-art-host\nChange-Id: I01286c43d8c7710948c161b1348faabb05922e59\n"
    },
    {
      "commit": "365719c23d809e595cf320bfba40e76bb4e87940",
      "tree": "0939f0d8dc47723978a665fa11dd637f6976d521",
      "parents": [
        "d6705a0586377f1b0d7d14d3abe2b270bb0adb18"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 08 13:11:50 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue May 16 01:58:03 2017 +0100"
      },
      "message": "No need to lock when calling Thread.interrupted.\n\nAlso intrinsify the Thread.interrupted call.\n\nThe rationale behind this optimization is that the flag can only\nhave two values, and only self can set it to false.\n\nTest: libcore, jdwp, run-tests, 050-sync-test\nChange-Id: I5c2b43bf872ba0bfafcb54b2cfcd19181864bc4c\n"
    },
    {
      "commit": "3768adec2f819cb506577618fdde158ba659ddd4",
      "tree": "38f929a1ec79088f1f4d3a205672acfb261af94b",
      "parents": [
        "55e8cd14fdbe257f4ecdd5d629eef6b8c93567c9"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 02 14:04:39 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 02 19:42:39 2017 -0700"
      },
      "message": "Revert \"Revert \"Add concurrent card graying for immune spaces\"\"\n\nAdded an additional checkpoint before the concurrent graying to set\nthe mark entrypoints to non-null.\n\nBug: 37876887\n\nTest: test-art-host\n\nThis reverts commit c83dd7bfde2171c879efb92a31a363505385ffb9.\n\nChange-Id: I961c4631c9595c52cd7765f61b22b8291fef2088\n"
    },
    {
      "commit": "6bc7774426cc0b6bbab5566fa62b3c509455e583",
      "tree": "06c47a48c43924e8cdc80ed3ec31b8fddb4b39b6",
      "parents": [
        "8d0f3aaf28358697ec812955cdf975ca6c6ff901"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 18 17:46:23 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 19 21:26:56 2017 -0700"
      },
      "message": "Use partial TLAB regions\n\nInstead of having 256K TLAB regions, have 256K TLABs split into\n16K regions. This fixes pathological cases with multithreaded\nallocation that caused many GCs since each thread reserving\n256K would often bump the counter past the GC start threshold. Now\nthreads only bump the counter every 16K.\n\nSystem wide results (average of 5 samples on N6P):\nTotal GC time 60s after starting shell: 45s -\u003e 24s\nAverage .Heap PSS 60s after starting shell: 57900k -\u003e 58682k\n\nBinaryTrees gets around 5% slower, numbers are noisy.\n\nBoot time: 13.302 -\u003e 12.899 (average of 100 runs)\n\nBug: 35872915\nBug: 36216292\n\nTest: test-art-host\n\n(cherry picked from commit bf48003fa32d2845f2213c0ba31af6677715662d)\n\nChange-Id: I5ab22420124eeadc0a53519c70112274101dfb39\n"
    },
    {
      "commit": "1c8f4ff04062407db3d2dd834dd6bc24f6662c4d",
      "tree": "a116c7d55fc1bcff2b451028f46a1196ee15d990",
      "parents": [
        "c1be9f2b776b4900e0603013f7c4d84e534f0bb0"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 14 15:05:12 2017 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 18 18:06:54 2017 +0200"
      },
      "message": "Always check result of Thread::ModifySuspendCount\n\nEnsures that we never ignore the result of ModifySuspendCount so that\nwe can react if the suspend count is not updated as expected.\n\nThis CL does the following:\n* Adds __attribute__((warn_unused_result)) on the method to raise an\n  error at compilation time if the result is ignored.\n* Wraps calls with DCHECK where the result used to be ignored.\n\nBug: 27385848\nTest: make -j test-art-host\nTest: art/tools/run-jdwp-tests.sh --mode\u003dhost --variant\u003dX64\nChange-Id: I2d0e1ab7158c70ec8076c8bae6e4b814aee75af6\n"
    },
    {
      "commit": "efd20cb2f63cf647c7d947d00e8987affefeb177",
      "tree": "666ea53832f1085378bcc75620f314ba1f46a330",
      "parents": [
        "caa348cee1312150a957bd308ce77ad406f3eb64"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 28 16:53:59 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 08 15:07:49 2017 -0800"
      },
      "message": "Catch signals that happen inside a fault handler.\n\nUnblock some signals (SIGABRT, SIGBUS, SIGSEGV) that could happen\ninside of the ART internal fault handlers, to report crashes inside of\nthe signal handler. Because we can\u0027t use sigaction to change the\nhandler when this happens, because it modifies global state, add a new\nmember variable in Thread to track whether a call to the fault handler\nis reentrant or not.\n\nRemove the old nested signal implementation that attempted to do this.\n\nBug: http://b/35853436\nTest: changed the #if 0 to #if 1, ran a dummy process that\n      threw a NullPointerException, inspected logcat\nChange-Id: I04bb4a09433c6817933d64ec681ec433b528f2a5\n"
    },
    {
      "commit": "45d942662883a0c5106b85b54e87be0f0610b394",
      "tree": "c5fc69b1d327ac7479eb2b6f90f9d45c4246689d",
      "parents": [
        "3fb852a88d2a8ffaa87089752f4b1d5f9d6ce3c1",
        "bad529da18122c7044fbfd7d56153535d34367b1"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Feb 15 21:02:26 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 15 21:02:27 2017 +0000"
      },
      "message": "Merge \"ART: Add currentThread cutout to Unstarted Runtime\""
    },
    {
      "commit": "8dc12b1546c7409be19a7b5dc48932011db13067",
      "tree": "a157d2fb7bee08f7c0290e8a41f0c7c9c883794d",
      "parents": [
        "e92ba687f9ab2a3cd9724f494b6899e8e6e472ec",
        "ffc8cad04135192a8d10e7f38bd97c48101294a8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Feb 15 09:39:05 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 15 09:39:06 2017 +0000"
      },
      "message": "Merge \"Add a DCHECK in thread::GetPeer.\""
    },
    {
      "commit": "bad529da18122c7044fbfd7d56153535d34367b1",
      "tree": "44982bc9ec345be1e96ba6c66e22e5c08fcaed56",
      "parents": [
        "1fb51268b78f55b345ea951a73eae5194ec71b91"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Feb 13 18:52:10 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 14 17:43:52 2017 -0800"
      },
      "message": "ART: Add currentThread cutout to Unstarted Runtime\n\nAdd currentThread() and getThreadState() cutouts to the unstarted\nruntime to allow further compile-time initialization. The cutouts\nare protected by call-stack checks.\n\nAdd tests.\n\nBug: 34956610\nTest: m test-art-host-gtest-unstarted_runtime_test\nChange-Id: I6335bccda8bedae90376fc7c47b303576f1ac78b\n"
    },
    {
      "commit": "ffc8cad04135192a8d10e7f38bd97c48101294a8",
      "tree": "fb90432ea5e6d218891c0b3fcccc0fa77d202f7d",
      "parents": [
        "4e4b62e21672dbacf5d5abb688a126aabad29269"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 10 10:59:22 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 14 15:42:29 2017 +0000"
      },
      "message": "Add a DCHECK in thread::GetPeer.\n\nMotivated  by https://android-review.googlesource.com/#/c/333205/.\n\nTest: test-art-host run-jdwp-test.sh\nChange-Id: I173c060324aa0dc39144db55e3a97e672c012ba8\n"
    },
    {
      "commit": "a222404a5832ab16786931576d52825d08eed3ca",
      "tree": "7350e5efbb6ef72c33e82753d79f7f4bed92d9d4",
      "parents": [
        "1561de49b382627ddd277b8ad7e5e8f4cec32f0b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Feb 08 16:35:45 2017 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Feb 10 16:15:01 2017 -0800"
      },
      "message": "Fix the empty checkpoint timeout.\n\nThe problem happens when a thread is indirectly blocked on a mutex\nthat another thread holds and is blocked on a weak ref access.\n\nAdd a way to do a dummy wakeup on a thread that\u0027s blocked on a mutex\nso that the thread will respond to the empty checkpoint request. Do\nthis for the mutexes that are expected to be held when a weak ref is\naccessed. Add a check that detects an unexpected case.\n\nBug: 33006388\nBug: 12687968\nTest: test-art-host.\nChange-Id: Iefec69b9a21aa25a928cb31fcf4fb872f867a8c2\n"
    },
    {
      "commit": "23d7c8590bea7f24b301d1dff79e09a4a9a8a51e",
      "tree": "132e735766807d4b4f09a266b8c1184751f31a74",
      "parents": [
        "6347ea975cd80e7344c8d04909e211685b9a32ad",
        "02f365f0fb74acf09ffb8f04a80d32ca1152ed8b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Feb 07 07:10:59 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 07 07:11:00 2017 +0000"
      },
      "message": "Merge \"Force stack dump to diagnose empty checkpoint timeout (2).\""
    },
    {
      "commit": "02f365f0fb74acf09ffb8f04a80d32ca1152ed8b",
      "tree": "7658baab9ac5c3c86b974d8dd5238f3cf2d9f2f0",
      "parents": [
        "7b220d60e3cb58c384a0d245106406080c6f3e37"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Feb 03 15:06:00 2017 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Feb 06 16:06:58 2017 -0800"
      },
      "message": "Force stack dump to diagnose empty checkpoint timeout (2).\n\nBug: 33006388\nBug: 12687968\nTest: test-art-host\nTest: Thread dumping in a simulated empty checkpoint timeout.\n\nChange-Id: I06641396b8f3d7a1a98366a01807aab2e6f31bd5\n"
    }
  ],
  "next": "202f85a54bfd1844664a18c18a4c0494763c6b82"
}
