)]}'
{
  "log": [
    {
      "commit": "9ce340f829f836560278ecd078fbefcf19c9d629",
      "tree": "3327d6d7dd3c0ff86861cdab67791ee7c8dbe3b8",
      "parents": [
        "d4fc62c66328c0944348a314e3770b4f2b8006ce"
      ],
      "author": {
        "name": "xueliang.zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Tue Jan 22 17:46:09 2019 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Aug 15 20:35:11 2019 +0000"
      },
      "message": "ARM64: toFloat() intrinsics with ARMv8 FP16.\n\nThis CL intrinsifies toFloat() method with ARMv8.2 FP16 instructions.\n\nThis CL depends on the android framework and libcore changes:\nmoving FP16 implementations into libcore.\n\nTested with local micro benchmark on Pixel 3, compared to original\nandroid.util.Half.toFloat() Java implementation, this intrinsic is\n50% faster.\n\nIn real-life case, the FP16 toFloat() intrinsic can help\naccelerate ColorLong ARGB decoding in Android framework.\n\nThis intrinsic implementation archieves bit-level compatibility with the\noriginal Java implementation android.util.Half.toFloat().\n\nTest: 580-fp16\nTest: art/test/testrunner/run_build_test_target.py -j80 art-test-javac\nTest: test-art-host, test-art-target\n\nChange-Id: I059c69747067b84f2c532465e32a1dcd3c25269f\n"
    },
    {
      "commit": "b74f307cda4b1b186dcbdf6c84f1ee02a50ad3cb",
      "tree": "080b8c9b4317e2b5f4c942d0c7be6dbb18200dfa",
      "parents": [
        "1db789ea17f87415a38d72066ca0baf3f5252474"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 01 15:19:00 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 02 15:59:33 2019 +0000"
      },
      "message": "ART: IWYU for HiddenApi domain\n\nMake the domain a known char storage and forward-declare in DexFile\nto significantly reduce the list of transitive includes. Fix up\nmissing includes.\n\nTest: mmma art\nChange-Id: I9d43113e982fc0b509fd9a8168c6788e9431500a\n"
    },
    {
      "commit": "c63d56637c224a281f358aec03df07f944eaf498",
      "tree": "62a31ee4ec59ae5e8a73e24be1a48c9cd2a3c844",
      "parents": [
        "0039bc553788c18ba7f619b555d744f548ae749e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 10 00:31:46 2019 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 11 06:57:08 2019 +0000"
      },
      "message": "Update intrinsic Unsafe.getLong() after moving to core platform API\n\nBug: 129062985\nBug: 130281183\nTest: compiles (DCHECK in SetIntrinsic would fail otherwise)\nChange-Id: If891f4be97ca4622db6f03631c6fd50536dd3ff9\n"
    },
    {
      "commit": "31cc2795f72e8cf5ecced188e6b4198a236a26ce",
      "tree": "8f02711286076c1dd025fd82bdb1ddd1b3ff4a78",
      "parents": [
        "2df4bfb2abf922a3c7972333f2bcc9655b122080"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 10 00:31:15 2019 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 11 06:57:08 2019 +0000"
      },
      "message": "Fix hidden API DCHECK in ArtMethod::SetIntrinsic\n\nSetIntrinsic makes sure that the bits used by hidden API in ArtMethod\u0027s\naccess flags do not change after it has been replaced with an intrinsic\nand hardcoded access flags. This DCHECK was incorrect when the access\nflags have been modified in order to deduplicate logged warnings. This\nwould happen when compiling the boot image, following a core platform\nAPI violation during CompileAll and subsequent intrinsics\ninitialization.\n\nChange the DCHECK to recompute the access flags from the correspoding\ndex file to avoid the issue.\n\nTest: compiles\nBug: 129063331\nChange-Id: I2a9a125392a89d5efcedfec5c5b9af7d4b863fc9\n"
    },
    {
      "commit": "4de9bb69107f5f194697e6c3279d2ca1887a8245",
      "tree": "7a2eb9436b8a407a375f3a96bbd23c358f771435",
      "parents": [
        "5dbd02a497f4bbdf33ae37e715159fe33594a02a"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 03 13:06:17 2019 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 03 15:11:28 2019 +0000"
      },
      "message": "Print allowed/denied in hiddenapi warning message\n\nThe error message when accessing hidden APIs currently contains only\nmethod/field signature, API list and access method, but fails to\nmention whether access was granted or denied. Add that information in.\n\nTest: manual\nChange-Id: Ice5ee448b6dc842f5f3f10fa8e0a59b8640abb7f\n"
    },
    {
      "commit": "a5c3a808020d81447bc19d07a99288e9d28a6e6c",
      "tree": "83a9b1eac0a7209e6e407c0462d0b1ba8f95f62c",
      "parents": [
        "98fb083a30e9b37685f943e2923e65e60e0a0971"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Mar 08 14:59:41 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 14 14:34:20 2019 +0000"
      },
      "message": "hiddenapi domain: Use oat dex file location if available\n\nTo determine the caller and callee domains of a hidden API access check,\nthe logic will test the dex location against several known system\nlocations. However, DexFile instances backed by an OatFile have relative\ndex locations to avoid need to rewrite the .oat file when moving files\nbetween folders. The canonical dex location is stored in the OatDexFile\ninstead.\n\nBecause the OatDexFile data structure is not available in libdexfile,\nmove the domain resolution logic to hidden_api.cc and resolve when dex\nfiles is first registered with the class linker.\n\nTest: m test-art-gtest\nTest: camera does not crash\nBug: 126901248\nBug: 127852529\nChange-Id: Id494b1c47a2199c227dec046174e08320b9cbc3b\n"
    },
    {
      "commit": "d51e574e05a66bd6706f6e9e05f8abe0f8581551",
      "tree": "f782a63e1a530a3664724b98ecc8f20c0c6c66a4",
      "parents": [
        "e7e26d10a7a1446b42c00104b162bf07e7c01a04"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Feb 28 14:47:32 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 05 15:17:01 2019 +0000"
      },
      "message": "Reenable core platform API violation warnings, dedupe\n\nPrint a warning the first time a non-core platform API member is\naccessed and add kAccCorePlatformApi to its access flags to not report\nit next time. Only do this when policy is kJustWarn. This prevents\nlogspam.\n\nBug: 125701194\nBug: 119068555\nTest: compiles, boots\nTest: art/test.py -b -r -t 674\nChange-Id: Ia7d6ba4f1f30fbea7bdea1670183c17f84ca1150\n"
    },
    {
      "commit": "e7e26d10a7a1446b42c00104b162bf07e7c01a04",
      "tree": "fb571d4903a499d9effae5940440af5159b8548e",
      "parents": [
        "815d5e5304a5b57db64d6829813a14e464d5c55f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Feb 28 15:04:14 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 05 15:17:01 2019 +0000"
      },
      "message": "Assign non-runtime /apex/* dex files to platform domain\n\nUntil now only /system/framework and /apex/com.android.runtime were\nknown locations, assigning \"platform\" domain to the former and\n\"core-platform\" domain to the latter. The media and conscrypt modules\nwere left in the \"application\" domain.\n\nThis patch adds a hardcoded path to the apex root and assigns all dex\nfiles in subdirectories to the \"platform\" domain. This affects both\nconscrypt and media modules.\n\nAny other dex files on boot classpath are also assigned to \"platform\"\non first access. A warning is printed in such case and it is now deduped\nto avoid logspam.\n\nBug: 125701194\nBug: 119068555\nTest: compiles, boots, no conscrypt/media warnings about missing domain\nTest: art/test.py -b -r -t 674\nChange-Id: I33bef18459741095d3d99b541fc88b21cf547800\n"
    },
    {
      "commit": "6a1dab4184b8048209cdbebac5482393475e9b76",
      "tree": "809f7a486e0f11d25d01afd67b750164bd95bd9a",
      "parents": [
        "d8e040145be0b8e240aef0745651cc14bcacdb9d"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Feb 28 18:45:15 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Mar 04 10:09:52 2019 +0000"
      },
      "message": "Fix handling of proxy classes in hidden_api.h\n\nInspecting proxy classes with reflection/JNI could result in an ART\ncrash because hiddenapi::detail::GetDexFlags() assumed that all classes\nhave a class def index and can be iterated over. This actually revealed\na more general issue with proxy classes.\n\nThis patch replaces a proxy method with the interface method at the\nbeginning of ShouldDenyAccessToMember. This takes care of all proxy\nmethods and will instead look at hidden API flags of the interface\nmethods. What\u0027s left is proxy fields - both synthetic implementation\ndetails. Special case those and assign to greylist for now.\n\nBug: 124218696\nTest: art/test.py -r -t 691-hiddenapi-proxy\nChange-Id: I36c961cd4ffb196641db162818a0f9659aed8a32\n"
    },
    {
      "commit": "6ad020df482b6113b7949c1c36d71b0fdadfa6a2",
      "tree": "1cc8acd0ea3370dec8f7b6bb5c016e29241e779d",
      "parents": [
        "0faaf9cd2fc8eb386bad9d96d86217b14308b243"
      ],
      "author": {
        "name": "Andrei Onea",
        "email": "andreionea@google.com",
        "time": "Mon Feb 18 12:15:51 2019 +0000"
      },
      "committer": {
        "name": "Andrei-Valentin Onea",
        "email": "andreionea@google.com",
        "time": "Wed Feb 20 12:58:29 2019 +0000"
      },
      "message": "Pass sampled value to hidden api access logger\n\nThe hidden api access logger can use multiple logging methods, each with\nits own sampling rate. ART will only be aware of the maximum sampling\nrate, and it will be up to the logger to choose which logging method or\nmethods will be chosen.\n\nTest: m\nBug: 119217680\n\n(cherry picked from commit 5746f795e254fc74ab54ba4e59bc0c5e994efb03)\n\nChange-Id: Ida8d494cb280cb94cd27adf1264776d3e9306471\nMerged-In: I888e55c76ea7a032c35e880a981d1fc9dd4ba6b6\n"
    },
    {
      "commit": "436e1428b7f9fce912581c7f9fff08da6311d8cc",
      "tree": "44e460641634245213f92695c09114964e114f78",
      "parents": [
        "62d986b0a18b7d4616915c9545678bc23f843518",
        "4bcd65753c1e49ceba2c41983f26af81ae319670"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 04 16:35:45 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 04 16:35:45 2019 +0000"
      },
      "message": "Merge \"Take hidden API into account during getDeclaredMethod()\""
    },
    {
      "commit": "4bcd65753c1e49ceba2c41983f26af81ae319670",
      "tree": "3fc7bd53d37448621726dc508f173490807af9c7",
      "parents": [
        "2da3cbb4af20a64108e474c0bbbe0cc5d3af2aa2"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Sat Feb 02 20:08:44 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 04 15:00:20 2019 +0000"
      },
      "message": "Take hidden API into account during getDeclaredMethod()\n\nGenerics make it possible for two methods to have the same name and list\nof parameters but differ in their return type. Class.getDeclaredMethod()\ndoes not allow callers to specify the type, so either of the matching\nmethods can be returned (ART will prefer the non-synthetic one).\n\nHowever, Class::GetDeclaredMethodInternal() did not use to take hidden API\ninto account and could return a hidden method, despite a non-hidden one\nbeing available. The reflective call would then reject the method and\nthrow NoSuchMethodException.\n\nThis patch modifies Class:GetDeclaredMethodInternal() to consider:\n(a) hidden/non-hidden\n(b) virtual/direct\n(c) synthetic/non-synthetic\nin that decreasing order of importance and pick the best matching\nmethod. The hiddenness checks are performed with AccessMethod::kNone\nso as to not trigger warnings. A hidden method may still be returned and\nthe caller should do the access check again with the appropriate\nAccessMethod.\n\nBug: 122291025\nTest: art/test.py -r -t 690-hiddenapi-same-name-methods\nChange-Id: Iaee780c1e87f5587f51e24b517b2b37101c729e3\n"
    },
    {
      "commit": "a2d2bc2ed74e35c46b7c6aa5172c652f63679fa3",
      "tree": "4964fce11a9c49086b46aaf08be75f3262462b3d",
      "parents": [
        "4ee4561f2153f3b0bc3be2e781488a97c73ca58e"
      ],
      "author": {
        "name": "Andrei Onea",
        "email": "andreionea@google.com",
        "time": "Fri Jan 25 16:18:53 2019 +0000"
      },
      "committer": {
        "name": "Andrei-Valentin Onea",
        "email": "andreionea@google.com",
        "time": "Wed Jan 30 10:24:00 2019 +0000"
      },
      "message": "Replace libmetricslogger logging with up-call to Java for hidden api\n\nUse VMRuntime.hiddenApiUsedWith{JNI,Reflection} instead of depending on\nlibmetricslogger\n\nTopic: hidden-api-reporting-upcall\nTest: m\nBug: 119217680\nChange-Id: Ifaf0b0e4ae271f6fcd37e8d7cf917a3b81d8ddae\nMerged-In: I3292f1d20cc8635391cddc3ba60d4a80b578fa82\n"
    },
    {
      "commit": "a6d61840095448ca4698bd60b0a58cb9a08d4571",
      "tree": "fd12fa24b2aa48c2f26745abf76b0234d8f60874",
      "parents": [
        "548da10bd80ae0b1192b135192e914e10491217e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Jan 22 22:44:11 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Jan 22 22:44:11 2019 +0000"
      },
      "message": "Temporarily disable CorePlatformApi logging\n\nWarnings are causing logspam all over. Temporarily disable it until\nthe root cause(s) are fixed.\n\nBug: 123226039\nBug: 123239324\nBug: 123143676\nTest: compiles\nChange-Id: Ibcad0e28dd738cc31cd0ad2a98d7746ce140ed09\n"
    },
    {
      "commit": "e7681823f8259c8c04ce0c361746216606784e69",
      "tree": "8bd248fc6be126d7d4e55bb4072ed24b2851ebbd",
      "parents": [
        "90faceb71e25748172ba6369209f8a2a66735394"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Dec 14 16:25:33 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jan 21 10:22:27 2019 +0000"
      },
      "message": "hiddenapi: Print warnings for @CorePlatformApi violations\n\nWhen accessing a method/field at runtime, determine the context of both\nthe caller and the callee, and add new logic for the case\n\"platform -\u003e core-platform\" which used to be always allowed.\n\nIf the callee is marked with kAccCorePlatformApi, access is allowed.\nIf not, a warning is printed into logcat.\n\nBug: 119068555\nTest: 674-hiddenapi\nChange-Id: I64839596bf6eb06d7a169fd59b18fd82c140ce6e\n"
    },
    {
      "commit": "90faceb71e25748172ba6369209f8a2a66735394",
      "tree": "64707bbd718b29de9a19c01b12b0cc872685bb13",
      "parents": [
        "62a4bcf3fe11e6800f5d451b41003c135358ed6a"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Dec 14 14:36:15 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jan 21 09:48:59 2019 +0000"
      },
      "message": "hiddenapi: Support \u0027core-platform-api\u0027 flag\n\nAdd support for parsing @CorePlatformApi stubs and encoding it in\nhiddenapi dex flags of the corresponding fields/methods.\n\n(1) The CL refactors hiddenapi::ApiList class to store a second value:\na bit vector of \"domain API\" flags. These are intended for encoding\nmembership in a set of API stubs only available to certain callers,\ne.g. @CorePlatformApi when platform code calls core platform or\n@TestApi for CTS tests.\n\n(2) Parse @CorePlatformApi stubs and set domain flags for its members.\n\n(3) Parse the flags at runtime and set kAccCorePlatformApi access flag\non the corresponding ArtField/ArtMethod objects.\n\nBug: 119068555\nTest: m appcompat\nTest: dexlayout -b \u003ccore-oj jar\u003e | grep \u0027CORE-PLATFORM-API\u0027\nChange-Id: Idbfa6d3af7459258a5a0b6da7c03c037a577eb75\n"
    },
    {
      "commit": "c5a96e4a8ea9f78135c5cd3df7e1fc965104182e",
      "tree": "662506a68d056c382f6882b65bb28dd3f09366d7",
      "parents": [
        "5d938ef154f504ada9c8fc9c9361fe69aabbe8b9"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 09 10:04:45 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 09 10:04:45 2019 +0000"
      },
      "message": "Do not enter hidden API slow path when policy\u003d\u003dDisabled\n\nAfter a recent refactor the hidden API access check logic would enter\nslow path when the enforcement policy is set to kDisabled. This did\nnot affect correctness but could have a performance impact. Moreover,\na debuggable process would see logcat warnings printed for every such\naccess despite it being granted. This caused occasional logcat buffer\noverflows in killswitch CTS tests and their resulting flakiness.\n\nThe patch exits from ShouldDenyAccessToMember early if policy is\nkDisabled and adds a DCHECK in ShouldDenyAccessToMemberImpl to assert\nslow path is not entered under the policy.\n\nTest: m test-art-host-gtest-hidden_api_test\nChange-Id: I217d9914d2645af11ce84c03a0ed778a82bc760f\n"
    },
    {
      "commit": "776a7c294f6356b314505369679bffc73f4a345e",
      "tree": "ec1d678a0923d2c7ec869f806f5b4860e1a1a721",
      "parents": [
        "8ceeb2ede9a7280fab618dfcb55f424a79dc00ca"
      ],
      "author": {
        "name": "Evgeny Astigeevich",
        "email": "evgeny.astigeevich@linaro.org",
        "time": "Mon Dec 17 11:40:34 2018 +0000"
      },
      "committer": {
        "name": "Evgeny Astigeevich",
        "email": "evgeny.astigeevich@linaro.org",
        "time": "Wed Dec 19 23:01:02 2018 +0000"
      },
      "message": "ART: Add CRC32.updateByteBuffer intrinsic for ARM64\n\nUse crc32 instructions for\njava.util.zip.CRC32.updateByteBuffer(int, long, int, int).\n\nNote that CRC32 is an optional feature in ARMv8, this intrinsic\nis only enabled for devices supporting the CRC32 instructions.\n\nThe performance of the intrinsic is the same as the performance of the\nCRC32.updateBytes intrinsic. However the intrinsic does not have a\nrestriction on the size of the byte buffer. For big input data\nthe intrinsic will be faster than CRC32.updateBytes.\n\nTest: m test-art-target-gtest\nTest: m test-art-host-gtest\nTest: art/test.py --target --optimizing\nTest: art/test.py --host --optimizing\nTest: 580-crc32\n\nChange-Id: I6b6160b56e829731402bd5fc56bcac59664f634d\n"
    },
    {
      "commit": "a6dd280a61bdb09f608dd920d23394a5b6223ef4",
      "tree": "b1fad48bb4d4ed7ca39ec5c250d20d1238739028",
      "parents": [
        "17ed987eeebdebbd1b923c3c2a6887a233cb7517",
        "15c5b97d0093a804881acf3a53bda8b6b4c1521d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 07 10:19:34 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 07 10:19:34 2018 +0000"
      },
      "message": "Merge \"ART: Add CRC32.updateBytes intrinsic for ARM64\""
    },
    {
      "commit": "15c5b97d0093a804881acf3a53bda8b6b4c1521d",
      "tree": "ad6befd10a3d6dee0f1667d254374e267ad89ce7",
      "parents": [
        "cfc4b3ac67b364d753d970d1adcf97668114e959"
      ],
      "author": {
        "name": "Evgeny Astigeevich",
        "email": "evgeny.astigeevich@linaro.org",
        "time": "Tue Nov 20 13:41:40 2018 +0000"
      },
      "committer": {
        "name": "Evgeny Astigeevich",
        "email": "evgeny.astigeevich@linaro.org",
        "time": "Thu Dec 06 22:19:23 2018 +0000"
      },
      "message": "ART: Add CRC32.updateBytes intrinsic for ARM64\n\nUse crc32 instructions for\njava.util.zip.CRC32.updateBytes(int,byte[],int,int).\n\nThe intrinsic is used if a number of processed bytes is less or equal to\nkCRC32UpdateBytesThreshold. If it exceeds kCRC32UpdateBytesThreshold the\ncore library provided function is used.\n\nNote that CRC32 is an optional feature in ARMv8, this intrinsic\nis only enabled for devices supporting the CRC32 instructions.\n\nThe CL is based on code from tim.zhang@linaro.org.\n\nPerformance improvements - speedup:\narray size | Cortex-A53 | Cortex-A57\n------------------------------------\n128        | 14x        | 20x\n256        | 10x        | 14x\n512        | 8x         | 11x\n1024       | 7x         | 9x\n2048       | 6x         | 8x\n4096       | 5x         | 7x\n8192       | 5x         | 7x\n16384      | 5x         | 7x\n32768      | 5x         | 7x\n65536      | 5x         | 7x\n\nTest: m test-art-target-gtest\nTest: m test-art-host-gtest\nTest: art/test/testrunner/testrunner.py --target --optimizing --interpreter\nTest: art/test/testrunner/testrunner.py --target --jit\nTest: art/test/testrunner/testrunner.py --host --optimizing --interpreter\nTest: art/test/testrunner/testrunner.py --host --jit\nTest: 580-crc32\n\nChange-Id: I0054cea41b5fc3e712e18b0afc7e3eacbf41feb6\n"
    },
    {
      "commit": "7fbc4a59ba2e60d869313d7961662430df83b2cb",
      "tree": "59520285df8d2075412ddc566a0d4d96d4c7e109",
      "parents": [
        "7cc45fd1dbcf5704e442d0443e437aa2ae3fe21b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 28 08:26:47 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 06 11:37:19 2018 -0800"
      },
      "message": "ART: Move to using locks.h instead of mutex.h\n\nWhen only annotating lock requirements, use locks.h.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I1608b03254712feff0072ebad012c3af0cc3dda4\n"
    },
    {
      "commit": "1a6586327d9de6374f9e7ca98d071f2943b03c99",
      "tree": "1d118af8f32855ef0036080d5e8a560f14e5e482",
      "parents": [
        "d378a567a435a80be9ab7eb8bfe0359c1240c0ff"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Sat Dec 01 17:54:26 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Dec 03 20:19:40 2018 +0000"
      },
      "message": "Keep pointer to original DexFile during JVMTI redefine for hiddenapi\n\nJVMTI redefine overwrites the pointer to the class\u0027 DexFile which\nprevents access checks from reading the hiddenapi flags store. Store\nthe pointer in ClassExt together with the original ClassDef index\nto preserve the access to flags store. Because method/field indices\nare still lost, the corresponding dex member is found using string\ncomparison of member\u0027s name and type.\n\nBug: 119688837\nTest: 999-redefine-hiddenapi\nChange-Id: Ifdf35668e838869a971233bbaae61851014658b1\n"
    },
    {
      "commit": "dcfa89bfc06a6c211bbb64fa81313eaf6454ab67",
      "tree": "4aaf6da88861029e387525957bf68796cf95648c",
      "parents": [
        "fd667d4165aefe51010e4fe3bd81b820ed9884ef"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Oct 31 11:04:10 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Nov 22 12:49:26 2018 +0000"
      },
      "message": "Rename and reorganize hiddenapi::ApiList\n\nChange values of ApiList flags to make them easier to extend in the\nfuture and unify naming across all components. Light greylist is now\njust \"Greylist\", dark greylist becomes \"GreylistMaxO\".\n\nNote that the version code in \"GreylistMaxO\" must also include any\nmaintenance releases, i.e. entries on \"GreylistMaxO\" are accessible\nto apps with targetSdkVersion\u003c\u003d27 (O MR1).\n\nTest: m, phone boots\nTest: m test-art\nChange-Id: I9622e0646eb265008a8bb2652270876ae95dac84\n"
    },
    {
      "commit": "2bb2fbd2879d0a6d9ebf7acff817079dde89b417",
      "tree": "d607aa6bfb2ea55fbfd875237b37c79f3cfed5f6",
      "parents": [
        "85865697ff9fabede3d64ff64cde72727c3fc4c1"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 13 18:24:26 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Nov 16 11:11:20 2018 +0000"
      },
      "message": "Create SdkVersion enum, migrate users to it\n\nCreates a new SdkVersion enum with integer codes of known\nAndroid SDK versions, together with helper functions for common\npredicates. Also converts target_sdk_version_ in Runtime to\nuint32_t and cleans up its uses.\n\nTest: m test-art\nChange-Id: Idc6e518c8675068bf952d0256686c88bb0eb833e\n"
    },
    {
      "commit": "85865697ff9fabede3d64ff64cde72727c3fc4c1",
      "tree": "0c67639c4c286149fa3f06f5f412683e39014790",
      "parents": [
        "b321ac28f726a7ed41f277382d85702ffdfbe00f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Oct 30 17:26:20 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Nov 16 11:11:20 2018 +0000"
      },
      "message": "Runtime flags only for fast/slow hiddenapi path\n\nWith more flags being supported in the dex file, stop copying all of\nthem into ArtField/ArtMethod access flags. Instead, store the\ninformation needed to figure out whether to enter the slow path and\nretrieve full access flags from dex or not.\n\nAt the moment, the only runtime flag is kAccPublicApi assigned to all\nclass members on the whitelist.\n\nThe CL also moves hardcoded API membership of intrinsics out of\nArtMethod and into hidden_api.h, and moves ArtMethod::SetIntrinsic\ninto the .cc file.\n\nTest: m test-art\nChange-Id: Ia1cc05060dbc22341768161dfd8697c6158e803a\n"
    },
    {
      "commit": "f50ac103426588d9f7c014ef2d2b9c766f8dc25e",
      "tree": "bac6537c3cd63cc382e24d9b94f0eb64f18ab0a4",
      "parents": [
        "b56e8353020acda1a8285daa11c69f57060cd015"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Oct 17 18:00:06 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Nov 14 16:49:40 2018 +0000"
      },
      "message": "Simplify hidden_api.h logic\n\nRefactor GetMemberAction to return a boolean whether access to a class\nmember should be denied. This also moves StrictMode consumer\nnotification into hidden_api.cc and removes notifications for toasts.\nTests are changed accordingly.\n\nTest: phone boots\nTest: m test-art\nMerged-In: I02902143de0ff91d402ba79c83f28226b1822a6f\nChange-Id: I02902143de0ff91d402ba79c83f28226b1822a6f\n(cherry picked from commit 51995f90adaa0e5047dee56d22f15e4225e70517)\n"
    },
    {
      "commit": "47cd272d15f41109b3dacb21cfa509d18a03e011",
      "tree": "f2693adde283631362b3acc2c573d7280632621f",
      "parents": [
        "6e32b0059b4c3073c601018da3ca315ad568525a"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Oct 23 12:50:02 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Oct 30 11:04:29 2018 +0000"
      },
      "message": "Remove HiddenApiAccessFlags, move content to hiddenapi::\n\nHiddenapi code in runtime/ has all code in the hiddenapi:: namespace\ninstead of using a class as a wrapper. Refactor HiddenApiAccessFlags\nfor consistency. Also turn ApiList into `enum class` for stricter\ntype checks.\n\nTest: m test-art\nChange-Id: Ifb3c443ea43860476abd4fd3d4934cd14e2cdcc1\n"
    },
    {
      "commit": "98ea9d9d82ab078ca10fa7f8e02eddda94cf1d98",
      "tree": "a848b7e41ff227a2d3d4d6795ec11089f39cb6ca",
      "parents": [
        "02338775e33b553be51d44ff60bb1ef8e527bd94"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 19 14:06:15 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 23 15:19:55 2018 -0700"
      },
      "message": "ART: Refactor for bugprone-argument-comment\n\nHandles runtime.\n\nBug: 116054210\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: Ibc0d5086809d647f0ce4df5452eb84442d27ecf0\n"
    },
    {
      "commit": "32bde99142c5e59b8cad572d9a7b5a81ee12cd00",
      "tree": "247cf899519cdc553f278668caaecc5f5ffafa38",
      "parents": [
        "1ab0fa89aed1100a3e6b631cb188db1d759b1efc"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon May 14 15:24:34 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon May 14 15:24:34 2018 +0100"
      },
      "message": "Propagate hiddenapi cmdline flags in OatFileAssistant::Dex2Oat\n\nART can invoke dex2oat on an out-of-date or non-existent oat file.\nThis code path will ignore any runtime hidden API enforcement policy\nsettings. Change the code to set the correct flag and add a gtest\nfor it.\n\nBug: 79680013\nTest: make test-art-host-gtest-oat_file_assistant_test\nChange-Id: Id6aa5e45d11626facb590621d43e2c52b9269b12\n"
    },
    {
      "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": "39512f5ac08fb8b567336d7c3874065fce062ce7",
      "tree": "71a972a6091ec457a8e94c2b5ffac20bb25c1240",
      "parents": [
        "166546c3579b7a9deb413f8e44ad94b8ed41335b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 23 13:51:16 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 08 10:32:37 2018 +0100"
      },
      "message": "Fix race in hidden_api.h\n\nThe hidden API decision logic can dedupe warnings by changing the\naccess flags of a previously warned about method to whitelist, thus\nexiting early on the next attempt to access it. This logic had a race\nin it, because it would decode the flags, make a decision and then\ndecode them again when printing a warning. If another thread changed\nthe flags in between, the warning would say \"whitelist\".\n\nChange the code so that the hidden API flags are decoded only once.\nThis may still result in multiple warnings about the same API, but at\nleast the messages will be consistent.\n\nBug: 78327881\nBug: 64382372\nTest: none\nMerged-In: I956dd56536bdfce492845e6a90fdcbe29c2676b5\nChange-Id: I956dd56536bdfce492845e6a90fdcbe29c2676b5\n(cherry picked from commit b8c6619f16348403c3933d9e425b4b8c80af5389)\n"
    },
    {
      "commit": "166546c3579b7a9deb413f8e44ad94b8ed41335b",
      "tree": "766450bb9576909e925c5e7d5e1b81c25dd05839",
      "parents": [
        "2e6f69c704202d41f0ab5ab0aa65583a26184e51"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 23 13:50:38 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 08 10:32:23 2018 +0100"
      },
      "message": "Fix hidden API flags decoding for intrinsics\n\nHidden API decision logic would try to decode the access flags of\nintrinsics directly, bypassing the override in ArtMethod. This patch\nget hidden_api.h to use the same code path.\n\nThis also fixes CtsHiddenApiDiscoveryTestCases where the access flags\nof blacklisted APIs are tested. VarHandle intrinsics would not pass.\n\nBug: 64382372\nBug: 72430785\nBug: 78230396\nTest: cts-tradefed run cts --module CtsHiddenApiDiscoveryTestCases\nMerged-In: I080313dd91bbee2d7d98b00c02e224974b344c01\nChange-Id: I080313dd91bbee2d7d98b00c02e224974b344c01\n(cherry picked from commit 14c212a44ac9a3ad12025ebf30836129669fa949)\n"
    },
    {
      "commit": "1724520ec2788838413b20672f73afa5a00b0d4c",
      "tree": "bac735898ef8f9750fcc1fdf04c4538aa6abed22",
      "parents": [
        "c9c87f63f7809568fbab751c8f07107e6151cced"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Thu Apr 12 13:56:37 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 08 10:32:05 2018 +0100"
      },
      "message": "Use tron for logging hidden API accesses.\n\nExample output:\nsysui_multi_action: [757,1391,1392,1,1394,Ldalvik/system/VMRuntime;-\u003egetRuntime()Ldalvik/system/VMRuntime;]\nsysui_multi_action: [757,1391,1392,1,1393,1,1394,Ldalvik/system/VMRuntime;-\u003esetHiddenApiExemptions([Ljava/lang/String;)V]\n\nTest: m\nTest: $ adb shell settings put global \\\nTest:     hidden_api_access_log_sampling_rate 65536\nTest: $ adb lolcat -b events | grep sysui_multi_action | grep 1390\nBug: 77517571\nMerged-In: I23548f902d2ff56ad00534421bf8afa902edaa75\nChange-Id: I23548f902d2ff56ad00534421bf8afa902edaa75\n(cherry picked from commit 2d4d62f2c4cb6f4a659333263a32f7d94c08fc11)\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": "4525e0b62cc808a49b4cd2c826bb52a768779e72",
      "tree": "aba9be998bb3684dff53b4b56c0568fb7187502e",
      "parents": [
        "a8503d9696f37ff66b23016f3374ecbe59774dc6"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 05 16:57:32 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 08 10:30:45 2018 +0100"
      },
      "message": "Fix verifier/linker IncompatibleClassChangeError with hidden API\n\nThe verifier and class linker will attempt to find a method with\nthe wrong type if it could not be found with the original type,\ni.e an interface method on a regular class and vice versa.\n\nThis logic did not previously take hidden API restrictions into\naccount and would result in bogus error messages to the user or\ndebug crashes.\n\nBug: 64382372\nBug: 77464273\nTest: art/test.py -r -t 674-hiddenapi\nMerged-In: If8327a70dd73b90249da3d9e505f0c6f89838f8e\nChange-Id: If8327a70dd73b90249da3d9e505f0c6f89838f8e\n(cherry picked from commit 54a99cfcf3d3463404fdf4152523dcc69b8648d7)\n"
    },
    {
      "commit": "a8503d9696f37ff66b23016f3374ecbe59774dc6",
      "tree": "ff05ba35980c063a046553885268fcffee04d535",
      "parents": [
        "d94a00cdf0519ff92dff1ee59a5a42234a391ddd"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Thu Apr 05 16:10:25 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 08 10:30:33 2018 +0100"
      },
      "message": "Replace kAllLists policy with kJustWarn.\n\nIt seems pretty unlikely that we\u0027d ever want to disallow access to the\nlight greylist in P, since doing do would break do many apps. We don\u0027t need\nthis policy here as an opt-in for apps now, since the StrictMode work will\nachieve the same thing.\n\nInstead, make a kJustWarn policy which allows access to all APIs, but\nleaves the detection and logging logic in place. This gives us the option\nof disabling enforcement, but still gathering logs to find out which apps\nuse which APIs.\n\nAdd some tests for GetActionFromAccessFlags since the logic is getting\nmore complex.\n\nBug: 77517571\nTest: make test-art-host-gtest-hidden_api_test\nTest: boot device\nMerged-In: I2e6824d7ef53532d0836a2b6b1930cbbed196d0c\nChange-Id: I2e6824d7ef53532d0836a2b6b1930cbbed196d0c\n(cherry picked from commit 68693699d62bc7a2192f51be191ae81defcf4388)\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": "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": "5c7e618a14d638109648094ba37bb3843279ad11",
      "tree": "40c163ceb6a90246e360731310169604fd809ab7",
      "parents": [
        "fc66129b478d49f493b8262f81f8813a5f41459e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 21 14:45:15 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 21 14:45:47 2018 +0000"
      },
      "message": "Revert \"Warn on overriding of hidden methods\"\n\nThis reverts commit fc66129b478d49f493b8262f81f8813a5f41459e.\n\nReason for revert: This was also reverted in internal\n\nBug: 64382372\nMerged-In: I69bdc0fb79831b5ce546205fd40a3300d039de71\nChange-Id: Ice53e73eae7313ae6c72369a1b2e984fb978f2ab\n"
    },
    {
      "commit": "fc66129b478d49f493b8262f81f8813a5f41459e",
      "tree": "305594db27eaf39336175f958ee447536d9bf5d9",
      "parents": [
        "8ce3bfaf1da2139a70b67e6b53c0110489801d40"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 14 13:57:27 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 15 12:54:42 2018 +0000"
      },
      "message": "Warn on overriding of hidden methods\n\nWe could prevent apps from overriding hidden methods in the same\nmanner they cannot override a package-private method - by creating\na separate vtable entry for the child method. For now, start by\nprinting a warning when a hidden method is being overridden but do\nnot change the semantics.\n\nBug: 64382372\nTest: art/test.py -r -t 674-hiddenapi\nChange-Id: I9d5bfa6b833a4c0f5aaffa5f82dbe9b1e1f03f1f\n"
    },
    {
      "commit": "8ce3bfaf1da2139a70b67e6b53c0110489801d40",
      "tree": "40c163ceb6a90246e360731310169604fd809ab7",
      "parents": [
        "722093c305de5646759318fdeedc022c08a6723c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Mar 12 18:01:18 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 15 12:54:27 2018 +0000"
      },
      "message": "Refactor enforcement of hidden API policy when linking\n\nHidden API enforcement when linking was sub-optimal for two reasons:\na) it was based on Class::CanAccessMember and would throw\nIllegalAccessError instead of NoSuchMethodError/NoSuchFieldError, and\nb) no warnings were printed in the code path.\n\nThis patch moves the checks into ClassLinker\u0027s resolution routines and\nuses a code path which prints warning.\n\nBug: 64382372\nTest: art/test.py -r -t 674-hiddenapi\nChange-Id: I8a0fbdca58ce5803c1588b644a3e627a0a9a6504\n"
    },
    {
      "commit": "67bf42e89592c3a1c648f927f2ce3ccb189a1161",
      "tree": "054d5b7adf7cc62d4d2a2118a70c0fbdd1751610",
      "parents": [
        "d961043ff1dd6fddb68aa90c1f939cfafec24219"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Feb 26 16:43:04 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 28 15:08:21 2018 -0800"
      },
      "message": "Header library to remove dependence on runtime/\n\nAdd a new header library to remove libdexfile and others\u0027 dependence on\nruntime (typically runtime/base) includes in libdexfile.  Also a small step\nto tease dexlayout and profman away from relying on these as well.\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host-gtest\n\nChange-Id: I38e2fe399a75f4bc6318c77a71954c00ea73ec2b\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": "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": "1077bbc81e008e73bfea18fbd6f4b9b8680b78a7",
      "tree": "72b956e6147ab1659235644a00099926ac30926b",
      "parents": [
        "a02cb113cd0dd023eec61716d3d1bd0dc1c1453a"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 31 14:33:08 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Feb 01 13:47:39 2018 +0000"
      },
      "message": "Print dex signatures in hidden API warnings\n\nThis is more useful for collecting stats.\n\nTest: manual\nBug: 64382372\nChange-Id: I232ad63069b736a95aa44c3cf0240c1c2ba2906d\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": "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"
    }
  ]
}
