)]}'
{
  "log": [
    {
      "commit": "3326fcea1ead5d5d360a053704faad27b6dd8c40",
      "tree": "5e7925762a883b4d208bcbe1fb3b87ccc5088313",
      "parents": [
        "ccbcfb17c9eabee791d674b794e696da10b1b28b"
      ],
      "author": {
        "name": "Hu Wang",
        "email": "hu.wang@mediatek.com",
        "time": "Mon Aug 23 17:41:57 2021 +0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Aug 24 09:49:43 2021 +0000"
      },
      "message": "Fix android.security.cts.FileDescriptorTest#testCLOEXEC\n\nWhen ART is mainline, it will create memFd boot-image-methods.art\nwithout MFD_CLOEXEC.\nAdd MFD_CLOEXEC flag when create boot-image-methods.art memFd.\n\nBug: 197498527\nTest: run cts CtsSecurityTestCases pass\n\nChange-Id: If941c036f7adb598d67ec2b2c5bc4cb24994e3a1\n"
    },
    {
      "commit": "ccbcfb17c9eabee791d674b794e696da10b1b28b",
      "tree": "75393520dd83f976246d5152ae4f97613691b56d",
      "parents": [
        "a7e7426a89bb5d1255a0a6f90cc3efb0a83d9195"
      ],
      "author": {
        "name": "Jiakai Zhang",
        "email": "jiakaiz@google.com",
        "time": "Mon Aug 23 15:10:35 2021 +0000"
      },
      "committer": {
        "name": "Jiakai Zhang",
        "email": "jiakaiz@google.com",
        "time": "Tue Aug 24 03:31:06 2021 +0000"
      },
      "message": "Revert^2 \"Add unit tests for odrefresh - step 2\"\n\nThis reverts commit b89649bd95cffec48f6f6746054553f71ab3e807.\n\nReason for revert: Fixed the fugu build breakage\n\nThe test failed on fugu because fugu is running Android O, while the\ntest depends on a system property introduced in S. Since the whole\nodrefresh program is for S and later, we don\u0027t need to run the test on\nolder platforms. This failure is fixed by adding a check on the API\nlevel and skipping the test if the API level is below S.\n\nBug: 196188549\nTest: atest art_standalone_odrefresh_tests\n\nChange-Id: I484696d065d715da65ae262a5aa8b3e1b30ffdcf\n"
    },
    {
      "commit": "e261356db98dc27bcec4048b3eaf9834864169aa",
      "tree": "7b6aa115ccf3dbbc646e625ee714289eb1b1076b",
      "parents": [
        "b89649bd95cffec48f6f6746054553f71ab3e807"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 18 22:46:32 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 23 12:42:44 2021 +0000"
      },
      "message": "Add a lock contention palette hook.\n\nBug: 196334695\nTest: m\nChange-Id: Id87cfc30957baa5e575947fc69d6f307e843dcf8\n"
    },
    {
      "commit": "b89649bd95cffec48f6f6746054553f71ab3e807",
      "tree": "faaff2611b018e4864b29d1f5df47b2d0187b8d2",
      "parents": [
        "054c8008272861c4c2a845424a3be6705f884d93"
      ],
      "author": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Mon Aug 23 10:48:17 2021 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Aug 23 12:26:31 2021 +0000"
      },
      "message": "Revert \"Add unit tests for odrefresh - step 2\"\n\nThis reverts commit b91dad2b98e8c562aed7c4471615d7c325756c08.\n\nReason for revert: breaks builds on fugu.\n\nBug: 196188549\nChange-Id: Iec08674c2ed53b8e6048c044d5e72fdd26518a83\n"
    },
    {
      "commit": "b91dad2b98e8c562aed7c4471615d7c325756c08",
      "tree": "85f1d6092a86116555f785a4f906b5f852aa1fca",
      "parents": [
        "3bc03531d1ae5cbe5b0a7ac34c10d5c51f20f233"
      ],
      "author": {
        "name": "Jiakai Zhang",
        "email": "jiakaiz@google.com",
        "time": "Mon Aug 16 03:20:07 2021 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Aug 20 12:59:57 2021 +0000"
      },
      "message": "Add unit tests for odrefresh - step 2\n\n- Define MockableExecUtils, which is a wrapper class to make exec_utils\nmockable.\n- Add another constructor to the OnDeviceRefresh class to support\ninjections.\n- Update OdrConfig to support overriding the staging directory.\n- Add a unit test to verify that odrefresh sets compiler filter based on\n\"dalvik.vm.systemservercompilerfilter\".\n\nBug: 196188549\nTest: atest art_standalone_odrefresh_tests\nTest: atest odsign_e2e_tests\nChange-Id: Ia7b4347bba6873878490a513b8a5ff6642122d71\n"
    },
    {
      "commit": "3bc03531d1ae5cbe5b0a7ac34c10d5c51f20f233",
      "tree": "e591b077ebbe9040a109d49cc9fad06cdad877c9",
      "parents": [
        "1e6be713904fb24db9e9cd1d38694309e03e5f29"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Aug 19 13:55:30 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Aug 19 13:55:30 2021 +0100"
      },
      "message": "Fix missing MsToNs in profile saver.\n\nTest: test.py\nBug: 194880260\nChange-Id: I30b5608ef891805754986a0e00207e017280a97e\n"
    },
    {
      "commit": "0529cfa3efd0f6f7a167aa833fce99d6cf29a518",
      "tree": "e0079b2b55ecb84f11582eb65387d92cc36e570c",
      "parents": [
        "555eefef9a27995ef341cdf44ed60c61953e2e3f"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Aug 16 16:50:28 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Aug 18 17:14:17 2021 +0000"
      },
      "message": "Add GC deadlock discussion\n\nOnly comment and markdown changes.\n\nBug: 195336624\nBug: 195261575\nTest: Treehugger\nChange-Id: I3118ab4009c7f31006b62714ee36b5287f33aa3f\n"
    },
    {
      "commit": "555eefef9a27995ef341cdf44ed60c61953e2e3f",
      "tree": "4f8ee1eb27d9b559ea85ff54a80d9e5e4aaff9ca",
      "parents": [
        "59033773f2fc900c7be96b4e513bee62ad3342af"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Tue Aug 17 15:55:40 2021 -0700"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Aug 18 16:58:57 2021 +0000"
      },
      "message": "Replace weak-ref access disable checkpoint with STW pause\n\nDisabling weak-ref access in ConcurrentCopying collector can lead to\ndeadlocks. For instance, if mutator M1 acquires W1 mutex and then\nparticipates in the checkpoint and then gets blocked in getReferent(),\nwaiting for the gc-thread to finish reference processing. Mutator M2\nwaits for M1 to release W1 so that it can acquire the mutex before\nparticipating in the checkpoint. On the other hand, GC-thread waits\nfor M2 to finish checkpoint.\nA STW pause avoids the deadlock by ensuring that mutators are not\nblocked on weak-ref access before the pause, and GC-thread can make\nprogress after the pause in reference processing.\n\nBug: 195336624\nBug: 195261575\nTest: art/test/testrunner/testrunner.py\nChange-Id: I03d6bcd4d53f37ec84064edd8292951d30f48eaf\n"
    },
    {
      "commit": "fb3ad7201bf2d9154862e347e960df376ac04c3c",
      "tree": "5f341409b0ec998fb26049efc988b81f5e6a946b",
      "parents": [
        "e84ad2c045f3439b9e20b977d74c7e4e394417a2"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Aug 16 16:53:17 2021 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Aug 17 00:48:26 2021 +0000"
      },
      "message": "Revert \"Make ClassLinker::DumpForSigQuit exclude gc\"\n\nThis reverts commit 825e82972fe46fdb0419c42bd7df102df1989ff9.\n\nReason for revert: Not clear it fixed anything. See b/195261575 .\n\nChange-Id: I6fd0d10b5134037d2df399abbbaa3302454f0e4f\n"
    },
    {
      "commit": "70aa29e2d93ba66e71a8ff88c9210719efae1c31",
      "tree": "f095ddc5ecc6f699422dbddce6e937047f407915",
      "parents": [
        "7de49d88a1fded45a20209b5335464dd84c3ea03"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Aug 11 12:11:19 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Aug 13 16:34:20 2021 +0000"
      },
      "message": "Do not acquire runtime_shutdown_lock_ in Abort()\n\nAbort can be called, particularly in OOM situations, when we already\nhold the lock. Abort() should minimize the locks it acquires.\n\nThis is intended to be a minimal, low-risk change. Generated code\nshould be essentially unchanged, except in Abort(). This does not\naddress the question of whether IsShuttingDown really needs to\nlock at all.\n\nTest: Build and boot AOSP.\nBug: 195884830\nChange-Id: I0ee4a7ca7348153436fec0fecc1d1f2ca1f7a30c\n"
    },
    {
      "commit": "f955425d11ed4b8f6dc02530f0f5ab69edecd8d2",
      "tree": "9f81ffa70d28a9021209bf508a052023e7495e2a",
      "parents": [
        "0c3cc6350749a441fd54f8f3f67b7c69775000c8"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Sat Aug 07 19:44:20 2021 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Sat Aug 07 19:44:20 2021 +0000"
      },
      "message": "Revert \"Handle suspend requests in getReferent()\"\n\nThis reverts commit 0c3cc6350749a441fd54f8f3f67b7c69775000c8.\n\nReason for revert: Seems to break tests, e.g. https://ci.chromium.org/ui/p/art/builders/ci/host-x86-cms/6824/overview\n\nChange-Id: Id75641d28be218055eca07c99ab2e1bfd579fe71\n"
    },
    {
      "commit": "0c3cc6350749a441fd54f8f3f67b7c69775000c8",
      "tree": "b1269dfa3f20f2abee25a880df1ad36884ff3f56",
      "parents": [
        "825e82972fe46fdb0419c42bd7df102df1989ff9"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Aug 05 18:30:08 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Sat Aug 07 15:16:49 2021 +0000"
      },
      "message": "Handle suspend requests in getReferent()\n\nWhen waiting in getReferent or the like, use a TimedWait, so we\ncan occasionally check for suspend requests, thus avoiding deadlocks\nthat can arise from blocking indefinitely in a runnable state.\n\nThis is not particularly clean, and may introduce short delays\nwhen we would otherwise deadlock. It\u0027s also a bit risky because\nwe are now releasing the mutator lock in code that previously didn\u0027t.\n\nThis is a hopefully more correct replacement for aosp/1784003, which\noverlooked some of the complications here.\n\nThis does not handle a similar problem in the JNI weak reference code.\nEach additional use context adds risk here, due to the mutator\nlock release.\n\nBug: 195336624\nBug: 195664026\nTest: Build and boot AOSP with much shorter timeouts.\nTest: Confirm that the timeout code is invoked.\nChange-Id: I0ffb2ffd105bed9dcb8664f92b17cfbcf756a6e0\n"
    },
    {
      "commit": "825e82972fe46fdb0419c42bd7df102df1989ff9",
      "tree": "9f81ffa70d28a9021209bf508a052023e7495e2a",
      "parents": [
        "2d2a27fe91e0a5bb2a047b472ef8d5de9c5a6c73"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Aug 02 17:12:29 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Aug 07 01:03:51 2021 +0000"
      },
      "message": "Make ClassLinker::DumpForSigQuit exclude gc\n\nOtherwise we can get into a deadlock because we hold a critical lock\nwhile waiting for weak reference access, thus potentially preventing\nother threads from suspending properly to reenable weak reference\naccess.\n\nBug: 195261575\nTest: TreeHugger\nChange-Id: Ideb6199f597c4e06741c79bb2812661d88a42669\n"
    },
    {
      "commit": "2d2a27fe91e0a5bb2a047b472ef8d5de9c5a6c73",
      "tree": "dfa2139bf0b1b1efefd05244720cfe8f8305b8a7",
      "parents": [
        "1d9d3587dafb7078082b4d4058eea753c13ef94f"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Aug 04 22:58:32 2021 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Aug 04 22:58:32 2021 +0000"
      },
      "message": "Revert \"Don\u0027t block while runnable in getReferent()\"\n\nThis reverts commit 1d9d3587dafb7078082b4d4058eea753c13ef94f.\n\nReason for revert: Likely cause of build failures like https://android-build.googleplex.com/builds/submitted/7611067/art-jit/latest/logs\n\nChange-Id: I008de0d4b3976b8380935cd9a389c77e3b396274\n"
    },
    {
      "commit": "1d9d3587dafb7078082b4d4058eea753c13ef94f",
      "tree": "a131a7f29aa142b9d472e034143a6c7c4ad373da",
      "parents": [
        "0e8585342b1b26a0ec33421f9d4ab16cb9851ce4"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Aug 03 17:24:31 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Aug 04 15:18:34 2021 +0000"
      },
      "message": "Don\u0027t block while runnable in getReferent()\n\nChange state before waiting on the GC, so that we can safely be\nsuspended, thus avoiding surprisingly obscure deadlocks.\n\nBug: 195336624\nTest: Treehugger\nChange-Id: I7c7dff8030be962195b7521aac320e90d81defd9\n"
    },
    {
      "commit": "cbd809bc76184d274a5999f44669850877433f3c",
      "tree": "e2a27f8ccb84f8f048bc071ebeefe2ac01b31577",
      "parents": [
        "de54ddda0d5b2cd3e396eb4e42ef04bb3e667609"
      ],
      "author": {
        "name": "Liz Kammer",
        "email": "eakammer@google.com",
        "time": "Wed Jul 21 09:28:44 2021 -0400"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jul 29 21:05:22 2021 +0000"
      },
      "message": "Correct enum comparison to reenable -Wenum-compare\n\nTest: m \u0026\u0026 TH\nChange-Id: I3130b46feba9611806e3fc4f1f509dca6c51ac5c\n"
    },
    {
      "commit": "ce9b902a161b86eb2d5ef9fe4442305e25828d0a",
      "tree": "3108d6315b779816b076b220870748631235e2ea",
      "parents": [
        "a8f858e4eddeede8c465cc5b9fb40733e4649aed"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Wed Jul 21 10:44:06 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 27 16:56:08 2021 +0000"
      },
      "message": "Reland: Support pass BCP art/vdex/oat files by FD\n\nThe original implementation in odrefresh generated inconsistent number\nof files between jars and other files. The code is reworked.\n\nOriginal description:\n\nThis is currently used by odrefresh.\n\nMain runtime changes are:\n\n1. When reading the image header, also tries to read from the FD if\n   provided.\n\n2. Initialize the art/vdex/odex FDs in the boot image chunk if provided.\n   This allows them to be opened (in case if the file is not accessible\n   by path) in LoadComponents.\n\n3. OpenBootDexFiles: accept BCP JARs passed as FD, in case if the file\n   is not accessible by path.\n\n4. The new FDs are passed from new runtime args,\n   -Xbootclasspath{art,vdex,oat}fds.\n\nIt is used in odrefresh to pass the previous output of BCP extensions to\nbe used in the next phase, system server compilation.\n\nBug: 193720426\nTest: odrefresh --use-compilation-os\u003d10 --force-compile # exit 80\n      odrefresh --verify # exit 0 (was 79 previosly)\nTest: Verify the checksum of output files are the same, with\n      --use-compilation-os or not, i.e. regardless where the compilation\n      happens\nTest: mma in art/\nTest: odsign_e2e_tests\nChange-Id: Ie3ae48c7d70a2779cfbd80b307199a0f327c895c\n"
    },
    {
      "commit": "4aebd580c9c9de348b8fefed6353b86621cceb53",
      "tree": "47f07ff4173534c92ff9673d6d423c4df13bbe6e",
      "parents": [
        "d7a4da1f357e089c5d150559d8d2f2ddb7c4958a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 23 15:27:31 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 23 16:09:23 2021 +0000"
      },
      "message": "Add some null checks in case of OOME.\n\nTest: test.py\nBug: 194471075\nChange-Id: Ib02845636af4d3944a96f001e5ad728a94832285\n"
    },
    {
      "commit": "d7a4da1f357e089c5d150559d8d2f2ddb7c4958a",
      "tree": "bde88500eac9eda86031cfe8536241dfc79e12d2",
      "parents": [
        "2cb2527d4136f681b8e79352c546e65431ceb10c"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jul 23 15:05:49 2021 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jul 23 14:16:27 2021 +0000"
      },
      "message": "Revert \"Support pass BCP art/vdex/oat files by FD\"\n\nThis reverts commit b1adfc2a0570f52d74b8a4acdd578efc1790995b.\n\nReason: reports from Realtime Stability Insights (RTSI) infra.\n\nBug: 193720426\nFix: 194481664\nFix: 194475273\nFix: 194478073\nTest: TH\nChange-Id: I421d0b4a613de5ac8fb2830fa27206edb5428374\n"
    },
    {
      "commit": "2cb2527d4136f681b8e79352c546e65431ceb10c",
      "tree": "2e6429eff103ac8006f564238e381f4ec6e0a841",
      "parents": [
        "f7e4c3d58d3ce7f38e4591acb9928513928c39c4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 15 14:24:29 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 23 13:32:32 2021 +0000"
      },
      "message": "verifier: Remove support for precise constants and RegisterTrackingMode.\n\nThese features were used when we were creating GC maps and\ndeoptimization information with the quick compiler. Quick compiler has\nbeen removed, so we can remove these features.\n\nTest: test.py\nChange-Id: I633a7ada761b280b90e2d7c53cd5fbf2ae1d701d\n"
    },
    {
      "commit": "b1adfc2a0570f52d74b8a4acdd578efc1790995b",
      "tree": "c5058390901f2abbb0e281d8403be2b8db02c337",
      "parents": [
        "71f763399e95676d665e071623bccb714acf88b4"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Wed Jul 21 10:44:06 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 23 01:47:27 2021 +0000"
      },
      "message": "Support pass BCP art/vdex/oat files by FD\n\nThis is currently used by odrefresh.\n\nMain runtime changes are:\n\n1. When reading the image header, also tries to read from the FD if\n   provided.\n\n2. Initialize the art/vdex/odex FDs in the boot image chunk if provided.\n   This allows them to be opened (in case if the file is not accessible\n   by path) in LoadComponents.\n\n3. OpenBootDexFiles: accept BCP JARs passed as FD, in case if the file\n   is not accessible by path.\n\n4. The new FDs are passed from new runtime args,\n   -Xbootclasspath{art,vdex,oat}fds.\n\nIt is used in odrefresh to pass the previous output of BCP extensions to\nbe used in the next phase, system server compilation.\n\nBug: 193720426\nTest: odrefresh --use-compilation-os\u003d10 --force-compile # exit 80\n      odrefresh --verify # exit 0 (was 79 previosly)\nTest: Verify the checksum of output files are the same, with\n      --use-compilation-os or not, i.e. regardless where the compilation\n      happens\nTest: mma in art/\nChange-Id: I209085f047c42823ff20415804f65a9b32378b40\n"
    },
    {
      "commit": "c9acd230431acf786b5597cbbc2da57e88eb0435",
      "tree": "383869b7275bbd2b16b7481f507c6ce1e6bc679d",
      "parents": [
        "09bfdf1700feeedf85c4a53502d3c14b4d3f41fd"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Jul 21 17:51:32 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jul 22 21:15:14 2021 +0000"
      },
      "message": "Delete almost correct CHECK\n\nThe bytes_allocated + freed_bytes \u003e\u003d bytes_allocated_before_gc\nCHECK could fail if we expand space use as a result of copying,\nand perhaps for other reasons. Delete it, and have the later code\ndeal with the fact that it may not hold.\n\nTest: Build and boot AOSP.\nBug: 194263989\nChange-Id: I9188a7cd13661c16b1b69a90d1f03d60548db217\n"
    },
    {
      "commit": "09bfdf1700feeedf85c4a53502d3c14b4d3f41fd",
      "tree": "bf6c232234d4c41697a78868e51b7dc07eabb011",
      "parents": [
        "1b621225a8869f930d530e4855157a444971aca1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 19 12:17:20 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 22 14:09:53 2021 +0000"
      },
      "message": "Rewrite UTF-8 encoding.\n\nCreate a templated implementation to serve all the UTF-8\nrelated encodings. Use it for `CharsetUtils.toUtf8Bytes()`\nand the JNI `GetStringUTFChars()`. Do not use it yet for\nthe internal `ConvertUtf16ToModifiedUtf8()` which shall be\nswitched to actual Modified UTF-8 in a separate change.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: atest CtsLibcoreTestCases:libcore.java.lang.StringTest\nBug: 192935764\nChange-Id: Id3ec3a0bc2638becdf4181d9c2b6794c91a75314\n"
    },
    {
      "commit": "a6f8a6a7a1e4e639b393261fc46abe046cd59b63",
      "tree": "910fbc17a780b894cb116aee0200369941469183",
      "parents": [
        "244f22bf574f8c1656e668e77e4636f442d1a214"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 21 12:29:04 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 22 09:35:51 2021 +0000"
      },
      "message": "Initialize intrinsics for UnstartedRuntimeTest.\n\nThis is needed for implementing Java Atomic* classes\nwith `VarHandle` as two of the unstarted runtime tests\nshall then exercise code paths with invoke-polymorphic\nwhere we need to know the intrinsic for dispatch.\n\nTest: m test-art-host-gtest\nBug: 188889082\nChange-Id: Idf01066af68edb2db0be8954a4440d53e95ecbc8\n"
    },
    {
      "commit": "c4597765f2d7496e428c0b0dc1b26ffb71c61093",
      "tree": "698f1308c89b6aa3fa6c47ea9645e43d36d37946",
      "parents": [
        "e501434b98c740969607e400678a43a8f3c79942"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jun 10 14:08:26 2021 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jul 20 18:46:04 2021 +0000"
      },
      "message": "Unhide VarHandle methods\n\nWith compiler intrinsics support for a significant fraction of the\nAPI, these can be unhidden.\n\nBug: 65872996\nBug: 191980162\nTest: m\nChange-Id: I30abc13f89c969ceae6f68c49280c7bca0d33f81\n"
    },
    {
      "commit": "edc005e396947fb4fa681c4a0be7beba66354239",
      "tree": "861321ca5332baea1ea2d1c974a90496bd48ad7d",
      "parents": [
        "91d364965955265776848b190b066c53e2dd5f6e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 16 10:22:28 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 19 14:49:10 2021 +0000"
      },
      "message": "Rewrite JNI NewStringUTF().\n\nFor historical reasons, NewStringUTF() accepts 4-byte UTF-8\nsequences which are not valid Modified UTF-8. This can be\nconsidered an extension of the JNI specification.\n\nRewrite the function to deal with the decoding explicitly,\nso that we can later avoid dealing with the 4-byte sequences\nin internal ART routines intended for Modified UTF-8.\nNote that the DexFileVerifier rejects them in dex files.\n\nChange the decoding to accept improperly encoded ASCII\ncharacters as two-byte or three-byte sequences.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 192935764\nChange-Id: I3f91da990110e419c78138ce997123277bf3aaba\n"
    },
    {
      "commit": "91d364965955265776848b190b066c53e2dd5f6e",
      "tree": "1b1b2b7e5323f7f3176149d1cc4f9ed4ac591416",
      "parents": [
        "4b0ceb655f86d6be90be574349bdc55d24e5560c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 19 11:59:42 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 19 14:48:55 2021 +0000"
      },
      "message": "Fix trailing surrogate validation.\n\nThe macro `U16_IS_SURROGATE_LEAD()` assumes that the input\nis a surrogate without checking that assumption. Use the\n`U16_IS_TRAIL()` macro instead to correctly validate the\ntrailing surrogate in `CharsetUtils.toUtf8Bytes()`.\n\nTest: atest CtsLibcoreTestCases:libcore.java.lang.StringTest\nBug: 193891113\nChange-Id: Ib70d5a5b42c885ede3bf0e3bc087383c979f1f60\n"
    },
    {
      "commit": "8f21748bf127012947ed48c40948df3f2d9c85ef",
      "tree": "70d287634fd0b3a2d43ad8de7738c9703eb0a2a6",
      "parents": [
        "ce5c830aede3313ceb22f7b2ca6c30e5b8432972"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 14 17:16:36 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 16 09:44:43 2021 +0000"
      },
      "message": "Mark move constructors/assignements as `noexcept`.\n\nAnd unmark `HashSet` copy constructor and copy assignment.\n\nTest: m\nChange-Id: Ia419f3036b2880815be446395e81c7e543388bd9\n"
    },
    {
      "commit": "b572832561669794edc8577ffbbf2ef19374e8bb",
      "tree": "ad2af8b17a0dff5f1c3f322ebe431fbd397537ed",
      "parents": [
        "66934efcabd2b75fd84b3cc0a8665f4ecc136727"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Fri May 21 09:45:35 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jul 15 18:24:50 2021 +0000"
      },
      "message": "Deprecate support of extracting BCP from boot image\n\nBug: 188905361\nTest: m\nChange-Id: I2820eb0d60ba6eedee3c67800f884512a638bacb\n"
    },
    {
      "commit": "66934efcabd2b75fd84b3cc0a8665f4ecc136727",
      "tree": "b55d836b7df49dcc73126cbcded7a0e64451ba39",
      "parents": [
        "cf74ae7eae39affc8886b4bce5294aceebb908c3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 14:56:23 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 15 14:26:13 2021 +0000"
      },
      "message": "Clean up ClassLinker::VerifyClass.\n\nAnd drop kAccWasVerificationAttempted. It\u0027s not needed and duplicates\nlogic already present in the compiler and the class status.\n\nThis CL also enables nterp running methods with soft failures.\n\nTest: test.py\nBug: 28313047\nChange-Id: I853a6f00b9e0c38091d86fcd77167c92ff5b383c\n"
    },
    {
      "commit": "cf74ae7eae39affc8886b4bce5294aceebb908c3",
      "tree": "5a7ca403a555069f3f373c38fe45d78b53e243c6",
      "parents": [
        "dcb148a48a6bc69aba71cf3e2b8ab915ab3bf6d5"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 15 10:37:28 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 15 14:09:19 2021 +0000"
      },
      "message": "Small cleanups after latest verifier change.\n\nDuring AOT, the inliner can also look at whether the class needs to be\nverified at runtime. We know the class doesn\u0027t hard fail otherwise its\nstatus would be ErrorResolved.\n\nAlso un-negate IsUnverified -\u003e IsVerified.\nAlso make isVerifiedNeedsAccessCheck only return true if the class has\nthat exact state.\n\nTest: test.py and golem numbers\nBug: 28313047\nChange-Id: I2ee0024a380225e1aa120b69069a5a34d3f81113\n"
    },
    {
      "commit": "9e050ab1a061d9660eb0c1daa01a823ad75b0f05",
      "tree": "714f2ba3b11406310416e85357f45450634846b2",
      "parents": [
        "4f990714b13e0b4446305a5411648a1a9ae42a7a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 14 14:59:25 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 14 17:13:08 2021 +0000"
      },
      "message": "Remove the need of VerifiedMethod in the compiler.\n\nThe compiler only needs to know if a method is compilable or not. So\njust record a set of uncompilable methods (in some cases, we cannot have\nan ArtMethod, but the method can still be compiled).\n\nTest: test.py\nBug: 28313047\nChange-Id: Ic4235bc8160ec91daa5ebf6504741089b43e99cb\n"
    },
    {
      "commit": "4f990714b13e0b4446305a5411648a1a9ae42a7a",
      "tree": "4568386e3e6f3c98c819851f6573e2c7cbc184fb",
      "parents": [
        "7744b69abf073101b09b9043f0f0eb109768fcfe"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 14 12:45:13 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 14 15:18:36 2021 +0000"
      },
      "message": "Modernize typedefs with `using`.\n\nReplace many occurences of `typedef` with `using`. For now,\ndo not update typedefs for function types and aligned types\nand do not touch some parts such as jvmti or dmtracedump.\n\nTest: m\nChange-Id: Ie97ecbc5abf7e7109ef4b01f208752e2dc26c36d\n"
    },
    {
      "commit": "7744b69abf073101b09b9043f0f0eb109768fcfe",
      "tree": "6598234dc0a9b2327729705cf61f836e3e777d58",
      "parents": [
        "eacf044aae6d7d515ac988dceedaadbf53916b60"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 06 16:19:32 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 14 13:17:09 2021 +0000"
      },
      "message": "Remove dual verification in RedefineClasses.\n\nAlso clean up the ClassVerifier interface with now just one method and\nthe removal of VerifierCallbacks.\n\nTest: test.py\nBug: 28313047\nChange-Id: I1a87dd1757cfdeec0d482f82dacd7cac43545964\n"
    },
    {
      "commit": "47349d2d27b9ee57896e03841032a3057fc9d838",
      "tree": "ca2f9a616d6668f797a933778bc3bcdfd14907d9",
      "parents": [
        "85430bb410c432ac40d950cfa494b0f9cc4f33ac"
      ],
      "author": {
        "name": "Sorin Basca",
        "email": "sorinbasca@google.com",
        "time": "Wed Jun 16 13:45:49 2021 +0000"
      },
      "committer": {
        "name": "Sorin Basca",
        "email": "sorinbasca@google.com",
        "time": "Tue Jul 13 14:30:10 2021 +0000"
      },
      "message": "Adding unstarted JNI implementation needed by VarHandle\n\nThe creation of a FieldVarHandle depends on Field.getArtField() and\nField.getNameInternal() which are native methods. As\nAtomicInteger (and other java.util.concurrent.atomic classes) are\ngoing to use VarHandle, these methods need to be available in\nunstarted non-transaction runtime.\n\nThis change adds these methods to unstarted runtime.\n\nTest: m\nBug: 188889082\nChange-Id: I7d9a05aef1bbad05594b9bb326a741cf1485b744\n"
    },
    {
      "commit": "e4f983c808b0b7d2d9c39f34f67971bba1354b08",
      "tree": "80dd518ac4e7ea00670f2ebdb70efbe8b1f577cd",
      "parents": [
        "5f2f289b64f163e491b9b53364ce04874f82b4e3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 12 15:53:27 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 13 12:14:13 2021 +0000"
      },
      "message": "Remove mterp.\n\nTest: test.py\nChange-Id: Id800bcf86965ab19cf1e79ecbfa8996a6a6c335e\n"
    },
    {
      "commit": "5f2f289b64f163e491b9b53364ce04874f82b4e3",
      "tree": "52018e22d0dd047c360036c8f02a9b6fb41eaa4e",
      "parents": [
        "a5c529fd866309856a1eaff009f781ffe266b499"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Mon Jul 12 15:59:38 2021 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Mon Jul 12 18:41:47 2021 +0000"
      },
      "message": "Fallback to version code in case lastUpdateMillis field is not populated\n\nTest: presubmit\nBug: 193374411\nChange-Id: I2006a1926c64cf01e12d82c90197b20f5cff9406\n"
    },
    {
      "commit": "1b9d442dc906d0158300c5178683f417fa59b026",
      "tree": "dd52852cd7a16af7f5480c5f6c9213079a319dc8",
      "parents": [
        "52eebc756c96fbf71ad77b6d30bdff8a67723569"
      ],
      "author": {
        "name": "Chuck Liao",
        "email": "chuckliao@google.com",
        "time": "Mon Jul 12 01:25:23 2021 +0000"
      },
      "committer": {
        "name": "Chuck Liao",
        "email": "chuckliao@google.com",
        "time": "Mon Jul 12 02:58:46 2021 +0000"
      },
      "message": "Revert \"Do not create 4-byte sequences in `ConvertUtf16ToModifiedUtf8()`\"\n\nThis reverts commit e0a4f373dc4a738a2f26965a67d31239cbbd4f6a.\n\nReason for revert: DroidMonitor-triggered revert due to breakage https://android-build.googleplex.com/builds/tests/view?invocationId\u003dI44000009917256156\u0026testResultId\u003dTR23027520914949881, bug b/193363191\n\nBug: 193363191\nChange-Id: I2e7fe6de3f63864b58729d2c76e9ab5c95aa7983\n"
    },
    {
      "commit": "e0a4f373dc4a738a2f26965a67d31239cbbd4f6a",
      "tree": "b097c82983074f167ef1a14ab529750fcc842b9f",
      "parents": [
        "d920b7b01f92676eec2aa504ef6cf13c3f3283fc"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 08 11:22:53 2021 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 09 23:17:15 2021 +0000"
      },
      "message": "Do not create 4-byte sequences in `ConvertUtf16ToModifiedUtf8()`\n\nThis encoding was different from the encoding in dex files\nand this caused wrong `Class::IsInSamePackage()` result\nfor proxy classes if the packages name contained at least\none character outside the BMP plane.\n\nThis essentially reverts commit\n    e16dad1d6388b0305f13e2171308a77f42e7c682\nbut keeps all tests, only updating expectations.\n\nAlso rename `CountUtf8Bytes()` to `CountModifiedUtf8Bytes()`\nto make the format explicit in the function name.\n\nTest: New test 181-proxy-non-bmp\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 192935764\nBug: 193141629\nChange-Id: I8e6e8b08174c7a6d3ff84b0e1e929056b3947785\n"
    },
    {
      "commit": "2ec38232c632a2c7f3069f02d5c4d7036f14575b",
      "tree": "2500a6189a53a6bccb1b475d7e8a45ce4acd01ec",
      "parents": [
        "81909865f1d82314b72d09d1ad1f4545efd809e7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 02 16:36:29 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 09 11:55:11 2021 +0000"
      },
      "message": "Clean up verifier interface.\n\nRemove verifier_callbacks and ArtMethod as argument. The verifier can\noperate without them.\n\nThis allows removing the bogus DexCache::SetResolvedType in ti_redefine.\n\nAlso turn runtime throw failures into VerifyError, for cleaner interface\nwith users of the verifier.\n\nTest: test.py\nBug: 28313047\nChange-Id: I9ba1300f198aaf482ed43061465daea789ea732b\n"
    },
    {
      "commit": "ef10f42bf21cddff00972c8b47aaf79528cbe3b5",
      "tree": "c025d3479b515beebb4adca35efae47d3db47bce",
      "parents": [
        "a4d27de25484b526205b446b8157122dc117b332"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 08 14:34:11 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 09 07:50:47 2021 +0000"
      },
      "message": "Use lastUpdateMillis of an apex for ART versioning.\n\nTest: m\nBug: 192647837\nChange-Id: Ide7e5a1dbfe85c679313bb6c8e6788137b138f42\n"
    },
    {
      "commit": "6a2e6893290eac83f59dac4ec5bc10abf985ae10",
      "tree": "ee7f59774da19363bb867df9c0e9dc4f35f01fa2",
      "parents": [
        "592bceac0c030794175ae41d9c7e2ca092739d2e"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Sun Jul 04 14:21:07 2021 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jul 08 16:56:35 2021 +0000"
      },
      "message": "Add support for standalone ART gtests to MTS.\n\nThis change:\n- adds standalone ART gtests to test suite `mts-art`;\n- adds `MainlineTestModuleController` support to standalone ART\n  gtests. This in order to have these tests run in a Mainline context\n  only when the ART Module (either `com.google.android.art` or\n  `com.android.art`) is installed on the test device.\n\nTest: m mts \u0026\u0026 mts-tradefed run commandAndExit mts-art\nTest: m mts \u0026\u0026 mts-tradefed run commandAndExit mts-art-shard-00\nBug: 167385698\nChange-Id: I97d9c00b7c10debff8c63e4ae75f90da02be271c\n"
    },
    {
      "commit": "592bceac0c030794175ae41d9c7e2ca092739d2e",
      "tree": "166baa3864417e773d7800489d063284ab32b9ab",
      "parents": [
        "79f874d287cb314dcf3fb8a78122d4296e91bd42"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jul 02 22:20:52 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jul 08 15:22:22 2021 +0000"
      },
      "message": "Add JNI globals tracing\n\nAdd separate tracing for global and weak global JNI references.\n\nWe only add an entry for every Nth addition or removal of a reference.\nCurrently N \u003d 17 to minimize danger of getting in sync with some\napplication code pattern.\n\nBug: 189738006\nBug: 192318532\nTest: Build boot and look at trace in S build.\nChange-Id: I2f223c2a07932f97f89ff87d57f4379c1396ef9e\n"
    },
    {
      "commit": "4f623272bdf76d0308af4e45a71fb5a728d4f0f1",
      "tree": "7403e7709f968dd6396fabe821c4eba88e5f87dd",
      "parents": [
        "1de4428db83a426fd7d0615dc9cdd204de41f6e3"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jul 07 16:32:26 2021 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jul 08 13:33:01 2021 +0000"
      },
      "message": "Fix another style issue reported by cpplint.\n\nTest: m cpplint-art-all\nChange-Id: I18cd3cbc47e8df4cfa319dde756edc1539cb8720\n"
    },
    {
      "commit": "e431d134fb54cc7231ad3ab200e46a3dc06c66f2",
      "tree": "e88c92e42ad5a2a66b4ccda2e58c145055f6b731",
      "parents": [
        "b6e679292e526f48a2a7c389b37f920419243c27"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 06 08:16:34 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 08 07:32:31 2021 +0000"
      },
      "message": "Add a \"vdex\" reason for compilation reason.\n\nWhen the oat file is out of date, we run directly from the vdex.\n\nTest: test.py\nBug: 192408935\nChange-Id: I7474532d7f12a32d2c26a5a0fb8b73671793d3f3\n"
    },
    {
      "commit": "b6e679292e526f48a2a7c389b37f920419243c27",
      "tree": "90e1a4cf98ea510571fe45c38493b81e77f7d056",
      "parents": [
        "7209da0a46dd96ae5b9d73124ef09b4b0fe9ac25"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 15:53:07 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 07 16:10:07 2021 +0000"
      },
      "message": "Move Transaction logs to arena allocator.\n\nAnd change some containers to reduce memory usage.\n\nAlso update `SafeMap` with some C++17 functions, namely all\n`erase()` and `extract()` overloads and `insert()` overloads\ntaking a \"node\". The `extract()` and `insert()` overloads\nare convenient to avoid allocation/dealocation when updating\nthe key of an entry.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I791d00598ac288b1f31c92daa63b5b3dcf6b41fa\n"
    },
    {
      "commit": "7209da0a46dd96ae5b9d73124ef09b4b0fe9ac25",
      "tree": "7a3227751b4eb8b8eef10eecf58c63d046bbbe62",
      "parents": [
        "6f244fa1658e216512cf6ef15a6301defaf0f5b0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 28 17:50:38 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 07 15:31:36 2021 +0000"
      },
      "message": "Support field VarHandle objects in boot image.\n\nTest: Build with WIP changes to implement AtomicInteger with\n      VarHandle. Build succeeds.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 191765508\nChange-Id: I084ab7b3cd082570a090f3470fdfb792b80f4505\n"
    },
    {
      "commit": "6cd7ab38ec76943d1b9cdc2191f1260188511b2b",
      "tree": "7aea757a61ab1ac917d09151f08a6fc440cfa358",
      "parents": [
        "b17c908047a2df675ecb4bd0aa2b21114376bbae"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 09:35:50 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 11:39:34 2021 +0000"
      },
      "message": "Only set nterp entrypoint after a class is verified.\n\nIf a method needs lock counting, we need to use the switch interpreter.\n\nTest: test.py\nTest: 825-unbalanced-lock\nChange-Id: I50629d20305e01ce2efe75606b00641052378234\n"
    },
    {
      "commit": "b17c908047a2df675ecb4bd0aa2b21114376bbae",
      "tree": "f457b402b2c4455ab0843017dd64335640bf01b1",
      "parents": [
        "8fddc7519d756d4de6c2c1a4b14af5584e9fecba"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 08:27:45 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 09:32:51 2021 +0000"
      },
      "message": "Set compilation reason in vdex-only OatFile.\n\nTest: test.py\nBug: 192408935\nChange-Id: Ib87ea546876bfb4c6bf87b60f5a4f8aa306bd186\n"
    },
    {
      "commit": "8fddc7519d756d4de6c2c1a4b14af5584e9fecba",
      "tree": "b832d2032e9a337ed31804e895426206de971854",
      "parents": [
        "85d6bf94dc0d3a9c648dc6d614a293c4e416b247"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 06 14:16:40 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 08:11:47 2021 +0000"
      },
      "message": "Handle potential OOME after ResolveNameString.\n\nTest: test.py\nBug: 192658894\nChange-Id: I10110c00326fd6f6da383cda0287542a2f1b61c6\n"
    },
    {
      "commit": "24c080f628e7df51460332374f4ebcae2762d155",
      "tree": "cbb0231518ce4afc94310b13edb1b87e5f14600b",
      "parents": [
        "4dc6589f392d46800a3b64625245bdfe4bbbfc2f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 14:04:30 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 07 08:01:57 2021 +0000"
      },
      "message": "Remove locking from `Transaction`.\n\nMulti-threaded execution of transaction has never been fully\nsupported, so remove the unnecessary locking as it is pure\noverhead. (And implementing it would require a lot of effort\non transactions interfering with each other.)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: Ibdbc335738d34ea1398f50f0cc763f3b3f5838b9\n"
    },
    {
      "commit": "4dc6589f392d46800a3b64625245bdfe4bbbfc2f",
      "tree": "b159262fd300a650ab89277667641ebe7e13d357",
      "parents": [
        "e0386f10d4591afa9823658099e4f2ac7a693255"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 05 17:43:35 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 07:13:01 2021 +0000"
      },
      "message": "Don\u0027t wrap VerifyError into NoClassDefFoundError.\n\nFollow RI behavior by returning the VerifyError. NoClassDefFoundError\nonly wraps initializer errors.\n\nAlso rename the field in ClassExt from verifyError to\nerroneousStateError for better clarity.\n\nAnd remove now unused feature of storing a class in the verifyError\nfield.\n\nTest: test.py\nTest: 824-verification-rethrow\nBug: 28313047\nChange-Id: I19383f7b74f22a62ab1e0b8a13bea75a14c7b33f\n"
    },
    {
      "commit": "dd411969bb486c36081926d61dbcc0bfbc8066a5",
      "tree": "aa0601299b351d41c349e64ed468cb2c9b95e6f4",
      "parents": [
        "f040914a122be86e280efe5e31af1168f2b7c72e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jun 25 08:55:22 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 13:58:08 2021 +0000"
      },
      "message": "VarHandle: add StaticFieldVarHandle class\n\nAdd StaticFieldVarHandle class to keep a live reference to the\ndeclaring class for the target field of VarHandle\u0027s targeting static\nfields.\n\nBug: 191980149\nTest: art/test.py --host -r -g\nChange-Id: I3a1cada6591d146b8f9fc9066105e3b617290185\n"
    },
    {
      "commit": "f040914a122be86e280efe5e31af1168f2b7c72e",
      "tree": "8ea3fa76be8f215d36977477015ed7f9f3a2f65c",
      "parents": [
        "b4bd92f27fb143135870d07b459ea52637afcfa5"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Mar 22 15:45:03 2021 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jul 06 10:52:35 2021 +0000"
      },
      "message": "Uncouple ART gtests from the ART APEX.\n\nIntroduce standalone versions of ART gtests on target, not bundled\nwith the ART APEX.\n\nSo far ART gtests have always been built as debug artifacts (and\nlinked against ART debug libraries). Make some adjustments in some of\nthese tests so that they can also work as non-debug artifacts and be\nused with the Release ART APEX (which contains only non-debug\nartifacts).\n\nNewly added tests:\n* `art_standalone_cmdline_tests`\n* `art_standalone_compiler_tests`\n* `art_standalone_dex2oat_tests`\n* `art_standalone_dexdump_tests`\n* `art_standalone_dexlist_tests`\n* `art_standalone_dexoptanalyzer_tests`\n  * Note: Requires root access to the device.\n* `art_standalone_libartbase_tests`\n* `art_standalone_libartpalette_tests`\n* `art_standalone_libartservice_tests`\n* `art_standalone_libarttools_tests`\n* `art_standalone_libdexfile_support_tests`\n* `art_standalone_libdexfile_tests`\n* `art_standalone_libprofile_tests`\n* `art_standalone_oatdump_tests`\n* `art_standalone_odrefresh_tests`\n* `art_standalone_profman_tests`\n  * Note: Requires root access to the device.\n  * Note: Some tests (2 out of 37) are failing in multi-ABI\n    contexts and have been temporarily disabled.\n* `art_standalone_runtime_compiler_tests`\n* `art_standalone_runtime_tests`\n  * Note: Some tests (16 out of 686) are failing and have been\n    temporarily disabled.\n  * Note: Some tests (4 out of 686) are failing in multi-ABI\n    contexts and have been temporarily disabled.\n* `art_standalone_sigchain_tests`\n\nTests not added:\n* `art_standalone_dexanalyze_tests`\n  * Reason: ART binary `dexanalyze` is not part of the Release ART APEX.\n* `art_standalone_dexdiag_tests`\n  * Reason: ART binary `dexdiag` is not part of the Release ART APEX.\n* `art_standalone_dexlayout_tests`\n  * Reason: ART binary `dexlayout` is not part of the Release ART APEX.\n* `art_standalone_imgdiag_tests`\n  * Reason: ART binary `imgdiag` is not part of the Release ART APEX.\n\nTest: atest -a art_standalone_cmdline_tests\nTest: atest -a art_standalone_compiler_tests\nTest: atest -a art_standalone_dex2oat_tests\nTest: atest -a art_standalone_dexdump_tests\nTest: atest -a art_standalone_dexlist_tests\nTest: atest -a art_standalone_dexoptanalyzer_tests\nTest: atest -a art_standalone_libartbase_tests\nTest: atest -a art_standalone_libartpalette_tests\nTest: atest -a art_standalone_libartservice_tests\nTest: atest -a art_standalone_libarttools_tests\nTest: atest -a art_standalone_libdexfile_support_tests\nTest: atest -a art_standalone_libdexfile_tests\nTest: atest -a art_standalone_libprofile_tests\nTest: atest -a art_standalone_oatdump_tests\nTest: atest -a art_standalone_odrefresh_tests\nTest: atest -a art_standalone_profman_tests\nTest: atest -a art_standalone_runtime_compiler_tests\nTest: atest -a art_standalone_runtime_tests\nTest: atest -a art_standalone_sigchain_tests\nTest: atest -a art_standalone_\\*_tests\nTest: m art_chroot \u0026\u0026 atest ArtGtestsTargetChroot\nBug: 162834439\nBug: 162734417\nChange-Id: I8beda9159d48c4ca495698357dc3bd95e3ff84d5\n"
    },
    {
      "commit": "b4bd92f27fb143135870d07b459ea52637afcfa5",
      "tree": "521f811ea786e178f685316b035fe6cb0ced0605",
      "parents": [
        "53a6334ac751aceb65d4994b81f4af815f749295"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 05 12:18:26 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 08:21:13 2021 +0000"
      },
      "message": "Faster hashing in `ClassLinker::LinkVirtualMethods()`.\n\nMeasurement shows that `ComputeModifiedUtf8Hash()` is faster\nwhen iterating over `std::string_view` than `const char*`.\nHowever, getting the length of the string with `strlen()`\nwould outweigh the benefits, so we shall only use the new\n`ComputeModifiedUtf8Hash(std::string_view)` overload when\nwe can avoid (or usually avoid) the `strlen()` call.\n\nIn `ClassLinker::LinkVirtualMethods()`, method names come\nfrom the dex file and we can avoid the `strlen()` call as\nlong as they are ASCII which is usually the case (at least\nfor boot class path methods; proguarded apps sometimes use\nnon-ASCII method names), so use `std::string_view` there.\nAlso simplify the code a bit, avoiding the UTF16 length\ncomparison. This has some trade-offs as we delay the length\ncomparison until we know the length in chars (and compare\nthat length instead) but we also replace `strcmp()` with a\nfaster `memcmp()`.\n\nThe changes to the Modified UTF-8 hashing API also prepare\nfor future work such as calculating array class descriptor\nhash without a string allocation for the full descriptor.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I6d45f738903000c55d401b776906dac83fca1a19\n"
    },
    {
      "commit": "53a6334ac751aceb65d4994b81f4af815f749295",
      "tree": "5d9f9c8fc1ca9e982972599d1bdf0969e1ebd2f0",
      "parents": [
        "2c9667363ba0f8178a077332a8ec1c74426fdc70"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 10 14:30:00 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 08:15:17 2021 +0000"
      },
      "message": "Improve comments in ReadBarrierOption.\n\nTest: m\nBug: 119486698\nChange-Id: I6afa42b03ac02b596b782a24fee2769d9138deee\n"
    },
    {
      "commit": "bf097b7f6354e7e1e8c0a7b97fb728744136e271",
      "tree": "da074baae153743c07ab7066befe853e37ee8afc",
      "parents": [
        "a9967a2ecee9043d92b97b21def3a9a4bdd803c2"
      ],
      "author": {
        "name": "Tej Singh",
        "email": "singhtejinder@google.com",
        "time": "Thu Jul 01 21:42:03 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 02 22:17:10 2021 +0000"
      },
      "message": "ART clean up metrics reporter\n\nTest: TH\nChange-Id: Iaf177c301a6bc9dedde14aca2900d4c2376cde6a\n"
    },
    {
      "commit": "cd133d85874d94cd05b5ba11389c851550e6d8f4",
      "tree": "514f7f1fa4bfaa9038e5c98a299543ccbb4bfdd6",
      "parents": [
        "971068dcaf5955634679dbfaf7b562ed52aff772"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 25 16:10:39 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 02 15:27:21 2021 +0000"
      },
      "message": "Verifier cleanups.\n\n- For apps \u003c\u003d S, keep the behavior of not analyzing an unreachable\n  handler. If \u003e\u003d T, we analyze it to simplify handling in the compiler.\n- Remove VERIFY_ERROR_SKIP_COMPILER and fold uncompilable methods into\n  checking HasInstructionThatWillThrow.\n\nTest: test.py\nBug: 28313047\nChange-Id: I20b65cf50def2a4a95617a03142575b8591ae0ec\n"
    },
    {
      "commit": "971068dcaf5955634679dbfaf7b562ed52aff772",
      "tree": "3e76f60e7136f53ca0d19a23914721515e8b2725",
      "parents": [
        "3d12876bd9782831ad5c907f1f9dc94d10867f3d"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jun 30 21:17:53 2021 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jul 02 10:19:42 2021 +0000"
      },
      "message": "runtime: add -Xdeny-art-apex-data-files\n\nThis option prevents the runtime from loading AOT artifacts installed\nin /data/misc/apexdata/com.android.art.\n\nBug: 192049377\nTest: manually adding option and running odsign_e2e_tests\nTest: adding option and looking at proc/maps for system_server and zygote\n\nChange-Id: I56c7ce55b64de72faf39a06238089fe4b6b84b88\n"
    },
    {
      "commit": "3d12876bd9782831ad5c907f1f9dc94d10867f3d",
      "tree": "cd2f65f171ff5ff83bd447513abf171696359262",
      "parents": [
        "1792c6ff1c9838dfbe948be124dc1a8501fc6636"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jul 01 09:01:51 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 02 01:40:06 2021 +0000"
      },
      "message": "Add special control flags for system server reporting\n\nSystem server is important enough to have its own config.\n\nTest: gtest\nBug: 170149255\nChange-Id: I33741751717ef3474f3a89e8fda8ad19b9e952ed\n"
    },
    {
      "commit": "1792c6ff1c9838dfbe948be124dc1a8501fc6636",
      "tree": "f8df705069592bc5037f6f580fcafe0df07f6d91",
      "parents": [
        "4f388e3f26925f84d0a623a5a0e3c909fd09bd98"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jun 24 17:35:50 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jul 01 20:17:33 2021 +0000"
      },
      "message": "Add -XX:ForceJavaZygoteForkLoop flag\n\nSetting this to true effectively disables the zygote native fork\nloop, either for testing/measurement purposes, or as a fallback.\n\nBug: 192020504\nTest: Check logcat with and without the flag.\nChange-Id: I83c401d21ae2797442011d9ac6f23c78990920bd\n"
    },
    {
      "commit": "bbdb1ed109532f42949f84194e7717453f2f37f6",
      "tree": "1fcdcf4cff743c209e1f9b732ea4a5b59d4f6939",
      "parents": [
        "9b996ce378e58f4699145721a1708732d5399a95"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 29 14:12:05 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 01 09:42:30 2021 +0000"
      },
      "message": "Cache boot classpath checksums at runtime init.\n\nTo speed up oat file checksums check.\n\nTest: test.py\nBug: 191828947\nChange-Id: I2fe97a5626220470ec3edf457a3a24e7d50ce6d7\n"
    },
    {
      "commit": "9b996ce378e58f4699145721a1708732d5399a95",
      "tree": "be1392dd6a0c029c92f1de195b74961d83da112e",
      "parents": [
        "c2753e6beec483b5b14161b6bbc8e0a86aef9397"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 29 16:05:38 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jul 01 01:52:04 2021 +0000"
      },
      "message": "Replace JIT total time histogram with total time counter\n\nWe don\u0027t report histograms, so let\u0027s get the total time as a\nproxy to measure JIT activity.\n\nTest: gtest\nBug: 170149255\nChange-Id: I76911f5e7f93f00dc9f133e7f89a1045b31dedc7\n"
    },
    {
      "commit": "c2753e6beec483b5b14161b6bbc8e0a86aef9397",
      "tree": "070107ce0d907ab246d4a33f4d3aac7e679006c7",
      "parents": [
        "546243375d7e129aa02ca7ea9663ed7c40b4880e"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jun 25 15:34:09 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jul 01 01:52:04 2021 +0000"
      },
      "message": "Fix compiler filter / reason reporting and add the ISA to the metrics\n\nThe compiler filter / reason reporting was not accurate for a variety\nof reasons. (e.g. reporting was only done at startup, it was relying\non imprecise APIs and had errors in the logic).\n\nIn order to keep track of the precise optimization status, this CL\nintroduces the concept of AppInfo, which encapsulates the data about\nthe application / system server code paths, their optimization status\nand possible other metadata (e.g. profiles).\n\nTo populate it, we rely on 2 distinct events:\n1) The framework calling VMRuntime#registerAppInfo to inform the\nruntime about the applications code paths and their types (e.g. primary,\nsplit, secondary).\n2) Class loading, when we can determine the actual optimization status\nlike filters, reasons, and whether or not we can load the odex files.\n\nThese events may happen in any order so we could deal with a partial\nstate at some point in time, but in the majority of cases they always\nhappen at Class Loading, followed by RegisterAppInfo.\n\nThis CL also deletes the OatFileManager#getPrimaryOatFile which was\na misleading API as it didn\u0027t work in most cases. It also adds more\ntests to the metrics/reporting infra for previous missing or\nunimplemented cases.\n\nTest: gtest\nBug: 170149255\nChange-Id: If0a7a25d06ff6fb89fe4861139b7dee61c05814d\n"
    },
    {
      "commit": "a4d28dd66683c1bc27ad936d30aee71e73b084db",
      "tree": "213bf9c43b8d9d8ec9642049faaa37020a509831",
      "parents": [
        "44dc8a300adb63b1bf465de555b7f8cce0481bb3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 30 11:28:06 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 30 13:21:12 2021 +0000"
      },
      "message": "Avoid marking proxy class as erroneous twice.\n\nThis code path was missed in\n    https://android-review.googlesource.com/102184 .\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 192246059\nChange-Id: Ie41c3d55b76667b186dc47999e024372669764f9\n"
    },
    {
      "commit": "44dc8a300adb63b1bf465de555b7f8cce0481bb3",
      "tree": "095bc4801079f46f36a474db3e05dded5f7971f8",
      "parents": [
        "c9df5ce4cca760b27e9650363eaba5b92d87324c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 21 15:23:49 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 30 13:04:57 2021 +0000"
      },
      "message": "verifier: do not infer an instruction will throw.\n\nTurning a regular instruction into a throwing one has currently\nundesirable consequences:\n1) It leads to inconsistencies between the AOT verification and the\n   runtime verification.\n2) It treats the following code dead and does not analyze it. We treat\n   this as an non-compilable method as it\u0027s a lot simpler for the\n   compiler to consider all code verified.\n3) It prevents verification optimizations like doing one-pass\n   analysis over the code.\n\nTo be AOT / runtime consistent and follow RI behavior, stop considering\nsuch instructions as throwing.\n\nWe make this API version dependent for app compatibility reasons.\n\nTest: test.py\nBug: 28313047\nChange-Id: I9c847043d1f431f642731a70f651c93ef22fdf86\n"
    },
    {
      "commit": "f8b5288ab53fa3dbc95ddc22264c53165fdefbdd",
      "tree": "2fdee1be7012bc73d6776d508619f8c0ef4feeaa",
      "parents": [
        "d7b416118ab6820fb1fbe93ca194c4a748b9fa59"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 25 17:00:30 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 30 12:14:25 2021 +0000"
      },
      "message": "Remove experimental flag in verifier.\n\nWe don\u0027t use it anymore. If we add new opcodes in the future, we can\ntest by disabling the verifier (something which was hard to do at the\ntime).\n\nTest: test.py\nBug: 28313047\nChange-Id: Idce9a520995d12fdfc3bd314bc06b542492a0ab8\n"
    },
    {
      "commit": "d7b416118ab6820fb1fbe93ca194c4a748b9fa59",
      "tree": "ad91272848fbe24783ee60135c357ed9bbb2f069",
      "parents": [
        "f368641c5bd373749194259409dc467df7a77edb"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jun 17 18:31:14 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Jun 29 23:55:17 2021 +0000"
      },
      "message": "Add more weak reference information to traces\n\nSeparate the marking piece of EnqueueFinalizerReferences.\n\nReport the number of finalizable objects.\n\nSimilarly report the number of SoftReferences we encounter\nand the amount of time we spend marking as a result.\n\nAdd trace information and possibly log entry when we block\ndereferencing a WeakReference or the like.\n\nDo the same for JNI WeakGlobals, with some code restructuring\nto enable that.\n\nDelete one of the two nested and almost entirely redundant\nProcessReferences ATrace tags, thus reducing the space needed\nto display HeapTaskDaemon back to what it was.\n\nBug: 189738006\nTest: Boot sc-dev and look at trace\nChange-Id: I198db632d957bcb9353ab945cedc92aa733963f0\n"
    },
    {
      "commit": "f368641c5bd373749194259409dc467df7a77edb",
      "tree": "bb2dd4f603da3de8381c4a7b148344ff4d476350",
      "parents": [
        "45848daf541599548145c265ece14aad0e973639"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Fri Jun 25 21:30:30 2021 -0700"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Tue Jun 29 15:41:56 2021 +0000"
      },
      "message": "[metrics] Add total-gc-time and adjust other metrics\n\nThis change introduces the following:\n1) Added total-gc-collection-time in ms as a counter so that, at anytime,\nwe can know how much time is spent in GC.\n2) Added MetricsAverage to report average of the given data point.\n3) Changed mutator-paue-time to average, which makes more sense. Also it\nis renamed to world-stop-time.\n4) Added averages of gc-throughputs.\n5) Removed gc-meta-data-size metric as we don\u0027t capture it normally due\nto the high cost of capturing this data.\n\nTest: Observe pitot data\nBug: 191404436\nChange-Id: I9da7f8c588ac4b42414beedb1b4004e0ac4b5fc2\n"
    },
    {
      "commit": "e9a4a6013010b6cc0fb392de24255deacc62c1af",
      "tree": "a0f33b7d069ec2734b11777124c7bf98d71bd59f",
      "parents": [
        "9b4e556fbd3ffc5686306d2cda7b8367dca0fdbe"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 22 16:33:34 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 29 09:50:51 2021 +0000"
      },
      "message": "Transaction support for MethodType in dex cache.\n\nTest: TransactionTest.ResolveMethodType\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --interpreter\nBug: 191765508\nChange-Id: I8c80e29fb84d50ca782d05db1bc4634fc002c726\n"
    },
    {
      "commit": "9060ebe88ee6917bea714d93b522197b4b184267",
      "tree": "fd0cf1f0ad22e93e51ef6edb17e41435955a0664",
      "parents": [
        "5b8eb16cb6476d4e04379fdcfad7ba2c731001ff"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Thu Jun 17 12:57:12 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 28 21:50:07 2021 +0000"
      },
      "message": "Don\u0027t let the oat file close BCP FD passed from outside\n\nBug: 186132447\nTest: odrefresh --use-compilation-os\u003d10 --force-compile\n      # complete successfully with other changes\nTest: TH\nChange-Id: I3393ccd8fdc8ece71dbed8d16ef3c62ba935ea75\n"
    },
    {
      "commit": "55ffe7fa9ead8b501a756bb53f2571e3e7602f5e",
      "tree": "c4f63e30679b3e11d65268e52bf7548416f26792",
      "parents": [
        "8bf1da992a15a79ae76bcf53e9a2909912fbe96a"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jun 14 15:18:54 2021 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jun 28 11:40:15 2021 +0000"
      },
      "message": "Rename some ART gtest related Soong modules.\n\nART gtests currently link with the debug (\"d\") versions of ART\nlibraries. The gtests themselves and their libraries are compiled as\ndebug artifacts. For the sake of consistency, perform the following\nrenaming of ART gtest related Soong modules:\n\n* `libart-compiler-gtest` -\u003e `libartd-compiler-gtest`\n* `libart-dex2oat-gtest`  -\u003e `libartd-dex2oat-gtest`\n* `libart-gtest-defaults` -\u003e `libartd-gtest-defaults`\n* `libart-gtest`          -\u003e `libartd-gtest`\n* `libart-runtime-gtest`  -\u003e `libartd-runtime-gtest`\n* `libartbase-art-gtest`  -\u003e `libartbased-art-gtest`\n\nAs we plan to introduce non-debug (\"non-d\"), standalone versions of\nART gtests in the context of uncoupling ART (target) gtests from the\nART APEX (b/162834439), this renaming will help us, as we\u0027ll be able\nto use the old names of a \"d\" module for the corresponding \"non-d\"\nversion.\n\nTest: mmma art\nTest: Run ART gtests on host and target\nTest: env OVERRIDE_TARGET_FLATTEN_APEX\u003dfalse art/build/apex/runtests.sh\nTest: env OVERRIDE_TARGET_FLATTEN_APEX\u003dtrue  art/build/apex/runtests.sh\nBug: b/162834439\nChange-Id: I4ca27a7f445a760398f41a9e60a7008d77294505\n"
    },
    {
      "commit": "70e126af8a14b68f08acc9acadcdf5b4b0510781",
      "tree": "2b976fe92777e272019405955698868d5690b0e4",
      "parents": [
        "8048e2e34edc8c168d255ef11de2a8e994d5012c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 24 14:51:34 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 25 10:57:07 2021 +0100"
      },
      "message": "Clean up search for field by name and type strings.\n\nReuse the search algorithm introduced for methods in\n    https://android-review.googlesource.com/1744375\ninstead of a separate binary search implementation.\nThe performance difference should be within noise because\nwe\u0027re just replacing one binary search with another one and\nclasses usually contain just one field with a given name.\nTools like proguard can create a class with multiple fields\nwith the same name and different types, but the motivation\nfor this change is code reuse and consistency rather than\npeformance improvement for those edge cases.\n\nAlso call the `FindFieldByNameAndType()` helper directly\nfrom `FindFieldImpl()` to skip unnecessary proxy class\nchecks in `Class::FindDeclaredStaticField()`. This should\nprovide some minor performance improvement.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I436c73c3eb7872f5597bb7b7d3f657aaa0a1ec6d\n"
    },
    {
      "commit": "082659bcbf66c08e2ad9be88363c7ab88c50e114",
      "tree": "65394c78472c90aad96daa1d6b8105760f14bf31",
      "parents": [
        "1776947f896652b232ccec3fc00a04fd7baf1d96"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Thu Jun 24 10:17:39 2021 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Thu Jun 24 22:09:46 2021 +0000"
      },
      "message": "Switch to an assembler macro for CFI_RESTORE_STATE_AND_DEF_CFA.\n\nNewer versions of clang reject multiple assembler directives\non the same line, which breaks the preprocessor macro\nCFI_RESTORE_STATE_AND_DEF_CFA. Fix it by making it an assembler\nmacro instead.\n\nBug: 191980979\nChange-Id: I823ff9c66336931249d2bac40280b24ecdebd0cf\n"
    },
    {
      "commit": "1776947f896652b232ccec3fc00a04fd7baf1d96",
      "tree": "f6820a1b6702fe7b642427d2b3a7eb123511ede5",
      "parents": [
        "e020b7f4afc4d99cddfd52b3587280be9e3afd5d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 23 10:40:29 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 24 16:03:06 2021 +0000"
      },
      "message": "Binary search for method by name string and signature.\n\nStart with a binary search for the name string and when\nsuccessful, compare the signature. On mismatch, repeat the\nsearch with the found name index instead of the name string\nuntil we fail to find the name, have a signature match or\nend up with a method range with the same name index and\nfinish with a simple binary search for the signature.\n\nMake this search sufficiently generic so that the code can\nbe easily reused for fields in the future.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I19b4779c019e9991b6d02ace57e378c029ba1174\n"
    },
    {
      "commit": "e020b7f4afc4d99cddfd52b3587280be9e3afd5d",
      "tree": "12d79582a8ed03b0bbd61bfc57b175e4f50b8e5e",
      "parents": [
        "5fef55677ed3ce5e2255030aa58b8a39cf77fab1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 24 12:07:35 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 24 16:02:45 2021 +0000"
      },
      "message": "Faster BCP checksum verification.\n\nAvoid opening dex files for updatable BCP components.\nJust collect the checksums from jar files using the\n`DexFileLoader::GetMultiDexChecksums()` API.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 191828947\nChange-Id: Ib737fabc832c56bffef8a98382f689aabe588bd2\n"
    },
    {
      "commit": "5fef55677ed3ce5e2255030aa58b8a39cf77fab1",
      "tree": "feb27e131521d1a911e08174ebc933635939423d",
      "parents": [
        "30bb6af110e0999a87c6e9fd0145fdd4a59e98d8"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Mon Jun 21 23:33:33 2021 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Thu Jun 24 11:19:37 2021 +0000"
      },
      "message": "Clean up ART APEX manifests.\n\nmanifest-art.json: Rely on the build system to populate all required\nlibs. Besides some duplicate entries, this drops libicuuc.so,\nlibicui18n.so, and libneuralnetworks.so from the required list. None of\nthose libraries are dependencies of the ART module itself, and hence\ndon\u0027t get loaded from the ART namespace. They used to be necessary\nbefore linkerconfig supported creating links for JNI libs and from\npublic.libraries.txt, and when libnativeloader still defaulted to the\nART namespace for loading such libs.\n\ntest_apex_manifest.json: Used by test_com.android.art and should be\nidentical to manifest-art.json except for the version number. Besides\nthe above, this file contained several stale libraries.\n\nAlso try to configure proper runtime_libs dependencies for libart(d)\nfor the things it dlopen\u0027s from the ART namespace, although most\nlibraries cannot be listed there for various reasons.\n\nTest: m droid deapexer\n      deapexer info \\\n        out/target/product/vsoc_x86_64/system/apex/com.android.art.capex\n  Compare the output before and after this CL.\nTest: m test_com.android.art deapexer\n      deapexer info \\\n        out/target/product/vsoc_x86_64/obj/ETC/test_com.android.art_intermediates/test_com.android.art.apex\n  Compare the output before and after this CL.\nBug: 184148353\nChange-Id: I0d9c2a090702a95551208aad4be97ea867004a3c\n"
    },
    {
      "commit": "f5958f8881e299c42ac923e4751f8f34d72db7f0",
      "tree": "db15e90ad9152c5cbd9515209841c7e71764a67f",
      "parents": [
        "1282f3805b1b6f50761f3e136d569e85dbda7090"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 02 14:48:14 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 24 07:54:05 2021 +0000"
      },
      "message": "Add x86 implementation for nterp.\n\nBug: 112676029\nTest: test.py, run-libcore-tests, run-libjdwp-tests\nChange-Id: I06bd2c9dde6834f371f042fadda2ced23e02b7ed\n"
    },
    {
      "commit": "1282f3805b1b6f50761f3e136d569e85dbda7090",
      "tree": "eaf74fab46eb96d51e327676e734a139afbe5fef",
      "parents": [
        "7f0473851d9a8d5644fde8c483390a985c238433"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jun 21 20:22:12 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 23 19:22:50 2021 +0000"
      },
      "message": "Add sampling support in the metrics reporter\n\nThe sample rate percentage can be configured via 2 runtime\nflags (MetricsReportingMods and MetricsReportingNumMods).\n\nA runtime session will report metrics if and only if its\nsession id % MetricsReportingNumMods \u003c MetricsReportingMods.\n\nA value of 0 on the mods will effectively disable reporting,\nwhile configuring MetricsReportingMods to be equal to the\nMetricsReportingNumMods will enable reporting in all cases.\n\nTest: gtest\nBug: 170149255\nChange-Id: Ie1353e4fc0ff695fc627696145d95e9ccd3c6a94\n"
    },
    {
      "commit": "7f0473851d9a8d5644fde8c483390a985c238433",
      "tree": "c2aa685e339d731ffcd5b29ccef16c1d2611adb9",
      "parents": [
        "6c30777a278d24e1a4c3226405416a85e6523d3f"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Thu Jun 17 16:28:46 2021 -0700"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Jun 23 17:18:33 2021 +0000"
      },
      "message": "[metrics] Add GC-work throughput metrics\n\nTrack work done (bytes processed) per second by the GC.\n\nSome other minor changes:\n1) Adjusted ConcurrentCopying class member\u0027s order to make access to\nthem more cache-access friendly. Counters accessed by GC-thread should\nnot be in the same cacheline as the one containing counters meant for\nmutators, if either of the two modify those counters.\n2) Increased max to 10\u0027000 for throughput histograms in case\nthe throughput is \u003e GB/s\n\nBug: 191404436\nTest: manual\nChange-Id: Iefaf1106690b6bae670a3a917f61194b3fcacfe0\n"
    },
    {
      "commit": "df0db3b60895184d164812fc1072957aa763f527",
      "tree": "f8de32e6e29ee8bca954fcaa6dd1e6fcab5299df",
      "parents": [
        "a5082496431781271a0b363a567e6de793c3ec0c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 22 10:53:06 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 23 13:40:20 2021 +0000"
      },
      "message": "Allow creating MethodType inside a transaction.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 188889082\nChange-Id: Ib7e0f431e968ee2ca75e09e84b9a8e1b6e29674e\n"
    },
    {
      "commit": "ec11cf1e4a7400af1befae3a5194206f16a58047",
      "tree": "613b1e67a1b8b28209a8e893374eb93d50d1a3b0",
      "parents": [
        "9b8d8198236b73489a28f46a1b62220da471c4b2"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jun 17 15:41:08 2021 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jun 23 02:28:17 2021 +0000"
      },
      "message": "Add period reporting to the metrics infra\n\nThe metric reporting can now be condifured to report at\ndifferent periods, according to a predefined spec.\n\nThe period spec is given as a string (e.g. \"S,1,2,4,8,*\")\nand can specify:\n  - startup reporting\n  - fixed period reporting\n  - continuous reporting\n\nFor example \"S,1,2,4,*\" means that we will report at\nstartup, then after 1 seconds, then after 2 and 4,\nand finally, that we will continue to report every other 4s.\n\nThe specs for system server and the apps are given by different\nflags, so that we can have different reporting configurations\nfor each.\n\nAlso, this CL adds much more robust testing to the metrics\nreporter, something that was missing before.\n\nTest: gtest\nBug: 170149255\n\nChange-Id: Ifbe32b3877d2e1cdf43d30b67672f6ebfb42dadf\n"
    },
    {
      "commit": "d9696b79c886b9a23b4a77063fac4a3e03e0406d",
      "tree": "9a850d015fcaca721e9309b777f2775202ae3672",
      "parents": [
        "59edf4b8f09d02c10fa87831573151c6b99c3149"
      ],
      "author": {
        "name": "Stelios Ioannou",
        "email": "stelios.ioannou@linaro.org",
        "time": "Mon Jun 14 15:49:26 2021 +0100"
      },
      "committer": {
        "name": "Stelios Ioannou",
        "email": "stelios.ioannou@linaro.org",
        "time": "Tue Jun 22 10:04:04 2021 +0100"
      },
      "message": "ART: Fix for no-opt debug (-O0) builds\n\nCurrently, the build process of debug builds with no optimization fails\ndue to missing symbol definitions.\n\nFor example, it throws errors like the following one:\n\nld.lld: error:\nundefined symbol:\nart::gc::collector::MarkSweep::MarkStackTask\u003cfalse\u003e::kMaxSize\n\nThis patch changes the missing symbols from constants to constant\nexpressions as a way to fix those issues. The optimized builds\nget away with this issue because the values are optimized\nto be inlined and not referenced.\n\nThe code at https://godbolt.org/z/3oYKoPzGj depicts similar\nbehaviour. Additionally, there are comments describing why\nthis issue occurs.\n\nTest: ART_DEBUG_OPT_FLAG\u003d\"-O0\" art/tools/buildbot-build.sh --host\n\nChange-Id: I66b5cfc885dfdfc82e3e4008b1e40fd68c19c999\n"
    },
    {
      "commit": "1ff9056b87705e251501ea4d19280a7e4fe2d009",
      "tree": "aefef09122429a3960d810033443c461f73b5023",
      "parents": [
        "c893d1597b2e653659e0bc73cc2640590d01e8b0"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jun 16 14:37:42 2021 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jun 21 14:27:16 2021 +0000"
      },
      "message": "Move metric reporting config to flags\n\nThis will enable us to enable periodic reporting according\nto the properties set in the device config.\n\nAs part of this CL, enable cmdline only flags for thing that\ndo not make sense to read from system properties.\n\nTest: gtest\nBug: 170149255\n\nChange-Id: I99bae25d89cf3a17906b4d3c671e5c63e9a3c180\n"
    },
    {
      "commit": "4ef36490afb1cfa6a29442c8d76938ec9fd9b9dc",
      "tree": "6c704a77c182cdca46e210f05c539c4723123056",
      "parents": [
        "d5abbb91247742d2bd8c4fc0adf60ad0512c0dfe"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 16 17:26:51 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 21 12:05:56 2021 +0000"
      },
      "message": "Fix missing nterp initializing when loading a class.\n\nFor instance methods, we were not setting the nterp entrypoint.\n\nTest: test.py\nChange-Id: If3c5e0d30120e50b98340e11ca576de219741990\n"
    },
    {
      "commit": "869746ef31936f09a93717ee1ef3960f8fb6dd69",
      "tree": "b7c534bc792b8128ee6d53089692e6b5477482c0",
      "parents": [
        "f5690ca22446968e6c28ebb06b1d7451e02e203d"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Jun 14 14:13:14 2021 -0700"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jun 17 08:22:41 2021 +0000"
      },
      "message": "runtime: fix potential NULL dereferences\n\nif `found` or `ret` isn\u0027t found, one or both of them may be NULL. hence,\nwe shouldn\u0027t be unconditionally calling `-\u003ePrettyField()` here.\n\nBug: None\nTest: TreeHugger\nChange-Id: Ia40dd0e726d04945d3dedf5c2beb6dd2cff84c21\n"
    },
    {
      "commit": "f5690ca22446968e6c28ebb06b1d7451e02e203d",
      "tree": "1c52e247ff3a115cb0992d921df0229bcaca6b44",
      "parents": [
        "b3a4e01448a32b2dc53cad8a981ed7c75d12d2cc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 16 14:27:34 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 16 16:57:28 2021 +0000"
      },
      "message": "Reject a vdex file if its dex contents are out of date.\n\nThis will make sure the runtime doesn\u0027t think the APK optimization state\nis \"verify\", when at runtime we\u0027ll actually run from the APK\n\nTest: m\nBug: 191245631\nChange-Id: I46e056e52d1f7ff4a4ec8d952f325c54d9efad8f\n"
    },
    {
      "commit": "f667c33fc88356aa80d455430752719aaae57717",
      "tree": "ab752c06377a4db0855b307f8d9b806065820794",
      "parents": [
        "319333f6ea3408b8c99bd9c644f0f34b66fe31b8"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Thu May 27 11:35:44 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 16 16:52:52 2021 +0000"
      },
      "message": "Avoid opening BCP jars if the corresponding FDs exist\n\nWith -Xbootclasspathfds, we already have the FD available in the\nruntime. When loading a BCP oat, it also needs to check the\ncorresponding BCP jar. When the jar\u0027s FD is available, this change\navoids the open by path.\n\nBug: 187327262\nTest: odrefresh --force-compile  # success\nTest: strace  # no more open for such case\n\nChange-Id: I8c488254d9bf923a2e181f578c9ed167cd75335c\n"
    },
    {
      "commit": "ecaf7d1657d8e92697775d3979ff42c59e5cfc89",
      "tree": "e6bd3743161e513234b08cecf78531e2fe6ec372",
      "parents": [
        "7f21ebe84b726081874cd2bd3fc8dd1ea39aa2d8"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Mon Jun 14 11:09:21 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jun 15 16:17:49 2021 +0000"
      },
      "message": "Fix double close in dex2oat when BCP is passed as FDs\n\nBug: 191052821\nTest: Modify odrefresh to pass BCP as FDs to dex2oat. Run w/ --force-compile.\n      # With thix fix, no longer seeing \"fdsan: double-close of file\n      descriptor 24 detected\"\n\nChange-Id: Iac09b06c8e7aa93114896632cdea6c610662455b\n"
    },
    {
      "commit": "0886d4e7e0243a02c081d6015de88e10f7eb79f5",
      "tree": "7ccd33cabb120ee814001975e8469cdd5cfe5bc9",
      "parents": [
        "40261171630159bfd46043c996be8521c453fee1"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jun 14 17:59:42 2021 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jun 15 09:41:47 2021 +0000"
      },
      "message": "Revert \"Enable strict gcstress unwind checks.\"\n\nThis reverts commit 022f9e555bbad95b3e8699731ca5455151dfca8a.\n\nReason for revert: Strict unwind checks are breaking ART run-test\n`1963-add-to-dex-classloader-in-memory` in gcstress mode; disable\nthem until a proper fix is found for this test failure.\n\nTest: Run `1963-add-to-dex-classloader-in-memory` with gcstress\nBug: 190805741\nChange-Id: Ic9afab0e5f8571c75c8bde8270a7655a6343c35e\n"
    },
    {
      "commit": "40261171630159bfd46043c996be8521c453fee1",
      "tree": "3cae9dfcfd5f745b61da630d031eff4f67fe9185",
      "parents": [
        "af5d304844cd8e39fcc31ca4e07e3e887d2f0bd9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 14 10:59:51 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 14 17:55:51 2021 +0000"
      },
      "message": "Rewrite static/instance field search by index.\n\nThe old search was looking for a field with the given field\nindex in the class as well as superclasses and, for static\nfields, all interfaces. This was useless as as a field index\ncan match only in the declaring class. So, if the field was\nnot found in the declaring class we would have unnecessarily\nsearched wrong classes before resorting to string search.\n\nReuse the optimized `Class::FindField` by turning it into\na template implementation that can skip unnecessary static\nor instance field searches. Implementing the static and\ninstance field search this way allows ClassLinker to call\nonly one overload of `Class::Find{Static,Instance}Field`\nand helps avoid string searches in more cases.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --interpreter\nBug: 181943478\nChange-Id: I23309c87c3702d98812adfec0279c483c9037f2c\n"
    },
    {
      "commit": "b10668cb6a34398eb720f9a6305ff9a51b3ebfd4",
      "tree": "ab155a0ae3c2966c20a3de68dbf53e6fe2ced86a",
      "parents": [
        "893e2edbd5aa14ab2ccb1800ccd3154f21a2d8a7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 10 09:52:53 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 14 12:51:59 2021 +0000"
      },
      "message": "Clean up Class::GetDirectInterface().\n\nFetch array interfaces from the `IfTable`. This removes the\nonly use of the `Thread* self` argument, so we can remove\nthat argument. We also make the function non-static to avoid\nthe explicit `klass` argument. Similarly clean up arguments\nof `Class::FindClass()` and `Class::FindStaticClass()`.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: Id639b675b4eb331a777cf318eb61bd19e05de4f0\n"
    },
    {
      "commit": "a09d8b7d4cb6f35f12f2bd2ed4e04a0eb129eeea",
      "tree": "79587d30dda7acb00545333067596dfcfa11bdb6",
      "parents": [
        "e300c4e4eabe3388b730efe35561e54f1c306710"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Mon May 24 14:21:55 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jun 10 15:22:02 2021 +0000"
      },
      "message": "Add runtime option -Xbootclasspathfds: for pre-opened fds\n\nThe new option allows the client to pass a pre-opened fds to the\nruntime. The number of elements must match the number of BCP jars\nspecified in -Xbootclasspath. An fd of negative number is a valid\noption, in such case the runtime will still open the jar in the\ncorresponding path in -Xbootclasspath.\n\nExample: -Xbootclasspathfds:10:11:-1:12\n\nThe option is currently only used in \"unstarted runtime\", but will also\nbe used elsewhere in the follow-up changes.\n\nBug: 187327262\nTest: patch odrefresh to use the option, no longer seeing such openat(2)\nTest: m test-art-host-gtest\n\nChange-Id: I1bebbd80136419c03ac1309a8cb8229a0fd69838\n"
    },
    {
      "commit": "e300c4e4eabe3388b730efe35561e54f1c306710",
      "tree": "1866d5772e2c3643f30aa32b7bf0c02cec2e4c18",
      "parents": [
        "f761f5887918375b842e4cc62ed9cbe7521c8444"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 08 16:00:05 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 10 13:47:14 2021 +0000"
      },
      "message": "Faster Class::FindField().\n\nChange `Class::FindField()` to take dex cache and type index\narguments instead of strings and optimize it similarly to\n`Class::FindClassMethod()`, namely search by indexes when\npossible (except when searching interfaces where we only add\na TODO comment for now) and avoid `strlen()` calls for ASCII\nnames and type descriptors.\n\nUpdate `ClassLinker::FindResolvedFieldJLS()` to pass the new\narguments and replace all other `Class::FindField()` calls\nwith more direct calls as we know the classes where those\nfields are defined.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: Iba798819043eb1b53b0dbc41ef8d7fd1c5d2164d\n"
    },
    {
      "commit": "094b1cfc9fa9e1c02238a2352c190be1746f5622",
      "tree": "2ce218587228aafd5cdaf3bd17ee2cecde484957",
      "parents": [
        "4f6bb446f8fbaa192f4e5b69734414c66d5e1bae"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jun 08 09:28:28 2021 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 09 11:34:22 2021 +0000"
      },
      "message": "odrefresh: enable loading of system_server image files\n\nFix check in ValidateBootImageChecksum() to account for image files\nwith multiple components which exists for boot-framework when\ncompiling on device.\n\nUpdate logic for only_load_system_executable to be\nonly_load_trusted_executable and treat /system and the ART APEX data\ndirectory as trusted.\n\nAdd test to check .art,.odex,.vdex files derived from the\nsystem_server classpath are mapped when the ART module updates.\n\nAdd test to check .art,.oat,.vdex files for the boot class path\nextensions are present in the zygote processes.\n\nBug: 180949581\nTest: atest com.android.tests.odsign.OnDeviceSigningHostTest#verifyGeneratedArtifactsLoaded\nChange-Id: I3114fc6393402d8da2eb16ba756ab5fab713dc20\n"
    },
    {
      "commit": "4f6bb446f8fbaa192f4e5b69734414c66d5e1bae",
      "tree": "c07c8cf278137c14fda476ed682968ee3c01c65f",
      "parents": [
        "beb9f2012587035a5c30d0eca8af458b2ad659b7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 02 18:05:51 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 09 11:03:12 2021 +0000"
      },
      "message": "Remove palette hooks.\n\nMake the method be part of the official palette API.\n\nBug: 186016399\nBug: 185778652\nChange-Id: I3dc9e879c647fd63f5826091813613fd97e25c0d\n"
    },
    {
      "commit": "beb9f2012587035a5c30d0eca8af458b2ad659b7",
      "tree": "ebc2509c9d3250d47e6e54c2c67f2f4bce74c80b",
      "parents": [
        "f31b75b2b80154112835c25bb0a21196453ac71a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jun 02 14:42:03 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jun 08 20:58:43 2021 +0000"
      },
      "message": "Consider the size of the reference profile when assessing IsFirstSave\n\nThis makes the detection logic for the first profile save much more\nprecise. It prevents the case where we would return true if\nthe data was already moved from the current profile to the reference\nprofile.\n\nAt the same time, rework part of the logic for early save. The checks\nneeded to be moved earlier to encompass the startup class resolution.\n\nTest: run-test \u0026 manual\nadb shell stop;\nadb shell setprop dalvik.vm.ps-min-save-period-ms 300;\nadb shell setprop dalvik.vm.extra-opts -verbose:profiler;\nadb shell start;\nadb shell cmd package compile com.android.systemui -r bg-dexopt\nrestart \u0026 check\n\nBug: 185979271\nChange-Id: Icfec30c6f49c8e03b03ff4bcbc2b869393fdcbfe\n"
    },
    {
      "commit": "4573be38b0fb938c1177b8aa474e980c64ab5587",
      "tree": "ac2a02e6e40c60c7b6bede1c863f376882deb594",
      "parents": [
        "b89e731029b61d66aa8c44f188bce48ec59a733e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 07 11:07:05 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 08 14:34:40 2021 +0000"
      },
      "message": "Faster Class::FindClassMethod().\n\nAvoid using `strlen()` on ASCII strings from DexFile.\nThis was a missed opportunity in\n    https://android-review.googlesource.com/963405 .\n\nAlso optimize iteration over declared methods of a class.\nLoad the dex file before the loop and avoid the runtime\nmethod check in `ArtMethod::GetMethodNameView()` by using\nthe `DexFile` interface directly.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I1ce3659b7f1fbcfc11d52626f9feb9be666d1161\n"
    },
    {
      "commit": "977abde30ffe7a8c9a108498468f00b279191497",
      "tree": "90f4f97e939609f6835b09d19cb14f5e434c0d9b",
      "parents": [
        "9ed2427971bcaf439afd12b8a1ec375ea78edd2b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 07 14:29:05 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 08 11:21:26 2021 +0000"
      },
      "message": "Move code around in x86 assembly files.\n\nSo nterp x86 can use the helpers.\n\nTest: m\nBug: 112676029\nChange-Id: I570847e3e5ee0b49e951e05a118f8f4ec8753352\n"
    },
    {
      "commit": "04c9f3a978f3e219e7d407f08f4063b3fbb53907",
      "tree": "5360195b36cb3d2976fd1601b23441e534c6aac5",
      "parents": [
        "1e7faf706563593de8e9d47bb5ef366f68dce1a2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 04 09:51:28 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 07 08:09:55 2021 +0000"
      },
      "message": "x86: Don\u0027t use the GOT to access art::Runtime::instance_.\n\nAnd also get the address of art_quick_instrumentation_exit\nwithout going through GOT.\n\nBecause ART is built with -fvisibility\u003dprotected, the\nlocation of these symbols can be statically resolved by the\nlinker, so there is no need to go via the GOT.\n\nAlso rewrite macros to avoid the __x86.get_pc_thunk.bx and\nuse a local `call +0` instead.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --32 --optimizing --interpreter\nBug: 112676029\nChange-Id: Ib63aa71518ab7c015626a99a0bbfc587032f4a76\n"
    }
  ],
  "next": "1e7faf706563593de8e9d47bb5ef366f68dce1a2"
}
