)]}'
{
  "log": [
    {
      "commit": "1cedb4a2779fd161f781503fd5de08cab0a1c85b",
      "tree": "a9c0b7082e0d5d2f1b931eac7db3fcf9b0d46862",
      "parents": [
        "7909e1e4cc741b38b25328e2f9077beb7ecd018b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 06 14:13:28 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 06 14:15:00 2019 +0000"
      },
      "message": "ART: Move .bss mappings check before .bss init.\n\nPreviously the check was done before we compared the dex\nfile checksums, so an out of date oat file could have\nfailed the check. Now we\u0027re doing the check only if we\u0027re\ninitializing the .bss section for use by an executable oat\nfile, i.e. after matching the dex file checksums.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 119601889\nChange-Id: Ib79d84c5bc2cf0674fc1f76071c589d49663e13c\n"
    },
    {
      "commit": "59ae4f949c26266a60ba0318995b46b4308312bb",
      "tree": "93ceebafd3b019ac3f7c36c828ce8f43c7c71a25",
      "parents": [
        "6e78158c7a0acad7fcb5c9e1b45ab7acda796671"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 04 14:06:02 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 04 16:38:16 2019 +0000"
      },
      "message": "Replace StringPiece with std::string_view in OatFile.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 123750182\nChange-Id: Ia5a3c0bb5fdfba7cf88b82768c6722493e258554\n"
    },
    {
      "commit": "206348cea8b086a484b8bde37b2e281e5f7db638",
      "tree": "1e83b6484dbd9218ace7c94d266dc90ed7e66505",
      "parents": [
        "58a268aa3569d8ad4f0e831de578620e1079ed59"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Dec 05 11:11:33 2018 -0800"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Jan 28 09:37:57 2019 -0800"
      },
      "message": "Selectively allow dead reference elimination\n\nAllow dead reference elimination in methods not containing\n@ReachabilitySensitive accesses or calls, when the class is marked\n@DeadReferenceSafe.\n\nAdd 1339-dead-reference-safe to aggressively check that everything\nworks as intended.\n\nBug: 111453875\n\nTest: art/test/testrunner/testrunner.py --host --64 -t 1339-dead-reference-safe\n\nDetect ReachabilitySensitive annotations.\n\nChange-Id: I70c20431fdbcfcfd2692b2255d12ad59e37cb669\n"
    },
    {
      "commit": "3f1dcd39e134d994ac88dcc4f30ec8cabcd8decf",
      "tree": "365d20ad6b68ff1dbd4903764b63880324136e4d",
      "parents": [
        "0f0a4e40667c87fbd4ae5480eddbfd701bfabfa2"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Dec 28 09:39:56 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 02 10:32:25 2019 -0800"
      },
      "message": "ART: Move dex structs into own header\n\nSeparating out the structs from DexFile allows them to be forward-\ndeclared, which reduces the need to include the dex_file header.\n\nBug: 119869270\nTest: m\nChange-Id: I32dde5a632884bca7435cd584b4a81883de2e7b4\n"
    },
    {
      "commit": "97b281129e556e6f3a91e9893f71ca45e7715e3f",
      "tree": "3e90f0148f3f6d073a29b0bfcd774e0689fb9fb4",
      "parents": [
        "0bbac3089b5637103585b04774eea3d959c4f24d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Dec 04 09:09:12 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 06 11:37:19 2018 -0800"
      },
      "message": "ART: Clean up base/utils.h\n\nRemove dead code. Remove unnecessary includes.\n\nBug: 115837065\nBug: 119869270\nTest: m\nChange-Id: Ieb07546e9ebd476b7b1459fb8dd6cf5545d0af20\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": "f4efa9ed0d7616bd32b258562d6977d9b7554af2",
      "tree": "826f880e65c88f85929c64907a414013f0901801",
      "parents": [
        "a52ac0cd739e6c5b33bdaf81a19370d3acf4eadf"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 17 14:12:45 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 17 17:34:47 2018 +0100"
      },
      "message": "Remove oat_data_begin checks from OatFile.\n\nMake it a CHECK() directly in the ImageSpace instead. This\ncheck was a rather weird way to prevent the use of dlopen()\nfor boot image on host because it would load the oat file\nat the wrong address. This is now done by refusing to use\ndlopen() on host when we have a memory `reservation`.\n\nAlso clean up affected files for bugprone-argument-comment.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 77856493\nChange-Id: I6f0f9d5a0542574017d98acc2f4f30a585b483f4\n"
    },
    {
      "commit": "e0669326c0282b5b645aba75160425eef9d57617",
      "tree": "3bb05553ee5f14081bb4ea8193fd29fa938e722f",
      "parents": [
        "56b0773d515527df60a38084cef3b813fefb5b9d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 03 15:44:54 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 04 12:57:49 2018 +0100"
      },
      "message": "Remove PIC option from oat files.\n\ndex2oat has been producing only PIC code for some time,\nso there\u0027s no need to record it in the oat file anymore.\nAlso get rid of the now unnecessary relocation logic\nthat was using the flag.\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: 77856493\nChange-Id: I070071ca5a808371f67883f4ae93d633a76231d0\n"
    },
    {
      "commit": "c09cd0513b860c4301ca7bd6a9065b583d102295",
      "tree": "1c7aa4ed2b9b5b1335829461e764c94565afb71d",
      "parents": [
        "40f8a74cba008af768316f0b5bfe9502174b6d02"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 23 16:36:36 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 31 11:50:53 2018 +0100"
      },
      "message": "Reserve boot image memory in one go.\n\nLoad boot image components into the reserved memory.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: Pixel 2 XL boots.\nTest: m test-art-target-gtest\nTest: testrunner.py --target --optimizing\nBug: 77856493\nChange-Id: I214f947979bc0bbfc6df4312527504e90b88a01d\n"
    },
    {
      "commit": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\n"
    },
    {
      "commit": "4b22b34c698db8aa59343d0a5af89fc737532bce",
      "tree": "985c0e28dcdf5a497737690b50d31c4eb7bbda85",
      "parents": [
        "9e53f5f19167848d043f91e6d20436e9b568b55a"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 14:43:21 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 14:43:21 2018 -0700"
      },
      "message": "Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: Id869744db54b5b366454a5e13b467ac1f4df2845\n"
    },
    {
      "commit": "b40d361019897e8b8484b772ccc0be433abafb5f",
      "tree": "cfb4498ee5757be7cec06f8e4a866e7faabfadba",
      "parents": [
        "a98d9e76ed2486db9a7490a6e421a509ab2f6e2d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 26 15:49:42 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 26 15:49:42 2018 -0700"
      },
      "message": "ART: Finish old move of OatDexFile\n\nThe class has been made standalone so it can be forward-declared,\nbut not all nested references had been updated.\n\nTest: mmma art\nChange-Id: Idc5f0af24af17dcae286dee290f729ba61693a11\n"
    },
    {
      "commit": "ea341d2830298b666d7c6faf369d2fc3fe94fef8",
      "tree": "ae20b9be257fcd1bcef71698ed06307c2932cced",
      "parents": [
        "9ddef18ae95859a985e7a0de7e22999fcbc28e07"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 11 10:33:37 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 04 13:06:42 2018 +0100"
      },
      "message": "Rewrite TypeLookupTable.\n\nImprove bit-packing of the data to store twice as many bits\nof the hash as previously. Check for bucket mismatch after\nthe first partial hash conflict (previous comments alluded\nto the bucket check but it was not implemented).\n\nAvoid an unnecessary unique_ptr\u003c\u003e indirection by making the\nTypeLookupTable moveable.\n\nTest: Rely on Treehugger.\nBug: 79514364\nChange-Id: I9fa6f712b037a6e6904d09c88670966486f56621\n"
    },
    {
      "commit": "30025095524e471ec347633e39f26ed0606bea65",
      "tree": "533cbe1808445dcd4dd6d8b7dacc180fcc29b90a",
      "parents": [
        "cee49280366af9aa35e889e90d0ae0e90b453a22"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 19 14:43:29 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 24 14:39:06 2018 +0100"
      },
      "message": "Pass the fd to OatFile::Setup to avoid selinux errors.\n\nbug: 77853712\nTest: test.py\nChange-Id: I069cda5296b561284d71b067924e1bc4a8562710\n"
    },
    {
      "commit": "9c4a015cf01989597fd899011dba310b704dacaa",
      "tree": "17101dd177beb28c1d28c8eddab645bc7d1af984",
      "parents": [
        "6485701497edf2fd4e5296c3715929ad44ea9752"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Apr 05 12:23:54 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Apr 09 23:30:08 2018 +0000"
      },
      "message": "Move more runtime code to libartbase, libdexfile\n\nMove some code that logically belongs to libartbase or libdexfile to\nthose places respectively.\n\nBug: 22322814\nTest: make -j 50 checkbuild\nChange-Id: Idfded5d24b40d8587011681e6235b6672846da19\n"
    },
    {
      "commit": "8ba5641ddc43fc13cdb0158bd9f3237c4a90a356",
      "tree": "4dad508f24b675e87dd31ff26e597289a329c5cc",
      "parents": [
        "66f40dbc3e56c7102820842ec49a55b70cf0e151",
        "b066d43b1d9184899aff32b1f243d092611ad9c6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 08 17:45:59 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 08 17:45:59 2018 +0000"
      },
      "message": "Merge \"Load ArtMethod* from .data.bimg.rel.ro entries.\""
    },
    {
      "commit": "b066d43b1d9184899aff32b1f243d092611ad9c6",
      "tree": "5409177f52b1f1c648297913cb0e0b2808b9048d",
      "parents": [
        "fe491c7b9cdd64ff4ccc10f6b212cb92a59fc765"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 03 13:14:37 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 08 10:40:10 2018 +0000"
      },
      "message": "Load ArtMethod* from .data.bimg.rel.ro entries.\n\nIntroduce a new .data.bimg.rel.ro section in oat files where\nwe store offsets of boot image objects from the beginning of\nthe boot image. At runtime we relocate these entries using\nthe actual boot image address to turn offsets to pointers.\n\nUse the .data.bimg.rel.ro to prepare the boot image methods\nused by HInvokeStaticOrDirect for PIC AOT app compilation.\nLoading the ArtMethod* from .data.bimg.rel.ro instead of the\n.bss avoids the initial call to the resolution trampoline.\n\nTest: Additional test in 522-checker-sharpening\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --pictest --npictest\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --pictest --npictest\nBug: 71526895\nChange-Id: Ie5f5b1f622704877b36730377146e59092e46c0c\n"
    },
    {
      "commit": "c431b9dc4b23cc950eb313695258df5d89f53b22",
      "tree": "422273559c3ae52caff0c6b1cf1a62a8312f0e26",
      "parents": [
        "f46f46cf5bd32788d5252b7107628a66594a5e98"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Mar 02 12:01:51 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 05 13:58:20 2018 -0800"
      },
      "message": "Move most of runtime/base to libartbase/base\n\nEnforce the layering that code in runtime/base should not depend on\nruntime by separating it into libartbase.  Some of the code in\nruntime/base depends on the Runtime class, so it cannot be moved yet.\nAlso, some of the tests depend on CommonRuntimeTest, which itself needs\nto be factored (in a subsequent CL).\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host\n\nChange-Id: I8b096c1e2542f829eb456b4b057c71421b77d7e2\n"
    },
    {
      "commit": "67bf42e89592c3a1c648f927f2ce3ccb189a1161",
      "tree": "054d5b7adf7cc62d4d2a2118a70c0fbdd1751610",
      "parents": [
        "d961043ff1dd6fddb68aa90c1f939cfafec24219"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Feb 26 16:43:04 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 28 15:08:21 2018 -0800"
      },
      "message": "Header library to remove dependence on runtime/\n\nAdd a new header library to remove libdexfile and others\u0027 dependence on\nruntime (typically runtime/base) includes in libdexfile.  Also a small step\nto tease dexlayout and profman away from relying on these as well.\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host-gtest\n\nChange-Id: I38e2fe399a75f4bc6318c77a71954c00ea73ec2b\n"
    },
    {
      "commit": "0e09dfc9cbdd6c2510dbe50dba95cf9d2d815e79",
      "tree": "630d5fd5019ebb802a1f8bf0b000befcc179f902",
      "parents": [
        "d2b32234aba1cea49b7b9ba3697a1ef2f13186a6"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Feb 12 19:01:09 2018 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Feb 13 11:33:58 2018 -0800"
      },
      "message": "Add --compilation-reason option to dex2oat\n\nThe compilation reason is an optional metadata specifying the reason for\ncompiling the apk. If specified, the string will be embedded verbatim in\nthe key value store of the oat file.\n\nThis will allow a more precise performance monitoring based on the actual\nreason for compilation (e.g. install time vs background dexopt time).\n\nTest: dex2oat_test\nBug: 73102540\nChange-Id: I73c7fcc73e37a695f1684d9e282c7cc5be3030f8\n"
    },
    {
      "commit": "0225f8e2939a9340cb7dcebfcfe7996a2bd9bce9",
      "tree": "fd32362dff4ecdc8ff8b0d800a1b46fb0d9d0104",
      "parents": [
        "c7e546ff3963a1d51b1f100d308db735bd19f736"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Jan 31 08:52:24 2018 +0000"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Jan 31 01:24:53 2018 -0800"
      },
      "message": "Revert \"Revert \"Make libdexfile build independent of runtime dir\"\"\n\nThis reverts commit 787784f9effb126b5d0d3dc97d544c4a477b5daf.\n\nReason for revert: Bot configuration issue.\n\nChange-Id: I6a10bb4a9571f89c7e4dd095f9157e830a44e2de\nBug: 22322814\nTest: make -j 50 checkbuild\n"
    },
    {
      "commit": "787784f9effb126b5d0d3dc97d544c4a477b5daf",
      "tree": "1ff6d9fd284a4dd2a337165dff20e71137997c9d",
      "parents": [
        "b40b7e73469339a6b667b4a2e2b8690112a74dc9"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 18:48:51 2018 +0000"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 18:48:51 2018 +0000"
      },
      "message": "Revert \"Make libdexfile build independent of runtime dir\"\n\nThis reverts commit b40b7e73469339a6b667b4a2e2b8690112a74dc9.\n\nReason for revert: on device libdexfile.so missing\n\nChange-Id: I9bd61a98bef870400580e8c991cb061d3f57fa72\n"
    },
    {
      "commit": "b40b7e73469339a6b667b4a2e2b8690112a74dc9",
      "tree": "7e8a34d9c7894c4c946f674f19f0a0a512b95184",
      "parents": [
        "9690ad794b324ba54e936608881ac0f62538b97a"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 25 17:11:07 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 01:17:58 2018 -0800"
      },
      "message": "Make libdexfile build independent of runtime dir\n\nRemove libdexfile\u0027s dependency on utils.cc and move utf.cc into\n/dex.  Remove libdexfile\u0027s constituent sources from libart and\nuse libdexfile wherever libart is. Also remove some ART-specific\ninterfaces.  Libdexfile\u0027s tests remain to be converted, plus\nmoving the files to a new directory peer to runtime/.\n\nBug: 22322814\nTest: make -j 50 test-art-host\nChange-Id: Ifaf695216e4a0e43d3aa377984d933f7a2a243c2\n"
    },
    {
      "commit": "f30752709e1131ae1a4c16f22cc7a0960c198e77",
      "tree": "c671f0ac704f7a702fed77295a1d5fe690425394",
      "parents": [
        "2e1791b74406fba9930bbe5dfa5358d2d2c07e1a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 08 12:41:19 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 23 14:38:35 2018 +0000"
      },
      "message": "Revert \"Revert \"Don\u0027t embed the dex code in the oat file if dex is uncompressed.\"\"\n\nBug: 63920015\nBug: 70854754\n\nTest: oat_writer_test.cc, test.py\n\nRevert was due to userdebug/user differences, which is fixed with:\nhttps://googleplex-android-review.googlesource.com/#/c/platform/build/+/3434091/\n\nThis CL also fixes oatdump when the dex code is not in the .vdex file.\n\nThis reverts commit e166e67666bf4b23e4ed0a98f5e2bb3cae9cee7d.\n\nChange-Id: Iec924be2ff8f03cf2ebe306e7a0018241f33beb0\n"
    },
    {
      "commit": "210531f8775c89feb90d430cd5b6026b4cf8ef89",
      "tree": "3c23fffcc0d1d7876f15f64672e0de98b1f051ca",
      "parents": [
        "3c9e0f69b04b614c44448e66e15c6f8a78da4b2c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 12 10:15:51 2018 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Jan 13 01:40:03 2018 +0000"
      },
      "message": "Revert \"Revert \"Move quickening info logic to its own table\"\"\n\nBug: 71605148\nBug: 63756964\n\nTest: test-art-target on angler\n\nThis reverts commit 6716941120ae9f47ba1b8ef8e79820c4b5640350.\n\nChange-Id: Ic01ea4e8bb2c1de761fab354c5bbe27290538631\n"
    },
    {
      "commit": "6716941120ae9f47ba1b8ef8e79820c4b5640350",
      "tree": "76dd7d32703505d4ab44c0b55a7ecaf3ff66a94e",
      "parents": [
        "7a26f948204377130be7b738d70d7365c86a804b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 12 09:06:14 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 12 09:06:14 2018 +0000"
      },
      "message": "Revert \"Move quickening info logic to its own table\"\n\nBug: 71605148\nBug: 63756964\n\nSeems to fail on armv7.\n\nThis reverts commit f5245188d9c61f6b90eb30cca0875fbdcc493b15.\n\nChange-Id: I37786c04a8260ae3ec4a2cd73710126783c3ae7e\n"
    },
    {
      "commit": "7a26f948204377130be7b738d70d7365c86a804b",
      "tree": "dd3ab45b73127fdcbcdca64bbac484bfe2c0a8cd",
      "parents": [
        "29504326da13831fa3060ac507927c4d76aa556a"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 04 18:23:55 2018 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 11 10:58:22 2018 -0800"
      },
      "message": "Move quickening info logic to its own table\n\nAdded a table that is indexed by dex method index. To prevent size\noverhead, there is only one slot for each 16 method indices. This\nmeans there is up to 15 loop iterations to get the quickening info\nfor a method. The quickening infos are now prefixed by a leb\nencoded length. This allows methods that aren\u0027t quickened to only\nhave 1.25 bytes of space overhead.\n\nThe value was picked arbitrarily, there is little advantage to\nincreasing the value since the table only takes 1 byte per 4 method\nindices currently. JIT benchmarks do not regress with the change.\n\nThere is a net space saving from removing 8 bytes from each\nquickening info since most scenarios have more quickened methods than\ncompiled methods.\n\nFor getting quick access to the table, a 4 byte preheader was added\nto each dex in the vdex file\n\nRemoved logic that stored the quickening info in the CodeItem\ndebug_info_offset field.\n\nThe change adds a small quicken table for each method index, this\nmeans that filters that don\u0027t quicken will have a slight increase in\nsize. The worst case scenario is compiling all the methods, this\nresults in 0.3% larger vdex for this case. The change also disables\ndeduping since the quicken infos need to be in dex method index\norder.\n\nFor filters that don\u0027t compile most methods like quicken and\nspeed-profile, there is space savings. For quicken, the vdex is 2%\nsmaller.\n\nBug: 71605148\nBug: 63756964\nTest: test-art-host\n\nChange-Id: I89cb679538811369c36b6ac8c40ea93135f813cd\n"
    },
    {
      "commit": "f4bf58d9b13972117c640ea1d7bfa6e6dfc189ea",
      "tree": "a6bdf10f36796c1924e9dca6bfcf1477269c8073",
      "parents": [
        "d6b7e8c63f8eca25460f56f66dcae15eaa897ff0",
        "ec2cdf4286921131a5f9b3ed12060657ec40f636"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jan 10 13:57:04 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 10 13:57:04 2018 +0000"
      },
      "message": "Merge \"Try to mmap vdex file within the address range of the ELF file.\""
    },
    {
      "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": "2c64a837e62c2839521c89060b5bb0dcb237ddda",
      "tree": "65475ed2e313ff17354e741bac7e9c85739b8b95",
      "parents": [
        "6cd0005698181e4cef2247b632d396e605d58fa3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 04 11:31:56 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jan 05 11:27:50 2018 +0000"
      },
      "message": "Change ClassStatus to fit into 4 bits.\n\nIn preparation for extending the type check bit string from\n24 to 28 bits, rewrite ClassStatus to fit into 4 bits. Also\nperform a proper cleanup of the ClassStatus, i.e. change it\nto an enum class, remove the \"Status\" word from enumerator\nnames, replace \"Max\" with \"Last\" in line with other\nenumerations and remove aliases from mirror::Class.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing\nBug: 64692057\nBug: 65318848\nChange-Id: Iec1610ba5dac2c527b36c12819f132e1a77f2d45\n"
    },
    {
      "commit": "ec2cdf4286921131a5f9b3ed12060657ec40f636",
      "tree": "32f15162b6b74ed247e75eeb9b9cbe936760eca5",
      "parents": [
        "ee58c02b5959944a2db198a2d58355651ed29d53"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Dec 08 16:21:25 2017 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Jan 04 17:08:50 2018 +0000"
      },
      "message": "Try to mmap vdex file within the address range of the ELF file.\n\nAdd ELF section for the vdex file and mmap it there at runtime.\nThis ensures that the data is at predictable location, which\nis needed to be able to reference it from native debug-info.\n\nThis does not change the amount of memory allocated, or the\nlocation of the data on disk.  However, it does change how\nthe memory is allocated - it replaces two allocations\n(ELF and vdex) by just one (ELF which includes the vdex).\n\nBug: 71579677\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\n\nChange-Id: Ie2abd36c8b6617a527368e71f932998bbe5ad38c\n"
    },
    {
      "commit": "808c7a57bb913b13c22884f57cdacd59bf1fdb3f",
      "tree": "d7f0d7cabaac5a7646c25bae584a82a9aa279cc0",
      "parents": [
        "64bae9fb677aa0e2406d13ea9f8ebaa92e16f978"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 15 11:19:33 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 22 09:41:17 2017 -0800"
      },
      "message": "Make CodeItem fields private\n\nMake code item fields private and use accessors. Added a hand full of\nfriend classes to reduce the size of the change.\n\nChanged default to be nullable and removed CreateNullable.\nCreateNullable was a bad API since it defaulted to the unsafe, may\nadd a CreateNonNullable if it\u0027s important for performance.\n\nMotivation:\nHave a different layout for code items in cdex.\n\nBug: 63756964\nTest: test-art-host-gtest\nTest: test/testrunner/testrunner.py --host\nTest: art/tools/run-jdwp-tests.sh \u0027--mode\u003dhost\u0027 \u0027--variant\u003dX32\u0027 --debug\n\nChange-Id: I42bc7435e20358682075cb6de52713b595f95bf9\n"
    },
    {
      "commit": "e166e67666bf4b23e4ed0a98f5e2bb3cae9cee7d",
      "tree": "c76c20d3f409cdc8bee26c03fd5e76356f150653",
      "parents": [
        "ae7e83817e546848ef6b2949dd9065b153e14316"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Dec 19 18:59:29 2017 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Dec 19 18:59:29 2017 +0000"
      },
      "message": "Revert \"Don\u0027t embed the dex code in the oat file if dex is uncompressed.\"\n\nThis reverts commit ae7e83817e546848ef6b2949dd9065b153e14316.\n\nReason for revert: Broken wrt/ preopted apps and stripping\n\nBug: 63920015\nBug: 70777774\nChange-Id: I39580684d46fa57bd780d2d8bedd65a47d58cf5e\nTest: m\n"
    },
    {
      "commit": "ae7e83817e546848ef6b2949dd9065b153e14316",
      "tree": "e46ea86e925c4b2a4237f5ebba0c7ba3d61b0359",
      "parents": [
        "dc93cac66f1db225474cec5bf0350fd7a148085e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 20 15:10:28 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 13 22:23:12 2017 +0000"
      },
      "message": "Don\u0027t embed the dex code in the oat file if dex is uncompressed.\n\nTake uncompressed dex code as a signal that the app wants to\nopt into b/63920015.\n\nbug: 63920015\nTest: dex2oat_test, 071-dexfile-clean-map\n\nChange-Id: I878e7bb80fc895a2d9aafe81aa7666b86af1f808\n"
    },
    {
      "commit": "67ab1c5517c7f6ac485f218c903db8da59f40ed7",
      "tree": "927db938f4a5a16c19036809cd19cabad1d667e0",
      "parents": [
        "cf35bb5b2a25764800c1edf61c91ea4d0cd5c718",
        "58cc1cb66c1a96ffba4a314edb2c5b4e8b235d5b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 23 14:14:42 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 23 14:14:42 2017 +0000"
      },
      "message": "Merge \"Pass the debug_info_offset explicitly.\""
    },
    {
      "commit": "58cc1cb66c1a96ffba4a314edb2c5b4e8b235d5b",
      "tree": "ed00c90ab564c54ae4f09a4acbc5f3ffa65b9e71",
      "parents": [
        "65e0432cdaf3ee170045b21943c24eae5d6a0357"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 20 13:27:29 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 23 10:44:47 2017 +0000"
      },
      "message": "Pass the debug_info_offset explicitly.\n\nIn order to use debug_info_offset for encoding implementation details,\nrewrite all indirect users of it to fetch it before calling DexFile\nmethods.\n\nThis allows keeping the DexFile interface clean of runtime\nconsiderations.\n\nTest: test.py\nChange-Id: I4591e0039b5f822f4409aae411071ecbe97082b1\n"
    },
    {
      "commit": "f3c52b42a035902245d00a619fed0275afb063d2",
      "tree": "c46dab07826be55e9ca92ab301eed586c2f307ca",
      "parents": [
        "b360bff818ad0bf59668cd2bebaaeeaa8a3b5dfe"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 17 17:32:12 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 21 17:09:44 2017 +0000"
      },
      "message": "Fill Class and String .bss slots in runtime.\n\nShift the responsibility for filling Class and String .bss\nslots from compiled code to runtime. This reduces the size\nof the compiled code.\n\nMake oatdump list .bss slot mappings (ArtMethod, Class and\nString) for each dex file.\n\naosp_taimen-userdebug boot image size:\n  - before:\n    arm boot*.oat: 36534524\n    arm64 boot*.oat: 42723256\n  - after:\n    arm boot*.oat: 36431448 (-101KiB, -0.3%)\n    arm64 boot*.oat: 42645016 (-76KiB, -0.2%)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing\nTest: m dump-oat, manually inspect output.\nBug: 65737953\nChange-Id: I1330d070307410107e12c309d4c7f8121baba83c\n"
    },
    {
      "commit": "b22dea05178034a40b84953a661f3ea613395d16",
      "tree": "261a2a2db613e8b51898df338ae8401ec1fd5740",
      "parents": [
        "97785f595a8a3b5c766021a07c47a2ca81e4a810"
      ],
      "author": {
        "name": "Shubham Ajmera",
        "email": "shubhamajmera@google.com",
        "time": "Wed Oct 04 18:36:41 2017 -0700"
      },
      "committer": {
        "name": "Shubham Ajmera",
        "email": "shubhamajmera@google.com",
        "time": "Wed Oct 11 16:43:20 2017 -0700"
      },
      "message": "Provide an option to pass odex and vdex fds in dexoptanalyzer\n\nTest: test-art-host-gtest-oat_file_assistant\nBug: 67111829\nChange-Id: I10b23e665987d4a4a7d0eab67f11bda3d5809554\n"
    },
    {
      "commit": "44e5efa4ae79cf76c65f37fc41c1fa0ed431ec4a",
      "tree": "7f144c75386ca4584455bfa87c356824f4aadfb9",
      "parents": [
        "c5b215f7004c46a274a54e232f0cd146c7494f9a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Sep 12 00:54:26 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 14 16:29:15 2017 -0700"
      },
      "message": "Add check that classpath is up to date to getDexOptNeeded\n\nExtend getDexOptNeeded to factor into the decision the expected class\nloader context. If the context does not match, oat file assistant and\ndexoptanalyzer will advise kDex2OatFromScratch.\n\nNote that this does not currently extend the java side\nDexFile.getDexOptNeeded. The calls coming from the java side will continue\nto ignore the classpath checks by passing null as the class loader\ncontext.\n\nBug: 62269291\nTest: m test-art-host\nChange-Id: Ia01728c06810e418bbcbfe2a774d1f904d2525ba\n"
    },
    {
      "commit": "0f3c7003e08a42a4ed8c9f8dfffb1bee1118de59",
      "tree": "685000aec6754ac7ec361d843df6254786fa33f2",
      "parents": [
        "562086585f002babaaa542488a91bf7dd25e222c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 07 14:15:56 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 07 14:46:19 2017 +0100"
      },
      "message": "Remove DexCache arrays from app oat .bss.\n\nTheir presence in the .bss was no longer necessary and\nit doesn\u0027t really matter for memory usage whether they\nare in the .bss or in the LinearAlloc. This removes\na lot of unnecessary code.\n\nTest: m test-art-host\nTest: testrunner.py --host\nChange-Id: I63ccd4412fcb267341b8b012b7e3b09903f86625\n"
    },
    {
      "commit": "120aa286ab6adf3e76a31bc61fb4e583e5158d71",
      "tree": "07f1546ce7a090af8c88110598920769bfb5e669",
      "parents": [
        "5bfead584f56b2a1cfb69f78c385965ec57f7e8b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Aug 05 16:03:03 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Aug 14 17:47:25 2017 -0700"
      },
      "message": "Store layout info in dex files\n\nStore layout info for code sections inside of the oat file. This will\nbe used to advise the kernel when dex files are loaded in\na follow up CL.\n\nAdded unit test in dex2oat_test.\n\nBug: 63178181\nTest: test-art-host\n\n(cherry-picked from commit 75c5ed6e75f70002db5fa7c609137c04dd2bdf40)\n\nChange-Id: I4777506886bde42ff0affdac412a8395e8013a40\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": "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"
    },
    {
      "commit": "0eb882bfc5d260e8014c26adfda11602065aa5d8",
      "tree": "e66dbebfb1e9a254c20954a2f2f98541aebfd5af",
      "parents": [
        "b5f5d746ac3f2c3088292395603cb1470e7749d2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 15 13:39:18 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 07 15:39:24 2017 +0100"
      },
      "message": "Use ArtMethod* .bss entries for HInvokeStaticOrDirect.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: testrunner.py --target\nTest: Nexus 6P boots.\nTest: Build aosp_mips64-userdebug.\nBug: 30627598\nChange-Id: I0e54fdd2e91e983d475b7a04d40815ba89ae3d4f\n"
    },
    {
      "commit": "513061a792b22c417c938d31c19581390709561c",
      "tree": "80b4fdce03711170626aa5640d07b07de4a326a1",
      "parents": [
        "38c4ae5f4c5a033b7a7441032f39ea58f5772d4c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 09:17:34 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 12:59:13 2017 -0700"
      },
      "message": "ART: Clean up thread.h and thread_list.h\n\nRemove dependency on stack.h and gc_root.h. Remove unused object\ncallbacks include. Factor out ManagedStack into its own set of files.\nFix up users of transitive includes.\n\nTest: m test-art-host\nChange-Id: I01286c43d8c7710948c161b1348faabb05922e59\n"
    },
    {
      "commit": "16d4843433e024100b4ecd183f827ad5bd8772a6",
      "tree": "30b6f526051faaf8cc5ebbc15a7dfeef051a153f",
      "parents": [
        "2203253254e18ebde386740d3c841c04c432a42e"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Apr 05 17:05:46 2017 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Apr 18 17:03:11 2017 -0700"
      },
      "message": "Allow dex2oat to handle relative paths.\n\nDuring installation at compile time, the PackageManager is passing\nshared libraries to dex2oat with -classpath. For split apps, we want the\nsplits to have the proper dependencies, and are now passing previous\nparts of the split apk as shared libraries as we compile them all. These\napks are staged in a temp dir during compilation, so we pass a relative\npath for them instead.\n\nSince PackageManager can now pass relative paths to dex2oat as shared\nlibraries, dex2oat has an added --classpath-dir switch to specify the\ndirectory to use for relative class paths. At runtime when checking\nshared libraries, we use oat file functionality to resolve relative paths\nto determine if the paths match.\n\nBug: 34169257\nTest: cts-tradefed run singleCommand cts -d --module\nCtsAppSecurityHostTestCases -t android.appsecurity.cts.SplitTests\n\nMerged-In: I9667f0069c8d12e94598f8a78888d3855d870824\n(cherry-picked from commit f79ac83a8c18b0bd81aafc9c8823f6bed35d8847)\n\nChange-Id: I8e4703fdd4bfeb94f982e93abb7eb0cd71060fce\n"
    },
    {
      "commit": "84f50aecdeed2d9ed3206681820e41ad6af73a9c",
      "tree": "8b2b6de40365dcfc41d9139c9c5d73b95a541b67",
      "parents": [
        "69bcf2c940d26d65767bea7417317cf9a0431e0c"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Feb 06 15:12:45 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Feb 14 09:14:20 2017 +0000"
      },
      "message": "Remove remaining uses of DexFile::GetChecksum.\n\nRemove or replace with DexFile::GetMultiDexChecksums as appropriate.\n\nBug: 34604632\nTest: m test-art-host, added image_space_test to test ValidateOatFile.\nChange-Id: I1042e87f29a242046d055f0be374ad9fbce4671a\n"
    },
    {
      "commit": "72ab684871f870aead76b23cb67deb046107b380",
      "tree": "d4bb40cab65df449246b35ae582234238676b7bb",
      "parents": [
        "e36c51aee58e61e9fc89851b767379c587f050e3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jan 20 19:32:50 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 24 12:05:02 2017 +0000"
      },
      "message": "Add class status for resolved erroneous classes.\n\nSplit the old ambiguous status mirror::Class::kStatusError\ninto kStatusErrorUnresolved and kStatusErrorResolved. Once\na class has been resolved, IsResolved() shall return true\neven if the class later becomes erroneous. Allow returning\nerroneous class from ClassLinker::EnsureResolved() if it has\nbeen previously resolved. This allows consistent behavior\nfor retrieving classes, immune to multi-threaded races and\nmulti-dex weirdness. It also allows JVMTI to properly report\n\"prepared\" (i.e. resolved) classes that are also erroneous.\n\nThe new behavior is consistent with the RI.\n\nAdd regression tests to 008-exceptions for inconsistent\nbehavior for multi-dex retrieval of erroneous resolved class\n(wrapping or not wrapping the old exception based on which\ndex file is used for lookup) and for a CHECK(IsResolved())\ncrash in ClassLinker::LoadSuperAndInterfaces() (without any\ntests for similar checks that could have previously failed\nonly due to extremely unlikely race conditions; these should\nnow also be fixed).\n\nInconsistency still remains for class verification as shown\nby the new exceptionsForSuperClassInitFailure() test in\n008-exceptions, where interpreter and Optimizing still\ncause different exceptions to be thrown.\n\nNote: This is partially changing behavior implemented for\nbug 28787733. Since we allow the class loader to retrieve an\nerroneous resolved class, the ExceptionInInitializerError is\nnot thrown at all from VMClassLoader_findLoadedClass(), so\nthere is nothing to wrap in ClassNotFoundException.\n\nTest: m test-art-host\nBug: 30627598\nBug: 28787733\nChange-Id: I86cdca00f35a0d6221d2559e3026ac0428a3613c\n"
    },
    {
      "commit": "5923b5238091d9cd65f988fc059deb4fbb2e7f08",
      "tree": "b99368a07f807ebec2769cf61006c732132bee2c",
      "parents": [
        "168768d203cbc4fb784490063fdc2d1c6b9c39f7"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Dec 08 09:48:01 2016 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jan 09 08:50:02 2017 +0000"
      },
      "message": "Do not return patchoat for dexopt needed.\n\nDex preopt now always compiles PIC, so patchoat is no longer needed to\nrelocate prebuilts on first boot or system update when the boot image is\nrelocated.\n\nThe only remaining case when patchoat would be used on oat files is the rare,\nunexpected case when something bad happens to the device, such as a boot loop,\nto cause the prebuilt boot image to be relocated again. In this case, non-PIC\noat files compiled on device may have up-to-date dex and image checksums but\nwrong patch deltas. In this case, it is fine to recompile the oat file from\nscratch using dex2oat rather than using patchoat.\n\nTest: oat_file_assistant_test\nBug: 33192586\nChange-Id: If3f2457c7b358e1328476a460a0f15bfa89b7def\n"
    },
    {
      "commit": "1b868498a176705b867e2572cc1bcbd58dbd62d6",
      "tree": "36e10d1cff265d54090571ab08ad2ae9ebda97c1",
      "parents": [
        "dac7ad17c78387d15d7aefae0f852dddf5f37e34"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 16 16:22:37 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 21 10:05:03 2016 -0800"
      },
      "message": "Use type lookup tables in compiler\n\nThis recently regressed and stopped happening, the fix creates fake\nOatDexFiles so that the compiler uses the type lookup tables instead\nof slow FindClassDef and FindTypeId.\n\nPerf on host compile Facebook:\nBefore:\n2.49%: art::DexFile::FindClassDef(unsigned short) const\n1.59%: art::DexFile::FindTypeId(char const*) const\n\nAfter:\n0.42%: art::OatDexFile::FindClassDef(art::DexFile const\u0026, char const*, unsigned long)\n0%: art::DexFile::FindTypeId(char const*) const\n0%: art::DexFile::FindClassDef(unsigned short) const\n\nAverage install (N6P 960 mhz average of 40 samples): 38.2s -\u003e 35.64s\n\nBug: 32641252\n\nTest: test-art-host, adb install.\n\nChange-Id: I34df21dc2c155bc2579c5cafdd91f9cb0fead1a9\n"
    },
    {
      "commit": "4acefd33064d37b41ca55c3c9355345a20e5f9c2",
      "tree": "31b31e531286108bc904b6c9a499f0607f355030",
      "parents": [
        "3667e26de4856cccf24bcbab54ad3349a05267c0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 24 13:14:58 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 24 20:22:12 2016 +0100"
      },
      "message": "Encode quickening info in .vdex.\n\nWe quicken vdex files for performance reasons, but when taking an OTA,\nwe need to revert the quickening to the original instructions. As vdex\nshould be independent of the oat file and oat file versions, we encode\nthe quickening data in the vdex.\n\ntest: m test-art-host-jit m test-art-host-gtest\nbug:30937355\n\nChange-Id: I9a543a161b70aa1cff99f8fe6f5b5cab7a6c4d31\n"
    },
    {
      "commit": "2f61867045ffbd0c38a4ecec5f59632004f7efff",
      "tree": "c7b4393d7cd7cbcd3272ff83d8424be02828251a",
      "parents": [
        "4aa6a93c46a959df1ab71ee7a68ad345338046ef",
        "97d7e1cd7f733cb33a0e238bec6d7ed525638cd1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 05 17:00:41 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 05 17:00:41 2016 +0000"
      },
      "message": "Merge \"Remove #include \"oat_file.h\" from class_linker.h .\""
    },
    {
      "commit": "97d7e1cd7f733cb33a0e238bec6d7ed525638cd1",
      "tree": "d2f02420f82d76d10dc0d80f431c9f4aba03ac82",
      "parents": [
        "eebe142e935e9444c7c947d02246e7fbe88b2cc4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 04 14:44:28 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 05 13:21:44 2016 +0100"
      },
      "message": "Remove #include \"oat_file.h\" from class_linker.h .\n\nRefactor the OatClass and OatMethod related functions from\nClassLinker to OatFile and ArtMethod, respectively. Refactor\nthe remaining ClassLinker dependencies on OatFile to break\nthe #include dependency and reduce incremental build times.\n\nTest: m test-art-host\nChange-Id: Iebc5b9f81b48fbcf79821cc827a5d7c4a0261bf6\n"
    },
    {
      "commit": "aad75c6d5bfab2dc8e30fc99fafe8cd2dc8b74d8",
      "tree": "c1b9e1eabcf35c5cbb5b4f46313a4e062f2d5d51",
      "parents": [
        "82d4838d6bb3480cd25327cedc5179fb2d86881c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 03 08:46:48 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 04 17:51:46 2016 +0100"
      },
      "message": "Revert \"Revert \"Store resolved Strings for AOT code in .bss.\"\"\n\nFixed oat_test to keep dex files alive. Fixed mips build.\nRewritten the .bss GC root visiting and added write barrier\nto the artResolveStringFromCode().\n\nTest: build aosp_mips-eng\nTest: m ART_DEFAULT_GC_TYPE\u003dSS test-art-target-host-gtest-oat_test\nTest: Run ART test suite on host and Nexus 9.\nBug: 20323084\nBug: 30627598\n\nThis reverts commit 5f926055cb88089d8ca27243f35a9dfd89d981f0.\n\nChange-Id: I07fa2278d82b8eb64964c9a4b66cb93726ccda6b\n"
    },
    {
      "commit": "5f926055cb88089d8ca27243f35a9dfd89d981f0",
      "tree": "8d87d400e36301eb648e19bcd225f13c469648ad",
      "parents": [
        "9e5739aaa690a8529c104f4c05035a657616c310"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 30 17:04:49 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 30 18:08:09 2016 +0100"
      },
      "message": "Revert \"Store resolved Strings for AOT code in .bss.\"\n\nThere are some issues with oat_test64 on host and aosp_mips-eng.\n\nAlso reverts \"compiler_driver: Fix build.\"\n\nBug: 20323084\nBug: 30627598\n\nThis reverts commit 63dccbbefef3014c99c22748d18befcc7bcb3b41.\nThis reverts commit 04a44135ace10123f059373691594ae0f270a8a4.\n\nChange-Id: I568ba3e58cf103987fdd63c8a21521010a9f27c4\n"
    },
    {
      "commit": "63dccbbefef3014c99c22748d18befcc7bcb3b41",
      "tree": "60a498041bebff43bc1f43d438e3bc34a30887f7",
      "parents": [
        "6bee25976782a063d6b44f7718a6302761bf6403"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 21 13:51:10 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 29 15:58:43 2016 +0100"
      },
      "message": "Store resolved Strings for AOT code in .bss.\n\nAnd do some related refactorings.\n\nBug: 20323084\nBug: 30627598\nTest: Run ART test suite including gcstress on host and Nexus 9.\nTest: Run ART test suite including gcstress with baker CC on host and Nexus 9.\nTest: Build aosp_mips64-eng.\nChange-Id: I1b12c1570fee8e5da490b47f231050142afcbd1e\n"
    },
    {
      "commit": "9aa352e92b6ca0f2250cb7f54dfbf4b1be714c19",
      "tree": "647b9274daa64b3497c202da4327be26fe4e494b",
      "parents": [
        "47c22ff721503c0eb325508450663adacf0bd377"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Sep 15 18:13:52 2016 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Sep 16 16:31:19 2016 -0700"
      },
      "message": "Remove TypeLookupTable from DexFile.\n\nOne more step towards removing runtime dependencies from the DexFile\nAPI.  This severs the ties to OatFile.  Work remains to move MemMap out\nof DexFile.\n\nBug: 22322814\nChange-Id: I29e7ad8fd292c7919ed2689dc754b958b88d6819\nTest: test-art-host\n"
    },
    {
      "commit": "c93b3be140f6a57a572f2a4cdaf46aba87235a02",
      "tree": "96e0d1d8b53b1eecf66188704ab12036632702e3",
      "parents": [
        "935cf1b7a5e55a8d9aeab7e8955012849f0c1b68"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 12 18:49:58 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 12 18:49:58 2016 +0100"
      },
      "message": "Fix run-test after introduction of VDEX\n\nRun-test 119-noimage-patchoat used to fail due to a codepath in\nOatFile which allows to create an instance of the class from an\nexisting ElfFile instance. This patch updates the codepath to require\nan existing VdexFile as well.\n\nTest: art/test/run-test 119\nBug: 30937355\nChange-Id: I8fd0e47f07921aaee999f73711766ada9c35d214\n"
    },
    {
      "commit": "7b49e6cade09bc65b3b5f22d45fc9d0a7184e4f2",
      "tree": "36bb77d376708ba0f054c9820f4b7ed51437fbb2",
      "parents": [
        "3bac5443975cd6312e7c6282b94014db25f369d7"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Sep 01 11:06:18 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 12 14:39:07 2016 +0100"
      },
      "message": "Introduce VDEX file, use it for DEX files\n\nThis patch introduces a new output file called VDEX. In the future,\nVDEX files will store pre-validated DEX files which do not need to be\nre-extracted and re-verified when recompiling, e.g. due to new\nprofiling information or after a system update.\n\nWith this CL, the OatWriter writes DEX files into the VDEX and the\nrest of its output into OAT. The OatFile class and related classes\nare updated to load the VDEX at runtime and mmap the DEX file section\nfrom it. Patchoat creates symlinks to the source VDEX files in the\ntarget directory or copies the files if passed in as file descriptors.\n\nThe feature can be disabled by setting the environment variable\nART_ENABLE_VDEX to false.\n\nTest: m test-art-host\nBug: 30937355\nChange-Id: I54dcaececf6814c258c80524ec15e2e2ef69c8dd\n"
    },
    {
      "commit": "9a37efc6e1a8dd9fe6978f209fb493510267c528",
      "tree": "a8170051fe0e4ab9db0d2b629a11586cc64541ad",
      "parents": [
        "fe5c430e6ef71e8f8932ece9631a4e9bfc8b7916"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Aug 05 16:32:55 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Aug 08 16:09:39 2016 -0700"
      },
      "message": "Clean up VLOG(oat) in OatFileAssistant.\n\nRefactor GetOatDexFile to have an error message out parameter.\n\nChange-Id: I6b933f1fcfc9726c051a9d9678d92587cc02501e\nTest: OatFileAssistantTest with and without -verbose:oat logging turned on.\nTest: m test-art-host\n"
    },
    {
      "commit": "f0192c86a58b2f43378c9a2113007538dd38ddbf",
      "tree": "df3fef8e9ccd30152819e893e6212ce45b5f51a5",
      "parents": [
        "783d02e527107e91880f12bddf41afd313919132"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Mar 28 20:39:50 2016 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue May 17 11:08:41 2016 -0700"
      },
      "message": "Support to pass \u003cuses-library\u003e option through to dex2oat.\n\nThis change takes an app\u0027s shared libraries specified by \u003cuses-library\u003e\nand passes it through to dex2oat to be used during compilation.\n\nPart of a multi-project change.\n\nBug: 26880306\n\n(cherry-picked from commit 26e8a2f150cd7f7195a10650ab8a5b6fa5014bc8)\n\nChange-Id: I72a352abdfc37eacd8bedfa6c218e3809ca8e39c\n"
    },
    {
      "commit": "2ba8895b4257d0e32a7b269bc2e7f6a3ec39a86a",
      "tree": "70f1c90b2344a67b58aa0b7f05ae66007e7b6e84",
      "parents": [
        "40d3061ea1a2a07a1aede662318257aa0fa5fe4b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 29 17:52:07 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 03 17:37:03 2016 -0700"
      },
      "message": "ART: Dump more OatDexFile data in oatdump\n\nAdd some stats about the enclosed dex file and type table when\ndumping an oat file.\n\nBug: 28251566\n\n(cherry picked from commit 00bb716039d23e02797a3858fcdb0380a9bb8855)\n\nChange-Id: I80c14e85d68cd1e3e4c64b7b9d86059d5ac8a6ad\n"
    },
    {
      "commit": "9d07e3d128ccfa0ef7670feadd424a825e447d1d",
      "tree": "dfb677fd75f0f297fef9bc49311cf1d22c770f56",
      "parents": [
        "eb98c0ded592cfca8187c744393c82efd1020b2a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 31 12:02:28 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 04 17:50:20 2016 +0100"
      },
      "message": "Clean up OatQuickMethodHeader after Quick removal.\n\nThis reduces the size of the pre-header by 8 bytes, reducing\noat file size and mmapped .text section size. The memory\nneeded to store a CompiledMethod by dex2oat is also reduced,\nfor 32-bit dex2oat by 8B and for 64-bit dex2oat by 16B. The\naosp_flounder-userdebug 32-bit and 64-bit boot.oat are each\nabout 1.1MiB smaller.\n\nDisable the broken StubTest.IMT, b/27991555 .\n\nChange-Id: I05fe45c28c8ffb7a0fa8b1117b969786748b1039\n"
    },
    {
      "commit": "d1537b569b6cd18297c5e02d13cdd588c4366c51",
      "tree": "a52961e7dbd098c0649e18123d2ad16fa6f69145",
      "parents": [
        "e28ad4b91591c226ed404a2b01104bb99bfeb28f"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Mar 29 13:27:41 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Mar 29 14:25:35 2016 -0700"
      },
      "message": "Don\u0027t return kPatchOatNeeded if there is no patch info.\n\nBug: 27693977\nChange-Id: Ie1f27cc45f3cb434108a375136480cb92fd95e26\n"
    },
    {
      "commit": "29d38e77c553c6cf71fc4dafe2d22b4e3f814872",
      "tree": "92f34f589af205af56189d221ded293234935c26",
      "parents": [
        "2e89e901b9f303549f3ba64e45d87292e9c986c8"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Mar 23 15:31:51 2016 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Mar 23 11:30:29 2016 -0700"
      },
      "message": "Revert \"Revert \"Use compiler filter to determine oat file status.\"\"\n\nThis reverts commit 845e5064580bd37ad5014f7aa0d078be7265464d.\n\nAdd an option to change what OatFileManager considers up-to-date.\nIn our tests we\u0027re allowed to write to the dalvik-cache, so it\ncannot be kSpeed.\n\nBug: 27689078\nChange-Id: I0c578705a9921114ed1fb00d360cc7448addc93a\n"
    },
    {
      "commit": "845e5064580bd37ad5014f7aa0d078be7265464d",
      "tree": "1e621756ba6a1fd345f2fb468eed88cdc81886e7",
      "parents": [
        "a62d2f04a6ecf804f8a78e722a6ca8ccb2dfa931"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 23 06:42:05 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 23 06:42:05 2016 +0000"
      },
      "message": "Revert \"Use compiler filter to determine oat file status.\"\n\nBots are red. Tentative reverting as this is likely the offender.\n\nBug: 27689078\n\nThis reverts commit a62d2f04a6ecf804f8a78e722a6ca8ccb2dfa931.\n\nChange-Id: I3ec6947a5a4be878ff81f26f17dc36a209734e2a\n"
    },
    {
      "commit": "a62d2f04a6ecf804f8a78e722a6ca8ccb2dfa931",
      "tree": "d8624bb85016a3301b473b6503324db4d4cf24a3",
      "parents": [
        "48e722432bb6e19df7bba02427e4a707e671af06"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Mar 18 15:05:30 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Mar 22 15:38:36 2016 -0700"
      },
      "message": "Use compiler filter to determine oat file status.\n\nRecord the compiler filter in the oat header. Use that to determine\nwhen the oat file is up-to-date with respect to a target compiler\nfilter level.\n\nNew xxx-profile filter levels are added to specify if a profile should\nbe used instead of testing for the presence of a profile file.\n\nThis change should allow for different compiler-filters to be set for\ndifferent package manager use cases.\n\nBug: 27689078\nChange-Id: Id6706d0ed91b45f307142692ea4316aa9713b023\n"
    },
    {
      "commit": "0b4cbd0c2a75b47ae09d21e5d73d2b1709cb5b9e",
      "tree": "72572a01a181c12272a5570ae8b4d41e9ef553f8",
      "parents": [
        "c3214fbb66b5f4c436c44d027df5046c803f6432"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 08 16:49:58 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Mar 14 17:07:11 2016 -0700"
      },
      "message": "Add oatdump support for app images\n\nExample usage on host:\noatdumpd --app-oat\u003dart/plus32.odex --app-image\u003dart/plus32.art\n--image\u003dart/oats/system@framework@boot.art --instruction-set\u003darm\n\nTODO: Add to oatdump test.\n\nBug: 27408512\nBug: 22858531\n\n(cherry picked from commit bcb6a72569a1401b36a3ad3b6aa4d13e29966cf0)\n\nChange-Id: I9d1aa7eaa16795e5fbabc6974d245849e16b1d03\n"
    },
    {
      "commit": "b077e15d2d11b7c81aacbcd4a46c2b1e9c9ba20d",
      "tree": "148a47a1aace48313cdfdeede48902563d89c7ee",
      "parents": [
        "c90bc92bc577020ff4d3caced4cee1cdf41fa5de"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Feb 18 18:47:37 2016 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Mar 08 15:53:30 2016 +0000"
      },
      "message": "Update GetDexOptNeeded to handle different levels of compilation\n\nextract-only or profile-guide oat files are considered up to date from\nruntime perspective as they don\u0027t necessary need (re)compilation or\nrelocation. However, it is useful to return a more refined code to the\ncaller so that they can decide whether or not that\u0027s good enough.\n\nFor example, the package manager might decide to still compile a\nprevious extract-only and during profile guide compilation we should\nalways recompile even if we have an oat file.\n\nNote that dex files compiled via ClassLoaders will still be fully\ncompiled.\n\nThis change introduces:\n- a new key in the oat header kCompilationType to capture what type of\ncompilation has been made. Note tha the key might be missing. The\ndistinction is needed in order to avoid recompilation of a previous\nfully compiled file during profile guide compilation analysis.\n- a new argument to GetDexOptNeeded which tells the runtime to cast its\nopinion whether or not the oat file is up to date relative to the\ndesired target type of compilation.\n\nBug: 27189430\n\n(cherry picked from commit d91b8a2464b99625efe03caf7d30c8372bc378ed)\n\nChange-Id: I6ce450350f388451f7bab7d285c1846d539a4b13\n"
    },
    {
      "commit": "6ea1a0e2168c8d9b6d97c075c73a72d84080f45b",
      "tree": "7a75b6191dc6539823c174e06256dd09ae50c637",
      "parents": [
        "b4982aab07ae4cdaba13b4cb99306459d92e52d5"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Jan 29 12:12:49 2016 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Feb 23 13:44:50 2016 -0800"
      },
      "message": "AOT compile framework code as non-debuggable\n\nWhen a debugger attaches, we patch method entry points in framework\ncode to interpreter bridge. The code will later be jitted as debuggable.\n\nChange-Id: Id148069ccad95e2339ba214742ae3ef4f084f495\n"
    },
    {
      "commit": "5351da0225d027a19420153615634a1c78966bca",
      "tree": "71b664d4e25dcf6fef684a3ffb96775952184a37",
      "parents": [
        "70e2d7e52ad1ed3226fdfcd3a2439c837f39c334"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Feb 17 16:19:53 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Feb 18 18:14:50 2016 -0800"
      },
      "message": "Use image oat file instead of image header for immune spaces\n\nThe old immune spaces logic used the oat file information in the\nimage header instead of the actual oat file pointer. This was\nincorrect for the app image case since the app image oat file is\nnot necessarily at the address specified in the header. This bug\ncould cause an incorrect immune region that caused large objects\nto get freed if they were within this immune region.\n\nAdded test.\n\nBug: 22858531\nChange-Id: I243253e61ea1afd42c3bb2414c02ce6dd36d0f9c\n"
    },
    {
      "commit": "ce4b0ba4d762775a86b3529ac76cb89199c0cc1e",
      "tree": "1904ccccb00244a3f948ccf3f95fc40c95b9ff3e",
      "parents": [
        "99b4d43c7b2c81a0a4712578016efdfc65cdc21b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 28 15:05:49 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 01 15:09:56 2016 +0000"
      },
      "message": "Ignore image checksum for ExtractOnly oat files\n\nOat files compiled with --compiler-filter\u003dverify-at-runtime contain\nno compiled code and therefore are independent of the boot image.\nThis patch stores an ExtractOnly flag in the oat header and skips\nthe image checksum test if the flag is set, rendering the oat file\nup to date even after OTAs.\n\nBug: 26813999\n\nChange-Id: I25291d5b49d9e9d0018844e957a2dc88ef6bdc27\n"
    },
    {
      "commit": "049cff0ed5e28aa17a17e456efe3121b6d58910f",
      "tree": "995c2cf8359f9638c6a5832482e4e5365a8f25c6",
      "parents": [
        "f4c539395244ccfc14aebaf53fdc1122287f65a6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Dec 01 23:27:12 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 02 10:30:28 2015 -0800"
      },
      "message": "ART: Refactor oat_file.h/cc for better maintainability\n\nRefactor the code so that generic oat file initialization (checking\nART symbols etc) is common between dlopen and ART\u0027s ElfFile\nimplementation. Reduce methods and fields exposed in the oat_file\nheader.\n\nChange-Id: I5bf65dd8b7047a007c6bf435b55bdde306595e8d\n"
    },
    {
      "commit": "d9786b0e5be23ea0258405165098b4216579209c",
      "tree": "88641c107d29d0848ce8219652b8d0b1cdd3755c",
      "parents": [
        "57bee8dc2206404164606d4f5cabde272505f5fa"
      ],
      "author": {
        "name": "Artem Udovichenko",
        "email": "artem.u@samsung.com",
        "time": "Wed Oct 14 16:36:55 2015 +0300"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 29 09:38:06 2015 -0700"
      },
      "message": "Implementation of fast lookup table to search class_def by descriptor\n\nLookup table is a hash table which built at compile time and stored\ninto oat file. At runtime the table is restored and used in the\nmethod DexFile::FindClassDef(const char*) to perform fast search of\nthe class_def_idx by class descriptor. Advantages of the lookup table\nover the HashSet (runtime/base/hash_set.h) are:\n1. Lookup table is built at compile time and uses read-only memory at\nruntime\n2. Lookup table uses less memory then DexFile::Index (less by 80% for\n/system/framework/framework.jar on Nexus5)\n3. Lookup table does less string comparisons compared with HashSet\n(less by 70% for zygote process on Nexus5)\nThe disadvantage of the lookup table is it increased boot.oat size by\n0.2% on Nexus5 and application .oat file by 0.3% in average on Nexus5.\n\nmathieuc changes:\nCreate lookup table in dex2oat to speed up compilation. Clean up code\nto follow style guide and use less static functions. Added\nperformance measurements.\n\nCompile ~100 APKs 5 times with filter interpret-only:\nBefore:\nreal  1m8.989s\nuser  0m59.318s\nsys 0m7.773s\n\nAfter:\nreal  1m1.493s\nuser  0m52.055s\nsys 0m7.581s\n\nApp launch (AOSP N5 maps, average of 45 runs):\nBefore: 966.84ms\nAfter: 923.733ms\nLaunch speedup is 4.7%\n\nMemory usage compared to HashSet index on 50 various APK:\n32 bit: HashSet ~625694b vs TypeLookupTable ~404268b\n64 bit: HashSet ~1251390b vs TypeLookupTable ~404268b\n\nBug: 10921004\nBug: 20269715\n\nChange-Id: I7246c1d9ad9fe81fe5c5907a4bf70396d8f9242a\n"
    },
    {
      "commit": "06d7aaa75f3d6d21fe904d54208b28e486673d97",
      "tree": "017a3bdea33e06e8b4356cdf419df9002ec2c01d",
      "parents": [
        "3ae313d9bc64eaa0c791452dd972654eae979496"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 16 11:23:41 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 19 16:19:40 2015 +0100"
      },
      "message": "Clean up OatFile.\n\nIn Setup(), avoid reading beyond the end and use the %zu\nformat specifier instead of %zd for size_t output.\n\nMake the .bss section pointers non-const.\n\nChange-Id: Ic8f066effe8037b552d8e911c6a5d17370d79ff4\n"
    },
    {
      "commit": "09d0943f5efe92c1f3a6b9dbdf255adb0f960a22",
      "tree": "7521bf5eefaa84f1cd18c2d601ac0891cc1598a5",
      "parents": [
        "644044333f5f6d7ba7e327619ac0d0ce4e2609d3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 08 13:47:48 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 15 16:46:41 2015 +0100"
      },
      "message": "ART: Use .bss section for dex cache arrays.\n\nChange-Id: I5fd507973b56f6a662a02a8c1dd9ac4493fb7b36\n"
    },
    {
      "commit": "6bc4374e3fa00e3ee5e832e1761c43e0b8a71558",
      "tree": "38118523aa6b9a92fbdcd7bf1d32ca6185a3d3f0",
      "parents": [
        "16065ce56394c73c87dcb78ead4164ddc80fddb3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 12 18:11:10 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 13 12:05:27 2015 +0100"
      },
      "message": "Add an abstraction over a compiled code.\n\nThat\u0027s just step 1, moving code-related functions of ArtMethod to\nanother class. That class is only a wrapper on an ArtMethod, but will\nbe changed to be a wrapper around compiled code.\n\nChange-Id: I6f35fc06d37220558dff61691e51ae20066b0dd6\n"
    },
    {
      "commit": "b1d8c314b55bb2df2b2bb72a3daaf5db65b7ebc7",
      "tree": "87e8252ee6ca23138f867989a098b7c4338c21a5",
      "parents": [
        "1d558db0bcd841140f6fe1c6ba2e9a6de131649d"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Tue Aug 04 11:18:43 2015 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Tue Aug 04 11:19:56 2015 -0700"
      },
      "message": "Revert \"cleanup: Replace pointers with out-parameters and fix-up formatting\"\n\nThis reverts commit a315f5c546b796f55f4872bb6efc15eb858d9639.\n\n--\n\nRevert \"runtime: cleanup class_linker out-parameters and formatting\"\n\nThis reverts commit bc1d78daa463572c5a770cdca858a3b51d8e1b7b.\n\n--\n\nRevert \"base: replace raw pointers for out-parameters with safer out\u003cT\u003e\"\n\nThis reverts commit fb326cffc679cab8eb873b9e44795706f023cb3c.\n"
    },
    {
      "commit": "a315f5c546b796f55f4872bb6efc15eb858d9639",
      "tree": "188bcbab728423d79147fd9d9da45c2539371ac5",
      "parents": [
        "bc1d78daa463572c5a770cdca858a3b51d8e1b7b"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Fri Jul 31 17:35:52 2015 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Fri Jul 31 17:35:52 2015 -0700"
      },
      "message": "cleanup: Replace pointers with out-parameters and fix-up formatting\n\nCleans all of oat_file.h/.cc, parsed_options.h./cc, runtime.h/.cc\n\nOther files are touched only incidentally to use outof(x) instead of \u0026x.\n\nChange-Id: I0bb15111149d53bb21aac2199ef33bd35333b0ca\n"
    },
    {
      "commit": "90443477f9a0061581c420775ce3b7eeae7468bc",
      "tree": "8c74b81dfae162e0fd0ccf8d5ac50827ba815174",
      "parents": [
        "6078aec213dfaf111c29969706e8e5967cfc9bea"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 16 20:32:27 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 22 15:13:56 2015 -0700"
      },
      "message": "Move to newer clang annotations\n\nAlso enable -Wthread-safety-negative.\n\nChanges:\nSwitch to capabilities and negative capabilities.\n\nFuture work:\nUse capabilities to implement uninterruptible annotations to work\nwith AssertNoThreadSuspension.\n\nBug: 20072211\n\nChange-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33\n"
    },
    {
      "commit": "c04c800e7bda94abfadc8c2d30f58c50b261b612",
      "tree": "c4096b86bde3b8be56be21bf1a72b7a04f227430",
      "parents": [
        "f68c8545382925062da2b87169ca2b5314f0b431"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 14 11:37:54 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 15 10:44:34 2015 +0100"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Make dex2dex return a CompiledMethod after quickening.\"\"\"\"\n\nThis reverts commit ed6195a514e3253576af27ea9ba13038509d29ac.\n\nChange-Id: Icb58854301e8982147cdebe3edf2e0d9e0a63a56\n"
    },
    {
      "commit": "82e73dcc290ae8603c8a2e533d6a8a19cc2983a3",
      "tree": "6677966c718dc1067eea0c9e8108fe590c03669e",
      "parents": [
        "b3e3000a59a3b0d765840bd1a939213a2b400763"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jun 17 18:36:23 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jun 17 22:52:48 2015 +0100"
      },
      "message": "Release dummy MemMaps corresponding to dlopen.\n\nThis fixes memory leak.\n\nChange-Id: I857f078e8559a56b2d10dd081256c41ab28c8ec6\n"
    },
    {
      "commit": "e401d146407d61eeb99f8d6176b2ac13c4df1e33",
      "tree": "17927f9bfe7d2041b5942c89832d55f9dedb24c5",
      "parents": [
        "2006b7b9b8e32722bd0d640c62549d8a0ac624b6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 13:56:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 29 18:45:49 2015 -0700"
      },
      "message": "Move mirror::ArtMethod to native\n\nOptimizing + quick tests are passing, devices boot.\n\nTODO: Test and fix bugs in mips64.\n\nSaves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS.\nSome of the savings are from removal of virtual methods and direct\nmethods object arrays.\n\nBug: 19264997\nChange-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d\n"
    },
    {
      "commit": "0de1133ba600f299b3d67938f650720d9f859eb2",
      "tree": "575781fecb928641714801e24af128c68e108448",
      "parents": [
        "03e4351df62ade9fa0e9139ece28f23ba85c49c2"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed May 13 12:14:05 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue May 19 14:31:54 2015 +0200"
      },
      "message": "Fix debuggable compiler flag detection for secondary dex files\n\nCompiles secondary dex files like the primary dex file: if it has\nbeen compiled with the --debuggable flag, compile secondary dex files\nwith the --debuggable flag too.\n\nTherefore, dex files loaded at runtime are compiled the same way as\ndex files compiled at install time on the classpath (excluding the\nboot image that is not compiled debuggable).\n\nAlso adds debuggable key in the oat header and bump the oat version.\n\nBug: 20944228\nChange-Id: I59119f3468adb27ab1d6026f2cefbebbd814224c\n"
    },
    {
      "commit": "2cebb24bfc3247d3e9be138a3350106737455918",
      "tree": "d04d27d21b3c7733d784e303f01f873bb99e7770",
      "parents": [
        "1f02f1a7b3073b8fef07770a67fbf94afad317f0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 21 16:50:40 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 12:44:27 2015 -0700"
      },
      "message": "Replace NULL with nullptr\n\nAlso fixed some lines that were too long, and a few other minor\ndetails.\n\nChange-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb\n"
    },
    {
      "commit": "fa8429b967fe2260ece572337534c9dda6c50d8a",
      "tree": "b21da4365bdb203029a30e201ff506bd3b4b7745",
      "parents": [
        "e7bee3b7d307508243f4a00b5cf8a8867fcaaff5"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Apr 07 18:34:42 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 17 17:51:27 2015 -0700"
      },
      "message": "ART: Re-add dlopen\n\nRe-add an oat-file path that uses dlopen to load oat files. This\ncode-path will be necessary to support libunwind unwinding through\nproperly CFI-annotated oat files, as libunwind consults the linker\nabout loaded ELF files.\n\nWe avoid the original dlopen issue, namely that the semantics of\ndlopen disallow loading the same soname twice, by using an extension\nof bionic that supersedes the specified behavior.\n\nChange-Id: I4a7e3cb00d1ea156dad84f76826def2a5967c9ca\n"
    },
    {
      "commit": "7848da48a0a4241dedc1cc83ac4931e61575eb92",
      "tree": "58a789b6b21893135a8770496175ccc7259d7ea6",
      "parents": [
        "6c7bd25b2b2a07740bcd838c2f4024e67be83fd1"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 09 11:15:04 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Apr 14 21:16:31 2015 +0000"
      },
      "message": "ART: Store classpath information into oat file\n\nStore a \"dependency list\" of class-path dex-files into the key-value\nstore of an oat file. The list is made up of dex locations and\ncorresponding checksums.\n\nAdd tests for encoding, decoding and checking the list.\n\nBug: 19781184\nChange-Id: Ie700dd37e6e086db599c95d329ac1f1d2ff0b758\n"
    },
    {
      "commit": "758a801b66c134361a7b43f7e83f85d1fb800c4c",
      "tree": "35b060c780fcf6e7c268fec47df40c74b5ab8b05",
      "parents": [
        "e8aae00fa400efbb8f998a5dbf68eb42810889c1"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 03 21:28:42 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 06 14:03:17 2015 -0700"
      },
      "message": "ART: Enable Clang\u0027s -Wdeprecated\n\nReplace throw() with noexcept.\n\nAdd default copy constructors and copy assignment constructors for\ncases with destructors, as the implicit definition is deprecated.\n\nChange-Id: Ice306a3f510b072b00bec4d4360f7c8055135c9d\n"
    },
    {
      "commit": "07b3c2351bb527ea91c084dc19434600af9ae66b",
      "tree": "b286122b660ce16abae1e56c57b957b8c69c9531",
      "parents": [
        "dcff612c3a6e1427749771c4559f198fa480f709"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Mar 31 15:57:54 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Apr 02 09:47:03 2015 -0700"
      },
      "message": "Store OatDexFile instead of OatFile in DexFile.\n\nThis requires moving OatDexFile out of the OatFile class so that\na forward class declaration can be used for OatDexFile.\n\nBug: 19071355\nChange-Id: Ibda85b78d0577e9e81073090616fc0f2fa526be3\n"
    },
    {
      "commit": "e5fed03772144595c0904faf3d6974cc55214c8c",
      "tree": "27c242e48cabd2543f472930d1ad7e2ab86557fe",
      "parents": [
        "b93581f857e36a62f690e26e78167f2abea0f033"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Mar 18 08:21:11 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Mar 24 12:48:09 2015 -0700"
      },
      "message": "Support relative encoded dex locations in oat files.\n\nNow when opening an oat file, the caller can pass an absolute dex\nlocation used to resolve the absolute path for any relative\nencoded dex locations in the oat file.\n\nBug: 19550105\nChange-Id: I6e9559afe4d86ac12cf0b90176b5ea696a83d0e7\n"
    },
    {
      "commit": "5c42c29b89286e5efa4a4613132b09051ce5945b",
      "tree": "5db25a4f62c5583f2f6fc42b9a2ff47362eeed5c",
      "parents": [
        "242026e246a8b9efe098a0cce008fd525e011e5b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 25 12:02:49 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 02 18:07:03 2015 +0000"
      },
      "message": "Add support for .bss section in oat files.\n\nChange-Id: I779b80b8139d9afdc28373f8c68edff5df7726ce\n"
    },
    {
      "commit": "e5f13e57ff8fa36342beb33830b3ec5942a61cca",
      "tree": "02e370ecc4e0d955f28bfc71a41015f94fbb19b7",
      "parents": [
        "354d58ba776866ea7b1c71f0d0848d5aaa013ae3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 09:37:21 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 10:47:02 2015 -0800"
      },
      "message": "Revert \"Revert \"Add JIT\"\"\n\nAdded missing EntryPointToCodePointer.\n\nThis reverts commit a5ca888d715cd0c6c421313211caa1928be3e399.\n\nChange-Id: Ia74df0ef3a7babbdcb0466fd24da28e304e3f5af\n"
    },
    {
      "commit": "a5ca888d715cd0c6c421313211caa1928be3e399",
      "tree": "bdb08a2cbcf277ab7f02626a23b52a3fdf272ffe",
      "parents": [
        "2535abe7d1fcdd0e6aca782b1f1932a703ed50a4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 24 08:10:57 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 24 08:10:57 2015 +0000"
      },
      "message": "Revert \"Add JIT\"\n\nSorry, run-test crashes on target:\n0-05 12:15:51.633 I/DEBUG   (27995): Abort message: \u0027art/runtime/mirror/art_method.cc:349] Check failed: PcIsWithinQuickCode(reinterpret_cast\u003cuintptr_t\u003e(code), pc) java.lang.Throwable java.lang.Throwable.fillInStackTrace() pc\u003d71e3366b code\u003d0x71e3362d size\u003dad000000\u0027\n10-05 12:15:51.633 I/DEBUG   (27995):     r0 00000000  r1 0000542b  r2 00000006  r3 00000000\n10-05 12:15:51.633 I/DEBUG   (27995):     r4 00000006  r5 b6f9addc  r6 00000002  r7 0000010c\n10-05 12:15:51.633 I/DEBUG   (27995):     r8 b63fe1e8  r9 be8e1418  sl b6427400  fp b63fcce0\n10-05 12:15:51.633 I/DEBUG   (27995):     ip 0000542b  sp be8e1358  lr b6e9a27b  pc b6e9c280  cpsr 40070010\n10-05 12:15:51.633 I/DEBUG   (27995): \n\nBug: 17950037\nThis reverts commit 2535abe7d1fcdd0e6aca782b1f1932a703ed50a4.\n\nChange-Id: I6f88849bc6f2befed0c0aaa0b7b2a08c967a83c3\n"
    },
    {
      "commit": "2535abe7d1fcdd0e6aca782b1f1932a703ed50a4",
      "tree": "140026ff9638ff34050680b6c706b82fa1740b56",
      "parents": [
        "38fee8ef4bc0f4dbe2c6d1f5585895f0c4d16984"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 17 10:38:49 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 23 16:45:49 2015 -0800"
      },
      "message": "Add JIT\n\nCurrently disabled by default unless -Xjit is passed in.\n\nThe proposed JIT is a method JIT which works by utilizing interpreter\ninstrumentation to request compilation of hot methods async during\nruntime.\n\nJIT options:\n-Xjit / -Xnojit\n-Xjitcodecachesize:N\n-Xjitthreshold:integervalue\n\nThe JIT has a shared copy of a compiler driver which is accessed\nby worker threads to compile individual methods.\n\nAdded JIT code cache and data cache, currently sized at 2 MB\ncapacity by default. Most apps will only fill a small fraction of\nthis cache however.\n\nAdded support to the compiler for compiling interpreter quickened\nbyte codes.\n\nAdded test target ART_TEST_JIT\u003dTRUE and --jit for run-test.\n\nTODO:\nClean up code cache.\nDelete compiled methods after they are added to code cache.\nAdd more optimizations related to runtime checks e.g. direct pointers\nfor invokes.\nAdd method recompilation.\nMove instrumentation to DexFile to improve performance and reduce\nmemory usage.\n\nBug: 17950037\n\nChange-Id: Ifa5b2684a2d5059ec5a5210733900aafa3c51bca\n"
    },
    {
      "commit": "fbef44de596d298dc6430f482dffc933a046dd28",
      "tree": "57345e86b7dda80b82a263069230b7e312db5ef2",
      "parents": [
        "603104b5b5c3759b0bc2733bda2f972686a775a3"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Dec 23 09:48:51 2014 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jan 13 16:32:34 2015 -0800"
      },
      "message": "Use unique_ptr to track ownership of dex files.\n\nBug: 18809837\nChange-Id: Ie571eae8fc19ee9207390cff5c7e2a38071b126a\n"
    },
    {
      "commit": "956af0f0cb05422e38c1d22cbef309d16b8a1a12",
      "tree": "b558c804d206dad8da648b815750f1b3c97610ae",
      "parents": [
        "407d77f344cfbdbbfb50531c5f0766bc0892e2fe"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 11 14:34:28 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 12 09:33:34 2014 -0800"
      },
      "message": "Remove portable.\n\nChange-Id: I3bf3250fa866fd2265f1b115d52fa5dedc48a7fc\n"
    },
    {
      "commit": "957ca1cd025104fccb0b08928f955f9bdb4ab91c",
      "tree": "913ceffe992bb25898ac79977b47dc2af8b3354b",
      "parents": [
        "4d3ed1a6f34bd31ed30faaca0433cf2a4b19bb7b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Nov 21 16:51:29 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 24 10:44:33 2014 -0800"
      },
      "message": "Delete ArtMethod gc_map_ field\n\nMoved the gc_map field from OatMethod to OatQuickMethodHeader.\nDeleted the ArtMethod gc_map_ field.\n\nBug: 17643507\n\nChange-Id: Ifa0470c3e4c2f8a319744464d94c6838b76b3d48\n\n(cherry picked from commit 807140048f82a2b87ee5bcf337f23b6a3d1d5269)\n"
    },
    {
      "commit": "46774767fcf7780d1455e755729198648d08742e",
      "tree": "09a5d87ff0acbc7eb1fa94ec901ba10009178f03",
      "parents": [
        "11bd683f6dbebe2f3d02fa383fc9dbc69a83ace8"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Oct 22 11:37:02 2014 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Mon Oct 27 20:19:37 2014 -0700"
      },
      "message": "ART: Add support for patching and loading OAT files compiled with PIC\n\n* Images (.art) compiled with pic now have a new field added.\n* isDexOptNeeded will now skip patch-ing for apps compiled PIC\n* First-boot patching now only copies boot.art, boot.oat is linked\n\nAs a result, all system preopted dex files (with --compile-pic) no\nlonger take up any space in /data/dalvik-cache/\u003cisa\u003e.\n\nBug: 18035729\nChange-Id: Ie1acad81a0fd8b2f24e1f3f07a06e6fdb548be62\n"
    },
    {
      "commit": "7ba649636c4475c3992fa15a57acd2546d69ff38",
      "tree": "63b3e30483d2a838bcaa3337535d4828f3c1ea33",
      "parents": [
        "e74b720d752469d3883f3589de863e8fc82c6338"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 23 11:37:40 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Oct 27 18:52:28 2014 -0700"
      },
      "message": "ART: Add pic flag to oat header store\n\nAdd the compile-time PIC flag to the oat-header key-value store.\nIgnore image offset and patch delta when loading PIC oat files.\n\nChange-Id: Ie1f1ef37125386a968228033d1e2bec565315510\n"
    }
  ],
  "next": "13735955f39b3b304c37d2b2840663c131262c18"
}
