)]}'
{
  "log": [
    {
      "commit": "d93e374e273dd45f5d829399da1d4201bf46057e",
      "tree": "280dc72b2aec4696bbc35ad39ca8d3479107380e",
      "parents": [
        "7f7f9d3991f3a55da8934a3b72890d4776373598"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 18 10:58:13 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 19 16:04:38 2018 +0100"
      },
      "message": "ObjPtr\u003c\u003e-ify ArtMethod and mirror::Method.\n\nAnd clean up some forgotten things after old CLs.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I8af0e845c24d674d0efab21d80c29949b1cc0593\n"
    },
    {
      "commit": "8ad7a3b4f7875546f471f8955967da17c9728a00",
      "tree": "2a5dbaf6752357b537fe956ec18f09ab3d8ee79f",
      "parents": [
        "d20a4d76c33cd6e609ad6b1b3cde09fdcbdde05c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon May 22 16:08:52 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 28 14:33:23 2018 -0700"
      },
      "message": "ART: Improve Constructor.newInstance\n\nSpecial-case InvokeMethod to be constructor-specific so as to avoid\nunnecessary and duplicate checks. Refactor for some code sharing.\n\nReduces Constructor.newInstance for Integer by approximately 15%\n(ten runs of 10000000 invocations, reporting mean per invocation,\nhost x86-64 optimizing, perf stat numbers are for complete run\nand do not exclude, for example, setup and prologue GC):\n\n                   Before      After\n\n(perf stat)\nInstructions       2503.4      2149.8\nBranches           450.8       384.4\nBranch-misses      1.83        0.85\n\n(time)\nTime (ns)          335.17      278.58\n\nBug: 20269715\nTest: mmma art\nTest: m test-art-host\nChange-Id: Id105e542a19d72efaace60ad39fcef5e42dde006\n"
    },
    {
      "commit": "a9746b90635f26ebc2340f01e6d3da7700593dbc",
      "tree": "4d391782c8805a22500bd8306fe8a90d16d6702f",
      "parents": [
        "cca7cb9ffa56d8ab8fd0c5997c8bfd965d7426c1"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 22 10:25:40 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 25 08:34:54 2018 -0700"
      },
      "message": "Refactor Object CAS with and without write barrier\n\nRemoves duplicated logic.\n\nTest: test-art-host\n\nChange-Id: I1f5df417c59312f224e0a448c7bd6358912bba07\n"
    },
    {
      "commit": "42c2e503f0fe3c6ffb6eb851efd4bcb27e4189d5",
      "tree": "d17d9b8dfc17d7a00eeaf992fcd779d3a394d387",
      "parents": [
        "d8d3adcb2ab08725fcb9477887fb462748a4c6bf"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 19 12:30:56 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 19 12:37:55 2018 -0700"
      },
      "message": "Refactor CasField32\n\nRemove excessive copy paste and add arguments to cover different\ntypes of CAS operations.\n\nTest: test-art-host\n\nChange-Id: I3f58a5f84156aa0491b9e5145f3891f16217e05c\n"
    },
    {
      "commit": "6ed28cb9e6a79230d567dbadc0e0e278943b93d1",
      "tree": "c5e07041722cf9ab3bfb1879691ca072bb670950",
      "parents": [
        "3f89c2ddca49ee28f738055e2856ad9fdc92b956",
        "1f1cb9f2f0945dbcf6b79d0795b035233dfd9131"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 04 21:25:15 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 04 21:25:15 2018 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Move runtime/ to ClassAccessor\"\"\""
    },
    {
      "commit": "1f1cb9f2f0945dbcf6b79d0795b035233dfd9131",
      "tree": "fc5f72ef884e0eaa92f515a90cfd997b0938208a",
      "parents": [
        "9ddef18ae95859a985e7a0de7e22999fcbc28e07"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 04 09:22:46 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 04 20:41:12 2018 +0000"
      },
      "message": "Revert \"Revert \"Move runtime/ to ClassAccessor\"\"\n\nFixed misplaced UnhideAccessFlags to be outside of a conditional\nthat the code item is null / not deduped. This fixes an issue\nwhere these methods would not have had their access flags restored.\n\nBug: 77709234\nBug: 79758018\nBug: 91962648\n\nThis reverts commit cc7e20f9ec7b4a7a57f7196e5e8be67a727f21d3.\n\nTest: test-art-host\nTest: atest FrameworksUiServicesTests\nTest: atest CtsInlineMockingTestCases\n\nChange-Id: I7e5712cdcccef81e19ce81d26743c517b0b8a67d\n"
    },
    {
      "commit": "3f89c2ddca49ee28f738055e2856ad9fdc92b956",
      "tree": "d652798cab0573be44e699a9f17c07434e610945",
      "parents": [
        "37ee471e8245f8ab643cb123cbb59a475d16a14d",
        "03004e66495ba4dff81c1d49522b79e95a829af7"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 04 19:49:54 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 04 19:49:54 2018 +0000"
      },
      "message": "Merge \"Remove unused native implementation of Object.wait()\""
    },
    {
      "commit": "18090d118bfb04620aeef719e2d7780c26298bf8",
      "tree": "040e5195f0278c9bc846d5543c0e36771ffc5b48",
      "parents": [
        "9ddef18ae95859a985e7a0de7e22999fcbc28e07"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 01 16:53:12 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 04 17:52:35 2018 +0100"
      },
      "message": "Refactor String resolution.\n\nUse the same pattern as type resolution and avoid some\nunnecessary read barriers in the fast path. Consolidate\nnaming between ArtField and ArtMethod.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nChange-Id: Iea69129085f61f04a4add09edd0eadbb7ac9ecb2\n"
    },
    {
      "commit": "03004e66495ba4dff81c1d49522b79e95a829af7",
      "tree": "b50797c42e9555ca04a131aeaca77657c86e64d0",
      "parents": [
        "5816d63bca0a4e0522e06e044e516cdc32993c39"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Wed May 23 11:52:10 2018 +0100"
      },
      "committer": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Mon Jun 04 16:14:54 2018 +0100"
      },
      "message": "Remove unused native implementation of Object.wait()\n\nAs part of the process of verifying Java files against 8u121-b13 the\nObject.wait() method has been changed from a native method to a pure\nJava implementation. This removes the unused native implementation\nmethod and the supporting method in mirror::Object.\n\nUpdated the 911-get-stack-trace test to handle the two extra stack\nelements added by this change.\n\nBug: 74379469\nTest: make checkbuild, flash\nChange-Id: Ifbc4612f7d949416d8c703628fa8cafaa296c350\n"
    },
    {
      "commit": "bcf175247272d0e321c8d988c3c01c123b56e36e",
      "tree": "9f65ece5ce9474aa4fcf16fbfca6278109dc9a67",
      "parents": [
        "09c5ca40635faee00f40f6ca0581dd475efd545e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 01 13:14:32 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 01 16:31:30 2018 +0100"
      },
      "message": "ObjPtr\u003c\u003e-ify array allocations.\n\nAnd remove some unnecessary calls to ObjPtr\u003c\u003e::Ptr().\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: Ie313980f7f23b33b0ccea4fa8d5131d643c59080\n"
    },
    {
      "commit": "a8bba7d0853b372aea3ed3ea154fb2b2a23c2c9d",
      "tree": "973a89870e0cc8912401503ebab1b709a9df5ba0",
      "parents": [
        "65e463cf7ea91003ef030c8a819ae4596c9b820f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 30 15:18:48 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 31 09:48:59 2018 +0100"
      },
      "message": "ObjPtr\u003c\u003e-ify ClassLinker::FindClass(), fix 1 stale reference use.\n\nThread::CreateAnnotatedStackTrace() was using a stale\nreference `aste_array_class`.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I191907c0053456bb57de425aa6ccd9668df818a2\n"
    },
    {
      "commit": "750cf88c8872983ae13259131cb2ed377e3eadff",
      "tree": "b0e35537e6ea4639e22f3467225be7b331818b86",
      "parents": [
        "08f1973a345d78a9336b7ce2bf1df82f1c2515db",
        "5924a4a73f1a2dcf83877062d67c297a9496b326"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 30 13:39:39 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 30 13:39:39 2018 +0000"
      },
      "message": "Merge changes I51c462c0,If8674fc7\n\n* changes:\n  Move String::SizeOf\u003c\u003e to string.h .\n  ObjPtr\u003c\u003e-ify RegTypeCache, fix 1 stale reference use.\n"
    },
    {
      "commit": "5924a4a73f1a2dcf83877062d67c297a9496b326",
      "tree": "3517a1809ecbdc85533e1a8c5a0a9610cdc36005",
      "parents": [
        "2cffc5d2807096c0b7a07b89f5dda6920c6429f5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 29 17:40:41 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 30 12:50:37 2018 +0100"
      },
      "message": "Move String::SizeOf\u003c\u003e to string.h .\n\nstring.h was already indirectly (through class.h) including\neverything needed for String::SizeOf\u003c\u003e, so move it to the\nstring.h and make those includes direct. Then we can change\nthe object-inl.h to include only string.h, reducing the\nnumber of indirectly included files.\n\nTest: m test-art-host-gtest\nTest: m testrunner.py --host --optimizing\nChange-Id: I51c462c034f205498c539abe6d888be9738d4a6e\n"
    },
    {
      "commit": "4eb6fa0e22cc90419bb099f676fdd413e2c9b94e",
      "tree": "3a334847d8eb87566713ab28e785bee67b8c1709",
      "parents": [
        "aab8bc928a8eff425d5e5755fde75b1cb55998a9",
        "a4f1f6e7ea1066a0ee3a2d99eb0b2bd90474bf04"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Tue May 29 09:54:45 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 29 09:54:45 2018 +0000"
      },
      "message": "Merge \"Rename nativeHoldsLock to holdsLock and make it work on current thread\""
    },
    {
      "commit": "a4f1f6e7ea1066a0ee3a2d99eb0b2bd90474bf04",
      "tree": "0125fa45d7ddad139eef5f8ed53f0bfc2fec118c",
      "parents": [
        "8a9fccc34fc05041c754f025ad5a1109b84adddb"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Fri May 25 16:10:02 2018 +0100"
      },
      "committer": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Fri May 25 16:10:02 2018 +0100"
      },
      "message": "Rename nativeHoldsLock to holdsLock and make it work on current thread\n\nThe Java native method nativeHoldsLock has been renamed to match the\nupstream OpenJDK 8u121-b13 and changed from an instance method on Thread\nto a static method.\n\nThis makes the corresponding change to the native implementation of that\nmethod.\n\nTest: make checkbuild, flash, CtsLibcoreTestCases\nBug: 74379469\nChange-Id: Ib9dedccd3014c01c148ff824764be319c2a7a123\n"
    },
    {
      "commit": "679730e6c4be680b3e72b55a4200de9590641009",
      "tree": "ca7d0719aed00457a2c898cf2dc56300956ea875",
      "parents": [
        "6834d3414308e3d536bc685dbb3d60fe70186f23"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 25 15:06:48 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 25 15:06:48 2018 +0100"
      },
      "message": "Remove static GcRoot\u003c\u003es from Field, Method, Constructor.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I648b88339995761fb81180286ef48a42bbd2f83d\n"
    },
    {
      "commit": "c7aa87e1666ac48ddf9149cfdfd64b026b3969e5",
      "tree": "32d5d74718cc558e13642873e55724782ac9df22",
      "parents": [
        "0278be74269fcfe4f2517d449f2bd53472f9b2f9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 24 15:19:52 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 25 11:37:45 2018 +0100"
      },
      "message": "Remove static_class_ from Method/VarHandle and CallSite.\n\nAnd add MethodHandle to the class roots to avoid extra\nindirection through MethodHandleImpl.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: Iaf172f3732677f2b4509e8297e6e9af5fb81a89f\n"
    },
    {
      "commit": "2d3065e6ca0bd707bc998b7d260bb8e8ec07cf87",
      "tree": "2b1361fb8c0d860e735858d41a7be6b7699a576a",
      "parents": [
        "3eb68cf6c05e8c015f0da2c50e7e720976702e63"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 22 13:56:09 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 22 14:54:45 2018 +0100"
      },
      "message": "ObjPtr\u003c\u003e-ify annotation processing.\n\nTest: Rely on TreeHugger.\nBug: 31113334\nChange-Id: Ifd69c15c0df1530d8860cf50e06bde0d356b0c23\n"
    },
    {
      "commit": "eef7757941f2681814462b0f55d29a562c0200da",
      "tree": "647d552b640745f6ca101bee382866fc0aeedae6",
      "parents": [
        "9c422cc4ef2f1825c60a43a1e8d770f270b076e7"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Fri May 18 13:32:09 2018 +0100"
      },
      "committer": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Fri May 18 13:32:37 2018 +0100"
      },
      "message": "Fix test 674-hiddenapi when debuggable.\n\nThe runtime warns for debuggable apps even when access to an API is\nallowed. Update the expectations of this test accordingly.\n\nThis requires exposing Runtime::IsJavaDebuggable to the java code so\nit knows what to expect.\n\nTest: $ art/test.py -b --host --debuggable -t 674-hiddenapi\nBug: 79914966\nChange-Id: I339f205d7153cf7b1c12dc06813c768608921684\n"
    },
    {
      "commit": "c5b7564fdc187853d1f8266a54316ef402f83e02",
      "tree": "b0aeab247ceeef6ffa262c70251559643b4c2f0d",
      "parents": [
        "a7d37cf735f05cfc3a3585a5c44eb65d8a279874"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 16 15:12:11 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 16 15:14:22 2018 -0700"
      },
      "message": "ART: Fix jvalue includes\n\nJValue::SetL is defined in the -inl header. Fix up some clients.\n\nTest: mmma art\nChange-Id: I903532c767873847f7746680cf35083cb3408ecf\n"
    },
    {
      "commit": "57b1bcd19934b447eda315dc1b612ab91a87b2fd",
      "tree": "e9b5fd3eaad213d76e4f621211fd49e09f41bed2",
      "parents": [
        "5e046f87f22768735ef926ef06898027fe22528d",
        "59a49a6fe102b26aacda906b6a2c466d84819c73"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu May 10 15:46:56 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 10 15:46:56 2018 +0000"
      },
      "message": "Merge \"Implement VMDebug API to mark a class \"platform\"\""
    },
    {
      "commit": "5e046f87f22768735ef926ef06898027fe22528d",
      "tree": "56433620398929c5bda3ffa93dd346a6399b4345",
      "parents": [
        "922ba7ea0d3ffd3a5403e4d6193cec5151b2474d",
        "35a4f486cb0a2a600a4ea346b4615ad0ea189dc2"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu May 10 15:46:56 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 10 15:46:56 2018 +0000"
      },
      "message": "Merge \"Add support for loading trusted dex files.\""
    },
    {
      "commit": "59a49a6fe102b26aacda906b6a2c466d84819c73",
      "tree": "f33b21de298b1943ae3483ba877cdbf50313e049",
      "parents": [
        "48af3b39cd7c8abaa7f9671191ec8260630239b2"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed May 09 10:58:27 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu May 10 12:38:11 2018 +0100"
      },
      "message": "Implement VMDebug API to mark a class \"platform\"\n\nAdd a native implementation of VMDebug.allowHiddenApiReflectionFrom\nwhich takes a Class object and sets a new access flag\nkAccSkipAccessChecks on the corresponding mirror::Class instance.\n\nThe function will throw a SecurityException if the process has not\nbeen forked as Java debuggable.\n\nhiddenapi::IsCallerInPlatformDex is extended to take an optional\nargument of the mirror::Class of the caller. If it is set and\nthe class has kAccSkipAccessChecks, the caller is allowed to\nacccess non-SDK APIs.\n\nNote that the mirror::Class of the caller is only provided for\nreflection and JNI. The access flag is ignored for other means of\naccess.\n\nBug: 64382372\nTest: N/A\nChange-Id: I2bf0ca7dcb45c17fe91eb2d421c947b892bd6fec\n"
    },
    {
      "commit": "35a4f486cb0a2a600a4ea346b4615ad0ea189dc2",
      "tree": "70ede18189598146e1419f8fc52b85fd09e8ed4c",
      "parents": [
        "abd9e1515bc6be88372c61071971c5432a51553d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 09 14:49:54 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 10 12:29:10 2018 +0100"
      },
      "message": "Add support for loading trusted dex files.\n\nWhich can use hidden APIs.\n\nbug: 64382372\nTest: m\nChange-Id: Ifd40b49270c11ad51281b2127532952fb5206a9d\n"
    },
    {
      "commit": "016fcbe2d24a99b688ae2b5c03ce13d270a97886",
      "tree": "96ec3e56325a6ea7618613ef96b04022612f7907",
      "parents": [
        "d10995609f9fd8b85db1a5143b124195805ca5bb"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 03 19:47:35 2018 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed May 09 22:11:54 2018 +0000"
      },
      "message": "Support system server ART-profiling\n\nWe don\u0027t have to map the code cache as executable if we only want to save\nprofiles. This enables system server profiling without disabling SElinux\nto bypass the jit code cache exec-mapping.\n\nTest: m test-art-host\n      boot a device with system server profiling enabled.\nBug: 73313191\n\nChange-Id: I7f25a905e0b23456183e39e58ad8f4b829ddf0c5\n"
    },
    {
      "commit": "a3ad0cdd711857f04f477e2cdc5b56a2c74a3018",
      "tree": "7e0e4c7888c2497d86ce96c9574d7c9886721ccf",
      "parents": [
        "abd9e1515bc6be88372c61071971c5432a51553d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 10:06:38 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 09 11:11:09 2018 +0100"
      },
      "message": "ART: Move JNI files to runtime/jni/ .\n\nTest: Rely on TreeHugger.\nChange-Id: I9cae11191ef1567ae9453be498882a7767285140\n"
    },
    {
      "commit": "c9c87f63f7809568fbab751c8f07107e6151cced",
      "tree": "0e5638287e956bec467829159bbb1878d123eec4",
      "parents": [
        "0a054d3e8d00ba4f9841883bf3f8452b8578cf6a"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Thu Apr 19 14:40:40 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 08 10:31:56 2018 +0100"
      },
      "message": "Add VMRuntime.setDedupeHiddenApiWarnings().\n\nThis exposes the equivalently named functionality in arts Runtime class.\n\nTest: m\nBug: 78268765\nMerged-In: If5b2fff70a079d588ae3bba706ab7f572afac0b2\nChange-Id: If5b2fff70a079d588ae3bba706ab7f572afac0b2\n(cherry picked from commit 80900a3c6746a64b17121734af776f49f0570723)\n"
    },
    {
      "commit": "1fd97f29d646770c5e8ddee2e8fe468ffcc9ea2c",
      "tree": "be2fbd393abfe438c1e734055f1d3d084755e6a6",
      "parents": [
        "9a13d423c71517bc9cb3cf40e97dd0f6f5d5c72c"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Tue Apr 03 15:32:32 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 08 10:31:20 2018 +0100"
      },
      "message": "Log an event on hidden API accesses.\n\nThe new event consists of:\n- The type of access (reflection, JNI, etc.)\n- The action taken (warn or deny)\n- The type of member accessed (field or method)\n- Name of the class which defined the member accessed\n- The name of the member\n- The type signature of the member (type of field, or method signature)\n\nThe fully qualified member name is also not included to avoid the overhead\nof building the string. It can be build from the information included.\n\nSimilarly, the package name, version, etc. are not included as they can\nbe inferred from the context when analyzing the event log.\n\nThe event is sampled, according to a sampling rate that can be set by a\nconfiguration option, to reduce log spam.\n\nTest: $ m\nTest: $ adb shell settings put global hidden_api_access_log_sampling_rate 65536\nTest: $ adb lolcat -b events | grep art_hidden_api_access\n\nSample output:\n16796 16796 I art_hidden_api_access: [1,0,Ldalvik/system/VMRuntime;,getRuntime,()Ldalvik/system/VMRuntime;]\n16796 16796 I art_hidden_api_access: [1,2,Ldalvik/system/VMRuntime;,setHiddenApiExemptions,([Ljava/lang/String;)V]\n16796 16796 I art_hidden_api_access: [1,3,Landroid/app/Activity;,mDoReportFullyDrawn,Z]\n(Timestamps have been elided)\n\nBug: 64382372\nBug: 77517571\nMerged-In: I012b2c9fbffbd00ed3219918e7a736a4f7435ec8\nChange-Id: I012b2c9fbffbd00ed3219918e7a736a4f7435ec8\n(cherry picked from commit 73ddda4403c8088a730b8d456de46bb8e0307ed8)\n"
    },
    {
      "commit": "9a13d423c71517bc9cb3cf40e97dd0f6f5d5c72c",
      "tree": "db25de5c310f8c3b14dbaad91bfe3b02a8a4c5b3",
      "parents": [
        "9a81945ca49de3c5b3969cc85278ecbadf238c84"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Mon Apr 09 12:24:55 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 08 10:31:05 2018 +0100"
      },
      "message": "Consider whitelist when listing class members.\n\nPreviously, only the enforcement policy was considered when getting\ndeclared fields or members, meaning whitelisted APIs would still not be\ndiscoverable. Fix this by calling hiddenapi::GetMemberAction from within\nIsDiscoverable.\n\nBug: 77787686\nBug: 64382372\nTest: cts/tests/signature/runSignatureTests.sh (with ag/3863796)\nTest: art/test.py --host -t 674-hiddenapi\nMerged-In: I234d274f47f377e3e105c81aae2d49072287992a\nChange-Id: I234d274f47f377e3e105c81aae2d49072287992a\n(cherry picked from commit 64ee8aeaeb70aa2d5d1c3ff57a682a5001869653)\n"
    },
    {
      "commit": "74b9994598f497ee3c6a72bbacad9926527f67f5",
      "tree": "b876a06735c5e729da62a42e3aa5bd4d79a6ff32",
      "parents": [
        "8a78f81a16a7c8225b48bf634b67f5697f72e15f",
        "79e2607ab50163bfdc283f4a49decec26a216df5"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Apr 13 17:02:21 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 13 17:02:21 2018 +0000"
      },
      "message": "Merge \"Move profile dependent modules to libartbase\""
    },
    {
      "commit": "79e2607ab50163bfdc283f4a49decec26a216df5",
      "tree": "0cdb2c65412b64a55ddf1a486ab3d961a0301a3e",
      "parents": [
        "b4b91460b2d01d36ddcb7d55111ccd8faf390c2a"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Apr 06 17:58:50 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Apr 13 08:29:30 2018 -0700"
      },
      "message": "Move profile dependent modules to libartbase\n\nMove mem_map and zip_archive to libartbase.  This should be the last two\nremaining modules that profile_compilation_info is dependent upon.\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make and boot a device\n\nChange-Id: I136ee23e426aa8ec7441e3d3f1978f1bebf4b562\n"
    },
    {
      "commit": "c0d988a9b5f2c34072fff100af9bd12464a6c55b",
      "tree": "1bd0cf8026f3f98c04f9a8445ee034762a1dbe23",
      "parents": [
        "9574f493cb072466b7b491de97c381e6c2b8b639"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Apr 10 14:32:35 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Apr 11 11:47:16 2018 +0100"
      },
      "message": "ART: Stop Hidden API stackwalk for class initializers in j.l.i.\n\nClass initializers in java.lang.invoke retrieve field offsets. The\nhiddenapi stack walk does not need to progress past these initializers\nas they are permitted irrespective of how their invocation is\ntriggered.\n\nBug: 77631986\nTest: art/test/run-test --host --64 674-hiddenapi\n\n(cherry picked from commit 29e64cfc32e17c9111a5ed2a6b141bebf891cbe3)\n\nChange-Id: I77a29999177850bd50ca4d043b0cd40c40692fe4\nMerged-In: Iaabedc9c016d546e10072107d79c7b6701582c83\n"
    },
    {
      "commit": "9574f493cb072466b7b491de97c381e6c2b8b639",
      "tree": "b7f8990b96dc29df2e38bfc480bd8ac62bcdf59b",
      "parents": [
        "b143d262c523f022499b211d5c2b1fbd9f8130cc"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Apr 10 10:20:32 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Apr 11 11:43:35 2018 +0100"
      },
      "message": "ART: Walk past j.l.i in stackwalk for Hidden API\n\nBug: 77631986\nTest: art/test.py --host 674-hidden-api\n\n(cherry picked from change 198a27e92a529115a2db2a17ec11d8b52bd6a315)\n\nChange-Id: I2364036a6b7bd8bb06d2e456fb22f4db9c6cce21\nMerged-In: I2e3e0399765da7f554259fe14247b45e42110ef4\n"
    },
    {
      "commit": "6097672947fe8b2632cfd10e3d8e44792199a346",
      "tree": "40f63402acbbafdab2f4b0afd3f7efd620308282",
      "parents": [
        "1451f86cce740befd52cb3665827aafef1497f54"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 06 15:29:38 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 09 11:40:55 2018 +0100"
      },
      "message": "Remove some unnecessary items from WellKnownClasses.\n\nReplace a few uses with alternatives, namely\nmirror::{Constructor,Method,Field}::StaticClass().\nAlternatively, we could use class roots in the ClassLinker.\n\nAnd clear dalvik_system_VMRuntime_nonSdkApiUsageConsumer\nin WellKnownClasses::Clear().\n\nTest: testrunner.py --host\nBug: 74943277\nChange-Id: I7561db76cd62d376c22efd4386dffd83ec74aa66\n"
    },
    {
      "commit": "f5f1f80aa6c1c10c61b6723bbc52d5aec2eba2b9",
      "tree": "6a83730a41748fcfd6e42be0f31ec7243d631495",
      "parents": [
        "8c5de0f16444441c23a5ae807e4dd5cc0dd586a3"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Apr 03 15:23:46 2018 +0100"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 06 10:08:56 2018 -0700"
      },
      "message": "Revert^2 \"hidden_api: Call back into libcore on hidden api detection\"\"\n\nThis reverts commit bbe60d58496991c16e2943e174e26ab8a096b3d0.\n\nThis CL deviates from the approach of the original change. Instead of\ncalling back every time ShouldBlock.. was called, we explicitly call\nback in cases where it\u0027s safe to do so.\n\nNote that we only call back on reflective accesses for now, and not\nlink time accesses. Coverage for the latter will be added in a follow up\nchange.\n\nBug: 73896556\nTest: test-art-host\nTest: art/test.py --host -t test-art-host-run-test-debug-prebuild-\\\n   interpreter-no-relocate-ntrace-gcstress-checkjni-picimage-pictest-\\\n   ndebuggable-no-jvmti-cdex-fast-674-hiddenapi64\n\n(cherry picked from commit e453a8dd87731f4b37b86a1284f7655d86c2a809)\n\nMerged-In: Ie99ac268a083af167accbdf955639da068bea950\nChange-Id: I76860519d40b87032dbb8db38b04fcf79ef09723\n"
    },
    {
      "commit": "8c5de0f16444441c23a5ae807e4dd5cc0dd586a3",
      "tree": "a0753accc18ccc000280e18327c57f7352e2ace5",
      "parents": [
        "a9660f1dc13b4d595b3f89b06dd5b70eeee18c43"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Apr 03 14:13:13 2018 +0000"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 06 10:08:21 2018 -0700"
      },
      "message": "Revert \"hidden_api: Call back into libcore on hidden api detection\"\n\nThis reverts commit 757a9d0a2e97d43bafeb8a95cc3c51102be99586.\n\nReason for revert: Test failures with \"art/test.py --host -t test-art-host-run-test-debug-prebuild-interpreter-no-relocate-ntrace-gcstress-checkjni-picimage-pictest-ndebuggable-no-jvmti-cdex-fast-674-hiddenapi64\"\nBug: 73896556\nTest: art/test.py --host -t test-art-host-run-test-debug-prebuild-interpreter-no-relocate-ntrace-gcstress-checkjni-picimage-pictest-ndebuggable-no-jvmti-cdex-fast-674-hiddenapi64\n\n(cherry picked from commit 9e68ade384abdb15714054feaed06cb38eb5432f)\n\nMerged-In: Ib2ad89c16ad797c37f6212bc7e5c0b6b92ce56b5\nChange-Id: I11fa9b76da07162fde8773eb05cfc6a6514e0ca1\n"
    },
    {
      "commit": "a9660f1dc13b4d595b3f89b06dd5b70eeee18c43",
      "tree": "fba8c4742d8f866b8342794542436ab3cd3f32a8",
      "parents": [
        "9c85c79af0e5fe181df97dfc2801f4999aef77eb"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Mar 29 10:21:47 2018 +0100"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 06 10:07:49 2018 -0700"
      },
      "message": "hidden_api: Call back into libcore on hidden api detection\n\nThis change also removes some unnecessary RI specific logic for\nbuilding src-ex since it isn\u0027t required.\n\nBug: 73896556\nTest: run-test --host 674-hiddenapi\nTest: StrictModeTest\n\nCo-Authored-By: Andreas Gampe \u003cagampe@google.com\u003e\n\n(cherry picked from commit 757a9d0a2e97d43bafeb8a95cc3c51102be99586)\n\nMerged-In: Ib2b4dfad55c5d829630bfe2adb4a468124bea61c\nChange-Id: Ida0943990aa1b3bad0c674bc31ff46766ae493a6\n"
    },
    {
      "commit": "27b967611b48120bf0140995ae439700fe6cc139",
      "tree": "fb6a3ce8c7bb50cfd5e265533dab3894d52f4716",
      "parents": [
        "ba6d632c0e7617a1a848551612d7cb9e60b450e6"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Mar 13 16:06:57 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Mar 29 12:44:43 2018 +0100"
      },
      "message": "ART: Simplify quasi_atomic.h\n\nRemoves fences that duplicate std::atomic_thread_fence().\n\nBug: 71621075\nTest: art/test.py --host -j32\nTest: art/test.py --target --64 -j4\nChange-Id: I008de4d242d1a3cf4d3f50ce171abbbda647bdaa\n"
    },
    {
      "commit": "aa12001baf69c124ab3901c13385aaa43fc76987",
      "tree": "9cedf9714284f6a25dc40e8746aae3a719e86de4",
      "parents": [
        "3be56a02c6311d2a751f8a7410843199f9f4c9cc"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Mar 28 16:23:24 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Mar 28 17:32:16 2018 -0700"
      },
      "message": "ART: Refactor hidden_api\n\nAdd hidden_api.cc, move handling of hidden fields there. Also\nremove an unnecessary include that meant hidden_api was imported\ninto too many compilation units, and fix transitive includes.\n\nBug: 73896556\nTest: mmma art\nTest: m test-art-host\nChange-Id: Ie47e11abcea68e326c410bab215ebbfbf049051b\n"
    },
    {
      "commit": "b38988a227534ae17045dadedc24d2131d59b42d",
      "tree": "4aa18d4de72ef2e614d9459234a979bff69bc7ba",
      "parents": [
        "981d6b58c81c20f7d5f7d5352c30c2d916c2e60b",
        "8e1a7cb303d7c8f763dfb99ae311b820996b1ab4"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Mar 28 10:26:07 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 28 10:26:07 2018 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Allow hidden API access from system libraries\"\"\""
    },
    {
      "commit": "8e1a7cb303d7c8f763dfb99ae311b820996b1ab4",
      "tree": "ea952245e2b907c44d5c0fcadf90f00a1fe31913",
      "parents": [
        "10c4390a7d63775b1c7e6f6a291e9aade388d733"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 27 08:14:25 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 27 18:15:21 2018 +0100"
      },
      "message": "Revert \"Revert \"Allow hidden API access from system libraries\"\"\n\nLibraries like RemoteDisplay provide an APK that an app loads into\nits process and which accesses internal APIs on the app\u0027s behalf,\nwithout exposing the internals to the app. These libraries are\nconsidered part of the platform, but were not exempt from hidden API\nchecks because they are not loaded with the boot strap class loader.\n\nThis patch adds a new flag to DexFile class which the constructor\nsets to true of the canonical location of the newly loaded dex file\nstarts with \"${ANDROID_ROOT}/framework/\". Hidden API enforcement\nthen checks this flag when determining whether the caller of\na hidden class member is allowed to access it or not.\n\nThis reverts commit 0127b71a2588efcd1a53c192c5c267157878b010.\n\nPrevious CL saw two issues:\n- buildbots would set non-existent ANDROID_ROOT for host-side builds\n- calling realpath on unquickened dex files would overflow the stack\n\nBug: 64382372\nBug: 76138670\nBug: 76165623\nBug: 76112393\nBug: 76452688\nBug: 76429651\nTest: art/test.py --target -r -b -t 674-hiddenapi\nTest: SystemUI APCT test\nChange-Id: Ie07a088509002593353965d3d24bf7362b643f40\n"
    },
    {
      "commit": "7d74ef585063ca2adc0ba9c18008b7c1671ff699",
      "tree": "eba7606a42ed036ca560564a939da1528aa8ba54",
      "parents": [
        "e8a4e378c5a928d5de07bee6db99150a57dabcd8"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Fri Mar 16 14:18:33 2018 +0000"
      },
      "committer": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Tue Mar 27 16:28:57 2018 +0100"
      },
      "message": "Support for API exemptions from API blacklisting.\n\nAdd support to VMRuntime for setting a list of exemptions from the hidden\nAPI enforcement. The list is used as a prefix match against the signature\nof a field/method. Any signatures that match are treated as being on the\nlight grey list, rather than the dark grey list or blacklist.\n\nRefactor some code in hidden_api.h that deals with field/method signatures,\nto encapsulate the signature in a new class MemberSignature. This allows us\nto avoid building the entire signature in member, instead just using its\nconstituent parts.\n\nTest: $ make test-art-host-gtest-hidden_api_test\nTest: $ adb shell settings put global hidden_api_blacklist_exemptions \\\nTest:    Landroid/view/RemoteAnimationDefinition\\\\\\;:Landroid/app/ActivityManager\\\\\\$TaskDescription\\\\\\;\nTest: Manually verify logcat output from app which uses named APIs\nBug: 73337509\nChange-Id: Id608743d1b5a7a37059875d8991d0d4d65f5fc36\n"
    },
    {
      "commit": "0127b71a2588efcd1a53c192c5c267157878b010",
      "tree": "cfe89ca742bed927e67d9cf926937fe5e6f89347",
      "parents": [
        "eefabd28c21e6ae02ca05e97bd22f9e23cbf98a5"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 26 19:31:41 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 26 19:31:41 2018 +0000"
      },
      "message": "Revert \"Allow hidden API access from system libraries\"\n\nBug: 64382372\nBug: 76138670\nBug: 76165623\nBug: 76112393\n\nSeems to cause run-test issues.\n\nThis reverts commit eefabd28c21e6ae02ca05e97bd22f9e23cbf98a5.\n\nChange-Id: Ia9b3d946742dbfde4fb56cf14413fde0600c8252\n"
    },
    {
      "commit": "eefabd28c21e6ae02ca05e97bd22f9e23cbf98a5",
      "tree": "58e4c2635e0d5682c3385bed639664ccfdd44f6a",
      "parents": [
        "e8a4e378c5a928d5de07bee6db99150a57dabcd8"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 22 16:27:18 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 26 08:05:33 2018 +0000"
      },
      "message": "Allow hidden API access from system libraries\n\nLibraries like RemoteDisplay provide an APK that an app loads into\nits process and which accesses internal APIs on the app\u0027s behalf,\nwithout exposing the internals to the app. These libraries are\nconsidered part of the platform, but were not exempt from hidden API\nchecks because they are not loaded with the boot strap class loader.\n\nThis patch adds a new flag to DexFile class which the constructor\nsets to true of the canonical location of the newly loaded dex file\nstarts with \"${ANDROID_ROOT}/framework/\". Hidden API enforcement\nthen checks this flag when determining whether the caller of\na hidden class member is allowed to access it or not.\n\nBug: 64382372\nBug: 76138670\nBug: 76165623\nBug: 76112393\nTest: art_dex_file_loader_test gtest\nTest: art/test.py --gtest\nChange-Id: If062bd668d7ba494bbb7b828e40932748d173b9a\n"
    },
    {
      "commit": "e8a4e378c5a928d5de07bee6db99150a57dabcd8",
      "tree": "cfe89ca742bed927e67d9cf926937fe5e6f89347",
      "parents": [
        "454bc46869f116fc1c3b9e38b0868341d463ed4b",
        "597d7f650b0656fcb3985b01f53284717b41e5cc"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Fri Mar 23 13:29:03 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Mar 23 13:29:03 2018 +0000"
      },
      "message": "Merge \"More flexible API enforcement policy support.\""
    },
    {
      "commit": "597d7f650b0656fcb3985b01f53284717b41e5cc",
      "tree": "59ba9853104427b19f2449ce547301764d22756b",
      "parents": [
        "753ce1bcf458ad6c6fbb41689901943d44e7738e"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Thu Mar 22 11:36:47 2018 +0000"
      },
      "committer": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Fri Mar 23 11:43:35 2018 +0000"
      },
      "message": "More flexible API enforcement policy support.\n\nThis CL adds the ability to configure which banned API lists to enforce,\ndefined by new enum hiddenapi::ApiEnforcementPolicy. Currently, the policy\ncan be set at zygote fork time, but not at dex optimization time where\nblacklist enforcement is still assumed. As such, making the policy more\nstrict will not work as expected yet. This will be improved in a follow up\nCL.\n\nTest: art tests pass\nTest: Device boots\n\nBUG: 73337509\n\n(cherry-picked from commit 159f596eec01adbb5a1c9654402c137cdb943131)\n\nChange-Id: I6c319bb8a3000cb1d3c4693b4fb196e749c36d96\nMerged-In: I33f9afce628a86727e400052f4d5979d3536da8c\n"
    },
    {
      "commit": "6ff3b371e53ffdb6d0aa9f85ae9468696f5fa2b0",
      "tree": "e4ceaf9ac71100bcc68942ec3fd0e718e8dc89f0",
      "parents": [
        "182cbe4dcba21f797f3a9195338baf3cba775f60"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Mar 15 08:53:16 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Mar 15 20:58:40 2018 -0700"
      },
      "message": "ART: Clean up Trace\n\nRemove unneeded field. Refactor Start to have a cleaner interface.\nAdd exception for invalid file descriptor.\n\nTest: mmma art\nTest: art/test/testrunner/testrunner.py -b --host --trace\nChange-Id: I7d0cd9629796c690a993dbbba5ae96d940c44dba\n"
    },
    {
      "commit": "92abf46ea6ab790eb1834a633f97e8b55efc4f6f",
      "tree": "53219e46bef0fd98b609b2032bb5d64e9d019ddb",
      "parents": [
        "94e2e4f10f1b5217979cbfb9a4f9663b2ba8fd46",
        "a98a28262f645d100e2dee9587e7822d35ade6f9"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Tue Mar 06 23:46:51 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 06 23:46:51 2018 +0000"
      },
      "message": "Merge \"Do fewer GCs shortly after zygote fork\""
    },
    {
      "commit": "c431b9dc4b23cc950eb313695258df5d89f53b22",
      "tree": "422273559c3ae52caff0c6b1cf1a62a8312f0e26",
      "parents": [
        "f46f46cf5bd32788d5252b7107628a66594a5e98"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Mar 02 12:01:51 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 05 13:58:20 2018 -0800"
      },
      "message": "Move most of runtime/base to libartbase/base\n\nEnforce the layering that code in runtime/base should not depend on\nruntime by separating it into libartbase.  Some of the code in\nruntime/base depends on the Runtime class, so it cannot be moved yet.\nAlso, some of the tests depend on CommonRuntimeTest, which itself needs\nto be factored (in a subsequent CL).\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host\n\nChange-Id: I8b096c1e2542f829eb456b4b057c71421b77d7e2\n"
    },
    {
      "commit": "58143d2c47734c46c1fa4855cb603c24f2d15454",
      "tree": "261bd69b379e5a39e39e3c15947960e53f389d98",
      "parents": [
        "a1b035b963d091ca6824f285c33de69c6e16ac77"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Feb 20 08:44:20 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Mar 05 15:21:52 2018 +0000"
      },
      "message": "ART: Fixes for constructor parameter annotations\n\nSynthesize empty parameter annotations for implicit parameters on\nconstructors. Reflective methods for recovering parameter annotations\nexpect them to be present though they may not be present in the DEX file.\n\nBug: b/68033708\nTest: art/test/run-test --host 715\n\nChange-Id: I0827c7e71ff7c7e044fc9dd6c5aac639a0e1a4c6\n"
    },
    {
      "commit": "63e9e8700d0fe14a31d93e95efea603bab78a68e",
      "tree": "6a89ae90a962070ed559c9759232d429a5369507",
      "parents": [
        "c7ac275a5f06b0e1140bf600ec1e654f629c54ab",
        "440a9b3b3e6aa60c14e73a97dd85c9ada0898569"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Feb 23 17:53:23 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 23 17:53:23 2018 +0000"
      },
      "message": "Merge \"Add timestamps to JIT/DEX native debug info.\""
    },
    {
      "commit": "e42d71719442d40baf07a306a02a5653f444c10d",
      "tree": "b9dfc3999609d1d2e84e636e9e12097b785b9465",
      "parents": [
        "c8483841a764dff86f72813381d51df00809ef68",
        "06537f7a6f0772cbef08bdded933828378b2d32a"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Feb 23 01:35:17 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 23 01:35:17 2018 +0000"
      },
      "message": "Merge \"native: Cleanup jni usage code\""
    },
    {
      "commit": "06537f7a6f0772cbef08bdded933828378b2d32a",
      "tree": "e1505a3dea19d6585973d2db0d9dd6988bf0f03d",
      "parents": [
        "a502c7202f56b8f5f2c5de567359fa7f6bab406f"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu Feb 22 15:03:05 2018 -0800"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu Feb 22 15:28:50 2018 -0800"
      },
      "message": "native: Cleanup jni usage code\n\nMake the C++ signature consistent with the JNI descriptor by using the\nsame type as the descriptor whenever possible.\n\ne.g. \"()Ljava/lang/String;\" should actually be \"jstring fn(JNIEnv*,jobject)\"\ninstead of \"jobject fn(JNIEnv*,jobject)\".\n\nBug: 35325126\nChange-Id: I72318525fc3b18b013b8d6fa604d8dd6b5dd4400\nTest: make -j32 test-art-host  # and also manually that it boots\n"
    },
    {
      "commit": "b2ec9f5c128673c43f776cbe12c8eeb0a6884ebb",
      "tree": "724022162a4f3de021cebab32ee5ac67ec860f32",
      "parents": [
        "f13343eb8b2738e2812fd7bd9d5592f529e93c21"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 21 13:20:31 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 21 13:51:15 2018 -0800"
      },
      "message": "Remove duplication, split tests\n\nThe code move to libdexfile/dex/descriptors_names.cc apparently did not\nremove the original code from runtime/utils.cc.  Fix that duplication\nand all the header mentions needed.  Also, split the test files to go\nalong with the new locations for the code to be tested.\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host-gtest\n      flash \u0026 boot marlin\n\nChange-Id: Ie734672c4bca2c647d8016291f910b5608674545\n"
    },
    {
      "commit": "440a9b3b3e6aa60c14e73a97dd85c9ada0898569",
      "tree": "26dcc48d91e3eec18ab1e4dd987962a0939f6531",
      "parents": [
        "d1652d14fbf477b3091eec3764b9890f2c072055"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Feb 15 17:47:29 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Feb 21 12:57:12 2018 +0000"
      },
      "message": "Add timestamps to JIT/DEX native debug info.\n\nThis a forward-looking change intended to allow simpleperf to\nreliably correlate samples and native debug information.\n\nI have added the timestamps to both JIT and DEX, and refactored\nthe code in the process to avoid code duplication.\n\nTest: testrunner.py -t 137\nChange-Id: I45fa4310305aff540e036db9af15a86c5b8b7aff\n"
    },
    {
      "commit": "e06e48e7b513c37c512b5a321ca7e0a3b0fc3ac6",
      "tree": "55080739c711d41f1b0ccaac25895204a96141f0",
      "parents": [
        "b09289548f89b56b36c03d3dc698568ccf298edd",
        "77d33985a4340bd3c185247fa3e66623858076d2"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Feb 17 01:39:54 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Feb 17 01:39:54 2018 +0000"
      },
      "message": "Merge \"Propagate an is_zygote flag through nativePostForkChild.\""
    },
    {
      "commit": "86f452c179dc6624b0394d7ca9276ab496c90dc8",
      "tree": "25f5c0415351d2c965ef43bc5012d55bcf39ab20",
      "parents": [
        "7d2894d67acf8e2665f5714e524266af7a41274e",
        "ea179f477465789605e0c8f57a3ec660c3d852e8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 16 09:54:18 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 16 09:54:18 2018 +0000"
      },
      "message": "Merge \"Refactor method resolution in class linker.\""
    },
    {
      "commit": "77d33985a4340bd3c185247fa3e66623858076d2",
      "tree": "75a8eeced018e8b29a3ddedce8319f25a6210ca1",
      "parents": [
        "57207cd8a6cd5c2eb7ad0ec2094bf54973492322"
      ],
      "author": {
        "name": "Robert Sesek",
        "email": "rsesek@google.com",
        "time": "Wed Jan 17 18:39:04 2018 -0500"
      },
      "committer": {
        "name": "Robert Sesek",
        "email": "rsesek@google.com",
        "time": "Thu Feb 15 14:06:56 2018 -0500"
      },
      "message": "Propagate an is_zygote flag through nativePostForkChild.\n\nThis flag is used to skip calling into Runtime::InitNonZygoteOrPostFork()\nin child-zygote processes. Doing so would spin up threads for Binder,\nwhich would make the process unable to fork like a zygote.\n\nBug: 63749735\nTest: m (with multi-project commits landed)\nChange-Id: I352af061e0ce6bd32e6f30b15ff2f8d3f4b58222\n"
    },
    {
      "commit": "ea179f477465789605e0c8f57a3ec660c3d852e8",
      "tree": "bde254b238c9ed42a5c0ae3ff14ffacadeeddb34",
      "parents": [
        "d991e5119a2bb61542899da9708f794dc60677c4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 08 22:30:18 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 15 15:47:02 2018 +0000"
      },
      "message": "Refactor method resolution in class linker.\n\nRewrite all runtime callers of DexCache::SetResolvedMethod\nto call a shared method that will do the dex cache update.\n\nbug: 64759619\nTest: test-art-host\nTest: device boots, runs\n\nChange-Id: Icc1aca121030e2864de09667bdbc793b502e3802\n"
    },
    {
      "commit": "7287c4d75e38e7a01c7ea3fdebb47d9cfe128a56",
      "tree": "2b43d1b334e05e1c5719fee3f2a16bebaff059d9",
      "parents": [
        "1efa7cb8c415f4df8a248242cd773a1fc671878e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 15 10:41:07 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 15 15:36:21 2018 +0000"
      },
      "message": "Add Class.getPrimitiveClass().\n\nImplement the native part in ART and remove the native parts\nof the previously needed workaround for java.lang.Void.TYPE.\n\nCompanion libcore/ change:\n    https://android-review.googlesource.com/619326\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: Pixel 2 XL boots.\nBug: 73346078\nChange-Id: Icfb201a1f08d8ff2a65c58f7c0ec25aa2296db29\n"
    },
    {
      "commit": "60cae4feb1fb861768b2f77f46d2d81a84a1905b",
      "tree": "3ce75430ce7ec0e01ac8baa357a95ad6b901e27b",
      "parents": [
        "ebe485eed28a4b1c4a47d57f7bf7f3d2b609df10",
        "5f9a8017be9893dc175d1e7bcad59dd80656d49b"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Feb 14 18:48:30 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 14 18:48:30 2018 +0000"
      },
      "message": "Merge \"Expose the optimization status of a dex file\""
    },
    {
      "commit": "d7fbc0eb824e495b940dd739404d945a35f01fd3",
      "tree": "bec376f405c5bef02d2c61f73c43738b6ef33fff",
      "parents": [
        "3bffbe8a8288cf01b7248fffdd320bf688529bcb"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 12 16:44:36 2018 -0800"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Feb 14 10:06:03 2018 +0000"
      },
      "message": "Refactor hidden API runtime flag from negative to positive\n\nThere are only two situations in which we want to enable hidden API\naccess checks: (a) when forking a non-platform app from zygote, and\n(b) when compiling such app with dex2oat. It is easier to cover these\ntwo situations than all the other situations when we want to disable\nthe checks. Make the flag in Runtime class false by default and only\nenable if checks are explicitly requested by the runtime.\n\nBug: 64382372\nTest: boot device, install and run apps, check log messages\n\n(cherry picked from commit 9cf8b671a24f55c7e1a1df561d6cce85b45cebd8)\n\nChange-Id: Ib5ccb20596c708cedf9b2c05af228463bec2adb1\n"
    },
    {
      "commit": "5f9a8017be9893dc175d1e7bcad59dd80656d49b",
      "tree": "3ca3b41eee5aa656edd4b05406278821ba706e29",
      "parents": [
        "0e09dfc9cbdd6c2510dbe50dba95cf9d2d815e79"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Feb 12 20:27:46 2018 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Feb 13 16:40:15 2018 -0800"
      },
      "message": "Expose the optimization status of a dex file\n\nAdd a method which exposes the optimization status of a dex file based on\nits expected runtime behaviour. The method returns the status in an array\n[compilation filter, compilation reason].\n\nThe method will try to mimic the runtime effect of loading the dex file.\nFor example, if there is no usable oat file, the compiler filter will be\nset to \"run-from-apk\".\n\nThis will enable more accurate performance monitoring of apks.\n\nTest: oat_file_assistant_test\nBug: 73102540\nChange-Id: Ida9abef502dcb3fd07e1b0988771fb60e9b2a423\n"
    },
    {
      "commit": "068d68dabfc37d9a5a7d7bf834b27793b99303fe",
      "tree": "02f2cb087f682222de4d93238a6c8753a8d07cef",
      "parents": [
        "0dc1b92c76bd8a85ae4f5dad1dea61a11660d9cc"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 12 13:04:17 2018 -0800"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 13 12:47:36 2018 -0800"
      },
      "message": "Print more information about hidden API accesses\n\nThis patch changes when we print hidden API access warnings and the\nmessage that is printed:\n\n(a) prints message even if reflection is denied\n(b) prints if the access was due to reflection or JNI\n\nBug: 64382372\nTest: manual\nChange-Id: I1e59982516c12580a207fd294aa8aab851b1ad46\n"
    },
    {
      "commit": "47c420bb5e81e64e6243c217da377bacf9dfcb40",
      "tree": "57c51b7d2f0e5c0b9f67093732dadb06830720c3",
      "parents": [
        "1be550542283ba9876dce18473268df1d41bc397",
        "92265222f1e1df56ee6d106493b1bd2be65d5ce9"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Feb 03 03:58:20 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Feb 03 03:58:20 2018 +0000"
      },
      "message": "Merge \"Only set UI warning on hidden API dark greylist\""
    },
    {
      "commit": "92265222f1e1df56ee6d106493b1bd2be65d5ce9",
      "tree": "d73a4f9708acbedb1d464c83c22756ac0eb68799",
      "parents": [
        "e5bf41acab7cc5a798a4d19425493a4af8f20436"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Feb 02 11:21:40 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Sat Feb 03 02:11:11 2018 +0000"
      },
      "message": "Only set UI warning on hidden API dark greylist\n\nThe framework might show a toast notification on access to greylisted\nhidden APIs. Only show this warning on dark greylist so as to not spam\nearly testers.\n\nBug: 64382372\nTest: make\nChange-Id: I8b5f7b4938e0f238c513e37d7db06856b966802f\n"
    },
    {
      "commit": "fb3de3d72832177e4a8d1f322ed11cbe58e45c9f",
      "tree": "de8cded0436b54b2e5b1142b07fa75f0ed9791b0",
      "parents": [
        "2827ff64c7a385cfb9d6e01e6385708461eb65fc"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jan 29 16:11:49 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Feb 02 14:14:08 2018 +0000"
      },
      "message": "Create list of open dex files for libbacktrace.\n\nThis fixes unwinds after recent changes (oob apks; cdex data sharing).\n\nBug: 72520014\nTest: m test-art-host-gtest\nChange-Id: Ie2a02657b2afbe899acd2e61f0a57d207e688b99\n"
    },
    {
      "commit": "70e88d6df6cc97163fa8b2bdd756a6e910bc9aa5",
      "tree": "3801c976e92f02247042e4c124f6b7dc00d4e435",
      "parents": [
        "cf026fec63bea5056988452a6c014df75bf13e19",
        "a02cb113cd0dd023eec61716d3d1bd0dc1c1453a"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Feb 01 15:54:46 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 01 15:54:46 2018 +0000"
      },
      "message": "Merge \"Move hidden API warnings into resolvers\""
    },
    {
      "commit": "cf026fec63bea5056988452a6c014df75bf13e19",
      "tree": "059aafe862dae8840e053ce2590e59707275abe9",
      "parents": [
        "67fd19dd5952b41fd119911492878c645d27e826",
        "2e349167ebdaf10dee9d68f06bbe620ed9aa841b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Feb 01 15:51:43 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 01 15:51:43 2018 +0000"
      },
      "message": "Merge \"Enable hidden API enforcement\""
    },
    {
      "commit": "2e349167ebdaf10dee9d68f06bbe620ed9aa841b",
      "tree": "a2b9fc1f37f2e68352d0c2475fd5373ebf481686",
      "parents": [
        "c7e546ff3963a1d51b1f100d308db735bd19f736"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 24 19:52:24 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Feb 01 13:55:12 2018 +0000"
      },
      "message": "Enable hidden API enforcement\n\nTest: manual\nBug: 64382372\nChange-Id: I4cbbfb83a2fb697e78a22858cfdd6a6779e6762d\n"
    },
    {
      "commit": "a02cb113cd0dd023eec61716d3d1bd0dc1c1453a",
      "tree": "8553be51d5f6c2f0ebce20d7e364085ccf0a3206",
      "parents": [
        "c7e546ff3963a1d51b1f100d308db735bd19f736"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 31 11:36:39 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Feb 01 13:47:33 2018 +0000"
      },
      "message": "Move hidden API warnings into resolvers\n\nChecks inserted to maybe warn about accessing a hidden API member\nare proving too expensive. Move them into the resolvers.\n\nBug: 64382372\nBug: 72649186\nTest: art/test.py --host -b -r -t 674-hiddenapi -v\nChange-Id: I11bceccb8fe647e829c491be38ba0af72f1b3996\n"
    },
    {
      "commit": "a98a28262f645d100e2dee9587e7822d35ade6f9",
      "tree": "14fec386051bdcb0569aeb18342326900219a66c",
      "parents": [
        "2f8ad4bc3284358575aad06822cac1650512cb1b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 24 16:14:10 2017 -0700"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Jan 31 15:44:19 2018 -0800"
      },
      "message": "Do fewer GCs shortly after zygote fork\n\nAfter zygote fork, increase heap limit (max_allowed_footprint_)\nto maximum growth limit and concurrent GC threshold (concurrent_start_bytes_)\nto half of heap limit for 2s. This means there will be, most likely, no GCs\nthat happen during launch for most apps. This should reduce startup time\nof apps, as well as, save some power.\n\nAfter the 2s windows is done, a concurrent GC is done to free up\nRAM and adjust the counters back to normal, if no GC took place\nso far.\n\nNot measured: Boot time, transient RAM usage increase.\n\n-----------------------------------------------------\nApp     | Avg speed     | Heap size       | GC count\n-----------------------------------------------------\nCamera  | 567ms / 588ms |  4.3MB / 2.7MB  | 2 / 4\n-----------------------------------------------------\nChrome  | 350ms / 394ms |  2.5MB / 1.5MB  | 0 / 2\n-----------------------------------------------------\nPhotos  | 447ms / 516ms |    6MB / 4MB    | 0 / 3\n-----------------------------------------------------\nMaps    |1419ms / 1440ms| 19.5MB / 11MB   | 0 / 5\n-----------------------------------------------------\nGmail   | 148ms / 156ms |  3.5MB / 2.5MB  | 0 / 1\n-----------------------------------------------------\nYoutube | 721ms / 761ms |    8MB / 4.5MB  | 0 / 3\n-----------------------------------------------------\nNotes:\n1) Format: \u003cwith change / without change\u003e\n2) For Camera app, 2 GCs are caused by native allocations\n3) Speed is averaged over 100 runs\n4) Heap size is at end of the launch\n\nBug: 36727951\nTest: test-art-host\nChange-Id: I4ca9b5be7433097851560f8738fbc8cae733d85e\n"
    },
    {
      "commit": "787784f9effb126b5d0d3dc97d544c4a477b5daf",
      "tree": "1ff6d9fd284a4dd2a337165dff20e71137997c9d",
      "parents": [
        "b40b7e73469339a6b667b4a2e2b8690112a74dc9"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 18:48:51 2018 +0000"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 18:48:51 2018 +0000"
      },
      "message": "Revert \"Make libdexfile build independent of runtime dir\"\n\nThis reverts commit b40b7e73469339a6b667b4a2e2b8690112a74dc9.\n\nReason for revert: on device libdexfile.so missing\n\nChange-Id: I9bd61a98bef870400580e8c991cb061d3f57fa72\n"
    },
    {
      "commit": "8f99e0be3c036ec4db252d0adccdfcdce4b134c3",
      "tree": "321b1946d7a846334acaf61f1bfed2ea01cfa0d1",
      "parents": [
        "ea5575b241222e3360963e944c1306330cdd16b8"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jan 30 14:44:52 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jan 30 14:44:52 2018 +0000"
      },
      "message": "Check DEBUG_GENERATE_MINI_DEBUG_INFO when starting an app\n\nChange-Id: Ic95056ccc4a8aaabb16d199e88031b11e750c1a5\n"
    },
    {
      "commit": "b40b7e73469339a6b667b4a2e2b8690112a74dc9",
      "tree": "7e8a34d9c7894c4c946f674f19f0a0a512b95184",
      "parents": [
        "9690ad794b324ba54e936608881ac0f62538b97a"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 25 17:11:07 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 01:17:58 2018 -0800"
      },
      "message": "Make libdexfile build independent of runtime dir\n\nRemove libdexfile\u0027s dependency on utils.cc and move utf.cc into\n/dex.  Remove libdexfile\u0027s constituent sources from libart and\nuse libdexfile wherever libart is. Also remove some ART-specific\ninterfaces.  Libdexfile\u0027s tests remain to be converted, plus\nmoving the files to a new directory peer to runtime/.\n\nBug: 22322814\nTest: make -j 50 test-art-host\nChange-Id: Ifaf695216e4a0e43d3aa377984d933f7a2a243c2\n"
    },
    {
      "commit": "05dd001ace005ad20bdc5ad2b7593a81825afe82",
      "tree": "52692bf778d4835e2771f5328ccee9367bd65cd8",
      "parents": [
        "44720c6fb84f85bd7628a020ed1097e744f0b660",
        "39d7589745f559b84b58d008f67c3aaf364b0370"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Jan 25 22:20:21 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 25 22:20:21 2018 +0000"
      },
      "message": "Merge \"Always generate JIT mini-debug-info for debuggable apps.\""
    },
    {
      "commit": "4384b104a5a023535fc613d7f08564b681f164b6",
      "tree": "d417f3b2ef61402bd209da26b49afaf22cd1ec60",
      "parents": [
        "9779e6f470f91a688d81e7edd5f9e3990abafe32"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Jan 23 16:10:36 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 25 14:17:03 2018 +0000"
      },
      "message": "Expose pending hidden API warning through VMRuntime\n\nFramework might want to show a warning message to the user when the\napp has used hidden APIs. Add a JNI method through which framework\ncan query ART about the state of the warning flag.\n\nBug: 64382372\nTest: make\nChange-Id: I9d63db39b4d351647e6de8a64daa30c3288a5bee\n"
    },
    {
      "commit": "ee7d2fd16d47b54d7fb5b9d5ec772fbc315faf4b",
      "tree": "844ed2998f78723aa7909ce0a7b19995c34f0bd9",
      "parents": [
        "5a61bb7969347ffe8e0bf4f4dff841cc6c21ed85"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Sat Jan 20 17:25:23 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 25 10:40:56 2018 +0000"
      },
      "message": "Start warning on hidden API greylist\n\nInsert checks into reflection, JNI and the verifier to print\na warning when greylisted methods are invoked and fields accessed.\nWe do this on actual access, because reflection allows to list\nall methods/fields and simply listing a greylisted member would\nprint too many false positives.\n\nIssuing a warning also sets a boolean flag in Runtime. This will\nbe made accessible through VMRuntime to the framework which will\nissue a Toast on Activity start.\n\nThe change was tested with internal microbenchmarks of reflection\nand those flagged one issue. Microbenchmark invoking a field getter\nhas regressed by 35%. We will profile this benchmark in detail and\nconsider options for improvement. Bug b/72482474 was created to track\nprogress.\n\nTest: art/test.py -b -r -t 674-hiddenapi\nBug: 64382372\nBug: 72482474\nChange-Id: I323244935e9091a2f8d012385cefaac6b1fe3777\n"
    },
    {
      "commit": "5a61bb7969347ffe8e0bf4f4dff841cc6c21ed85",
      "tree": "44c266c97576dcbdc931cf94d81774614a2c762b",
      "parents": [
        "d02784e17c20c91a50dcb10522351f4937e250ff"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jan 19 16:59:46 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 25 10:11:11 2018 +0000"
      },
      "message": "Start enforcing hidden API blacklist\n\nInsert checks into reflection, JNI and Class::CanAccessMember to\nmake blacklisted hidden APIs undiscoverable.\n\nThe change was tested with internal microbenchmarks of reflection\nand those showed no measurable performance impact.\n\nTest: art/test.py -b -r -t 674-hiddenapi\nBug: 64382372\nChange-Id: I9e39804b837ae9ffeba926f2a5b1e8e9986c472b\n"
    },
    {
      "commit": "39d7589745f559b84b58d008f67c3aaf364b0370",
      "tree": "85d4e7b80c92325413770b18914bf0a70aa8e7df",
      "parents": [
        "6650b0db52eee45f024652bae526ad64166ae02f"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jan 24 16:06:46 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jan 24 16:06:46 2018 +0000"
      },
      "message": "Always generate JIT mini-debug-info for debuggable apps.\n\nChange-Id: I863ae20cab5a86fc63bf34fde17c9181308a459c\n"
    },
    {
      "commit": "c5e5aedab28e74416fcee4f55fab6d5807363471",
      "tree": "7e4affc0b98ab6006da335465c9ee184c820ef58",
      "parents": [
        "3e0fa0aa5d929737f1d1c4bac07e2695ac438324"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 17 18:26:30 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Sat Jan 20 20:07:05 2018 +0000"
      },
      "message": "Add DISABLE_HIDDEN_API_CHECKS flag to ZygoteHooks\n\nThis will enable ActivityManagerService to select packages exempt\nfrom enforcement of hidden API access restrictions.\n\nTest: m test-art-host\nBug: 64382372\nChange-Id: I485051ab6fff9c6b89ef67db4f8e6ed4459c6ad1\n"
    },
    {
      "commit": "13a92d5273d1a362fb54c95ec143cc5fff68f28f",
      "tree": "179a430862e5afd4beae38cccab3d1ac04d1ee9e",
      "parents": [
        "fa0b0db6fbdcbf20bf78c53500ac98cfc3a26208",
        "fb6b0b1b04081f9ef7a240f702d8ce4e61a02e9f"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jan 15 16:43:32 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 15 16:43:32 2018 +0000"
      },
      "message": "Merge \"ART: Add support for VMStack.getAnnotatedStackTrace\""
    },
    {
      "commit": "013fd8073f3ece22b0bba1853d3f3430c8a9e4bd",
      "tree": "d1fb1ce709d4927a8b5f5d7fc673b6932ca4977a",
      "parents": [
        "a7e4a15ba7b40fbe1ecd76ce0d99de90aa42201f"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 11 22:55:24 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Jan 12 12:47:13 2018 -0800"
      },
      "message": "Create an ART-independent DexFileLoader\n\nOpening DEX files should not rely on instantiating a runtime or having a\nlarge number of dependencies on runtime components.  This CL makes\nDexFileLoader a stub class that is independent of ART, and introduces a\nsubclass ArtDexFileLoader that contains the current implementations.\n\nBug: 22322814\nTest: make -j 50 test-art-host\nChange-Id: Ia6e92ae93c347057ea0c10455525239cbbe42c03\n"
    },
    {
      "commit": "fb6b0b1b04081f9ef7a240f702d8ce4e61a02e9f",
      "tree": "ae24c7d7bf4493ab9dc881c7b3b95ef8f706974d",
      "parents": [
        "680e88ba30d1c599c5eaab4a207db3e39bf2d57f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Dec 11 20:47:56 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jan 08 18:48:47 2018 -0800"
      },
      "message": "ART: Add support for VMStack.getAnnotatedStackTrace\n\nAdd Thread.CreateAnnotatedStackTrace to return an array that\ncontains an AnnotatedStackTraceElement for each stack frame,\nwith the StackTraceElement describing the frame, an array\ncontaining all objects that are locked at the described location,\nand optionally for the top frame an object the thread is blocked\non, waiting for or sleeping on.\n\nAdd a test.\n\nBug: 70538431\nTest: m test-art-host\nTest: art/test/testrunner/testrunner.py -b --host -t 168\nChange-Id: I0d92e3d8182c4a592549a6445854816f71afd29e\n"
    },
    {
      "commit": "4cb6347613e37c98bf40d8bb5e6583ac81f4d856",
      "tree": "065ca3d73f5f8b0a86dab92b5b4784a7e4486707",
      "parents": [
        "118c59cf6af50e128d29609c9046a4af15826976",
        "7b38e692caa474bf0470349d016ef8f4502d50b9"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jan 08 09:40:50 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 08 09:40:50 2018 +0000"
      },
      "message": "Merge \"ART: Take classloader into account for AttachAgent\""
    },
    {
      "commit": "9e734c7ab4599d7747a05db0dc73c7b668cb6683",
      "tree": "dce1d1993734a947fb2e6f626eb1b425cb72143b",
      "parents": [
        "b496af808eaf3af5ebac50aef4fbec33323b5016"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 04 17:56:19 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Jan 05 11:07:19 2018 -0800"
      },
      "message": "Create dex subdirectory\n\nMove all the DexFile related source to a common subdirectory dex/ of\nruntime.\n\nBug: 71361973\nTest: make -j 50 test-art-host\nChange-Id: I59e984ed660b93e0776556308be3d653722f5223\n"
    },
    {
      "commit": "7b38e692caa474bf0470349d016ef8f4502d50b9",
      "tree": "df3dbcdce59af2ecaddb124bf315132593b3eedb",
      "parents": [
        "b496af808eaf3af5ebac50aef4fbec33323b5016"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 28 19:18:28 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jan 05 10:16:18 2018 -0800"
      },
      "message": "ART: Take classloader into account for AttachAgent\n\nTake a classloader into account for attaching an agent, if given.\nThis will use the library path from the classloader to find the\nagent library.\n\nSwitch to libnativeloader to do the actual loading.\n\nBug: 70901841\nTest: m test-art-host\nChange-Id: I59ec55178792bc738fb06e0299522e207dd4a784\n"
    },
    {
      "commit": "6362e233c6fddd1c18bb0fb4520c575bf190bc69",
      "tree": "57440ea457b460b0ccffa89bedd1f08a92d7f399",
      "parents": [
        "ebe55a88b145a97a4261519a578e9ce1ba587316"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Dec 11 20:43:25 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 27 16:48:22 2017 -0800"
      },
      "message": "ART: Refactor VMStack code\n\nMake GetThreadStack generic wrt/ a function being called to generate the\nstack. In preparation for new code.\n\nBug: 70538431\nTest: m test-art-host\nChange-Id: I7e2b6583b28ad89bc645acdc9549f2f0a25ea055\n"
    },
    {
      "commit": "55256cb60e11d4fac71affb4b9760a2931a3598d",
      "tree": "fc1ed6885b013e0aa2bcfd9ef4dd94fec29bd382",
      "parents": [
        "64bae9fb677aa0e2406d13ea9f8ebaa92e16f978"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Dec 21 17:07:11 2017 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Dec 22 10:11:39 2017 -0800"
      },
      "message": "Extensions to check JNI.\n\nEnsure critical lock isn\u0027t held when returning from a down-call.\nLog a warning if the critical lock is held for a significant period of\ntime.\nRefactor JNIEnvExt to be a class rather than a struct.\n\nTest: mma test-art-host\n\nChange-Id: I4d149cb04d3a7308a22b92b196e51e2f1ae17ede\n"
    },
    {
      "commit": "403207107da7f11525c4d305184c56b35ec1c17a",
      "tree": "f97f080fcfa8051df18536e97a33582ee4bbbc6a",
      "parents": [
        "ba3a790338725a37ecd4cb314c4a6147e29aef38"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 14 11:52:04 2017 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 19 09:26:11 2017 -0800"
      },
      "message": "Add support for selecting alternate JDWP implementations\n\nChange JDWP options parsing to take place later and add a\n-XjdwpProvider:_ option that can be used by the runtime to select an\nappropriate JDWP provider. The argument is a string.\n\nIf \u0027none\u0027 is given JDWP will be totally disabled.\n\nIf \u0027internal\u0027 is given the current internal JDWP implementation is\nused.\n\nIf \u0027default\u0027 is given the \u0027internal\u0027 JDWP implementation will\ncurrently be used.\n\nOther values will be added in the future.\n\nAlso adds a runtime callback that will be invoked when the runtime\nwants to start or stop the debugger (namely at the post-zygote fork\nand just before exit) and check if a debugger is availible.\n\nAlso add \u0027-XjdwpOptions:_\u0027 in preparation for the eventual removal of\nthe existing -Xrunjdwp\u003d_ and -Xagentlib:jdwp\u003d_ as top-level options.\nAll of these options now store their arguments as a std::string to be\ninterpreted by the JDWP implementation as it sees fit. Also change the\njdwpOptions to default to transport\u003ddt_android_adb if there is not one\nspecified and it is available. This will make changing the default\ntransport based on the JDWP provider easier.\n\nThese new options are needed to allow us to support both the old,\ninternal, JDWP implementation as its replacement is tested and\nverified. This lets us switch between them with little difficulty.\n\nWe will probably remove one or both of these options once we have\nconfidence that the new jdwp implementation has stuck.\n\nTest: ./test.py --host -j50\nTest: ./test/run-test --host --debug 001-HelloWorld\nTest: Manual, flash walleye, debug app\n\nBug: 62821960\n\nChange-Id: Ie31db6b6f7d76a03d4ab8e178fcf298ed0eec203\n"
    },
    {
      "commit": "666ee3d7c6039c80e75287e311895bd6a9b01e9f",
      "tree": "5e65f39ff7cc83af4be3b691c247d7348052f854",
      "parents": [
        "890111968fbd3f5ae528d97e42984c12a3dd27bd"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 11 18:37:36 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 12 13:48:02 2017 +0000"
      },
      "message": "Do not pass DexFile to ClassLinker::Lookup/ResolveType().\n\nThe DexFile can be easily retrieved from the DexCache,\nso reduce the number of arguments that need to be passed.\n\nAlso refactor the code to avoid doing the DexCache lookup\ntwice and avoid unnecessary read barriers in the initial\nDexCache lookup (also for Lookup/ResolveField()).\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: Idea9aa42b6a5bade947e93e330b1abdb9d11b2da\n"
    },
    {
      "commit": "dcc528d2c7d5ac2cc075d4c965fdf702421d0f43",
      "tree": "e070070248facaf4c23f0ceb4a713de29b681462",
      "parents": [
        "57943810cfc789da890d73621741729da5feaaf8"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 07 13:37:10 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 07 16:26:11 2017 -0800"
      },
      "message": "ART: Move runtime-debug flags to own files\n\nTo reduce the need for base/logging.h and separate out concerns.\n\nTest: m\nChange-Id: Ib373357325c6e622f608ada341594c3bea2fce2e\n"
    },
    {
      "commit": "57943810cfc789da890d73621741729da5feaaf8",
      "tree": "367677a982a45af98ffe3e79543615875e8550b4",
      "parents": [
        "d5153627778e71ef68b510ce03c77467fa4d85bd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 06 21:39:13 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 07 16:26:11 2017 -0800"
      },
      "message": "ART: Replace base/logging with android-base/logging\n\nReplace wherever possible. ART\u0027s base/logging is now mainly VLOG\nand initialization code that is unnecessary to pull in and makes\nchanges to verbose logging more painful than they have to be.\n\nTest: m test-art-host\nChange-Id: I3e3a4672ba5b621e57590a526c7d1c8b749e4f6e\n"
    },
    {
      "commit": "175706ea30c04c7d428629cc7290b42498a0d1fa",
      "tree": "f9f51cc34146bf7aa01d05251c0d4a8288e69a4e",
      "parents": [
        "a43a89470597a1d34a403add4f82cfc155e7bc33",
        "660be6ff67870d2512230b13effefdbc5abe43e4"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 01 10:44:26 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 01 10:44:26 2017 +0000"
      },
      "message": "Merge \"Add VMDebug.getInstancesOfClasses API.\""
    },
    {
      "commit": "660be6ff67870d2512230b13effefdbc5abe43e4",
      "tree": "4a4cde728d6aeb2ea8f1ef63c7e7f82383a9acd0",
      "parents": [
        "a602c56ba1a82d70eb40de35e7c716477a46ee28"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Nov 22 16:12:29 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Dec 01 09:10:48 2017 +0000"
      },
      "message": "Add VMDebug.getInstancesOfClasses API.\n\nThe API can be used to iterate over instances of a given type on the\nheap.\n\nThe GetInstancesOfClassesBenchmark run on bullhead shows the run time\nof the API grows linearly in the number of classes, C, to get instances\nof and the number of total instances, N, allocated on the heap.\n\nC   N\u003d~2^18   N\u003d~2^19\n1      13ms      21ms\n2      26ms      43ms\n4      53ms      87ms\n\nBug: 69729799\nTest: ./test/testrunner/testrunner.py -t 099-vmdebug -b --host\n\nChange-Id: Ied053d19760e656012e2577776f75a1cc0a14ac3\n"
    },
    {
      "commit": "24ed94f83404bff97663142326762506458fd8cc",
      "tree": "b60c8160f256b67348fbc5bc3fa1b818574ce2c5",
      "parents": [
        "b71fe8329fa2bf5a0a4f81fd44a097f43d7dfd8a"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Nov 16 11:54:29 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Nov 28 12:52:53 2017 +0000"
      },
      "message": "Add DexFile.getStaticSizeOfFile function.\n\nBug: b/69729799\nTest: art/test/testrunner/testrunner.py -b -t 071-dexfile-get-static-size\n\nChange-Id: I7d524bd0f8c8bab74b1831b1db35f5952e8ce2aa\n"
    },
    {
      "commit": "8c2b929696cac235e8fd8bf4cae0ca751603b570",
      "tree": "ef280c4ff76d44ba867d65564ec192ba4a90e874",
      "parents": [
        "a16fec549253638268dda3d83e6e34a500cbfc1c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Nov 09 13:21:01 2017 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 14 17:09:35 2017 -0800"
      },
      "message": "Add JVMTI DDMS extension method and event.\n\nAdd a new jvmti extension method\n\u0027com.android.art.internal.ddm.process_chunk\u0027 that can be used to\nrequest that the system process a DDMS chunk with a given type and\ndata payload. It returns the processed chunk type and data. Agents can\nuse this to interact with DDMS.\n\nAlso add a new jvmti extension event\n\u0027com.android.art.internal.ddm.publish_chunk\u0027 that will be called\nwhenever the system wishes to send an unrequested chunk of data to be\nprocessed. This is triggered by code executing \u0027DdmServer#sendChunk\u0027\nor by other internal mechanisms.\n\nBoth of these extensions are provided mainly to aid in the maintenence\nof backwards compatibility with existing DDMS applications.  Generally\nagents should prefer to use the normal JVMTI events and controls over\ninterpreting DDMS data or calling DDMS functions.\n\nBug: 62821960\nTest: ./test.py --host -j50\nTest: ./art/tools/run-jdwp-tests.sh --mode\u003dhost \\\n            --test org.apache.harmony.jpda.tests.jdwp.DDM.DDMTest\nChange-Id: I39f22d3d096d12b59713ec7b8b0c08d0d68ff422\n"
    },
    {
      "commit": "b0a6aeee250945b1d156ebab94053380f2e5a3c5",
      "tree": "7ddb52bb20997b8f1c81be3df2250949a088e697",
      "parents": [
        "0db16e00e3927445585a588499731c58c1ae1bef"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 27 10:34:04 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 10 08:30:36 2017 +0000"
      },
      "message": "Record @{Fast,Critical}Native in method\u0027s access flags.\n\nRepurpose the old kAccFastNative flag (which wasn\u0027t actually\nused for some time) and define a new kAccCriticalNative flag\nto record the native method\u0027s annotation-based kind. This\navoids repeated determination of the kind from GenericJNI.\nAnd making two transitions to runnable and back (using the\nScopedObjectAccess) from GenericJniMethodEnd() for normal\nnative methods just to determine that we need to transition\nto runnable was really weird.\n\nSince the IsFastNative() function now records the presence\nof the @FastNative annotation, synchronized @FastNative\nmethod calls now avoid thread state transitions.\n\nWhen initializing the Runtime without a boot image, the\nWellKnowClasses may not yet be initialized, so relax the\nDCheckNativeAnnotation() to take that into account.\n\nAlso revert\n    https://android-review.googlesource.com/509715\nas the annotation checks are now much faster.\n\nBug: 65574695\nBug: 35644369\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nChange-Id: I2fc5ba192b9ce710a0e9202977b4f9543e387efe\n"
    },
    {
      "commit": "33bff25bcd7a02d35c54f63740eadb1a4833fc92",
      "tree": "553db4f60878acf2a0fa7036a739d406df9a29b7",
      "parents": [
        "321b3ca9a36d769283c64d4bdee0798db80af524"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 01 14:35:42 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 02 10:11:02 2017 +0000"
      },
      "message": "ART: Make InstructionSet an enum class and add kLast.\n\nAdding InstructionSet::kLast shall make it easier to encode\nthe InstructionSet in fewer bits using BitField\u003c\u003e. However,\nintroducing `kLast` into the `art` namespace is not a good\nidea, so we change the InstructionSet to an enum class.\nThis also uncovered a case of InstructionSet::kNone being\nerroneously used instead of vixl32::Condition::None(), so\nit\u0027s good to remove `kNone` from the `art` namespace.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I6fa6168dfba4ed6da86d021a69c80224f09997a6\n"
    },
    {
      "commit": "ca4e1014634aefb9c2dbb431d6b312e4ad912ca2",
      "tree": "14536ce9ee60c1c55c55d20d99845128dbfbc548",
      "parents": [
        "7e26cc3b2c1c23d4e03961dfec70bf24d0b6e06c",
        "891a50e9dc0f02ee34bd7348f80b621249153af5"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Nov 01 20:30:03 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 01 20:30:03 2017 +0000"
      },
      "message": "Merge \"Separate file utilities from utils.cc\""
    }
  ],
  "next": "891a50e9dc0f02ee34bd7348f80b621249153af5"
}
