)]}'
{
  "log": [
    {
      "commit": "525fa42b13863305bc7cad34bba1c9ab5567894e",
      "tree": "0315618e0f82b8ac3d272328f6beca1bdef10398",
      "parents": [
        "0744d72e304fddd5453d05f8e06fa85c0467e86d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 19 07:50:35 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 19 13:35:47 2021 +0000"
      },
      "message": "Revert \"Revert \"Integrate ClassLoaderContext check in OatFileAssistant::GetBestOatFile.\"\"\n\nThis reverts commit 656fdcd7f2aa9920ecd464dbb59d284e17969baa.\n\nBug: 176960283\n\nReason for revert: Racy code fixed in https://android-review.googlesource.com/c/platform/art/+/1678727\n\nChange-Id: I7561aa8fad060bd076006dd4b1fbffc076834635\n"
    },
    {
      "commit": "656fdcd7f2aa9920ecd464dbb59d284e17969baa",
      "tree": "d4be59ae4c11c12a7bc7d6343f9add9bed0b6e33",
      "parents": [
        "efbc659ba4566f6fbad3d13bea170fb522955b8a"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sat Apr 17 16:47:01 2021 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sat Apr 17 19:19:50 2021 +0000"
      },
      "message": "Revert \"Integrate ClassLoaderContext check in OatFileAssistant::GetBestOatFile.\"\n\nThis reverts commit c8fe6517faf91b45683cddff3c15e08e489e12e9.\n\nReason for revert: Breaks 1002-notify-startup (flaky)\n\nTest: \"art/test.py -r --host -t 1002\" in a loop\nBug: 176960283\nChange-Id: I4f5467efa5a1e09452b28b86b183791e4105b19e\n"
    },
    {
      "commit": "c8fe6517faf91b45683cddff3c15e08e489e12e9",
      "tree": "10bf664496e680bbae0d22ff7da32dbbb923613f",
      "parents": [
        "0c39de679bc4b647cfeb1c5c94c86d879848aa55"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 01 14:22:40 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 15 12:30:01 2021 +0000"
      },
      "message": "Integrate ClassLoaderContext check in OatFileAssistant::GetBestOatFile.\n\nThis reduces some code duplication between\nOatFileManager::OpenDexFilesFromOat and GetDexoptNeeded.\n\nIt also gives the chance for OatFileAssistant and GetDexoptNeeded to\nfind the real best oat file.\n\nTest: test.py\nBug: 176960283\nChange-Id: Id366aef7a9e91833d8edaea965abda4cfdcd8455\n"
    },
    {
      "commit": "9bc364bdda8955f35e8cc4c42312ec411403a995",
      "tree": "8f0dd9a6874e883292571ff5a37e0be089190ca3",
      "parents": [
        "dbcf4a2a597309f33914fb60dc09e1056032794a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 29 10:41:39 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 31 12:50:36 2021 +0000"
      },
      "message": "Support background verification of secondary dex files.\n\nRe-use the infrastructure for background verification of in-memory dex\nfiles to also trigger for secondary dex files.\n\nTest: 692-vdex-secondary-loader\nBug: 160294863\nChange-Id: I754d519b6a903c51e439ccab100d2d8f22f45df3\n"
    },
    {
      "commit": "09108b274c15b55d8577ae3590005e990694c5b7",
      "tree": "89a299c40c80daff591ef2b48c96c390054ef044",
      "parents": [
        "c5cd58914325c7fcfd89b1a5bf4daa475c2d83ef"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 18 22:02:23 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 29 07:47:43 2021 +0000"
      },
      "message": "Also look for boot classpath files in DexFile_getDexFileOutputPaths.\n\nTest: adb shell dumpsys pinner\nBug: 144773394\nChange-Id: I03c86115cda6d40cc8666740772da4bb74972f8f\n"
    },
    {
      "commit": "c7ac91b21d1a15c14e29d69ff02b48c485962b0d",
      "tree": "f8bcc4df536c29773742cbb54b32b959ebd601c3",
      "parents": [
        "5c48df9895530fb26666c6d79d155ef3886d7a83"
      ],
      "author": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Thu Feb 04 21:44:01 2021 +0000"
      },
      "committer": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Tue Feb 09 16:31:17 2021 +0000"
      },
      "message": "[metrics] Report some ART metadata\n\nAdds reporting for some metadata associated with ART metrics,\nincluding timestamp relative to ART startup, the session id, and the\nprocess\u0027s user id. It additionally outputs placeholders for the\ncompilation reason and compiler filter, but these need some additional\nplumbing from the Runtime and OatFileManager to fill in, so those will\ncome in a followup CL.\n\nThis CL also includes a fair amount of refactoring around metrics\nreporting and handling the session data.\n\nExample output:\n\n    *** ART internal metrics ***\n      Metadata:\n        timestamp_since_start_ms: 768\n        session_id: 5026277321588503825\n        uid: 123456\n        compilation_reason: Unknown\n        compiler_filter: (unspecified)\n      Metrics:\n        ClassVerificationTotalTime: count \u003d 4167\n        JitMethodCompileTime: range \u003d 0...1000000, buckets: 7,0,0,0,0,0\n    *** Done dumping ART internal metrics ***\n\nTest: ./test/run-test --host --jit 2232-write-metrics-to-log\nChange-Id: Ic74b503b135d71099d9e26bf660b60e4cc3a46bc\n"
    },
    {
      "commit": "5ff2393e1fb6e61fc74f20c66f80f4b8656987d1",
      "tree": "e94b8cfc92379678b4f2e6446aa6d28a6408222f",
      "parents": [
        "99459f3bdd8d569ec7054920cbc32e6915d1e125"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Dec 11 18:26:14 2020 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Dec 14 19:00:35 2020 +0000"
      },
      "message": "Remove stripped-apk related logic from CLC\n\nStripped-apks are no longer supported by the runtime and\nthe current logic prevents bug fixes and code evolution.\n\nBug: 111442216\nTest: test-art-host\nChange-Id: I30d5825e4f6453981ca9165bebafe67557c28b93\n"
    },
    {
      "commit": "0a5cad39cd1dbbfd6f335c5ff6f307a903bc5bf7",
      "tree": "940aa8d886fed28e76d0af813d75fe4df49b8cdc",
      "parents": [
        "8aa6a82003ce7ece4511996341021e7084d40b3a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Feb 14 20:29:26 2020 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Sat Feb 15 01:18:01 2020 +0000"
      },
      "message": "Revert \"Revert \"Make class loader context fail for unknown class loaders\"\"\n\nThis reverts commit e9818ddd70565d52cc1cc93d6991d7e7ec2bc275.\n\nMake class loader context fail for unknown class loaders\n\nUpdate OatFileAssistant to fail the class loader check when getting an\nunknown (null) class loader. The code is only use in GetDexoptNeeded paths\nand does not affect the runtime behaviour.\n\nThis will enable dexoptanalyzer to provide the right answer for dex files\nwhose class loader changes often.\n\nTest: test-art-host\nBug: 147208643\n\nChange-Id: I2f8229fc25c018436c17439bdc9ac0899af25758\n"
    },
    {
      "commit": "e9818ddd70565d52cc1cc93d6991d7e7ec2bc275",
      "tree": "c2deb578605ebfa0511532b8d7ca908fa4c71092",
      "parents": [
        "1d852c36ad84e6f32132b215af079546300bfc28"
      ],
      "author": {
        "name": "Stefania Halac",
        "email": "shalac@google.com",
        "time": "Fri Feb 14 17:58:26 2020 +0000"
      },
      "committer": {
        "name": "Stefania Halac",
        "email": "shalac@google.com",
        "time": "Fri Feb 14 19:36:44 2020 +0000"
      },
      "message": "Revert \"Make class loader context fail for unknown class loaders\"\n\nThis reverts commit 2d3de3a40015af07f7645a298f77b398af0c6c2c.\n\nReason for revert: 8s regression in boot time b/149517940\n\nChange-Id: I81365d1bd63c691d715b8f970dac9da64ab419ff\n"
    },
    {
      "commit": "2d3de3a40015af07f7645a298f77b398af0c6c2c",
      "tree": "360b130e574af9a5e837ebd9d2585de29db34f65",
      "parents": [
        "c55032774cfec4b5222b362a81a3b8b69e133710"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Feb 11 16:49:47 2020 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Feb 12 19:22:17 2020 +0000"
      },
      "message": "Make class loader context fail for unknown class loaders\n\nUpdate OatFileAssistant to fail the class loader check when getting an\nunknown (null) class loader. The code is only use in GetDexoptNeeded paths\nand does not affect the runtime behaviour.\n\nThis will enable dexoptanalyzer to provide the right answer for dex files\nwhose class loader changes often.\n\nTest: test-art-host\nBug: 147208643\nChange-Id: I869109e669e68afe094e7703ed574575b98d7cc6\n"
    },
    {
      "commit": "b74f307cda4b1b186dcbdf6c84f1ee02a50ad3cb",
      "tree": "080b8c9b4317e2b5f4c942d0c7be6dbb18200dfa",
      "parents": [
        "1db789ea17f87415a38d72066ca0baf3f5252474"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 01 15:19:00 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 02 15:59:33 2019 +0000"
      },
      "message": "ART: IWYU for HiddenApi domain\n\nMake the domain a known char storage and forward-declare in DexFile\nto significantly reduce the list of transitive includes. Fix up\nmissing includes.\n\nTest: mmma art\nChange-Id: I9d43113e982fc0b509fd9a8168c6788e9431500a\n"
    },
    {
      "commit": "7126c5b47d34b9a4d6d7553b8ea48e5085ee6b41",
      "tree": "eeabacfcf1e75997c2c4755bb84ff63706eba46d",
      "parents": [
        "c088b2efe015d49f10597c515a7d749cb0856f84"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 05 00:02:51 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 03 11:34:09 2019 +0000"
      },
      "message": "Preverify InMemoryDexClassLoader-loaded classes from vdex\n\nThis patch creates a new subclass of OatFile - OatFileBackedByVdex -\nwhich initializes OatDexClass instances using the verification info in\na vdex file created by a previous instance of the class loader.\nThe OatFile is not backed by an actual .oat file.\n\nBug: 72131483\nTest: art/tools/run-libcore-tests.sh\nTest: art/test.py -b -r -t 692 -t 693\nChange-Id: I3fd055abe17ee9739c07f2e2f4fc2543e4ec8c9e\n"
    },
    {
      "commit": "35a3f6a09931ee631a0377ee3ca98a7fb1f4f61d",
      "tree": "c3bbc93f5d7c5c74b49a03fc9a2609f7a918840e",
      "parents": [
        "3bfc694a4bcc9ef3de19b94a34701c76c6008071"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Mar 04 15:59:06 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 02 19:20:14 2019 +0000"
      },
      "message": "Create vdex file for dex loaded with InMemoryDexClassLoader\n\nPrevious CL introduced a background verification thread for dex bytecode\nloaded with InMemoryDexClassLoader. Extend the logic to collect the\nresults of class verification into an instance of VerifierDeps and dump\nit into a vdex file in the app\u0027s data folder.\n\nThe background thread does not collect full VerifierDeps (e.g.\nassignability dependencies, etc), just a bit vector of whether a class\nwas successfully verified or not.\n\nThe vdex format is extended to include boot classpath checksums and the\nclass loader context it was created for. These are optional and\ncurrently left empty for regular vdex files.\n\nThe generated vdex files are treated as a cache with a limited capacity,\ncurrently capped at 8 files. The least recently used file (in terms of\natime reported by stat()) is unlinked if the cache is full and a new\nvdex is about to be generated.\n\nBug: 72131483\nTest: art/tools/run-libcore-tests.sh\nTest: art/test.py -b -r -t 692 -t 693\nChange-Id: I26080d894d34d8f35f00c7925db569f22f008d2c\n"
    },
    {
      "commit": "331a5e101313838189933399b2017305493f9f58",
      "tree": "5a8f391ff9e36db8965f01603e15834c800b5fc5",
      "parents": [
        "4080b8febed8b82957274882a96b2a7d8625c32e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 01 22:46:16 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 02 16:31:01 2019 +0000"
      },
      "message": "Revert^2 Verify InMemoryDexClassLoader classes in a background thread\n\nWhen dex bytecode is loaded using InMemoryDexClassLoader, automatically\nspawn a background thread which performs bytecode verification on every\nclass.\n\nThis reverts commit b4bb63aa4be80722643611fc931976b3544f14b5. This CL\nfixes a previous issue where runtime threads are not allowed to load\nclasses in debuggable mode.\n\nBug: 72131483\nChange-Id: Icdeb5be2b33ef55675e3a23886e71ce3b4b02f43\nTest: art/tools/run-libcore-tests.sh\nTest: art/test.py -b -r -t 692\n"
    },
    {
      "commit": "b4bb63aa4be80722643611fc931976b3544f14b5",
      "tree": "7982bd7e79474b24f8f258efec3ac64328b34d7e",
      "parents": [
        "71d614f12ad6da2f15e835e22fe577b2d1d86bb0"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 01 19:38:10 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 01 19:38:48 2019 +0000"
      },
      "message": "Revert \"Verify InMemoryDexClassLoader classes in a background thread\"\n\nThis reverts commit d592dbe1e2b09079382713220b2ff59f02db1859.\n\nReason for revert: art buildbots crashing\n\nChange-Id: Ida6bb79cb498e708df5c535edc16e4fe9875442c\n"
    },
    {
      "commit": "d592dbe1e2b09079382713220b2ff59f02db1859",
      "tree": "0782c75d713200b1e99dee9f97b4898612b3fee3",
      "parents": [
        "0a20607d671bf001043ccb0cf156db16b4fc6bed"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Mar 01 22:25:31 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 01 15:54:39 2019 +0000"
      },
      "message": "Verify InMemoryDexClassLoader classes in a background thread\n\nWhen dex bytecode is loaded using InMemoryDexClassLoader, automatically\nspawn a background thread which performs bytecode verification on every\nclass.\n\nBug: 72131483\nTest: art/tools/run-libcore-tests.sh\nTest: art/test.py -b -r -t 692\nChange-Id: Iad54f510de02cd073e68d775d34b7dd5bdef304e\n"
    },
    {
      "commit": "7458291cbaf549c4a9739b444e314f40f58a5520",
      "tree": "9f01f691b50a230690b4c9869787fa44a460bc6b",
      "parents": [
        "c2109c6803a5b7c23b0d59f67d13d58f97111e5b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Mar 01 11:18:19 2019 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 21 14:34:50 2019 +0000"
      },
      "message": "Open in-memory dex files into a single DexFile object\n\nRefactor the logic of opening dex from ByteBuffers so that all buffers\nare opened at once into the same DexFile/Element object. This effectively\nenables multidex in InMemoryDexClassLoader and will make it possible to\ngenerate a single vdex file for the whole class loader instead of one\nvdex per dex ByteBuffer.\n\nBug: 72131483\nTest: art/tools/run-libcore-tests.sh\nChange-Id: I5fb939072812745a2df0f323c502a1cf92069ed5\n"
    },
    {
      "commit": "1a041486850aa462de5ed16c54f028ad97a8eb6e",
      "tree": "38d8fdf2848203fae31372447328f3f7b143f064",
      "parents": [
        "26e2eb689f595e2f1d3cd436198bc1233c4179db"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Dec 18 17:55:08 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 24 13:27:07 2019 +0000"
      },
      "message": "Fix bug in InMemoryDexClassLoader loading\n\nInMemoryDexClassLoader can load dex files from both direct and indirect\nByteBuffers but it only respects the buffer\u0027s current position for the\nlatter and assumes the position is zero for the former.\n\nBug: 123337866\nTest: art/tools/run-libcore-tests.sh\n\nChange-Id: Id294814c68f7e9e859d67c12fe1f62e52e84c45e\n"
    },
    {
      "commit": "e7681823f8259c8c04ce0c361746216606784e69",
      "tree": "8bd248fc6be126d7d4e55bb4072ed24b2851ebbd",
      "parents": [
        "90faceb71e25748172ba6369209f8a2a66735394"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Dec 14 16:25:33 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jan 21 10:22:27 2019 +0000"
      },
      "message": "hiddenapi: Print warnings for @CorePlatformApi violations\n\nWhen accessing a method/field at runtime, determine the context of both\nthe caller and the callee, and add new logic for the case\n\"platform -\u003e core-platform\" which used to be always allowed.\n\nIf the callee is marked with kAccCorePlatformApi, access is allowed.\nIf not, a warning is printed into logcat.\n\nBug: 119068555\nTest: 674-hiddenapi\nChange-Id: I64839596bf6eb06d7a169fd59b18fd82c140ce6e\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": "afc60cd6ddcd15353698bb453716313dea241ef8",
      "tree": "708bbf11e425ddb7a75874f27d272fd5484d0bf1",
      "parents": [
        "58431a7cf863b2eb7fe25eff6a28ec376f2f151d"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Dec 05 11:59:31 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Dec 11 11:32:37 2018 +0000"
      },
      "message": "Cleanup native debug interface api.\n\nStrongly type the DEX file arguments.\n\nRemove the need for callers to worry about locks.\n\nUse std::map instead of std::unordered_map internally.\n\nTest: ./art/test.py -b -r -t 137\nChange-Id: I8bd79b796b5c7da265afc43a07ed227f550116c7\n"
    },
    {
      "commit": "1130659b0d948806e7ca974ead8ad2bcc1951d13",
      "tree": "9046a016fafc7f9bff4e34732aa8f89ed81ad46c",
      "parents": [
        "1c1442a498fd3f9ddc5d2bb04baa7ccd2d3539c4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 26 14:22:59 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 30 10:20:32 2018 +0000"
      },
      "message": "Refactor MemMap::MapAnonymous().\n\nRemove the address argument from the shortcut overload and\nintroduce one more shortcut overload. This makes it easier\nto find all uses where we pass non-null address hint.\n\nRemove `requested_begin` parameter from some constructors\nwhere we were always passing null. Rewrite some tests to\nuse the reservation API.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 118408378\nChange-Id: Ibbbb96667e7cc11cf7fea119892463d8dbc9a8b5\n"
    },
    {
      "commit": "88dbad33ae92167a89a5d5469f39f41624535dbf",
      "tree": "b3b0c864c12c246117143954f16df054309852c6",
      "parents": [
        "c58dca3941459b4375a53925f3471373584eab5e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 26 19:54:12 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 25 09:52:28 2018 -0700"
      },
      "message": "ART: Do some include-what-you-use\n\nHelp with transitive includes. In preparation for new\nspecialized headers reducing transitivity.\n\nBug: 118385392\nTest: mmma art\nChange-Id: Ib465ecceec3331ea81588fb4a43eb65e766b6904\n"
    },
    {
      "commit": "98ea9d9d82ab078ca10fa7f8e02eddda94cf1d98",
      "tree": "a848b7e41ff227a2d3d4d6795ec11089f39cb6ca",
      "parents": [
        "02338775e33b553be51d44ff60bb1ef8e527bd94"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 19 14:06:15 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 23 15:19:55 2018 -0700"
      },
      "message": "ART: Refactor for bugprone-argument-comment\n\nHandles runtime.\n\nBug: 116054210\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: Ibc0d5086809d647f0ce4df5452eb84442d27ecf0\n"
    },
    {
      "commit": "afaf7f8198fe5ffc054278da6800f81dd83f272c",
      "tree": "3ebdec9fca813351d178709743121fa66815a7a0",
      "parents": [
        "6ca8ec7809f87ccac8d9d66d267f2379bdfdfe66"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 16 11:32:38 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 18 08:20:09 2018 -0700"
      },
      "message": "ART: Enable bugprone-unused-return-value\n\nEnable bugprone-unused-return-value as an error. This is on top of\nthe compiler warning for attribute((warn_unused)).\n\nMark the current occurrences (all unique_ptr.release()) with NOLINT\nto signal that we know what we\u0027re doing.\n\nBug: 32619234\nBug: 117926937\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: I36659722335eef36acfa5845289104257a393874\n"
    },
    {
      "commit": "78baed5ec51a6e2d113e8b29aafa5c6203b46845",
      "tree": "57ca544020f309e3529e33300ad4867ca4579c1e",
      "parents": [
        "a48eb7e0690187618d2824a7d9b5601e7f5cdf80"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 11 10:44:58 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 12 17:53:50 2018 +0100"
      },
      "message": "ART: Use reinterpret_cast{32,64}\u003c\u003e when appropriate.\n\nAnd fix UnstartedRuntime checking for null arguments in all\nfunctions where we now use reinterpret_cast32\u003c\u003e.\n\nThis is a follow-up to\n    https://android-review.googlesource.com/783607 .\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: Pixel 2 XL boots.\nTest: m test-art-target-gtest\nTest: testrunner.py --target --optimizing\nBug: 117427174\nChange-Id: I58f8ad59f70e3fbb1d06aef419cd26555706fa65\n"
    },
    {
      "commit": "912f36c954a91bdc7d9801a111ba089ec2a23681",
      "tree": "87e576e86867140c478d6959ce20a261daaad60a",
      "parents": [
        "26f048f48cdb1e884aab2b6fddf26d58346d29ad"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sat Sep 08 12:22:58 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Sep 27 15:16:09 2018 +0100"
      },
      "message": "Add small thread-local cache for use by the interpreter.\n\nSmall (one page) cache which can be used on the hottest paths\nin the interpreter and which does not require synchronisation.\nThis CL adds the code but it does not use it for anything yet.\n\nTest: test-art-host-gtest\nChange-Id: I41d4e7a86a0f62f7a4efc165b8934232b4e766c7\n"
    },
    {
      "commit": "f6985bd84b27b25e2c2ae1b865a4f28a0ccd578b",
      "tree": "5ec94a773e2c7e19842b1f2de02baf4343aff6c9",
      "parents": [
        "19759b28bc9dad1581c207d76227eb74fc8eebcb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 24 09:02:28 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 24 09:40:56 2018 +0100"
      },
      "message": "Add an overload for MemMap::MapAnonymous().\n\nAdd an overload that does not take `reuse` or `use_ashmem`\nparameters but uses default values (`reuse \u003d false` and\n`use_ashmem \u003d true`) to simplify callers.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: Iaa44f770dee7e043c3a1d6867dfb0416dec83b25\n"
    },
    {
      "commit": "c34bebf39410f5571d3d5813157b61f274d435c3",
      "tree": "73909d3b34a2908e9de44cc60c4a2ff74eabefd7",
      "parents": [
        "f345404c725330914b8313d2c1af17226c5b92ca"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 16 16:12:49 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 21 13:51:00 2018 +0100"
      },
      "message": "Remove unnecessary indirection from MemMap.\n\nAvoid plain MemMap pointers being passed around by changing\nthe MemMap to moveable and return MemMap objects by value.\nPreviously we could have a valid zero-size MemMap but this\nis now forbidden.\n\nMemMap::RemapAtEnd() is changed to avoid the explicit call\nto munmap(); mmap() with MAP_FIXED automatically removes\nold mappings for overlapping regions.\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\nChange-Id: I12bd453c26a396edc20eb141bfd4dad20923f170\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": "5e046f87f22768735ef926ef06898027fe22528d",
      "tree": "56433620398929c5bda3ffa93dd346a6399b4345",
      "parents": [
        "922ba7ea0d3ffd3a5403e4d6193cec5151b2474d",
        "35a4f486cb0a2a600a4ea346b4615ad0ea189dc2"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu May 10 15:46:56 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 10 15:46:56 2018 +0000"
      },
      "message": "Merge \"Add support for loading trusted dex files.\""
    },
    {
      "commit": "35a4f486cb0a2a600a4ea346b4615ad0ea189dc2",
      "tree": "70ede18189598146e1419f8fc52b85fd09e8ed4c",
      "parents": [
        "abd9e1515bc6be88372c61071971c5432a51553d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 09 14:49:54 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 10 12:29:10 2018 +0100"
      },
      "message": "Add support for loading trusted dex files.\n\nWhich can use hidden APIs.\n\nbug: 64382372\nTest: m\nChange-Id: Ifd40b49270c11ad51281b2127532952fb5206a9d\n"
    },
    {
      "commit": "a3ad0cdd711857f04f477e2cdc5b56a2c74a3018",
      "tree": "7e0e4c7888c2497d86ce96c9574d7c9886721ccf",
      "parents": [
        "abd9e1515bc6be88372c61071971c5432a51553d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 10:06:38 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 09 11:11:09 2018 +0100"
      },
      "message": "ART: Move JNI files to runtime/jni/ .\n\nTest: Rely on TreeHugger.\nChange-Id: I9cae11191ef1567ae9453be498882a7767285140\n"
    },
    {
      "commit": "79e2607ab50163bfdc283f4a49decec26a216df5",
      "tree": "0cdb2c65412b64a55ddf1a486ab3d961a0301a3e",
      "parents": [
        "b4b91460b2d01d36ddcb7d55111ccd8faf390c2a"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Apr 06 17:58:50 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Apr 13 08:29:30 2018 -0700"
      },
      "message": "Move profile dependent modules to libartbase\n\nMove mem_map and zip_archive to libartbase.  This should be the last two\nremaining modules that profile_compilation_info is dependent upon.\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make and boot a device\n\nChange-Id: I136ee23e426aa8ec7441e3d3f1978f1bebf4b562\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": "63e9e8700d0fe14a31d93e95efea603bab78a68e",
      "tree": "6a89ae90a962070ed559c9759232d429a5369507",
      "parents": [
        "c7ac275a5f06b0e1140bf600ec1e654f629c54ab",
        "440a9b3b3e6aa60c14e73a97dd85c9ada0898569"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Feb 23 17:53:23 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 23 17:53:23 2018 +0000"
      },
      "message": "Merge \"Add timestamps to JIT/DEX native debug info.\""
    },
    {
      "commit": "b2ec9f5c128673c43f776cbe12c8eeb0a6884ebb",
      "tree": "724022162a4f3de021cebab32ee5ac67ec860f32",
      "parents": [
        "f13343eb8b2738e2812fd7bd9d5592f529e93c21"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 21 13:20:31 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 21 13:51:15 2018 -0800"
      },
      "message": "Remove duplication, split tests\n\nThe code move to libdexfile/dex/descriptors_names.cc apparently did not\nremove the original code from runtime/utils.cc.  Fix that duplication\nand all the header mentions needed.  Also, split the test files to go\nalong with the new locations for the code to be tested.\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host-gtest\n      flash \u0026 boot marlin\n\nChange-Id: Ie734672c4bca2c647d8016291f910b5608674545\n"
    },
    {
      "commit": "440a9b3b3e6aa60c14e73a97dd85c9ada0898569",
      "tree": "26dcc48d91e3eec18ab1e4dd987962a0939f6531",
      "parents": [
        "d1652d14fbf477b3091eec3764b9890f2c072055"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Feb 15 17:47:29 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Feb 21 12:57:12 2018 +0000"
      },
      "message": "Add timestamps to JIT/DEX native debug info.\n\nThis a forward-looking change intended to allow simpleperf to\nreliably correlate samples and native debug information.\n\nI have added the timestamps to both JIT and DEX, and refactored\nthe code in the process to avoid code duplication.\n\nTest: testrunner.py -t 137\nChange-Id: I45fa4310305aff540e036db9af15a86c5b8b7aff\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": "fb3de3d72832177e4a8d1f322ed11cbe58e45c9f",
      "tree": "de8cded0436b54b2e5b1142b07fa75f0ed9791b0",
      "parents": [
        "2827ff64c7a385cfb9d6e01e6385708461eb65fc"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jan 29 16:11:49 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Feb 02 14:14:08 2018 +0000"
      },
      "message": "Create list of open dex files for libbacktrace.\n\nThis fixes unwinds after recent changes (oob apks; cdex data sharing).\n\nBug: 72520014\nTest: m test-art-host-gtest\nChange-Id: Ie2a02657b2afbe899acd2e61f0a57d207e688b99\n"
    },
    {
      "commit": "013fd8073f3ece22b0bba1853d3f3430c8a9e4bd",
      "tree": "d1fb1ce709d4927a8b5f5d7fc673b6932ca4977a",
      "parents": [
        "a7e4a15ba7b40fbe1ecd76ce0d99de90aa42201f"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 11 22:55:24 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Jan 12 12:47:13 2018 -0800"
      },
      "message": "Create an ART-independent DexFileLoader\n\nOpening DEX files should not rely on instantiating a runtime or having a\nlarge number of dependencies on runtime components.  This CL makes\nDexFileLoader a stub class that is independent of ART, and introduces a\nsubclass ArtDexFileLoader that contains the current implementations.\n\nBug: 22322814\nTest: make -j 50 test-art-host\nChange-Id: Ia6e92ae93c347057ea0c10455525239cbbe42c03\n"
    },
    {
      "commit": "9e734c7ab4599d7747a05db0dc73c7b668cb6683",
      "tree": "dce1d1993734a947fb2e6f626eb1b425cb72143b",
      "parents": [
        "b496af808eaf3af5ebac50aef4fbec33323b5016"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 04 17:56:19 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Jan 05 11:07:19 2018 -0800"
      },
      "message": "Create dex subdirectory\n\nMove all the DexFile related source to a common subdirectory dex/ of\nruntime.\n\nBug: 71361973\nTest: make -j 50 test-art-host\nChange-Id: I59e984ed660b93e0776556308be3d653722f5223\n"
    },
    {
      "commit": "24ed94f83404bff97663142326762506458fd8cc",
      "tree": "b60c8160f256b67348fbc5bc3fa1b818574ce2c5",
      "parents": [
        "b71fe8329fa2bf5a0a4f81fd44a097f43d7dfd8a"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Nov 16 11:54:29 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Nov 28 12:52:53 2017 +0000"
      },
      "message": "Add DexFile.getStaticSizeOfFile function.\n\nBug: b/69729799\nTest: art/test/testrunner/testrunner.py -b -t 071-dexfile-get-static-size\n\nChange-Id: I7d524bd0f8c8bab74b1831b1db35f5952e8ce2aa\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": "ca4e1014634aefb9c2dbb431d6b312e4ad912ca2",
      "tree": "14536ce9ee60c1c55c55d20d99845128dbfbc548",
      "parents": [
        "7e26cc3b2c1c23d4e03961dfec70bf24d0b6e06c",
        "891a50e9dc0f02ee34bd7348f80b621249153af5"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Nov 01 20:30:03 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 01 20:30:03 2017 +0000"
      },
      "message": "Merge \"Separate file utilities from utils.cc\""
    },
    {
      "commit": "891a50e9dc0f02ee34bd7348f80b621249153af5",
      "tree": "6af57b3aa8961ed8e6cd39fdf5a0ac335905b4c6",
      "parents": [
        "13e6f2935d67742e9eec14b412d33bf71b20697b"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Oct 27 17:01:07 2017 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Nov 01 11:39:19 2017 -0700"
      },
      "message": "Separate file utilities from utils.cc\n\nReduce the dependencies from utils.cc to arch/ subdirectories, etc.\n\nBug: 22322814\nTest: make test-art-host\nChange-Id: I4decd15ff4ec460735bfb58cebb1c6a1bf32b68f\n"
    },
    {
      "commit": "20c46443ee06060838643abd7a2dcad339f71358",
      "tree": "5b77f909c9bd2f9b4adbc4a3a47f39696f3583f0",
      "parents": [
        "4536a234e56aa7038198ab8c124fe117ef882192"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Sep 12 00:54:26 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 01 08:47:23 2017 -0700"
      },
      "message": "[art] Add classpath check to DexFile.getDexOptNeeded\n\nExtend DexFile.getDexOptNeeded to factor into the decision the\nexpected class loader context. If the context does not match oat\nfile assistant and dexoptanalyzer will advise kDex2OatFromScratch.\n\n(cherry picked from commit baafa55aede7cc43a27d76bd88ccc02152123ecf)\n\nBug: 62269291\nTest: m test-art-host\nMerged-In: I3a8e9321fe602712fac3595b790168b271918f10\nChange-Id: I3a8e9321fe602712fac3595b790168b271918f10\n"
    },
    {
      "commit": "373a9b5c718a45ac484afcf4fe6ce84f4bb562b3",
      "tree": "52a3e78fa8bc94a76674caaae837c728332d05dc",
      "parents": [
        "d0332e01ac26c2fd0a900de000a55ed5768ff936"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Oct 18 09:01:57 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Oct 25 10:13:59 2017 -0700"
      },
      "message": "ART: Depend on libnativehelper headers only\n\nDepend on header-only versions where possible. Move projects\nexcluding libart to libnativehelper_header_only.\n\nBug: 65522645\nTest: mmma art\nChange-Id: I53dd3b2a97e94ee685f72de007ed3858f7f5c6b6\n"
    },
    {
      "commit": "79c87da9d4698ec58ece65af0065eebd55a1cfe0",
      "tree": "399797f37712da9d20829d5b5059b6c84943cb02",
      "parents": [
        "656e97f949df4081fba908113406b32915174502"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 10 11:54:29 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 11 14:47:06 2017 -0700"
      },
      "message": "Add DexFileLoader class\n\nAdded DexFileLoader class, moved functionality from DexFile there:\n- Multidex loading logic\n- DexFile opening logic for Zip and etc\n- Some other helpers\n\nBug: 63756964\nTest: test-art-host\n\nChange-Id: Ic3dfa458947d4b69912dea5cdd836e7e8f55061c\n"
    },
    {
      "commit": "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": "2ae4bc9f5b620bc768e4ae2ecab641a06a488a70",
      "tree": "071b002a76308f0a2830aa73c251970735ecb513",
      "parents": [
        "8bf4fece8a4cecc869f8684d52e91ade630f84df",
        "e4e812a917345a3cb9ac955c8a84f64dfc26b5d9"
      ],
      "author": {
        "name": "Shubham Ajmera",
        "email": "shubhamajmera@google.com",
        "time": "Mon Jul 24 19:11:28 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 24 19:11:28 2017 +0000"
      },
      "message": "Merge \"Allow DexFile#getDexOptNeeded to check case when downgrading is required\""
    },
    {
      "commit": "e431e2758d62cf56f7f347f5a8c9d79e41b6dcd7",
      "tree": "b8733533e2478069aabbdc3a34d0f40aff33e1b1",
      "parents": [
        "b98d384eb424ad7e1dc9816392ded33dce0e0372"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 18 16:53:49 2017 -0700"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 18 18:25:55 2017 -0700"
      },
      "message": "art: use proper nativehelper headers\n\nlibnativeheader exports headers under nativeheader. These were\navailable before incorrectly as global headers in order to give\naccess to jni.h.\n\nTest: modules using art find headers\nBug: 63762847\nChange-Id: I5c820d677e94e07b2859e78610bc997fe51b41dc\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": "87583b3de6e811e141f8c97c1f796eb516e8a751",
      "tree": "5b4688f306a2fda2f29bf319a8e1ff21309f93a3",
      "parents": [
        "854461a4cd5e4a38debe3616e12b52fe7f160782"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu May 25 11:22:18 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 08:24:12 2017 -0700"
      },
      "message": "ART: Move RegisterNatives helper\n\nMove the helper closer to the users.\n\nTest: m test-art-host\nChange-Id: Id05ce5f60af54d0c5aef0c7d8932706c4602fc94\n"
    },
    {
      "commit": "a14100ccf51cc63a5c472188d1e2d337627e49eb",
      "tree": "d659a038e35fdd790b642f51e3eddbc9b51d003a",
      "parents": [
        "1171deea4cb2f2db67a310ea8797d06206b2bdea"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 24 15:09:56 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 30 16:10:27 2017 -0700"
      },
      "message": "ART: More header cleanup - jni_internal.h\n\nMove jni_macros.h to the clients (users of RegisterNativeMethods).\n\nTest: mmma art\nChange-Id: I052ac9f703ec69f0a2df1efcaf9f4a450eb7be1c\n"
    },
    {
      "commit": "367b9d8694b28896f681f00195cf4980536fe3f3",
      "tree": "fd9bc8499b8a86660da2cd00a8a09a0d9118e97b",
      "parents": [
        "0af0ec2b59e624861dc3461ba9ce192fd350fd12"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon May 15 18:18:39 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed May 17 22:00:18 2017 +0000"
      },
      "message": "Also return vdex file from DexFile.getDexFileOutputPath\n\nTest: m test-art-host\n      device boots\nBug: 33168521\n\nChange-Id: I812d5ba2d8fdab484ea40964da1e642e0bc21da4\n"
    },
    {
      "commit": "741d426f2eda2ea1f1a8d7dfce1cd741a6737cc6",
      "tree": "015f47ef7e78939ee6c0b8fcd9f10732de82efd9",
      "parents": [
        "15cb9753075bcaa5b91a6497a2d35e8bd98af1f0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 03 13:08:36 2017 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 04 10:52:55 2017 +0100"
      },
      "message": "Handle safe mode in PackageManager.\n\nART side of the change.\n\nbug:37929796\nTest: manual OTA with a safemode app.\nChange-Id: I28f11e852be4c9c9009f5335eb8dbdf0f26f89b4\n"
    },
    {
      "commit": "1f7079b72965cba0b1a40f53be97a4944ecb4a51",
      "tree": "bfa230da1e0ccea2f5cb343a40fb0cf6eb691ff0",
      "parents": [
        "77ced6adfd4de14a868364c4f03986be79d3a081"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Apr 18 21:25:37 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Apr 18 21:35:27 2017 -0700"
      },
      "message": "Ignore the optimized location passed to DexFile.loadDex()\n\nThis ensures that apps don\u0027t trigger dex2oat to locations\nthat are not recognized (anymore) by the runtime.\n\nThe background compilation job will takes care of optimizing\nthe dex files loaded via DexClassLoader.\n\nTest: m test-art-host\nBug: 36824842\nChange-Id: I6883740407203b4aa9511e7d15a8201db3df1168\n"
    },
    {
      "commit": "ea9465eaaa55646b0de242d2a21f9c1f0f0aa01f",
      "tree": "12590422d05d459a63a56937e77520e84cf4c288",
      "parents": [
        "4c9c57054578022d9ab8442264fbc661769f97f5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Feb 16 15:38:35 2017 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Feb 17 08:33:06 2017 -0800"
      },
      "message": "Move InMemoryDexClassLoader to be a subtype of BaseDexClassLoader\n\nAlso write a test that class transformation works with this type of\nclass loader.\n\nTest: mma -j40 test-art-host\n\nChange-Id: Ibc2214191e04876ff7bbea010be6ec03b6f41904\n"
    },
    {
      "commit": "cd556b003adbb53739d4b3f43135e6a0ae69509a",
      "tree": "a30c9f03071d87e1f75a0d0b8c2961d113ea767d",
      "parents": [
        "357dcb73934356239292c46d6fbedba734da5e00"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 03 11:47:34 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 09 10:10:29 2017 +0000"
      },
      "message": "Fix dex cache resolved types and class table mismatch.\n\nRecord class table in ClassLinker::DexCacheData and use\nit in DexCache.setResolvedType() to store the type also\nin the initiating loader\u0027s class table if the dex file\nhas been registered.\n\nAlso throw InternalError when trying to register the\nsame DexFile with multiple class loaders. (Different\nDexFile instances referencing the same file are OK.)\n\nTest: 155-java-set-resolved-type\nTest: m test-art-host\nBug: 30627598\nBug: 34193123\nBug: 34839984\nChange-Id: Ia48acb300337c45880ea1459d2d32789546d67f4\n"
    },
    {
      "commit": "46ee31b67d7ee1bd085fbc240502053caa3cf8fa",
      "tree": "83e870f293cd60d533207e389d7b094acd87b31f",
      "parents": [
        "9538f9e2a5d03f1b1bc07ebfbd93b61dcf8ad604"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 14 10:11:49 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 15 09:50:39 2016 -0800"
      },
      "message": "ART: Move to libbase StringPrintf\n\nRemove ART\u0027s StringPrintf implementation. Fix up clients. Add\nmissing includes where necessary.\n\nTest: m test-art-host\nChange-Id: I564038d5868595ac3bb88d641af1000cea940e5a\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": "bc5a795c0d486c84913d987cad5846ded840cea6",
      "tree": "90db29a97a21fa15f4cbc5ffbc1f6dd191add49c",
      "parents": [
        "38a4223fcc0493553d9ad324a1dc145869eb663a"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 17 15:46:31 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 17 16:16:50 2016 -0700"
      },
      "message": "Move art/native to ObjPtr\n\nBug: 31113334\n\nTest: test-art-host\n\nChange-Id: I67eb89cf042c762c6dcd5eb8b008b9a28e9b3319\n"
    },
    {
      "commit": "1cc62e4ea24828fdb3f3da0b8603f0b107d09a04",
      "tree": "718e322f3d05ac095770d4dc2a68b824bf3974a7",
      "parents": [
        "82d4838d6bb3480cd25327cedc5179fb2d86881c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 03 18:01:28 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 04 10:46:16 2016 -0700"
      },
      "message": "Rename ObjPtr::Decode to ObjPtr::Ptr\n\nDone to prevent ambiguity with ScopedObjectAccess::Decode.\n\nBug: 31113334\n\nTest: test-art-host\nChange-Id: I07a2497cc9cf66386311798933547471987fc316\n"
    },
    {
      "commit": "0795f23920ee9aabf28e45c63cd592dcccf00216",
      "tree": "ff3f880c5e84f3316532b47d0e9a7729ade848ac",
      "parents": [
        "d1224dce59eb0019507e41da5e10f12dda66bee4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 27 18:43:30 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 29 17:31:09 2016 -0700"
      },
      "message": "Clean up ScopedThreadStateChange to use ObjPtr\n\nAlso fixed inclusion of -inl.h files in .h files by adding\nscoped_object_access-inl.h and scoped_fast_natvie_object_access-inl.h\n\nChanged AddLocalReference / Decode to use ObjPtr.\n\nChanged libartbenchmark to be debug to avoid linkage errors.\n\nBug: 31113334\n\nTest: test-art-host\n\nChange-Id: I4d2e160483a29d21e1e0e440585ed328b9811483\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": "09b710c6e3e496edb2ff0312eb59d10ba53f3922",
      "tree": "59e872a516d8012b704468afd915889d4efa1cbf",
      "parents": [
        "b55ad7c146fbb7ca5995ff54dc655241fc54a3b3"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 14 16:50:52 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 14 16:53:55 2016 -0700"
      },
      "message": "ART: Fix build break\n\nBuild break introduced by mismatch from merges.\n\nBug: 28251566\n\n(cherry picked from commit a472e4fd6260740af230bab7be5740d8c7bac360)\n\nTest: m test-art-host\nChange-Id: I83a333dd7394af630c5a79153d4838eb3a910714\n"
    },
    {
      "commit": "b55ad7c146fbb7ca5995ff54dc655241fc54a3b3",
      "tree": "e7cd025ff1203211f54f8a9baf79b1f92bad6b58",
      "parents": [
        "f18f3cb337161b2cb651cd38642d6f9c06266728"
      ],
      "author": {
        "name": "Philip Cuadra",
        "email": "philipcuadra@google.com",
        "time": "Tue Jul 12 16:37:40 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 14 16:53:10 2016 -0700"
      },
      "message": "Add API for getting location of odex or oat file\n\nAdd an API for getting the file path of odex or oat file given a dex\npath.\n\nBug 28251566\n\n(cherry picked from commit b4827ace453b9280060a826e8f22cc8c9b6edb7d)\n\nChange-Id: Ibebaa20f15d8135b25d9eb5927b7979801ebf0b2\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": "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": "f284d448e3edd428b6ade473d0993028638b2064",
      "tree": "e24f57f952f4e6c850ec910de3361aef6340727a",
      "parents": [
        "3f432d5a7c184b7580bd5aba27158c1455c328ff"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 02 11:48:30 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 02 18:03:41 2016 -0700"
      },
      "message": "Hold dex caches live in class table\n\nPrevents temporary dex caches being unloaded for the same dex file.\nUsually this is OK, but if someone resolved a string in that dex\ncache, it could leave stale pointers in BSS. Also it can use extra\nmemory in linear alloc if we allocate dex cache arrays multiple\ntimes.\n\nBug: 29083330\nChange-Id: Ia44668f013ceef1f5eb80f653a48d0f8004548c9\n"
    },
    {
      "commit": "06e3f4fa00ea9f71c4675f90e250e59b6d9ba36f",
      "tree": "f7b88bb422a27a38971de6944e77f6ce8a8ce180",
      "parents": [
        "01be68100e96a44b4ff8cb4cb3c9baa346ff048d"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue May 24 15:42:37 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue May 24 17:33:11 2016 -0700"
      },
      "message": "Base isDexOptNeeded result on OatFileAssistant::IsUpToDate.\n\nSo that it is consistent with when ART will try to run dex2oat.\n\nBug: 28826195\n\n(cherry picked from commit 10267549f5ea8acc07ea6163a87c9b4b8ea62be4)\n\nChange-Id: I5c891dc1a5a42ff7e0a4d3e66e9ecca37da743f2\n"
    },
    {
      "commit": "90671be8ca352f96eaf4f3109334f2f516268201",
      "tree": "a843ca882e30f7e104a6061d62dcb4a2d244f881",
      "parents": [
        "36a94ab70d4ae1ce239022a5841abf3ffe1196e3"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Apr 22 14:00:06 2016 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue May 10 09:48:42 2016 -0700"
      },
      "message": "Add ability to see if a dex file is backed by an oat file.\n\nNative support for new DexFile.isBackedByOatFile.\n\nPart of a multi-project change.\n\nBug: 26880306\n\n(cherry-picked from commit 93a66cc779898d46c620e5d9c8bc71e2a71f6610)\n\nChange-Id: I8843d13d961b24a7caec549abe630524d734e78e\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": "86a785d23ba3956b78c33aa3b623df4b6ec8b901",
      "tree": "cf683359bd105366a4f05bb0761396ffea0ad5b2",
      "parents": [
        "87ad82eb1e085ccc6ed3ec54945937582334dbbc"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Mar 30 17:19:48 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Mar 31 11:24:34 2016 -0700"
      },
      "message": "ART: Add support for DexFile compiler filter function\n\nAdd support for getting a non-profile-guided version of a given\ncompiler filter.\n\nBug: 27921071\n\n(cherry picked from commit fd97429f258acde6ee24a6f74c9050b2343e40cd)\n\nChange-Id: I54735b61732e6a5c9dc62425d04bc740dd365083\n"
    },
    {
      "commit": "c38be810ce939267c004f72b3cf0b9339414f0f9",
      "tree": "7aef65e547be4dad5e8282d5fda2c36520ae8396",
      "parents": [
        "ef94b5484a75902404e975cba55a7e825941b2fa"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Mar 23 15:03:46 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 29 11:04:51 2016 -0700"
      },
      "message": "ART: Update DexFile for compiler-filter pass-down\n\nUpdate getDexOptNeeded. Add implementations for isValidCompilerFilter\nand isProfileGuidedCompilerFilter.\n\nBug: 27689078\n\n(cherry picked from commit 1d23d43e29e41adb3d504332c8833acaacb49e50)\n\nChange-Id: I06b9d75f58c59cb07ef5170f784ea6745168efaa\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": "689a700d1c8a7c9e7ce74e6a2b45dae94c79cb7c",
      "tree": "b4ad3f6f77554a146656c5b575ffd5bd60613441",
      "parents": [
        "039404cb8d6b994e6fc247d287a0efa45c7362d4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Nov 20 10:29:42 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Nov 20 10:35:18 2015 -0800"
      },
      "message": "Pass DexPathList.Element array to openDexFileNative\n\nApp images will use this to check for conflicts. It is required to\npass down since the class loader won\u0027t have the element array until\nafter all of the elements in the dex path list are loaded.\n\nBug: 22858531\nChange-Id: I4f3d85b5e0ad542298fc8458bafe6504c263dc41\n"
    },
    {
      "commit": "04302dbb106d590ff72c0dfecda23d85b6565059",
      "tree": "2fe66e258de36bcebc913d48e04468b7c639578f",
      "parents": [
        "0e06a0989f4fc53e0d281a5a2cb5b5a17feaea0c"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Nov 11 23:45:34 2015 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Nov 13 15:21:29 2015 -0800"
      },
      "message": "Fix class unloading with the CC collector.\n\nAvoid unnecessarily decoding dex cache and class loader weak roots,\nwhich would trigger read barriers.\n\nRe-enable 141-class-unload with the CC collector.\n\nBug: 12687968\nBug: 24468364\nChange-Id: Ib4c19f25000873cab0e06047040442d135285745\n"
    },
    {
      "commit": "b190d945459253c329062dab2440671828275767",
      "tree": "83130dcf8177578489aafca94a9aca1348a83b29",
      "parents": [
        "cff81076cbb4bbe3841942f14326f4401fa3c8df"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 12 10:00:58 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 12 10:59:23 2015 -0800"
      },
      "message": "Add class loader argument to openDexFileNative\n\nBug: 22858531\nChange-Id: I315919d91822db0c73cf16b21d660d5870d5746f\n"
    },
    {
      "commit": "00310e0bb4ee541b99f0b687dbf5f706db2aabca",
      "tree": "bbb0bc2f829ed2ce145ca142c85da6181e2cd527",
      "parents": [
        "3ae313d9bc64eaa0c791452dd972654eae979496"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Oct 17 12:46:42 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 19 12:30:45 2015 -0700"
      },
      "message": "Keep dex files live in class table\n\nThe DexFile.loadClass API allows callers to load classes using a\ndex file without having that dex file owned by the specified class\nloader. We now add the dex file to the class table to make sure it\nstays live until the class loader is unreachable.\n\nFixes interpreter gcstress test 087 with 64 bit.\n\nBug: 22720414\nChange-Id: Ia4341149f45b6293312f8b275c7a68cea179f718\n"
    },
    {
      "commit": "4f55fd25111217e37001958b7069fe03292ff1a4",
      "tree": "bbf5555232c04d9dde9ad4198124247a6a767d2a",
      "parents": [
        "bc6cb93b2607e584fccdfe4e05ae74aa94e9e463",
        "d57d454a11ac6f49eaa397ec14d6231e3a2727b7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 15 15:52:53 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 15 15:52:53 2015 +0000"
      },
      "message": "Merge \"Allocate dex cache arrays in their class loader\u0027s linear alloc\""
    },
    {
      "commit": "d57d454a11ac6f49eaa397ec14d6231e3a2727b7",
      "tree": "ab8e705584702d73a6f943a02838a3225b1a5118",
      "parents": [
        "2248d278460f18db9bcdc5a1bdb2dcdfdde2d301"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 14 10:55:30 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 15 08:38:29 2015 -0700"
      },
      "message": "Allocate dex cache arrays in their class loader\u0027s linear alloc\n\nFixes memory leak for class unloading where the dex cache arrays\nused to be in the runtime linear alloc which never got freed.\n\nTODO: Some of the callers like the compiler just use the runtime\nlinear alloc. We could clean this up if we want to have class\nunloading during compilation for some reason.\n\nAdded regression test.\n\nBug: 22720414\n\nChange-Id: Ia50333a06a339efbdaedb5ad94b7a1ae841124ec\n"
    },
    {
      "commit": "80b37b7e679a530738c9bcbd39873b6dacf177e5",
      "tree": "03237803249050cbc97a1563adf1470b02a83e97",
      "parents": [
        "08583a096adb04e57b7b57ba4d87b006582e7ee9"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 12 18:13:39 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 14 16:06:20 2015 -0700"
      },
      "message": "Fix structural class checks\n\nEnabled for debug builds to prevent bit rotting. Changed\nDexFileAndClassPair to work with std::queue.\n\nRe-enabled structural check tests.\n\nChange-Id: Ia981564650bf1c7e418d8a73efcc15733ddf7501\n"
    },
    {
      "commit": "fdccbd418694a4216151e562faa5fd9fe6e12057",
      "tree": "d77cfadfd2bd9f47d5355ca34bf71dc0d4bf595b",
      "parents": [
        "f992a6394b7a00b518971fa2390bc6532f0a5623"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 14 10:58:41 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 14 10:58:41 2015 -0700"
      },
      "message": "Do not attempt to unregister null oat files\n\nThe oat file in the DexFile array may be null if we are running\nwithout dex2oat.\n\nBug: 22720414\nChange-Id: Ie1014b740caa77c3484a1671f29edb42bcc746c0\n"
    },
    {
      "commit": "e58991b3b2282b5761f1a6023a16c803e1c4eb45",
      "tree": "5a6fac6c5d3cb6a463463b83b8a34a53b07a8ede",
      "parents": [
        "fb11bab9bc96ff05dcb12f43abf58df256b7c7aa"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 13 07:59:34 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 13 13:17:50 2015 -0700"
      },
      "message": "Revert \"Revert \"Unload oat files\"\"\n\nFixed a race where two threads calling OatFile::Open could both use\ndlopen on the host.\n\nBug: 22720414\n\nThis reverts commit 72da5e7461fec3b1e116050f2e6f233efb9c54f3.\n\nChange-Id: I1636045b724944d2a09417527280784967957095\n"
    },
    {
      "commit": "72da5e7461fec3b1e116050f2e6f233efb9c54f3",
      "tree": "8b67f82fa1b8ffd6f272b267294cc71911a147f4",
      "parents": [
        "18656fefc7e68e2549a8fa93455074d359d1efa8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 13 07:26:45 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 13 07:26:45 2015 +0000"
      },
      "message": "Revert \"Unload oat files\"\n\nTentative, will monitor bots if flakiness is fixed.\n\nBug: 22720414\n\nThis reverts commit 18656fefc7e68e2549a8fa93455074d359d1efa8.\n\nChange-Id: I53b645b73207ccd21cad6ddac1de483bcc158794\n"
    },
    {
      "commit": "18656fefc7e68e2549a8fa93455074d359d1efa8",
      "tree": "034cf3a36079c23c9c6ef2659a90a54e45456c90",
      "parents": [
        "b5c810e91d8e3da02c12a490850c68d5d9d563c3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 09 16:05:31 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 12 11:12:02 2015 -0700"
      },
      "message": "Unload oat files\n\nUnregister and delete oat file when we call DexFile.closeDexFile if\nall of the dex files are no longer in use. We store the oat file as\nthe first element of the dex files array (cookie).\n\nAdded a test that reads the proc maps to ensure there are no\nunload-ex maps. Also some clean up.\n\nBug: 22720414\n\nChange-Id: I52ab84562d1045e94b9a37aafe57609a14f188f7\n"
    },
    {
      "commit": "f9c6fc610b27887f832e453a0da1789187293408",
      "tree": "3f45a15327e5bc7cb71e6c238ba75e87ae2e6058",
      "parents": [
        "793e6fbdefb092d1dab50bca5618aed110c7e037"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 07 11:44:05 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 09 12:57:53 2015 -0700"
      },
      "message": "Add OatFileManager\n\nTakes over a large amount of functionality from the class linker.\n\nChanged OatFile to loading the same OatFile multiple times. This is\nrequired for unloading OatFiles and moving dex caches to BSS since\nthese require a different OatFile for each dex cache and class\nloader.\n\nBug: 22720414\n\nChange-Id: I0321096723a294dc72949f21e66da82727b512fc\n"
    },
    {
      "commit": "1d7d7f15f9fbb1111d4b7d79c1dab2f49a5960dc",
      "tree": "ba866ba1b7726993f31a4fca1ade5a1a8626b5cd",
      "parents": [
        "4b6d025b914e82652ca72e2917b70b2231ead13f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 25 16:48:57 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 05 11:52:26 2015 -0700"
      },
      "message": "Delete DexFiles in closeDexFiles\n\nTODO: Also unmap oat code.\n\nBug: 22720414\nChange-Id: I4d003d9b7f8c22890e7b40121a73081524e71f42\n"
    },
    {
      "commit": "673ed3d8aedc5462a47ded827c99f35d46525457",
      "tree": "83de4690228c9f7772c48c770c5e2e5ba2dac6fe",
      "parents": [
        "ce209462cc1a7ce235e5ac0d0e6db6b402f73441"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 28 14:56:43 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Aug 31 10:58:31 2015 -0700"
      },
      "message": "Revert \"Revert \"Change dex caches to be weak roots\"\"\n\nThis reverts commit 81a9087f0df0518c39405b7d18ba5858a6d8b77b.\n\nBoot.oat creation time goes from 4.7s to 4.9s on host due to extra\nlocking. Will try to improve this in another CL.\n\nBug: 23602225\nBug: 22720414\n\nChange-Id: I7e25b75cfb63faa196c7b0f60e46cce50bf12021\n"
    },
    {
      "commit": "81a9087f0df0518c39405b7d18ba5858a6d8b77b",
      "tree": "f4936654805b4d84540bd909095e8bbf69795bfd",
      "parents": [
        "f86a0859684c0f8964da4cbe75d49df8f832e85b"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Aug 28 09:07:14 2015 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Aug 28 09:07:14 2015 -0700"
      },
      "message": "Revert \"Change dex caches to be weak roots\"\n\nThis reverts commit 3ae6b1d42523bb2a0ddb5edff1aaf05b592f28f4.\n"
    },
    {
      "commit": "3ae6b1d42523bb2a0ddb5edff1aaf05b592f28f4",
      "tree": "9ae990956db3d2d5970fb15bf264aeeb73e2bfe0",
      "parents": [
        "dcff51a0079c5e3abaf0335f7cb9a3dd44044456"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 14 14:03:10 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 25 18:00:47 2015 -0700"
      },
      "message": "Change dex caches to be weak roots\n\nChanged dex caches to be weak roots. This is necessary for class\nunloading since the resolved types arrays would keep classes live\nwhen they should be unloaded. Currently the dex caches still don\u0027t\nget freed due to the class loader roots.\n\nAlso deleted some unused functionality in image writer.\n\nBug: 22720414\nChange-Id: If22cb3cad7e3baabc8158a77d7f20799faf4c341\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"
    }
  ],
  "next": "bc1d78daa463572c5a770cdca858a3b51d8e1b7b"
}
