)]}'
{
  "log": [
    {
      "commit": "987a8eaa3b34dc4be71ee15e3ec56cc16ec8e5d3",
      "tree": "3d5990147790e1226be6409757234bb730d3d59c",
      "parents": [
        "81b1d78b3422e72ecbe0092f99dbf7b9ecccc5ec"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Mar 07 15:19:18 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 08 13:40:18 2021 +0000"
      },
      "message": "Create directory before running tests.\n\nFixes current flakes where there is a race between tests on when\ndirectories get created.\n\nTest: hidden_api_test\nChange-Id: I25301bf73bae76d5622e97ab231224cf5b329918\n"
    },
    {
      "commit": "59c21036b2e36f2ec0ac35aebe0c6e97539efef8",
      "tree": "cf79499394e87a968dc9a5fca9112de87cf66535",
      "parents": [
        "6a5a5b68647926ce9359607c216e010c4c0b40a1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 02 13:05:03 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 05 13:58:30 2021 +0000"
      },
      "message": "Support /system/system_ext/framework jars with hiddenapi.\n\nWhen devices ship without a /system_ext partition, we create\n/system/system_ext and add a symlink from /system_ext. However, the path\nART gets is the full resolved path, so we need to account for it.\n\nAlso rename LocationIsOnModule to LocationIsOn, as the method has\nnothing to do with modules (anymore?).\n\nCleanup hidden_api_test.cc\n\nBug: 180943021\nTest: hidden_api_test\nChange-Id: Ib3bf65da73248a80f76b8a8a5ed5e004c8716851\n"
    },
    {
      "commit": "09efc1604936c234b65a5d278f5ea63da29b17cd",
      "tree": "e0b34882e0af2f7fe364645b8b3c2a8c802bc6d5",
      "parents": [
        "d83edf3d155c49a578851da4f0407affa03b2325"
      ],
      "author": {
        "name": "satayev",
        "email": "satayev@google.com",
        "time": "Mon Feb 22 17:24:57 2021 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Feb 23 02:48:40 2021 +0000"
      },
      "message": "Revert \"Remove obsolete TestApiEnforcementPolicy.\"\n\nThis reverts commit d8b153b7c2026f45db97a7fd5804957becc5cfdf.\n\nReason for revert: cts tests on -user builds is broken\n\nChange-Id: I7528fb6d1606f08d2398bc4cbb27519424cf1b51\n"
    },
    {
      "commit": "d8b153b7c2026f45db97a7fd5804957becc5cfdf",
      "tree": "014e91484c13e2c44cfa1380f388c758b7c23c0c",
      "parents": [
        "b1cf83748ce8165fe7e41ce6a57eb5529946a971"
      ],
      "author": {
        "name": "Artur Satayev",
        "email": "satayev@google.com",
        "time": "Fri Jan 22 17:27:07 2021 +0000"
      },
      "committer": {
        "name": "satayev",
        "email": "satayev@google.com",
        "time": "Tue Feb 02 20:25:47 2021 +0000"
      },
      "message": "Remove obsolete TestApiEnforcementPolicy.\n\nAccess to TestApis is now gated by @ChangeId ALLOW_TEST_API_ACCESS.\n\nBug: 147113465\nTest: presubmit\nChange-Id: I4c5e336069bce3bccfcde0bcd84b6c1f539635e9\n"
    },
    {
      "commit": "f7fcb98ab4740db9d9d8ed7652b89928a2e56f60",
      "tree": "5a76fa96e391474345314eac31a6b5e95ec4e10b",
      "parents": [
        "23c926d12f8333d2ca59d6b321064cb9d831f0ad"
      ],
      "author": {
        "name": "Pedro Loureiro",
        "email": "pedroql@google.com",
        "time": "Tue Nov 24 16:44:12 2020 +0000"
      },
      "committer": {
        "name": "Pedro Loureiro",
        "email": "pedroql@google.com",
        "time": "Wed Nov 25 20:19:58 2020 +0000"
      },
      "message": "Check if app has ALLOW_TEST_API_ACCESS change id\n\nAllow apps with the change id ALLOW_TEST_API_ACCESS enabled to\naccess methods annotated with @TestAPi\n\nTest: m test-art-host-gtest-art_runtime_tests\nFixes: 166236554\n\nChange-Id: I78776443dd0b76d8cba24ddfbfb83c3b50b346ab\n"
    },
    {
      "commit": "037d282cd1fc201601ac52dcfe0f1a4d97ca3790",
      "tree": "da6a1d61357cd09c4131501031de691491bcdb2a",
      "parents": [
        "6e71c66b35f6a96908e3d371316cba15dcb75d1f"
      ],
      "author": {
        "name": "Andrei Onea",
        "email": "andreionea@google.com",
        "time": "Thu Nov 19 00:20:04 2020 +0000"
      },
      "committer": {
        "name": "Andrei-Valentin Onea",
        "email": "andreionea@google.com",
        "time": "Mon Nov 23 19:02:00 2020 +0000"
      },
      "message": "Add compat framework logging to ART\n\nLog first call for every change id in ART to logcat.\n\nTest: manual\nBug: 153061480\n\nChange-Id: I37ff5b88572478ae6c24b0b7dec2020da03b2172\n"
    },
    {
      "commit": "fc12a6cb415b2eacee0459fd170490a407c2548a",
      "tree": "f3b8508544e7320635146d0458e612e4b6f735d9",
      "parents": [
        "0f5784886faf0281a7b06eba35105ee68f1e5a00"
      ],
      "author": {
        "name": "Andrei Onea",
        "email": "andreionea@google.com",
        "time": "Wed Jul 29 19:52:34 2020 +0100"
      },
      "committer": {
        "name": "Andrei-Valentin Onea",
        "email": "andreionea@google.com",
        "time": "Mon Aug 10 12:27:13 2020 +0000"
      },
      "message": "Rename ApiList::Value enums\n\nUse a more inclusive terminology for the API lists. This change focuses\nspecifically on the ApiList::Value enum values. The string equivalents\nwill be changed separately, as they have multiple extra dependencies.\n\nBug: 162326106\nTest: m\nTest: m test-art-host-gtest-art_hiddenapi_tests\nTest: art/tools/run-gtests.sh\n\nChange-Id: I1dccf59ecc9e08b60dbd1bfed6ce438b5ce081d0\n"
    },
    {
      "commit": "9735ccc81e25ffe2dd88d053dc7065028264d344",
      "tree": "7672bacb93e661a62c661605ba5a1584086e18a0",
      "parents": [
        "4307cd77319dd88eb65e88e5b4763250eff9c543"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Jul 20 13:05:04 2020 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Jul 20 15:36:50 2020 +0100"
      },
      "message": "Retry path removal and log errors in case of failure\n\nBug: 161687281\nTest: art_runtime_tests\nChange-Id: I1d68b1dd6382b6873c33aa2c09bb25c3b6fe5c30\n"
    },
    {
      "commit": "7400a5466a04f9a274d262c5cb1fd35ff496839a",
      "tree": "8e4d617b0e0fdfda2c089a6a30353d470c0fb2b3",
      "parents": [
        "b461b53c926dae7f1959a309b0a2b109b6d3c4d3"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Jul 09 13:40:57 2020 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jul 15 14:33:43 2020 +0000"
      },
      "message": "Fixes for gtests in eng-prod\n\nBug: 147817558\nTest: art/art-host-gtest on forrest\nChange-Id: I0ecfbc81fe6998d4c8c69ce6fbeb35bdd5908b55\n"
    },
    {
      "commit": "b708fc1f100c7c238970ded7f1d5cb7c4da987b1",
      "tree": "6625bb087a5cea50ba4114eca641d3884ecb6c51",
      "parents": [
        "6c71dca9ecb00b46172b37153b93ab1fbcd772dd"
      ],
      "author": {
        "name": "Artur Satayev",
        "email": "satayev@google.com",
        "time": "Wed May 20 17:48:19 2020 +0100"
      },
      "committer": {
        "name": "satayev",
        "email": "satayev@google.com",
        "time": "Thu May 21 14:01:52 2020 +0000"
      },
      "message": "Add support for greylist-max-r signatures.\n\nBug: 156307884\nTest: m\nChange-Id: I838e348af7c0ca1b3933a8a6e012cddfa6c209aa\n"
    },
    {
      "commit": "5477b8e55f01a58fac188f272818b38a19c50d4e",
      "tree": "e6e345925412d7bd3f6f1e46d9c47833c23bdb40",
      "parents": [
        "ed2895678203365b2024c742f51d34791729900b"
      ],
      "author": {
        "name": "Chris Gross",
        "email": "chrisgross@google.com",
        "time": "Fri Apr 24 09:36:45 2020 -0700"
      },
      "committer": {
        "name": "Chris Gross",
        "email": "chrisgross@google.com",
        "time": "Tue May 05 21:12:37 2020 +0000"
      },
      "message": "Allow bootjars in system_ext.\n\nBug: 148385042\nTest: Built and booted Pixel 3a both with and without a boot jar in system_ext.\nTest: m test-art-host-gtest-hidden_api_test32\nTest: m test-art-host-gtest-hidden_api_test64\nChange-Id: I10ef0340b92aa60579ff39f888cb556dc2953f2a\n"
    },
    {
      "commit": "2dea07964e4902f62f870b003a7b70ab5b77f253",
      "tree": "80afdd2f4a95298e441ada4a8ae439221b94af02",
      "parents": [
        "615212399037ea41987282800f077941d7ec9f54"
      ],
      "author": {
        "name": "atrost",
        "email": "atrost@google.com",
        "time": "Tue Feb 25 20:11:47 2020 +0000"
      },
      "committer": {
        "name": "Anna Trostanetski",
        "email": "atrost@google.com",
        "time": "Thu Feb 27 15:57:52 2020 +0000"
      },
      "message": "Gate access to targetsdk-max-p,q on compat framework\n\nReplace targetSDK checks for those APIs, keep it for greylist-max-o.\nThis will allow toggling access to APIs that are in greylist-max-p and\ngreylist-max-q (two separate toggles).\n\nBug: 149994052\nBug: 149997251\nTest: mma test-art-host-gtest-hidden_api_test64\nChange-Id: I00777bbeefba50a0863a6645b77e60d48e9bb768\n"
    },
    {
      "commit": "267366ca19e7b71a63d3c4a02976cc56a6e58adc",
      "tree": "063ef118f770096ac667f5b4c7d22b75693896c0",
      "parents": [
        "fa2b2d35255515accd0aa69193aa5e72b009e38e"
      ],
      "author": {
        "name": "Artur Satayev",
        "email": "satayev@google.com",
        "time": "Thu Oct 31 14:59:26 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Nov 07 15:23:32 2019 +0000"
      },
      "message": "Only allow access to @TestApi signatures in instrumented processes.\n\nNote that the check is for \"pure\" @TestApi signatures, i.e. those that are on blacklist. If the signature is also annotated with @SystemApi or @UnsupportedApiUsage then it would not be on blacklist.\n\nBug: 133832325\nTest: manual\nChange-Id: I546fb42495331efd638d9def924ef33da0c80182\n"
    },
    {
      "commit": "201ffea4a91f1ff052bb72eedb44a3bff2a35c76",
      "tree": "c5c1757b9b3093ebf6f653d402153e1ed2af780f",
      "parents": [
        "7d48dcd51db4b950c22ec78ef3caa53fdf4214d3"
      ],
      "author": {
        "name": "Artur Satayev",
        "email": "satayev@google.com",
        "time": "Thu Oct 31 14:58:03 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 31 19:01:57 2019 +0000"
      },
      "message": "Add tests for GreylistMaxQ.\n\nTest: mma test-art-host-gtest-hidden_api_test64\nBug: 133832325\nChange-Id: I1a91bcea501325fd4e79e25db1ed0be6e1028b49\n"
    },
    {
      "commit": "bfaba288427e80e7941e49c4264ba8f6cd6d97d1",
      "tree": "db8e893b87c2406275c82599d43e9b9a5b0f895c",
      "parents": [
        "7dd0f0f2b4af0b15389ca8624bde93e1fb7ed776"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Mar 15 11:35:51 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Sat Mar 16 07:34:43 2019 +0000"
      },
      "message": "Fix buildbots hidden_api_test\n\nTarget buildbots set /system to be the runtime module root because they\nare running without an apex. The test assumes that /system dex files are assigned\nto the application domain but here they get assigned to the core-platform domain.\n\nAdjust the domain setting logic to check if the runtime module root is\ndistict from the android root (as a proxy for \u0027is running with apex\u0027).\nIf not (as is the case with the buildbots), skip checks against apex\nlocations.\n\nTest: m test-art-target-gtest-hidden_api_test\nChange-Id: Iff3890ec69cb04a1e4ed5bc2a3b5c652ada05f36\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": "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": "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": "80d16289df2ec243737063e4f9d092ac3a7cbb10",
      "tree": "65ee57a867a58f5ddaf42747bf49fef987c57356",
      "parents": [
        "e701de908bf5cb9375f15a3dbd113206aa582e7e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Nov 01 09:55:09 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Nov 29 16:42:14 2018 +0000"
      },
      "message": "hiddenapi: Introduce greylist-max-p\n\nAdd a new hiddenapi::ApiList constant for a greylist only accessible to\napps targeting SDK version \u003c Q.\n\nThe patch also removes SdkVersion::kP_MR1 which is invalid.\n\nTest: m, phone boots\nTest: m test-art\nTest: atest art/tools/class2greylist/test\nChange-Id: I48f3d1a4703166168fd8e0d1c3337aa2957b66ce\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": "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": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\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": "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": "1f9d3c3a11cd106246d814ac02b6dafd881f40ad",
      "tree": "13e8e39c02df0b610e505901ed6731ee49334ed9",
      "parents": [
        "bb0454a067389a7a1370d2150bf59efd5aac20a1"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed May 02 16:53:06 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 08 10:32:55 2018 +0100"
      },
      "message": "Fix hiddenapi::MemberSignature for proxies\n\nProxy classes are classes generated at runtime which implement\na given interface. Because they do not inherit the associated\ndex file form the interface(s), names/signatures of methods cannot\nbe requested directly, but rather through the original interface\nmethod. Calling getName() on a proxy mirror::Class also triggers\na DCHECK.\n\nThis patch will refer to the interface method when printing the\nsignature instead of the proxy method.\n\nThis fixes the warning printed for the proxy method, printing\neven the class name of the interface instead of the name of the\nproxy class. This is meant to provide useful info to the devloper.\n\nProxies do not define fields except for the synthetic \u0027interfaces\u0027\nand \u0027throws\u0027 fields. Their signatures remain unchanged.\n\nThis patch also continues to check the access flags of the proxy\nmethod for performance reasons. De-proxying the method would\nintroduce two new memory accesses into the fast path. That means\ndeduplication of warnings remains independent between the original\nand proxy methods.\n\nBug: 78327881\nTest: make test-art-host-gtest-hidden_api_test\nMerged-In: I8f334e5e2b62ca38691c94524edaf198eb73574b\nChange-Id: I8f334e5e2b62ca38691c94524edaf198eb73574b\n(cherry picked from commit 73a64f6a2a475c2fe018c7ab1151e3f44d316533)\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": "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": "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": "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"
    }
  ]
}
