)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "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": "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": "77ef93baca92ca0477568eb2f9141477d1e89080",
      "tree": "ab9baf48673e808e44aff6dad0526bb204e1fb8d",
      "parents": [
        "52f6cc022efdc3b380bd1d88de31660b46dfd81d"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jan 12 11:18:31 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 16 18:23:50 2018 +0000"
      },
      "message": "Make ClassLoaderContextTest pass when OUT_DIR is used\n\nIf one uses OUT_DIR when building android and it is not a subdirectory\nof ANDROID_BUILD_TOP then the ClassLoaderContextTest cannot be run\nsuccessfully from make. We change the test so it will print an error\nand pass anyway in a situation to make testing easier.\n\nTest: OUT_DIR\u003d/something/not/near/tree ./test.py --host -j50\nBug: 72042237\nChange-Id: Ic55d161350f064facbdb6329c20ab53c96067a1b\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": "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": "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": "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": "c4be2c83907494acc0470647cd1eabed69b95739",
      "tree": "85bebf0fddc9894c54953953c5d8826f221de62a",
      "parents": [
        "c69f6c310b49f2a22b756b318e5d5703ef304f0e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 05 12:40:06 2017 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 05 13:16:43 2017 +0100"
      },
      "message": "Handle the case cwd has a trailing slash.\n\nFixes class_loader_context_test.cc on target.\n\nTest: test-art-target-class_loader_context_text\nChange-Id: I54252c909075e09678bc389cb1f210cb0d55f2d9\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": "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": "b22ae40038aeeebb16936fbf62b48f080d6e7ef4",
      "tree": "cef0433bc2a897ed8afccc8d763922505543c1db",
      "parents": [
        "2c2e13ec24bff70db6e49270b9d4d787add9925e",
        "1a509c8effc938ba3da0f90ad83abb124b296386"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 26 16:18:11 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 26 16:18:11 2017 +0000"
      },
      "message": "Merge \"Be prepared to handle empty class loader contexts\""
    },
    {
      "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": "8cf9cb386cd9286d67e879f1ee501ec00d72a4e1",
      "tree": "88e86e214b425e444760fe4e0ffeee677e1558a2",
      "parents": [
        "914b7b6a6c9f399b26b41e9160e9871ef749e0db"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 19 09:28:38 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 24 16:07:10 2017 -0700"
      },
      "message": "ART: Include cleanup\n\nLet clang-format reorder the header includes.\n\nDerived with:\n\n* .clang-format:\n BasedOnStyle: Google\n IncludeIsMainRegex: \u0027(_test|-inl)?$\u0027\n\n* Steps:\n find . -name \u0027*.cc\u0027 -o -name \u0027*.h\u0027 | xargs sed -i.bak -e \u0027s/^#include/ #include/\u0027 ; git commit -a -m \u0027ART: Include cleanup\u0027\n git-clang-format -style\u003dfile HEAD^\n manual inspection\n git commit -a --amend\n\nTest: mmma art\nChange-Id: Ia963a8ce3ce5f96b5e78acd587e26908c7a70d02\n"
    },
    {
      "commit": "a308a327884920cbb1e3e62964c4b5a01c29af8c",
      "tree": "4bd09065c52f18685dc9e10d9eabdcdb29a51539",
      "parents": [
        "bacafb19fa654fb6c7ad610305bed45c2e4682e8"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 18 16:51:51 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 18 17:02:27 2017 -0700"
      },
      "message": "Change kMultiDexSeparator from \u0027:\u0027 to \u0027!\u0027\n\nThe \u0027:\u0027 separator is commonly used to separate class path elements. That\nmeans that we cannot easily encode multidex location in a classpath\nwithout complicating the parsing logic unnecessarily (e.g. when encoding\nclasspaths in the oat file).\n\nFor easy parsing and understanding kMultiDexSeparator and\nkClassPathSeparator should have different values. \u0027:\u0027 is a wide spread\nclasspath separator so this CL changes the value of kMultiDexSeparator to\n\u0027!\u0027 which is also commonly used to denote an object inside a given\ncontainer.\n\nTest: m test-art-host\nBug: 38138251\nChange-Id: I30995c553d9131478c6c071b27327df6d2de06a7\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"
    }
  ]
}
