)]}'
{
  "log": [
    {
      "commit": "525fa42b13863305bc7cad34bba1c9ab5567894e",
      "tree": "0315618e0f82b8ac3d272328f6beca1bdef10398",
      "parents": [
        "0744d72e304fddd5453d05f8e06fa85c0467e86d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 19 07:50:35 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 19 13:35:47 2021 +0000"
      },
      "message": "Revert \"Revert \"Integrate ClassLoaderContext check in OatFileAssistant::GetBestOatFile.\"\"\n\nThis reverts commit 656fdcd7f2aa9920ecd464dbb59d284e17969baa.\n\nBug: 176960283\n\nReason for revert: Racy code fixed in https://android-review.googlesource.com/c/platform/art/+/1678727\n\nChange-Id: I7561aa8fad060bd076006dd4b1fbffc076834635\n"
    },
    {
      "commit": "656fdcd7f2aa9920ecd464dbb59d284e17969baa",
      "tree": "d4be59ae4c11c12a7bc7d6343f9add9bed0b6e33",
      "parents": [
        "efbc659ba4566f6fbad3d13bea170fb522955b8a"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sat Apr 17 16:47:01 2021 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sat Apr 17 19:19:50 2021 +0000"
      },
      "message": "Revert \"Integrate ClassLoaderContext check in OatFileAssistant::GetBestOatFile.\"\n\nThis reverts commit c8fe6517faf91b45683cddff3c15e08e489e12e9.\n\nReason for revert: Breaks 1002-notify-startup (flaky)\n\nTest: \"art/test.py -r --host -t 1002\" in a loop\nBug: 176960283\nChange-Id: I4f5467efa5a1e09452b28b86b183791e4105b19e\n"
    },
    {
      "commit": "c8fe6517faf91b45683cddff3c15e08e489e12e9",
      "tree": "10bf664496e680bbae0d22ff7da32dbbb923613f",
      "parents": [
        "0c39de679bc4b647cfeb1c5c94c86d879848aa55"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 01 14:22:40 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 15 12:30:01 2021 +0000"
      },
      "message": "Integrate ClassLoaderContext check in OatFileAssistant::GetBestOatFile.\n\nThis reduces some code duplication between\nOatFileManager::OpenDexFilesFromOat and GetDexoptNeeded.\n\nIt also gives the chance for OatFileAssistant and GetDexoptNeeded to\nfind the real best oat file.\n\nTest: test.py\nBug: 176960283\nChange-Id: Id366aef7a9e91833d8edaea965abda4cfdcd8455\n"
    },
    {
      "commit": "982ecedecd2326f9b28ee60a3feb56b299e1c2bc",
      "tree": "d319249a25c0f13bab0bb45efd8cf70a4a238985",
      "parents": [
        "09108b274c15b55d8577ae3590005e990694c5b7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 29 08:49:38 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 29 12:46:54 2021 +0000"
      },
      "message": "Remove \u0027\u0026\u0027 class loader context.\n\nThis is now an unsupported context.\n\nTest: class_loader_context\nBug: 132357300\nChange-Id: I21bc6e3529944a57379845e90c7f49759db30d40\n"
    },
    {
      "commit": "98071159668576ae08c2b0de80b0565d58f409f2",
      "tree": "9d9d33ca68c95583f7023f32cbcda9fdb52dc219",
      "parents": [
        "d8b153b7c2026f45db97a7fd5804957becc5cfdf"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jan 27 18:41:58 2021 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Feb 02 20:39:40 2021 +0000"
      },
      "message": "Improve trace logging when loading odex files\n\nAdd extra trace categories with information on the status\nof odex files and the outcome of the loading process.\n\nTest: gtests\nBug: 178410926\nChange-Id: I02ef78f34ba726f40c8a988db8dc995f4c01c55e\n"
    },
    {
      "commit": "6e6f1b2ffb243b3e5ae112bba3cd52031deb31ba",
      "tree": "df7254d763ca274ed23b012e47e825a4444d1bfd",
      "parents": [
        "8de1fc3a75dcc900aed271a4f654d912a8838c1d"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Dec 15 19:13:19 2020 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jan 05 21:51:00 2021 +0000"
      },
      "message": "Do not open dex files in CLC if we only need to get dexopt status\n\nThe verifying the class loader context when calling GetDexOptNeeded\nwe only need the dex locations and the checksums. Opening the full\ndex files may lead to in memory extraction which is expensive and\nunnecessary.\n\nAdd a special path in ClassLoaderContext::OpenDexFiles which will\nextract the locations and the checksums from the apk instead of\nactually opening the dex files.\n\nWe re-uses the same logic in OpenDexFiles in order to avoid\nimplementing the opening algorithm twice (which, given all the edge\ncases is not trivial).\n\nBug: 169869944\nTest: test-art-host\nChange-Id: Ic327889677ce697cd60c5c688281515b932a2a76\n"
    },
    {
      "commit": "5ff2393e1fb6e61fc74f20c66f80f4b8656987d1",
      "tree": "e94b8cfc92379678b4f2e6446aa6d28a6408222f",
      "parents": [
        "99459f3bdd8d569ec7054920cbc32e6915d1e125"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Dec 11 18:26:14 2020 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Dec 14 19:00:35 2020 +0000"
      },
      "message": "Remove stripped-apk related logic from CLC\n\nStripped-apks are no longer supported by the runtime and\nthe current logic prevents bug fixes and code evolution.\n\nBug: 111442216\nTest: test-art-host\nChange-Id: I30d5825e4f6453981ca9165bebafe67557c28b93\n"
    },
    {
      "commit": "556ace1620b7687c04e0b15853988d608395e3df",
      "tree": "cf6e21cd90ab56bcbe2f7438fb23aee6814e5bbd",
      "parents": [
        "2731eb474f3f1b9c7598bd477ebbbb1aae28d833"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jul 24 15:09:55 2020 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jul 27 08:18:29 2020 +0000"
      },
      "message": "Reduce \u0027The ClassLoaderContext is a special shared library.\u0027 spam\n\nThis message may appear 90+ times consecutively, so put it behind\nVLOG(oat) so that it only appears when verbose oat logs are enabled.\n\nBug: 154178702\nTest: this message is only seen once per process\nChange-Id: I57c307d8910058f626145b2c899c7c4e9e354533\n"
    },
    {
      "commit": "a63a2e971079f57d86acd2e736be99fe3f4f4a91",
      "tree": "0e776f7888f5942145427c6cb888d2e4f36ed930",
      "parents": [
        "b50d453318b2db76d055ae135ebbfc538ed6c19e"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Apr 15 20:02:00 2020 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jun 25 23:06:30 2020 +0000"
      },
      "message": "Search only the current class loader when checking for duplicates\n\nDo not check the entire class loader hierarchy for duplicate dex files\nbecause some use cases might be valid. The most error prone cases are\nactually duplicates within the same class loader.\n\nTest: gtest\nBug: 154032843\nChange-Id: I8c5efd4b2053a5b4052de6041d561554dddf4780\nMerged-In: I8c5efd4b2053a5b4052de6041d561554dddf4780\n(cherry picked from commit 86ac525b1f42876518c9040aeaf1a9710cc4332e)\n"
    },
    {
      "commit": "5868adaefe72cc8bcdcd8325c40f712375a506d1",
      "tree": "a1d4328902c4e860fe69c4e4bb34052de2530df3",
      "parents": [
        "5a62af5dc9e9bafeffcac7820e1a5b7586e58477"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 12 11:50:34 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 13 08:00:22 2020 +0000"
      },
      "message": "Move implementations from class_root.h to -inl.h .\n\nMake it possible to include the definition of enum ClassRoot\nwithout pulling in a lot of other headers.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: Ic90fdd70bfe0c5428a5c9a0d7901ea7e15b03488\n"
    },
    {
      "commit": "b495e7ffac8782dd2fc7c1a7fa7c69da71d98c1c",
      "tree": "723728edcc663257640a6d0b82785992174c6f1b",
      "parents": [
        "82cc2a247d9fb9bb8d1d28a09d978f66d0b1c4dd"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Apr 06 19:29:45 2020 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Apr 08 23:49:43 2020 +0000"
      },
      "message": "Log an error when an app loads duplicate dex files\n\nCreating a class loader with duplicate dex files in its classpath is most\nlikely an unintended bug. That leads to rejecting any compiled code and\nhurts performance by extracting in memory.\n\nTest: run-test gtest\nBug: 149410951\n\nChange-Id: Ieebb69c6bd03acbe95dd8bedb6101d70390b92d8\n"
    },
    {
      "commit": "bf7705509ea10d1f172bd37200ebbb6472a139a3",
      "tree": "32bd810acc8e00b23b0f88257100ac8bdcafc1a1",
      "parents": [
        "03008223bc443c2e7a411d6595671e376dea0a9b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 16 14:02:31 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 17 08:48:28 2020 +0000"
      },
      "message": "Don\u0027t run structural dex file verification in ClassLoaderContext.\n\nClassLoaderContext should only ensure that checksums match, structural\ndex file verification should happen when the runtime or the compiler\nruns a dex file.\n\nTest: boots and no regression\nBug: 150032912\nChange-Id: I23afc92bb01a4ce662c143638b2f2550e6ee6531\n"
    },
    {
      "commit": "c9fa770b6eedcf0cfe05b2449423f5494eecfce0",
      "tree": "684657b011f8980da10cbdc89ca6288d933a2734",
      "parents": [
        "a7d98b9560166eddaeb78d0f19402ee80ec9df06"
      ],
      "author": {
        "name": "Dan Zimmerman",
        "email": "danzimm@fb.com",
        "time": "Fri Jan 31 13:35:12 2020 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Sat Feb 08 02:41:12 2020 +0000"
      },
      "message": "Introduce VMRuntime.isValidClassLoaderContext\n\nIn the PackageManager server we need to validate class loader contexts\nthat we receive from an untrusted process. In order to keep class loader\ncontext parsing logic centralized within the runtime let\u0027s create an API\nwhich returns whether or not the runtime can parse the encoded class\nloader context.\n\nTest: Build system image, open app using secondary dex\nTest: atest atest com.android.server.pm.dex.DexManagerTests\nTest: m test-art-host-gtest-class_loader_context_test\nChange-Id: Ied676e3239f70a8ab9d066df79f377b7036b28b7\n"
    },
    {
      "commit": "b682ea4d1f9f88ef41589007f385398033d61b65",
      "tree": "b843077f05e2fe37ce5f566dfc823552f289f562",
      "parents": [
        "77aa6807053a830fe5c951c7cb700813d7e2e27b"
      ],
      "author": {
        "name": "Dan Zimmerman",
        "email": "danzimm@fb.com",
        "time": "Mon Dec 23 06:59:06 2019 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Sat Feb 08 00:01:36 2020 +0000"
      },
      "message": "Introduce BaseDexClassLoader.computeClassLoaderContextsNative\n\nThis will be used to compute the contexts that should be sent over to\nthe dex load reporter. See associated changes in libcore \u0026\nframeworks/base.\n\nMotivation: At the moment of committing there are two classloader\ncontext encoders- one in ART and one in the package manager. The\nduplicate logic is susceptible to divergences. For example at the moment\nif a package uses shared libraries and has secondary dex files then the\ncontext encoded for secondary dex files will be incorrect[1]. In order to\neliminate this bug and future possible bugs lets centralize where all\nclassloader context computation is done.\n\n[1]: The context will be incorrect because it doesn\u0027t take into account\nthe shared libraries that are loaded at runtime.\n\nTest: m test-art-host-gtest-class_loader_context_test\nTest: m test-art-host-gtest\nTest: ./test/testrunner/testrunner.py --host -b\nTest: Introduced a set of tests for the new API(s)\nTest: See tests in associated libcore \u0026 framework/base commits\n\nBug: 148494302\nChange-Id: Id39293a2e1d3d05194f2864f4febb3e652bce075\n"
    },
    {
      "commit": "7d511d94cdc33df9ede75108b7aa112640635d49",
      "tree": "2fba7478ee5051cb2c8aff74f90098878c25f585",
      "parents": [
        "15669a69f163362047b695e76565d93af3283e6f"
      ],
      "author": {
        "name": "Dan Zimmerman",
        "email": "danzimm@fb.com",
        "time": "Mon Dec 23 07:00:51 2019 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jan 17 22:13:11 2020 +0000"
      },
      "message": "[art] Factor out encoding ClassLoaderContext components\n\nThese factored out utility functions are useful to encode a partial\nclass loader context. The end goal here is to serialize the correct\nclassloader contexts from the runtime and send those to DexLoadReporter\nso that we don\u0027t depend on divergent behavior.\n\nTest: m test-art-host-gtest-class_loader_context_test\n\nChange-Id: I81a32ad7cc4aba7147ed191ccf12c9839386a9cc\n"
    },
    {
      "commit": "36ec598a4d887746291d003c97c2cb28b5987768",
      "tree": "65ad09ff02502ed74328f2f930f9301de85ad929",
      "parents": [
        "457e9fa3833ef11530056d010f247ad087fd2184"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 28 10:55:16 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 28 15:42:23 2019 +0000"
      },
      "message": "Simplify name verification in ClassLoaderContext.\n\nDo not go through OatFile::ResolveRelativeEncodedDexLocation\nto avoid unnecessary handling of multi-dex suffix. That was\nbroken anyway because `abs_dex_location` is not expected to\nbe a multi-dex location as demonstrated by an additional\ntest which would have previously failed.\n\nTest: Improved test in class_loader_context_test.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I0a292ed1442393a3de4e8a360593b607b1b37cfd\n"
    },
    {
      "commit": "a9bbc08daad6d601c870c8493323f57b70373336",
      "tree": "8ca74373cac0fe52aced5f32cc6f6e1f9c3239b5",
      "parents": [
        "56f1332113c3b8b1844c04683b9cb9dc5a0bd346"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Nov 14 14:51:41 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 15 19:17:23 2019 +0000"
      },
      "message": "Implement STL iterators on ObjectArray and add helpers\n\nIterating over an ObjectArray is rather cumbersome, requiring manual\nfor-loops. To improve ergonomics and STL standard-ness this implements\nstd::iterator\u0027s for ObjectArray and converts code to use this (in\nsimple situations). This should allow us to use standard STL functions\nin the future when dealing with ObjectArrays.\n\nAlso adds some helpers such as ZipCount and ZipLeft.\n\nTest: ./test.py --host\nChange-Id: Ifd515b8321775424b3256a6faf47b2ba970177d3\n"
    },
    {
      "commit": "d5fe17eac91c5c0cefb2ab8093f41ddc68c2f724",
      "tree": "f3299a8fe9ff637545d8e97461d84f6294baa5b2",
      "parents": [
        "bd5690db112e7357bfa7634abbda9762e20959d7"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Tue Oct 01 16:18:47 2019 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Tue Oct 01 16:18:47 2019 -0700"
      },
      "message": "Fix incorrect narrowing type cast\n\nstd::string::npos is greater than the maximum value of uint32_t type,\nthe narrowing cast will make this statement always false.\n\nFound by Clang tautological-constant-out-of-range-compare warning.\n\nTest: N/A\nBug: 72331526\nChange-Id: I59b297360ab5672868f2cffc42ec02189275a152\n"
    },
    {
      "commit": "19f5416eb86bdffa489099ffc4ac9c9ad35438d6",
      "tree": "730beadde252ff3c6e278112244987c07bc65dc4",
      "parents": [
        "43e72433fd2115b4213b5db06568ebd1c550e7d1"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 14 16:16:28 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 16 01:01:01 2019 +0000"
      },
      "message": "ART: Remove runtime.h file_utils.h (iwyu)\n\nIt is unnecessary. Fix up transitive includes.\n\nTest: mmma art\nChange-Id: Idf25e8df37a3924cc88b5a549b715e9206ca0757\n"
    },
    {
      "commit": "3e8aae03770a4acceff2f7fb7d6db68e05602d84",
      "tree": "297b7f7cfeb82f352da84333f7fd584b8d0f8718",
      "parents": [
        "40594870058427d6d1090f18c216f9dd155421e2"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 26 18:48:02 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 11 06:57:08 2019 +0000"
      },
      "message": "Fix dex location of boot oat files during preopt\n\nDex location should reflect the path on target when preopting\non host. This previously did not hold and this patch fixes the\nissue. Other paths remain the same as before. A DCHECK is added\nto class linker to guarantee that -Xboot-classpath-locations is\nnot ignored.\n\nSimultaneously it refactors the logic for resolving a relative\npath to make it clearer which path is used for opening files\n(dex file name) and which reflects the location on target (dex\nlocation), as these differ when preopting.\n\nThe patch also adds a missing dex2oat dependency for oat_file_test.\n\nTest: test-art-gtest-{host,target}-oat_file_test\nTest: compiles, no DCHECK crashes\nChange-Id: I0629c7ee505b5fd50649800bb3e08efc1ee44102\n"
    },
    {
      "commit": "93d339d9b2949ca85d031bb9ebb7a0612b095fa8",
      "tree": "d0793a9fe9df196398ca523c4a57a0ed18f107e4",
      "parents": [
        "bdc93b47e2e7e8f17413669e03bc461d259d16f6"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 27 09:56:45 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 01 10:26:42 2019 +0000"
      },
      "message": "Revert^2: InMemoryDexClassLoader in ClassLoaderContext follow-up\n\nAddress follow-up comments on Ic64065819018a1e56dee0f65405d26beb8fd7bbd.\nIn particular, the classpath elements of IMC are replaced with\n\"\u003cunknown\u003e\" magic value to make it clear that the dex location is bogus,\nand a clarifying comment is added.\n\nPreviously this CL would fail on target because IMC classpath was not\nbeing replaced with \"\u003cunknown\u003e\" and context matching failed. This was\nonly a problem on target because\nOatFile::ResolveRelativeEncodedDexLocation ignores non-absolute\nlocations on host.\n\nThis reverts commit 93d99f3665cbd890509f4c707e1a62c5f26d320e.\n\nTest: m test-art-gtest-class_loader_context_test\nBug: 72131483\nChange-Id: I27cbfa69c24d412cc1b6bcce88218cc95e324ef5\n"
    },
    {
      "commit": "bdc93b47e2e7e8f17413669e03bc461d259d16f6",
      "tree": "bd1c632196a437e90d012475afa83adf614be538",
      "parents": [
        "f52d92fce224c86491d9b0fd6fca805564119426"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 29 16:12:04 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 01 09:37:59 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify StackTraceElement and ClassLoader.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I457eeda55bbfb905dd2de0abd68451ab42ef9c1f\n"
    },
    {
      "commit": "4617d5823c8e7841fed813b3b9c72664d7fd4dc6",
      "tree": "9eafbee06717e02a2c4acd5d7ce1e6601955356e",
      "parents": [
        "d7e9bbf092b5a61048358fd54183526ef12284af"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 28 13:48:31 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 29 09:50:00 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify mirror::Object::As*(), fix stale refs in test.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: Ia04c4996f5cbfa1f26acbadcd747342c57b1aac3\n"
    },
    {
      "commit": "0984e483c1b8033250a32b11f112ae3e65eef39b",
      "tree": "267b4f59818e5080dff726adf25e5b5710111377",
      "parents": [
        "621c8807f38fedab56ea701370a18df123177f67"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 27 16:41:41 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 28 09:22:07 2019 +0000"
      },
      "message": "Style cleanup for ObjPtr\u003c\u003e-ify changes.\n\nReplace \"ObjPtr\u003c.\u003e const\" with \"const ObjPtr\u003c.\u003e\".\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I5a1c080bc88b091e15ee9eb0bb1ef6f6f290701c\n"
    },
    {
      "commit": "423bebb17f15c3867a52315f0ae421f08f14544f",
      "tree": "97bdf50c7144ae21e6abfe8bdc26858a6a10f94d",
      "parents": [
        "93d99f3665cbd890509f4c707e1a62c5f26d320e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 26 15:17:21 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 27 09:45:20 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify mirror::ObjectArray.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I611b3e49d3feed306f6cd35d2b662a1e727e24c6\n"
    },
    {
      "commit": "93d99f3665cbd890509f4c707e1a62c5f26d320e",
      "tree": "9d05c20e65d20b88908da1664f7dbb34dfbc2720",
      "parents": [
        "912cee8ab1260c5022ddb4862620d6ed17658de7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 27 08:56:02 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 27 08:56:19 2019 +0000"
      },
      "message": "Revert \"InMemoryDexClassLoader in ClassLoaderContext follow-up\"\n\nThis reverts commit 1a1398ec15accbd905d802e1391c8efbd2d80f98.\nBug: 72131483\nReason for revert: Broke class_loader_context_test on target\n\nChange-Id: Iaa51c8e84536638f39e9ca4c420d1e10ae15e270\n"
    },
    {
      "commit": "1a1398ec15accbd905d802e1391c8efbd2d80f98",
      "tree": "c058d429874230eb71c2eb5e136426957720c6c6",
      "parents": [
        "f57f2ed8c3f75c8d8c2c051f2961ca4e8330a698"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Mar 25 17:04:47 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 26 10:13:05 2019 +0000"
      },
      "message": "InMemoryDexClassLoader in ClassLoaderContext follow-up\n\nAddress follow-up comments on Ic64065819018a1e56dee0f65405d26beb8fd7bbd.\nIn particular, the classpath elements of IMC are replaced with\n\"\u003cunknown\u003e\" magic value to make it clear that the dex location is bogus,\nand a clarifying comment is added.\n\nTest: m test-art-gtest-class_loader_context_test\nBug: 72131483\nChange-Id: I0225c288a07af589a3f3d85a69ef908eeab38cb2\n"
    },
    {
      "commit": "1a9ac537f52b88dea02d02c3063283e32a085fb5",
      "tree": "5fb2fce1a45d44d7fe6557f99d38669c9d075f52",
      "parents": [
        "e5d93b58a530be39c9a067cdd7f491e4626ec51d"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 05 11:57:13 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Mar 22 18:51:35 2019 +0000"
      },
      "message": "Support InMemoryDexClassLoader in ClassLoaderContext\n\nAdd new class loader tag IMC to class loader context spec which\nrepresents InMemoryDexClassLoader. A special case is required to not\nattempt to open its dex files as the dex location does not correspond\nto a real file path. This is achieved by setting load-attempted variable\nto \u0027true\u0027 when encountering IMC whilst parsing a spec. Context with IMC\ncan still have opened dex files if it was created from an existing class\nloader.\n\nBug: 72131483\nTest: m test-art-host-gtest-class_loader_context_text\nChange-Id: Ic64065819018a1e56dee0f65405d26beb8fd7bbd\n"
    },
    {
      "commit": "8982186538943d31b9db0b94e9bf10b5c4a75ae7",
      "tree": "df8f79208eed6bd8801f9e4ec11a1d08e85078a5",
      "parents": [
        "4bb2af5e6163cf68ec65c5497983303302a15a09"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 19 13:57:43 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Mar 22 13:48:56 2019 +0000"
      },
      "message": "Support FDs for class loader context dex files\n\nWhen compiling secondary dex files, dex2oat/dexoptanalyzer must open\nall dex files in the given class loader context. However, these tools\ndo not have the SELinux permission to open app data files and instead\nrely on installd to open them and pass file descriptors via command\nline arguments.\n\nThis patch extends ClassLoaderContext::OpenDexFiles to support opening\ndex files from a provided list of FDs, assuming the order corresponds\nto the flattened class loader context. FDs can be passed to dex2oat/\ndexoptanalyzer using a new \u0027--class-loader-context-fds\u003d\u0027 command line\nargument. The format is a colon-separated list of integers.\n\ndexoptanalyzer is also extended with a separate mode in which\ndexopt-needed analysis is not performed, only the class loader context\nis flattened and list of its dex files is printed to standard output\nas a colon-separated list of paths. This mode is enabled with\n\u0027--flatten-class-loader-context\u0027 and is used by installd to obtain a\nlist of files it should open for dex2oat/dexoptanalyzer.\n\nBug: 126674985\nTest: atest installd_dexopt_test\nChange-Id: I46a671c90d14ad8615508c106a88ac1ee8a4ef28\n"
    },
    {
      "commit": "e16727388a0a2aedae530f686c0fd95cd2bbb80f",
      "tree": "a35bc53fd844f5037b572fe862d9178d83fce5ad",
      "parents": [
        "458128737485d72028d0e4af9855b7773c81010b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 30 01:09:49 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 30 19:09:57 2018 +0000"
      },
      "message": "Revert^2 \"Support shared libraries in CreateContextFromClassLoader.\"\n\nThis reverts commit 1717a493a4a0c1c3b69ecfcb58838627b4c75878.\n\nbug: 120036590\nbug: 120031686\n\nReason for revert: Fix code to ensure ownership of dex files.\n\nChange-Id: I99fffb52b73e0a41d779a41605ddf2e9249c02e0\n"
    },
    {
      "commit": "1717a493a4a0c1c3b69ecfcb58838627b4c75878",
      "tree": "84f28de48b55ea9942d3ffc49b13c0ec1c1435b7",
      "parents": [
        "a66d69e884b6f9f41a8da31e6d27b498984c7fa3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 30 01:02:50 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 30 01:02:50 2018 +0000"
      },
      "message": "Revert \"Support shared libraries in CreateContextFromClassLoader.\"\n\nThis reverts commit a66d69e884b6f9f41a8da31e6d27b498984c7fa3.\n\nbug: 120036590\nbug: 120031686\n\nReason for revert: Fails libcore \n\nChange-Id: I6bec17b1e6c0d767c10b44572ca5f8d73c5fc37e\n"
    },
    {
      "commit": "a66d69e884b6f9f41a8da31e6d27b498984c7fa3",
      "tree": "58efae80d2b2161feff23143ab620242d1c09605",
      "parents": [
        "8f50b2c27f9b32726bbadfcebba910640b94036e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 28 16:06:12 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 29 17:16:04 2018 +0000"
      },
      "message": "Support shared libraries in CreateContextFromClassLoader.\n\nMissed this method in my previous set of shared libraries support.\n\nbug: 120036590\nbug: 120031686\nTest: test.py, app startup with speed-profile\nChange-Id: I5c1ec567cfa5452a1f510a3279a9e15125f429ba\n"
    },
    {
      "commit": "7ec77b412b98cf092bbf38e73b7361c2f3708a71",
      "tree": "ae665c569fc3d2600fe863131bf3fea526d2d86c",
      "parents": [
        "6ba0ac5344b7f0b6d2f2ca724cfd2689398d6a53",
        "cb2e1dd8f14db0d33259d87d8c6159c278364559"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 21 13:13:09 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 21 13:13:09 2018 +0000"
      },
      "message": "Merge \"Canonicalize shared libraries in ClassLoaderContext::CreateClassLoader.\""
    },
    {
      "commit": "cb2e1dd8f14db0d33259d87d8c6159c278364559",
      "tree": "8fb0e0f8395f6fd7c302783198ecea7e8f41ecf6",
      "parents": [
        "42b95c491d9ce828069e523f59d6f6c10e660a5f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 20 11:15:13 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 21 09:48:02 2018 +0000"
      },
      "message": "Canonicalize shared libraries in ClassLoaderContext::CreateClassLoader.\n\nbug:111174995\nTest: class_loader_context_test\nChange-Id: I547b8d5660ac5cb600d09b8546062e4b054f0eb7\n"
    },
    {
      "commit": "3573c3669b281e0fa6c59019d4e9de5d37e651ea",
      "tree": "6d1cbb25f1c0a8500e8735f92be5d1338ae17700",
      "parents": [
        "27cfa8fc8c11fbf2d5a069cf767faee4f1312765",
        "41c911f23117fc691fea31f2f6a4b3c9a550762b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 20 17:15:05 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 20 17:15:05 2018 +0000"
      },
      "message": "Merge \"ART: Fix misc-uniqueptr-reset-release\""
    },
    {
      "commit": "42b95c491d9ce828069e523f59d6f6c10e660a5f",
      "tree": "b782fa1e686b98abb36797348ed85dd888987eef",
      "parents": [
        "33e5d5289c32c6129138788a5e01ce6243676373",
        "f378fff08d0bbe5104ef5d0e065a13c89df7331b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 20 10:00:38 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 20 10:00:38 2018 +0000"
      },
      "message": "Merge \"Fix parsing of shared libraries in class loader context.\""
    },
    {
      "commit": "6b9fd8c23a27b11961fcdcf43504c06a654fb83b",
      "tree": "e33849628ae15b059087395f0268d95c7dfeea73",
      "parents": [
        "b321ac28f726a7ed41f277382d85702ffdfbe00f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 16 10:25:42 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 19 21:20:58 2018 +0000"
      },
      "message": "Support shared libraries in ClassLoaderContext::CreateClassLoader.\n\nbug: 111174995\nTest: dex2oat_test, class_loader_context_test\n\nChange-Id: I482012eca408f9e064d7c3d787662376e1b0de3b\n"
    },
    {
      "commit": "41c911f23117fc691fea31f2f6a4b3c9a550762b",
      "tree": "22b86d086dee0faddf58175596ad60ff66657303",
      "parents": [
        "d295a75d952742604eaae0530daea19dd6fd782c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 19 11:34:16 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 19 11:34:16 2018 -0800"
      },
      "message": "ART: Fix misc-uniqueptr-reset-release\n\nBug: 32619234\nTest: m test-art-host\nChange-Id: Iffed77347180aca0f356a03db02ddbe0200b1e9c\n"
    },
    {
      "commit": "f378fff08d0bbe5104ef5d0e065a13c89df7331b",
      "tree": "2330dec2f7c79fba6e3d6c645f5e97f4250213a7",
      "parents": [
        "498d7c1752d02f6687c2b19a077ad1942d1d6348"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 19 12:52:26 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 19 12:52:26 2018 +0000"
      },
      "message": "Fix parsing of shared libraries in class loader context.\n\nThe code did not take into account shared libraries depending\non other shared libraries.\n\nbug: 111174995\nTest: class_loader_context_test\nChange-Id: I0b90cfaff72b5bd7985dbe90b5e72d5988141490\n"
    },
    {
      "commit": "9893c4773ce1da4dfb9f15140e93bf785abd89f7",
      "tree": "3b665e3d9064957f6cc5b8eb9cf7b0c5177c91bc",
      "parents": [
        "61f9bf1d48c43a4b65df5d0fe2d70c4ee87921f8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 13 15:39:53 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 13 15:39:53 2018 +0000"
      },
      "message": "Add missed null check in ClassLoaderContext::VerifyClassLoaderContextMatch.\n\nbug: 119441748\nTest: class_loader_context_test\nChange-Id: I68301a568eb321b42209584a3328e9a1b0fcc7ba\n"
    },
    {
      "commit": "06af3b42e585531d3191c27ba6be1b9e768860a2",
      "tree": "a34a57eedd94b5bd0cdaa388211a272f6553254d",
      "parents": [
        "ce2a00daa92670a4fc01ef59fdbc3769a846f69c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 29 10:39:04 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 01 15:06:29 2018 +0000"
      },
      "message": "Add support for shared libaries in class loader context.\n\nFor example:\nPCL[a.dex:b.dex]{PCL[s1.dex]#PCL[s2.dex:s3.dex]};DLC[c.dex:d.dex]{DLC[s4.dex]}\n\nRewrite the class_loader_chain_ to be a chain instead of a vector,\nto simplify processing and encoding of contexts.\n\nbug: 111174995\nTest: class_loader_context_test, test.py\nChange-Id: I7c9f71b67a91b43ae534721b43dc4fdb8e0b6ec4\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": "afaf7f8198fe5ffc054278da6800f81dd83f272c",
      "tree": "3ebdec9fca813351d178709743121fa66815a7a0",
      "parents": [
        "6ca8ec7809f87ccac8d9d66d267f2379bdfdfe66"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 16 11:32:38 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 18 08:20:09 2018 -0700"
      },
      "message": "ART: Enable bugprone-unused-return-value\n\nEnable bugprone-unused-return-value as an error. This is on top of\nthe compiler warning for attribute((warn_unused)).\n\nMark the current occurrences (all unique_ptr.release()) with NOLINT\nto signal that we know what we\u0027re doing.\n\nBug: 32619234\nBug: 117926937\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: I36659722335eef36acfa5845289104257a393874\n"
    },
    {
      "commit": "78baed5ec51a6e2d113e8b29aafa5c6203b46845",
      "tree": "57ca544020f309e3529e33300ad4867ca4579c1e",
      "parents": [
        "a48eb7e0690187618d2824a7d9b5601e7f5cdf80"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 11 10:44:58 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 12 17:53:50 2018 +0100"
      },
      "message": "ART: Use reinterpret_cast{32,64}\u003c\u003e when appropriate.\n\nAnd fix UnstartedRuntime checking for null arguments in all\nfunctions where we now use reinterpret_cast32\u003c\u003e.\n\nThis is a follow-up to\n    https://android-review.googlesource.com/783607 .\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: Pixel 2 XL boots.\nTest: m test-art-target-gtest\nTest: testrunner.py --target --optimizing\nBug: 117427174\nChange-Id: I58f8ad59f70e3fbb1d06aef419cd26555706fa65\n"
    },
    {
      "commit": "7bc8e8f09603943c6033b995f2231bf11f768714",
      "tree": "6e246cc4340f10541bfd44b013ecd42c33e0a0ee",
      "parents": [
        "0614de7055d009118e0687658687dcb55963de94"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Oct 05 14:34:13 2018 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Oct 05 14:34:13 2018 -0700"
      },
      "message": "Use only signed/unsigned numbers with ParseInt/ParseUint respectively\n\nTest: build\nChange-Id: Id8278b4c201891d28f55d117babdc6ca309282b8\n"
    },
    {
      "commit": "f94117029115e183256f393e31b9aeeb15428d40",
      "tree": "8d04c65a5b8c96e234b70674ab27dbeefc8893f1",
      "parents": [
        "454a5c248135d94d32dd7d38b21e742661e57d67"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 06 17:16:57 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 06 17:16:57 2018 -0700"
      },
      "message": "ART: Remove utils.h\u0027s ParseUint \u0026 ParseInt\n\nUse the versions from libbase, instead. Removes a runtime-int warning.\n\nBug: 32619234\nTest: mmma art\nChange-Id: I5a9a9e2647b1d93eee6d9ea2bf37cc09390e8c16\n"
    },
    {
      "commit": "adc9086aac1f9442f5ec80cec5734909f0b0f262",
      "tree": "b55804542510f8592c1c5b9e522a16d35567b2f1",
      "parents": [
        "54c42cea2b73e664c36fc4efaa28a33aea39b97c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 11 13:03:06 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 11 13:05:40 2018 -0700"
      },
      "message": "Revert \"Revert \"Do not load app image for class collisions\"\"\n\nFixed bug in oat file assistant to allow the special shared library\nmarker.\n\nBug: 77342775\nBug: 79200502\nBug: 79575750\nTest: test-art-host\n\nThis reverts commit 2c7e13b120926d3c3c18d649cd9849ea31b81477.\n\nChange-Id: I647f55a07e4aef8bef56fb1ad7ff23056174b135\n"
    },
    {
      "commit": "2c7e13b120926d3c3c18d649cd9849ea31b81477",
      "tree": "74766773ba254c40b44b53012156061ff2527c88",
      "parents": [
        "b12c46f8382ca939f55abc0c20fb48fb17b2c1be"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 11 19:40:17 2018 +0000"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 11 19:43:32 2018 +0000"
      },
      "message": "Revert \"Do not load app image for class collisions\"\n\nThis reverts commit d8860b42e47d48fcc47db9d0daf5a1b9432180a1.\n\nBug: 77342775\nBug: 79200502\nBug: 79575750\n\nReason for revert: Some regressions in boot time.\nTest: test-art-host\n\nChange-Id: Id5e5844b5156d048a54011708378c7cdb0650f68\n"
    },
    {
      "commit": "d8860b42e47d48fcc47db9d0daf5a1b9432180a1",
      "tree": "c5522fa9c6d1e9e63cb497da7dc84b72b6b11531",
      "parents": [
        "48af3b39cd7c8abaa7f9671191ec8260630239b2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 02 14:58:12 2018 +0100"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 10 16:17:30 2018 -0700"
      },
      "message": "Do not load app image for class collisions\n\nEven for special shared libraries that are compiled with\n\u0027--class-loader-context\u003d\u0026\u0027, we must reject the app image\nif there are duplicate classes.\n\nIn the case where \"\u0026\" is not specified, avoid the collision check.\nThis is safe since the class loader context check was actually run.\n\nTest: 172-app-image-twice\nBug: 77342775\nBug: 79200502\n\nChange-Id: Idc2d59166680948d4d34d0f224491f77ecad2974\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": "c4440775c5627fed9701e14a1f9d14dca27ed176",
      "tree": "9d38b1e4af40ac0b209b6bdcae357a8a74630435",
      "parents": [
        "e83bae5c62c7e739e18cafa1126a727b4788895c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 16 14:40:56 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 17 11:56:31 2018 -0700"
      },
      "message": "Add arg for overwriting class loader class path\n\nAdded stored_context srgument to EncodeContextForOatFile that\noverwrites the class path when non-null.\n\nThis is used by the --stored-class-loader-context argument. Fixed\nthe test.\n\nBug: 70934104\nBug: 67345922\nTest: test-art-host-gtest\n\nChange-Id: If877d8cfe9d34eeaa941e9f6df2e12539d9c4a6f\n"
    },
    {
      "commit": "f5abfc42f0d986b9f8eb782d7e761f1a08784210",
      "tree": "7e17440b44ff79565c7a5f43197b002c2eb9d68b",
      "parents": [
        "8179b624fdf91f0b48791d79844fa02cbe750e5b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 23 21:51:54 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 11 11:18:55 2018 -0700"
      },
      "message": "Add stored class loader context option\n\nMotivation: Enable having a different class loader context during\npreopt vs the one stored in the oat file.\n\nAdded test.\n\nBug: 70934104\nBug: 67345922\n\nTest: test-art-host\nChange-Id: I6c0851370e0740e5f47faf25a5494022034f6fa4\n"
    },
    {
      "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": "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": "06ffecfe4260d64850df23023ed94b167438d996",
      "tree": "1b20af62c60ef4799749c1e4e40efe13f5e85f25",
      "parents": [
        "961155050f6082f05410e8285e16caff9e7d6028"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 14 10:31:54 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 14 10:31:54 2017 +0000"
      },
      "message": "Don\u0027t add a \u0027/\u0027 if it\u0027s already there.\n\nTest: class_loader_context_test\nChange-Id: I3fd310cf9c2da6c295ba479d0f8f4ba3137feda1\n"
    },
    {
      "commit": "92003fe2d5f9031f56c8b0407d8d934023fb4cb2",
      "tree": "42c0d7a799d8fe9b4e95607d4d72df9d79ea45e6",
      "parents": [
        "099f8d6955700913af2610793928ae3e29f3002d"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Sep 06 02:22:57 2017 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Nov 13 15:54:36 2017 -0800"
      },
      "message": "Revert \"Use real locations when opening dex files from the context\"\n\nThis reverts commit 821a2595e2438554424879d6cb3594810ca8e636.\n\nReason for revert: Oat file assistant logic was updated to not\nuse realpaths anymore. So this is no longer needed.\n\nTest: m test-art-host-gtest\n\nChange-Id: Ia63a50f60b82ec3e20606d0be852607c9d2eb26e\n"
    },
    {
      "commit": "e875f4c210ce0598e47b6d66ec12cd7c60208844",
      "tree": "c3836836ceafec0d881fd7c27a1438ab860cac0a",
      "parents": [
        "88a6296e13cae96157a451efa5776d1fecb05912"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 26 12:26:43 2017 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 26 12:26:43 2017 +0100"
      },
      "message": "Don\u0027t verify dex file when the runtime is in NoVerify mode.\n\nbug: 30972906\nbug: 63920015\n\nTest: systrace of priv-app with OOB, no verification at startup\nChange-Id: I479a7ddcfa495228a379744b23c26fa8c91c3dde\n"
    },
    {
      "commit": "095c6c96236476b605b3ac672f6d2b8c151e9479",
      "tree": "fe04b7fe93e65efadd3f019dd1ecba4c2c40df18",
      "parents": [
        "b277aa1385f7f4593c9978d8106669142d158f4f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 19 13:59:55 2017 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Oct 20 14:22:52 2017 +0100"
      },
      "message": "Pass the verify flag to DexFileLoader utilities.\n\nRefactoring-only change.\n\nAlso remove unused DexFilerLoader::OpenMemory.\n\nbug: 30972906\nbug: 63920015\n\nTest: build.\n\nChange-Id: I7cd4b5787565ab1a3457ce2be6bb14657229c550\n"
    },
    {
      "commit": "79c87da9d4698ec58ece65af0065eebd55a1cfe0",
      "tree": "399797f37712da9d20829d5b5059b6c84943cb02",
      "parents": [
        "656e97f949df4081fba908113406b32915174502"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 10 11:54:29 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 11 14:47:06 2017 -0700"
      },
      "message": "Add DexFileLoader class\n\nAdded DexFileLoader class, moved functionality from DexFile there:\n- Multidex loading logic\n- DexFile opening logic for Zip and etc\n- Some other helpers\n\nBug: 63756964\nTest: test-art-host\n\nChange-Id: Ic3dfa458947d4b69912dea5cdd836e7e8f55061c\n"
    },
    {
      "commit": "91842aebfa418f5efad8933a9d79db097f079246",
      "tree": "71ec195627932114f515cffc4fb1933dfc59b3d6",
      "parents": [
        "f4ef5c6e2554c904ef9c088de9a63ae8b7c854e4"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 07 14:15:28 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 21 16:42:30 2017 -0700"
      },
      "message": "Lower PLOG(ERROR) to PLOG(WARNING) if unable to find realpath\n\nWe were emitting a PLOG(ERROR) from class_loader_context if we are\nunable to find the dex-files realpath. This is an issue because\nInMemoryDexClassLoader and some --redefine-stress tests cause this\nmessage to be printed, making the test fail.\n\nThis also brings it more into line with other logs in this file.\n\nTest: ./test/run-test --host --jvmti-redefine-stress 071\nChange-Id: Idc21bf89be02ca9263fbec7f28fdf036196ab58c\n"
    },
    {
      "commit": "c5b215f7004c46a274a54e232f0cd146c7494f9a",
      "tree": "b0e628ec0c22aa1d23c42bc63a323f43358f7eba",
      "parents": [
        "5809417697955005751d60498964f6d4bd4a096f"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Sep 12 14:49:37 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 14 16:28:50 2017 -0700"
      },
      "message": "Update the context classpath after the dex files are opened.\n\nThe classpath stored in the context maybe be out of sync with the list of\nopened dex files if any of the dex file is a multidex or cannot be opened.\n\nThis CL ensures that OpenDexFiles updates the classpath with the dex file\nlocations that were open.\n\nThe change does not affect the current use of ClassLoaderContext. It is a\npreparatory step for b/62269291\n\nBug: 62269291\nTest: m test-art-host-gtest-class_loader_context_test\nChange-Id: Ibe675df9b2c06a4df8189f0d72df8b4061603a0e\n"
    },
    {
      "commit": "d25c91583512fceebc7f865b27387025695aa11f",
      "tree": "fbd0818c72d91668e850ac843a2d1d85af09182a",
      "parents": [
        "e69463a2a0d0a5ea4cdb1ff4d74ba3ae0e41eb3d",
        "1e96a5d58d68909cbc2d6bf2ee08c6c11f7b858e"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 07 21:25:29 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 07 21:25:29 2017 +0000"
      },
      "message": "Merge \"Fix context verification for relative dependencies\""
    },
    {
      "commit": "1e96a5d58d68909cbc2d6bf2ee08c6c11f7b858e",
      "tree": "6018dd7f5ecff7e0f7298581546eea8bc9761453",
      "parents": [
        "821a2595e2438554424879d6cb3594810ca8e636"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Sep 05 17:10:48 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Sep 06 11:39:00 2017 -0700"
      },
      "message": "Fix context verification for relative dependencies\n\nIf --classpath-dir is passed, dex2oat encodes the dependencies as relative\npaths in the class loader context.\n\nHowever, at runtime we always get the full apk paths. This means we will\nalways get a context mismatch because even if we have the same file we\nencode its path differently at runtime and compile time.\n\nOnly the split apks are affected by this issue since they will depend on\nthe base apk which will be encoded as a relative location.\n\nThe fix is to propagate the behavior from OatFile::Setup() which resolves\nthe relative locations.\n\nIn fixing this I took a bit more general approach and try to infer the\ncontext locations that should be compared based on the actual context and\nthe expected context.\n\nBug: 65385993\nTest: m test-art-host-gtest\n      manual with split-apks\n\nChange-Id: I4c8e7c4f0a3a18dba8daca752a21da4822cce490\n"
    },
    {
      "commit": "7252738e5c8aa439e2c98e4b887c5eab20cd38c5",
      "tree": "dcc9bd905ca2035a91c9ede198f88cc48d9be169",
      "parents": [
        "788b8b27bc3e70ca210537c34d691c8d1fd5aea4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sat Sep 02 16:53:03 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 04 14:23:40 2017 -0700"
      },
      "message": "ART: Don\u0027t prepend \u0027/\u0027 if classpath_dir is empty\n\nWhen no classpath_dir is given, do not prepend \u0027/\u0027 to a relative\ndex location.\n\nAdd tests.\n\nBug: 65318303\nTest: m test-art-host-gtest-class_loader_context_test\nTest: m test-art-host\nChange-Id: Ib374815ce3fa9d67694f3a23037cd3b8eea35173\n"
    },
    {
      "commit": "821a2595e2438554424879d6cb3594810ca8e636",
      "tree": "503ca61e77ef7cf4c115510c617b458a6ad42c95",
      "parents": [
        "3753bcdba6a36824195a749e7776d789714167e3"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Aug 11 14:33:38 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Sep 01 18:23:21 2017 -0700"
      },
      "message": "Use real locations when opening dex files from the context\n\nThe oat file assistant uses real locations when opening dex files which\nwill later be checked against the class loader context embedded in the oat\nfile. In order to guarantee a match we need to use real paths in the\ncontext as well.\n\nBug: 64460009\nTest: m test-art-host-gtest\nChange-Id: I1b564baa0c933172891a10a448ce1ef129be5ea2\n"
    },
    {
      "commit": "1991589d4515561411156473c89d77d295183bdd",
      "tree": "82ab908d83f7ecb5d67180aeff4814d873de28e8",
      "parents": [
        "053a84b762536144d5cae309ca5abd97766b4583"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Aug 03 17:10:36 2017 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Aug 03 17:10:36 2017 +0000"
      },
      "message": "Revert \"Revert \"Stop using the runtime classpath in dex2oat\"\"\n\nThis reverts commit 053a84b762536144d5cae309ca5abd97766b4583.\n\nReason for revert: Prepare the CL again to be submitted after\nhttps://chrome-internal-review.googlesource.com/c/423809 gets merged.\n\nChange-Id: I1d0e3d6bf2aa16249b2d0146acd9c81149924c00\n"
    },
    {
      "commit": "053a84b762536144d5cae309ca5abd97766b4583",
      "tree": "8e09051aec03d574a7739157a6682f881b409bf8",
      "parents": [
        "84f82b9972ec29bd05b1575ae6d638255be2f285"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Aug 03 17:08:53 2017 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Aug 03 17:08:53 2017 +0000"
      },
      "message": "Revert \"Stop using the runtime classpath in dex2oat\"\n\nThis reverts commit 84f82b9972ec29bd05b1575ae6d638255be2f285.\n\nReason for revert: I submitted this to ealrly. It needs to be submitted after https://android-review.googlesource.com/c/450390 gets merged\n\nChange-Id: I91e6259b61d72a48a1d18e62f53ef82f18692930\n"
    },
    {
      "commit": "84f82b9972ec29bd05b1575ae6d638255be2f285",
      "tree": "82ab908d83f7ecb5d67180aeff4814d873de28e8",
      "parents": [
        "1ccf61377290451b4e5cfe29ece5de3c8c585e0e"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Aug 02 18:28:08 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Aug 02 19:26:41 2017 -0700"
      },
      "message": "Stop using the runtime classpath in dex2oat\n\nUse only --class-loader-context to infer the classpath that should be used\nfor compilation.\n\nThe tests and benchmarks no longer rely on --runtime-arg --classpath being\npassed to dex2oat.\n\nBug: 36044779\nTest: m test-art-host\nChange-Id: Iba4cb3489f4a1a4a421071e1889d806d6c1d0738\n"
    },
    {
      "commit": "27e0d1f3da2e0b7046dacb40794739d739e454a3",
      "tree": "d3c69ca2917325cf20998060d0e0d5f8ab6b1b8e",
      "parents": [
        "52a3c989f96984f9bc9e02620694fc44708a1df2"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 26 00:16:07 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Aug 02 19:23:14 2017 -0700"
      },
      "message": "Pass the class loader context to dex2oat when optimizing at runtime\n\nUntil now we always passed the special shared library symbol \"\u0026\" when we\ncalled dex2oat at runtime without an explicit class path.\n\nThis CL changes that and passes the class loader context inferred from the\nruntime class loaders to dex2oat. If any of the runtime class loaders is\nnot supported we continue to pass the special library symbol.\n\nBug: 38138251\nTest: m test-art-host\nChange-Id: Ica43ee8a3f36dab2d9ed0e634a9f6341379c8e1c\n"
    },
    {
      "commit": "c932707bbddfe5d8c08253f5528678cd878775c6",
      "tree": "866f8c9b02a1972a0070fd85b6d996b2dc9b3cf1",
      "parents": [
        "62a96c99846b74eb64a28cfa05730191710e6974",
        "7d0f81c51518d7f7756ccc49ff4b5d6a829eef8e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jul 26 23:51:27 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 26 23:51:27 2017 +0000"
      },
      "message": "Merge \"ART: Add more logging to ClassLoaderContext mismatches\""
    },
    {
      "commit": "7d0f81c51518d7f7756ccc49ff4b5d6a829eef8e",
      "tree": "84b2f12e03a64a29ef47f273ad49b4fb024bec70",
      "parents": [
        "741eb89efc34ab5d1686e94f1ccd8eeef41c5063"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 25 18:25:41 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 25 19:50:30 2017 -0700"
      },
      "message": "ART: Add more logging to ClassLoaderContext mismatches\n\nTo aid in debugging, add the original specifications to the warning.\n\nBug: 63977059\nTest: m test-art-host\nChange-Id: Icbf7da9cbce1641b99d8572e09d74141c71e9fe9\n"
    },
    {
      "commit": "1a509c8effc938ba3da0f90ad83abb124b296386",
      "tree": "39af8d4529cf30b052b9eb62c047b89191c247d3",
      "parents": [
        "41acdc1df1bceaa462d134b8ce30419d301e76d7"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jul 24 16:51:21 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jul 24 16:52:40 2017 -0700"
      },
      "message": "Be prepared to handle empty class loader contexts\n\nWhen executing run-tests we can hit an empty class loader contexts if the\ncompilation sources are passed with \"-cp\" and later removed from the\ncontext.\n\nBe prepared for such case and assume a PathClassLoader context.\n\nBug: 63977059\nTest: ./art/test/run-test --host --optimizing --dev\n      test-art-host\n\nChange-Id: Id0fa853b2407e358592f89766adb5dad19137289\n"
    },
    {
      "commit": "41acdc1df1bceaa462d134b8ce30419d301e76d7",
      "tree": "4e8978a1550d57c48803ad7bbc5c5a207986d4cb",
      "parents": [
        "bacafb19fa654fb6c7ad610305bed45c2e4682e8"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 18 17:45:32 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 18 17:48:36 2017 -0700"
      },
      "message": "Fix the default ownership of dex files in ClassLoaderContext\n\nBy default the context should have the ownership.\n\nTest: valgrind --leak-check\u003dfull\n../out/host/linux-x86/nativetest/art_runtime_tests/class_loader_context_test\nBug: 38138251\n\nChange-Id: I21ff048018abba61999b6025281c73fc9899cae0\n"
    },
    {
      "commit": "c79470dd970dd30cf3b383c635543e8af3761478",
      "tree": "fd017fa725bb05a9ff0d66dc64f9a6657a09d7c3",
      "parents": [
        "3f9186446faa01636475596335240f39472ba9f4"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 12 17:37:42 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 18 11:42:36 2017 -0700"
      },
      "message": "Allow dex2oat to create a full class loader context\n\nWe previously checked that dex2oat sees only a single class loader. This\nCL removes the restriction and enables dex2oat to create and compile with\na full class loader context.\n\nTest: m test-art-host\nBug: 38138251\nChange-Id: I03e75a75757995ce8ce3addf0bc0a708e18ac050\n"
    },
    {
      "commit": "3f9186446faa01636475596335240f39472ba9f4",
      "tree": "ac0320e73671d11551ba65867a51d74b5dc69aee",
      "parents": [
        "57d0accc081c1779edb604ab86e5a4c0cfba16eb"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 11 19:04:20 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 18 11:42:36 2017 -0700"
      },
      "message": "Verify the class loader context when loading oat files\n\nPreviously, the oat_file_manager would expect and perform validation on a\nsimple classpath: a list of dex files separated by \u0027:\u0027.\n\nThis is no longer enough since the oat file may encode a chain of class\nloaders now. The CL moves the validation logic in ClassLoaderContext and\nextends it to verify the complete chain of class loaders.\n\nTest: m test-art-host\nBug: 38138251\nChange-Id: I8ac9c65db1a14909aaecb04fa7a7115ddedc673f\n"
    },
    {
      "commit": "57d0accc081c1779edb604ab86e5a4c0cfba16eb",
      "tree": "15af07023c0576e36e4fcfb78dd6e29890edcfd2",
      "parents": [
        "7b0648aa7cb4b7a58e73bf353e031dfe4553d9d7"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 11 17:41:30 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 18 11:42:33 2017 -0700"
      },
      "message": "Create a class loader context starting from an existing ClassLoader\n\nExtend ClassLoaderContext to be able to generate a context from an\nexisting class loader.\n\nThis will be used in extending the duplicate class check to cover\nDelegateLastClassLoaders.\n\nMost of the functionality is migrated from OatFileManager with some\ncleanups consisting of extra docs and more conservative checks on the\nintegrity of the class loader chain.\n\nTest: m test-art-host\nBug: 38138251\nChange-Id: If7c18cb75bfc9e6784676f96a666bf13b04c8b8b\n"
    },
    {
      "commit": "7b0648aa7cb4b7a58e73bf353e031dfe4553d9d7",
      "tree": "e588dee4a455cb248ec9a1830ee7d1a7c12acfbc",
      "parents": [
        "1ce7085831316272f071a01d14eea8048264a7bf"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jul 07 18:40:50 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 12 13:02:19 2017 -0700"
      },
      "message": "Move dex files dependencies (en/de)coding to ClassLoaderContext\n\nEncode the full class loader context in the oat file (rather than just a\nlist of dex files).\n\nThe context encoding matches the format used by dex2oat with the addition\nof checksums.\n\nTemporarily assert that at decoding time we are operating on a\nPathClassLoader until the checking logic covers all supported cases.\n\nAlso, bump the version of the oat file because the format of the classpath\nkey has changed.\n\nThis is a transition step to minimize the size of follow up changes.\n\nTest: m test-art-host\nBug: 38138251\nChange-Id: I9ec0cfe092ce1afccb741a36e737896880d5f1d2\n"
    },
    {
      "commit": "87e2cb64ab02d9bdc48255130c67168c809c5f62",
      "tree": "2c4610937776365e440f9ec689daf737b111c967",
      "parents": [
        "c5e4a53252bda0052fb642424e9f5ba908603eb8"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 13 21:48:45 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jul 10 17:08:06 2017 -0700"
      },
      "message": "Add support for processing class loader contexts\n\nInitial support for recognizing the class loader contexts.\n\nIn order to correctly compile dex files which at runtime are loaded with\na non-trivial class loader chain we need to make dex2oat aware of the\nprecise runtime context.\n\nThis CL adds the infrastructure to process arbitrary and arbitrary chain\nof class loaders. ClassLoaderContext is able to parse a class loader\nspec from a string and create the runtime structure based on it.\n\nThe integration with dex2oat and oat file assistant will follow up.\n\nThe string specification looks like\n\"PCL[lib1.dex:lib2.dex];DLC[lib3.dex]\"\n\nIt describes how the class loader chain should be build in order to\nensure classes are resolved during dex2aot as they would be resolved at\nruntime. This spec will be encoded in the oat file. If at runtime the\ndex file will be loaded in a different context, the oat file will be\nrejected.\n\nThe chain is interpreted in the natural \u0027parent order\u0027, meaning that\nclass loader \u0027i+1\u0027 will be the parent of class loader \u0027i\u0027. The\ncompilation sources will be added to the classpath of the last class\nloader. This allows the compiled dex files to be loaded at runtime in a\nclass loader that contains other dex files as well (e.g. shared\nlibraries).\n\nNote that we accept chains for which the source dex files specified\nwith --dex-file are found in the classpath. In this case the source dex\nfiles will be removed from the any class loader\u0027s classpath possibly\nresulting in empty class loaders.\n\n* This is the first CL, which adds the infrastructure for processing\na class loader context. Currently it CHECKS that only a single\nPathClassLoader is created.\n\nTest: m test-art-host\nBug: 38138251\nChange-Id: I312aa12b5732288f3c1df4746b5775a32e0bfb04\n"
    }
  ]
}
