)]}'
{
  "log": [
    {
      "commit": "0ace5633680af8864b76b4f45d63b3407e4dcdf5",
      "tree": "526435a2877d3d04eaa471238b4efd37a347d05d",
      "parents": [
        "d97e00c4f6e8735a854f4443b8bd08fc5a251ce5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 14 11:11:47 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 14 13:12:15 2018 +0000"
      },
      "message": "Revert^2 \"Allow boot image for a part of the boot classpath.\"\n\nThis reverts commit fb83d76a8b186df05f874216b535f5ad57e7bd02.\n\nFixed host run-test dependencies, cleaned up target run-test\nand gtest dependencies.\n\nTest: rm -f out/host/linux-x86/framework/conscrypt-hostdex.jar\n      testrunner.py -b --host --optimizing -t 660-clinit\nBug: 119868597\nChange-Id: Ia0a5aba0223ae6616bf3e109daf0af7b8355d048\n"
    },
    {
      "commit": "fb83d76a8b186df05f874216b535f5ad57e7bd02",
      "tree": "f3db51fcd564929652433e7182eda9ebc7a9bc29",
      "parents": [
        "4433c4351aab98005e12a6b53905678758b74665"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 13 23:30:25 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 13 23:30:25 2018 +0000"
      },
      "message": "Revert \"Allow boot image for a part of the boot classpath.\"\n\nThis reverts commit 4433c4351aab98005e12a6b53905678758b74665.\n\nReason for revert: May be breaking tests.\n\nChange-Id: I3b690dbb06278dc1adce5a389fff938a692bdebd\n"
    },
    {
      "commit": "4433c4351aab98005e12a6b53905678758b74665",
      "tree": "fecf5b03a081dc78df4b058210bb4935d2f7c75c",
      "parents": [
        "6b36d8025de5237b57e7bf23033bfc61a112d6cd"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 04 14:57:47 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Dec 12 16:18:56 2018 +0000"
      },
      "message": "Allow boot image for a part of the boot classpath.\n\nInstead of recording a single uint32_t boot image checksum\nin the oat header, store a string representing composite\nboot class path checksums in the key-value store.\n\nWhen checking the boot class path while loading the boot\nimage, allow the boot class path to contain more components.\nThe runtime shall then load the additional dex files from\nthese components.\n\nTest: Exclude conscrypt from the the core image modules.\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\nTest: run-libcore-tests.sh --mode\u003dhost --variant\u003dX64\nTest: run-libcore-tests.sh --mode\u003ddevice --variant\u003dX64\nTest: run-jdwp-tests.sh --mode\u003dhost --variant\u003dX64\nTest: run-jdwp-tests.sh --mode\u003ddevice --variant\u003dX64\nBug: 119868597\nChange-Id: Ia872fdedea0570ace2c8e597ddb3c6f63a43e62a\n"
    },
    {
      "commit": "c10a0c60ca388ea5f45c11dd86ca0af11191015a",
      "tree": "8befa85940f28ca1c764e211f6f269daf184d28c",
      "parents": [
        "d52a6f402fac600e7432cfd59a1298659625a6d3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 16 11:39:22 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 21 11:23:38 2018 +0000"
      },
      "message": "ART: Add boot/app image checksums.\n\nAnd check app oat files against the boot image checksum\ninstead of checking the oat checksum. The oat checksums are\nincluded in image checksum calculations and the primary\nimage checksum calculation includes the checksums of the\nsecondary images.\n\nAlso remove the obsolete \"patch delta\" to keep the size\nof the ImageHeader 8-byte aligned, remove the key-value\nstore from secondary oat files and move the oat checksum\nupdate code from oat.cc to the oat_writer.cc.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: Pixel 2 XL boots.\nTest: m test-art-target-gtest\nChange-Id: If74f5f18479c44ede0503bf1911ddb9ff8f3c4f8\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": "3d8a78a79aaa47be68162cb3e3fb2544f9b624a3",
      "tree": "0f9790f629c798f5c371e75ae20af60fa39a3203",
      "parents": [
        "c497fca9aa25a331af6428aa0fb6b083c6292089"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 29 21:10:16 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Aug 30 13:37:02 2018 +0100"
      },
      "message": "Revert \"Revert \"Remove OatFileAssistant::MakeUpToDate and friends.\"\"\n\nThis reverts commit baf3761013a30b8c5dc1d6179cddaeee0a764311.\n\nAlso remove the now deprecated --{no-}dex2oat option.\n\nChange-Id: I502c7011877f43f315abffa9b7d482ef13857125\nbug: 111174995\nbug: 111342996\n"
    },
    {
      "commit": "baf3761013a30b8c5dc1d6179cddaeee0a764311",
      "tree": "5ec94a773e2c7e19842b1f2de02baf4343aff6c9",
      "parents": [
        "d6698e34246ea5d99167538b042a70ef203838e6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Aug 29 20:28:25 2018 +0000"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Aug 29 20:29:06 2018 +0000"
      },
      "message": "Revert \"Remove OatFileAssistant::MakeUpToDate and friends.\"\n\nThis reverts commit d6698e34246ea5d99167538b042a70ef203838e6.\n\nReason for revert: 116-nodex2oat failing on no-prebuild\nTest: test/run-test --always-clean --dex2oat-jobs 4 --host --no-prebuild --compact-dex-level fast --interpreter --no-relocate --runtime-option -Xcheck:jni --pic-test --64 116-nodex2oat\n\nbug: 111174995\nbug: 111342996\n\nChange-Id: I05da1774e9274da35993ab301d1632022655583f\n"
    },
    {
      "commit": "d6698e34246ea5d99167538b042a70ef203838e6",
      "tree": "f4fbf6db7cc7bbcc2ea513d30669d975635eefb1",
      "parents": [
        "d3678dc2531f95ced2d015b800ecd9018ce96c73"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Aug 24 18:25:07 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Aug 28 15:30:36 2018 +0100"
      },
      "message": "Remove OatFileAssistant::MakeUpToDate and friends.\n\nRemove dex2oat invocations for non boot-image compilation for ART.\n\nbug: 111174995\nbug: 111342996\nTest: test.py\nChange-Id: If7f92537898e326bfd9dfbd969018f4c08da98b7\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": "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": "66ff8a8b82ff103d48d40e8dad01342c2d6f6d0d",
      "tree": "f1e177b7276d0387bc109fa12e6bd4cde060d5e9",
      "parents": [
        "878124c13b794900b0f5c437f52ac0f61538ab55"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Feb 28 13:27:55 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Feb 28 13:31:13 2018 +0000"
      },
      "message": "Revert \"Revert \"Full-stack integrity: check vdex contents.\"\"\n\nbug: 30972906\n\nInitial revert due to \u0027check\u0027 file of the test needing updating for target tests.\n\nThis reverts commit a19b7649faf8780737be7ce3ec48a12d81c6d69f.\n\nChange-Id: I455780bd88cd89ff80c9084d399e2beeb819b95f\n"
    },
    {
      "commit": "a19b7649faf8780737be7ce3ec48a12d81c6d69f",
      "tree": "a96372834531ab26b0fae78ce9ef4fecac3ef2c1",
      "parents": [
        "d6f914ea4bd09f2d60db2783f7a3fd93d3ec0afb"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 27 17:26:11 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 27 17:26:11 2018 +0000"
      },
      "message": "Revert \"Full-stack integrity: check vdex contents.\"\n\nbug: 30972906\n\nTest fails on device.\n\nThis reverts commit d6f914ea4bd09f2d60db2783f7a3fd93d3ec0afb.\n\nChange-Id: I53902b0d6d4dbe8237f61bf01542acf538229c71\n"
    },
    {
      "commit": "d6f914ea4bd09f2d60db2783f7a3fd93d3ec0afb",
      "tree": "596ef15de83798868d8e6c6cb6cbcb9a45e203e8",
      "parents": [
        "b81dedbf4eae5c5a7e65836d3b6d3b6d541b6fa9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 15 13:56:50 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 27 10:40:05 2018 +0000"
      },
      "message": "Full-stack integrity: check vdex contents.\n\nFor priv-apps, if a vdex on /data has dex code, it must\nbe because the APK has compressed dex code.\n\nFall back to APK if not.\n\nFor test convenience, update --copy-dex-files to also\ntake a \"always\" variant.\n\nbug: 30972906\nTest: 677-fsi\n\nChange-Id: I49f0eab46650145316a86de2971a3b9c140bcff7\n"
    },
    {
      "commit": "5f9a8017be9893dc175d1e7bcad59dd80656d49b",
      "tree": "3ca3b41eee5aa656edd4b05406278821ba706e29",
      "parents": [
        "0e09dfc9cbdd6c2510dbe50dba95cf9d2d815e79"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Feb 12 20:27:46 2018 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Feb 13 16:40:15 2018 -0800"
      },
      "message": "Expose the optimization status of a dex file\n\nAdd a method which exposes the optimization status of a dex file based on\nits expected runtime behaviour. The method returns the status in an array\n[compilation filter, compilation reason].\n\nThe method will try to mimic the runtime effect of loading the dex file.\nFor example, if there is no usable oat file, the compiler filter will be\nset to \"run-from-apk\".\n\nThis will enable more accurate performance monitoring of apks.\n\nTest: oat_file_assistant_test\nBug: 73102540\nChange-Id: Ida9abef502dcb3fd07e1b0988771fb60e9b2a423\n"
    },
    {
      "commit": "29742602424fe8a30884a00947120bd3407f4da6",
      "tree": "11e72080858e75055eb350dd183b51e6daddffdb",
      "parents": [
        "7eb4333d0b60a13f9d3126eadef9eb16c399662a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Dec 14 10:09:03 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 18 15:21:05 2017 +0000"
      },
      "message": "Load /data oat/odex files non-executable when only_use_system_oat_files is set.\n\nMake it still ok to use the vdex and the class status in the oat file.\nThis means:\n- If dex code is uncompressed in APK we\u0027ll use that\n- If dex code is compressed in APK, we\u0027ll use the dex code in the vdex.\n\nThis is a temporary solution in order to almost mimic performance-wise what\nfull stack integrity wants to achieve (priv-apps running from verified,\nuncompressed dex code in APK).\n\nThis is to assess the impact of full stack integrity on privileged apps.\n\nThis CL doesn\u0027t ensure any integrity, and doesn\u0027t check whether the vdex has\nbeen \"tainted\".\n\nbug: 30972906\n\nChange-Id: If0a6ab26dd6211290db53b7f02d88d45aff68c0c\n"
    },
    {
      "commit": "c12bf4c0b6e760f5f1e4255705ac5c3c90fa0c13",
      "tree": "b66cb0e189e267a3a5ebb35440e8cd3913d28710",
      "parents": [
        "af52bcb7532e25331d6528c05105423312e161fd"
      ],
      "author": {
        "name": "Shubham Ajmera",
        "email": "shubhamajmera@google.com",
        "time": "Tue Oct 24 16:59:42 2017 -0700"
      },
      "committer": {
        "name": "Shubham Ajmera",
        "email": "shubhamajmera@google.com",
        "time": "Thu Nov 02 07:33:16 2017 -0700"
      },
      "message": "Add zip-fd support in dexoptanalyzer\n\nTest: installd flow(manual), oat_file_assistant_test\n(cherry-picked from commit 89455b30a30de68d389cef68748a01e13ea1356)\nBug: 67111829\nChange-Id: Icf24c671ee060c75ba53932a7ccbe422e0ceb2e0\n"
    },
    {
      "commit": "33bff25bcd7a02d35c54f63740eadb1a4833fc92",
      "tree": "553db4f60878acf2a0fa7036a739d406df9a29b7",
      "parents": [
        "321b3ca9a36d769283c64d4bdee0798db80af524"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 01 14:35:42 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 02 10:11:02 2017 +0000"
      },
      "message": "ART: Make InstructionSet an enum class and add kLast.\n\nAdding InstructionSet::kLast shall make it easier to encode\nthe InstructionSet in fewer bits using BitField\u003c\u003e. However,\nintroducing `kLast` into the `art` namespace is not a good\nidea, so we change the InstructionSet to an enum class.\nThis also uncovered a case of InstructionSet::kNone being\nerroneously used instead of vixl32::Condition::None(), so\nit\u0027s good to remove `kNone` from the `art` namespace.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I6fa6168dfba4ed6da86d021a69c80224f09997a6\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": "27e0d1f3da2e0b7046dacb40794739d739e454a3",
      "tree": "d3c69ca2917325cf20998060d0e0d5f8ab6b1b8e",
      "parents": [
        "52a3c989f96984f9bc9e02620694fc44708a1df2"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 26 00:16:07 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Aug 02 19:23:14 2017 -0700"
      },
      "message": "Pass the class loader context to dex2oat when optimizing at runtime\n\nUntil now we always passed the special shared library symbol \"\u0026\" when we\ncalled dex2oat at runtime without an explicit class path.\n\nThis CL changes that and passes the class loader context inferred from the\nruntime class loaders to dex2oat. If any of the runtime class loaders is\nnot supported we continue to pass the special library symbol.\n\nBug: 38138251\nTest: m test-art-host\nChange-Id: Ica43ee8a3f36dab2d9ed0e634a9f6341379c8e1c\n"
    },
    {
      "commit": "e4e812a917345a3cb9ac955c8a84f64dfc26b5d9",
      "tree": "bf830d83f8d7ade1d875903ed5d8529d706d3b11",
      "parents": [
        "2f0ac4fb4486e7d9e5c1545d45a2b9b818a80dc3"
      ],
      "author": {
        "name": "Shubham Ajmera",
        "email": "shubhamajmera@google.com",
        "time": "Thu May 25 20:09:58 2017 -0700"
      },
      "committer": {
        "name": "Shubham Ajmera",
        "email": "shubhamajmera@google.com",
        "time": "Wed Jul 19 00:15:56 2017 +0000"
      },
      "message": "Allow DexFile#getDexOptNeeded to check case when downgrading is required\n\nThe change in the API will allow comparison of compiler filter in case when\ndowngrade is required. Previously, it used to only consider cases of compiler\nfilter upgrades.\n\nTest: make \u0026 boot\nBug: 36598475\n(cherry-picked from commit cf3d122a9234414b7cd2aab340d1450f3e9da213)\n\nChange-Id: Ice292ef4f16c373297821c40e39987f3de914c67\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": "07c6d726c9acfa06252039412e9985706747648a",
      "tree": "833c09829e91611ad406bf1caa06a38db89d2c50",
      "parents": [
        "2127ad8bfacdd0ae700f491bfa22df0530024bba"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jun 07 17:06:12 2017 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jun 08 12:02:49 2017 +0000"
      },
      "message": "Revert \"Revert \"Use OatFileAssistant default filter instead of the dex2oat one\"\"\n\nDisable checker when testing no-prebuilds. By default, the compiler will\nonly quicken (in no prebuild mode) and will not generate a cfg file.\n\nThe checker test are already covered by other modes like:\nart-preopt (pic) or art-optimizing (npic).\n\nTest: testrunner.py --host --no-prebuild\n\nThis reverts commit df663fb4f871ae2e49aad7b58e31952ff647b061.\n\nBug: 38442248\nChange-Id: Ifc43715d610787a33a97f13620a80ba3c9f217db\n"
    },
    {
      "commit": "df663fb4f871ae2e49aad7b58e31952ff647b061",
      "tree": "c90ddce83ac98252ced0a4181b0c4b1e0e34c1f8",
      "parents": [
        "f62422ed7a0a0e0ec70c520192efb79e8360340b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 07 16:25:55 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 07 16:25:55 2017 +0000"
      },
      "message": "Revert \"Use OatFileAssistant default filter instead of the dex2oat one\"\n\nThe change broke --no-prebuild tests.\n\nTest: testrunner.py --host --no-prebuild\nBug: 38442248\n\nThis reverts commit f62422ed7a0a0e0ec70c520192efb79e8360340b.\n\nChange-Id: I820226ca448375e36059e6f8f5540ba5d831261f\n"
    },
    {
      "commit": "f62422ed7a0a0e0ec70c520192efb79e8360340b",
      "tree": "6c558c7acc09b0d4b90550f09220ee736075e08c",
      "parents": [
        "08556886a16ff2bb9fc3f184ac699de21c0369cd"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 06 18:04:57 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jun 07 03:10:31 2017 -0700"
      },
      "message": "Use OatFileAssistant default filter instead of the dex2oat one\n\nEnsure that when OatFileAssistant needs to generate oat files it uses\nits default filter (quicken) instead of the one from dex2oat (speed).\n\nBug: 38442248\nTest: m test-art-host\nChange-Id: I6071d3b76063ad719e3fe372b4dc9f5a4881d3a8\n"
    },
    {
      "commit": "357c66dcc20ce15108ecf05f5ecf69a80b383dab",
      "tree": "c6b1984838a0faff32bed37ceaf8be2b4a5c4deb",
      "parents": [
        "9e8797d1c96dd4744b667ef6bbd10812e2087f79"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 04 01:57:17 2017 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 04 16:08:57 2017 -0700"
      },
      "message": "Revert \"Revert \"Ensure dex file are extracted and verified at load time\"\"\n\nThe issue was caused by running device-gtests as root (which will always\nhave full write access everywhere).\n\nFor now, disable the tests that rely on file permissions when running as\nroot.\n\nTest: m test-art-target-gtest-oat_file_assistant_test\nBug: 36605597\nBug: 36824842\n\nThis reverts commit 9bfc6bb1f44797aec19a151e47c0902ef2516095.\n\nChange-Id: I60e8c3d602ca40b1f1e12e8808055effcbb8dcc6\n"
    },
    {
      "commit": "9bfc6bb1f44797aec19a151e47c0902ef2516095",
      "tree": "af9fe3020cd389105a8bb03c8680289f4287953e",
      "parents": [
        "d2510c92e7c1f571ab012fcb82e77d7e1806ae3b"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 04 00:13:50 2017 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 04 00:13:50 2017 +0000"
      },
      "message": "Revert \"Ensure dex file are extracted and verified at load time\"\n\nThe art build bot fails for the oat location tests. I suspect that ScopedNonWritable is not working properly on the bot.\n\nThis reverts commit d2510c92e7c1f571ab012fcb82e77d7e1806ae3b.\n\nChange-Id: Ica70862fd608ebdeb3c710f786ae21b99b69bc20\n"
    },
    {
      "commit": "d2510c92e7c1f571ab012fcb82e77d7e1806ae3b",
      "tree": "b175bb55137627b7beb879592be001bbc85851aa",
      "parents": [
        "3650acb134b4e68ba3f190772b02105f74081bf2"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 20 19:28:25 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed May 03 11:56:32 2017 -0700"
      },
      "message": "Ensure dex file are extracted and verified at load time\n\nThis change removes the ability to specify an explicit OAT location and\nensures that the best oat file (either the oat or the odex) is compiled\naccording to its special filter (kDefaultCompilerFilterForDexLoading).\n\nThe oat files location can therefore be:\n- in dalvik-cache: referred as the OAT location.\n- in dex_parent_dir/oat/ISA/: referred as the ODEX location.\n\nThe \"best oat file\" for a dex location is changed to prefer the ODEX\nlocation whenever the location is writable (see\nOatFileAssistant::GetBestInfo()).\n\nMakeUpTodate will now attempt to generate the \"best oat file\" instead of\nalways defaulting to the oat location.\n\nTest: m test-art-host-getest-oat_file_assistant_test\nBug: 36605597\nBug: 36824842\nChange-Id: Ic54b3b94be06c8c47f211ce3d738b0db0a9c7bb3\n"
    },
    {
      "commit": "d9911eeca13f609c885e0f6a5ce81af9b6340bfa",
      "tree": "f850510643ee120dba140bf0bb3e1c1b9c9ce4db",
      "parents": [
        "46bfb7c047a590ac5c24b658f31c170631556bb6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 27 13:27:24 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 27 13:53:48 2017 -0700"
      },
      "message": "ART: Clean up field initialization\n\nAdd explicit field initialization to default value where necessary.\nAlso clean up interpreter intrinsics header.\n\nTest: m\nChange-Id: I7a850ac30dcccfb523a5569fb8400b9ac892c8e5\n"
    },
    {
      "commit": "bc26b72a96c6e67a30d819506d643cb259886030",
      "tree": "7e84ce42ecb0d560b3ad3f44d7d4bcc5c7e1745a",
      "parents": [
        "96c4715d5ce952999f066ec74ecc8609a0856733"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Mar 10 14:27:10 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Mar 13 16:10:32 2017 +0000"
      },
      "message": "Make image oat checksum depend on secondary images.\n\nRather than explicitly having to load and combine the checksums from\nsecondary images in the case of multi-image, have the image oat\nchecksum for the primary image depend on the contents of all the\nimages.\n\nBug: 35659889\nBug: 34385298\nBug: 35992406\n\nTest: test-art-host\nTest: Manually add field to ZygoteInit, update boot image, verify image\n      is properly relocated and used on device.\nChange-Id: I38bd957d165682edabd0fd1874e8ef7acf923deb\n"
    },
    {
      "commit": "95e0967b8aa7a0f9abcb148f58dbf697a482e886",
      "tree": "585186d4c4c63482f785c312b549f5baa54505df",
      "parents": [
        "48b795efcb504b71fbf038fabdd3d05366793197"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Feb 22 11:37:41 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Mar 02 09:29:25 2017 +0000"
      },
      "message": "Clean up OatFileAssistant getting of image info.\n\n* ImageInfo.oat_checksum is no longer unused.\n* Don\u0027t abort if we can\u0027t read secondary isa images.\n\nTest: m art-test-host\nBug: 34385298\nBug: 34800919\nChange-Id: I4d1ad4e2435cc62d38cd7143bc71313e319e952d\n"
    },
    {
      "commit": "69bcf2c940d26d65767bea7417317cf9a0431e0c",
      "tree": "7458a29402ff70a49b6d1cd6ca28d1eebb162063",
      "parents": [
        "3f38398380b80d1ded078ebed1211b7e4f51460f"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jan 24 10:25:21 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Feb 14 09:11:30 2017 +0000"
      },
      "message": "Improve checking of multidex dex checksums.\n\n* Fall back to odex file for all multidex entries if the apk is stripped,\n  not just for the main multidex entry.\n* Verify the number of multidex entries has not changed.\n* Improve performance by getting all checksums from the apk in one go\n  and cache the results instead of repeatedly opening the apk.\n* Stop referring to non-main multidex entries as \"secondary\" dex files.\n\nBug: 34604632\nTest: added tests to dex_file_test and oat_file_assistant_test\nTest: m test-art-host\n\nChange-Id: I58b17ecfbc9165a5bfeffd5281ee21d108f64479\n"
    },
    {
      "commit": "2f27abd6685f9be3a0923552afa1147751b438f9",
      "tree": "04ed90723a61c5a958432ae8eebc3e4377c14059",
      "parents": [
        "b8ab63ac7b58fe6747676dfc220e663a539eea90"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jan 31 14:02:34 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jan 31 14:57:26 2017 +0000"
      },
      "message": "Revert^2 \"OatFileAssistant: look at vdex file for IsDexOptNeeded\"\n\nThis reverts commit ba037b121edc7259b3fa5607e6730402ce2ca61e.\nTest: m test-art-host, with new oat file assistant test added.\nBug: 34339100\n\nChange-Id: I1ab9ec9f6ec299be7b8144612b71e6054d84412c\n"
    },
    {
      "commit": "ba037b121edc7259b3fa5607e6730402ce2ca61e",
      "tree": "4cc89efe98ddc6ef0421405affafce95c5aabae2",
      "parents": [
        "402089a27b25a9d1112c49189eb83a567719188f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 25 00:16:27 2017 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 25 00:16:27 2017 +0000"
      },
      "message": "Revert \"OatFileAssistant: look at vdex file for IsDexOptNeeded\"\n\nThis reverts commit 402089a27b25a9d1112c49189eb83a567719188f.\n\nLeads to crashes when vdex doesn\u0027t seem to contain dex files.\n\nBug: 34339100\nBug: 34685231\nChange-Id: I57c3134892a190f792e196e6d7162285e74a64e4\nTest: m test-art-host\n"
    },
    {
      "commit": "402089a27b25a9d1112c49189eb83a567719188f",
      "tree": "8034d49882e6facaeace386478369d0aa9d4e243",
      "parents": [
        "a8b4390a3b817a455b0abdf575922fea6182170d"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jan 18 08:39:23 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jan 23 13:17:44 2017 +0000"
      },
      "message": "OatFileAssistant: look at vdex file for IsDexOptNeeded\n\nEven if the oat file cannot be opened, there may be a vdex file that\ncontains valid dex code. The oat file assistant should take this into\naccount when determining the dexopt status.\n\nBug: 34339100\nTest: oat_file_assistant_test, with new tests added.\nTest: install an app, dumpsys package to show app status,\n      delete app\u0027s oat file, dumpsys package to show status as vdex only,\n      cmd package compile -r install app, verify in log that input vdex fd is\n      provided to dex2oat.\n\nChange-Id: Iab43e617a899773b318d61adeb117ed2cec085da\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": "7225a8d0796ef6fafbf3037cafd2446766bff514",
      "tree": "265ccb923857e4b6def6b0adaf547d52215e4d71",
      "parents": [
        "5ee771615a7e7752abb8b0d53122ca44137c4286"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Nov 22 10:12:03 2016 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Nov 28 08:24:32 2016 +0000"
      },
      "message": "Refine the DexOptNeeded codes.\n\nTo expose information useful for optimizing how dex2oat is invoked in\nthe presence of vdex files.\n\nBug: 30937355\nTest: art-test-host\n\nChange-Id: I8e09fabf8c56bf1e1041f43d3d9edf7850adc395\n"
    },
    {
      "commit": "03bc659b04fefab6e1c9e08c5bd28fe8168c863f",
      "tree": "1e27d6e28fd18479bd812f2abf4a88dbd36092e0",
      "parents": [
        "88bc673b146cb5fda01b4139b6e8ceec5221f106"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Nov 22 09:42:04 2016 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Nov 24 16:49:27 2016 +0000"
      },
      "message": "Refine OatStatus enum.\n\nReplace Exists() with a separate OatStatus code, and distinguish\nbetween the oat file being out of date due to the dex being out of\ndate or the image being out of date.\n\nBug: 30937355\nTest: oat_file_assistant_test\nChange-Id: Ia3853e461beb07f0b417276b9277b9c562b20865\n"
    },
    {
      "commit": "88bc673b146cb5fda01b4139b6e8ceec5221f106",
      "tree": "aca0d84f067fa1901972c07f00c639e5c6922112",
      "parents": [
        "46cc64f11b1b1f0ac5e4aebd665b325a68d4d42f"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Nov 14 14:38:03 2016 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Nov 24 07:54:03 2016 +0000"
      },
      "message": "Factor out code for picking the best oat file.\n\nFactor out common code for determining the best oat file.\n\nBug: 30937355\nTest: oat_file_assistant_test\n\nChange-Id: Ic32af2ec493675be1a22e81c2de46a848c398f6b\n"
    },
    {
      "commit": "46cc64f11b1b1f0ac5e4aebd665b325a68d4d42f",
      "tree": "182f28f92fb576b2ad586a368ac2d0761896e832",
      "parents": [
        "3e580bc9b248586fa5d87db2098fa5c5abb7afc1"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Nov 14 14:53:55 2016 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Nov 24 07:54:03 2016 +0000"
      },
      "message": "Move dumping of oat file status inside of the OatFileAssistant.\n\nRather than exposing what could otherwise be internal to the\nOatFileAssistant, move the logic for dumping a human readable\nrepresentation of the status of the oat files inside the\nOatFileAssistant.\n\nBug: 30937355\nTest: oat_file_assistant_test\n\nChange-Id: I79c6cc1286a822f1dbe0035be934a2be4792563c\n"
    },
    {
      "commit": "3e580bc9b248586fa5d87db2098fa5c5abb7afc1",
      "tree": "c87d2bd3929b7d38dce320417013b3c932e25352",
      "parents": [
        "70a8426705571e84d83a060ae6abeb6d04cd2a17"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Nov 08 16:23:07 2016 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Nov 24 07:54:03 2016 +0000"
      },
      "message": "Remove OatFileAssistant IsOutOfDate, IsUpToDate, and NeedsRelocation.\n\nRelatively recent design changes made these functions equivalent to\nthe Status function. Prefer to use the Status function instead to\nsimplify the OatFileAssistant API, especially in preparation for\nexpanding the number of possible Status results.\n\nBug: 30937355\nTest: oat_file_assistant_test\n\nChange-Id: Idfd594729210257f693f03ca823a8d54e74034c5\n"
    },
    {
      "commit": "70a8426705571e84d83a060ae6abeb6d04cd2a17",
      "tree": "768238710f9873bd74b6c74e0613449002517484",
      "parents": [
        "4b600964fe89b962afe3c9ae783a255789db4411"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Nov 08 16:51:51 2016 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Nov 24 07:54:03 2016 +0000"
      },
      "message": "Simplify decision of which is the best oat file.\n\nPreviously the best oat file was determined by looking at all\ncombination of states of the oat file in the odex location and the oat\nlocation. This change simplifies the decision by using the oat\nlocation if that oat file is not out of date and using the odex\nlocation otherwise. For practical cases, both decisions lead to the\nsame result.\n\nBug: 30937355\nTest: oat_file_assistant_test\n\nChange-Id: I687206612914cdbd43950fcdd7dd818a54255a6b\n"
    },
    {
      "commit": "a463b6a920a2a0bf14f9cca20a561b412b9349d1",
      "tree": "8bffe70a26799c7a3d9ad9941a8062e30212190e",
      "parents": [
        "554b6fb8759d186eba1046c220c9cff9a8610525"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 12 21:53:32 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 15 10:35:31 2016 -0700"
      },
      "message": "ART: Refactor ImageSpace loading\n\nMake the code more straightforward so it is easier to reason\nabout and extend.\n\nAlso change return types to unique pointers so it\u0027s clear that\nit is the caller\u0027s responsibility to free those when necessary.\n\nBug: 30832951\nTest: m test-art-host\nTest: device booting\nChange-Id: I3216eb702e45357a48af5158dacbe40e79bd1ae9\n"
    },
    {
      "commit": "743bf365c02fd182342879b5cf4d97d66d195a3b",
      "tree": "c3fa97feacb36b7c6772b09b11ac2b22373a1a2f",
      "parents": [
        "533d684038a72fc5bd3ed352384fc2200bc79c76"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Apr 19 15:39:37 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jul 28 16:35:13 2016 -0700"
      },
      "message": "Create OatFileAssistant::OatFileInfo inner class.\n\nTo share code reused for getting info about both the odex and oat files.\n\nTest: oat file assistant tests.\nChange-Id: Ifcc48e0ac481899285e39e3b02f3ade180e38728\n"
    },
    {
      "commit": "d684f52a252e2e953401dc1313a9ce7e3d770353",
      "tree": "76a4e2f8e960914f16da62a6444fd0c78c488b09",
      "parents": [
        "b81881dc40fb376844b0f8b38bc6592260b6ad06"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Apr 19 13:24:41 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jul 19 09:14:47 2016 -0700"
      },
      "message": "Compute oat and odex filenames eagerly.\n\nBecause we almost always need both of them anyway, and they aren\u0027t\nexpensive to compute.\n\nTest: oat file assistant tests.\nChange-Id: I328ea51da6eb8700329f829a0458b02e12d1ee9e\n"
    },
    {
      "commit": "b81881dc40fb376844b0f8b38bc6592260b6ad06",
      "tree": "c6739caeea728ed72a8990ab8ceac6d4fcde6cbe",
      "parents": [
        "bae13af2fc2fa89985d0466cedf155cb96767910"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Apr 19 13:08:04 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jul 19 09:12:07 2016 -0700"
      },
      "message": "Make a static OatFileAssistant::DexLocationToOatFileName function.\n\nSo that you can figure out an oat file name without instantiating an\nOatFileAssistant object.\n\nTest: oat file assistant tests.\nChange-Id: I577c5d02225f926086e9833d45b88d8a92db52fa\n"
    },
    {
      "commit": "e8e48aee32bafab22ad97fca3deefa0952f36602",
      "tree": "edd62e94dea48d244d67608442bcad874d020c5a",
      "parents": [
        "e8109f738514d146e30baad2b046cef133a00e86"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Apr 19 12:41:04 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jul 07 16:20:31 2016 -0700"
      },
      "message": "Use \"\" to indicate the oat filename could not be computed.\n\nInstead of having an extra boolean flag.\n\nTest: oat file assistant tests.\nChange-Id: I91249ba862522e691c6b67fd28a2eac58dcde07e\n"
    },
    {
      "commit": "e8109f738514d146e30baad2b046cef133a00e86",
      "tree": "c5813a884ae38c96943b5fd96cfb66a74ae7d706",
      "parents": [
        "d1472a27e856ec68ab5a27abaaebe9c61d91d343"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Apr 18 10:40:50 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jul 07 16:20:31 2016 -0700"
      },
      "message": "Compute and cache oat file status in OatFileAssistant.\n\nInstead of computing and caching IsOutOfDate + IsUpToDate separately.\n\nTest: oat file assistant tests.\nChange-Id: Ic93812d99c547f54a1c29315d9a3572180cee8d1\n"
    },
    {
      "commit": "d1472a27e856ec68ab5a27abaaebe9c61d91d343",
      "tree": "7a3aa99465a6b1f5563bdced3af009bd628bfacd",
      "parents": [
        "4c7f1933cb5d5cdd43741a5e352d662187f81ca4"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Apr 15 15:18:56 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jul 07 16:13:00 2016 -0700"
      },
      "message": "profile_changed should not effect GetBestOatFile.\n\nThis change moves the check for whether a profile changed from\nGetBestOatFile to GetDexOptStatus, because profile_changed should not\neffect what oat files are loaded.\n\nTest: OatFileAssistantTest.ProfileOatUpToDate\nChange-Id: Iafd12677f20d2844809337d1d83b688f17461cc0\n"
    },
    {
      "commit": "4c7f1933cb5d5cdd43741a5e352d662187f81ca4",
      "tree": "9a3b971e672a51809d17219eabb3b934b4af7136",
      "parents": [
        "59313b203568253eda1f394e5e0d1912e1ff8fb9"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Apr 15 15:51:21 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jul 07 15:44:48 2016 -0700"
      },
      "message": "Make OpenImageSpace static and ArtFileName internal.\n\nTest: m build-art-host\nTest: m build-art-host-tests\nChange-Id: I40595d158e63cc547eba988b6c19df00ff589b05\n"
    },
    {
      "commit": "be84b59e802d9176a9b60b040e0be6bda54e958a",
      "tree": "9a4fd41bef42a5487581244f74c4c41f6abd2730",
      "parents": [
        "9822f6b81f7e8cb31d6ff8a1b60fe15fa9d439a8"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jun 23 17:09:13 2016 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 28 14:01:25 2016 +0100"
      },
      "message": "Remove the old obsolete profiler\n\nBug: 24698874\nTest: all the existing run-tests pass.\nChange-Id: I56d25c75541275512a64ae5708569461b875df9c\n"
    },
    {
      "commit": "01be68100e96a44b4ff8cb4cb3c9baa346ff048d",
      "tree": "5d90bfc7b0e4c790ac9215ed6100a3130756e935",
      "parents": [
        "d53208c8e7ca4b2e2d4070d8e67ec1ee078cee74"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue May 17 10:34:52 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue May 24 17:33:11 2016 -0700"
      },
      "message": "Only compile dex files if they are not up to date.\n\nInstead of trying to compile them all the time, and relying on file\npermissions to keep us from overwriting up-to-date dex files with\ndifferent compiler filters.\n\nBug: 27641809\nBug: 28639246\nBug: 28826195\nChange-Id: Ie717089d58517427b6f9a522b48146761c57a1a9\n"
    },
    {
      "commit": "8943c1dc59da4dd182fb906bbe111d3b598b9fdb",
      "tree": "2f9a061954c1961d5a0e5849b95bdc4797f3baf5",
      "parents": [
        "d8cd1c83f9fe7637494f7a65807289041d2fb7d3"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon May 02 13:14:48 2016 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue May 10 14:00:09 2016 +0100"
      },
      "message": "DexFile: Add an API to query oat file status.\n\nAdds DexFile.getDexFileStatus(path), which returns an opaque,\nhuman-readable string representation of the oat file status. This\nrepresentation isn\u0027t guaranteed to be stable and can change from\nrelease to release.\n\nbug: 27494108\n\n(cherry picked from commit cd7e7f78b8e97c1f6419f3f44e0d5fdc6eddfdc6)\n\nChange-Id: If6997f7d28d022e118ffea1eec6183841577a637\n"
    },
    {
      "commit": "f4b3487ee77e3c2e3d5372ae9e857cd3429bb808",
      "tree": "b48ab16dec4e8d1deab6556788f9a5fe2b62f77a",
      "parents": [
        "a6513729ae2ad0d2f9dd21d77ea6cf9ed9fa6eef"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Apr 13 11:03:46 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue May 03 12:22:39 2016 -0700"
      },
      "message": "Remove -XOatFileManagerCompilerFilter argument.\n\nInstead use the value of \u0027-Xcompiler-option --compiler-filter\u003dXXX\u0027 for\nthe target compiler filter to use to determine if the runtime should\ntry to invoke dex2oat when oat files are loaded.\n\nBug: 27641809\nChange-Id: I1856e0e37df91835b81105567c70d8a285a88f62\n"
    },
    {
      "commit": "fd336c344058274fada3c48fbd356befca285b9a",
      "tree": "ab0ee61612979e51aa830ce7d5faeae7dadf0315",
      "parents": [
        "b11ffb7f33d70da0eb2caf891bbfdab9129fe5b4"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Apr 07 19:46:31 2016 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Apr 07 20:10:48 2016 -0700"
      },
      "message": "Fix combined checksum calculation to use isa.\n\nBug: 28054110\n\n(cherry-picked from commit 8bbda8e683a1933755d0b8a68fed620cd63148ee)\n\nChange-Id: I228db6ea1003e4e70d6a5fa7345d56409e70bd87\n"
    },
    {
      "commit": "b11ffb7f33d70da0eb2caf891bbfdab9129fe5b4",
      "tree": "2188e06f226b7ff07c3aacd8c181c85e256a6f66",
      "parents": [
        "dc8092521b50b108607ed54afde94d20a22468df"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Apr 07 15:40:54 2016 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Apr 07 19:51:49 2016 -0700"
      },
      "message": "Combine checksum of all boot images.\n\nAllows a change to be detected in more than just the first image.\nCombines checksums of all boot images using xor. A better hash is left\nas TODO.\n\nBug: 28054110\n\n(cherry-picked from commit 4f351aae00f43dd4e3290976f249d3664cc47091)\n\nChange-Id: Ia557e2460ca582082368ef93508c04ce32c3036a\n"
    },
    {
      "commit": "1e860619cdcc9c0b6a202a247c50cf7633ac7b74",
      "tree": "6621e6ca137d79cc58faa515692a039da4d15cac",
      "parents": [
        "20df4e408e9d285920558e6afc8442a412df3ac4"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Mar 30 12:17:55 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Mar 30 12:17:55 2016 -0700"
      },
      "message": "Refine OatFileAssistant.MakeUpToDate failure result.\n\nAvoid misleading log messages if MakeUpToDate fails because we decided\nnot to compile dex code.\n\nBug: 27641809\nChange-Id: I184f8e89648183cba4ebe7a1dc5e0e6c8774c15b\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": "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": "fbc31087932a65e036a153afab3049dc5298656a",
      "tree": "c728b9039a71db3be9cae888ad5e1afc31f34a13",
      "parents": [
        "c7f4e3a5aeaa23342b4e03b0d751f60ac5c5815c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Jan 24 11:59:56 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jan 25 14:22:15 2016 -0800"
      },
      "message": "Revert \"Revert \"Load app images\"\"\n\nThis reverts commit 1bc977cf2f8199311a97f2ba9431a184540e3e9c.\n\nBug: 22858531\n\nChange-Id: Ide00bf3a73a02cba3bb364177204ad1b13f70295\n"
    },
    {
      "commit": "1bc977cf2f8199311a97f2ba9431a184540e3e9c",
      "tree": "580a02752d8e447f6dce7cce01386c7e2a9a87f4",
      "parents": [
        "f7fd970244f143b1abb956e29794c446e4d57f46"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Jan 23 14:15:49 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Jan 23 14:15:49 2016 +0000"
      },
      "message": "Revert \"Load app images\"\n\nFails when a method is duplicated (see test 097-duplicate-method)\n\nBug: 22858531\n\nThis reverts commit f7fd970244f143b1abb956e29794c446e4d57f46.\n\nChange-Id: Ib30ae5be00cc568e799290be6b3c8f29cbbe4c20\n"
    },
    {
      "commit": "f7fd970244f143b1abb956e29794c446e4d57f46",
      "tree": "aac1f57ac70747957f609bb46305dfeca87645a1",
      "parents": [
        "95005291d8ebdd1d2ac58ffc5181fef4fbbf2383"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 09 11:16:49 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 22 15:01:55 2016 -0800"
      },
      "message": "Load app images\n\nSupport in-place patching of the app image based on boot image\nlocation and app oat location. Only loads for art run test so far\nsince we do not automatically generate app images for app installs.\n\nN5 maps launch time (~200 runs):\nBefore: 930ms\nAfter: 878.18ms\nAfter + image class table: 864.57ms\n\nTODO:\nOatdump support.\nStore class loaders as class roots in image.\n\nBug: 22858531\n\nChange-Id: I9cbc645645e62ea2ed1ad8e139e91af7d88514c1\n"
    },
    {
      "commit": "740eec92a7f63e8ddff1e007ae624d548a4e5a16",
      "tree": "277043557657b03da02a2448918b13b92126bc75",
      "parents": [
        "644044333f5f6d7ba7e327619ac0d0ce4e2609d3"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Oct 15 15:12:23 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Oct 16 13:56:52 2015 -0700"
      },
      "message": "Change dex_location_ from const char* to std::string.\n\nBecause we tend to use the dex_location_ as an std::string fairly\noften.\n\nChange-Id: Ida9624c9cb12c8ad30577146f1e6e97e25edc155\n"
    },
    {
      "commit": "5f946da9c362216e9144b142ec0e5b90073b836d",
      "tree": "d2eb283339b01aaf0b2b8b689acd9566200488c4",
      "parents": [
        "cced6ad152cf8ec13f38f2210c1b8445919232d3"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Jul 17 12:28:32 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jul 20 08:46:05 2015 -0700"
      },
      "message": "Fix bug in OatFileAssistant::GetBestOatFile.\n\nPreviously, GetBestOatFile would fail to return an oat file in the\ncase where a non-executable oat file was requested and the only\nproblem with the oat file was that it wasn\u0027t relocated.\n\nBug: 22561444\nChange-Id: I6446bf474afaf6c97861e7a89bd74a07c5a52a21\n"
    },
    {
      "commit": "9b994ea841eaaefbdda652251894a74db9cefcc8",
      "tree": "1301a50074df3fa4de66d2fd0580aa67237fa90f",
      "parents": [
        "7467fa30adceb7287e70075b7c8de0cdade60c4c"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jun 24 08:44:19 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jun 25 08:33:59 2015 -0700"
      },
      "message": "Do not try to compile resource-only dex files.\n\nThis changes behavior in the case where we are asked to load a dex\nfile that does not exist or has no classes.dex entry.\n\nPreviously we would run dex2oat, which would log an error message and\nfail. Now we skip running dex2oat, we report the DexOptStatus as\nkNoDexOptNeeded, and we do not try to fall back to the missing\noriginal dex files.\n\nBug: 21722039\n(cherry picked from commit cb44b11a926696e34b3dc44288e762b4303cc128)\n\nChange-Id: I84a85dc9ece54bcc0a5283f871e09bf68471c6e7\n"
    },
    {
      "commit": "9bdb6473fd75204a0ed65c7ca5a5e02e96bffdf4",
      "tree": "5a77047587c4e7856f34cb740a8198a3a8f66e62",
      "parents": [
        "cefb1553cdbaccd486c6bb8a75210d9485287f93",
        "581f4e9065b9b7f788315d3ea1a45e51ae168589"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue May 12 19:36:48 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 12 19:36:48 2015 +0000"
      },
      "message": "Merge \"Fix bug in removal of *.flock files.\""
    },
    {
      "commit": "581f4e9065b9b7f788315d3ea1a45e51ae168589",
      "tree": "51fe60eff11a009df761b857aa3d0bbb446dc504",
      "parents": [
        "2b689e370be9f32a88b419edf2d78eb6befade9c"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu May 07 10:19:35 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue May 12 11:23:21 2015 -0700"
      },
      "message": "Fix bug in removal of *.flock files.\n\nBug: 20816098\nChange-Id: I72ee32884f32af43a54518c9b9772f63957ab5de\n"
    },
    {
      "commit": "b361d948dcefcfa9bb78ccff2c18c750ed202828",
      "tree": "0a95a2fb5eecdee21c6eacfd1dd455e766af37f1",
      "parents": [
        "2b689e370be9f32a88b419edf2d78eb6befade9c"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu May 07 10:52:28 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu May 07 10:52:28 2015 -0700"
      },
      "message": "Fix typo in comments.\n\nChange-Id: I6569c0fdc878f797b37509432b59b0d5c9bc5533\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": "95abd04d211470ea4b9b9191b96dd0f32e7ce3a4",
      "tree": "68d61705d30c6ea5ebd1b4d2f8306f32c01aecb5",
      "parents": [
        "425587d25832145a45a0b76beaa93996b0226f0d"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Mar 24 09:51:28 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Apr 03 13:10:30 2015 -0700"
      },
      "message": "Rename isDexOptNeededInternal and add kSelfPatchOatNeeded\n\nThis change renames isDexOptNeededInternal to getDexOptNeeded and adds\nanother possible result: kSelfPatchOatNeeded. kSelfPatchOatNeeded is\nreturned when there is no odex file to relocate from but there is an\noat file that can be relocated in place.\n\nChange-Id: Ib9a6373f98474f1242367b5285086251a9d580e5\n"
    },
    {
      "commit": "6343411e52d2a59cd716cb47a85ebd0d68e61a3c",
      "tree": "64f9be60771f0e40fcea0706ab14afffc95f9d3a",
      "parents": [
        "19c1c124fb92a13c5f59dfde8f638b7bf9b73abb"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Mar 16 14:32:16 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Mar 25 14:44:44 2015 -0700"
      },
      "message": "Store odex files in oat/\u003cisa\u003e/ directory.\n\nPreviously odex files were stored alongside the dex location as:\n  dex location: /foo/bar/base.apk\n  odex location: /foo/bar/\u003cisa\u003e/base.odex\n\nThis changes where odex files are stored, adding an \"oat\" directory:\n  dex location: /foo/bar/base.apk\n  odex location: /foo/bar/oat/\u003cisa\u003e/base.odex\n\nSee also the corresponding change in platform/build and\nplatform/frameworks/native.\n\nBug: 19550105\nChange-Id: I4c6be4f0c41ff175904846db8e360c4af815b265\n"
    },
    {
      "commit": "66d874d96d5699bb090c59f47a5a528956ca053e",
      "tree": "d59bf83a08fead7d9823230831bea63c9e43a62c",
      "parents": [
        "2cfdabd2bb4833d7092819d27ef08a9e1cdffead"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jan 15 09:37:19 2015 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Mar 09 14:46:23 2015 -0700"
      },
      "message": "Create OatFileAssistant class for assisting with oat files.\n\nThe oat file assistant is used for determining whether dex2oat or\npatchoat is needed, for running dex2oat or patchoat as needed to make\nan oat file up to date, and to load dex files associated with a given\ndex location.\n\nThe introduction of the OatFileAssistant class is meant to clean up and\nconsolidate code related to the management of oat files that was\nduplicated and spread across dalvik_system_DexFile.cc and\nclass_linker.cc.\n\nBug: 11301553\nChange-Id: I0c16027b9bae4570c2c50faa9c14f581c0cbafb8\n"
    }
  ]
}
