)]}'
{
  "log": [
    {
      "commit": "e5c48f75476bc7bac843c862dfeeaeed2b95d94f",
      "tree": "81457b683b6d55148eea0b023ddb264daad9f502",
      "parents": [
        "085f3805cdfde5fdb130e31a2cf83071598ef082"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 11 11:28:43 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 11 15:01:33 2020 +0000"
      },
      "message": "Revert \"ART: Forbid the zygote to load code outside of system\"\n\nThis reverts commit 9ef308da0ea8d1df2edf65d4957599fafcc56aeb.\n\nBug: 150032912\nBug: 129454856\nTest: boots\nChange-Id: I522b1e0e2b9116239ca206aa5c65347976eac7ab\n"
    },
    {
      "commit": "280e6c323419ad08860514ff8c09eefb8fc8e969",
      "tree": "db1d3d73a8c00c5df9cb8809dc3ab53e5ed09af6",
      "parents": [
        "b28e3042b1dcab32c328b356a31f6ea8b50a9f9c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 03 13:52:07 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 10 18:46:53 2020 +0000"
      },
      "message": "Jit-zygote compiled code isn\u0027t debuggable\n\nWe check the debuggablity of compiled code by checking to see if it\nwas compiled by the JIT. This works since we throw all precompiled\ncode out when transitioning to debuggable. Unfortunately with\njit-zygote the non-debuggable zygote methods can be incorrectly seen\nas debuggable when encountered on the stack. This can lead to\nincorrect deoptimization and other issues. To fix this we explicitly\nexclude jit-zygote code from the check.\n\nBug: 144947842\nTest: ./test.py --host\nChange-Id: I4e953f64f8261b7a16d7c3199cec89998af0c1cf\n"
    },
    {
      "commit": "b28e3042b1dcab32c328b356a31f6ea8b50a9f9c",
      "tree": "4cfe4e2e6800db4ca843dd94a80e54fe97b8cfd7",
      "parents": [
        "b1fe5e18318c3af8d0cedc3f19cb6bc51817b859"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Mar 06 13:02:46 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 10 18:46:53 2020 +0000"
      },
      "message": "Clear PreCompiled when we transition to debuggable after zygote fork\n\nWe were leaving the PreCompiled bits set on method objects. This meant\nthat in some circumstances non-debuggable compiled code could be\nreattached to methods after the switch to debuggable with the zygote\nfork.\n\nBug: 144947842\nTest: atest CtsJvmtiRunTest1982HostTestCases\nChange-Id: I1f642f6da441c4f023ec1cbd873c05914c73dd7e\n"
    },
    {
      "commit": "814b9286540d0db5685aedc04c507d95e729d96b",
      "tree": "02651d535b27e0f660d1db90b05b289665051804",
      "parents": [
        "9f8ead24a13e0471a333f0776a024e970662591c"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Feb 19 16:37:11 2020 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Mar 03 09:13:01 2020 +0000"
      },
      "message": "Manually add java.io.Buffer private fields to the Core Platform API\n\nThis change adds the private fields in java.nio.Buffer to the Core\nPlatform API programmatically.\n\nThese fields are private and there is no way to express them in the\nAPI defintion. Although unfortunate, we are already doing this for\nmethods and fixing the points of use for these fields is a sizeable\ntask.\n\nBug: 124338141\nBug: 144502743\nTest: Boots, no warnings from native Core Platform API methods\nChange-Id: Icd06cae3f2fe523c71b79430009e76b30caf4b94\n"
    },
    {
      "commit": "9f8ead24a13e0471a333f0776a024e970662591c",
      "tree": "853103508567b0db20d034ae8e20dd19975d0b95",
      "parents": [
        "662f12ee2f2b886aebcc22d321b2d752227e0b38"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Feb 19 10:32:17 2020 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Mar 03 09:13:01 2020 +0000"
      },
      "message": "Remove support code for native Core Platform API checks\n\nNative Core Platform API checks rely on the stack unwinder. The\nunwinder instance increases the zygote rss by ~4MB. We need to keep the\nunwinder around to keep checks fast and not churn memory resources.\n\nBug: 124338141\nBug: 144502743\nBug: 149029127\nTest: m \u0026 boot\nChange-Id: Ia306ec6e48d7b2b330efd771348b563767973269\n"
    },
    {
      "commit": "41b605c5ad4b06ea127ac56c6e3a4c92e8913efd",
      "tree": "f7b28eb11051f3faada99c11dc594cccd34a5786",
      "parents": [
        "30b38f8d01cdb4c80092638f23c61d73e0d287f4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 12 10:52:22 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 14 12:01:58 2020 +0000"
      },
      "message": "Remove MIPS support from runtime/.\n\nTest: aosp_taimen-userdebug boots.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 147346243\nChange-Id: If1fc8be94caa69f734438d7a1f4c715addfd8876\n"
    },
    {
      "commit": "b682ea4d1f9f88ef41589007f385398033d61b65",
      "tree": "b843077f05e2fe37ce5f566dfc823552f289f562",
      "parents": [
        "77aa6807053a830fe5c951c7cb700813d7e2e27b"
      ],
      "author": {
        "name": "Dan Zimmerman",
        "email": "danzimm@fb.com",
        "time": "Mon Dec 23 06:59:06 2019 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Sat Feb 08 00:01:36 2020 +0000"
      },
      "message": "Introduce BaseDexClassLoader.computeClassLoaderContextsNative\n\nThis will be used to compute the contexts that should be sent over to\nthe dex load reporter. See associated changes in libcore \u0026\nframeworks/base.\n\nMotivation: At the moment of committing there are two classloader\ncontext encoders- one in ART and one in the package manager. The\nduplicate logic is susceptible to divergences. For example at the moment\nif a package uses shared libraries and has secondary dex files then the\ncontext encoded for secondary dex files will be incorrect[1]. In order to\neliminate this bug and future possible bugs lets centralize where all\nclassloader context computation is done.\n\n[1]: The context will be incorrect because it doesn\u0027t take into account\nthe shared libraries that are loaded at runtime.\n\nTest: m test-art-host-gtest-class_loader_context_test\nTest: m test-art-host-gtest\nTest: ./test/testrunner/testrunner.py --host -b\nTest: Introduced a set of tests for the new API(s)\nTest: See tests in associated libcore \u0026 framework/base commits\n\nBug: 148494302\nChange-Id: Id39293a2e1d3d05194f2864f4febb3e652bce075\n"
    },
    {
      "commit": "4cbb51a0c057249a500ca7fe3947401978f165d2",
      "tree": "af626569243ce560c45fe5c653ca61fae0cd6a0b",
      "parents": [
        "5d24c3d43152b36181fbf9819bfbe5589572f16b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 07 11:25:54 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 07 18:21:11 2020 +0000"
      },
      "message": "Fix ART code around JIT zygote.\n\n- The right image location for it now ends with a profile\n- Add profile locations to image spaces, so the JIT knows what to\n  compile\n- Remove now deprecated ApexImage related code.\n\nBug:119800099\nTest: boots, methods from framework gets compiled by zygote\nChange-Id: Ie31b62d0a25f1b50e266c1537c43307d7b29e138\n"
    },
    {
      "commit": "fc58809f7b932d86234130be15487017dc37b0cf",
      "tree": "d003dedec73d77473aff6b2039860bc76a69d898",
      "parents": [
        "d00f129f1b7148f01efe6e9283a72d6ec8f0edd3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 23 15:39:08 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 29 23:31:10 2020 +0000"
      },
      "message": "Remove old JDWP implementation from ART\n\nThe old \u0027internal\u0027 JDWP implementation hasn\u0027t been used for a few\nreleases and it\u0027s a lot of code that\u0027s barely being tested and is at\nrisk of bit-rot. To simplify the runtime and remove potentially buggy\ncode this removes it.\n\nWe also needed to rewrite the DdmThreadNotification code since it\nrelied on the suspension functionality from the old debugger and was\ngenerally unsafe.\n\nTest: ./test.py --host\nTest: atest --test-mapping cts/tests/jdwp/TEST_MAPPING\nTest: atest --test-mapping cts/hostsidetests/jdwptunnel/TEST_MAPPING\nTest: Manual ddms\n\nBug: 119034743\n\nChange-Id: I775f310a009141296b730e4a6c2503506a329481\n"
    },
    {
      "commit": "abafbe759a354dd6c6d81d4aba3f0aec9aca3d5b",
      "tree": "abd0c540ee97708916450c07bc37d4cd5229a902",
      "parents": [
        "7ec3e60dd656509f4346fc94968f9de22cedcaaf"
      ],
      "author": {
        "name": "Lev Rumyantsev",
        "email": "levarum@google.com",
        "time": "Fri Dec 13 15:49:37 2019 -0800"
      },
      "committer": {
        "name": "Lev Rumyantsev",
        "email": "levarum@google.com",
        "time": "Tue Jan 21 23:09:34 2020 +0000"
      },
      "message": "nativebridge: Add PreZygoteFork callback\n\nIt\u0027s required to clean-up the emulated enviroment (e.g. close file\ndescriptors) after emulated execution in doPreload() in app-zygote.\n\nTest: NativeBridge6PreZygoteFork_test\nTest: CtsSeccompHostTestCases\nandroid.seccomp.cts.SeccompHostJUnit4DeviceTest\ntestAppZygoteSyscalls\nboth for Q.sdk_gphone_x86_arm.armeabi-v7a\nBug: 146904103\n\nChange-Id: Id192a1647c2f405570bf196daf65b3f2a9faca42\n"
    },
    {
      "commit": "87f3630befee523a9b384b95fc23bfaadcc404d6",
      "tree": "8d7a9f980cc8bdca0a03b5d02f9b130cb59b1115",
      "parents": [
        "75408ad56bf5b240dc3c4a4db23a423c18a63920"
      ],
      "author": {
        "name": "Lev Rumyantsev",
        "email": "levarum@google.com",
        "time": "Fri Dec 13 15:49:37 2019 -0800"
      },
      "committer": {
        "name": "Lev Rumyantsev",
        "email": "levarum@google.com",
        "time": "Tue Jan 21 23:09:34 2020 +0000"
      },
      "message": "runtime: Initialize native bridge in app-zygote\n\nAn app-zygote may be running PreLoad hooks, which may require native-bridged\nexecution if non-native jni code is involved (testAppZygoteSyscalls needs that).\n\nTest: CtsExternalServiceTestCases\nandroid.externalservice.cts.ExternalServiceTest\ntestBindExternalServiceWithZygote\nTest: CtsSeccompHostTestCases\nandroid.seccomp.cts.SeccompHostJUnit4DeviceTest\ntestAppZygoteSyscalls\nboth for Q.sdk_gphone_x86_arm.armeabi-v7a\nBug: 143143718\nBug: 146904103\n\nChange-Id: I53f33183cc3d0bd992344441111a84f4c04533fa\n"
    },
    {
      "commit": "46d7b24ddb2160123afb3facad4b54242422a45f",
      "tree": "35544059d1902949f7def95f95b655a152fcb9ea",
      "parents": [
        "fe0ce64326bc0531616fb6b5388400cd9787370e"
      ],
      "author": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Tue Jan 14 17:44:37 2020 +0000"
      },
      "committer": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Wed Jan 15 09:19:00 2020 +0000"
      },
      "message": "Add atrace event for perfetto_hprof init.\n\nBug: 147577567\nBug: 147667830\n\nChange-Id: If6528e2544a19cd4af6f21630fabe84434c1c1ef\n"
    },
    {
      "commit": "6ac057f2ce45a5e1c7c51d3c99bad52f6950469c",
      "tree": "ea7c5e16bd739da6b0bbd9cd765b7483a36239ee",
      "parents": [
        "262871557cc40da5f26c7f2b7f3fed32ecf8d331"
      ],
      "author": {
        "name": "Ulya Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Wed Dec 04 17:04:16 2019 +0000"
      },
      "committer": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Mon Jan 13 10:37:59 2020 +0000"
      },
      "message": "Use boot image extension in the JIT-zygote experiment.\n\nTest: temporarily enable JIT-zygote configuration, build, boot the\n  device and ensure that the JIT-zygote specific boot image\n  apex-framework.art is mapped in the zygote address space:\n\n  1. enable Jit zygote in the product device config (in my case\n    device/google/muskie/aosp_walleye.mk):\n\n    +# System server should not contain compiled code.\n    +PRODUCT_SYSTEM_SERVER_COMPILER_FILTER :\u003d verify\n    +\n    +# Use the apex image for preopting.\n    +DEXPREOPT_USE_APEX_IMAGE :\u003d true\n    +\n    +# Have the runtime pick up the apex image.\n    +PRODUCT_PROPERTY_OVERRIDES +\u003d \\\n    +    dalvik.vm.boot-image\u003d/apex/com.android.art/javalib/apex.art:/system/framework/apex-framework.art\n\n  2. lunch aosp_walleye-userdebug \\\n    \u0026\u0026 m \\\n    \u0026\u0026 adb reboot bootloader \\\n    \u0026\u0026 fastboot flashall -w\n\n  3. adb shell cat /proc/`adb shell ps | grep zygote64 | awk {\u0027print $2\u0027}`/maps | grep apex-framework.art\n  6fe44000-7025c000 rw-p 00000000 fc:02 1179718                            /data/dalvik-cache/arm64/apex@com.android.art@javalib@apex-framework.art\n  70571000-70696000 rw-p 0072d000 fc:02 1179718                            /data/dalvik-cache/arm64/apex@com.android.art@javalib@apex-framework.art\n  75a339f000-75a33ac000 r--p 00852000 fc:02 1179718                        /data/dalvik-cache/arm64/apex@com.android.art@javalib@apex-framework.art\n\nChange-Id: Ic35bc4d4d472013c2b28f48e030e5c101eba5670\n"
    },
    {
      "commit": "a3f8129f53394d315618e5c185e95fb8c9d2e28b",
      "tree": "4fde2a3eedadc2598c501e058a7b88e8feb47444",
      "parents": [
        "4d804b8eb891aeef0cd9a3e29c65cc31355b2a69"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 08 16:02:46 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 10 04:27:14 2020 +0000"
      },
      "message": "Make StartDebugger the last thing in InitNonZygoteOrPostFork again\n\nStartDebugger should be the last thing in InitNonZygoteOrPostFork\nsince it is allowed to either suspend until there is a debugger\nconnection or allow concurrent debugger actions to start taking place.\nDoing any initialization after it\u0027s called is therefor dangerous.\n\nTest: adb forward tcp:12345 jdwp:`adb shell pidof com.antonioleiva.bandhookkotlin`\n      jdb -attach localhost:12345\n\nChange-Id: I4d435a3d48fcbb01054d7b551d713de851077489\n"
    },
    {
      "commit": "65c18a21e7cb0d48327788df498f15ae195e9e3c",
      "tree": "ba49c1f07e7cd2bc6d9ffbafc184bcad85e9ce45",
      "parents": [
        "c4d13ae39ec6f4b6b76b152818516081beb6bb56"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jan 03 23:37:13 2020 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Jan 07 17:40:19 2020 +0000"
      },
      "message": "Revert^4 \"Add spin loop to mutex, overhaul monitor\"\n\nThis reverts commit ead89ef62768faa06fedd279b86bccbed1464673.\n\nPS1 is identical to Revert^2.\n\nThis fixes a shutdown issue caused by prematurely hanging when we\nblock while trying to acquire system mutexes during shutdown.\n\nOnly refuse to wake up after shutdown is well under way.\n\nBug: 140590186\nBug: 121302864\nTest: Build and boot AOSP.\nTest: art/test/testrunner/testrunner.py --host -b -t 1932-monitor-events-misc\nTest: art/test/testrunner/testrunner.py --host -b -t 004-ThreadStress\nTest: art/test/testrunner/testrunner.py --host -b -t 132-daemon-locks-shutdown\nTest: 132-daemon-locks-shutdown repeated with increased thread counts and multiple\nconcurrent tests.\n\nChange-Id: Ic19d32652a2a05c1ca843b3e9c6e29e6770262da\n"
    },
    {
      "commit": "ead89ef62768faa06fedd279b86bccbed1464673",
      "tree": "27e3bef919a0775f45c0dfc08b6a26d7688e8a98",
      "parents": [
        "8d94dddfd60ab8122b0abb1a0d90fb13d752a7b6"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jan 03 21:37:10 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 03 22:50:59 2020 +0000"
      },
      "message": "Revert^3 \"Add spin loop to mutex, overhaul monitor\"\"\n\nThis reverts commit 3d52abe40e619497b1b59cfce92c74b5a417add5.\n\nReason for revert: Causes asan build timeout; Apparently the runtime\ngoes away while we\u0027re holding a system mutex. We now sleep forever\nwithout releasing it.\n\nBug: 140590186\nBug: 121302864\nChange-Id: I9e4dcaf820815c751aa803473809955451988ebd\n"
    },
    {
      "commit": "3d52abe40e619497b1b59cfce92c74b5a417add5",
      "tree": "50c67eb9a980b1525f78e03d0941605bb9fa3887",
      "parents": [
        "eac38a141a95adc273059ba2f6ad26f073391ed3"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Nov 19 18:49:50 2019 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jan 03 19:15:21 2020 +0000"
      },
      "message": "Revert^2 \"Add spin loop to mutex, overhaul monitor\"\n\nThis reverts commit d56f7d1086b16f32c0771a41a4afb376b5fd3076.\n\nReason for revert: PS2 fixes the problems I identified.\n\nPS1 is straight revert^2 of, and thus identical to aosp/1111800.\n\nPS2 in addition:\n- Reduces the size of the test, when not modified to run as benchmark.\n- Disables the test in slow-running configurations, which timed out.\n- Stops using the mutex recursion count, and instead reintroduces\n  one at the monitor level. The plan is to eliminate the one in mutex\n  in a future CL.\n- Avoids modifying various monitor fields in suspended state.\n  MonitorInfo, deflation, etc., may look at the state of a suspended\n  thread and expect not to race. I don\u0027t think the original code had\n  this completely correct either, but PS1 made it worse.\n- Documents some aspects of the code that confused me at times.\n- Avoids dereferencing the monitor owner Thread* unless it holds the\n  thread list lock, and thus knows that the thread won\u0027t go away.\n- Stores a Thread* instead of a thread_id with the monitor owner method\n  and dex pc information used for debugging. This is required to avoid\n  extra thread list lock acquisitions, since we need to dereference the\n  owner to get the thread id.\n- Makes the thread list Contains method public, again in order to\n  support the above. (This ignores C/C++ restrictions on dangling\n  pointer use. We already rely on violating those elsewhere, and\n  the committees are trying to get their story straight about this.)\n- Causes the spin loop to give up immediately if the process is\n  shutting down. This gets us to an actual idle state sooner in that\n  case, and should hopefully mitigate the shutdown issues somewhat.\n  (We tried not spinnning in \"suspended\" state, but that reintroduced\n  some performance issues.)\n- Makes runtime shutdown code more defensive. Clear fields pointing to\n  deallocated objects. Always wait for quiescence AFTER all threads\n  are suspended.\n- Consistently checks for a runtime that\u0027s shutting down or missing\n  after waking up from a futex wait, thus avoiding touching deallocated\n  memory. I believe this was the cause of b/121302864, which PS1\n  managed to aggravate.\n- SleepForever() was a very light sleeper, waking up once a second.\n  Fix that, so the daemon threads we leak on runtime shutdown cost\n  us less.\n- Remove a data race from the \"was the runtime deleted\" logic.\n\nBug: 140590186\nBug: 121302864\nTest: Build and boot AOSP.\nTest: art/test/testrunner/testrunner.py --host -b -t 1932-monitor-events-misc\nTest: art/test/testrunner/testrunner.py --host -b -t 132-daemon-locks-shutdown\nTest: art/test/testrunner/testrunner.py --host -b -t 004-ThreadStress\n\nChange-Id: I6667c61beed2ba68c84cd4c0821fb8e21e188bbc\n"
    },
    {
      "commit": "145f3c4aa4dc40b0682cac95a93163a79fb54f52",
      "tree": "40435e85049c357d44f0b7853f5aaa5c2d683b2d",
      "parents": [
        "bd0ac86f6889e7540853df80b5b499a2151f2a97"
      ],
      "author": {
        "name": "Dan Zimmerman",
        "email": "danzimm@fb.com",
        "time": "Wed Dec 18 04:21:38 2019 -0800"
      },
      "committer": {
        "name": "Dan Zimmerman",
        "email": "danzimm@fb.com",
        "time": "Wed Dec 18 04:26:13 2019 -0800"
      },
      "message": "[art] Yama LSM isn\u0027t mandatory\n\nSome machines building debug builds don\u0027t have YAMA enabled (and it\ndoesn\u0027t seem to be mandatory for running/testing ART debug builds)\n\nTest: ./test/testrunner/testrunner.py -b --host -t 001-HelloWorld\n\nChange-Id: I1aa258380ddbf8c4f59ea22a9d901169ba448ef8\n"
    },
    {
      "commit": "00391824f4ee89f9fbed178a1ee32bc29fa77b3b",
      "tree": "aea6bc5e49801c5b4816257ab16a97181ef0d911",
      "parents": [
        "001e5b33ba7065dde0b85450830b605733ae1685"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 10 10:17:23 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 18 06:50:39 2019 +0000"
      },
      "message": "Add an implementation of Nterp for x64.\n\nAnd enable it on x64 when runtime and ArtMethod requirements are met\n(see nterp.cc).\n\nTest: test.py\nBug: 112676029\nChange-Id: I772cd20a20fdc0ff99529df7495801d773091584\n"
    },
    {
      "commit": "abd8f052512fa2bb404f1eb0a42ffe0e5d802b7e",
      "tree": "28bec78b6866aae9713c9eb471680c7aa4fb746b",
      "parents": [
        "3bdb97798d9a00c498833e00b49927f62b9e7f90"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Dec 06 10:49:17 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 10 22:51:35 2019 +0000"
      },
      "message": "Proactively dequicken on debuggable switch.\n\nPreviously we would generally not really consider dex2dex quickening\nwith debuggable processes. This could cause problems for structural\nredefinition since the -quick opcodes are incompatible with the types\nof changes structural redefinition allows. Furthermore this can cause\nsome unexpected behavior where (for example) check-casts might appear\nto pass even if debugger activity should cause it to fail.\n\nIn order to fix these issues we make the runtime more proactively\ndequicken dex-files when we start or switch to JAVA_DEBUGGABLE mode.\n\nTest: ./test.py --target --host\nTest: adb install -t ~/misc/Bandhook-Kotlin/app/build/outputs/apk/debug/app-debug.apk \u0026\u0026 adb shell monkey -p com.antonioleiva.bandhookkotlin -c android.intent.category.LAUNCHER 1\nBug: 134162467\nBug: 144168550\nChange-Id: I2673c91b72ae7048d2ff71a1cf68cf552d4e8004\n"
    },
    {
      "commit": "4ca2f4894ced84805c3c1b707cc1db790339a582",
      "tree": "08ba80b376bf0513589514913b1ba6a63667b0aa",
      "parents": [
        "dd09f7114ccdbe4cefd76c37f2db8b899a991923"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 25 16:07:22 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Dec 09 17:53:44 2019 +0000"
      },
      "message": "Enable JNI ID auto swap on debuggable\n\nMake JNI-ids automatically switch to Indices on debuggable processes.\nThis allows one to make use of structural redefinition in these\nprocesses.\n\nTest: Manual\nTest: listextensions agent\nBug: 134162467\nChange-Id: I097c16f26c9a42ab523b4cb06cdb603f70bb38bb\n"
    },
    {
      "commit": "b7bf843b04046f2758998c019e947611d0208217",
      "tree": "0a6033402ebde2859267c865dc4e14cde9170835",
      "parents": [
        "726e2dd6db60968b36c1d03feab236edc8fa806b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 03 13:18:50 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 06 10:57:08 2019 +0000"
      },
      "message": "Use provided dex filenames in oat file.\n\nRemove OatFile::RemoveRelativeEncodedDexFileLocation() and\nuse the provided `dex_filenames\u0027 (see below) if not empty,\nwithout checking for prefix match or host/target build type.\n\nAlso add extra primary/multi-dex location checking when\nopening an oat file. Since some tests were already creating\noat files from multiple dex files, rewrite the interface to\nbetter support that option, replacing the old argument\n`abs_dex_location` with `dex_filenames` that can provide\npaths to multiple dex files.\n\nTest: m test-art-host\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: I36a9abca72872c41e4c10fdacbeadf551ca740dc\n"
    },
    {
      "commit": "e3f775bace85f4fe02dfd4042091d2f7d6fcbc25",
      "tree": "41446ada658dc05abb073edc5c2c134e83802619",
      "parents": [
        "621738039bbca55a2513bddb6ea66d4934fa7089"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 04 14:41:52 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Dec 05 13:34:57 2019 +0000"
      },
      "message": "Address comments from aog/1180224.\n\nMove handling of objects in interpreter cache to weak objects.\n\nBug: 119800099\nTest: test.py\nChange-Id: Ie7b2b2e285607a7c1460fd4f0b4ea690f9a16594\n"
    },
    {
      "commit": "bc19b7559e887310664a4c86ad3eb3b47749b087",
      "tree": "820961050c6904f89d9bfe67f8b936f2a5ec9d9c",
      "parents": [
        "0a19e212e56fc6fe2809b58072ddcf4acfdc568d"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Dec 02 18:54:13 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 20:35:34 2019 +0000"
      },
      "message": "Revert^2 \"Make opaque-jni-ids:swapable more efficient\"\n\nThis reverts commit 42c52f53b3c85b5e3c984bca8eaec2e03893dd2e.\nThis un-reverts commit 4e7dd70e3ee7a25089bed791df8865966cb4b837.\n\nWe were missing some null-checks that caused a null-pointer\ndereference to occur if one tried to get a jmethodID for an obsolete\nmethod when we start with index-ids.\n\nReason for revert: Fixes issue causing failure in art-jit config.\nTest: Manual\nTest: count-fields.py\nBug: 134162467\n\nChange-Id: Ie36c7a4edb70f96655b3b85e5f5eaa6bf47f5cc7\n"
    },
    {
      "commit": "42c52f53b3c85b5e3c984bca8eaec2e03893dd2e",
      "tree": "1589dd3831503767b445734c02bf5e9e4abaaa0e",
      "parents": [
        "f1b809ce611e943f926fff97cefe0930226ffcc2"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Dec 02 18:50:16 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Dec 02 18:52:38 2019 +0000"
      },
      "message": "Revert \"Make opaque-jni-ids:swapable more efficient\"\n\nThis reverts commit 4e7dd70e3ee7a25089bed791df8865966cb4b837.\n\nReason for revert: Breaks art-jit column\n\nChange-Id: If1ea54c45f340a06b4601c1c8494b7dd7e8f7bf8\nTest: Manual\nTest: count-fields.py\nBug: 134162467\n"
    },
    {
      "commit": "4e7dd70e3ee7a25089bed791df8865966cb4b837",
      "tree": "3cd2e8afc92262f0cdf474bcdbddde1723976575",
      "parents": [
        "08d0984bfeaff1a1bc2db2d51ecf45f2867b3bc4"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 25 13:47:01 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 16:57:13 2019 +0000"
      },
      "message": "Make opaque-jni-ids:swapable more efficient\n\n-Xopaque-jni-ids:swapable was rather memory inefficient, allocating an\nentire PointerSizedArray to mark a method/field as having a\nPointer-id. Since normally these will not be used once the JNI id type\nmoves to kPointer this is rather wasteful. By changing to instead have\na single marker object which is used instead of the full PointerArray\nwe can use significantly less memory in common use-cases.\n\nTest: Manual\nTest: count-fields.py\nBug: 134162467\nChange-Id: I224f0810373afef2335fad092eb758f91455f9e5\n"
    },
    {
      "commit": "882d41435982c518506f544ab79a9fa0a90cc78f",
      "tree": "5b5902f9ba26b45c2ced2367f168d82f33ad7b7c",
      "parents": [
        "da3653f1424236c4778cf3806861d04f2ba9b07e"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 21 13:27:10 2019 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 25 21:33:30 2019 +0000"
      },
      "message": "Use nativePostForkSystemServer for system server profiling\n\nNeed to use nativePostForkSystemServer instead of nativePostForkChild\nsince nativePostForkChild is called after the class loader is created.\n\n(cherry-picked from commit 0712f2969c0f19fa2cc41f99751d39ee1852ebbc)\nBug: 139883463\nBug: 144383344\nTest: showmap `pid system_server` and verify\nTest: atest BootImageProfileTest\n\nMerged-In: I7c4f61b08d286ef6056931231f6b835749092720\nChange-Id: I7c4f61b08d286ef6056931231f6b835749092720\n"
    },
    {
      "commit": "682715ee1448959801640975005abb8b876b80b3",
      "tree": "db230f9af26acef7d5fd30317429432fa924a183",
      "parents": [
        "be08b201e20900d590c235eb7a933ace2212ccbc"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Nov 11 18:45:29 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 13 01:35:34 2019 +0000"
      },
      "message": "Set system server package name to \"android\" when profiling\n\nSystem server does not set a value for it\u0027s runtime package name.\nConfigure it before we start the profile saver so that we can annotate the\nsamples with a proper name.\n\nTest: manual\nBug: 139884006\nChange-Id: Id09cf493b9e7227f85d0c7554aef248253f2a44d\n"
    },
    {
      "commit": "1c5949ee99d5eb01ea9abe706cf372d59f02e891",
      "tree": "a0ebfcfc2c651bd46e1bbb98e11f1f98b4a5cdab",
      "parents": [
        "7a20cbdd42fbab5ad562bf98b867c533b0a12164"
      ],
      "author": {
        "name": "Victor Chang",
        "email": "vichang@google.com",
        "time": "Mon Nov 04 19:36:00 2019 +0000"
      },
      "committer": {
        "name": "vichang",
        "email": "vichang@google.com",
        "time": "Mon Nov 11 13:04:11 2019 +0000"
      },
      "message": "libicu_jni needs to be initialized before libopenjdk{d}\n\njava.lang.System, which implements System.loadLibrary, depends on ICU4CMetadata.\nThus, libicu_jni has to be loaded before libopenjdk, which initializes java.lang.System. Otherwise, the device fails to boot.\nSee b/143888405 for details.\n\nBug: 138994281\nBug: 143888405\nTest: device boots\nChange-Id: I3d6691be012601368820c3de717ee1268b6b7ca9\n"
    },
    {
      "commit": "d3d00c06a439f5204b290505a3333f780dd00bce",
      "tree": "7fb793aa293908b9218267acbf8e10da14e95031",
      "parents": [
        "0f7c792f12905558836cc01f3406d6ba364cefd7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 07 15:09:07 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 07 16:46:05 2019 +0000"
      },
      "message": "Refactor oat.h.\n\nMove OatClassType and OatMethodOffsets to oat_file.h and\nmake all dependencies on oat.h explicit instead of relying\non transitive #includes. This reduces the number of files\nthat need to be rebuilt for oat version changes.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I89c8e397a4f423043d7a036a995cc33548b25051\n"
    },
    {
      "commit": "acdb9a350fede0776e1f4d6d04dc3246249345e3",
      "tree": "571b9d7e6b9606b1258314f781eb1341399def81",
      "parents": [
        "4c6d765dae35f7a3e7cafdbe346821622e65d6d4"
      ],
      "author": {
        "name": "Artur Satayev",
        "email": "satayev@google.com",
        "time": "Mon Oct 28 18:09:53 2019 +0000"
      },
      "committer": {
        "name": "satayev",
        "email": "satayev@google.com",
        "time": "Wed Nov 06 13:16:51 2019 +0000"
      },
      "message": "Plumb @TestApi enforcement policy to runtime.\n\nBy default access to test APIs would be allowed for instrumented processes only.\n\nBug: 133832325\nTest: manual\nChange-Id: Iaa68447c88304b062025c96e8b863a0758b78add\n"
    },
    {
      "commit": "ccc75191d44f696c39262d3c774b2500d06bebb7",
      "tree": "4e30f0d47d916e2da7aebe1213c028d543095c79",
      "parents": [
        "5fd05e5cfd06c9e682d8b3a097bf0b30e2a85ed4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 28 13:34:03 2019 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 04 23:42:59 2019 +0000"
      },
      "message": "Avoid making oat files executable for system server profiling\n\nDone so that we will only use JIT + interpreter to get samples for\nservices.jar.\n\nBug: 139883463\nTest: showmap `pid system_server` and verify\n\nChange-Id: I6f13446948fd92a43a9312988fd6e00ee4a0ed41\n"
    },
    {
      "commit": "f05f04b429a63eb036f501866a863109f05b95b2",
      "tree": "e6abb50536cb04ed60cf134b2e9556366e5a2064",
      "parents": [
        "5859799ce6ad57ee862434603fc29cecfec1d775"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 31 11:50:41 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 31 14:52:45 2019 +0000"
      },
      "message": "Make ArtMethod methods const or requiring the mutator lock.\n\nHelps the jitzygote optimization on sharing the boot image methods\npost fork.\n\nThe CL shows that the code base already almost fully handles requiring\nthe mutator lock when mutating ArtMethod data.\n\nBug: 119800099\nTest: builds\nChange-Id: If4a938b66aac85304ec0a27c53bb9fa951191d8c\n"
    },
    {
      "commit": "ad390fab9e0a724790337674692b4ef15cb4ccb2",
      "tree": "1a59c68d31629550b591e85cac1a96829a6c2ce7",
      "parents": [
        "76a37458ee823202504dcff3dc95f19957a726a3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 16 20:03:00 2019 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 18 23:07:46 2019 +0000"
      },
      "message": "Use GC exclusion for NotifyStartupCompleted\n\nPrevent deadlocks that can occur in very rare cases where checkpoints\nblock on a thread decoding weak globals, resulting in a deadlock.\n\nThis is done by moving the startup completed event on a separate\nthread and using GC exclusion.\n\nTest: test-art-host\nBug: 138852758\n\nChange-Id: I314c61aff5be0d5829f7ad5fac0659e99dec1d90\n"
    },
    {
      "commit": "65ae669694e4376d6015d8a54668d5d4bc826c27",
      "tree": "4a213390429b9b598add13fb85262343e654981d",
      "parents": [
        "27e5f3bc36407904e76ee35d54c8d5bbfdf7402b"
      ],
      "author": {
        "name": "Victor Chang",
        "email": "vichang@google.com",
        "time": "Fri Oct 11 14:17:21 2019 +0100"
      },
      "committer": {
        "name": "vichang",
        "email": "vichang@google.com",
        "time": "Tue Oct 15 06:43:05 2019 +0000"
      },
      "message": "Add jni libicu_jni library into ART APEX\n\n- The library may be moved into i18n APEX in the future\n\nBug: 138994281\nTest: device boots\nChange-Id: I9c629224bb318acde744d470e7483a80b2473aa4\n"
    },
    {
      "commit": "55eccdf61f46bd2a633f489f8d09cf78e1de1938",
      "tree": "e60d91c8fc48dfe70956ec9febd346b9dc9fcf77",
      "parents": [
        "49df715faf3700e874fbe246b339a8e426549216"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 07 13:51:13 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Oct 07 18:59:55 2019 +0000"
      },
      "message": "Revert^4 \"Walk internal ArtField/ArtMethod pointers\"\n\nSeveral of the new tests make use of the invoke-custom opcode. This\nopcode is not supported by dexter/slicer causing the tests to fail.\n\nThis reverts commit c34eab45161c51bf63e548e44645cbcc59d01268.\n\nReason for revert: Added tests to redefine-stress known failures\nTest: ./test.py --host --redefine-stress\nBug: 134162467\n\nChange-Id: Ic1b375a0cb1e44d0252c17115af92c269fb8efc5\n"
    },
    {
      "commit": "c34eab45161c51bf63e548e44645cbcc59d01268",
      "tree": "1b2a0eb85865d2cf6b1627cb5d64869e72412505",
      "parents": [
        "623d4f1ba4f4218c5472e3d9e1e9bf707795878d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 07 07:15:53 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 07 07:16:18 2019 +0000"
      },
      "message": "Revert \"Revert^2 \"Walk internal ArtField/ArtMethod pointers\"\"\n\nThis reverts commit ea2a3d949354c8b054983ba629c81bc5ff7163da.\n\nBug: 134162467\n\nReason for revert: Fails redefine stress\n\nChange-Id: If487c0bcacaf3a3f565ff475b6dad8321e3428b9\n"
    },
    {
      "commit": "ea2a3d949354c8b054983ba629c81bc5ff7163da",
      "tree": "dc94a9c92b254d3f94d96ad0dc27f195d5a7767c",
      "parents": [
        "7fca6ef7b9dbe5a54f2c93a3484035f48ebae27a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 04 20:34:46 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 04 14:21:21 2019 -0700"
      },
      "message": "Revert^2 \"Walk internal ArtField/ArtMethod pointers\"\n\nThis reverts commit 712fa800b2b78e527d36c88dc369bf4b723587ea.\n\nWe incorrectly didn\u0027t check if a method was obsolete before giving its\nclass\u0027s MethodIds array. We then incorrectly used this array and the\n(placeholder) -1 index to try to find the previous method-id. Since -1\nis not a valid array index we got check failures. To fix this we\nsimply added a check that the method is not obsolete and if it is we\ngo to the slow-path.\n\nReason for revert: Fixed issue causing out-of-bounds array access\nTest: ./test.py --host --debuggable --ndebuggable\nBug: 134162467\n\nChange-Id: Iaffefeab6e889b4fb6554a11452d0af051001cb7\n"
    },
    {
      "commit": "712fa800b2b78e527d36c88dc369bf4b723587ea",
      "tree": "ccc4573a3c6bef136ef6da022350ebb5c17a1892",
      "parents": [
        "f70dfec27cae2625c199f1b8ecf1ef1f23580a45"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Oct 04 08:38:11 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Oct 04 08:38:38 2019 +0000"
      },
      "message": "Revert \"Walk internal ArtField/ArtMethod pointers\"\n\nThis reverts commit c84fc3a742b160ce51cbf01c2e5f971ccc0a2c6c.\n\nBug: 134162467\n\nReason for revert: Test fails on debuggable.\n\nChange-Id: I240d58fafcc7434749947330b64c67d65b9b7a1e\n"
    },
    {
      "commit": "c84fc3a742b160ce51cbf01c2e5f971ccc0a2c6c",
      "tree": "1380b353e0d3b5015c9d1ef29fd4c2534828f97b",
      "parents": [
        "8679fd5e938d7bed67d3ab67c55b7f4fb2cdd92a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 24 14:36:50 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 03 20:44:33 2019 +0000"
      },
      "message": "Walk internal ArtField/ArtMethod pointers\n\nDuring structural class redefinition we sometimes need to update some\nof the ArtMethod/ArtField pointers held by runtime frames. This adds\nsupport for doing this through a StackReflectiveHandleScope similar to\nthe StackHandleScope used for holding object references. This also\nupdates various places where reflective-handles to ArtMethods and\nArtFields are needed, for example the JniIdManager, field Read/Write\noperations and events, field resolution, and the old debugger.\n\nTest: ./test.py --host\nBug: 134162467\n\nChange-Id: I4ea73e85956a07735c6d7b125c5828a4233670bc\n"
    },
    {
      "commit": "4090657e44b16dcac5cb63c2151a2eee9472d968",
      "tree": "de386c9da5521f7e3b011df860fad9e43252721d",
      "parents": [
        "19cb8e2bcc1a26f23a9709daf96ad7ead96d05a7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 30 13:57:11 2019 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 01 19:43:05 2019 +0000"
      },
      "message": "Deoptimize boot image when profiling boot class path\n\nUsed for getting JIT samples for boot image methods.\n\nTest: adb shell profman --dump-classes-and-methods --profile-file\u003d/data/misc/profiles/cur/0/android/primary.prof --apk\u003d/apex/com.android.art/javalib/core-oj.jar\nBug: 139883463\n\nChange-Id: Ib22b4539a24c7e57be8ac3e974e6681e754b06ff\n"
    },
    {
      "commit": "c18eba327c4e207ff7b38817f097ee2220b44b39",
      "tree": "1978e64abd3e9fd3df99179f4a2110a724a9565f",
      "parents": [
        "371390f775c90b8b3df11a9890585598a2a39da9"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 24 14:36:27 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Sep 27 17:08:33 2019 +0000"
      },
      "message": "Consolidate updating of reflective Field/Method references\n\nPreviously we used several different visitors to update Field \u0026\nMethod references for structural redefinition. We also did not visit\nor update JVMTI based references.\n\nThis consolidates all the visitors to a single\nRuntime::VisitReflectiveTargets function with a single\nReflectiveTargetVisitor type. This simplifies the code around\nstructural redefinition and ensures that the reflective value holders\nare in charge of the actual replacement.\n\nSupport was also added for walking internal openjdkjvmti references\nfor things like field-read/modification events.\n\nTest: ./test.py --host\nBug: 134162467\n\nChange-Id: Ic5fc1db7db0a30f947a1a67259dc024e149ebd57\n"
    },
    {
      "commit": "e58624f221b967553d7b71f14d8677ceaa000553",
      "tree": "00d6caa5ca66562d9c8e448abc77c0c6018fca0c",
      "parents": [
        "48349ad38887f65da76df268f8e548d508d8c6a1"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri Sep 20 15:53:40 2019 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Tue Sep 24 17:40:00 2019 +0000"
      },
      "message": "Various renames following the name change from \"Runtime APEX\" to \"ART APEX\".\n\nIn particular ANDROID_RUNTIME_ROOT is now ANDROID_ART_ROOT.\n\nTest: Build \u0026 boot\nTest: art/tools/run-gtests.sh in chroot\nTest: art/test/testrunner/testrunner.py --target --64 in chroot\nTest: art/tools/run-libcore-tests.sh --mode\u003ddevice --variant\u003dX64 in chroot\nTest: art/tools/run-jdwp-tests.sh --mode\u003ddevice --variant\u003dX64 in chroot\nTest: m test-art-host-gtest\nTest: art/test/testrunner/testrunner.py --host --64\nTest: art/tools/run-jdwp-tests.sh --mode\u003dhost\nBug: 135753770\nChange-Id: Ia74da964e54cf396d66e9e12ea56da4e9483662a\n"
    },
    {
      "commit": "07710c52222fa412051cb9c3920894fe50b7d41c",
      "tree": "0c3a94e2a2c59db85b6f85fb6f4b017e71363537",
      "parents": [
        "fb11957a861bc2230773e74e969b45a92d4f587b"
      ],
      "author": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Mon Sep 16 15:53:38 2019 +0000"
      },
      "committer": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Thu Sep 19 16:43:22 2019 +0000"
      },
      "message": "Reland \"Java Heap Profiler for Perfetto.\" again\n\nThis reverts commit 284b1b01cf47335fa578e995150adcd0c6f02059.\n\nReason for revert: Added some nullptr checks with logging.\n                   Fixed behaviour when ReInitializing plugin.\n\nTest: dump heap for system_server\n\nTest: art/tools/run-gtests.sh -j4\n[ RUN      ] InstructionSetFeaturesTest.FeaturesFromAssembly\nart/runtime/arch/instruction_set_features_test.cc:161: Failure\nValue of: assembly_features-\u003eHasAtLeast(instruction_set_features.get())\n  Actual: false\nExpected: true\nAssembly features: ISA: Arm Feature string: div,-atomic_ldrd_strd,armv8a\nFeatures from build: ISA: Arm Feature string: div,atomic_ldrd_strd,armv8a\n[  FAILED  ] InstructionSetFeaturesTest.FeaturesFromAssembly (0 ms)\nKnown issue, see http://b/139425971\n\nTest: art/test/testrunner/testrunner.py --target --64\n4095/4260 (96%) tests passed.\n\nTest: art/tools/run-libcore-tests.sh --mode\u003ddevice --variant\u003dX64\nOutcomes: 13781. Passed: 13542, Failed: 0, Skipped: 140, Warnings: 99. Took 29m37s.\n\nTest: art/tools/run-jdwp-tests.sh --mode\u003ddevice --variant\u003dX64\nOutcomes: 401. All successful. Took 7m15s.\n\nBug: 136210868\n\nChange-Id: I7b8564c93926788acb0340de254836dff0ebd9f8\n"
    },
    {
      "commit": "284b1b01cf47335fa578e995150adcd0c6f02059",
      "tree": "a165ba397ce26aa19fcd1b49081d36808a33b9d1",
      "parents": [
        "4fa78a0356cd8a9501e427afc5c1bb95eea70ba3"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Sat Sep 14 00:18:42 2019 +0000"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Sat Sep 14 00:27:18 2019 +0000"
      },
      "message": "Revert \"Reland \"Java Heap Profiler for Perfetto.\"\"\n\nThis reverts commit 5a446bd6c72d25ed2435fb2279bd8617ad003d2e.\n\nReason for revert: Multiple gtests failing\n\nChange-Id: I07abd641d49518a48aed7e401c1927aa7c027937\n"
    },
    {
      "commit": "5a446bd6c72d25ed2435fb2279bd8617ad003d2e",
      "tree": "cad94b86c888b89a96596430ae652a64e4decf35",
      "parents": [
        "f923b09ee869da8a7fec8fc4ed860b6f3eaa7337"
      ],
      "author": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Tue Sep 10 11:30:26 2019 +0000"
      },
      "committer": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Thu Sep 12 08:53:36 2019 +0000"
      },
      "message": "Reland \"Java Heap Profiler for Perfetto.\"\n\nThis reverts commit 8f70b9672c13a5ca19cf2c54ace3cb2f342f743a.\n\nReason for revert: Roll forward with fix. Add hprof_listener to threads\n                   allowed to start early.\n\nBug: 136210868\nTest: * art/tools/run-gtests.sh -j4\n        arm/instruction_set_features_test already failing at base\n        art/arm64/image_space_test  already failing at base\n        art/arm/image_space_test  already failing at base\n      * art/test/testrunner/testrunner.py --target --64\n      * art/tools/run-libcore-tests.sh --mode\u003ddevice --variant\u003dX64\n      * art/tools/run-jdwp-tests.sh --mode\u003ddevice --variant\u003dX64\n      * Start profile, killall -38, see dumped data.\n\nChange-Id: I90c3f8158d95d735fe2a67e25813543849dd0c4f\n"
    },
    {
      "commit": "1092bf3003b4bc83f2cf613b769a72c13c6e3bca",
      "tree": "9d7738d96439362462aaa1aab65b318b8e17266d",
      "parents": [
        "5c93af3cc8894deefbc9cba69ea69526c45842aa"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 10 12:39:55 2019 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 10 12:39:55 2019 -0700"
      },
      "message": "Avoid creating runtime thread pool for system server\n\nThe thread pool is not required and would never be deleted since\nthere is NotifyStartupCompleted is not called.\n\nBug: 140777418\nTest: TH\nChange-Id: Ic6a83812a1d389730423796ddc01ee49e13cd91b\n"
    },
    {
      "commit": "8f70b9672c13a5ca19cf2c54ace3cb2f342f743a",
      "tree": "6f7c3bfddf1a8beaa6f4e406cfe59929fce60ed2",
      "parents": [
        "7f8678ec4d2abec1f540fb441be60604bec86b6e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Sep 06 22:25:34 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Sep 07 02:00:29 2019 +0000"
      },
      "message": "Revert \"Java Heap Profiler for Perfetto.\"\n\nThis reverts commit adf49d4bb3870b73e79982f75bacd917d3ec3bb2.\n\nReason for revert: Breaks tests.\n\nBug: 136210868\nChange-Id: If79f47e3151f1d1cb359b79b388b8aac9ee09074\n"
    },
    {
      "commit": "adf49d4bb3870b73e79982f75bacd917d3ec3bb2",
      "tree": "d318b68d4840140f9c1e78f324becb5db0c142fa",
      "parents": [
        "7ed5e6002fc493984b3a4887a867ef751a139b4d"
      ],
      "author": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Tue Jul 09 17:57:16 2019 +0100"
      },
      "committer": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Fri Sep 06 10:05:17 2019 +0000"
      },
      "message": "Java Heap Profiler for Perfetto.\n\nThis adds a new ART plugin that waits for a signal (number 38), when\nreceived forks the process (so that the app stays responsive to the\nuser), then connects to Perfetto and writes out a proto describing the\ngraph of currently live ART objects.\n\nThis has several advantages over `am dumpheap`:\n* Because it forks, it has less impact on the user.\n* It only writes out the ownership graph, rather than also dumping the\n  contents of the heap.\n* As this is streamed into Perfetto, it can be correlated to other data\n  sources in the same trace file.\n\nTest: Flash; start data source; send signal 38; get heap dump\nBug: 136210868\n\nChange-Id: I1f75bc532fd0a6b8d5f7f474ac7154180677dedd\n"
    },
    {
      "commit": "c88c1d0fbbc4bc230f08fd1e0fe7b652519c9236",
      "tree": "7295e7e39530096cfe42a24326c28e22f7d4efdc",
      "parents": [
        "4ec4d48940696de077f88f9f8e9abdb178772301"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 27 08:18:46 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Aug 27 18:09:57 2019 +0000"
      },
      "message": "Fully remove DumpKernelStack.\n\nAs explained in the previous commit touching this code, these days only\nroot can get the kernel stack trace anyway.\n\nTest: treehugger\nChange-Id: I9924951afa1f8511720c479598c3bd74f5a55c66\n"
    },
    {
      "commit": "a67daeba97fb1a469cb5764a7ced0d03fc206a38",
      "tree": "bc2c4f4bea8da9c2d7adb0bc3975edc775d4e2b7",
      "parents": [
        "d5a9587acd8fbc3aceddc51d436ebbec5633326c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 12 10:41:25 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Aug 13 10:47:56 2019 +0000"
      },
      "message": "Fix race between post fork initialization and JIT.\n\nOnly start JIT threads after all zygote fork logic has been setup.\nFor robustness, also set the runtime state as the first thing post fork.\n\nTest: m\nChange-Id: Icf5db341275002599d0e89add4d9f6b2f799004d\n"
    },
    {
      "commit": "f3677471a58c2738a3d9dd05f07f01c18a5e61be",
      "tree": "21b4279c1077e051b84aad12da29240672f54913",
      "parents": [
        "f1468b53d0427a45011fe6446d189babe0acd6e0"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 26 16:31:53 2019 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jul 29 22:22:53 2019 +0000"
      },
      "message": "Add ability to switch to index ids late.\n\nIn order to support some debugging features we need to have JNI code\nmostly running with jmethodIDs and jfieldIDs as opaque indexes\ndisconnected from any underlying art data-structure pointers. For\nperformance though we want to continue to use data-structure pointers\nas these IDs when debugging is not needed. To support both\npossibilities this adds support for changing from a \u0027swapablePointer\u0027\nto either \u0027pointer\u0027 or \u0027indicies\u0027 regime at runtime.\n\nThe SwapablePointer regime still uses pointers as the ids but creates\nthe data-structures needed to ensure that we can (1) detect that the\nmethods have pointer-type IDs and (2) we can change some\nWellKnownClass internal IDs from one to the other.\n\nCurrently one must select this mode explicitly using\n\u0027-Xopaque-jni-ids:swapable\u0027. Depending on when the final jni-id-type\nis selected a small amount of extra memory is used. Currently manual\ntesting of turning the default id-type to swapable and changing to\npointer immediately after zygote-fork shows a additional 40-90 kb of\nshared zygote-heap memory.\n\nTest: ./test.py --host\nTest: m libfieldcounts; \\\n      ./tools/jvmti-agents/field-counts/count-fields.py \u0027Ljava/lang/Class;.extData:Ldalvik/system/ClassExt;\u0027 \u0027Ldalvik/system/ClassExt;.jmethodIDs:Ljava/lang/Object;\u0027 \u0027Ldalvik/system/ClassExt;.staticJfieldIDs:Ljava/lang/Object;\u0027 \u0027Ldalvik/system/ClassExt;.instanceJfieldIDs:Ljava/lang/Object;\u0027 -p `adb shell pidof com.android.deskclock`;\n      Examine output\nBug: 134162467\n\nChange-Id: I1885b10056d5dcc65dad5ae4f858ddc12ba79403\n"
    },
    {
      "commit": "e0bbab9fe1b073fecae78ca5d269bd0b2a177b4f",
      "tree": "a6152ee32301ac78084be69fc73c8d54134da8b2",
      "parents": [
        "52c468a765f0427dfb5a6627e8087e7b8acc3b8b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 25 12:28:22 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jul 29 20:10:20 2019 +0000"
      },
      "message": "ART: Verifier cleanup\n\nStart making the method verifier more independent of externalities.\nThis will be implemented as incremental changes.\n\nIn this CL, replace querrying Runtime::Current() for the classlinker\nwith requiring the classlinker to use at construction time.\n\nTest: m test-art-host\nChange-Id: Id0a6a1f01c77bfe4cc9adfb490fc6ebc7bbf6392\n"
    },
    {
      "commit": "672c08092a7d95bb504bceb712812f72524d90da",
      "tree": "e539c269d8733b13e43c41f9784d0c6c8200a9d6",
      "parents": [
        "e91d787c2de859789ec6e467bd04ee28b22a8c4e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 26 13:03:13 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 29 12:33:14 2019 +0000"
      },
      "message": "Update Transaction for boot image extension.\n\nAnd clean up transaction-related code to keep test code\nout of the production binaries.\n\nTest: Add TransactionTest#Constraints to transaction_test.\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: aosp_taimen-userdebug boots.\nChange-Id: Iefe5f1cfde95f564069249148f9e7d71564d7a10\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": "7ee607e39cfbfc59616dbf4c063cd1169dc4350f",
      "tree": "7529abbedcb31c8a8093a58c2c25fb0831691de1",
      "parents": [
        "dd20d0006ff51a3aaaee8e8cb33cbbbd859b41f6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 23 12:22:04 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 23 12:37:53 2019 -0700"
      },
      "message": "ART: Fix Runtime::GetStat\n\nReturn uint64_t, as data is actually stored as such. Remove ns\nto us conversion. Fix sensitive callers.\n\nTest: m test-art-host\nChange-Id: I506c90dbb179ffe010bb9cd6cc795edc280a9bc8\n"
    },
    {
      "commit": "da40acad8760aacd4bc3b636fbdb5f8107d3e00f",
      "tree": "7663bb38d7535ca66c6775e6de17958ff797ff90",
      "parents": [
        "a83a88996c5a1850f9914ded138c671ef391bf91"
      ],
      "author": {
        "name": "Travis Tynes",
        "email": "travistynes@gmail.com",
        "time": "Mon Jul 22 19:24:35 2019 -0400"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 23 03:04:34 2019 +0000"
      },
      "message": "Typo fix.\n\nTest: art/test/testrunner/testrunner.py -b --host -j64 --optimizing\nChange-Id: I1a7d90ac6784151639f51a3e0e213e86c493389b\n"
    },
    {
      "commit": "d84794d235df588814533d96f6e459b72f3a19b1",
      "tree": "be63139f9d94678c6c1f01e2012545580b2d1078",
      "parents": [
        "16a08f6d70e64a1c88ea4a6da1b0cfe1bd4196f2"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 18 13:40:03 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 19 15:12:19 2019 +0000"
      },
      "message": "ART: Add option to behave fatally on unmarked kThrow\n\nAdd a runtime option that makes the verifier abort when a runtime\nexception is signaled for an instruction that isn\u0027t marked as such.\n\nBug: 121245951\nTest: m test-art-host\nChange-Id: Id953fa25fbcc12c1e6a7d74b30b28b81df57e427\n"
    },
    {
      "commit": "5bef022af212e060a3e744e688ae2116849d4485",
      "tree": "be91c1f6cc7bcf8fbfe0b72c85c9f4bf0863adec",
      "parents": [
        "2d06e029b1c84916154b5960d2acd1c84706dc04"
      ],
      "author": {
        "name": "randy.jeong",
        "email": "randy.jeong@samsung.com",
        "time": "Mon May 27 10:29:09 2019 +0900"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jul 16 09:55:20 2019 +0000"
      },
      "message": "[RUNTIME] Ignore signal registration for debugging\n\nIt\u0027s difficult to identify native crash/error of 3rd party app.\nBecause they can control their app with own signal handling.\nTherefore I would like to support the way to ignore signal\nregistration in 3rd party app with the specific property.\n\nTo enable this, do just setprop \"debug.ignoreappsignalhandler 1\".\n\nTest: test app to hook signal, then setprop debug.ignoreappsignalhandler 1\n\nChange-Id: I56e2f1255a71abae339396379deb8cb5c31c25c5\nMerged-In: I56e2f1255a71abae339396379deb8cb5c31c25c5\nSigned-off-by: randy.jeong \u003crandy.jeong@samsung.com\u003e\n"
    },
    {
      "commit": "714fad657516f43f96ab45bd1e8853edd3662d6a",
      "tree": "910937741b7d5b30a830765436d0029c86648e5f",
      "parents": [
        "21c489870a2de5db4f4e9c97979676bf39c933a9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 15:32:00 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 02 06:59:01 2019 +0000"
      },
      "message": "Delete tasks when deleting a thread pool.\n\nFixes memory leak.\n\nTest: test.py --jit\nChange-Id: If339015f1629b42c2ff17c80e97f1303843ef878\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": "01fbfbebceb00b94cc54738ebf425b6c4a79211a",
      "tree": "9061436a555042c12ea6d4fe4cd35df971e0ce37",
      "parents": [
        "88f3fd910cb0fbc1c2233fc65d2a30542cc62921"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 27 10:47:04 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 28 14:58:17 2019 +0000"
      },
      "message": "Avoid useless EncodeArtMethod followed by DecodeArtMethod\n\nIn a handful of places we would perform an EncodeArtMethod to call a\nreflection invoke function which would immediately Decode the method.\nThis could cause issues when using opaque-jni-ids:true since the\nEncode can cause an OOM exception.\n\nTo avoid this (and because Encode and Decode are perfect inverses) we\nchanged the Invoke* reflection functions to also accept ArtMethod*s\ndirectly and changed callers to use these functions when appropriate.\n\nTest: (with child CL) ./test.py --host --jit --debuggable\nBug: 134162467\nChange-Id: Id2f5b0f49a99405e238ce5b61a22ef9245e523a5\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": "3b2905366c6ee1eaba2d6477078e505e377343ec",
      "tree": "b8be2002932d4fb589c90769d4548310688f9d98",
      "parents": [
        "814a80f77ac542019cfa479bde12b9a25b06060c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 08:13:58 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 08:15:20 2019 +0000"
      },
      "message": "Revert \"Make sure to delete jni_id_manager_ on shutdown.\"\n\nThis reverts commit d5d645ffec60deedae9d1382db599e3331319cdc.\n\nBug: 136111027\nBug: 134162467\n\nReason for revert: Breaks debuggable\n\nChange-Id: I1fa774769b9c79a0ed4f3de5f800b6545c2e859d\n"
    },
    {
      "commit": "d5d645ffec60deedae9d1382db599e3331319cdc",
      "tree": "6f855c3059d6ea6024da8b8062e145a85f3987e1",
      "parents": [
        "2fef66b294417d447630f9d98de68227eef476d3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 26 15:21:43 2019 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 26 22:25:25 2019 +0000"
      },
      "message": "Make sure to delete jni_id_manager_ on shutdown.\n\nWe were leaking the jni_id_manager_ on shutdown. Make the field a\nunique_ptr to fix this issue.\n\nTest: ./test.py --host\nBug: 136111027\nBug: 134162467\nChange-Id: I2a65753d136195a2e2ff47d9a8eb6c37ec3918f6\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": "03625446dd614ce9262015caca89161b50e2812d",
      "tree": "7d095f411af6787258f24483825b7b929d6aa2ef",
      "parents": [
        "9b41e9514daed1f7f17edf0af20aeb5f33485b74"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 24 17:29:23 2019 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jun 26 15:51:09 2019 +0000"
      },
      "message": "Add a stress test for notifyStartupCompleted\n\nCall notifyStartupCompleted to stress test the freeing logic for\nrace conditions. This is done while dex files and app images are\nbeing loaded from another thread.\n\nTest: test/run-test --host 1002\nBug: 135486422\n\nChange-Id: I138586d83db7bc2f8d75f223170f9bf4af5e71eb\n"
    },
    {
      "commit": "9c87c02437339e08cb99cf7572820001799cdfa0",
      "tree": "ed3102f554d31d0408a7c4adafc1f9815ad000ad",
      "parents": [
        "c0ce3d520ea11318ac2698ad081edd65841b42d6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 18 13:45:52 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jun 20 16:41:46 2019 +0000"
      },
      "message": "ART: Reset stats after fork\n\nReset stats counters after fork to remove zygote influence.\n\nTest: m\nChange-Id: Id0be1fe50d10b3caff57e3af7f162d295d772ba8\n"
    },
    {
      "commit": "024d69fb9936ca5a0031d35c9f248853cbc25d3f",
      "tree": "c1eeddf91ea15eda5d139d4592ac7f0df80e9be0",
      "parents": [
        "43ae4acf219fe25a56e2055ebcebc4d08020a25d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 13 10:52:32 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 17 09:30:53 2019 +0000"
      },
      "message": "Use cleared JNI weak sentinel from boot image.\n\nWe were already adding the sentinel to the boot image,\nso we may as well reuse the boot image copy.\n\nAlso move pre-allocated objects from class roots to the\nboot image live objects.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: I635dcdd146ca2c6b55d187e9a545a9990b0b35ca\n"
    },
    {
      "commit": "8764860dcd6e80512885e41717af9d45c574054a",
      "tree": "4bae7374e5b216fa95600d9ba7f8e251fe269d4c",
      "parents": [
        "3e2446bbe9326786a970c88bbfac80b8ed8e5cdd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 12 12:34:26 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 14 18:18:53 2019 +0000"
      },
      "message": "ART: Flag Runtime::Abort to the UnexpectedSignal handler\n\nDo not trigger unexpected signal handling for runtime aborts.\n\nBug: 135056249\nTest: m test-art-host\nTest: manual\nChange-Id: I062c862eb11bb6465c33215a98a74874be0bbf59\n"
    },
    {
      "commit": "3e2446bbe9326786a970c88bbfac80b8ed8e5cdd",
      "tree": "3495f831cb926030c57901152a939718ff12886e",
      "parents": [
        "1adb04fd1ab7a44b5bf0e0d8deb522b68849a2f6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 12 10:00:57 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 14 17:58:19 2019 +0000"
      },
      "message": "ART: Correctly handle an abort from an unattached thread\n\nLibbase may be shared with other platform components. In that case,\nif the aborting thread is attached to the runtime, ART will print\nits usual dump to be helpful.\n\nIf the thread is unattached, this must not be done as it would\nviolate mutex invariants.\n\nBug: 135056249\nTest: m test-art-host-gtest-runtime_test\nChange-Id: I61c3df5fdbc8ddaf279f39dc653738016986dcd9\n"
    },
    {
      "commit": "4444f1b38aa9269365c4a5d506b6d92a3222841a",
      "tree": "4e3d413021983ae39e52cd5fa8f1c0732db62992",
      "parents": [
        "44b9b5876f64c6e868d9b13c4fa3a5f5cb773742"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 10 14:09:19 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 14 08:14:22 2019 +0000"
      },
      "message": "Add option to identify primary zygote.\n\nThis will be used to customize when to start pre-jitting in\njitzygote mode.\n\nTest: boots\nBug: 119800099\nChange-Id: I1b5c1c454455d336f22e3328deead4ced1742239\n"
    },
    {
      "commit": "380f0d8db56b5fcf6e7181184fdae9f303ad7ba5",
      "tree": "4ad13aff6c3742787f6f6487844305af065070e9",
      "parents": [
        "3fae12960c2d411dff450fce95c096af0e8d74de"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 10 11:01:43 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jun 11 17:44:40 2019 +0000"
      },
      "message": "ART: Conditionally install Dbg class callbacks\n\nTemporary allocations in the dispatch code are unnecessary when they\nend up in disabled code. Instead follow the example of the method\ninspection callback and only add the callback when the debugger is\nactually active.\n\nTest: m test-art-host\nTest: atest CtsJdwpTestCases\nChange-Id: I750f2df475400147b1d569f463228d436aa3ae5a\n"
    },
    {
      "commit": "54a6d4c123d968e272262892118e629f13d17000",
      "tree": "fed1a5e0a6f4bf467dbcd70918655dc12d8008c8",
      "parents": [
        "7d42cdd5052d3d7dec62df03c3512e9e12d4035d"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jun 03 11:02:12 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 03 21:23:27 2019 +0000"
      },
      "message": "Fix missing return when trying to skip threads dump when mutator lock is exclusively held\n\nBug: 134037466\nBug: 134167395\nTest: m\nTest: m test-art-host\nChange-Id: I0b2021f03f7744b580cda62550ee16d39f1bf7e0\n"
    },
    {
      "commit": "ba26b51e2e74bf8c4f87e99dc60f1cbca033ecac",
      "tree": "a3fa191885db25da6f86cf8efa64ce9de03414e2",
      "parents": [
        "e8e2d00ec05ae561ebc7729cc7029a1dc1e02ee6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri May 31 13:07:26 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 03 17:20:21 2019 +0000"
      },
      "message": "ART: Skip all-threads dump on abort if locks are held\n\nThe thread-list locks are not recursive. Skip the dump on abort\nif the locks are already held. Thread state will still be captured\non-device by a tombstone.\n\nBug: 134037466\nBug: 134167395\nTest: m\nTest: m test-art-host-gtest-runtime_test\nChange-Id: I15ba38a018a39f1cc12577cdf8fb94876b96bbaa\n"
    },
    {
      "commit": "9b81ac36e161fd993eab17b43b93a96e8c63b5cc",
      "tree": "bac59dd8a62ae9f410c707a4086c330b8923a55b",
      "parents": [
        "92ed90ca3897ae7861b22aa12740065152839649"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 16 16:47:08 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 17 08:10:30 2019 +0000"
      },
      "message": "Add default argument kIsInstrumented\u003dtrue.\n\nkIsInstrumented\u003dfalse is reserved for use by specialized\nentrypoints which are used only when we can ensure that\nthe code is not instrumented. So add the default argument\nto simplify all other callers.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I3419795794fec9a1733ab3ad698b6415dbac679d\n"
    },
    {
      "commit": "f41232eecb55fe864ed9520074b23682daf29aaa",
      "tree": "cbabb81b5f718a0ae6b68aebf8c749ca5f040851",
      "parents": [
        "077872d54347bccc93e44d8c26192457b19ce0c7"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Apr 09 14:00:23 2019 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon May 13 14:20:35 2019 +0000"
      },
      "message": "Incorporate additional feedback to native JNI checks\n\nBug: 124338141\nTest: m art_libartbase_tests_memory_type_table_test \u0026\u0026 \\\n      out/host/linux-x86/nativetest/art_libartbase_tests/memory_type_table_test\nTest: m \u0026\u0026 flashall \u0026\u0026 boot\n\n(cherry picked from commit fbbda47e032d5cf0db33d2ce671bd37def1058fd)\n\nChange-Id: I26f0a06cf36c2591f4dc30fc6dc3ed443bd8e4a4\nMerged-In: I26f0a06cf36c2591f4dc30fc6dc3ed443bd8e4a4\n"
    },
    {
      "commit": "077872d54347bccc93e44d8c26192457b19ce0c7",
      "tree": "f3256aa22fac418b73f9633a753d128939c8a017",
      "parents": [
        "2180d8e8d82874576017348a6d865ed629c77747"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Mar 06 11:00:52 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon May 13 14:20:35 2019 +0000"
      },
      "message": "Allow APEX binaries to access fields and methods via JNI\n\nAdds a native stack check for method and field resolutions via JNI.\nThis is part of checking the Core Platform API surface. Code outside\nof APEXes shouldn\u0027t be accessing internals as those may change.\n\nThe native stack walk determines first caller outside of libart and\nchecks whether it\u0027s from an APEX module or other code. The caller\nlookup employs a cache of executable pages in shared objects to avoid\ncosts of dladdr when examining program counters.\n\nThe overhead of this additional check is typically 50-400ns on per\nfield/method resolution via JNI as measured on a blueline device (see\nb/124338141 for data).\n\nBug: 124338141\nTest: m art_libartartbase_tests_memory_type_table_test \u0026\u0026 \\\n  out/host/linux-x86/nativetest/art_libartbase_tests/memory_type_table_test\nTest: Boot and observe no core platform api warnings from opengl\n\n(cherry picked from commit 80e9f700c29b1bcaa4535051eda57a5026cc12ed)\n\nChange-Id: Ie2f7217cdcbfb324cd98d65856fa8bc9967dfd19\nMerged-In: Ie2f7217cdcbfb324cd98d65856fa8bc9967dfd19\n"
    },
    {
      "commit": "9ac09eeb8bbd48a343213a96f6e7e0328fe30447",
      "tree": "6351289596083d20ca236715d451b0d47ceb5fdc",
      "parents": [
        "eab0248f8785f25241011a953940ea5a4c5e7467"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 08 23:38:27 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 10 22:46:00 2019 +0000"
      },
      "message": "jitzygote: compile system server methods at boot.\n\nTest: m \u0026\u0026 boots\nBug: 119800099\nChange-Id: Ia02a68bc3f152fe9a733577e66f327264518fe6b\n"
    },
    {
      "commit": "3db3d37dcd3ca8e232a260ce71ac540f33fcf584",
      "tree": "e2a1c6a9290ddb931d32c100a3b2f9ee179820f3",
      "parents": [
        "467b692bfa088098d57947ed3d764fbf1a072974"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 17 18:19:17 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 24 17:09:14 2019 +0000"
      },
      "message": "Invert IsUsingDefaultBootImageLocation to IsUsingApexBootImageLocation.\n\nSome tests are picking up the jit-zygote path, which is not intended.\n\nInvert the flag so that if in doubt, we don\u0027t execute the experiment path.\n\nBug: 119800099\nChange-Id: Ief3ff353cc25fa81157a75d917814982f3836ed0\n"
    },
    {
      "commit": "bb2467b398481a15ddb0b65cfcf3c15ff3cb0b8d",
      "tree": "1fb58f57d31e0adb6e5b3170a45de16d3e5179f0",
      "parents": [
        "7c887c57b1b32b9432c74582ab9a4be43a280ee9"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Mar 29 22:55:06 2019 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Sat Apr 20 00:52:14 2019 +0000"
      },
      "message": "Make kHugeNativeAllocs configurable\n\nAdd -XX:StopForNativeAllocs command line argument to replace\nkHugeNativeAllocs constant.\n\nThe default remains at 1 GB. But This default will allow small\nmemory devices to run out of memory if we allocate Java owned native\nmemory faster than what the GC can keep up with. Setting it to\na smaller value should prevent that.\n\nBug: 122552730\nTest: Boot AOSP, Treehugger\n\nChange-Id: I5c84b2f1f67038e1b7a0ca3f5fc08090359c5f3e\n"
    },
    {
      "commit": "87658f3e8877afdf80990ba986841dba9037da50",
      "tree": "9dc0019e277ab8313e7e0376339202be9b9d4d19",
      "parents": [
        "d5d807bc2d4e538f6f9a4cf5bb2b010482504c9d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 18 18:39:02 2019 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 19 15:37:20 2019 +0000"
      },
      "message": "Revert^2 \"Optimize FindClass ClassNotFoundException case\"\n\nWith the current class loaders, there are many exceptions thrown for\neach ClassNotFoundexception from FindClass calling\nClassLoader.loadClass. This CL reduces that by throwing directly from\nFindClass to avoid these extra exceptions.\n\nNumbers are from logging time taken by QuickDeliverException.\nTime spent in exception throwing during startup goes down (Pixel 2 XL):\n    Camera: 20ms -\u003e 5ms\n    Calculator: 5ms -\u003e 2ms\n    Maps: 20ms -\u003e 10ms\n\nAdded option -XX:FastClassNotFoundException\u003d\u003cbool\u003e to enable or\ndisable the feature.\n\nThis reverts commit d399f579cf2a8462ef6f1fbea360fe62be174377.\n\nBug: 130310316\nBug: 130293184\nBug: 130209120\nTest: test-art-host\nTest: art/test/testrunner/testrunner.py --host --no-prebuild -t 134\nChange-Id: I059abce98fe876d89de35d099647ee673c27343b\n"
    },
    {
      "commit": "d399f579cf2a8462ef6f1fbea360fe62be174377",
      "tree": "ad08cf6e8f74d648828d12c83d1098f1a6600b62",
      "parents": [
        "9634705832d5eb1f64af7766917e3043648a538f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 17 12:34:19 2019 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 17 12:35:56 2019 -0700"
      },
      "message": "Revert \"Optimize FindClass ClassNotFoundException case\"\n\nBug: 130310316\nBug: 130293184\nBug: 130209120\nBug: 130680590\n\nTest: TH\nThis reverts commit 9634705832d5eb1f64af7766917e3043648a538f.\n\nChange-Id: I07f32256fe718c607e9c304073c4f8d614de1c48\n"
    },
    {
      "commit": "9634705832d5eb1f64af7766917e3043648a538f",
      "tree": "7c779fb80008285cacd1099c037dccb51452bf5e",
      "parents": [
        "b086f5284a8b38037d55ed65f48f244b4a44a257"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 11 13:37:10 2019 -0700"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 17 15:18:52 2019 +0000"
      },
      "message": "Optimize FindClass ClassNotFoundException case\n\nWith the current class loaders, there are many exceptions thrown for\neach ClassNotFoundexception from FindClass calling\nClassLoader.loadClass. This CL reduces that by throwing directly from\nFindClass to avoid these extra exceptions.\n\nNumbers are from logging time taken by QuickDeliverException.\nTime spent in exception throwing during startup goes down (Pixel 2 XL):\nCamera: 20ms -\u003e 5ms\nCalculator: 5ms -\u003e 2ms\nMaps: 20ms -\u003e 10ms\n\nAdded option -XX:FastClassNotFoundException\u003d\u003cbool\u003e to enable or\ndisable the feature.\n\nBug: 130310316\nBug: 130293184\nBug: 130209120\nTest: test-art-host\n\n(cherry picked from commit 40b1ba4543cf33e54f32e31cd2f276700c1be63c)\n\nMerged-In: If013a2f2f330684e4f6ab000c19ef3822990e613\nChange-Id: Ifca8d8b78e82463488bbb3f5796e9be7d94465b1\n"
    },
    {
      "commit": "6dfdfef85b210dc104a7cd221c6717e1a2123a13",
      "tree": "c8748f991a42bf15c77a388375c1af266f2bfdaf",
      "parents": [
        "a4469ef9e81bddf83d2b5b525d317de2070fbfd7"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 11 17:39:11 2019 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Apr 12 15:43:15 2019 +0000"
      },
      "message": "Set core platform API policy from command line flag\n\nSo as to avoid any performance penalty from core platform API access\nchecks, disable them by default. AndroidRuntime.cpp now passes the value\nof the \"persist.debug.dalvik.vm.core_platform_api_policy\" to the\nruntime, allowing a user to enable core platform API checks on demand.\nThe workflow for a tester is:\n- adb shell setprop \u003cproperty\u003e \"just-warn\"\n- adb reboot\n- adb logcat | grep \"Core platform API\"\n\nTest: manual, observe warnings in logcat\nTest: art/test/testrunner/run_build_test_target.py art-test\nBug: 125701194\nChange-Id: Iae09a8f44918dc349bc10dbdd703043667f51268\n"
    },
    {
      "commit": "fb6a5c00ef02cda7ea919d717daaf46abd0414e4",
      "tree": "9ecfaac9bee174b3b31e0294c46c4d32a5f7b714",
      "parents": [
        "f160394fda141184f0ec3d139ec5ca810f142bda"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Mar 29 20:20:16 2019 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 12 13:47:09 2019 +0100"
      },
      "message": "Add and use art::GetAndroidRuntimeBinDir.\n\nThis method returns the location of the directory containing the\nAndroid Runtime binaries, which is expected to be the Android Runtime\nAPEX\u0027s bin directory on target and the Android Root\u0027s bin directory on\nhost (at least for now).\n\nAlso remove art::CommonArtTestImpl::GetTestAndroidRoot as it is no\nlonger used.\n\nTest: ART gtests on host and target\nBug: 121117762\nChange-Id: I4593bbd4d675ca9d3f7b708482aac82c1892a9ad\n"
    },
    {
      "commit": "331a5e101313838189933399b2017305493f9f58",
      "tree": "5a8f391ff9e36db8965f01603e15834c800b5fc5",
      "parents": [
        "4080b8febed8b82957274882a96b2a7d8625c32e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 01 22:46:16 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 02 16:31:01 2019 +0000"
      },
      "message": "Revert^2 Verify InMemoryDexClassLoader classes in a background thread\n\nWhen dex bytecode is loaded using InMemoryDexClassLoader, automatically\nspawn a background thread which performs bytecode verification on every\nclass.\n\nThis reverts commit b4bb63aa4be80722643611fc931976b3544f14b5. This CL\nfixes a previous issue where runtime threads are not allowed to load\nclasses in debuggable mode.\n\nBug: 72131483\nChange-Id: Icdeb5be2b33ef55675e3a23886e71ce3b4b02f43\nTest: art/tools/run-libcore-tests.sh\nTest: art/test.py -b -r -t 692\n"
    },
    {
      "commit": "9ef308da0ea8d1df2edf65d4957599fafcc56aeb",
      "tree": "de58aeef64d8657cb2026fd34998a76394ba4014",
      "parents": [
        "99c0795f715ae96ba90bd7a37032d0dc7bdad8c2"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Mar 28 11:06:26 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 01 13:41:48 2019 -0700"
      },
      "message": "ART: Forbid the zygote to load code outside of system\n\nProtect the window between runtime creation and forking.\n\nBug: 129454856\nTest: m test-art-host\nTest: Device boots\nTest: manual\nChange-Id: I6108b4196235cb2a2ede52e9d9e3450afe78f90e\n"
    },
    {
      "commit": "b4bb63aa4be80722643611fc931976b3544f14b5",
      "tree": "7982bd7e79474b24f8f258efec3ac64328b34d7e",
      "parents": [
        "71d614f12ad6da2f15e835e22fe577b2d1d86bb0"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 01 19:38:10 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 01 19:38:48 2019 +0000"
      },
      "message": "Revert \"Verify InMemoryDexClassLoader classes in a background thread\"\n\nThis reverts commit d592dbe1e2b09079382713220b2ff59f02db1859.\n\nReason for revert: art buildbots crashing\n\nChange-Id: Ida6bb79cb498e708df5c535edc16e4fe9875442c\n"
    },
    {
      "commit": "d592dbe1e2b09079382713220b2ff59f02db1859",
      "tree": "0782c75d713200b1e99dee9f97b4898612b3fee3",
      "parents": [
        "0a20607d671bf001043ccb0cf156db16b4fc6bed"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Mar 01 22:25:31 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 01 15:54:39 2019 +0000"
      },
      "message": "Verify InMemoryDexClassLoader classes in a background thread\n\nWhen dex bytecode is loaded using InMemoryDexClassLoader, automatically\nspawn a background thread which performs bytecode verification on every\nclass.\n\nBug: 72131483\nTest: art/tools/run-libcore-tests.sh\nTest: art/test.py -b -r -t 692\nChange-Id: Iad54f510de02cd073e68d775d34b7dd5bdef304e\n"
    },
    {
      "commit": "b215557206a39d3d2373c4ba7095bdae6a705144",
      "tree": "d17a39d4016aac38abf0699269c2532b4c4e5376",
      "parents": [
        "184832a46b21ff3ebe54f50f21dd71f2292d8943"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Mar 27 14:25:53 2019 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Mar 29 23:49:27 2019 +0000"
      },
      "message": "Add FinalizerTimeoutMs argument, and respect it\n\nAdd -XX:FinalizerTimeoutMs commandline argument, and make it\navailable for libcore.\n\nAdd 1336-short-finalizer-timeout to test it. Blacklist it for\nthe cases in which 030-bad-finalizers was known not to work,\nsince it\u0027s largely a clone. Disable it for gcstress, since timeout\nmargins are tight.\n\nIncrease timeout in 030-bad-finalizers due to gcstress issues.\n\nUse the result in 004-NativeAllocations and 030-bad-finalizers\nto avoid timeouts. Make 004-NativeAllocations more proactive in\navoiding timeout.\n\nThis is intended as a replacement for aosp/836642 .\n\nBug: 129350738\nBug: 68792448\nTest: Boot AOSP, TreeHugger\nChange-Id: I9aef9c9bacb7e8d851bd2c879ed9fb5b596abc60\n"
    },
    {
      "commit": "34857b5fd3be5ee8cf1935bd1fbaad37a8e42768",
      "tree": "eabdd26615030bde559d939eb861f02290851c9e",
      "parents": [
        "3b45890cf987c0b57965acd78958cd8eca487b8e"
      ],
      "author": {
        "name": "Koji Fukui",
        "email": "Koji.Fukui@sony.com",
        "time": "Wed Mar 20 19:13:00 2019 +0900"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Mar 27 12:12:13 2019 +0000"
      },
      "message": "Revert \"Revert \"Change state to waiting during aborting the VM\"\"\n\nThis reverts commit ebb481d070e3fdbb7950580e6f6886c3231a1ad9.\n\nDex2oatWatchdogTest.TestWatchdogTrigger passed.\nApply the change again.\n\nTest: ART_HEAP_POISONING\u003dtrue make test-art-host-gtest-dex2oat_test64\nBug: 127875380\nChange-Id: If4326990cd612815ffe1511490712ca8babfec55\n"
    },
    {
      "commit": "c8b7d445e02b752a68d824e2bc69658dfb76288a",
      "tree": "51ff473bcc25bde8439fbebbee6ecc7b46cc4b93",
      "parents": [
        "2babede0d09600a9700d496001f736366fba8bb0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 25 09:40:22 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 25 13:08:55 2019 +0000"
      },
      "message": "Defer unloader JNI libraries of boot classpath as late as possible.\n\nAlso don\u0027t try to lock at this point.\nA lock would run a checkpoint on threads that are dying, and this can\nlead to crashes, eg:\nhttps://build.chromium.org/p/client.art/builders/host-x86-cms/builds/4412/steps/test%20debuggable/logs/stdio\n\n+*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***\n+Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) fault addr (nil)\n+OS: Linux 4.4.0-78-generic (x86_64)\n+Cmdline: \u003cunset\u003e\n+Thread: 10797 \"Shutdown thread\"\n+Registers:\n+    eax: 0x00000000    ebx: 0xf739c104    ecx: 0xf739f794    edx: 0x00000001\n+    edi: 0x00000000    esi: 0x56748c54    ebp: 0xffd2bd18    esp: 0xffd2bcc0\n+    eip: 0xf6c18c8c                    eflags: 0x00010246 [ PF ZF IF ]\n+     cs: 0x00000023     ds: 0x0000002b     es: 0x0000002b     fs: 0x0000006b\n+     gs: 0x00000063     ss: 0x0000002b\n+Backtrace:\n+\t#00 pc 001ffc8c  /b/build/slave/host-x86-cms/build/out/host/linux-x86/lib/libartd.so (art::Thread::CheckEmptyCheckpointFromMutex()+428)\n+\t  art::Thread::ReadFlag(art::ThreadFlag) const\n+\t   art/runtime/thread.h:1089\n+\t  art::Thread::CheckEmptyCheckpointFromMutex()\n+\t   art/runtime/thread-inl.h:94\n+\t#01 pc 001fb40e  /b/build/slave/host-x86-cms/build/out/host/linux-x86/lib/libartd.so (art::Mutex::ExclusiveLock(art::Thread*)+462)\n+\t  art::Mutex::ExclusiveLock(art::Thread*)\n+\t   art/runtime/base/mutex.cc:382\n+\t#02 pc 0064d9b7  /b/build/slave/host-x86-cms/build/out/host/linux-x86/lib/libartd.so (art::Libraries::UnloadBootNativeLibraries(_JavaVM*)+103)\n+\t  MutexLock\n+\t   art/runtime/base/mutex.h:431\n+\t  art::Libraries::UnloadBootNativeLibraries(_JavaVM*)\n+\t   art/runtime/jni/java_vm_ext.cc:230\n\nTest: 004-ThreadStress\nChange-Id: I7f9b69590983ff4e3276a0ad1ef5c7453d692b04\n"
    },
    {
      "commit": "3e5c4cec27e2ead115ee7dcca7baf051fdaaaa28",
      "tree": "4a72edfefd2c914e23dc17fbe4e41d35611f8200",
      "parents": [
        "36dfa4177e0cced1741e7d4d7a629681b9786d89"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 22 15:52:41 2019 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Mar 23 04:30:20 2019 +0000"
      },
      "message": "Use normal checkpoints for NotifyStartupCompleted\n\nThe API RunEmptyCheckpoint is only safe with one caller (the GC),\nincorrect usage was resulting in occasional deadlocks.\n\nThe fix is to use a normal checkpoint to do the empty checkpoint.\n\nBug: 129150130\nTest: test-art-host\nChange-Id: I8ed73bc8b57c3493f4a995843d5ad63bd1a91ef8\n"
    },
    {
      "commit": "21b656872c27b8d174293cf37975d769c8554b22",
      "tree": "e7a4f3109c799f3af26cbe0b4185b387553e7534",
      "parents": [
        "0985eb1b8309745bc67bee79267c9c0a81cd4d7a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 12 00:49:45 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 20 09:14:18 2019 +0000"
      },
      "message": "Unload native libraries during shutdown.\n\nBug: 31550016\nTest: two_runtimes_test.cc\nChange-Id: Ic44fa57d01d5e00e08b06e3b05c86d44cb45c509\n"
    },
    {
      "commit": "3383f9c81211ebb4185c861d8acb3d9de0df78ee",
      "tree": "994deadcdb15334dcbe54aed80c28ff98077c2fb",
      "parents": [
        "7286ad6c340b11f28240a049cf3225a3d58ebc67"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Mar 15 11:46:08 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 19 21:37:36 2019 +0000"
      },
      "message": "ART: Conditionally remove loaded-oat-count check\n\nIn the case of the system server, oat files may be loaded before the\ncheck applies.\n\nBug: 128688902\nTest: m\nTest: manual\nMerged-In: I1c12463e905115e858cc0c52711dd82a4f06425d\nChange-Id: I1c12463e905115e858cc0c52711dd82a4f06425d\n"
    },
    {
      "commit": "ebb481d070e3fdbb7950580e6f6886c3231a1ad9",
      "tree": "af6986daab73dcd17dca5f4bab68024c12c40c83",
      "parents": [
        "a1e5b97b4bb4c47c2ab51d8a7d5dd1500d496c4d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 19 09:30:35 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 19 12:33:11 2019 +0000"
      },
      "message": "Revert \"Change state to waiting during aborting the VM\"\n\nThis reverts commit 97b964960123d5f215a1cebbce548c8a5322c307.\n\nBug: 127875380\n\nReason for revert: Broke Dex2oatWatchdogTest.TestWatchdogTrigger on host x86_64 and heap poisoning.\n\nChange-Id: Iaebfc4a03543bff4e7239d711dd7ad8c7f880d52\n"
    },
    {
      "commit": "6e7a72c5baa322f57fe6a52303dac45fba8edd25",
      "tree": "e2cde34e087bce7ea04322c6dca5d2fbc849698e",
      "parents": [
        "97b964960123d5f215a1cebbce548c8a5322c307"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 07 21:40:10 2019 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Mar 18 20:21:04 2019 +0000"
      },
      "message": "Release app image metadata when startup is completed\n\nThe app image startup cache is only required for startup. Release\nit after startup is completed.\n\nNote that the cache handles being zeroed out at any time.\n\nBug: 123377072\nTest: test-art-host\n\nChange-Id: Iaa1c800bd0de7290b44d814a21bda20298a10d5f\n"
    },
    {
      "commit": "97b964960123d5f215a1cebbce548c8a5322c307",
      "tree": "04239f8bc25ce6f22bda774bbae37755ed8acb27",
      "parents": [
        "26a5dd6fd1d65de29ba85e4bb61d9267dd428238"
      ],
      "author": {
        "name": "Koji Fukui",
        "email": "koji.fukui@sony.com",
        "time": "Tue Mar 05 12:22:57 2019 +0900"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Mar 18 17:19:04 2019 +0000"
      },
      "message": "Change state to waiting during aborting the VM\n\nSymptom:\nProcess freeze when multiple runtime error happen on runnable threads.\n\nRoot cause:\nWhen multiple runtime error happen, only one thread locks abort_lock_\nand other threads are blocked even if they are runnable state.\nIf an other thread tries to suspend blocked threads at the same time,\nblocked threads can\u0027t be suspended until abort_lock_ is unlocked from\nowner thread. But owner thread can be suspended even if it locks\nabort_lock_. Thus, these threads causes dead lock.\n\nSolution:\nChange state to waiting when locking abort_lock_.\n\nBug: 127875380\nChange-Id: I7e914924690bb30d6d0490cf5f8afdb1c3cd4e4a\n"
    }
  ],
  "next": "a43ba3da86c046c545a988f3d40f53c24a525f83"
}
